00001
00002
00003
00004
00005
00006
00007
00008 """
00009 This module contains set of simple and useful utilities to booking and
00010 manipulation with N-Tuples (in the spirit of GaudiTuples<TYPE>)
00011
00012 """
00013
00014 __author__ = "Vanya BELYAEV ibelyaev@physics.syr.edu"
00015
00016 __all__ = ( 'nTuple' , 'getNTuple' , 'getNtuple' , 'getntuple' ,
00017 'ntuple' , 'gettuple' , 'activeTuples' , 'releaseTuples' )
00018
00019 import GaudiPython
00020 import GaudiPython.GaudiAlgs
00021
00022 _gbl = GaudiPython.gbl
00023 _Tool = _gbl.ITupleTool
00024 _Deco = _gbl.GaudiPython.TupleToolDecorator
00025
00026
00027 _TOOLS_ = []
00028
00029
00030
00031 def _getToolSvc( **kwargs ) :
00032 """ Helper private auxillary utility to get Tool Service """
00033 svc = kwargs.get ( 'toolSvc' , None )
00034 if not svc : svc = kwargs.get ( 'toolsvc' , None )
00035 if not svc : svc = kwargs.get ( 'service' , None )
00036 if not svc : svc = kwargs.get ( 'svc' , None )
00037 else : return svc
00038 gaudi = kwargs.get ( 'gaudi' , None )
00039 if not gaudi : gaudi = GaudiPython.AppMgr()
00040 return gaudi.toolsvc()
00041
00042
00043
00044
00045 def _nTuple_ ( s , *args ) :
00046 """ Retrive N-tuple ( book on demand ) """
00047 print 'ARGS:' , args
00048 return _Deco.nTuple ( s , *args)
00049
00050
00051 _nTuple_. __doc__ += "\n" + _Deco.nTuple . __doc__
00052 _Tool.nTuple = _nTuple_
00053 _Tool.ntuple = _nTuple_
00054
00055
00056
00057
00058
00059 def nTuple ( dirpath , ID , ID2 = None , topdir = None , LUN = 'FILE1' ) :
00060 """
00061 Retrieve 'Smart'-N-tuple object.
00062 N-tuple is booked on-demand.
00063
00064 Atetntion !!
00065 The logical unit LUN must be configured by N-Tuple Service
00066
00067 Retrieve (book-n-demand) N-Tuple using
00068 the directory name and the title:
00069 >>> t = nTuple ( 'the/path/to/directory' , ## the path to the directory
00070 'N-tuple title' , ## the title for N-Tuple
00071 LUN = 'FILE1' ) ## logical file unit
00072
00073 Retrieve (book-n-demand) N-Tuple using
00074 the directory name, literal ID and the title:
00075 >>> t = nTuple ( 'the/path/to/directory' , ## the path to the directory
00076 'Tuple1' , ## the literal ID for N-Tuple
00077 'N-tuple title' , ## the title for N-Tuple
00078 LUN = 'FILE1' ) ## logical file unit
00079
00080 Retrieve (book-n-demand) N-Tuple using
00081 the directory name, numerical ID and the title:
00082 >>> t = nTuple ( 'the/path/to/directory' , ## the path to the directory
00083 124 , ## the numerical ID for N-Tuple
00084 'N-tuple title' , ## the title for N-Tuple
00085 LUN = 'FILE1' ) ## logical file unit
00086
00087
00088 """
00089 toolSvc = _getToolSvc ()
00090
00091
00092 name = 'Tuple'+LUN+"/"
00093 if topdir : name += topdir
00094 name += dirpath
00095 name += "_%s"%ID
00096 if ID2 : name += "_%s"%ID2
00097 name=name.replace ( '.' , '_' )
00098 name=name.replace ( '/' , '_' )
00099 name=name.replace ( '\\' , '_' )
00100 name=name.replace ( ' ' , '_' )
00101
00102
00103 t0 = GaudiPython.iAlgTool( 'ToolSvc.'+name )
00104 t0.OutputLevel = 1
00105 t0.NTupleLUN = LUN
00106 t0.NTupleDir = dirpath
00107 t0.PropertiesPrint = False
00108 t0.OutputLevel = 4
00109 if topdir : t0.NTupleTopDir = topdir
00110
00111
00112 tool = toolSvc.create ( 'TupleTool' ,
00113 name ,
00114 interface = _Tool )
00115
00116
00117 t1 = GaudiPython.iAlgTool ( tool.name() , tool )
00118 if t1.NTupleLUN != LUN : t1.NTupleLUN = LUN
00119 if t1.NTupleDir != dirpath : t1.NTupleDir = dirpath
00120 if topdir and ( t1.NTupleTopDir != topdir ) :
00121 t1.NTupleTopDir = topdir
00122
00123 while 1 < tool.refCount() : toolSvc._its.releaseTool ( tool )
00124
00125 _TOOLS_.append ( tool )
00126 if not ID2 : return tool.nTuple ( ID )
00127
00128 return tool.nTuple ( ID , ID2 )
00129
00130
00131 nTuple . __doc__ += "\n\t help(ITupleTool.nTuple) : \n" \
00132 + _Tool.nTuple.__doc__
00133
00134 ntuple = nTuple
00135 getNTuple = nTuple
00136 getNtuple = nTuple
00137 getntuple = nTuple
00138 getTuple = nTuple
00139 gettuple = nTuple
00140
00141
00142
00143 def activeTuples () :
00144 """
00145 Return the list of active tools
00146 """
00147 return _TOOLS_
00148
00149
00150
00151 def releaseTuples () :
00152 """
00153 Release the active tool/tuples
00154 The method needs to be invoked explicitely at the end of the job
00155 """
00156 if not _TOOLS_ : return
00157 print ' %s/%s: release all pending ITupleTools: %s' % ( __file__ ,
00158 __name__ ,
00159 len(_TOOLS_) )
00160 toolSvc = _getToolSvc()
00161 while _TOOLS_ and toolSvc.isValid() :
00162 t = _TOOLS_.pop()
00163 if t and 0 < t.refCount() : toolSvc._its.releaseTool( t )
00164
00165 if "__main__" == __name__ :
00166 import sys
00167 print __doc__ , __all__
00168 for o in __all__ :
00169 print "\n\n\t",o,"\n"
00170 print sys.modules[__name__].__dict__[o].__doc__
00171
00172
00173
00174