| The Gaudi Framework v27r1

- Main Page
- Related Pages
- Modules
- Namespaces
- Classes
- Files

- File List
- File Members

TupleUtils.py
Go to the documentation of this file.
1 #!/usr/bin/env python
2 # =============================================================================
3 ## This module contains set of simple and useful utilities to booking and
4 # manipulation with N-Tuples (in the spirit of GaudiTuples<TYPE>)
5 # @author Vanya BELYAEV ibelyaev@physics.syr.edu
6 # @date 2007-08-04
7 # =============================================================================
8 """
9 This module contains set of simple and useful utilities to booking and
10 manipulation with N-Tuples (in the spirit of GaudiTuples<TYPE>)
11
12 """
13 # =============================================================================
14 __author__ = "Vanya BELYAEV ibelyaev@physics.syr.edu"
15 # =============================================================================
16 __all__ = (
17 'nTuple' , ## function to book/retrieve N-tuple
18 'getNTuple' , ## ditto
19 'getNtuple' , ## ditto
20 'getntuple' , ## ditto
21 'gettuple' , ## ditto
22 'activeTuples' , ## get the list of all active n-tuples
23 'releaseTuples' ## release all actibe N-tuples
24 )
25 # =============================================================================
26
27 from GaudiPython.Bindings import gbl as cpp
28 from GaudiPython.Bindings import AppMgr
29 import GaudiPython.GaudiAlgs
30
31 _Tool = cpp.ITupleTool
32 _Deco = cpp.GaudiPython.TupleToolDecorator
33
34 # the list of aquired tools (to be released)
35 _TOOLS_ = []
36
37 # =============================================================================
38 ## Helper private auxillary utility to get Tool Service
39 def _getToolSvc( **kwargs ) :
40 """ Helper private auxillary utility to get Tool Service """
41 svc = kwargs.get ( 'toolSvc' , None )
42 if not svc : svc = kwargs.get ( 'toolsvc' , None )
43 if not svc : svc = kwargs.get ( 'service' , None )
44 if not svc : svc = kwargs.get ( 'svc' , None )
45 else : return svc ## RETURN
46 gaudi = kwargs.get ( 'gaudi' , None )
47 if not gaudi : gaudi = AppMgr()
48 return gaudi.toolsvc() ## RETURN
49
50
51 # =============================================================================
52 ## Retrive N-Tuple ( book on demand )
53 def _nTuple_ ( s , *args ) :
54 """ Retrive N-tuple ( book on demand ) """
55 return _Deco.nTuple ( s , *args)
56
57 # =============================================================================
58 _nTuple_. __doc__ += "\n" + _Deco.nTuple . __doc__
59 _Tool.nTuple = _nTuple_
60 _Tool.ntuple = _nTuple_
61
62
63 # =============================================================================
64 ## Retrieve (book-on-demand) 'Smart'-N-tuple object.
65 def nTuple ( dirpath , ID , ID2 = None , topdir = None , LUN = 'FILE1' ) :
66 """
67 Retrieve 'Smart'-N-tuple object.
68 N-tuple is booked on-demand.
69
70 Atetntion !!
71 The logical unit LUN must be configured by N-Tuple Service
72
73 Retrieve (book-n-demand) N-Tuple using
74 the directory name and the title:
75 >>> t = nTuple ( 'the/path/to/directory' , ## the path to the directory
76 'N-tuple title' , ## the title for N-Tuple
77 LUN = 'FILE1' ) ## logical file unit
78
79 Retrieve (book-n-demand) N-Tuple using
80 the directory name, literal ID and the title:
81 >>> t = nTuple ( 'the/path/to/directory' , ## the path to the directory
82 'Tuple1' , ## the literal ID for N-Tuple
83 'N-tuple title' , ## the title for N-Tuple
84 LUN = 'FILE1' ) ## logical file unit
85
86 Retrieve (book-n-demand) N-Tuple using
87 the directory name, numerical ID and the title:
88 >>> t = nTuple ( 'the/path/to/directory' , ## the path to the directory
89 124 , ## the numerical ID for N-Tuple
90 'N-tuple title' , ## the title for N-Tuple
91 LUN = 'FILE1' ) ## logical file unit
92
93
94 """
95 toolSvc = _getToolSvc ()
96
97 # construct the name of the intermediate TupleTool
98 name = 'Tuple'+LUN+"/"
99 if topdir : name += topdir
100 name += dirpath
101 name += "_%s"%ID
102 if ID2 : name += "_%s"%ID2
103 name=name.replace ( '.' , '_' )
104 name=name.replace ( '/' , '_' )
105 name=name.replace ( '\\' , '_' )
106 name=name.replace ( ' ' , '_' )
107
108 ## define tool properties
109 t0 = GaudiPython.iAlgTool( 'ToolSvc.'+name )
110 t0.OutputLevel = 1
111 t0.NTupleLUN = LUN
112 t0.NTupleDir = dirpath
113 t0.PropertiesPrint = False
114 t0.OutputLevel = 4
115 if topdir : t0.NTupleTopDir = topdir
116
117 ## get the tool from Tool service
118 tool = toolSvc.create ( 'TupleTool' ,
119 name ,
120 interface = _Tool )
121
122 ## check the properties and redefine them if needed
123 t1 = GaudiPython.iAlgTool ( tool.name() , tool )
124 if t1.NTupleLUN != LUN : t1.NTupleLUN = LUN
125 if t1.NTupleDir != dirpath : t1.NTupleDir = dirpath
126 if topdir and ( t1.NTupleTopDir != topdir ) :
127 t1.NTupleTopDir = topdir
128
129 _TOOLS_.append ( tool )
130 if not ID2 : return tool.nTuple ( ID ) ## RETURN
131
132 return tool.nTuple ( ID , ID2 ) ## RETURN
133
134
135 nTuple . __doc__ += "\n\t help(ITupleTool.nTuple) : \n" \
136 + _Tool.nTuple.__doc__
137
138 ntuple = nTuple
139 getNTuple = nTuple
140 getNtuple = nTuple
141 getntuple = nTuple
142 getTuple = nTuple
143 gettuple = nTuple
144
145 # =============================================================================
146 ## Return the list of active tools
147 def activeTuples () :
148 """
149 Return the list of active tools
150 """
151 return _TOOLS_
152
153 # =============================================================================
154 ## Release the active tool/tuples
155 def releaseTuples () :
156 """
157 Release the active tool/tuples
158 The method needs to be invoked explicitely at the end of the job
159 """
160 if not _TOOLS_ : return
161 from GaudiPython.Bindings import _gaudi
162 if not _gaudi : return
163
164 toolSvc = _getToolSvc()
165 if toolSvc.isValid() :
166 while _TOOLS_ :
167 t = _TOOLS_.pop()
168 if not t : continue
169 while 1 < t.refCount() :
170 toolSvc._its.releaseTool( t )
171
172 # =============================================================================
173 def _TupleUtils_AtExit_ () :
174 """
175 AtExit function for GaudiPython.TupleUtils module
176 """
177 if activeTuples() :
178 print 'WARNING: the list of local TupleTools is not empty!'
179 print 'WARNING: please use GaudiPython.TupleUtils.releaseTuples() at the end'
180
181 import atexit
182 atexit.register ( _TupleUtils_AtExit_ )
183
184 # =============================================================================
185 if "__main__" == __name__ :
186 import sys
187 print __doc__ , __all__
188 for o in __all__ :
189 print "\n\n\t",o,"\n"
190 print sys.modules[__name__].__dict__[o].__doc__
191
192 # =============================================================================
193 # The end
194 # =============================================================================
GaudiPython.TupleUtils.releaseTuples
def releaseTuples()
Release the active tool/tuples.
Definition: TupleUtils.py:155
GaudiPython.TupleUtils.nTuple
def nTuple
Retrieve (book-on-demand) 'Smart'-N-tuple object.
Definition: TupleUtils.py:65
GaudiPython.GaudiAlgs
Definition: GaudiAlgs.py:1
GaudiPython.TupleUtils.activeTuples
def activeTuples()
Return the list of active tools.
Definition: TupleUtils.py:147
GaudiPython.Bindings
Definition: Bindings.py:1
GaudiPython.TupleUtils._getToolSvc
def _getToolSvc(kwargs)
Helper private auxillary utility to get Tool Service.
Definition: TupleUtils.py:39
GaudiPython.Bindings.AppMgr
Definition: Bindings.py:653
GaudiPython.TupleUtils._TupleUtils_AtExit_
def _TupleUtils_AtExit_()
Definition: TupleUtils.py:173
GaudiPython.TupleUtils._nTuple_
def _nTuple_(s, args)
Retrive N-Tuple ( book on demand )
Definition: TupleUtils.py:53
GaudiPython.Bindings.iAlgTool
Definition: Bindings.py:329