Peak Finding

You can find more advanced examples here and some overview documentation here.  More detailed documentation (including description of parameters) is here.  You can look at an image and interactively tune the peak-finding parameters using the "psocake" software shown here (see the peak-finding section).

This script lives in /sdf/group/lcls/ds/ana/tutorials/psana1_examples/peakFinder.py.  A peak finder runs on an area detector and tries to locate regions of charge (e.g. photons).

import psana
ds = psana.DataSource('exp=xpptut15:run=54:smd')
det = psana.Detector('cspad')
from ImgAlgos.PyAlgos import PyAlgos
alg = PyAlgos()
alg.set_peak_selection_pars(npix_min=2, npix_max=50, amax_thr=10, atot_thr=20, son_min=5)
hdr = '\nSeg  Row  Col  Npix    Amptot'
fmt = '%3d %4d %4d  %4d  %8.1f'
for nevent,evt in enumerate(ds.events()):
    if nevent>=2 : 
        break
    nda = det.calib(evt)
    if nda is None: 
        continue
    peaks = alg.peak_finder_v4r2(nda, thr_low=5, thr_high=21, rank=4, r0=5, dr=0.05)
    print(hdr)
    for peak in peaks :
        seg,row,col,npix,amax,atot = peak[0:6]
        print(fmt % (seg, row, col, npix, atot))

Hit Finding

This script lives in /reg/g/psdm/tutorials/examplePython3/hitFinder.py.  These hit finding algorithms try to determine if a particular LCLS shot was good or not, by looking for significant charge distributed over an area detector.

import psana
ds = psana.DataSource('exp=xpptut15:run=54:smd')
det = psana.Detector('cspad')
from ImgAlgos.PyAlgos import PyAlgos
alg = PyAlgos()
for nevent,evt in enumerate(ds.events()):
    if nevent>=2 : break
    nda = det.calib(evt)
    if nda is None: continue
    thr = 20
    numpix = alg.number_of_pix_above_thr(nda, thr)
    totint = alg.intensity_of_pix_above_thr(nda, thr)
    print(f'{numpix:d} pixels have total intensity {totint:5.1f} above threshold {thr:5.1f}') # (numpix, totint, thr)

References

  • No labels