Source code for CalibParsStore
#!/usr/bin/env python
#------------------------------
"""
:py:class:`CalibParsStore` - a factory class/method
===================================================
Switches between different device-dependent calibration constants using :py:class:`CalibPars` interface.
Usage::
# Import
from PSCalib.CalibParsStore import cps
from PSCalib.GlobalUtils import *
# Initialization
calibdir = env.calibDir() # or e.g. '/reg/d/psdm/<INS>/<experiment>/calib'
group = None # or e.g. 'CsPad::CalibV1'
source = 'Camp.0:pnCCD.1'
runnum = 10 # or e.g. evt.run()
pbits = 255
o = cps.Create(calibdir, group, source, runnum, pbits)
# or using different list of parameters to access calibration from hdf5 DCS file:
o = cps.CreateForEvtEnv(self, calibdir, group, source, evt, env, pbits=0)
# Access methods
nda = o.pedestals()
nda = o.pixel_status()
nda = o.pixel_datast()
nda = o.pixel_rms()
nda = o.pixel_mask()
nda = o.pixel_gain()
nda = o.pixel_offset()
nda = o.pixel_bkgd()
nda = o.common_mode()
status = o.status(ctype=PEDESTALS) # see list of ctypes in :py:class:`GlobalUtils`
shape = o.shape(ctype)
size = o.size(ctype)
ndim = o.ndim(ctype)
Methods:
- :py:meth:`Create`
- :py:meth:`CreateForEvtEnv`
See:
- :py:class:`GenericCalibPars`
- :py:class:`GlobalUtils`
- :py:class:`CalibPars`
- :py:class:`CalibParsStore`
- :py:class:`CalibParsBaseAndorV1`
- :py:class:`CalibParsBaseAndor3dV1`
- :py:class:`CalibParsBaseCameraV1`
- :py:class:`CalibParsBaseCSPad2x2V1`
- :py:class:`CalibParsBaseCSPadV1`
- :py:class:`CalibParsBaseEpix100aV1`
- :py:class:`CalibParsBasePnccdV1`
- :py:class:`CalibParsBasePrincetonV1`
- :py:class:`CalibParsBaseAcqirisV1`
- :py:class:`CalibParsBaseImpV1`
This software was developed for the SIT project. If you use all or
part of it, please give an appropriate acknowledgment.
Created: 2013-03-08 by Mikhail Dubrovin
"""
import sys
#------------------------------
import PSCalib.GlobalUtils as gu
from PSCalib.GenericCalibPars import GenericCalibPars
from PSCalib.CalibParsBaseAndorV1 import CalibParsBaseAndorV1
from PSCalib.CalibParsBaseAndor3dV1 import CalibParsBaseAndor3dV1
from PSCalib.CalibParsBaseCameraV1 import CalibParsBaseCameraV1
from PSCalib.CalibParsBaseCSPad2x2V1 import CalibParsBaseCSPad2x2V1
from PSCalib.CalibParsBaseCSPadV1 import CalibParsBaseCSPadV1
from PSCalib.CalibParsBaseEpix100aV1 import CalibParsBaseEpix100aV1
from PSCalib.CalibParsBasePnccdV1 import CalibParsBasePnccdV1
from PSCalib.CalibParsBasePrincetonV1 import CalibParsBasePrincetonV1
from PSCalib.CalibParsBaseAcqirisV1 import CalibParsBaseAcqirisV1
from PSCalib.CalibParsBaseImpV1 import CalibParsBaseImpV1
from PSCalib.CalibParsBaseJungfrauV1 import CalibParsBaseJungfrauV1
#------------------------------
#------------------------------
cps = CalibParsStore()
#------------------------------
#------------------------------
#----------- TEST -------------
#------------------------------
#------------------------------
import numpy as np
def print_nda(nda, cmt='') :
arr = nda if isinstance(nda, np.ndarray) else np.array(nda)
str_arr = str(arr) if arr.size<5 else str(arr.flatten()[0:5])
print '%s %s: shape=%s, size=%d, dtype=%s, data=%s' % \
(cmt, type(nda), str(arr.shape), arr.size, str(arr.dtype), str_arr)
#------------------------------
def test_Create(tname='0') :
calibdir = '/reg/d/psdm/CXI/cxif5315/calib'
group = None # will be substituted from dictionary or 'CsPad::CalibV1'
source = 'CxiDs2.0:Cspad.0'
runnum = 60
pbits = 0
if(tname=='0') :
o = cps.Create(calibdir, group, source, runnum, pbits)
o.print_attrs()
print_nda(o.pedestals(), 'pedestals')
print_nda(o.pixel_rms(), 'pixel_rms')
print_nda(o.pixel_mask(), 'pixel_mask')
print_nda(o.pixel_status(), 'pixel_status')
print_nda(o.pixel_gain(), 'pixel_gain')
print_nda(o.common_mode(), 'common_mode')
print_nda(o.pixel_bkgd(), 'pixel_bkgd')
print_nda(o.shape(), 'shape')
print 'size=%d' % o.size()
print 'ndim=%d' % o.ndim()
statval = o.status(gu.PEDESTALS)
print 'status(PEDESTALS)=%d: %s' % (statval, gu.dic_calib_status_value_to_name[statval])
statval = o.status(gu.PIXEL_GAIN)
print 'status(PIXEL_GAIN)=%d: %s' % (statval, gu.dic_calib_status_value_to_name[statval])
else : print 'Non-expected arguments: sys.argv = %s use 1,2,...' % sys.argv
#------------------------------
def test_CreateForEvtEnv(tname='0') :
from psana import DataSource
dsname = 'exp=cxif5315:run=129'
source = 'CxiDs2.0:Cspad.0'
if tname == '2' :
dsname = '/reg/g/psdm/detector/data_test/types/0019-XppGon.0-Epix100a.0.xtc'
source = 'XppGon.0:Epix100a.0'
ds = DataSource(dsname)
env = ds.env()
calibdir = env.calibDir() # '/reg/d/psdm/CXI/cxif5315/calib'
group = None # will be substituted from dictionary or 'CsPad::CalibV1'
runnum = 160
pbits = 0
par = runnum
o = cps.CreateForEvtEnv(calibdir, group, source, par, env, pbits)
o.print_attrs()
#------------------------------
if __name__ == "__main__" :
tname = sys.argv[1] if len(sys.argv) > 1 else '0'
print 50*'_', '\nTest %s:' % tname
if tname == '0' : test_Create(tname)
elif tname in ('1','2') : test_CreateForEvtEnv(tname)
else : print 'Non-implemented test: %s' % tname
sys.exit( 'End of %s test.' % sys.argv[0])
#------------------------------