PSCalib/src/DCMethods.py

Go to the documentation of this file.
00001 #-----------------------------------------------------------------------------
00002 # File and Version Information:
00003 #  $Id: DCMethods.py 12894 2016-11-21 19:11:17Z dubrovin@SLAC.STANFORD.EDU $
00004 #
00005 # Description:
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 #import numpy as np
00090 #import h5py
00091 from time import time #localtime, strftime
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) # for psana.Event
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) # 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     #cs.add_history_record('%s for %s' % (metname, msg))
00191     #cs.add_par('par-1-in-DCStore', 1)
00192 
00193     ct = cs.add_ctype(str_ctype, cmt='')
00194     if ct is None : return
00195     #ct.add_history_record('%s - add DCType %s' % (metname,str_ctype))
00196     #ct.add_par('par-1-in-DCType', 1)
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     #cr.set_vnum_def(vnum=None)
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     #v = cr.vnum_last() if vers is None else vers
00212     #rec='%s vers=%d: %s' % (metname, v, cmt if cmt is not None else 'no-comments') 
00213     #cr.add_history_record(rec)
00214 
00215     if verb : 
00216         print 50*'_','\nIn %s:' % metname
00217         cs.print_obj()
00218     
00219     if verb : log.setPrintBits(02) # 0377
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() # depth=2, mode=0775)
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     #ct.print_obj()
00292 
00293     tsec = evt_to_tsec(par)
00294     #print 'XXX: get DCRange object for time = %.3f' % tsec
00295     cr = ct.range_for_tsec(tsec)
00296     #cr = ct.range_for_evt(evt)
00297 
00298     if cr is None : return None
00299     #cr.print_obj()
00300 
00301     cv = cr.version(vnum=vers)
00302     if cv is None : return None
00303     #cv.print_obj()
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     #ct.print_obj()
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) # 0377
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     #cs.print_obj()
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) # 0377
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     #cs.print_obj()
00521 
00522     tdel = cs.mark_ctype(str_ctype, cmt=cmt)
00523     if tdel is None : return None 
00524 
00525     if verb : log.setPrintBits(02) # 0377
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     #metname = sys._getframe().f_code.co_name
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     #nda  = np.zeros((32,185,388), dtype=np.float32)
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     #data  = np.zeros((32,185,388), dtype=np.float32)
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 # 1474587525.3 # 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     #nda   = np.zeros((32,185,388), dtype=np.float32)
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 # for default - last version
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 # for default - last version
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     #dsname  = 'exp=cxif5315:run=129'
00849     #dsname   = '/reg/g/psdm/detector/data_test/xtc/cxif5315-e545-r0169-s00-c00.xtc'
00850     #gsrc      = 'Cspad.'
00851 
00852     #dsname = 'exp=mfxn8316:run=11'
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 # gu.PIXEL_MASK, gu.PEDESTALS, etc.
00858     gverb     = True
00859     #gverb     = False
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     #log.setPrintBits(0377)
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 #------------------------------

Generated on 19 Dec 2016 for PSANAmodules by  doxygen 1.4.7