Source code for PSCalib.DCDetectorId
#-----------------------------------------------------------------------------
# File and Version Information:
# $Id: DCDetectorId.py 12871 2016-11-14 22:19:31Z dubrovin@SLAC.STANFORD.EDU $
#-----------------------------------------------------------------------------
"""
:py:class:`PSCalib.DCDetectorId` - class for the Detector Calibration (DC) project.
Usage::
# Import
from PSCalib.DCDetectorId import id_epix, id_cspad
# Parameters
dsn = 'exp=cxif5315:run=169'
# or
dsn = '/reg/g/psdm/detector/data_test/types/0003-CxiDs2.0-Cspad.0-fiber-data.xtc'
ds = psana.DataSource(dsn)
env = ds.env()
src = psana.Source('CxiDs2.0:Cspad.0') # or unique portion of the name ':Cspad.' or alias 'DsaCsPad'
# Access methods
ide = id_epix(env, src)
idc = id_cspad(env, src)
@see project modules
* :py:class:`PSCalib.DCStore`
* :py:class:`PSCalib.DCType`
* :py:class:`PSCalib.DCRange`
* :py:class:`PSCalib.DCVersion`
* :py:class:`PSCalib.DCBase`
* :py:class:`PSCalib.DCInterface`
* :py:class:`PSCalib.DCUtils`
* :py:class:`PSCalib.DCDetectorId`
* :py:class:`PSCalib.DCConfigParameters`
* :py:class:`PSCalib.DCFileName`
* :py:class:`PSCalib.DCLogger`
* :py:class:`PSCalib.DCMethods`
* :py:class:`PSCalib.DCEmail`
This software was developed for the SIT project.
If you use all or part of it, please give an appropriate acknowledgment.
@version $Id: DCDetectorId.py 12871 2016-11-14 22:19:31Z dubrovin@SLAC.STANFORD.EDU $
@author Mikhail S. Dubrovin
"""
#---------------------------------
__version__ = "$Revision: 12871 $"
#---------------------------------
#import os
#import math
#import numpy as np
#from time import time
from PSCalib.DCUtils import detector_full_name, psana_source
from Detector.PyDataAccess import\
get_cspad_config_object,\
get_cspad2x2_config_object,\
get_epix_config_object
#------------------------------
[docs]def id_epix(env, src) :
"""Returns Epix100 Id as a string, e.g., 3925999616-0996663297-3791650826-1232098304-0953206283-2655595777-0520093719"""
psa_src = psana_source(env, src)
o = get_epix_config_object(env, psa_src)
fmt2 = '%010d-%010d'
zeros = fmt2 % (0,0)
version = '%010d' % (o.version()) if getattr(o, "version", None) is not None else '%010d' % 0
carrier = fmt2 % (o.carrierId0(), o.carrierId1())\
if getattr(o, "carrierId0", None) is not None else zeros
digital = fmt2 % (o.digitalCardId0(), o.digitalCardId1())\
if getattr(o, "digitalCardId0", None) is not None else zeros
analog = fmt2 % (o.analogCardId0(), o.analogCardId1())\
if getattr(o, "analogCardId0", None) is not None else zeros
return '%s-%s-%s-%s' % (version, carrier, digital, analog)
#------------------------------
[docs]def id_cspad(env, src) :
"""Returns detector full name for any src, e.g., XppGon.0:Cspad2x2.0"""
return detector_full_name(env, src)
#------------------------------
[docs]def id_det_noid(env, src) :
"""Returns detector full name for any src, e.g., XppGon.0:Cspad2x2.0"""
return detector_full_name(env, src)
#------------------------------
#------------------------------
#------------------------------
#------------------------------
#------------------------------
#------------------------------
[docs]def test_id_epix() :
dsn = '/reg/g/psdm/detector/data_test/types/0019-XppGon.0-Epix100a.0.xtc'
src = 'XppGon.0:Epix100a.0'
ds = psana.DataSource(dsn)
env = ds.env()
print 20*'_', '\n%s:' % sys._getframe().f_code.co_name
print 'dataset : %s' % dsn
print 'source : %s' % src
print 'Detector Id : %s' % id_epix(env, src)
#------------------------------
[docs]def test_id_cspad() :
dsn = '/reg/g/psdm/detector/data_test/types/0003-CxiDs2.0-Cspad.0-fiber-data.xtc'
src = ':Cspad.0' # 'CxiDs2.0:Cspad.0'
ds = psana.DataSource(dsn)
env = ds.env()
print 20*'_', '\n%s:' % sys._getframe().f_code.co_name
print 'dataset : %s' % dsn
print 'source : %s' % src
print 'Detector Id : %s' % id_cspad(env, src)
#------------------------------
[docs]def do_test() :
tname = sys.argv[1] if len(sys.argv) > 1 else '0'
print 50*'_', '\nTest %s:' % tname
if tname == '0' : test_id_epix(); test_id_cspad()
elif tname == '1' : test_id_epix()
elif tname == '2' : test_id_cspad()
else : print 'Not-recognized test: %s' % tname
sys.exit( 'End of test %s' % tname)
#------------------------------
if __name__ == "__main__" :
import sys; global sys
import psana; global psana
do_test()
#------------------------------