Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Table of Contents
maxLevel3

This page is under revision. To get self-consistent documentation, see previous version (v89)

Event display / xtc file browser

...

After scanning, a new GUI will pop up showing you a list of detectors/devices found in the file. A little more information is written to the terminal window too.

...

Image Added Image Added

Main window (top) after the file scan. In this case the file contain several "calibration cycles" (motor scan steps), and the GUI lists number of calibration cycles and number of events. Some more information is printed to the terminal window from which the xtcbrowser was launched.

Another window, pyana control center (bottom), also pops up, which has a few fields. "In the file(s):" In front of each detector/device name is a checkbox, where you can select which datagrams you are interested in analysing / plotting.

...

Image Removed Image Removed

...

Image Removed Image Removed

...

To the right of this is a field with some general information and where you can set general parameters for pyana processing and plotting in this GUI, among them how often to update plots (default is every 100 events).

Image Added Image Added

Once you checkmark the detectors you want to display information from, another tab will pop up showing pyana configuration text. "Current pyana configuration": as you select devices from the list, a tentative configuration file for running pyana is written and shown in this field.

If a ControlPV is present and checked off, only a pyana_scan module will be used. All the other devices you check will be added to the input of the scan.
If no ControlPV is used, other pyana modules will be configured as appropriate to display a variety of information from the events.
If "Epics Process Variables" are checked off, another Gui appears that lists all the epics variables. Select the ones you want to display.

Press the "Write configuration to file" button once you're done. You can further edit the file by hand if you want. Once a file is written, a "Run pyana" button will appear.

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

The pyana modules

The GUI as described above prepares a configuration file for you to run pyana. You can either run it from the GUI or you can run it from the command line. The configfile sets input parameters for the pyana modules in this package. Feel free to use one or more of these modules as a starting point for your more elaborate pyana analysis!

Code Block

XtcEventBrowser/src/pyana_bld.py          # display of Beam-line data
XtcEventBrowser/src/pyana_cspad.py        # display of CsPad image data
XtcEventBrowser/src/pyana_image.py        # display of camera image data
XtcEventBrowser/src/pyana_ipimb.py        # display of diode data from IPIMB and PIM
XtcEventBrowser/src/pyana_waveform.py     # display of waveform data (not fully functional yet)
XtcEventBrowser/src/pyana_epics.py        # display of Epics PV data (not fully functional yet)
XtcEventBrowser/src/pyana_scan.py         # display of motor scan data
XtcEventBrowser/src/pyana_plotter.py      # a plotter module to control the event display

...

A few things to note about the different detectors / pyana modules:

  • A few configuration parameters are common to all modules, and their default values are set to be the same, but can also be set differently.
    Code Block
    
    plot_every_n = 10  # If 0, don't plot till the end of the job. Else, display every N events
    fignum = 1         # "base" number for matplotlib figure numbering scheme
    
  • pyana_plotter: This module is added to the end of the job, after other modules. It does nothing (yet) than control the display mode. Default is SlideShow mode.
    Code Block
    
    display_mode = 2    #   Interactive (1) or SlideShow (2) or NoDisplay (0)
    
  • pyana_scan: This module is different from the others. It does a "motor scan", displays certain values as a function of scan step of a motor scan. The motor name is given in the xtc file as the Control PV. There may be more than one control PV. It currently takes two scalar type inputs to evaluate the scan:
    Code Block
    
    input_epics         # Name(s) of other scalars to correlate in scan
    input_scalars       # Name(s) of other scalars to correlate in scan
    
    Image Added
  • "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).

The pyana modules

This is probably where most changes will happen soon. Currently each type of detector is processed in different pyana modules, which makes correlation plots cumbersome. But this is on the list of features to be included. At the moment, only certain plots are displayed, via matplotlib, and the only way to really get the plots that you want is to edit the pyana source code!!! You can find it in XtcEventBrowser/src/ directory, all the pyana modules are called pyana_whatever.py. Feel free to treat these files as examples and edit them to fit your needs. The implementation will soon be more generic and customizable.

Here are some example plots made.

  • Image display of the CSPad detector, background subtracted. This is currently the only display that has interactive features. A filter allows you to select events within requested intensity range.
  • Beam energy and position
  • Gas detector energy measurements
  • Displays of three different Pulnix TM6740 images of YAG screens, after rotation/translation. Also shown, differences between images and FFT of differences.
    Image Removed Image Removed Image Removed Image Removed

