You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 52 Next »

Event display / xtc file browser

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 (XtcEventBrowser) is also not a real browser, but allows a simple-to-run interface to the xtc files. The package name is XtcEventBrowser, the executables (xtcbrowser and xtcscanner) are found in the app subdirectory of this package, and all other code is in the src subdirectory.

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.

Note! This tool is under development... features are being added and new versions available often. This documentation might be slightly outdated, but the version mentioned here should work as advertised.

To run, you need to set up an offline release in your directory:

[user@psana0XXX ~] newrel ana-current myrelease
[user@psana0XXX ~] cd myrelease

Add the xtc browser package to your analysis release and "compile":

[user@psana0XXX myrelease] addpkg XtcEventBrowser
[user@psana0XXX myrelease] scons

Run the program with the command 'xtcbrowser' and optionally give the input xtc files that you want to read as arguments. You can also browse to find files after launching the browser.

[user@psana0XXX myrelease] xtcbrowser /reg/d/psdm/cxi/cxi80410/xtc/e55-r0581*

This will open a Gui. After opening file(s), click the "Quick Scan" button to scan the first 1000 events in the file. After scanning, a new window will pop up, allowing to select detectors/devices to make plots from. The plots are made via pyana. Configuration file for pyana will be generated automatically. To customize your analysis, you can edit the pyana config file and pyana files in XtcEventBrowser package to fit your need, then run pyana by itself (see 'pyana -h' for more help, or the pyana section of confluence).

A few things to note about the different detectors:

  • CsPad: CsPad data is reconstructed in pyana_cspad.py. The image plot value limits are adjusted automatically, but if
    you want to change them, click on the color bar (left-click for low limit, right-click for high limit).
    The successive events will be plotted with the new limits. Revert to the original by middle-clicking.
    To run this module by itself with pyana:
    pyana -m XtcEventBrowser/src/pyana_cspad.py <xtc files>
    
    Options must be specified in a configuration file, or the default values will be used, e.g.:
    image_source    =  CxiDs1-0|Cspad-0   # string, Address of Detector-Id|Device-ID
    draw_each_event =                     # bool, Draw plot for each event? (Default=False).
    dark_img_file   =                     # filename, Dark image file to be loaded, if any
    save_average    =                     # bool, Collect images for saving (e.g. darks) (Default=False)
    output_file     =                     # filename (If collecting: write to this file)
    plot_vrange     =                     # range=vmin-vmax (intensity) to be plotted, default is full range
    threshold       =                     # lower threshold for image intensity in threshold area of the plot
    thr_area        =                     # range=xmin,xmax,ymin,ymax defining threshold area
    

xtcscanner

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

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

Any serious data analysis will need more customized tools than we can provide in a GUI interface. This will require the user / analyst to program his/her own tools. Pyana is a complete framework for programming a user analysis in python. The Gui Event Browser can provide simple analysis code that can be expanded by the user. "Blank" analysis code can also be generated with Andy's codegen script (try codegen -h and codegen -p for options).

More information about pyana can be found on confluence.

Data visualization with NumPy (arrays) and MatPlotLib (plots).

Saving (and loading) a numpy array (e.g. image) to (from) a file

import numpy as np

# binary file .npy format
np.save("filename.npy", array)
array = np.load("filename.npy")

# txt file
np.savetxt("filename.dat", array)
array = loadtxt("filename.dat")

A comparison with MatLab.

MatLab

MatPlotLib

Comments

Loglog plot of one array vs. another

%
%
%
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

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="46fd93c7-62cd-4710-83ec-5742a67da795"><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

 

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

axes(a2)
hold on
lims(3:4,:) = ginput(2);
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

 

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') 
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

 

 

 

  • No labels