Content

Distinctive features

  • variable shape: number of rows 1/75/150/300/600/1200 depends on detector configuration, number of columns 4800
  • 16 banks
  • bank shape (<number-of-rows>, 300)
  • 300 = 264 regular + 36 fake pixels, 300x16 = 4800,  264x16 = 4224
  • fake pixels are used for common mode correction and coding of the event timestamp
  • gain factor 3.65 eV/ADU
  • pixel size 20x10μm in rows and columns dimensions, respectively

Dark processing and deployment

Dark processing is required at least for runs where the detector shape is changing.

det_dark_proc -k "{'exp':'rixc00121','run':154,'dir':'/sdf/data/lcls/drpsrcf/ffb/rix/rixc00121/xtc','detectors':['archon']}" -d archon -D  -o work

See command details in det_dark_proc -h

Test data sets

example: ./lcls2/psana/psana/detector/test_issues_2024.py 11

  • slow detector, 1Hz rate, needs in option: detectors=['archon']
e-mail exchange with Ric about test data
from psana import DataSource   
#ds = DataSource(exp='rixc00121',run=140, dir='/sdf/data/lcls/drpsrcf/ffb/rix/rixc00121/xtc',detectors=['archon']) # raw data shape=(1,4800)
#ds = DataSource(exp='rixc00121',run=141, dir='/sdf/data/lcls/drpsrcf/ffb/rix/rixc00121/xtc',detectors=['archon']) # raw data shape=(1,4800)
#ds = DataSource(exp='rixc00121',run=142, dir='/sdf/data/lcls/drpsrcf/ffb/rix/rixc00121/xtc',detectors=['archon']) # raw data shape=(75,4800)
#ds = DataSource(exp='rixc00121',run=151, dir='/sdf/data/lcls/drpsrcf/ffb/rix/rixc00121/xtc',detectors=['archon']) # raw data shape=(300,4800), 35evts
#ds = DataSource(exp='rixc00121',run=152, dir='/sdf/data/lcls/drpsrcf/ffb/rix/rixc00121/xtc',detectors=['archon']) # raw data shape=(600,4800), 5evts
ds = DataSource(exp='rixc00121',run=154, dir='/sdf/data/lcls/drpsrcf/ffb/rix/rixc00121/xtc',detectors=['archon']) # raw data shape=(1200,4800), >200 evts
#ds = DataSource(exp='rixc00121',run=155, dir='/sdf/data/lcls/drpsrcf/ffb/rix/rixc00121/xtc',detectors=['archon']) # raw data shape=(600,4800)

Detector object instantiation

orun = next(ds.runs())
det = orun.Detector('archon', gainfact=2, cmpars=None)

where optional parameters

  • gainfact, default = 3.65 eV/ADU
  • cmpars, None - is not applied, not None - the only algorithm mean of fake pixels is applied.

Regular methods in the event loop

    for nev, evt in enumerate(orun.events()):
       raw   = det.raw.raw(evt)                # shape=(<number-of-rows>, 4800) # entire array
       calib = det.raw.calib(evt)              # shape=(<number-of-rows>, 4800) # entire array 
       image = det.raw.image(evt)              # shape=(<number-of-rows>, 4224) # array without fake pixels


det.raw.raw(evt) - returns per-event raw data of shape=(<number-of-rows>, 4800), including fake pixels

det.raw.calib(evt) - returns calibrated array, shaped as raw. Calibration includes pedestal subtraction, common mode correction using fake pixels, and apply common gain factor.

det.raw.image(evt) - returns the same array as det.raw.calib(evt), but without fake pixels, shape=(<number-of-rows>, 4224)

Additional methods

mask_fake = det.raw._mask_fake(raw.shape, dtype=np.uint8)

raw_as_img = det.raw._arr_to_image(raw) # removes fake pixels and convert array to the shape=(<number-of-rows>, 4224)

seg_geo = det.raw._seg_geo - segment geometry object - describes segment/panel geometry

          e.g.: x, y = det.raw._seg_geo.get_seg_xy_maps_um()

geo = det.raw._geo - detector geometry object including detector position, tilt offfset etc.

          e.g.: x, y, z = det.raw._geo.get_pixel_coords()

ccdict = det.calibconst - access dict of calibration constants

          e.g.: peds = det.calibconst['pedestals'][0] - access pedestals

TBD: timestamp = det.raw._tstamp(evt, ibank=0)

Test of the segment geometry

../lcls2/psana/psana/pscalib/geometry/test_SegGeometryArchonV1.py 2

x and y maps of pixel coordinates:

x, y = det.raw._seg_geo.get_seg_xy_maps_um()

x map - rows and columns on images are the pixel indices, x and y are shown by colors:

y map:

References

  • No labels