PSCalib/src/DCInterface.py

Go to the documentation of this file.
00001 #-----------------------------------------------------------------------------
00002 # File and Version Information:
00003 #  $Id: DCInterface.py 12730 2016-10-11 21:11:56Z dubrovin@SLAC.STANFORD.EDU $
00004 #-----------------------------------------------------------------------------
00005 
00006 """
00007 :py:class:`PSCalib.DCInterface` - abstract interface for the Detector Calibration (DC) project.
00008 
00009 @see project modules
00010     * :py:class:`PSCalib.DCStore`
00011     * :py:class:`PSCalib.DCType`
00012     * :py:class:`PSCalib.DCRange`
00013     * :py:class:`PSCalib.DCVersion`
00014     * :py:class:`PSCalib.DCBase`
00015     * :py:class:`PSCalib.DCInterface`
00016     * :py:class:`PSCalib.DCUtils`
00017     * :py:class:`PSCalib.DCDetectorId`
00018     * :py:class:`PSCalib.DCConfigParameters`
00019     * :py:class:`PSCalib.DCFileName`
00020     * :py:class:`PSCalib.DCLogger`
00021     * :py:class:`PSCalib.DCMethods`
00022     * :py:class:`PSCalib.DCEmail`
00023 
00024 This software was developed for the SIT project.
00025 If you use all or part of it, please give an appropriate acknowledgment.
00026 
00027 @version $Id: DCInterface.py 12730 2016-10-11 21:11:56Z dubrovin@SLAC.STANFORD.EDU $
00028 
00029 @author Mikhail S. Dubrovin
00030 """
00031 
00032 #---------------------------------
00033 __version__ = "$Revision: 12730 $"
00034 #---------------------------------
00035 
00036 import sys
00037 from PSCalib.DCBase import DCBase
00038 
00039 #------------------------------
00040 
00041 def print_warning(obj, metframe) :
00042     wng = 'WARNING: %s.%16s - abstract interface method needs to be re-implemented in derived class.' \
00043           % (obj.__class__.__name__, metframe.f_code.co_name)
00044     print wng
00045     #raise NotImplementedError(wng)
00046 
00047 #------------------------------
00048 
00049 class DCStoreI(DCBase) :
00050     """Abstract interface class for the Detector Calibration (DC) project
00051 
00052        cs = DCStoreI(fname)
00053 
00054        tscfile     = cs.tscfile()               # (int) time stamp of the file creation
00055        dettype     = cs.dettype()               # (str) detector type
00056        detid       = cs.detid()                 # (str) detector id
00057        detname     = cs.detname()               # (str) detector name of self object
00058        predecessor = cs.predecessor()           # (str) detname of predecessor or None
00059        successor   = cs.successor()             # (str) detname of successor or None
00060        ctypes      = cs.ctypes()                # (list) calibration types in the file
00061        cto         = cs.ctypeobj(ctype)         # (DCType ~ h5py.Group) calibration type object
00062 
00063        cs.set_tscfile(ts)                       # set (int) time stamp of the file creation 
00064        cs.set_dettype(dettype)                  # set (str) detector type
00065        cs.set_detid(detid)                      # set (str) detector id
00066        cs.set_detname(detname)                  # set (str) detector name of self object
00067        cs.set_predecessor(pred)                 # set (str) detname of predecessor or None
00068        cs.set_successor(succ)                   # set (str) detname of successor or None
00069        cs.add_ctype(ctype)                      # add (str) calibration type to the DCStore object
00070        ct = cs.mark_ctype(ctype)                # mark ctype (str) from the DCStore object, returns (str) ctype or None
00071        cs.mark_ctypes()                         # mark all ctypes from the DCStore object
00072        cs.clear_ctypes(ctype)                   # clear dictionary of ctypes in the DCStore object
00073        cs.save(path, mode)                      # save current calibration in the file specified by path, if path is Null - update current file.
00074        cs.load(path)                            # load content of the file in DCStore object
00075     """
00076 
00077     def __init__(self, fname, cmt=None) :
00078         DCBase.__init__(self, cmt)
00079         #super(DCStoreI, self).__init__()
00080         self._name = self.__class__.__name__
00081 
00082     def tscfile(self)               : print_warning(self, sys._getframe()); return None
00083     def dettype(self)               : print_warning(self, sys._getframe()); return None
00084     def detid(self)                 : print_warning(self, sys._getframe()); return None
00085     def detname(self)               : print_warning(self, sys._getframe()); return None
00086     def predecessor(self)           : print_warning(self, sys._getframe()); return None
00087     def successor(self)             : print_warning(self, sys._getframe()); return None
00088     def ctypes(self)                : print_warning(self, sys._getframe()); return None
00089     def ctypeobj(self, ctype)       : print_warning(self, sys._getframe()); return None
00090     def set_tscfile(self, ts)       : print_warning(self, sys._getframe())
00091     def set_dettype(self, dettype)  : print_warning(self, sys._getframe())
00092     def set_detid(self, detid)      : print_warning(self, sys._getframe())
00093     def set_detname(self, detname)  : print_warning(self, sys._getframe())
00094     def set_predecessor(self, pred) : print_warning(self, sys._getframe())
00095     def set_successor(self, succ)   : print_warning(self, sys._getframe())
00096     def add_ctype(self, ctype, cmt=None)      : print_warning(self, sys._getframe()); return None
00097     def mark_ctype(self, ctype)     : print_warning(self, sys._getframe()); return None
00098     def mark_ctypes(self)           : print_warning(self, sys._getframe())
00099     def clear_ctypes(self)          : print_warning(self, sys._getframe())
00100     def save(self, path)            : print_warning(self, sys._getframe())
00101     def load(self, path)            : print_warning(self, sys._getframe())
00102     def print_obj(self, offset)     : print_warning(self, sys._getframe())
00103 
00104 #------------------------------
00105 
00106 class DCTypeI(DCBase) :
00107     """Abstract interface class for the Detector Calibration (DC) project
00108 
00109        cto = DCTypeI(type)
00110 
00111        ctype       = cto.ctype()                # (str) of ctype name
00112        ranges      = cto.ranges()               # (list) of time ranges for ctype
00113        ro          = cto.rangeobj(begin, end)   # (DCRange ~ h5py.Group) time stamp validity range object
00114        ro          = cto.range_for_tsec(tsec)   # (DCRange) range object for time stamp in (double) sec
00115        ro          = cto.range_for_evt(evt)     # (DCRange) range object for psana.Evt object 
00116        cto.add_range(tsr)                       # add (str) of time ranges for ctype
00117        keyr = cto.mark_range(begin, end)        # mark range from the DCType object
00118        keyr = cto.mark_range_for_key(keyr)      # mark range from the DCType object
00119        cto.mark_ranges(tsr)                     # mark all ranges from the DCType object
00120        cto.print_obj()
00121     """
00122  
00123     def __init__(self, ctype, cmt=None) :
00124         DCBase.__init__(self, cmt)
00125         self._name = self.__class__.__name__
00126 
00127     def ctype(self)                  : print_warning(self, sys._getframe()); return None
00128     def ranges(self)                 : print_warning(self, sys._getframe()); return None
00129     def range(self, begin, end)      : print_warning(self, sys._getframe()); return None
00130     def add_range(self, begin, end, cmt=None) : print_warning(self, sys._getframe()); return None
00131     def mark_range(self, begin, end) : print_warning(self, sys._getframe()); return None
00132     def mark_range_for_key(self, k)  : print_warning(self, sys._getframe()); return None
00133     def mark_ranges(self)            : print_warning(self, sys._getframe())
00134     def clear_ranges(self)           : print_warning(self, sys._getframe())
00135     def range_for_tsec(self, tsec)   : print_warning(self, sys._getframe())
00136     def range_for_evt(self, evt)     : print_warning(self, sys._getframe())
00137     def save(self, group)            : print_warning(self, sys._getframe())
00138     def load(self, path)             : print_warning(self, sys._getframe())
00139     def print_obj(self)              : print_warning(self, sys._getframe())
00140 
00141 #------------------------------
00142 
00143 class DCRangeI(DCBase) :
00144     """Abstract interface class for the Detector Calibration (DC) project
00145 
00146        o = DCRangeI(begin, end)
00147 
00148        tsbegin     = o.begin()               # (int) time stamp beginning validity range
00149        tsend       = o.end()                 # (int) time stamp ending validity range
00150        dico        = o.versions()            # (list of uint) versions of calibrations
00151        vnum        = o.vnum_def()            # (DCVersion ~ h5py.Group) reference to the default version in the time-range object
00152        vo          = o.version(vers)         # (DCVersion ~ h5py.Group) specified version in the time-range object
00153        bool        = o.tsec_in_range(tsec)   # (bool) True/False if tsec is/not in the validity range
00154        bool        = o.evt_in_range(evt)     # (bool) True/False if evt is/not in the validity range
00155        o.set_begin(tsbegin)                  # set (int) time stamp beginning validity range
00156        o.set_end(tsend)                      # set (int) time stamp ending validity range
00157        o.add_version(vers)                   # set (DCVersion ~ h5py.Group) versions of calibrations
00158        o.set_versdef(vers)                   # set (DCVersion ~ h5py.Group) versions of calibrations
00159        vnum = o.mark_version(vers)           # del version 
00160        o.mark_versions()                     # del all registered versions
00161     """
00162 
00163     def __init__(self, begin, end, cmt=None) :
00164         DCBase.__init__(self, cmt)
00165         self._name = self.__class__.__name__
00166 
00167     def begin(self)                : print_warning(self, sys._getframe()); return None
00168     def end(self)                  : print_warning(self, sys._getframe()); return None
00169     def versions(self)             : print_warning(self, sys._getframe()); return None
00170     def version(self, vnum)        : print_warning(self, sys._getframe()); return None
00171     def vnum_def(self)             : print_warning(self, sys._getframe()); return None
00172     def vnum_last(self)            : print_warning(self, sys._getframe()); return None
00173     def set_begin(self, begin)     : print_warning(self, sys._getframe())
00174     def set_end(self, end)         : print_warning(self, sys._getframe())
00175     def add_version(self, cmt=None): print_warning(self, sys._getframe()); return None
00176     def set_vnum_def(self, vnum)   : print_warning(self, sys._getframe())
00177     def mark_version(self, vnum)   : print_warning(self, sys._getframe()); return None
00178     def mark_versions(self)        : print_warning(self, sys._getframe())
00179     def clear_versions(self)       : print_warning(self, sys._getframe())
00180     def tsec_in_range(self, tsec)  : print_warning(self, sys._getframe()); return False
00181     def evt_in_range(self, evt)    : print_warning(self, sys._getframe()); return False
00182     def save(self, group)          : print_warning(self, sys._getframe())
00183     def load(self, group)          : print_warning(self, sys._getframe())
00184     def print_obj(self)            : print_warning(self, sys._getframe())
00185 
00186 #------------------------------
00187 
00188 class DCVersionI(DCBase) :
00189     """Abstract interface class for the Detector Calibration (DC) project
00190 
00191        o = DCVersionI(vnum, tsprod=None, arr=None)
00192 
00193        o.set_vnum(vnum)            # sets (int) version 
00194        o.set_tsprod(tsprod)        # sets (double) time stamp of the version production
00195        o.add_data(nda)             # sets (np.array) calibration array
00196        vnum   = o.vnum()           # returns (int) version number
00197        s_vnum = o.str_vnum()       # returns (str) version number
00198        tsvers = o.tsprod()         # returns (double) time stamp of the version production
00199        nda    = o.data()           # returns (np.array) calibration array
00200        o.save(group)               # saves object content under h5py.group in the hdf5 file. 
00201        o.load(group)               # loads object content from the h5py.group of hdf5 file. 
00202     """
00203 
00204     def __init__(self, vnum, tsprod=None, arr=None, cmt=None) :
00205         DCBase.__init__(self, cmt)
00206         self._name = self.__class__.__name__
00207 
00208     def set_vnum(self, vnum)       : print_warning(self, sys._getframe())
00209     def set_tsprod(self, tsprod)   : print_warning(self, sys._getframe())
00210     def add_data(self, nda)        : print_warning(self, sys._getframe())
00211     def vnum(self)                 : print_warning(self, sys._getframe()); return None
00212     def str_vnum(self)             : print_warning(self, sys._getframe()); return None
00213     def tsprod(self)               : print_warning(self, sys._getframe()); return None
00214     def data(self)                 : print_warning(self, sys._getframe()); return None
00215     def save(self, group)          : print_warning(self, sys._getframe())
00216     def load(self, group)          : print_warning(self, sys._getframe())
00217     def print_obj(self)            : print_warning(self, sys._getframe())
00218 
00219 #------------------------------
00220 #------------------------------
00221 #----------- TEST -------------
00222 #------------------------------
00223 #------------------------------
00224 
00225 def test_DCStoreI() :
00226 
00227     o = DCStoreI(None)  # 'cfname.hdf5'
00228 
00229     r = o.tscfile()
00230     r = o.dettype()
00231     r = o.detid()
00232     r = o.detname()
00233     r = o.predecessor()
00234     r = o.successor()
00235     r = o.ctypes()
00236     r = o.ctypeobj(None)
00237     o.set_tscfile(None)
00238     o.set_dettype(None)
00239     o.set_detid(None)
00240     o.set_detname(None)
00241     o.set_predecessor(None)
00242     o.set_successor(None)
00243     o.add_ctype(None)
00244     t = o.mark_ctype(None)
00245     o.mark_ctypes()
00246     o.clear_ctypes()
00247     o.save(None)
00248     o.load(None)
00249 
00250 #------------------------------
00251 
00252 def test_DCTypeI() :
00253 
00254     o = DCTypeI(None)
00255 
00256     r = o.ctype()
00257     r = o.ranges()
00258     r = o.range(None, None)
00259     o.add_range(None, None)
00260     o.mark_range(None, None)
00261     r = o.mark_range_for_key(None)
00262     o.mark_ranges()
00263     o.save(None)
00264     o.load(None)
00265 
00266 #------------------------------
00267 
00268 def test_DCRangeI() :
00269 
00270     o = DCRangeI(None, None)
00271 
00272     b = o.begin()
00273     e = o.end()
00274     v = o.versions()
00275     n = o.vnum_def()
00276     r = o.version(None)
00277     o.set_begin(None)
00278     o.set_end(None)
00279     v = o.add_version()
00280     o.set_vnum_def(None)
00281     v = o.del_version(None)
00282     o.del_versions()
00283     o.save(None)
00284     o.load(None)
00285 
00286 #------------------------------
00287 
00288 def test_DCVersionI() :
00289 
00290     o = DCVersionI(None)
00291 
00292     r = o.vnum()
00293     r = o.str_vnum()
00294     r = o.tsprod()
00295     r = o.data()
00296     o.set_vnum(None)
00297     o.set_tsprod(None)
00298     o.add_data(None)
00299     o.save(None)
00300     o.load(None)
00301 
00302 #------------------------------
00303 
00304 def test() :
00305     if len(sys.argv)==1 : print 'For test(s) use command: python %s <test-number=1-4>' % sys.argv[0]
00306     elif(sys.argv[1]=='1') : test_DCStoreI()        
00307     elif(sys.argv[1]=='2') : test_DCTypeI()        
00308     elif(sys.argv[1]=='3') : test_DCRangeI()        
00309     elif(sys.argv[1]=='4') : test_DCVersionI()        
00310     else : print 'Non-expected arguments: sys.argv = %s use 1,2,...' % sys.argv
00311 
00312 #------------------------------
00313 
00314 if __name__ == "__main__" :
00315     test()
00316     sys.exit( 'End of %s test.' % sys.argv[0])
00317 
00318 #------------------------------

Generated on 19 Dec 2016 for PSANAmodules by  doxygen 1.4.7