Page History
Wiki Markup |
---|
{toc}
h1. 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.
h2. 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 {tt}xtcsummary.py <filename(s)>{tt}
h2. 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.
h3. Plotting with MatPlotLib. A comparison with MatLab.
|| MatLab || MatPlotLib || Comments ||
| {color:darkgreen}Loglog plot of one array vs. another{color}
{code} |
Table of Contents |
---|
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
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
...
{code} | {color:darkgreen}Loglog plot of one array vs. another{color} {code}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') |
...
{code} | 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:plain-text-body></ac:structured-macro>
...
test
...
test
...
Test
...
array of limits from graphical input
...
array of limits from graphical input
...
...
\\ \\ Note also the use of paranthesis, array() in MatLab, array\[\] in MatPlotLib. | | test | test | Test | | array of limits from graphical input | array of limits from graphical input | | | {code}axes(a1) hold on lims(1:2,:) = ginput(2); axes(a2) hold on lims(3:4,:) = ginput(2); |
...
{code} | {code}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] ) |
...
{code} | 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. |
...
...
...
...
filter
...
filter
...
...
\\ \\ 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} 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} | {code} 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
...
...
...
{code} | Comment |
| | | | |