00001
00002
00003
00004
00005
00006
00007
00008 """
00009 :py:class:`PSCalib.DCMethods` - contains a set of utilities for direct operations with calibration data.
00010
00011 Usage::
00012
00013 # Import
00014 import PSCalib.DCMethods as dcm
00015
00016 # Example of parameters
00017
00018 dsname = 'exp=cxif5315:run=129'
00019 # or:
00020 dsname = '/reg/g/psdm/detector/data_test/xtc/cxif5315-e545-r0169-s00-c00.xtc'
00021 src = 'Cspad.' # 'Epix100a.', etc
00022 ctype = gu.PIXEL_MASK # OR: gu.PEDESTALS, gu.PIXEL_STATUS, etc.
00023 vers = None # or e.g. 5
00024 calibdir = None # or e.g. './calib'
00025 nda = np.zeros((32,185,388))
00026 pred = 'CxiDs2.0:Cspad.0'
00027 succ = 'CxiDs2.0:Cspad.0'
00028 range = '1474587520-end'
00029
00030 # Methods with dynamically-reconstruction of calib file name
00031 dcm.add_constants(nda, evt, env, src, ctype, calibdir, vers=None, pred=None, succ=None, cmt=None)
00032 dcm.print_content(env, src, calibdir=None)
00033 nda = dcm.get_constants(evt, env, src, ctype, calibdir=None, vers=None, verb=False)
00034 dcm.delete_version(evt, env, src, ctype, calibdir=None, vers=None, verb=False)
00035 dcm.delete_range (evt, env, src, ctype, calibdir, range, cmt, verb)
00036 dcm.delete_ctype (evt, env, src, ctype, calibdir, cmt, verb)
00037
00038 # Methods using fname
00039 dcm.add_constants_to_file(data, fname, par, env, ctype, vers=None, pred=None, succ=None, cmt=None)
00040 dcm.print_content_from_file(fname)
00041 nda = dcm.get_constants_from_file(fname, evt, ctype, vers=None, verb=False)
00042 dcm.delete_version_from_file(fname, ctype, vers=None, cmt=None, verb=False)
00043 dcm.delete_range_from_file (fname, ctype, range, cmt, verb)
00044 dcm.delete_ctype_from_file (fname, ctype, cmt, verb)
00045
00046 @see methods
00047 :meth:`add_constants`,
00048 :meth:`add_constants_to_file`,
00049 :meth:`print_content`,
00050 :meth:`print_content_from_file`,
00051 :meth:`get_constants`,
00052 :meth:`get_constants_from_file`,
00053 :meth:`delete_version`,
00054 :meth:`delete_version_from_file`,
00055 :meth:`delete_range`,
00056 :meth:`delete_range_from_file`,
00057 :meth:`delete_ctype`
00058 :meth:`delete_ctype_from_file`
00059
00060 @see project modules
00061 * :class:`PSCalib.DCStore`
00062 * :class:`PSCalib.DCType`
00063 * :class:`PSCalib.DCRange`
00064 * :class:`PSCalib.DCVersion`
00065 * :class:`PSCalib.DCBase`
00066 * :class:`PSCalib.DCInterface`
00067 * :class:`PSCalib.DCUtils`
00068 * :class:`PSCalib.DCDetectorId`
00069 * :class:`PSCalib.DCConfigParameters`
00070 * :class:`PSCalib.DCFileName`
00071 * :class:`PSCalib.DCLogger`
00072 * :class:`PSCalib.DCMethods`
00073 * :class:`PSCalib.DCEmail`
00074
00075 This software was developed for the SIT project.
00076 If you use all or part of it, please give an appropriate acknowledgment.
00077
00078 @version $Id: 2016-09-23$
00079
00080 @author Mikhail S. Dubrovin
00081 """
00082
00083
00084 __version__ = "$Revision: 12894 $"
00085
00086
00087 import sys
00088 import os
00089
00090
00091 from time import time
00092
00093 from PSCalib.DCLogger import log
00094 from PSCalib.DCFileName import DCFileName
00095 import PSCalib.DCUtils as dcu
00096 from PSCalib.DCStore import DCStore
00097
00098 sp = dcu.sp
00099 gu = dcu.gu
00100
00101
00102
00103 def is_good_fname(fname, verb=False) :
00104 """Checks the hdf5 file name parameter fname validity, returns True or False.
00105
00106 Parameters
00107
00108 fname : str - full path to the file
00109 """
00110 metname = sys._getframe().f_code.co_name
00111
00112 if fname is None :
00113 if verb : print '%s WARNING: file name is None' % metname
00114 return False
00115
00116 if not isinstance(fname, str) :
00117 if verb : print '%s WARNING: parameter fname is not str' % metname
00118 return False
00119
00120 if not os.path.exists(fname) :
00121 if verb : print '%s WARNING: file %s does not exist' % (metname, fname)
00122 return False
00123
00124 return True
00125
00126
00127
00128 def evt_to_tsec(par) :
00129 """Checks if par is float or assumes that it is psana.Event and returns event time in (float) sec or None.
00130 Parameters
00131
00132 par : psana.Event | float - tsec event time | None
00133 """
00134 return None if par is None else\
00135 par if isinstance(par, float) else\
00136 dcu.evt_time(par)
00137
00138
00139
00140
00141
00142 def add_constants_to_file(data, fname, par, env=None, ctype=gu.PIXEL_MASK,\
00143 vers=None,\
00144 pred=None,\
00145 succ=None,\
00146 cmt=None,\
00147 verb=False) :
00148 """Adds specified numpy array to the hdf5 file.
00149
00150 Parameters
00151
00152 data : numpy.array or str - array or string of calibration constants/data to save in file
00153 fname: full path to the hdf5 file
00154 par : psana.Event | float - tsec event time
00155 env : psana.Env -> full detector name for psana.Source
00156 ctype: gu.CTYPE - enumerated calibration type, e.g.: gu.PIXEL_MASK
00157 vers : int - calibration version
00158 pred : str - predecessor name
00159 succ : str - successor name
00160 cmt : str - comment saved as a history record within DCRange
00161 verb : bool - verbosity, default=False - do not prnt any message
00162
00163 Back to :py:class:`PSCalib.DCMethods`
00164 """
00165 metname = sys._getframe().f_code.co_name
00166
00167 str_ctype = gu.dic_calib_type_to_name[ctype]
00168
00169 if verb : print ' %s.add_constants_to_file ctype: %s vers: %s'%\
00170 (metname, str_ctype, vers)
00171
00172 if fname is None :
00173 if verb : print 'WARNING: file name is not defined - return None'
00174 return
00175
00176 tsec_ev = evt_to_tsec(par)
00177
00178 cs = DCStore(fname)
00179
00180 if verb : log.setPrintBits(0377)
00181
00182 if os.path.exists(fname) : cs.load()
00183
00184 cs.set_tscfile(tsec=tsec_ev)
00185 cs.set_predecessor(pred)
00186 cs.set_successor(succ)
00187
00188 msg = 'detname:%s predecessor:%s successor:%s ts:%.0f' %\
00189 (cs.detname(), cs.predecessor(), cs.successor(), cs.tscfile())
00190
00191
00192
00193 ct = cs.add_ctype(str_ctype, cmt='')
00194 if ct is None : return
00195
00196
00197
00198 exp = env.experiment() if env is not None else ''
00199 exp = exp if exp != '' else 'unknown'
00200 runnum = par.run() if not isinstance(par,float) else 0
00201 msg = 'exp=%s:run=%s' % (exp, str(runnum))
00202 cr = ct.add_range(tsec_ev, end=None, cmt=msg)
00203 if cr is None : return
00204 cr.add_par('experiment', exp)
00205 cr.add_par('run', str(runnum))
00206
00207
00208 msg = '' if cmt is None else cmt
00209 cv = cr.add_version(vnum=vers, tsec_prod=time(), nda=data, cmt=msg)
00210 if cv is None : return
00211
00212
00213
00214
00215 if verb :
00216 print 50*'_','\nIn %s:' % metname
00217 cs.print_obj()
00218
00219 if verb : log.setPrintBits(02)
00220
00221 cs.save()
00222
00223
00224
00225 def add_constants(data, evt, env, src='Epix100a.', ctype=gu.PIXEL_MASK, calibdir=None,\
00226 vers=None,\
00227 pred=None,\
00228 succ=None,\
00229 cmt=None,\
00230 verb=False) :
00231 """Adds specified numpy array to the hdf5 file.
00232
00233 Parameters
00234
00235 data : numpy.array or str - array or string of calibration constants/data to save in file
00236 env : psana.Env -> full detector name for psana.Source
00237 evt : psana.Event -> event time
00238 src : str - source short/full name, alias or full
00239 ctype: gu.CTYPE - enumerated calibration type, e.g.: gu.PIXEL_MASK
00240 calibdir : str - fallback path to calib dir (if xtc file is copied - calib and experiment name are lost)
00241 vers : int - calibration version
00242 pred : str - predecessor name
00243 succ : str - successor name
00244 cmt : str - comment saved as a history record within DCRange
00245 verb : bool - verbosity, default=False - do not prnt any message
00246
00247 Back to :py:class:`PSCalib.DCMethods`
00248 """
00249 metname = sys._getframe().f_code.co_name
00250
00251 str_ctype = gu.dic_calib_type_to_name[ctype]
00252
00253 if verb : print ' %s.add_constants src: %s\n ctype: %s\n vers: %s\n calibdir:%s'%\
00254 (metname, src, str_ctype, vers, calibdir)
00255
00256 ofn = DCFileName(env, src, calibdir)
00257 if verb : ofn.print_attrs()
00258 ofn.make_path_to_calib_file()
00259
00260 fname = ofn.calib_file_path()
00261
00262 add_constants_to_file(data, fname, evt, env, ctype, vers, pred, succ, cmt, verb)
00263
00264
00265
00266
00267
00268 def get_constants_from_file(fname, par, ctype=gu.PIXEL_MASK, vers=None, verb=False) :
00269 """Returns specified array of calibration constants.
00270
00271 Parameters
00272
00273 fname : full path to the hdf5 file
00274 par : psana.Event | float - tsec event time
00275 ctype : gu.CTYPE - enumerated calibration type, e.g.: gu.PIXEL_MASK
00276 vers : int - calibration version
00277
00278 Back to :py:class:`PSCalib.DCMethods`
00279 """
00280 if not is_good_fname(fname, verb) : return None
00281
00282 cs = DCStore(fname)
00283 cs.load()
00284 if verb :
00285 print 50*'_','\nDCStore.print_obj()'
00286 cs.print_obj()
00287
00288 str_ctype = gu.dic_calib_type_to_name[ctype]
00289 ct = cs.ctypeobj(str_ctype)
00290 if ct is None : return None
00291
00292
00293 tsec = evt_to_tsec(par)
00294
00295 cr = ct.range_for_tsec(tsec)
00296
00297
00298 if cr is None : return None
00299
00300
00301 cv = cr.version(vnum=vers)
00302 if cv is None : return None
00303
00304
00305 return cv.data()
00306
00307
00308
00309 def get_constants(par, env, src='Epix100a.', ctype=gu.PIXEL_MASK, calibdir=None, vers=None, verb=False) :
00310 """Returns specified array of calibration constants.
00311
00312 Parameters
00313
00314 par : psana.Event | float - tsec event time
00315 env : psana.Env -> full detector name for psana.Source
00316 src : str - source short/full name, alias or full
00317 ctype : gu.CTYPE - enumerated calibration type, e.g.: gu.PIXEL_MASK
00318 calibdir : str - fallback path to calib dir (if xtc file is copied - calib and experiment name are lost)
00319 vers : int - calibration version
00320
00321 Back to :py:class:`PSCalib.DCMethods`
00322 """
00323 metname = sys._getframe().f_code.co_name
00324
00325 str_ctype = gu.dic_calib_type_to_name[ctype]
00326 if verb : print ' %s.get_constants src: %s\n ctype: %s\n vers: %s\n calibdir:%s'%\
00327 (metname, src, str_ctype, vers, calibdir)
00328
00329 ofn = DCFileName(env, src, calibdir)
00330 if verb : ofn.print_attrs()
00331
00332 fname = ofn.calib_file_path()
00333
00334 return get_constants_from_file(fname, par, ctype, vers, verb)
00335
00336
00337
00338
00339
00340 def delete_version_from_file(fname, par, ctype=gu.PIXEL_MASK, vers=None, cmt=None, verb=False) :
00341 """Delete specified version from calibration constants.
00342
00343 Parameters
00344
00345 fname : full path to the hdf5 file
00346 par : psana.Event | float - tsec event time
00347 ctype : gu.CTYPE - enumerated calibration type, e.g.: gu.PIXEL_MASK
00348 vers : int - calibration version
00349 cmt : str - comment
00350 verb : bool - verbousity
00351
00352 Back to :py:class:`PSCalib.DCMethods`
00353 """
00354 metname = sys._getframe().f_code.co_name
00355
00356 str_ctype = gu.dic_calib_type_to_name[ctype]
00357 if verb : print ' %s.delete_version_from_file: ctype: %s vers: %s'%\
00358 (metname, str_ctype, vers)
00359
00360 if not is_good_fname(fname, verb) : return None
00361
00362 cs = DCStore(fname)
00363 cs.load()
00364
00365 ct = cs.ctypeobj(str_ctype)
00366 if ct is None : return None
00367
00368
00369 tsec = evt_to_tsec(par)
00370 cr = ct.range_for_tsec(tsec)
00371 if cr is None : return None
00372
00373 v = vers if vers is not None else cr.vnum_last()
00374
00375 vdel = cr.mark_version(vnum=vers, cmt=cmt)
00376
00377 if verb : log.setPrintBits(02)
00378
00379 cs.save()
00380
00381 if verb :
00382 print 50*'_','\nDCStore.print_obj() after delete version %s' % str(vdel)
00383 cs.print_obj()
00384
00385 return vdel
00386
00387
00388
00389 def delete_version(evt, env, src='Epix100a.', ctype=gu.PIXEL_MASK, calibdir=None, vers=None, cmt=None, verb=False) :
00390 """Delete specified version from calibration constants.
00391
00392 Parameters
00393
00394 evt : psana.Event -> event time
00395 env : psana.Env -> full detector name for psana.Source
00396 src : str - source short/full name, alias or full
00397 ctype : gu.CTYPE - enumerated calibration type, e.g.: gu.PIXEL_MASK
00398 calibdir : str - fallback path to calib dir (if xtc file is copied - calib and experiment name are lost)
00399 vers : int - calibration version
00400 cmt : str - comment
00401 verb : bool - verbousity
00402
00403 Back to :py:class:`PSCalib.DCMethods`
00404 """
00405 metname = sys._getframe().f_code.co_name
00406
00407 str_ctype = gu.dic_calib_type_to_name[ctype]
00408 if verb : print ' %s.delete_version:\n src: %s\n ctype: %s\n vers: %s\n calibdir:%s'%\
00409 (metname, src, str_ctype, vers, calibdir)
00410
00411 ofn = DCFileName(env, src, calibdir)
00412 if verb : ofn.print_attrs()
00413
00414 fname = ofn.calib_file_path()
00415
00416 return delete_version_from_file(fname, evt, ctype, vers, cmt, verb)
00417
00418
00419
00420
00421
00422 def delete_range_from_file(fname, ctype=gu.PIXEL_MASK, range=None, cmt=None, verb=False) :
00423 """Delete specified time range from calibration constants.
00424
00425 Parameters
00426
00427 fname : full path to the hdf5 file
00428 ctype : gu.CTYPE - enumerated calibration type, e.g.: gu.PIXEL_MASK
00429 range : str - range, e.g. '1474587520-end'
00430 cmt : str - comment
00431 verb : bool - verbousity
00432
00433 Back to :py:class:`PSCalib.DCMethods`
00434 """
00435 metname = sys._getframe().f_code.co_name
00436
00437 str_ctype = gu.dic_calib_type_to_name[ctype]
00438 if verb : print ' %s.delete_range_from_file ctype: %s range: %s'%\
00439 (metname, str_ctype, range)
00440
00441 if not is_good_fname(fname, verb) : return None
00442
00443 cs = DCStore(fname)
00444 cs.load()
00445
00446
00447 ct = cs.ctypeobj(str_ctype)
00448 if ct is None : return None
00449
00450 rdel = ct.mark_range_for_key(range, cmt=cmt)
00451 if rdel is None : return None
00452
00453 if verb : log.setPrintBits(02)
00454
00455 cs.save()
00456
00457 if verb :
00458 print 50*'_','\nDCStore.print_obj() after delete range %s' % rdel
00459 cs.print_obj()
00460
00461 return rdel
00462
00463
00464
00465 def delete_range(evt, env, src='Epix100a.', ctype=gu.PIXEL_MASK, calibdir=None, range=None, cmt=None, verb=False) :
00466 """Delete specified time range from calibration constants.
00467
00468 Parameters
00469
00470 evt : psana.Event -> event time
00471 env : psana.Env -> full detector name for psana.Source
00472 src : str - source short/full name, alias or full
00473 ctype : gu.CTYPE - enumerated calibration type, e.g.: gu.PIXEL_MASK
00474 calibdir : str - fallback path to calib dir (if xtc file is copied - calib and experiment name are lost)
00475 range : str - range, e.g. '1474587520-end'
00476 cmt : str - comment
00477 verb : bool - verbousity
00478
00479 Back to :py:class:`PSCalib.DCMethods`
00480 """
00481 metname = sys._getframe().f_code.co_name
00482
00483 str_ctype = gu.dic_calib_type_to_name[ctype]
00484 if verb : print ' %s.delete_range src: %s\n ctype: %s\n range: %s\n calibdir:%s'%\
00485 (metname, src, str_ctype, range, calibdir)
00486
00487 ofn = DCFileName(env, src, calibdir)
00488 if verb : ofn.print_attrs()
00489
00490 fname = ofn.calib_file_path()
00491
00492 return delete_range_from_file(fname, ctype, range, cmt, verb)
00493
00494
00495
00496
00497
00498 def delete_ctype_from_file(fname, ctype=gu.PIXEL_MASK, cmt=None, verb=False) :
00499 """Delete specified ctype from calibration constants.
00500
00501 Parameters
00502
00503 fname : full path to the hdf5 file
00504 ctype : gu.CTYPE - enumerated calibration type, e.g.: gu.PIXEL_MASK
00505 cmt : str - comment
00506 verb : bool - verbousity
00507
00508 Back to :py:class:`PSCalib.DCMethods`
00509 """
00510 metname = sys._getframe().f_code.co_name
00511
00512 str_ctype = gu.dic_calib_type_to_name[ctype]
00513 if verb : print ' %s.delete_ctype ctype: %s range: %s'%\
00514 (metname, str_ctype, range)
00515
00516 if not is_good_fname(fname, verb) : return None
00517
00518 cs = DCStore(fname)
00519 cs.load()
00520
00521
00522 tdel = cs.mark_ctype(str_ctype, cmt=cmt)
00523 if tdel is None : return None
00524
00525 if verb : log.setPrintBits(02)
00526
00527 cs.save()
00528
00529 if verb :
00530 print 50*'_','\nDCStore.print_obj() after delete ctype %s' % tdel
00531 cs.print_obj()
00532
00533 return tdel
00534
00535
00536
00537 def delete_ctype(evt, env, src='Epix100a.', ctype=gu.PIXEL_MASK, calibdir=None, cmt=None, verb=False) :
00538 """Delete specified ctype from calibration constants.
00539
00540 Parameters
00541
00542 evt : psana.Event -> event time
00543 env : psana.Env -> full detector name for psana.Source
00544 src : str - source short/full name, alias or full
00545 ctype : gu.CTYPE - enumerated calibration type, e.g.: gu.PIXEL_MASK
00546 calibdir : str - fallback path to calib dir (if xtc file is copied - calib and experiment name are lost)
00547 cmt : str - comment
00548 verb : bool - verbousity
00549
00550 Back to :py:class:`PSCalib.DCMethods`
00551 """
00552 metname = sys._getframe().f_code.co_name
00553
00554 str_ctype = gu.dic_calib_type_to_name[ctype]
00555 if verb : print ' %s.delete_ctype src: %s\n ctype: %s\n range: %s\n calibdir:%s'%\
00556 (metname, src, str_ctype, range, calibdir)
00557
00558 ofn = DCFileName(env, src, calibdir)
00559 if verb : ofn.print_attrs()
00560
00561 fname = ofn.calib_file_path()
00562
00563 return delete_ctype_from_file(fname, ctype, cmt, verb)
00564
00565
00566
00567 def print_content_from_file(fname) :
00568 """Prints content of the file.
00569
00570 Parameters
00571
00572 fname : str - full path to the file
00573
00574 Back to :py:class:`PSCalib.DCMethods`
00575 """
00576 metname = sys._getframe().f_code.co_name
00577
00578 if not is_good_fname(fname, True) : return
00579
00580 cs = DCStore(fname)
00581
00582 t0_sec = time()
00583 cs.load()
00584 print 'File content loading time (sec) = %.6f' % (time()-t0_sec)
00585
00586 print 50*'_','\nDCStore.print_obj()'
00587 cs.print_obj()
00588
00589
00590
00591 def print_content(env, src='Epix100a.', calibdir=None) :
00592 """Defines the file name and prints file content.
00593
00594 Parameters
00595
00596 env : psana.Env -> full detector name for psana.Source
00597 src : str - source short/full name, alias or full
00598 calibdir : str - fallback path to calib dir (if xtc file is copied - calib and experiment name are lost)
00599
00600 Back to :py:class:`PSCalib.DCMethods`
00601 """
00602
00603
00604 ofn = DCFileName(env, src, calibdir)
00605 fname = ofn.calib_file_path()
00606 ofn.print_attrs()
00607
00608 print_content_from_file(fname)
00609
00610
00611
00612
00613
00614
00615 def get_constants_v0(*par, **opt) :
00616 ofn = DCFileName(par[0], opt['src'])
00617
00618
00619
00620 def test_add_constants() :
00621 metname = sys._getframe().f_code.co_name
00622 print 20*'_', '\n%s' % metname
00623
00624 import numpy as np
00625
00626 vers = None
00627
00628 nda = np.zeros((1000,1000), dtype=np.float32)
00629 pred = None
00630 succ = None
00631 cmt = 'my comment: %s' % metname
00632
00633 add_constants(nda, gevt, genv, gsrc, gctype, gcalibdir, vers, pred, succ, cmt, gverb)
00634 print '%s: constants added nda.shape=%s' % (metname, nda.shape)
00635
00636
00637
00638 def test_add_constants_to_file() :
00639 metname = sys._getframe().f_code.co_name
00640 print 20*'_', '\n%s' % metname
00641
00642 import numpy as np
00643
00644 vers = None
00645
00646 data = 11*np.ones((500,500), dtype=np.float32)
00647 pred = None
00648 succ = None
00649 cmt = 'my comment: %s' % metname
00650 par = gevt
00651
00652 add_constants_to_file(data, gfname, par, genv, gctype, vers, pred, succ, cmt, gverb)
00653
00654 print '%s: constants added data.shape=%s' % (metname, data.shape)
00655
00656
00657
00658 def test_add_text() :
00659 metname = sys._getframe().f_code.co_name
00660 print 20*'_', '\n%s' % metname
00661
00662 import numpy as np
00663
00664 data = 'Now we are going to save\n this little piece of text'
00665 vers = None
00666 pred = 'Predecessor_name'
00667 succ = 'Successor_name'
00668 ctype = gu.GEOMETRY
00669 cmt = 'my comment: %s' % metname
00670
00671 add_constants(data, gevt, genv, gsrc, ctype, gcalibdir, vers, pred, succ, cmt, gverb)
00672 print '%s: text is added to the file' % (metname)
00673
00674
00675
00676 def test_add_text_to_file() :
00677 metname = sys._getframe().f_code.co_name
00678 print 20*'_', '\n%s' % metname
00679
00680 import numpy as np
00681
00682 data = 'Now we are going to save\n this little piece of text'
00683 vers = None
00684 pred = None
00685 succ = None
00686 ctype = gu.GEOMETRY
00687 cmt = 'my comment: %s' % metname
00688 par = gevt
00689
00690 add_constants_to_file(data, gfname, par, genv, gctype, vers, pred, succ, cmt, gverb)
00691
00692 print '%s: text is added to the file\n %s' % (metname, gfname)
00693
00694
00695
00696 def test_add_constants_two() :
00697 metname = sys._getframe().f_code.co_name
00698 print 20*'_', '\n%s' % metname
00699
00700 import numpy as np
00701
00702 vers = None
00703 pred = None
00704 succ = None
00705 ctype1 = gu.PIXEL_STATUS
00706 ctype2 = gu.PIXEL_MASK
00707
00708 nda1 = np.ones((1000,1000), dtype=np.float32)
00709 nda2 = 2 * nda1
00710 cmt1 = 'my comment 1: %s' % metname
00711 cmt2 = 'my comment 2: %s' % metname
00712
00713 add_constants(nda1, gevt, genv, gsrc, ctype1, gcalibdir, vers, pred, succ, cmt1, gverb)
00714 add_constants(nda2, gevt, genv, gsrc, ctype2, gcalibdir, vers, pred, succ, cmt2, gverb)
00715 print '%s: constants added ctype1=%s nda1.shape=%s' % (metname, str(ctype1), nda1.shape)
00716 print '%s: constants added ctype2=%s nda2.shape=%s' % (metname, str(ctype2), nda2.shape)
00717
00718
00719
00720 def test_get_constants() :
00721 metname = sys._getframe().f_code.co_name
00722 print 20*'_', '\n%s' % metname
00723
00724 vers = None
00725 data = get_constants(gevt, genv, gsrc, gctype, gcalibdir, vers, gverb)
00726
00727 print '%s: retrieved constants for vers %s' % (metname, str(vers))
00728 print 'data:\n', data
00729 if isinstance(data, np.ndarray) : print 'data.shape=%s' % (str(data.shape))
00730
00731
00732
00733 def test_get_constants_from_file() :
00734 metname = sys._getframe().f_code.co_name
00735 print 20*'_', '\n%s' % metname
00736
00737 vers = None
00738 data = get_constants_from_file(gfname, gevt, gctype, vers, gverb)
00739
00740 print '%s: retrieved constants for vers %s' % (metname, str(vers))
00741 print 'data:\n', data
00742 if isinstance(data, np.ndarray) : print 'data.shape=%s' % (str(data.shape))
00743
00744
00745
00746 def test_delete_version() :
00747 metname = sys._getframe().f_code.co_name
00748 print 20*'_', '\n%s' % metname
00749
00750 vers = None
00751 cmt = 'my comment: %s' % metname
00752 vdel = delete_version(gevt, genv, gsrc, gctype, gcalibdir, vers, cmt, gverb)
00753 print '%s: deleted version %s' % (metname, str(vdel))
00754
00755
00756
00757 def test_delete_version_from_file() :
00758 metname = sys._getframe().f_code.co_name
00759 print 20*'_', '\n%s' % metname
00760
00761 vers = None
00762 cmt = 'my comment: %s' % metname
00763 vdel = delete_version_from_file(gfname, gevt, gctype, vers, cmt, gverb)
00764
00765 print '%s: deleted version %s' % (metname, str(vdel))
00766
00767
00768
00769 def test_delete_range() :
00770 metname = sys._getframe().f_code.co_name
00771 print 20*'_', '\n%s' % metname
00772
00773 range = '1474587520-end'
00774 cmt = 'my comment: %s' % metname
00775 rdel = delete_range(gevt, genv, gsrc, gctype, gcalibdir, range, cmt, gverb)
00776 print '%s: deleted range %s' % (metname, str(rdel))
00777
00778
00779
00780 def test_delete_range_from_file() :
00781 metname = sys._getframe().f_code.co_name
00782 print 20*'_', '\n%s' % metname
00783
00784 range = '1474587520-end'
00785 cmt = 'my comment: %s' % metname
00786 rdel = delete_range_from_file(gfname, gctype, range, cmt, gverb)
00787 print '%s: deleted range %s' % (metname, str(rdel))
00788
00789
00790
00791 def test_delete_ctype() :
00792 metname = sys._getframe().f_code.co_name
00793 print 20*'_', '\n%s' % metname
00794
00795 cmt = 'my comment: %s' % metname
00796 tdel = delete_ctype(gevt, genv, gsrc, gctype, gcalibdir, cmt, gverb)
00797 print '%s: deleted ctype %s' % (metname, str(tdel))
00798
00799
00800
00801 def test_delete_ctype_from_file() :
00802 metname = sys._getframe().f_code.co_name
00803 print 20*'_', '\n%s' % metname
00804
00805 cmt = 'my comment: %s' % metname
00806 tdel = delete_ctype_from_file(gfname, gctype, cmt, gverb)
00807
00808 print '%s: deleted ctype %s' % (metname, str(tdel))
00809
00810
00811
00812 def test_print_content() :
00813 metname = sys._getframe().f_code.co_name
00814 print 20*'_', '\n%s' % metname
00815 print_content(genv, gsrc, gcalibdir)
00816 print '%s is completed' % (metname)
00817
00818
00819
00820 def test_print_content_from_file() :
00821 metname = sys._getframe().f_code.co_name
00822 print 20*'_', '\n%s' % metname
00823 print_content_from_file(gfname)
00824 print '%s is completed' % (metname)
00825
00826
00827
00828 def test_misc() :
00829 print 20*'_', '\n%s' % sys._getframe().f_code.co_name
00830
00831 import PSCalib.DCUtils as dcu
00832
00833 print 20*'_', '\n%s:' % sys._getframe().f_code.co_name
00834 print 'get_enviroment(USER) : %s' % dcu.get_enviroment()
00835 print 'get_login() : %s' % dcu.get_login()
00836 print 'get_hostname() : %s' % dcu.get_hostname()
00837 print 'get_cwd() : %s' % dcu.get_cwd()
00838
00839
00840
00841 def set_parameters() :
00842
00843 import psana
00844 import numpy as np; global np
00845
00846 global genv, gevt, gsrc, gctype, gcalibdir, gverb, gfname
00847
00848
00849
00850
00851
00852
00853 dsname = '/reg/g/psdm/detector/data_test/types/0021-MfxEndstation.0-Epix100a.0.xtc'
00854 gsrc = ':Epix100a.'
00855
00856 gcalibdir = './calib'
00857 gctype = gu.PIXEL_STATUS
00858 gverb = True
00859
00860
00861 gfname = './calib/epix100a/epix100a-3925999616-0996663297-3791650826-1232098304-0953206283-2655595777-0520093719.h5'
00862
00863 ds = psana.DataSource(dsname)
00864 genv=ds.env()
00865 gevt=ds.events().next()
00866
00867
00868
00869 def do_test() :
00870 from time import time
00871
00872 set_parameters()
00873
00874
00875
00876 tname = sys.argv[1] if len(sys.argv) > 1 else '0'
00877 print 50*'_', '\nTest %s:' % tname
00878 t0_sec = time()
00879 if tname == '0' : test_misc();
00880
00881 elif tname == '1': test_add_constants()
00882 elif tname == '2': test_add_constants_two()
00883 elif tname == '3': test_add_text()
00884 elif tname == '4': test_print_content()
00885 elif tname == '5': test_get_constants()
00886 elif tname == '6': test_delete_version()
00887 elif tname == '7': test_delete_range()
00888 elif tname == '8': test_delete_ctype()
00889
00890 elif tname == '11': test_add_constants_to_file()
00891 elif tname == '12': test_add_constants_to_file()
00892 elif tname == '13': test_add_text_to_file()
00893 elif tname == '14': test_print_content_from_file()
00894 elif tname == '15': test_get_constants_from_file()
00895 elif tname == '16': test_delete_version_from_file()
00896 elif tname == '17': test_delete_range_from_file()
00897 elif tname == '18': test_delete_ctype_from_file()
00898
00899 else : print 'Not-recognized test name: %s' % tname
00900 msg = 'End of test %s, consumed time (sec) = %.6f' % (tname, time()-t0_sec)
00901 sys.exit(msg)
00902
00903
00904
00905 if __name__ == "__main__" :
00906 do_test()
00907
00908