A few things to note about the different detectors / pyana modules:

  • A few configuration parameters are common to all modules, and their default values are set to be the same, but can also be set differently.
    Code Block
    
    plot_every_n = 10  # If 0, don't plot till the end of the job. Else, display every N events
    fignum = 1         # "base" number for matplotlib figure numbering scheme
    
  • pyana_plotter: This module is added to the end of the job, after other modules. It does nothing (yet) than control the display mode. Default is SlideShow mode. Code Block display_mode = 2 # Interactive (1) or SlideShow (2) or NoDisplay (0)
  • pyana_cspad: CsPad data is reconstructed in pyana_cspad.py. The image plot value limits are adjusted automatically, but if
    you want to change them, click on the color bar (left-click for low limit, right-click for high limit).
    The successive events will be plotted with the new limits. Revert to the original by middle-clicking.
    To run this module by itself with pyana:
    Code Block
    pyana -m XtcEventBrowser/src/pyana_cspad.py <xtc files>
    
    Options must be specified in a configuration file, or the default values will be used, e.g.:
    Code Block
    image_source     # string, Address of Detector-Id|Device-ID
    dark_img_file    # filename, Dark image file to be loaded, if any
    output_file      # filename (If collecting: write to this file)
    plot_vrange      # range=vmin-vmax of values for plotting (pixel intensity)
    threshold        # lower threshold for image intensity in threshold area of the plot
    thr_area         # range=xmin,xmax,ymin,ymax defining threshold area
    ymax defining threshold area
    

    Image Added

    Image display of the CSPad detector, background subtracted. This is currently the only display that has interactive features. A filter allows you to select events within requested intensity range.

  • pyana_image.py processes generic camera frames, e.g from Pulnix TM6740 device. It allows any number of images, given as a space-separated list of addresses in the
    configuration file.
    • You can set ranges to define good images and dark images. If both are set, you have the option to display good images background subtracted, where background subtraction is based on the average of background images so far collected.
    • Each image can be separately rotated, shifted and scaled (zoomed in/out).
    • Nicknames can be given to the input images. Defaults are Im1, Im2... etc. These names will be used if you plot differences, or other manipulations of the original images.
    • The images are subtracted and differences displayed as well as fourier transform of differences. Examples of what may be displayed. To display other things, at this stage you have to edit pyana_image.py to change this behaviour.
      Code Block
       image_addresses     # address string of Detector-Id|Device-ID
       good_range          # threshold values selecting images of interest (Format: low--high)
       dark_range          # threshold values selecting dark images (Format: low--high)
       image_rotations     # rotation angle, in degrees, to be applied to image(s)
       image_shifts        # npixel shifts, format (nx,ny), to be applied to image(s)
       image_scales        # scale factor (float) to be applied to images
       image_nicknames     # nicknames for plot titles
       image_manipulations # String containing keywords: Diff, FFT
       output_file         # filename. Valid extensions are .hdf5, .txt (ascii) or .npy (numpy binary)
       n_hdf5              # if output file is hdf5, combine n events in each output file.
      

      Image Added

      Displays of three different Pulnix TM6740 images of YAG screens, after rotation/translation. Also shown, differences between images and FFT of differences.

  • pyana_ipimb
    Code Block
    ipimb_addresses     # list of IPIMB addresses
    
    Image Added
  • pyana_epics
    Code Block
    pv                  # Name(s) of the EPICS PV(s) to dump
    
  • pyana_bld
    Code Block
     do_ebeam            # Plot data from EBeam object
     do_gasdetector      # Plot data from GasDetector
     do_phasecavity      # Plot data from PhaseCavity
    
    Image Added Image Added Beam energy and position. Gas detector energy measurements

xtcscanner

This is a command-line interface to the XtcScanner class that makes a summary of the xtc file.

...

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="7f58336f3208632e-a39c1ba9-417b43a1-ae9b9c61-3851d254487fa9f5950176c6"><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
lims = np.zeros((4,2),dtype="float")

plt.axes(a1)
plt.hold(True)
lims[0:2,:] = plt.ginput(2)

plt.axes(a2)
plt.hold(True)
lims[2:4,:] = plt.ginput(2)

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 declared a 4x2 array of zeros to start with, then fill it with ginput().

 

 

 

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