Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
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 |
| | | |