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

Compare with Current View Page History

« Previous Version 8 Next »

Event browser for Xtc files

Xtc is the online data format. For a faster look at the data, we need a quick tool to make simple analysis plots from the xtc data.

Xtc file reader: xtcsummary.py

Text output listing the contents of an xtc file.

Analysis with pyana

Pyana is already a complete tool for analyzing xtc files. The user needs to write some code in python to load the data of interest. (We should provide more examples). Matplotlib is suitable for plotting in the pyana framework.

Plotting with MatPlotLib. A comparison with MatLab.

MatLab

MatPlotLib

Comments

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')
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="d838a56a-dc99-46c4-9239-7cd0bf85a719"><ac:plain-text-body><![CDATA[Note also the use of paranthesis, array() in MatLab, array[] in MatPlotLib.

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

axes(a1)
hold on
set(gca,'xcolor','r','ycolor','r')
lims(1:2,:-) = ginput(2);

axes(a2)
hold on
set(gca,'xcolor','r','ycolor','r')
lims(3:4,:-) = ginput(2);

set(gca,'xcolor','k','ycolor','k')
fbool = (filtvec(channels(:,1),lims(1:2,1))&filtvec(channels(:,2),lims(1:2,2)));
loglog(channels(fbool,1),channels(fbool,2),'or')

set(gca,'xcolor','k','ycolor','k')
fbool = (filtvec(channels(:,3),lims(3:4,1))&filtvec(channels(:,4),lims(3:4,2)));
loglog(channels(fbool,3),channels(fbool,4),'or')

plt.axes(a1)
plt.hold(True)
aa = plt.gca()
aa.set_xcolor = 'k'
aa.set_ycolor = 'k'
limslista = plt.ginput(2)
# list: (x0,y0),(x1,y1)

plt.axes(a2)
plt.hold(True)
bb = plt.gca()
bb.set_xcolor = 'k'
bb.set_ycolor = 'k'
limslistb = plt.ginput(2)
# list: (x2,y2),(x3,y3)

limsa = np.array(limslista)
# \[ x0   y0
# x1   y1 \]

limsb = np.array(limslistb)
# \[ x2   y2
# x3   y3 \]

lims = np.hstack( [limsa, limsb] )
# \[ x0  y0  x2  y2       =    \[ ch0  ch1  ch2  ch3 \]
# x1  y1  x3  y3 \]
# now each column corresponds to one channel.

print "limits array : ", lims

# fbool is an array of event indices where these conditions are met.
fbools0 = (channels[:,0]>lims[:,0].min())&(channels[:,0]<lims[:,0].max())
fbools1 = (channels[:,1]>lims[:,1].min())&(channels[:,1]<lims[:,1].max())
fbools2 = (channels[:,2]>lims[:,2].min())&(channels[:,2]<lims[:,2].max())
fbools3 = (channels[:,3]>lims[:,3].min())&(channels[:,3]<lims[:,3].max())

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.

  • No labels