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']
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: