Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Xtc files contain the raw data streamed from the DAQ online system, therefore they are not indexed and the events don't always line up in the "right" order. Therefore it's not straight-forward to browse (back and fourth) through an xtc file. This tool is also not a real browser, but allows a simple-to-run interface to the xtc files.

xtcbrowser

This tool is written in python, relying on PyQt4 for graphical user interface. The data processing is done via the pyana framework and visualization provided by matplotlib.

...

  • CsPad: CsPad data is reconstructed in pyana_cspad.py. To run this module by itself with pyana:
    Code Block
    pyana -m XtcEventBrowser/src/pyana_cspad.py <xtc files>
    
    Options must be specified in a configuration file, or the default values will be used:
    Code Block
    image_source = CxiDs1-0|Cspad-0   # specify image source
    draw_each_event = 0                # if this is 1 (True), image is drawn for each event
    dark_img_file = my_darks.npy       # Name of dark-image file (binary numpy array file) if you have one, or want to make one.
    collect_darks = 0                  # This must be set to 1 if you want to create the dark-image file
    

XtcScanner

A rewrite of xtcsummary.py, to be usable as a library module for the event browser. Can be run just like the script above:

Code Block
XtcScanner.py <filename(s)>

XtcBrowserMain.py

XtcBrowserMain is a class in the XtcEventBrowser package. It opens a GUI:

  • Input xtc file name(s) via:
    • file browser
    • text input line
  • Options to scan the files for contents (making use of XtcExplorer)
    • Quick scan reads only the first 1000 events (sufficient to see what detectors were in use)
    • Full scan of all files (needed to know how many events and calibration cycles were in the given run(s).
  • Output from scan can be used to configure pyana. Checkboxes for each detector found.
  • Run simple pyana analysis via a button
  • Can be run from interactive ipython session
  • (Should be able to) Return prompt to ipython to continue working on plots / redraw.
  • Write pyana script for the simple analysis done by the Gui, which the user can modify to have more control and options for further analysis.

...

xtcscanner

This is a command-line interface to the XtcScanner class that makes a summary of the xtc file.

Code Block

usage: xtcscanner [options] xtc-files ...

options:
  -h, --help            show this help message and exit
  -n NDATAGRAMS, --ndatagrams=NDATAGRAMS
  -v, --verbose
  -l L1_OFFSET, --l1-offset=L1_OFFSET

Further analysis with pyana

...

MatLab

MatPlotLib

Comments

Loglog plot of one array vs. another

Code Block
%
%
%
a1 = subplot(121);
loglog(channels(:,1),channels(:,2),'o')
xlabel('CH0')
ylabel('CH1')
a2 = subplot(122);
loglog(channels(:,3),channels(:,4),'o')
xlabel('CH2')
ylabel('CH3')

Loglog plot of one array vs. another

Code Block
import matplotlib.pyplot as plt
import numpy as np

a1 = plt.subplot(221)
plt.loglog(channels[:,0],channels[:,1], 'o' )
plt.xlabel('CH0')
plt.ylabel('CH1')
a2 = plt.subplot(222)
plt.loglog(channels[:,2],channels[:,3], 'o' )
plt.xlabel('CH2')
plt.ylabel('CH3')

channels is a 4xN array of floats, where N is the number of events. Each column corresponds to one out of four Ipimb channels.

Note that the arrays are indexed with 1,2,3,4 in MatLab and 0,1,2,3 in MatPlotLib/NumPy/Python.

<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="95c3a0b3f0c2fff4-0d0a9939-4abd4c4b-b66f9dfc-6c228cbf67f9300137be030e"><ac:plain-text-body><![CDATA[Note also the use of paranthesis, array() in MatLab, array[] in MatPlotLib.

]]></ac:plain-text-body></ac:structured-macro>

test

test

Test

array of limits from graphical input

array of limits from graphical input

 

Code Block
axes(a1)
hold on
lims(1:2,:) = ginput(2);

axes(a2)
hold on
lims(3:4,:) = ginput(2);
Code Block
plt.axes(a1)
plt.hold(True)
limslista = plt.ginput(2)

plt.axes(a2)
plt.hold(True)

limslistb = plt.ginput(2)
limsa = np.array(limslista)
limsb = np.array(limslistb)

lims = np.hstack( [limsa, limsb] )

In MatLab, lims is an expandable array that holds limits as set by input from mouse click on the plot (ginput).
NumPy arrays cannot be expanded, so I've chosen to append to a python list first, then fill a NumPy array for the usage to look the same.

The exact usage of the lims array depends on where you place each limit. I think perhaps I've done it differently from the MatLab version.

 

 

 

filter

filter

 

Code Block
fbool1 = (channels(:,1)>min(lims(1:2,1)))&(channels(:,1)<max(lims(1:2,1)))
fbool2 = (channels(:,2)>min(lims(1:2,2)))&(channels(:,2)<max(lims(1:2,2)));
fbool = fbool1&fbool2
loglog(channels(fbool,1),channels(fbool,2),'or')

fbool3 = (channels(:,3)>min(lims(3:4,3)))&(channels(:,3)<max(lims(3:4,3)))
fbool4 = (channels(:,4)>min(lims(3:4,4)))&(channels(:,4)<max(lims(3:4,4)));
fbool = fbool3&fbool4
loglog(channels(fbool,3),channels(fbool,4),'or') 
Code Block
fbools0 = (channels[:,0]>lims[:,0].min())&(channels[:,0]<lims[:,0].max())
fbools1 = (channels[:,1]>lims[:,1].min())&(channels[:,1]<lims[:,1].max())
fbools = fbools0 & fbools1

fbools2 = (channels[:,2]>lims[:,2].min())&(channels[:,2]<lims[:,2].max())
fbools3 = (channels[:,3]>lims[:,3].min())&(channels[:,3]<lims[:,3].max())
fbools = fbools2&fbools3

Comment