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

Compare with Current View Page History

« Previous Version 27 Next »

This is a page describing work in progress. Once it is usable to the general community, this documentation will be moved to the Users Data Analysis section.

Event browser for Xtc files

This page summarizes initial attempts at an event browser or simple plotting tool for Xtc files that should be easy to use. It 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.

Xtc file reader: xtcsummary.py

Text output listing the contents of an xtc file. Similar to pyxtcreader, but instead of listing all datagrams, it loops through and prints only a summary.

Usage:

xtcsummary.py <filename(s)>

XtcExplorer

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

XtcExplorer.py <filename(s)>

LclsXtcEventBrowser.py

LclsXtcEventBrowser 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.

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 the 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).

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="548af8e9-ecce-4da5-8468-8b08c023cfb0"><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