Page History
Include Page | ||||
---|---|---|---|---|
|
Table of Contents |
---|
Include Page | ||||
---|---|---|---|---|
|
About
This page provides examples for selected modules from psana - Module Catalog.
...
See Module CSPadPixCoords::CSPad2x2NDArrProducer
Example for module CSPadPixCoords::
...
CSPad2x2NDArrReshape
Example of the configuration script for psana (cspad2x2-test.cfg):configuration file
Code Block |
---|
Code Block | bgColor | #F7F7ED
[psana] files#files = exp=meca1113:run=376 #events = 10 ##skip-events = /reg/d/psdm/<instrument>/<experiment>/xtc/<file-name-1>.xtc events= 0 modules = cspad_mod.CsPadCalib \ = 5 modulesCSPadPixCoords.CSPad2x2NDArrProducer:clb \ = CSPadPixCoords.CSPad2x2ImageProducer ImgAlgos.ImgSaveInFile [CSPadPixCoords.CSPad2x2ImageProducer] sourceCSPad2x2NDArrProducer:raw \ = DetInfo(:Cspad2x2) inkeyCSPadPixCoords.CSPad2x2NDArrReshape \ =ImgAlgos.NDArrAverage:clb \ outimgkey = Image tiltIsAppliedImgAlgos.NDArrAverage:raw # = true print_bits = 15EventKeys [ImgAlgoscspad_mod.ImgSaveInFileCsPadCalib] sourceinputKey = outputKey = DetInfo(:Cspad2x2) keyclb_data doPedestals = yes doPixelStatus = yes doCommonMode = yes [CSPadPixCoords.CSPad2x2NDArrProducer:clb] source = MecTargetChamber.0:Cspad2x2.1 inkey = clb_data outkey = Image fnamecspad2x2.1_clb:as_data outtype = int16 print_bits = 5 [CSPadPixCoords.CSPad2x2NDArrProducer:raw] source = cspad2x2 saveAllMecTargetChamber.0:Cspad2x2.1 inkey = outkey = true #eventSavecspad2x2.1_raw:as_data outtype = int16 print_bits = 5 |
Command to run:
psana -c cspad2x2-test.cfg
One of the saved files cspad2x2-<run>-<timestamp>.txt
is plotted as an image by the command
./PlotCameraImageFromFile.py cspad2x2-<run>-<timestamp>.txt 0 1200
Configuration file for cspad2x2 with pedestal subtraction
Note |
---|
Access to the CSPad2x2 aligned geometry is added on 2013-02-13 |
Example of <psana-config-file.cfg>:
Code Block | ||
---|---|---|
| ||
[psana] files = /reg/d/psdm/mec/mec73313/xtc/e268-r0180-s02-c00.xtc #calib-dir = ./calib modules = cspad_mod.CsPadCalib CSPadPixCoords.CSPad2x2ImageProducer ImgAlgos.ImgSaveInFile events = 5 [cspad_mod.CsPadCalib] source [CSPadPixCoords.CSPad2x2NDArrReshape] source = MecTargetChamber.0:Cspad2x2.1 keys_in = cspad2x2.1_raw:as_data cspad2x2.1_clb:as_data print_bits = 255 [ImgAlgos.NDArrAverage:clb] source = MecTargetChamber.0:Cspad2x2.1 key = cspad2x2.1_clb avefile = DetInfo(MecTargetChamber.0:Cspad2x2.3) inputKey= arr-ave-clb rmsfile = outputKey = calibrated_arr doPedestalsarr-rms-clb print_bits = yes255 doPixelStatus = no doCommonMode = no [CSPadPixCoords.CSPad2x2ImageProducer] calibDir [ImgAlgos.NDArrAverage:raw] source = /reg/d/psdm/mec/mec73313/calib typeGroupName = CsPad2x2::CalibV1 #source = DetInfo(MecTargetChamber.0:Cspad2x2.3)1 sourcekey = :Cspad2x2.3 inkey cspad2x2.1_raw avefile = calibrated_arr-ave-raw outimgkeyrmsfile = Image tiltIsApplied = true arr-rms-raw print_bits = 15 [ImgAlgos.ImgSaveInFile] source255 |
This script produces raw and calibrated ndarrays shaped as data (185,388,2), then pass these arrays as
keys_in =
...
cspad2x2.1_raw:as_data cspad2x2.1_clb:as_data
to the CSPadPixCoords.CSPad2x2NDArrReshape module, which produces two reshaped (2,185,388) arrays and saves them in the event store with default keys
cspad2x2.1_raw, cspad2x2.1_clb
(suffixes are dropped)
then both re-shaped arrays are averaged and saved in files on disk.
Example of associated python script:
Code Block |
---|
#!/usr/bin/env python
import sys
import numpy as np
import matplotlib.pyplot as plt
import psana
psana.setConfigFile('psana-meca1113-r0376-cspad2x2-CSPad2x2NDArrReshape.cfg')
dsname = 'exp=meca1113:run=376'
print "Data source: %s" % dsname
ds = psana.DataSource(dsname)
#------------------------------
print "Initializing Matplotlib Plotter"
fig = plt.figure(figsize=(10,5), dpi=80, facecolor='w', edgecolor='w', frameon=True)
plt.ion()
plt.show()
evnum = 0
evnum_max = 50
for evt in ds.events() :
evtid = evt.get(psana.EventId)
evnum += 1
if evnum > evnum_max : break
img_as_data = evt.get(psana.ndarray_int16_3, psana.Source('DetInfo(MecTargetChamber.0:Cspad2x2.1)'), 'cspad2x2.1_clb:as_data')
img_reshpd = evt.get(psana.ndarray_int16_3, psana.Source('DetInfo(MecTargetChamber.0:Cspad2x2.1)'), 'cspad2x2.1_clb')
print 'img_as_data.shape = ', img_as_data.shape
print 'img_reshpd.shape = ', img_reshpd.shape
img_as_data.shape = (2*185,388)
img_reshpd.shape = (2*185,388)
ax1 = fig.add_axes([0.05, 0.06, 0.44, 0.87])
ax2 = fig.add_axes([0.55, 0.06, 0.44, 0.87])
fig.canvas.set_window_title('Image from arrays "as-data" and "reshaped"')
imsh1 = ax1.imshow(img_as_data, interpolation='nearest', aspect='auto', origin='upper') # , extent=img_range)
imsh2 = ax2.imshow(img_reshpd, interpolation='nearest', aspect='auto', origin='upper') # , extent=img_range)
plt.title("Event: %d.%d" % evtid.time())
plt.draw()
plt.clf() |
This script retrieves from the event store calibrated ndarrays shaped as data (185,388,2) and re-shaped (2,185,388), then re-shape both to 2-d arrays (2*185,388) and plot them. Re-shaped array looks as recognizable (without spaces between ASICs) cspad2x2 image. Array shapes "as data" looks as an overlap of two images.
See Module CSPadPixCoords::CSPad2x2NDArrReshape
JIRA issue:
Jira | ||||
---|---|---|---|---|
|
Example for module CSPadPixCoords::CSPad2x2ImageProducer
See Module CSPadPixCoords::CSPad2x2ImageProducer
Example of the configuration script for psana (cspad2x2-test.cfg):
Code Block | ||
---|---|---|
| ||
[psana]
files |
Example of psana configuration file to get cspad2x2 images for two detectors and save them in files, one in txt, another in tiff formats:
Code Block | ||
---|---|---|
| ||
[psana] files = /reg/d/psdm/xpp/xpptut13/xtc/e308-r0008-s02-c00.xtc \ /reg/d/psdm/xpp/xpptut13/xtc/e308-r0008-s03-c00.xtc #modules = cspad_mod.CsPad2x2Pedestals #calib-dir = ./calib calib-dir = /reg/d/psdm/xpp/xpptut13/xtc/calib modules = cspad_mod.CsPadCalib:0 \ cspad_mod.CsPadCalib:1 \ CSPadPixCoords.CSPad2x2ImageProducer:0 \ CSPadPixCoords.CSPad2x2ImageProducer:1 \ ImgAlgos.ImgSaveInFile:0 \ ImgAlgos.ImgSaveInFile:1 events = 5 [cspad_mod.CsPadCalib:0] source = DetInfo(XppGon.0:Cspad2x2.0) inputKey = outputKey = calibrated_arr0 doPedestals = yes doPixelStatus = no doCommonMode = yes [cspad_mod.CsPadCalib:1] source = DetInfo(XppGon.0:Cspad2x2.1) inputKey = outputKey = calibrated_arr1 doPedestals = yes doPixelStatus = no doCommonMode = yes [CSPadPixCoords.CSPad2x2ImageProducer:0] calibDir = /reg/d/psdm/xpp/xpptut13/xtc/calib typeGroupName = CsPad2x2::CalibV1 source = DetInfo(XppGon.0:Cspad2x2.0) inkey = calibrated_arr0 outimgkey = Image tiltIsApplied/reg/d/psdm/<instrument>/<experiment>/xtc/<file-name-1>.xtc events = false useWidePixCenter = false5 print_bitsmodules = 15 CSPadPixCoords.CSPad2x2ImageProducer ImgAlgos.ImgSaveInFile [CSPadPixCoords.CSPad2x2ImageProducer:1] calibDir = /reg/d/psdm/xpp/xpptut13/xtc/calib typeGroupName = CsPad2x2::CalibV1 source = DetInfo(XppGon.0:Cspad2x2.1) inkey = calibrated_arr1 outimgkey = Image tiltIsApplied = false useWidePixCenter = falsetrue print_bits = 15 [ImgAlgos.ImgSaveInFile:0] source = DetInfo(:Cspad2x2.0) key = Image fname = cspad2x2.0 ftype = txt #ftype = tiff saveAll = true print_bits = 3 #eventSave = 5 [ImgAlgos.ImgSaveInFile:1] source = DetInfo(:Cspad2x2.1) key = Image fname |
Command to run:
psana -c cspad2x2-test.cfg
One of the saved files cspad2x2-<run>-<timestamp>.txt
is plotted as an image by the command
./PlotCameraImageFromFile.py cspad2x2-<run>-<timestamp>.txt 0 1200
Configuration file for cspad2x2 with pedestal subtraction
Note |
---|
Access to the CSPad2x2 aligned geometry is added on 2013-02-13 |
Example of <psana-config-file.cfg>:
Code Block | ||
---|---|---|
| ||
[psana] files = /reg/d/psdm/mec/mec73313/xtc/e268-r0180-s02-c00.xtc #calib-dir = ./calib modules = cspad_mod.CsPadCalib CSPadPixCoords.CSPad2x2ImageProducer ImgAlgos.ImgSaveInFile events = 5 [cspad_mod.CsPadCalib] source = cspad2x2.1 #ftypeDetInfo(MecTargetChamber.0:Cspad2x2.3) inputKey = outputKey = txtcalibrated_arr ftypedoPedestals = yes doPixelStatus = no doCommonMode = tiff saveAllno [CSPadPixCoords.CSPad2x2ImageProducer] calibDir = = true print_bits/reg/d/psdm/mec/mec73313/calib typeGroupName = CsPad2x2::CalibV1 #source = DetInfo(MecTargetChamber.0:Cspad2x2.3) #eventSavesource = 5 |
Example for package ImgPixSpectra
Modules:
- ImgPixSpectra::CSPadPixSpectra
- ImgPixSpectra::CSPad2x2PixSpectra
- ImgPixSpectra::CameraPixSpectra
Example for module ImgPixSpectra::CSPadPixSpectra
See module description in Module ImgPixSpectra::CSPadPixSpectra
Configuration file psana-cxib2313-r0114-cspad-pix-spectra.cfg
:
Code Block | ||
---|---|---|
| ||
# Command to run this script: # psana -c psana-cxib2313-r0114-cspad-pix-spectra.cfg # # Other useful commands: # psana -n 5 -m PrintSeparator,PrintEventId,psana_examples.DumpCsPad /reg/d/psdm/cxi/cxib2313/xtc/e336-r0114* # psana -n 5 -m EventKeys exp=cxib2313:run=114:xtc [psana] files:Cspad2x2.3 inkey = calibrated_arr outimgkey = Image tiltIsApplied = true print_bits = 15 [ImgAlgos.ImgSaveInFile] source = exp=cxib2313:run=114:xtc #calib-dir = ./calib skip-events = 0 eventsDetInfo(MecTargetChamber.0:Cspad2x2.3) key = 100 modules = cspad_mod.CsPadCalib ImgPixSpectra.CSPadPixSpectra [cspad_mod.CsPadCalib] sourceImage fname = DetInfo(CxiDs1.0:Cspad.0) inputKeycspad2x2.3 saveAll = true outputKeyprint_bits = calibrated3 doPedestals#eventSave = yes doPixelStatus = no doCommonMode = yes [ImgPixSpectra.CSPadPixSpectra] source5 |
Example of psana configuration file to get cspad2x2 images for two detectors and save them in files, one in txt, another in tiff formats:
Code Block | ||
---|---|---|
| ||
[psana] files = /reg/d/psdm/xpp/xpptut13/xtc/e308-r0008-s02-c00.xtc \ = CxiDs1.0:Cspad.0 inputKey = calibrated amin /reg/d/psdm/xpp/xpptut13/xtc/e308-r0008-s03-c00.xtc #modules = cspad_mod.CsPad2x2Pedestals #calib-dir = ./calib calib-dir = /reg/d/psdm/xpp/xpptut13/xtc/calib modules = cspad_mod.CsPadCalib:0 \ = -20. amax cspad_mod.CsPadCalib:1 \ = 20. nbinsCSPadPixCoords.CSPad2x2ImageProducer:0 \ = CSPadPixCoords.CSPad2x2ImageProducer:1 \ 10 arr_fname = cspad_spectral_array.txt |
where module cspad_mod.CsPadCalib
subtracts pedestals, apply common mode correction, and save CSPAD array in the event store with key "calibrated", which is used in the next module ImgPixSpectra.CSPadPixSpectra
.
To run this script use command
psana -c psana-cxib2313-r0114-cspad-pix-spectra.cfg
which produces two files:
...
cspad_spectral_array.txt.sha
– file with metadata for array shape:
...
bgColor | #AAFFFF |
---|
...
|
...
ImgAlgos.ImgSaveInFile:0 |
...
\ |
...
...
|
...
Plot for content of the file cspad_spectral_array.txt
:
Example for module ImgPixSpectra::CSPad2x2PixSpectra
See module description in Module ImgPixSpectra::CSPad2x2PixSpectra
Configuration file example for CSPad2x2PixSpectra
:
Code Block | ||
---|---|---|
| ||
[psana] files ImgAlgos.ImgSaveInFile:1 events = 5 [cspad_mod.CsPadCalib:0] source = DetInfo(XppGon.0:Cspad2x2.0) inputKey = outputKey = /reg/d/psdm/<instrument>/<experiment>/<file-name>.xtc modules calibrated_arr0 doPedestals = yes doPixelStatus = no doCommonMode = ImgPixSpectra.CSPad2x2PixSpectrayes [ImgPixSpectra.CSPad2x2PixSpectracspad_mod.CsPadCalib:1] source = CxiSc1DetInfo(XppGon.0:Cspad2x2.01) amininputKey = outputKey = = 500. amaxcalibrated_arr1 doPedestals = yes doPixelStatus = no doCommonMode = 1000. nbinsyes [CSPadPixCoords.CSPad2x2ImageProducer:0] calibDir = /reg/d/psdm/xpp/xpptut13/xtc/calib typeGroupName = 100 arr_fnameCsPad2x2::CalibV1 source = cspad2x2-pix-spectra.txt |
To get images from saved file one may execute the auxiliary script:
Code Block | ||
---|---|---|
| ||
ImgPixSpectra/data/PlotSpectralArrayFromFile.py cspad2x2-pix-spectra.txt
|
generates image for limited range of pixels for CSPad, CSPad2x2, or Camera, respectively:
Examples for package ImgAlgos
See Package ImgAlgos
Example for module ImgAlgos::Tahometer
See Module ImgAlgos::Tahometer
Example of the psana configuration file:
Code Block | ||
---|---|---|
| ||
[psana]DetInfo(XppGon.0:Cspad2x2.0) inkey = calibrated_arr0 filesoutimgkey = /reg/d/psdm/<INSTRUMENT>/<experiment>/xtc/<file-name-1>.xtc\ Image tiltIsApplied = false useWidePixCenter /reg/d/psdm/<INSTRUMENT>/<experiment>/xtc/<file-name-2>.xtc modules= false print_bits = ImgAlgos.Tahometer15 [ImgAlgosCSPadPixCoords.TahometerCSPad2x2ImageProducer:1] dncalibDir = 10 print_bits = 7 |
Example for module ImgAlgos::PnccdImageProducer
See Module ImgAlgos::PnccdImageProducer
Example of the psana configuration file:
Code Block | ||
---|---|---|
| ||
[psana]/reg/d/psdm/xpp/xpptut13/xtc/calib typeGroupName = CsPad2x2::CalibV1 source = DetInfo(XppGon.0:Cspad2x2.1) inkey = calibrated_arr1 outimgkey = Image tiltIsApplied = false useWidePixCenter = false print_bits = 15 [ImgAlgos.ImgSaveInFile:0] source = DetInfo(:Cspad2x2.0) key files = /reg/d/psdm/<INSTRUMENT>/<experiment>/xtc/<file-name-1>.xtc\ Image fname = cspad2x2.0 ftype /reg/d/psdm/<INSTRUMENT>/<experiment>/xtc/<file-name-2>.xtc #skip-events = 100 events = 5txt modules#ftype = ImgAlgos.PnccdImageProducer ImgAlgos.ImgSaveInFile [ImgAlgos.PnccdImageProducer] source = DetInfo(:pnCCD) inkeytiff saveAll = =true outimgkeyprint_bits = imgpnccd print_bits3 #eventSave = 15 [ImgAlgos.ImgSaveInFile:1] source = DetInfo(:pnCCDCspad2x2.1) key = imgpnccdImage fname = pnccd-img-ev saveAllcspad2x2.1 #ftype = truetxt #eventSaveftype = 82 print_bits = 1 |
This script saves text files with images like pnccd-img-ev-<run-date-time.nsec>.txt
, which can be presented as:
Advanced example for PnccdImageProducer;
- get pnccd ndarray from data,
- calibrate ndarray (subtract pedestals, common mode, remove pixels with bad status),
- produce image with two gaps from calibrated ndarray,
- average image for 10 events:
Code Block |
---|
[psana]tiff saveAll = true print_bits = 3 #eventSave = 5 |
Example for package ImgPixSpectra
Modules:
- ImgPixSpectra::CSPadPixSpectra
- ImgPixSpectra::CSPad2x2PixSpectra
- ImgPixSpectra::CameraPixSpectra
Example for module ImgPixSpectra::CSPadPixSpectra
See module description in Module ImgPixSpectra::CSPadPixSpectra
Configuration file psana-cxib2313-r0114-cspad-pix-spectra.cfg
:
Code Block | ||
---|---|---|
| ||
# Command to run this script: # psana -c psana-cxib2313-r0114-cspad-pix-spectra.cfg # # Other useful commands: # psana -n 5 -m PrintSeparator,PrintEventId,psana_examples.DumpCsPad /reg/d/psdm/cxi/cxib2313/xtc/e336-r0114* # psana -n 5 -m EventKeys exp=cxib2313:run=114:xtc [psana] files = exp=cxib2313:run=114:xtc #calib-dir = /reg/d/psdm/SXR/sxrb5914/calib files = exp=sxrb5914:run=245./calib skip-events = 0 events = 10 modules = ImgAlgos.Tahometer \ = 100 modules = ImgAlgos.PnccdNDArrProducer \ cspad_mod.CsPadCalib ImgPixSpectra.CSPadPixSpectra [cspad_mod.CsPadCalib] source ImgAlgos.NDArrCalib \ = DetInfo(CxiDs1.0:Cspad.0) inputKey = outputKey ImgAlgos.PnccdImageProducer= \calibrated doPedestals = yes doPixelStatus = no doCommonMode = ImgAlgos.NDArrAverageyes [ImgAlgosImgPixSpectra.TahometerCSPadPixSpectra] dnsource = 100 print_bits = 7 [ImgAlgos.PnccdNDArrProducer] source = DetInfo(Camp.0:pnCCD.1) key_in = key_out = pnccd-ndarr outtype = asdata print_bits = 0 [ImgAlgos.NDArrCalib] source = DetInfo(Camp.0:pnCCD.1) key_in = pnccd-ndarr key_out = calibrated do_peds = yes do_cmod = yes do_stat = yes do_mask = no do_bkgd = no do_gain = no do_nrms = no do_thre = no #fname_mask = pnccd-test-mask.txt #fname_bkgd = pnccd-test-bkgd.txt masked_value = 0 threshold_nrms = 4.0 threshold = 100 below_thre_value = 0 bkgd_ind_min = 10000 bkgd_ind_max = 10200 bkgd_ind_inc = 1 print_bitsCxiDs1.0:Cspad.0 inputKey = calibrated amin = -20. amax = 20. nbins = 10 arr_fname = cspad_spectral_array.txt |
where module cspad_mod.CsPadCalib
subtracts pedestals, apply common mode correction, and save CSPAD array in the event store with key "calibrated", which is used in the next module ImgPixSpectra.CSPadPixSpectra
.
To run this script use command
psana -c psana-cxib2313-r0114-cspad-pix-spectra.cfg
which produces two files:
cspad_spectral_array.txt
– array of 10-bin amplitude spectra for all pixelscspad_spectral_array.txt.sha
– file with metadata for array shape:Code Block bgColor #AAFFFF NPIXELS 2296960 NBINS 10 AMIN -20 AMAX 20 NEVENTS 100 ARRFNAME cspad_spectral_array.txt
Plot for content of the file cspad_spectral_array.txt
:
Example for module ImgPixSpectra::CSPad2x2PixSpectra
See module description in Module ImgPixSpectra::CSPad2x2PixSpectra
Configuration file example for CSPad2x2PixSpectra
:
Code Block | ||
---|---|---|
| ||
[psana] files = /reg/d/psdm/<instrument>/<experiment>/<file-name>.xtc modules = 1ImgPixSpectra.CSPad2x2PixSpectra [ImgAlgosImgPixSpectra.PnccdImageProducerCSPad2x2PixSpectra] source = DetInfo(CampCxiSc1.0:pnCCDCspad2x2.1)0 inkeyamin = calibrated outimgkey 500. amax = pnccd-img gap_rows 1000. nbins = 0 gap_cols = = 16100 gaparr_valuefname = 0 print_bits = 1 [ImgAlgos.NDArrAveragecspad2x2-pix-spectra.txt |
To get images from saved file one may execute the auxiliary script:
Code Block | ||
---|---|---|
| ||
ImgPixSpectra/data/PlotSpectralArrayFromFile.py cspad2x2-pix-spectra.txt
|
generates image for limited range of pixels for CSPad, CSPad2x2, or Camera, respectively:
Examples for package ImgAlgos
See Package ImgAlgos
Example for module ImgAlgos::Tahometer
See Module ImgAlgos::Tahometer
Example of the psana configuration file:
Code Block | ||
---|---|---|
| ||
[psana]] source = DetInfo(Camp.0:pnCCD.1) key files = pnccd-img avefile = pnccd-ave rmsfile/reg/d/psdm/<INSTRUMENT>/<experiment>/xtc/<file-name-1>.xtc\ = pnccd-rms #maskfile = pnccd-msk #hotpixfile /reg/d/psdm/<INSTRUMENT>/<experiment>/xtc/<file-name-2>.xtc modules = pnccd-hot thr_rms_ADU = 160 thr_min_ADU = 2 thr_max_ADUImgAlgos.Tahometer [ImgAlgos.Tahometer] dn = 1000010 print_bits = 29 |
7
|
Example for module ImgAlgos::
...
EpixNDArrProducer
See Module ImgAlgos::CameraImageProducerEpixNDArrProducer
Example of the psana configuration file:
Code Block | ||
---|---|---|
| ||
[psana] files = exp=xppi0414:run=94 events = 100 modules = ImgAlgos.EpixNDArrProducer \ ImgAlgos.NDArrAverage [ImgAlgos.EpixNDArrProducer] source = DetInfo(:Epix10k) key_in = key_out = epix-nda outtype = float print_bits = 255 [ImgAlgos.NDArrAverage] source = files DetInfo(:Epix10k) key = /reg/d/psdm/<INSTRUMENT>/<experiment>/xtc/<file-name-1>.xtc modulesepix-nda avefile = epix-ave print_bits = 29 |
EpixNDArrProducer
gets Epix10k ndarray from data and saves it in the events store with possible type conversion. Then NDArrAverage
averages this ndarray over requested number of events (100) and saves it in file.
Example for module ImgAlgos::PnccdImageProducer
See Module ImgAlgos::PnccdImageProducer
Example of the psana configuration file:
Code Block | ||
---|---|---|
| ||
[psana] ImgAlgos.CameraImageProducer ImgAlgos.ImgSaveInFile events = 5 [ImgAlgos.CameraImageProducer] source = DetInfo(:Opal1000) key_in = key_out = img subtract_offset = true print_bits = 15 [ImgAlgos.ImgSaveInFile files = /reg/d/psdm/<INSTRUMENT>/<experiment>/xtc/<file-name-1>.xtc\ /reg/d/psdm/<INSTRUMENT>/<experiment>/xtc/<file-name-2>.xtc #skip-events = 100 events = 5 modules = ImgAlgos.PnccdImageProducer ImgAlgos.ImgSaveInFile [ImgAlgos.PnccdImageProducer] source = DetInfo(:Opal1000pnCCD) keyinkey = outimgkey = img fname imgpnccd print_bits = 1 [ImgAlgos.ImgSaveInFile] source = img-from-my-experiment saveAllDetInfo(:pnCCD) key = true #eventSaveimgpnccd fname = 1pnccd-img-ev saveAll = true #eventSave = 82 print_bits = 1 |
This script saves text files with images like pnccd-img-fromev-my-experiment-<run-date-time.nsec>.txt
, which can be drawn by the python script
./ImgAlgos/data/PlotCameraImageFromFile.py <filename>.txt <Amin> <Amax>
Example for module ImgAlgos::PrincetonImageProducer
See Module ImgAlgos::PrincetonImageProducer
Example of the psana configuration file:
presented as:
Advanced example for PnccdImageProducer;
- get pnccd ndarray from data,
- calibrate ndarray (subtract pedestals, common mode, remove pixels with bad status),
- produce image with two gaps from calibrated ndarray,
- average image for 10 events:
Code Block |
---|
Code Block | bgColor | #F7F7ED
[psana] files #calib-dir = /reg/d/psdm/<INSTRUMENT>SXR/<experiment>/xtc/<file-name-1>.xtc\ sxrb5914/calib files = exp=sxrb5914:run=245 events = 10 modules = ImgAlgos.Tahometer \ /reg/d/psdm/<INSTRUMENT>/<experiment>/xtc/<file-name-2>.xtc modulesImgAlgos.PnccdNDArrProducer \ = ImgAlgos.PrincetonImageProducerNDArrCalib \ ImgAlgos.PnccdImageProducer \ ImgAlgos.NDArrAverage [ImgAlgos.ImgSaveInFileTahometer] eventsdn = 100 print_bits = 37 [ImgAlgos.PrincetonImageProducerPnccdNDArrProducer] source = DetInfo(:PrincetonCamp.0:pnCCD.1) key_in = key_out = img subtract_offsetpnccd-ndarr outtype = trueasdata print_bits = 310 [ImgAlgos.ImgSaveInFileNDArrCalib] source = DetInfo(:Princeton)Camp.0:pnCCD.1) key_in = pnccd-ndarr key_out = calibrated do_peds = yes do_cmod = yes do_stat = img fname = img-xcs saveAll = true print_bits = 31 |
...
Example for module ImgAlgos::AcqirisArrProducer
See description of parameters in Module ImgAlgos::AcqirisArrProducer
Example of the psana configuration file psana-amo01509-r0125-acqiris.cfg
:
Code Block | ||
---|---|---|
| ||
# Command to run this script: # psana -c psana-amo01509-r0125-acqiris.cfg; # # Useful commands: # psana -n 5 -m EventKeys exp=amo01509:run=125:xtc > test-acqiris-file.txt; # psana -n 5 -m psana_examples.DumpAcqiris exp=amo01509:run=125:xtc > test-acqiris-file.txt; (C++ version) # psana -n 1 -m psana_examples.dump_acqiris exp=amo01509:run=125:xtc > test-acqiris-file.txt; (python version) [psana] #files = /reg/d/psdm/AMO/amo01509/xtc/e8-r0125-s00-c00.xtc /reg/d/psdm/AMO/amo01509/xtc/e8-r0125-s01-c00.xtc files = exp=amo01509:run=125:xtc modules = ImgAlgos.AcqirisArrProducer ImgAlgos.ImgSaveInFile:wf ImgAlgos.ImgSaveInFile:wt skip-events = 0 events = 100 [ImgAlgos.AcqirisArrProducer] source = AmoETOF.0:Acqiris.0 key_in = key_wform = acqiris_wform key_wtime = acqiris_wtime fname_prefix = acq yes do_mask = no do_bkgd = no do_gain = no do_nrms = no do_thre = no #fname_mask = pnccd-test-mask.txt #fname_bkgd = pnccd-test-bkgd.txt masked_value = 0 threshold_nrms = 4.0 threshold = 100 below_thre_value = 0 bkgd_ind_min = 10000 bkgd_ind_max = 10200 bkgd_ind_inc = 1 print_bits = 1 [ImgAlgos.PnccdImageProducer] source = DetInfo(Camp.0:pnCCD.1) inkey = calibrated outimgkey = pnccd-img gap_rows = 0 gap_cols = 16 gap_value = 0 print_bits = 111 [ImgAlgos.ImgSaveInFile:wfNDArrAverage] source = AmoETOFDetInfo(Camp.0:AcqirispnCCD.01) key = acqiris_wform fnamepnccd-img avefile = acqpnccd-AmoETOF-wformave ftypermsfile = txtpnccd-rms #ftype#maskfile = pnccd-msk #hotpixfile = tiff #saveAllpnccd-hot thr_rms_ADU = 160 thr_min_ADU = 2 thr_max_ADU = true10000 print_bits = = 3 eventSave29 |
Example for module ImgAlgos::CameraImageProducer
See Module ImgAlgos::CameraImageProducer
Example of the psana configuration file:
Code Block | ||
---|---|---|
| ||
[psana] = 5 [ImgAlgos.ImgSaveInFile:wt] source = AmoETOF.0:Acqiris.0 key = acqiris_wtime fname = acq-AmoETOF-wtime ftype = txt #ftype files = tiff #saveAll = true print_bits/reg/d/psdm/<INSTRUMENT>/<experiment>/xtc/<file-name-1>.xtc modules = 3 eventSave ImgAlgos.CameraImageProducer ImgAlgos.ImgSaveInFile events = 5 |
This script with psana does a few things:
- module AcqirisArrProducer gets Acqiris data objects from event store, adjusts trigger time corrections, and saves them back in the event store as uniform ndarrays<double,2> objects for waveforms and times
- two instances of the module ImgSaveInFile save arrays of waveforms and wave-times for locally counted event 5.
This script saves 3 text files:
acq-amo01509-r0125.txt
-- with configuration parameters:Code Block Acqiris::ConfigV1: nbrBanks=1 channelMask=69905 nbrChannels=5 nbrConvertersPerChannel=4 horiz: sampInterval=2.5e-10 delayTime=0 nbrSegments=1 nbrSamples=10000 vert(0): fullScale=0.1 slope=1.52588e-06 offset=0 coupling=3 bandwidth=0 vert(1): fullScale=0.1 slope=1.52588e-06 offset=0 coupling=3 bandwidth=0 vert(2): fullScale=0.1 slope=1.52588e-06 offset=0 coupling=3 bandwidth=0 vert(3): fullScale=0.1 slope=1.52588e-06 offset=0 coupling=3 bandwidth=0 vert(4): fullScale=0.1 slope=1.52588e-06 offset=0 coupling=3 bandwidth=0
- acq-AmoETOF-wform-r0125-20091018-182512.194787218.txt – with waveforms for 5th event
- acq-AmoETOF-wtime-r0125-20091018-182512.194787218.txt – with wave-times for 5th event
Arrays from these files can be plotted for all channels, shown by different colors:
...
[ImgAlgos.CameraImageProducer]
source = DetInfo(:Opal1000)
key_in =
key_out = img
subtract_offset = true
print_bits = 15
[ImgAlgos.ImgSaveInFile]
source = DetInfo(:Opal1000)
key = img
fname = img-from-my-experiment
saveAll = true
#eventSave = 1
|
This script saves text files with images like img-from-my-experiment-<run-date-time.nsec>.txt
, which can be drawn by the python script
./ImgAlgos/data/PlotCameraImageFromFile.py <filename>.txt <Amin> <Amax>
Example for module ImgAlgos::PrincetonImageProducer
See Module ImgAlgos::PrincetonImageProducer
Example of the psana configuration file:
Code Block | ||
---|---|---|
| ||
[psana]
files |
...
Example for module ImgAlgos::AcqirisAverage
See description of parameters in Module ImgAlgos::AcqirisAverage
Configuration file psana-amo01509-r0125-acqiris-average.cfg:
Code Block | ||
---|---|---|
| ||
# Command to run this script: # psana -c psana-amo01509-r0125-acqiris-average.cfg; # # Useful commands: # psana -n 5 -m EventKeys exp=amo01509:run=125:xtc > test-acqiris-file.txt; # psana -n 5 -m psana_examples.DumpAcqiris exp=amo01509:run=125:xtc > test-acqiris-file.txt; (C++ version) # psana -n 1 -m psana_examples.dump_acqiris exp=amo01509:run=125:xtc > test-acqiris-file.txt; (python version) [psana] #files = /reg/d/psdm/AMO<INSTRUMENT>/amo01509<experiment>/xtc/e8<file-r0125name-s00-c001>.xtc\ /reg/d/psdm/AMO<INSTRUMENT>/amo01509<experiment>/xtc/e8<file-r0125name-s01-c002>.xtc filesmodules = exp=amo01509:run=125:xtc modules = ImgAlgos.AcqirisArrProducer ImgAlgos.AcqirisAverage skip-events = 0 eventsPrincetonImageProducer \ ImgAlgos.ImgSaveInFile events = 10003 [ImgAlgos.AcqirisArrProducerPrincetonImageProducer] source = AmoETOF.0:Acqiris.0DetInfo(:Princeton) key_in = key_wformout = acqiris_wform key_wtime = acqiris_wtimeimg fnamesubtract_prefix offset = acqtrue print_bits = 331 [ImgAlgos.AcqirisAverageImgSaveInFile] source = AmoETOF.0:Acqiris.0 key_in DetInfo(:Princeton) key = acqiris_wform key_ave img fname = acqiris_average fname_ave_prefix = acq thresholds img-xcs saveAll = -0.005 -0.005 -0.005 -0.005 -0.005 is_positive_signaltrue print_bits = no do_inverse_selection = yes #skip_events = 0 #proc_events = 100 print_bits = 255 |
Psana with this script runs over 1000 events apply threshold-based selection algorithm and produces files:
acq-amo01509-r0125-config.txt -- with Acqiris configuration parameters:
Code Block Acqiris::ConfigV1: nbrBanks=1 channelMask=69905 nbrChannels=5 nbrConvertersPerChannel=4 horiz: sampInterval=2.5e-10 delayTime=0 nbrSegments=1 nbrSamples=10000 vert(0): fullScale=0.1 slope=1.52588e-06 offset=0 coupling=3 bandwidth=0 vert(1): fullScale=0.1 slope=1.52588e-06 offset=0 coupling=3 bandwidth=0 vert(2): fullScale=0.1 slope=1.52588e-06 offset=0 coupling=3 bandwidth=0 vert(3): fullScale=0.1 slope=1.52588e-06 offset=0 coupling=3 bandwidth=0 vert(4): fullScale=0.1 slope=1.52588e-06 offset=0 coupling=3 bandwidth=0
- acq-amo01509-r0125-ave-wfs.txt with averaged array of waveforms, which were below threshold (averaging for baseline level):
...
31
|
Anchor | ||||
---|---|---|---|---|
|
Example for module ImgAlgos::AcqirisArrProducer
See description of parameters in Module ImgAlgos::AcqirisArrProducer
Example of the psana configuration file psana-amo01509-r0125-acqiris.cfg
:
Code Block | ||
---|---|---|
| ||
# Command to run this script:
# psana -c psana-amo01509-r0125-acqiris.cfg;
#
# Useful commands:
# psana -n 5 -m EventKeys exp=amo01509:run=125:xtc > test-acqiris-file.txt;
# psana -n 5 -m psana_examples.DumpAcqiris exp=amo01509:run=125:xtc > test-acqiris-file.txt; (C++ version)
# psana -n 1 -m psana_examples.dump_acqiris exp=amo01509:run=125:xtc > test-acqiris-file.txt; (python version)
[psana]
#files = /reg/d/psdm/AMO/amo01509/xtc/e8-r0125-s00-c00.xtc /reg/d/psdm/AMO/amo01509/xtc/e8-r0125-s01-c00.xtc
files = exp=amo01509:run=125:xtc
modules = ImgAlgos.AcqirisArrProducer ImgAlgos.ImgSaveInFile:wf ImgAlgos.ImgSaveInFile:wt
skip-events = 0
events = 100
[ImgAlgos.AcqirisArrProducer]
source = AmoETOF.0:Acqiris.0
key_in =
key_wform = acqiris_wform
key_wtime = acqiris_wtime
fname_prefix = acq
print_bits = 11
[ImgAlgos.ImgSaveInFile:wf]
source = AmoETOF.0:Acqiris.0
key = acqiris_wform
fname = acq-AmoETOF-wform
ftype = txt
#ftype = tiff
#saveAll = true
print_bits = 3
eventSave = 5
[ImgAlgos.ImgSaveInFile:wt |
...
Example for module ImgAlgos::AcqirisCalib
See description of parameters in Module ImgAlgos::AcqirisCalib
Configuration file psana-amo01509-r0125-acqiris-calib.cfg:
Code Block | ||
---|---|---|
| ||
# Command to run this script: # psana -c psana-amo01509-r0125-acqiris-calib.cfg; # # Useful commands: # psana -n 5 -m EventKeys exp=amo01509:run=125:xtc > test-acqiris-file.txt; # psana -n 5 -m psana_examples.DumpAcqiris exp=amo01509:run=125:xtc > test-acqiris-file.txt; (C++ version) # psana -n 1 -m psana_examples.dump_acqiris exp=amo01509:run=125:xtc > test-acqiris-file.txt; (python version) [psana] #files = /reg/d/psdm/AMO/amo01509/xtc/e8-r0125-s00-c00.xtc /reg/d/psdm/AMO/amo01509/xtc/e8-r0125-s01-c00.xtc files = exp=amo01509:run=125:xtc modules = ImgAlgos.AcqirisArrProducer ImgAlgos.AcqirisCalib ImgAlgos.ImgSaveInFile:wf_raw ImgAlgos.ImgSaveInFile:wf_calib skip-events = 0 events = 10 [ImgAlgos.AcqirisArrProducer] source = AmoETOF.0:Acqiris.0 key_in = key_wform = acqiris_wform key_wtime = acqiris_wtime fname_prefix = acq print_bits = 1 [ImgAlgos.AcqirisCalib] source = AmoETOF.0:Acqiris.0 key_in = acqiris_wformwtime key_outfname = acq-AmoETOF-wtime ftype = wf-calibrated fname_base_line = acq-amo01509-r0125-ave-wfs.txt #skip_events#ftype = 0 #proc_events tiff #saveAll = 100true print_bits = 255 [ImgAlgos.ImgSaveInFile:wf_raw] source 3 eventSave = AmoETOF.0:Acqiris.0 key = acqiris_wform fname = acq-AmoETOF-wform-raw ftype = txt #ftype = tiff #saveAll = true print_bits = 3 eventSave = 5 [ImgAlgos.ImgSaveInFile:wf_calib] source = AmoETOF.0:Acqiris.0 key = wf-calibrated fname = acq-AmoETOF-wform-calibrated ftype = txt #ftype = tiff #saveAll = true print_bits = 3 eventSave = 5 |
In this script the base-line level for all waveforms is loaded from file and is subtracted in module ImgAlgos.AcqirisCalib.
For example, the raw and calibrated waveforms for event 5 were saved in the files:
...
= 5
|
This script with psana does a few things:
- module AcqirisArrProducer gets Acqiris data objects from event store, adjusts trigger time corrections, and saves them back in the event store as uniform ndarrays<double,2> objects for waveforms and times
- two instances of the module ImgSaveInFile save arrays of waveforms and wave-times for locally counted event 5.
This script saves 3 text files:
acq-amo01509-r0125.txt
-- with configuration parameters:Code Block Acqiris::ConfigV1: nbrBanks=1 channelMask=69905 nbrChannels=5 nbrConvertersPerChannel=4 horiz: sampInterval=2.5e-10 delayTime=0 nbrSegments=1 nbrSamples=10000 vert(0): fullScale=0.1 slope=1.52588e-06 offset=0 coupling=3 bandwidth=0 vert(1): fullScale=0.1 slope=1.52588e-06 offset=0 coupling=3 bandwidth=0 vert(2): fullScale=0.1 slope=1.52588e-06 offset=0 coupling=3 bandwidth=0 vert(3): fullScale=0.1 slope=1.52588e-06 offset=0 coupling=3 bandwidth=0 vert(4): fullScale=0.1 slope=1.52588e-06 offset=0 coupling=3 bandwidth=0
- acq-AmoETOF-wform-r0125-20091018-182512.194787218.txt – with waveforms for 5th event
- acq-AmoETOF-wtime-r0125
...
- -20091018-182512.194787218.txt
...
- – with wave-times for 5th event
Arrays from these files can be plotted for all channels, shown by different colors:
Anchor | ||||
---|---|---|---|---|
|
which content is presented on plots:
Anchor | ||
---|---|---|
|
Example for module ImgAlgos::
...
AcqirisAverage
See description of parameters in in Module ImgAlgos::AcqirisCFDAcqirisAverage
Configuration file psana_cfdfile psana-amo01509-r0125-acqiris-average.cfg:
Code Block | ||
---|---|---|
| ||
# Command to run this script: # psana -c psana_cfd-amo01509-r0125-acqiris-average.cfg; # [psana] modules = ImgAlgos.AcqirisArrProducer ImgAlgos.AcqirisCalib ImgAlgos.AcqirisCFD files = /reg/d/psdm/AMO/amo01509/xtc/e8-r0125-s00-c00.xtc [ImgAlgos.AcqirisArrProducer] source = AmoETOF.0:Acqiris.0 key_in = key_wform = acqiris_wform key_wtime = acqiris_wtime fname_prefix = acq print_bits = 0 [ImgAlgos.AcqirisCalib] source = AmoETOF.0:Acqiris.0 key_in = acqiris_wform key_out = wf-calibrated fname_base_line = acq--r0000-ave-wfs.txt #skip_events = 0 #proc_events = 100 print_bits = 0 [ImgAlgos.AcqirisCFD] source = AmoETOF.0:Acqiris.0 key_wform = wf-calibrated baselines = 0.0 0.0 0.0 0.0 0.0 thresholds = # Useful commands: # psana -n 5 -m EventKeys exp=amo01509:run=125:xtc > test-acqiris-file.txt; # psana -n 5 -m psana_examples.DumpAcqiris exp=amo01509:run=125:xtc > test-acqiris-file.txt; (C++ version) # psana -n 1 -m psana_examples.dump_acqiris exp=amo01509:run=125:xtc > test-acqiris-file.txt; (python version) [psana] #files = /reg/d/psdm/AMO/amo01509/xtc/e8-r0125-s00-c00.xtc /reg/d/psdm/AMO/amo01509/xtc/e8-r0125-s01-c00.xtc files = exp=amo01509:run=125:xtc modules = ImgAlgos.AcqirisArrProducer ImgAlgos.AcqirisAverage skip-events = 0 events = 1000 [ImgAlgos.AcqirisArrProducer] source = AmoETOF.0:Acqiris.0 key_in = key_wform = acqiris_wform key_wtime = acqiris_wtime fname_prefix = acq print_bits = 3 [ImgAlgos.AcqirisAverage] source = AmoETOF.0:Acqiris.0 key_in = acqiris_wform key_ave = acqiris_average fname_ave_prefix = acq thresholds = -0.005 -0.005 -0.005 -0.005 -0.005 fractions = 0.5 0.5 0.5 0.5 0.5 deadtimes = 20.0e-9 20.0e-9 20.0e-9 20.0e-9 20.0e-9 leading_edges = 1 1 1 1 1 |
This script analyzes an AMO run where 5 acqiris channels were in use. It uses an AcqirisArrProducer to producer the list of waveforms/times for all channels. It then uses an AcqirisCalib module to do a baseline subtraction using a previously generated file of baselines act--r0000-ave-wfs.txt. Finally, a constant fraction discriminator algorithm is run on all the waveforms with user specified parameters. The edges calculated by AcqirisCFD are saved to the event as one ndarray<double,1> per channel, each with a (default) key "acqiris_edges_N" where N is the channel number. Channels where no edges were found are not saved to the event.
...
is_positive_signal = no
do_inverse_selection = yes
#skip_events = 0
#proc_events = 100
print_bits = 255
|
Psana with this script runs over 1000 events apply threshold-based selection algorithm and produces files:
acq-amo01509-r0125-config.txt -- with Acqiris configuration parameters:
Code Block Acqiris::ConfigV1: nbrBanks=1 channelMask=69905 nbrChannels=5 nbrConvertersPerChannel=4 horiz: sampInterval=2.5e-10 delayTime=0 nbrSegments=1 nbrSamples=10000 vert(0): fullScale=0.1 slope=1.52588e-06 offset=0 coupling=3 bandwidth=0 vert(1): fullScale=0.1 slope=1.52588e-06 offset=0 coupling=3 bandwidth=0 vert(2): fullScale=0.1 slope=1.52588e-06 offset=0 coupling=3 bandwidth=0 vert(3): fullScale=0.1 slope=1.52588e-06 offset=0 coupling=3 bandwidth=0 vert(4): fullScale=0.1 slope=1.52588e-06 offset=0 coupling=3 bandwidth=0
- acq-amo01509-r0125-ave-wfs.txt with averaged array of waveforms, which were below threshold (averaging for baseline level):
Anchor | ||||
---|---|---|---|---|
|
Example for module ImgAlgos::AcqirisCalib
See description of parameters in Module ImgAlgos::AcqirisCalib
Configuration file psana-amo01509-r0125-acqiris-calib.cfg:
Code Block | ||
---|---|---|
| ||
# Command to run this script:
# psana -c psana-amo01509-r0125-acqiris-calib.cfg;
#
# Useful commands:
# psana -n 5 -m EventKeys exp=amo01509:run=125:xtc > test-acqiris-file.txt;
# psana -n 5 -m psana_examples.DumpAcqiris exp=amo01509:run=125:xtc > test-acqiris-file.txt; (C++ version)
# psana -n 1 -m psana_examples.dump_acqiris exp=amo01509:run=125:xtc > test-acqiris-file.txt; (python version)
[psana]
#files = /reg/d/psdm/AMO/amo01509/xtc/e8-r0125-s00-c00.xtc /reg/d/psdm/AMO/amo01509/xtc/e8-r0125-s01-c00.xtc
files = exp=amo01509:run=125:xtc
modules = ImgAlgos.AcqirisArrProducer ImgAlgos.AcqirisCalib ImgAlgos.ImgSaveInFile:wf_raw ImgAlgos.ImgSaveInFile:wf_calib
skip-events = 0
events = 10
[ImgAlgos.AcqirisArrProducer]
source = AmoETOF.0:Acqiris.0
key_in |
...
Example for combination of Acqiris modules
See description of parameters in Modules ImgAlgos::AcqirisArrProducer, AcqirisAverage, and AcqirisCalib
Configuration file psana-amo01509-r0125-acqiris-comb.cfg:
Code Block |
---|
# Command to run this script: # psana -c psana-amo01509-r0125-acqiris-comb.cfg; [psana] files = exp=amo01509:run=125:xtc modules = ImgAlgos.AcqirisArrProducer ImgAlgos.AcqirisAverage:bl ImgAlgos.AcqirisCalib ImgAlgos.AcqirisAverage:signal ImgAlgos.Tahometer #skip-events = 0 events = 2010 [ImgAlgos.AcqirisArrProducer] source = AmoETOF.0:Acqiris.0 key_in = key_wform = acqiris_wform key_wtime = acqiris_wtime fname_prefix = acq print_bits = 7 [ImgAlgos.AcqirisAverage:bl] source = AmoETOF.0:Acqiris.0 key_in = acqiris_wform #key_ave = fname_ave_prefix = acq-bline thresholds = -0.005 -0.005 -0.005 -0.005 -0.005 is_positive_signal = no do_inverse_selection = yes skip_events = 0 proc_events = key_wform = 1000acqiris_wform printkey_bitswtime = acqiris_wtime fname_prefix = acq print_bits = 311 [ImgAlgos.AcqirisCalib] source = AmoETOF.0:Acqiris.0 key_in = acqiris_wform key_out = wf-calibrated fname_base_line = acq-bline skip-amo01509-r0125-ave-wfs.txt #skip_events = 10010 proc#proc_events = 1000100 print_bits = 47255 [ImgAlgos.AcqirisAverageImgSaveInFile:signalwf_raw] source = AmoETOF.0:Acqiris.0 key_in = wf-calibrated #key_ave = acqiris_wform fname = acq-AmoETOF-wform-raw ftype = txt #ftype = fname_ave_prefixtiff #saveAll = acq-signal thresholdstrue print_bits = 3 eventSave = -0.01 -0.01 -0.01 -0.01 -0.01 is_positive_signal5 [ImgAlgos.ImgSaveInFile:wf_calib] source = no do_inverse_selection = no skip_eventsAmoETOF.0:Acqiris.0 key = 1001 proc_eventswf-calibrated fname = 1000 print_bitsacq-AmoETOF-wform-calibrated ftype = 31 [ImgAlgos.Tahometer] print_bitstxt #ftype = 7 |
This script works with psana as follows:
- for the 1st 1000 events averages waveforms below threshold and saves results in the file acq-bline-amo01509-r0125-ave-wfs.txt;
- for the next 1000 events subtracts baseline level and averages waveforms above thresholds and saves results in the file acq-signal-amo01509-r0125-ave-wfs.txt.
This script produces three files:
acq-amo01509-r0125-config.txt - with Acqris configuration parameters:
Code Block Acqiris::ConfigV1: nbrBanks=1 channelMask=69905 nbrChannels=5 nbrConvertersPerChannel=4 horiz: sampInterval=2.5e-10 delayTime=0 nbrSegments=1 nbrSamples=10000 vert(0): fullScale=0.1 slope=1.52588e-06 offset=0 coupling=3 bandwidth=0 vert(1): fullScale=0.1 slope=1.52588e-06 offset=0 coupling=3 bandwidth=0 vert(2): fullScale=0.1 slope=1.52588e-06 offset=0 coupling=3 bandwidth=0 vert(3): fullScale=0.1 slope=1.52588e-06 offset=0 coupling=3 bandwidth=0 vert(4): fullScale=0.1 slope=1.52588e-06 offset=0 coupling=3 bandwidth=0
- acq-bline-amo01509-r0125-ave-wfs.txt - contains baseline averaged arrays, which can be presented by full scale and zoomed plots:
- acq-signal-amo01509-r0125-ave-wfs.txt- contains signal averaged arrays, which can be presented by full scale and zoomed plots:
Example for module ImgAlgos::NDArrAverage
...
tiff
#saveAll = true
print_bits = 3
eventSave = 5
|
In this script the base-line level for all waveforms is loaded from file and is subtracted in module ImgAlgos.AcqirisCalib.
For example, the raw and calibrated waveforms for event 5 were saved in the files:
acq-AmoETOF-wform-raw-r0125-e00000005-20091018-182512.194787218.txt
acq-AmoETOF-wform-calibrated-r0125-e00000005-20091018-182512.194787218.txt
which content is presented on plots:
Anchor | ||||
---|---|---|---|---|
|
Example for module ImgAlgos::AcqirisCFD
See description of parameters in Module ImgAlgos::AcqirisCFD
Configuration file psana_cfd.cfg:
Code Block | ||
---|---|---|
| ||
# Command to run this script:
# psana -c psana_cfd.cfg;
#
[psana]
modules = ImgAlgos.AcqirisArrProducer ImgAlgos.AcqirisCalib ImgAlgos.AcqirisCFD
files = /reg/d/psdm/AMO/amo01509/xtc/e8-r0125-s00-c00.xtc
[ImgAlgos.AcqirisArrProducer]
source = AmoETOF.0:Acqiris.0
key_in =
key_wform = acqiris_wform
key_wtime = acqiris_wtime
fname_prefix = acq
print_bits = 0
[ImgAlgos.AcqirisCalib]
source = AmoETOF.0:Acqiris.0
key_in = acqiris_wform
key_out = wf-calibrated
fname_base_line = acq--r0000-ave-wfs.txt
#skip_events = 0
#proc_events = 100
print_bits = 0
[ImgAlgos.AcqirisCFD]
source = AmoETOF.0:Acqiris.0
key_wform = wf-calibrated
baselines = 0.0 0.0 0.0 0.0 0.0
thresholds = -0.005 -0.005 -0.005 -0.005 -0.005
fractions = 0.5 0.5 0.5 0.5 0.5
deadtimes = 20.0e-9 20.0e-9 20.0e-9 20.0e-9 20.0e-9
leading_edges = 1 1 1 1 1 |
This script analyzes an AMO run where 5 acqiris channels were in use. It uses an AcqirisArrProducer to producer the list of waveforms/times for all channels. It then uses an AcqirisCalib module to do a baseline subtraction using a previously generated file of baselines act--r0000-ave-wfs.txt. Finally, a constant fraction discriminator algorithm is run on all the waveforms with user specified parameters. The edges calculated by AcqirisCFD are saved to the event as one ndarray<double,1> per channel, each with a (default) key "acqiris_edges_N" where N is the channel number. Channels where no edges were found are not saved to the event.
Anchor | ||||
---|---|---|---|---|
|
Example for combination of Acqiris modules
See description of parameters in Modules ImgAlgos::AcqirisArrProducer, AcqirisAverage, and AcqirisCalib
Configuration file psana-amo01509-r0125-acqiris-comb.cfg:
Code Block |
---|
# Command to run this script: |
The NDArrAverage
module in combination with CSPadNDArrProducer (or any other device NDArrProducer) can be used for evaluation of averaged pedestals or background using dedicated runs.
Typical configuration file may looks like this:
...
# psana -c psana- |
...
amo01509- |
...
r0125- |
...
acqiris-comb.cfg; [psana] files = exp= |
...
amo01509:run= |
...
125:xtc modules = |
...
ImgAlgos. |
...
AcqirisArrProducer ImgAlgos.AcqirisAverage:bl |
...
ImgAlgos.AcqirisCalib ImgAlgos.AcqirisAverage:signal ImgAlgos.Tahometer #skip-events = 0 events = |
...
2010 [ |
...
ImgAlgos. |
...
AcqirisArrProducer] source = |
...
AmoETOF.0: |
...
Acqiris.0 |
...
key_in = |
...
key_wform = |
...
acqiris_ |
...
wform |
...
key_wtime |
...
= |
...
acqiris_wtime |
...
fname_ |
...
prefix = |
...
acq print_bits = |
...
7 [ImgAlgos. |
...
AcqirisAverage:bl] source |
...
= AmoETOF.0: |
...
Acqiris.0 key_in = |
...
acqiris_ |
...
wform #key_ave |
...
|
...
= |
...
fname_ave_prefix = |
...
acq- |
...
bline thresholds = |
...
-0.005 -0.005 -0.005 -0.005 -0.005 is_positive_signal = |
...
no |
...
do_ |
...
inverse_ |
...
selection = |
...
yes |
...
skip_events = |
...
0 |
...
proc_events = |
...
1000 |
...
print_ |
...
bits |
...
|
...
|
...
|
...
|
...
|
...
= |
...
31 [ImgAlgos. |
...
AcqirisCalib] |
...
source |
...
|
...
= |
...
AmoETOF.0:Acqiris.0
key_in = acqiris_wform
key_out = wf-calibrated
fname_base_line = acq-bline
skip_events = 1001
proc_events = 1000
print_bits = 47
[ImgAlgos.AcqirisAverage:signal]
source = AmoETOF.0:Acqiris.0
key_in = wf-calibrated
#key_ave =
fname_ave_prefix = acq-signal
thresholds = -0.01 -0.01 -0.01 -0.01 -0.01
is_positive_signal = no
do_inverse_selection = no
skip_events = 1001
proc_events = 1000
print_bits = 31
[ImgAlgos.Tahometer]
print_bits = 7
|
This script works with psana as follows:
- for the 1st 1000 events averages waveforms below threshold and saves results in the file acq-bline-amo01509-r0125-ave-wfs.txt;
- for the next 1000 events subtracts baseline level and averages waveforms above thresholds and saves results in the file acq-signal-amo01509-r0125-ave-wfs.txt.
This script produces three files:
acq-amo01509-r0125-config.txt - with Acqris configuration parameters:
Code Block Acqiris::ConfigV1: nbrBanks=1 channelMask=69905 nbrChannels=5 nbrConvertersPerChannel=4 horiz: sampInterval=2.5e-10 delayTime=0 nbrSegments=1 nbrSamples=10000 vert(0): fullScale=0.1 slope=1.52588e-06 offset=0 coupling=3 bandwidth=0 vert(1): fullScale=0.1 slope=1.52588e-06 offset=0 coupling=3 bandwidth=0 vert(2): fullScale=0.1 slope=1.52588e-06 offset=0 coupling=3 bandwidth=0 vert(3): fullScale=0.1 slope=1.52588e-06 offset=0 coupling=3 bandwidth=0 vert(4): fullScale=0.1 slope=1.52588e-06 offset=0 coupling=3 bandwidth=0
- acq-bline-amo01509-r0125-ave-wfs.txt - contains baseline averaged arrays, which can be presented by full scale and zoomed plots:
- acq-signal-amo01509-r0125-ave-wfs.txt- contains signal averaged arrays, which can be presented by full scale and zoomed plots:
Example for module ImgAlgos::NDArrImageProducer
See Module ImgAlgos::NDArrImageProducer
Module ImgAlgos.NDArrImageProducer produces image from any detector-associated ndarray
Possible chain of modules:
- <Package>.<Detector>NDArrProducer
- ImgAlgos.NDArrCalib
- ImgAlgos.NDArrImageProducer
- ImgAlgos.NDArrAverage
Example of the configuration file for cspad
Code Block |
---|
[psana]
files = exp=cxii0114:run=227
events = 100
modules = ImgAlgos.Tahometer \
CSPadPixCoords.CSPadNDArrProducer \
ImgAlgos.NDArrCalib \
ImgAlgos.NDArrImageProducer \
ImgAlgos.NDArrAverage
[CSPadPixCoords.CSPadNDArrProducer]
source = DetInfo(CxiDs1.0:Cspad.0)
inkey =
outkey = cspad_ndarr
outtype = float
is_fullsize = yes
print_bits = 3
[ImgAlgos.NDArrCalib]
source = DetInfo(CxiDs1.0:Cspad.0)
key_in = cspad_ndarr
key_out = calibrated
do_peds = yes
do_cmod = yes
do_stat = yes
do_mask = no
do_bkgd = no
do_gain = no
do_nrms = no
do_thre = no
fname_mask =
fname_bkgd =
masked_value = -10
threshold_nrms = 4
threshold = 7
below_thre_value = 0
print_bits = 3
[ImgAlgos.NDArrImageProducer]
source = CxiDs1.0:Cspad.0
key_in = calibrated
key_out = cspad_img
#type_out = asinp
#type_out = float
#x0_off_pix = 50
#y0_off_pix = 50
print_bits = 255
#calibdir = /reg/neh/home/dubrovin/LCLS/CSPadAlignment-v01/calib-cxi-ds1-2014-03-19/calib
[ImgAlgos.NDArrAverage]
source = DetInfo(CxiDs1.0:Cspad.0)
key = cspad_img
avefile = cspad-img-ave
rmsfile = cspad-img-rms
#maskfile = cspad-img-msk
#hotpixfile = cspad-img-hot
thr_rms_ADU = 0
thr_min_ADU = 4
thr_max_ADU = 65000
print_bits = 29 |
Example of the configuration file for cspad2x2
Code Block |
---|
[psana]
# calib-dir = /reg/d/psdm/mec/meca1113/calib
#calib-dir = /reg/neh/home/dubrovin/LCLS/CSPad2x2Alignment/calib-cspad2x2-01-2013-02-13/calib
files = exp=meca1113:run=376
events = 10
#skip-events = 0
modules = CSPadPixCoords.CSPad2x2NDArrProducer \
ImgAlgos.NDArrImageProducer \
ImgAlgos.NDArrAverage
[CSPadPixCoords.CSPad2x2NDArrProducer]
source = MecTargetChamber.0:Cspad2x2.1
inkey =
outkey = cspad2x2_ndarr
outtype = int16
print_bits = 5
[ImgAlgos.NDArrImageProducer]
source = MecTargetChamber.0:Cspad2x2.1
key_in = cspad2x2_ndarr
key_out = cspad2x2_img
#type_out = asinp
#type_out = float
#x0_off_pix = 50
#y0_off_pix = 50
print_bits = 255
#oname = CSPAD2X2:V1
#oindex = 0
#pix_scale_size_um = 218.
#calibdir = /reg/neh/home/dubrovin/LCLS/CSPad2x2Alignment/calib-cspad2x2-01-2013-02-13/calib
#calibgroup = CsPad2x2::CalibV1
[ImgAlgos.NDArrAverage]
source = MecTargetChamber.0:Cspad2x2.1
#key = cspad2x2_ndarr
key = cspad2x2_img
avefile = arr-ave
rmsfile = arr-rms
maskfile = arr-msk
hotpixfile = arr-hot
thr_rms_ADU = 10
#thr_min_ADU = 2
#thr_max_ADU = 20000
print_bits = 255 |
Example for module ImgAlgos::NDArrAverage
- See Module ImgAlgos::NDArrAverage andModule CSPadPixCoords::CSPadNDArrProducer
The
NDArrAverage
module in combination with CSPadNDArrProducer (or any other device NDArrProducer) can be used for evaluation of averaged pedestals or background using dedicated runs.
Typical configuration file may looks like this:No Format # Run this script: # psana -c psana-meca1113-r0045-cspad-cspad-dark-hotpix.cfg [psana] files = exp=meca1113:run=45 events = 400 #skip-events = 0 modules = CSPadPixCoords.CSPadNDArrProducer \ ImgAlgos.NDArrAverage \ ImgAlgos.Tahometer [CSPadPixCoords.CSPadNDArrProducer] source = MecTargetChamber.0:Cspad.0 inkey = outkey = cspad_ndarr outtype = int16 is_fullsize = yes print_bits = 3 [ImgAlgos.NDArrAverage] source = MecTargetChamber.0:Cspad.0 key = cspad_ndarr avefile = cspad.0-ave rmsfile = cspad.0-rms maskfile = cspad.0-msk hotpixfile = cspad.0-hot thr_rms_ADU = 10 thr_min_ADU = 4 thr_max_ADU = 10000 print_bits = 29 #evts_stage1 = 100 #gate_width1 = 500. #evts_stage2 = 200 #gate_width2 = 100. [ImgAlgos.Tahometer] dn = 100 print_bits = 7
- Module
ImgAlgos.Tahometer
is not required in this configuration file and is added for convenience to print timing statistics for this job. - Evaluation of average intensity in 2 or 3 stages using gate-based algorithms excludes out-layers in intensity spectra and makes average more stable and reliable. However, the gate width is not an universal parameter. In order to set this parameter one has to look at spectrum of averaged intensities for particular device. The same is valid for evaluation of hot/bad pixel masks. One has to plot spectra of averaged intensity and rms values. Averaged intensity and rms spectra for exp=meca1113:run=45 are shown on plots, respectively:
Then, one has to decide how to set parameters for NDArrAverage algorithms, for example, it is quite safe to use
- thr_rms_ADU = 10 – to discard very noisy pixels,
- thr_min_ADU = 4 – to discard presumably dead pixels with 0-intensity,
- thr_max_ADU = 10000 – to discard pixels with intensity significantly exceeding average value. To be on safe side for int16 data this parameter can be set to 216-4, where 4 in both cases is just a small arbitrary number for spare safety gap.
Example for module ImgAlgos::NDArrCalib
See Module ImgAlgos::NDArrCalib, Module ImgAlgos::NDArrAverageThe
NDArrCalib
module in combination with any device NDArrProducer (for example PnccdNDArrProducer) can be used to apply intensity corrections to ndarray.
Typical configuration files are shown below.
Example of ImgAlgos::NDArrCalib for pnCCD
Code Block |
---|
[psana]
files = exp=amoa1214:run=7
#skip-events = 100
events = 5
modules = ImgAlgos.Tahometer \
ImgAlgos.PnccdNDArrProducer \
ImgAlgos.NDArrCalib \
ImgAlgos.PnccdImageProducer \
ImgAlgos.ImgSaveInFile
# ImgAlgos.NDArrAverage \
[ImgAlgos.PnccdNDArrProducer]
source = DetInfo(Camp.0:pnCCD.0)
key_in =
key_out = pnccd-ndarr
outtype = asdata
print_bits = 13
[ImgAlgos.NDArrCalib]
source = DetInfo(Camp.0:pnCCD.0)
key_in = pnccd-ndarr
key_out = calibrated
outtype = float
do_peds = yes
do_cmod = yes
do_stat = no
do_mask = no
do_bkgd = no
do_gain = no
do_nrms = no
do_thre = no
fname_mask =
fname_bkgd =
masked_value = 0
threshold_nrms = 3
threshold = 100
below_thre_value = 0
bkgd_ind_min = 0
bkgd_ind_max = 1000
bkgd_ind_inc = 10
print_bits = 255
[ImgAlgos.PnccdImageProducer]
source = DetInfo(Camp.0:pnCCD.0)
#inkey = pnccd-ndarr
inkey = calibrated
outimgkey = pnccd-img
gap_size = 20
gap_value = 0
print_bits = 1
[ImgAlgos.ImgSaveInFile]
source = DetInfo(Camp.0:pnCCD.0)
key = pnccd-img
fname = pnccd-img-from-arr
ftype = txt
saveAll = true
print_bits = 31
[ImgAlgos.Tahometer]
dn = 100
print_bits = 7 |
Example of ImgAlgos::NDArrCalib for CSPAD
Code Block |
---|
[psana]
files = exp=cxi83714:run=136
events = 100
modules = ImgAlgos.Tahometer \
CSPadPixCoords.CSPadNDArrProducer \
ImgAlgos.NDArrCalib \
ImgAlgos.NDArrAverage
[CSPadPixCoords.CSPadNDArrProducer]
source = DetInfo(CxiDs1.0:Cspad.0)
inkey =
outkey = cspad_ndarr
outtype = float
is_fullsize = yes
print_bits = 3
[ImgAlgos.NDArrCalib]
source = DetInfo(CxiDs1.0:Cspad.0)
key_in = cspad_ndarr
key_out = calibrated
outtype = double
do_peds = yes
do_cmod = yes
do_stat = yes
do_mask = no
do_bkgd = no
do_gain = no
do_nrms = no
do_thre = no
fname_mask =
fname_bkgd =
masked_value = -10
threshold_nrms = 4
threshold = 7
below_thre_value = 0
bkgd_ind_min = 0
bkgd_ind_max = 1000
bkgd_ind_inc = 10
print_bits = 3
[ImgAlgos.NDArrAverage]
source = DetInfo(CxiDs1.0:Cspad.0)
key = calibrated
avefile = cspad-ave
rmsfile = cspad-rms
#maskfile = cspad-msk
#hotpixfile = cspad-hot
thr_rms_ADU = 10
thr_min_ADU = 4
thr_max_ADU = 10000
print_bits = 29
[ImgAlgos.Tahometer]
dn = 10
print_bits = 7 |
For test purpose we use exp=cxi83714:run=136 and loop over 100 exents.
Case 1: raw, non-calibrated images
do_peds = no; 50-60 ms/event
plots for average and rms value distribution for all pixels
Case 2: images with subtracted pedestals and applied status mask
do_peds = yes; 60-70 ms/event
do_stat = yes
Case 3: The same as 2 with common mode subtracted
do_cmod = yes; 107-117 ms/event
Andy's algorithm for CSPAD common mode correction with minor adaptive modifications is applied with parameters:
/reg/d/psdm/cxi/cxi83714/calib/CsPad::CalibV1/CxiDs1.0:Cspad.0/common_mode/135-136.data
1 10 10 100 - algorithm mode, allowed peak mean, allowed peak rms, threshold on number of pixels in ADU bin.
Comparison with Andy's module cspad_mod.CsPadCalib
for common mode correction of int16_t data
Code Block |
---|
[psana]
# Default calibration directory:
# calib-dir = /reg/d/psdm/mec/cxi83714/calib
# calib-dir = /reg/neh/home1/dubrovin/LCLS/CSPadAlignment-v01/calib-mec-2013-12-10/
files = exp=cxi83714:run=136
events = 100
#skip-events = 4000
modules = cspad_mod.CsPadCalib \
CSPadPixCoords.CSPadNDArrProducer \
ImgAlgos.NDArrAverage \
ImgAlgos.Tahometer
[cspad_mod.CsPadCalib]
inputKey =
outputKey = calibrated_data
doPedestals = yes
doPixelStatus = yes
doCommonMode = yes
[CSPadPixCoords.CSPadNDArrProducer]
source = DetInfo(CxiDs1.0:Cspad.0)
inkey = calibrated_data
outkey = cspad_ndarr
outtype = float
is_fullsize = yes
print_bits = 3
[ImgAlgos.NDArrAverage]
source = DetInfo(CxiDs1.0:Cspad.0)
key |
Then, one has to decide how to set parameters for NDArrAverage algorithms, for example, it is quite safe to use
- thr_rms_ADU = 10 – to discard very noisy pixels,
- thr_min_ADU = 4 – to discard presumably dead pixels with 0-intensity,
- thr_max_ADU = 10000 – to discard pixels with intensity significantly exceeding average value. To be on safe side for int16 data this parameter can be set to 216-4, where 4 in both cases is just a small arbitrary number for spare safety gap.
Example for module ImgAlgos::NDArrCalib
See Module ImgAlgos::NDArrCalib, Module ImgAlgos::NDArrAverageThe
NDArrCalib
module in combination with any device NDArrProducer (for example PnccdNDArrProducer) can be used to apply intensity corrections to ndarray.
Typical configuration files are shown below.
Example of ImgAlgos::NDArrCalib for pnCCD
Code Block |
---|
[psana] files = exp=amoa1214:run=7 #skip-events = 100 events = 5 modules = ImgAlgos.Tahometer \ ImgAlgos.PnccdNDArrProducer \ = cspad_ndarr avefile = cspad-calib-ave rmsfile ImgAlgos.NDArrCalib \ = cspad-calib-rms #maskfile = cspad-msk #hotpixfile ImgAlgos.PnccdImageProducer \ ImgAlgos.ImgSaveInFile #= cspad-hot thr_rms_ADU = 10 thr_min_ADU = 4 thr_max_ADU = 10000 print_bits = 29 [ImgAlgos.Tahometer] dn ImgAlgos.NDArrAverage= \ [ImgAlgos.PnccdNDArrProducer] source = DetInfo(Camp.0:pnCCD.0) key_in = key_out = pnccd-ndarr10 print_bits = 7 |
doPedestals = yes
doCommonMode = no; 100-110ms
doPedestals = yes
doPixelStatus = yes
doCommonMode = yes; 150-160ms
Conclusion:
Results of
ImgAlgos.NDArrCalib
well reproducecspad_mod.CsPadCalib
- Common mode correction shrinks the width of averaged intensities from 0.60 to 0.54, and rms from 3.78 to 3.27.
- Algorithm is quite time expensive, it takes 30-40ms/event.
Example of ImgAlgos::NDArrCalib for Fccd960
- Calibration
To calibrate fccd960 for dark runs use command
calibman
For test purpose a couple of dark runs were processed and constants were deployed:
Code Block |
---|
Content of: /reg/d/psdm/XCS/xcsd7814/calib for detector: Fccd960 Camera::CalibV1 XcsEndstation.0:Fccd960.0 pixel_rms 12-13.data file is not used 78-81.data run range 0078 - 0081 pedestals outtype = asdata print_bits = 13 [ImgAlgos.NDArrCalib] source = DetInfo(Camp.0:pnCCD.0) key_in = pnccd-ndarr key_out = calibrated do_peds = yes do_cmod = yes do_stat = no do_mask = no do_bkgd = no do_gain = no do_nrms = no do_thre = no fname_mask = fname_bkgd = masked_value = 0 threshold_nrms = 3 threshold = 100 below_thre_value = 0 bkgd_ind_min = 0 bkgd_ind_max = 1000 bkgd_ind_inc = 10 print_bits = 255 [ImgAlgos.PnccdImageProducer] source = DetInfo(Camp.0:pnCCD.0) #inkey = pnccd-ndarr inkey 12-13.data = calibrated outimgkeyfile is not used = pnccd-img gap_size = 20 gap_value = 0 print_bits 78-81.data = 1 [ImgAlgos.ImgSaveInFile] source run range 0078 - 0081 = DetInfo(Camp.0:pnCCD.0) key pixel_status = pnccd-img fname = pnccd-img-from-arr ftype12-13.data file is not used = txt saveAll = true print_bits = 31 [ImgAlgos.Tahometer] dn 78-81.data run range 0078 = 100 print_bits = 7- 0081 |
- Access data in psana
Example of the configuration file for psana psana-xcsd7814-r0079-fccd960-aver.cfg can be processed by the command
psana -c psana-xcsd7814-r0079-fccd960-aver.cfg
Two averaged images are saved in the text files for exp=xcsd7814:run=79 for raw and calibrated (subtracted dark level) data.
Gain bit coded gain factor 8 is applied automatically.
Example for module ImgAlgos::NDArrDropletFinder
See description in psana - Module Catalog and examples in Peak Finding Module
Example for module ImgAlgos::PixCoordsProducer
See Module ImgAlgos::PixCoordsProducer
Psana configuration file which produces enough data to get CSPAD calibrated intensity and coordinate arrays:Example of ImgAlgos::NDArrCalib for CSPAD
Code Block |
---|
[psana] files = exp=cxi83714:run=136 events = 100 modules = ImgAlgos.TahometerPixCoordsProducer \ CSPadPixCoords.CSPadNDArrProducer cspad_mod.CsPadCalib \ ImgAlgos.NDArrCalib \ ImgAlgos.NDArrAverage CSPadPixCoords.CSPadNDArrProducer [CSPadPixCoordsImgAlgos.CSPadNDArrProducerPixCoordsProducer] source = DetInfo(CxiDs1.0:Cspad.0) inkey print_bits = outkey = cspad_ndarr outtype0 [cspad_mod.CsPadCalib] source = float is_fullsize = yes print_bits = 3 [ImgAlgos.NDArrCalib] source = DetInfo(CxiDs1.0:Cspad.0) key_in inputKey = cspad_ndarr key_out = calibrated do_peds = yes do_cmodoutputKey = yes do_stat = yes do_mask = no do_bkgd = no do_gain = no do_nrmscalibrated doPedestals = no do_threyes doPixelStatus = no fname_maskdoCommonMode = fname_bkgd = masked_valueno [CSPadPixCoords.CSPadNDArrProducer] source = -10 threshold_nrms = CxiDs1.0:Cspad.0 inkey 4 threshold = 7 below_thre_value =calibrated outkey 0 bkgd_ind_min = cspad_ndarr outtype 0 bkgd_ind_max = 1000int16 bkgdis_ind_incfullsize = 10yes print_bits = 3 [ImgAlgos.NDArrAverage= 3 |
Additional keywors need to be added to the list of module parameters in order to evaluate pixel area and coordinate indexes (for image) arrays. For example:
Code Block |
---|
[ImgAlgos.PixCoordsProducer] source = DetInfo(CxiDs1.0:Cspad.0) key = calibrated avefile = cspad-ave rmsfile = cspad-rms #maskfile _out_area = pix_area key_out_mask = pix_mask key_out_ix = pix_ix key_out_iy = cspad-msk #hotpixfilepix_iy x0_off_pix = cspad-hot1000 thry0_rmsoff_ADUpix = 101000 thr_min_ADUmask_bits = 415 thr_max_ADUprint_bits = 10000 255 |
In python code these arrays can be obtained with env.calibStore().get(...) method:
Code Block |
---|
env = ds.env() print_bits = 29 [ImgAlgos.Tahometer] dn cls = env.calibStore() = 10 print_bitssrc = 7 |
For test purpose we use exp=cxi83714:run=136 and loop over 100 exents.
Case 1: raw, non-calibrated images
do_peds = no; 50-60 ms/event
plots for average and rms value distribution for all pixels
Case 2: images with subtracted pedestals and applied status mask
do_peds = yes; 60-70 ms/event
do_stat = yes
Case 3: The same as 2 with common mode subtracted
...
Andy's algorithm for CSPAD common mode correction with minor adaptive modifications is applied with parameters:
...
psana.Source('DetInfo(CxiDs1.0:Cspad.0 |
...
1 10 10 100 - algorithm mode, allowed peak mean, allowed peak rms, threshold on number of pixels in ADU bin.
Comparison with Andy's module cspad_mod.CsPadCalib
for common mode correction of int16_t data
Code Block |
---|
[psana] # Default calibration directory: # calib-dir = /reg/d/psdm/mec/cxi83714/calib # calib-dir = /reg/neh/home1/dubrovin/LCLS/CSPadAlignment-v01/calib-mec-2013-12-10/ files = exp=cxi83714:run=136 events = 100 #skip-events = 4000 modules = cspad_mod.CsPadCalib \ CSPadPixCoords.CSPadNDArrProducer \ ImgAlgos.NDArrAverage \ ImgAlgos.Tahometer [cspad_mod.CsPadCalib] inputKey = outputKey = calibrated_data doPedestals = yes doPixelStatus = yes doCommonMode = yes [CSPadPixCoords.CSPadNDArrProducer] source)') ... A = evt.get(psana.ndarray_int16_3, src, 'cspad_ndarr').flatten() X = cls.get(psana.ndarray_float64_1, src, 'x-pix-coords') Y = cls.get(psana.ndarray_float64_1, src, 'y-pix-coords') Area = cls.get(psana.ndarray_float64_1, src, 'pix_area') Mask = cls.get(psana.ndarray_int32_1, src, 'pix_mask') iX = cls.get(psana.ndarray_uint32_1, src, 'pix_ix') iY = cls.get(psana.ndarray_uint32_1, src, 'pix_iy') fname= cls.get(str, = DetInfo(CxiDs1.0:Cspad.0) inkey = calibrated_data outkeysrc, 'geometry-fname') // depricated method = cspad_ndarr outtypesince ana-0.13.3: path_nda = float is_fullsize = yes print_bits = 3 [ImgAlgos.NDArrAverage] source = DetInfo(CxiDs1.0:Cspad.0) key = cspad_ndarr avefile = cspad-calib-ave rmsfile = cspad-calib-rms #maskfile = cspad-msk #hotpixfile = cspad-hot thr_rms_ADU = 10 thr_min_ADU = 4 thr_max_ADU = 10000 print_bits = 29 [ImgAlgos.Tahometer] dn = 10 print_bits = 7 |
...
cls.get(psana.ndarray_uint8_1, src, 'geometry-calib')
path = ''.join(map(chr, path_nda)) if path_nda is not None else 'N/A' |
Their shape=(32*185*388,) = (2296960,)
These arrays can be processed by users' code directly. In particular, it is easy to conver them in 2-d image numpy array and plot it:
Code Block |
---|
import numpy as np
import matplotlib.pyplot as plt
from PSCalib.GeometryAccess import img_from_pixel_arrays
pix_size = 109.92
xmin, ymin = X.min()-pix_size/2, Y.min()-pix_size/2
iX, iY = np.array((X-xmin)/pix_size, dtype=np.uint), np.array((Y-ymin)/pix_size, dtype=np.uint)
img = img_from_pixel_arrays(iX,iY,W=A)
plt.imshow(img)
plt.draw() |
Conclusion:
Results of
ImgAlgos.NDArrCalib
well reproducecspad_mod.CsPadCalib
- Common mode correction shrinks the width of averaged intensities from 0.60 to 0.54, and rms from 3.78 to 3.27.
- Algorithm is quite time expensive, it takes 30-40ms/event.
Example for module ImgAlgos::ImgAverage
...
Code Block |
---|
[psana] #skip-events = 50 events = 10 files = exp=cxi83714:run=136 modules = cspad_mod.CsPadCalib \ ImgAlgos.CSPadArrPeakFinder \ ImgAlgos.CSPadArrSaveInFile \ pyimgalgos.ex_peaks_nda # EventKeys [cspad_mod.CsPadCalib] inputKey = outputKey = calibrated doPedestals = yes doPixelStatus = yes doCommonMode = yes [ImgAlgos.CSPadArrPeakFinder] source = DetInfo(CxiDs1.0:Cspad.0) key = calibrated key_peaks_out = key_peaks_nda = peaks_nda hot_pix_mask_inp_file = ana-cxi83714/cspad-cxi83714-r0136-noise-mask-ini.dat hot_pix_mask_out_file = ana-cxi83714/cspad-cxi83714-r0136-noise-mask-out.dat frac_noisy_evts_file = ana-cxi83714/cspad-cxi83714-r0136-noise-frac.dat evt_file_out = cxi83714/cspad-ev- rmin = 8 dr = 1 SoNThr_noise = 3 SoNThr_signal = 4 frac_noisy_imgs = 0.9 peak_npix_min = 3 peak_npix_max = 500 peak_amp_tot_thr = 0. peak_SoN_thr = 5. event_npeak_min = 5 event_npeak_max = 1000 event_amp_tot_thr = 0. nevents_mask_update = 0 nevents_mask_accum = 50 selection_mode = SELECTION_ON out_file_bits = 15 print_bits = 3681 [pyimgalgos.ex_peaks_nda] source = DetInfo(CxiDs1.0:Cspad.0) key_in = peaks_nda print_bits = 255 |
...