Versions Compared

Key

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

...

Here are some example plots made.

  • image 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 Added

...

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
    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    =  CxiDs1-0|Cspad-0   # string, Address of Detector-Id|Device-ID
    draw_each_event =          # "base" number for matplotlib figure numbering     # bool, Draw plot for each event? (Default=False).
    dark_img_file   =                     # filename, Dark image file to be loaded, if any
    plot_vrange     =                     # range=vmin-vmax (intensity) to be plotted, default is full range
    threshold       =                     # lower threshold for image intensity in threshold area of the plot
    thr_area        =                     # range=xmin,xmax,ymin,ymax defining threshold area
    output_file     =                     # filename for saving numpy array with average of images
    

...

  • 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 and issue the plt.show() command when "Interactive" display mode is requested. If you choose to run single modules without this one, you may need to add a plt.show() command in the module if you want figures to pop up.
    Code Block
    
    display_mode = 2    #   Interactive (1) or SlideShow (2) or NoDisplay (0)
    
  • 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
    plot_every_n     # int, Draw plot for every N event? (if None or 0, don't plot till end)
    fignum           # int, Matplotlib figure number
    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
    
  • 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.

...

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="4f3e03c2b7eb22f3-5b038ded-486a4852-9bcbb24c-3a8584843644a3ece7330ded"><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