Content
Purpose
- short-term goal - support detectors moving across LCLS experiments in a single place.
- perspective goal - calibration store for LCLS-II
It is assumed that in modern detectors its hardware configuration will be associated with configuration index coming from DAQ. This index can be used to extract hardly retrievable calibration data such as geometry, gain factors etc. in case of transition of the detector from one experiment to another.
Architecture
Requirements
- instrument independent - detector can be moved between instruments and hatches
- experiment independent - detector can be moved between experiments
- portability - calibration data for particular detector should be portable as a self consistent file
- combination of FS & DB files (hdf5 for uniformity)
- management model - calibration data should be managed through API only in order to prevent adding/removing unknown files without history
- API + GUI for central management
- deployment -
Location of calibration directory
In LCLS data FS
/reg/g/psdm/detector/alignment/...
/reg/g/psdm/detector/calib
or
/reg/d/psdm/<INS>/<experiment>/calib # path to current experiment-dependent calibration
/reg/d/psdm/calib/ # instrument and experiment independent path
In local space
keep entire calib path
- <path>/calib/<type>/<detname>-<detid>.h5
or use it directly
- <path>/<detname>-<detid>.h5
Structure of calibration directory
Everything in lower case:
<path>/calib/ <type>/ cspad2x2/ pnccd/ epix100a/ cspad/ <calib-files> <detname>-<detid>.h5 <detname>-<detid>.h5
Data flow
- who produces and supply constants
- who is allowed to submit constants
- whi is allowed to access constants
- ACL inside API or using OS
- ACL for all or particular detector/type/ etc.
Data and metadata
Below are the lists of fields which can be used to define detector and access calibrations
Detector metadata
Field name | Description | More details, example |
---|---|---|
dettype | detector type | CSPAD, CSPAD2X2, EPIX100A, etc. |
detname | detector unique name | (if any) ex.: Camera1 |
detalias | alias name | if it is hard to memorize the entire name, ex.: 'cspad1' |
detidx | detector index | integer number which codes the hardware version |
detidxalias | symbolic alias of the index | can be used if it is hard to memorize the index integer number |
detcompidx:001 | list of component indexes | just in case if we are going to retrieve calibration parameters for separate components |
detidxprev | detector index for previous version | detector index for previous version (if available) for the purpose of old calibration search |
detidxnext | detector index for next version | detector index for next version (if available) for the purpose of new calibration search |
dettsec | time-stamp | time stamp associated with beginning of the validity range for new configuration |
detcom:001 | comments for this hardware version | as it says {key:comment} |
dettag:001 | other tags | just in case if something is forgotten in this table |
Calibration parameters' metadata
Field name | Description | More details, example |
---|---|---|
calibtype | calibration type | ex.: geometry, pixel_status, pixel_gain, pedestals, common_mode, etc. |
tsec | time stamp | beginning of the validity range |
exp | original experiment | (if available) where calibration constants were obtained |
runnum | original run number | (if available) where calibration constants were obtained |
runbegin | begin run number | (if available) for validity range |
runend | end run number | (if available) for validity range |
source | original DAQ data source | data source from DAQ, ex.: 'CxiDs2.0:Cspad.0' |
srcalias | data source alias | ex.: 'cspad' |
calibvers | version tag | in order to access using symbolic name or some alias |
calibversalias | version alias | if it is hard to memorize version tag |
com:001 | comments for this version | as it says {key:comment} |
tag:001 | other tags | just in case if something is forgotten in this table |
In case of numpy array their metadata are stored with an object.
Text file needs in n-d array metadata
n-d array metadata
Field name | Description | More details, example |
---|---|---|
dtype | data type | int, float, double, etc |
ndims | number of dimensions (N) | as it says |
dim:1 | size of dim.1 | ... |
dim:2 | size of dim.2 | ... |
... | ... | ... |
dim:N | size of dim.N | ... |
API
Initialization
# Import from PSCalib.CalibStore import CalibStore # Initialization cpath = '/reg/g/psdm/detector/calib' # default calib directory cpath = '<path>/calib' # local calib directory cpath = '<path>/<detname>-<detid>.h5' # direct to file cpath = env.calibDir() # '/reg/d/psdm/<INS>/<experiment>/calib' - accept current directory dname = 'pnccd-12345678' # standard name includes detector type, dash, and n-digit id number dname = 'Camera1' # alias dname = 'Camp.0:pnCCD.1' # accept source runnum = 10 # or evt.run() cs = CalibStore(cpath, dname)
UI - acess methods
p = evt.run() # run number, evt, tstamp - parameter to ifentify constants nda = cs.pedestals(p) nda = cs.pixel_status(p) nda = cs.pixel_rms(p) nda = cs.pixel_mask(p) nda = cs.pixel_gain(p) nda = cs.pixel_bkgd(p) nda = cs.common_mode(p)
TBD
Open questions
- Do we have to account for detector version, FEE version, controller version, etc?
- one DB file per
- detector version idx
- detector name (idx-s inside?)
- db location
- file name
- master file
- when constants are updated (file open to write) they are not available... Lock to resolve.
References