Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

This page is currently under revision. See an earlier version (e.g. v77) of this page ("Tools"->"Page History") to get self-consistent documentation.

...

Note! This tool is under development... features are being added and new versions available often. This documentation might be slightly outdated, but if you use the tagged version (VXX-XX-XX) mentioned here it should work as advertised.

How to

...

get started

To run, you need to set up an offline release in your directory (See the Account Setup section to set up the analysis environment):

...

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

Description of the GUIs

Image Added Image Added Image Added Image Added

LCLS Xtc Event Browser

The procedure above will open a GUI, the main browser. It allows you to browse for files, and to run a scan to see what's in the file. Maybe "scan" is not a good choice of word... it parses the xtc file and investigate what kind of data is there.

...

  • "Available Detectors/Devices": In front of each detector/device name is a checkbox, where you can select which datagrams you are interested in analysing / plotting.
  • "Current pyana configuration": Initially this field is blank. But as you select devices from the list, a tentative configuration file for running pyana is written and shown in this field. At the same time, another two buttons shows ut:
  • "Write configuration to file" and "Edit configuration file". You need to write the configuration to file to be able to run pyana (which picks up this file).
  • "Run pyana" button will appear once you've written to file. You can still edit the file (which lauches an emacs window... my apologies to non-emacs-users... Will have a more generic solution soon'ish). "Run pyana" lauches an input GUI that shows you the runstring. You can use the same runstring from the command line. Or hit "OK" and it'll run.
  • After launching pyana, another button "Quit pyana" appears... If you see you need to change parameters, you can stop pyana, edit the configuration file, and start over again.

More information on how to run pyana by itself (see 'pyana -h' for more help, or the pyana section of confluence).

  • , and start over again.

More information on how to run pyana by itself (see 'pyana -h' for more help, or the pyana section of confluence).Image Removed The main GUI. Allows you to browse for the files you want to inspect. Once you have selected files, click "Scan" to proceed.
Image Removed After "Scan" has finished, a new window shows you what data is available in the file(s). Select the ones you're interested in.
Image Removed When you select data for plotting, a pyana configuration file will be displayed. To proceed, save the configuration to file.
Image Removed After the configuration file has been written, you have the options of editing it by hand, and running pyana. If you hit "Run pyana", another dialog will open with the run command. You can also edit this (e.g. add option -n 100 to run only 100 events), or click "OK" to run as is. Once pyana has started running, another button will appear that allow you to quit the pyana job. Tune your configuration script as needed and run again.

Example plots: one event from CsPad with background subtraction and filter. Some beamline data plots: Beam energy and position, Gas detector energy measurements.

...

MatLab

MatPlotLib

Comments

Loglog plot of one array vs. another

Code Block
%
%
%
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 Block
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="2507a5f1744ef313-9a90dbe6-44d84265-af648e0b-c858204893ce7e830b8d3a47"><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

 

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

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

 

Code Block
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 Block
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