00001
00002
00003
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
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
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
00222
00223
00224
00225 def test_DCStoreI() :
00226
00227 o = DCStoreI(None)
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