HDF5Explorer/src/CalibCycles.py

Go to the documentation of this file.
00001 
00002 #--------------------------------------------------------------------------
00003 # File and Version Information:
00004 #  $Id$
00005 #
00006 # Description:
00007 #  Module CalibCycles...
00008 #
00009 #------------------------------------------------------------------------
00010 
00011 """Helper for operations with CalibCycles.
00012 
00013 This software was developed for the SIT project.  If you use all or 
00014 part of it, please give an appropriate acknowledgment.
00015 
00016 @see RelatedModule
00017 
00018 @version $Id:$
00019 
00020 @author Mikhail S. Dubrovin
00021 """
00022 
00023 #------------------------------
00024 #  Module's version from CVS --
00025 #------------------------------
00026 __version__ = "$Revision: 4 $"
00027 # $Source$
00028 
00029 #-------------------------------
00030 # Imports of standard modules --
00031 #-------------------------------
00032 import sys
00033 import os
00034 import h5py
00035 
00036 #-----------------------------
00037 # Imports for other modules --
00038 #-----------------------------
00039 import GlobalMethods as gm
00040 
00041 #-----------------------------
00042 #  Class definition --
00043 #-----------------------------
00044 class CalibCycles :
00045     """Helper class for operations with CalibCycles
00046     """
00047 
00048     def __init__ ( self, h5fname=None, dsname=None ) :
00049         """Initialization
00050 
00051         if the h5fname is missing, than the self.numberOfCalibCycles
00052         should be defined from open file by extractNumberOfCalibCyclesFromOpenFile(...)
00053         """
00054 
00055         #self.h5fname = h5fname
00056         #self.dsname  = dsname
00057         if h5fname != None :
00058             self.numberOfCalibCycles = self.extractNumberOfCalibCycles(h5fname, dsname)
00059         #else :
00060         #    print 'WARNING: THE CalibCycles INITIALIZATION IS OMITTED...'
00061             
00062 
00063 #-----------------------------
00064 
00065     def openHDF5File(self, h5fname) :
00066         self.h5file = h5py.File(h5fname, 'r')
00067         return self.h5file
00068 
00069 #-----------------------------
00070 
00071     def closeHDF5File(self) :
00072         self.h5file.close()
00073 
00074 #-----------------------------
00075 
00076     def extractNumberOfCalibCycles(self, h5fname, dsname) :
00077         h5file = self.openHDF5File(h5fname)
00078         numberOfCalibCycles = self.extractNumberOfCalibCyclesFromOpenFile(h5file, dsname)
00079         self.closeHDF5File()
00080         return numberOfCalibCycles 
00081 
00082 #-----------------------------
00083 
00084     def extractNumberOfCalibCyclesFromOpenFile(self, h5file, dsname) :
00085         runGroupName = self.getRunGroupName(dsname)
00086         g = h5file[runGroupName]
00087         self.numberOfCalibCycles = len(g.items())
00088         return self.numberOfCalibCycles 
00089 
00090 #-----------------------------
00091 
00092     def getNumberOfCalibCycles(self) :
00093         return self.numberOfCalibCycles 
00094 
00095 #-----------------------------
00096 
00097     def getRunGroupName(self, dsname) :
00098         s0, sN, isFoundInString = gm.getPatternEndsInTheString(dsname, pattern='Run:')
00099         if isFoundInString :
00100             runGroupName = dsname[0:sN+4]
00101             return runGroupName
00102         else :
00103             return None
00104         
00105 #-----------------------------
00106 
00107     def getCalibCycleNumber(self, dsname) :
00108         s0, sN, isFoundInString = gm.getPatternEndsInTheString(dsname, pattern='CalibCycle:')
00109         if isFoundInString :
00110             calibcycleNumber = dsname[sN:sN+4]
00111             return int(calibcycleNumber)
00112         else :
00113             return None
00114 
00115 #-----------------------------
00116 
00117     def get4DigitStringFromNumber(self, N) :
00118             str_number = '%04d' % N
00119             return str_number
00120 
00121 #-----------------------------
00122 
00123     def getDSNameForCalibCycleNumber(self, dsname, Ncc) :
00124         s0, sN, isFoundInString = gm.getPatternEndsInTheString(dsname, pattern='CalibCycle:')
00125         if isFoundInString :
00126             #print 'dsname[sN:sN+4] = ', dsname[sN:sN+4]
00127             NccNew = self.checkNccLimits(Ncc)
00128             return dsname[0:sN] + self.get4DigitStringFromNumber(NccNew) + dsname[sN+4:]
00129         else :
00130             return None
00131 
00132 #-----------------------------
00133 
00134     def checkNccLimits(self, Ncc) :
00135         NccNew = Ncc
00136         if  NccNew < 0 :
00137             NccNew = 0
00138             print 'WARNING: Requested CalibCycle number < 0: set NccNew =', NccNew
00139         if  NccNew >= self.numberOfCalibCycles :
00140             NccNew  = self.numberOfCalibCycles - 1
00141             print 'WARNING: Requested CalibCycle number > max: set NccNew =', NccNew
00142         return NccNew
00143     
00144 #-----------------------------
00145 
00146     def getDSNameForCalibCycleDN(self, dsname, dNcc) :
00147         Ncc = self.getCalibCycleNumber(dsname)
00148         return self.getDSNameForCalibCycleNumber(dsname, Ncc + dNcc)
00149 
00150 #-----------------------------
00151 #  Test
00152 #
00153 if __name__ == "__main__" :
00154 
00155     h5fname = '/reg/d/psdm/AMO/amo30211/hdf5/amo30211-r0326.h5'
00156     dsname  = '/Configure:0000/Run:0000/CalibCycle:0012/Acqiris::DataDescV1/AmoETOF.0:Acqiris.0/waveforms'
00157 
00158     print 'h5fname                      =', h5fname
00159     print 'dsname                       =', dsname
00160 
00161     o = CalibCycles( h5fname, dsname )
00162 
00163     print 'Run group name               =', o.getRunGroupName(dsname)
00164     print 'CalibCycle number            =', o.getCalibCycleNumber(dsname)
00165     print 'Number of calibcycles        =', o.extractNumberOfCalibCycles(h5fname, dsname)
00166     print 'Number of calibcycles        =', o.getNumberOfCalibCycles()
00167     print '4-digit string for N=56      =', o.get4DigitStringFromNumber(56)
00168     print 'dsname for CalibCycle  17    =', o.getDSNameForCalibCycleNumber(dsname,17)
00169     print 'dsname for CalibCycle -11    =', o.getDSNameForCalibCycleNumber(dsname,-11)
00170     print 'dsname for CalibCycle  57    =', o.getDSNameForCalibCycleNumber(dsname,57)
00171     print 'dsname for CalibCycle N+1    =', o.getDSNameForCalibCycleDN(dsname, 1)
00172     print 'dsname for CalibCycle N-3    =', o.getDSNameForCalibCycleDN(dsname,-3)
00173     print 'dsname for CalibCycle N+2    =', o.getDSNameForCalibCycleDN(dsname, 2)
00174     print 'dsname for CalibCycle N+40   =', o.getDSNameForCalibCycleDN(dsname, 40)
00175     print 'dsname for CalibCycle N-40   =', o.getDSNameForCalibCycleDN(dsname,-40)
00176 
00177     sys.exit ( "End of test" )
00178 
00179 #-----------------------------

Generated on 19 Dec 2016 for PSDMSoftware by  doxygen 1.4.7