19 ******************************************************************************* 20 * * 'Physisics do not like it, * 21 * * physisics do not need it, * 22 * * physisics do not use it' * 23 * * **************************** 25 * Helper module, which effectively 'imports' few useful C++ algorithmic * 26 * base classes into Python * 28 ******************************************************************************* 29 * The major imported classes are : * 31 * (1) GaudiAlgo - analogue for GaudiAlgorithm C++ class from GaudiAlg package * 32 * (2) HistoAlgo - analogue for GaudiHistoAlg C++ class from GaudiAlg package * 33 * (3) TupleAlgo - analogue for GaudiTupleAlg C++ class from GaudiAlg package * 34 ******************************************************************************* 37 __author__ =
'Vanya BELYAEV Ivan.Belyaev@lapp.in2p3.fr' 69 from GaudiKernel
import ROOT6WorkAroundEnabled
87 AlgDecorator = cpp.GaudiPython.AlgDecorator
88 HistoDecorator = cpp.GaudiPython.HistoDecorator
89 TupleAlgDecorator = cpp.GaudiPython.TupleAlgDecorator
90 TupleDecorator = cpp.GaudiPython.TupleDecorator
125 Useful method to locate the tool a certain 130 t1 = self.tool(ITrExtrapolator,'TrParabolicExtrapolator') 131 # locate private tool 132 t2 = self.tool(ITrExtrapolator,'TrParabolicExtrapolator',parent=self) 133 # locate public tool with defined name 134 t3 = self.tool(ITrExtrapolator,'TrParabolicExtrapolator/MyExt1') 135 # locate private tool with defined name 136 t4 = self.tool(ITrExtrapolator,'TrParabolicExtrapolator/MyExt2',parent=self) 137 # locate public tool with defined name 138 t5 = self.tool(ITrExtrapolator,'TrParabolicExtrapolator','MyExt3') 139 # locate private tool with defined name 140 t6 = self.tool(ITrExtrapolator,'TrParabolicExtrapolator','MyExt4',parent=self) 144 interface = cpp.IAlgTool
148 typename +=
'/' + name
149 _tool = AlgDecorator.tool_(self, typename, parent, create)
154 self.Warning(
'Invalid cast to interface %s' % interface)
178 Useful method to locate a service: 182 ntsvc = self.svc( INTupleSvc , 'NTUpleSvc' ) 186 interface = cpp.IInterface
187 _svc = AlgDecorator.svc_(self, name, create)
192 self.Warning(
'Invalid cast to interface %s' % interface)
205 The constructor from unique algorithm instance name & parameters 207 self._Base.__init__(self, self, name)
209 algMgr = appMgr._algmgr
210 status = algMgr.addAlgorithm(self)
211 if status.isFailure():
212 raise RuntimeError,
'Unable to add Algorithm "' + name +
'"' 213 iAlgorithm.__init__(self, name, self)
215 setattr(self, key, args[key])
217 if not appMgr.__dict__.has_key(
'GaudiPythonAlgos'):
218 appMgr.__dict__[
'GaudiPythonAlgos'] = []
219 appMgr.__dict__[
'GaudiPythonAlgos'].append(self)
230 The default initialization (initialization of base C++ class + data) 232 status = self._Base.initialize_(self)
233 if status.isFailure():
237 _e = self._Base.evtSvc(self)
241 _d = self._Base.detSvc(self)
256 The default initialization (initialization of base C++ class + data members) 259 if status.isFailure():
263 _h = self._Base.histoSvc(self)
278 The default initialization (initialization of base C++ class + data members) 281 if status.isFailure():
285 if self.produceNTuples():
286 _n = self._Base.ntupleSvc(self)
290 if self.produceEvtCols():
291 _n = self._Base.evtColSvc(self)
318 Trivial helper function to access Event Data and Event Data Service 322 # get event data service 326 hits = self.evtSvc('MC/Calo/Hits') 330 return self._evtSvc_[location]
353 Trivial helper function to access Detector Data and Event Data Service 356 # get detector data service 360 lhcb = self.detSvc('/dd/Structure/LHCb') 364 return self._detSvc_[location]
387 Trivial helper function to access Histogram Data and Histogram Data Service 391 # get histogram data service 392 svc = self.histoSvc() 395 histo = self.histoSvc('/stat/Calo/1') 398 return self._histoSvc_
399 return self._histoSvc_[address]
407 Trivial function to access the data in TES using the data service 409 return self._evtSvc_[location]
417 Trivial function to access the data in TDS using data service 419 return self._detSvc_[location]
425 def _get_(self, location, rootInTES=True):
427 Get the object from Transient Event Store using GaudiCommon machinery, 428 respecting RootInTES behaviour 430 return AlgDecorator.get_(self, location, rootInTES)
437 Check the object in Transient Event Store using GaudiCommon machinery, 438 respecting RootInTES behaviour 440 return AlgDecorator.exist_(self, location, rootInTES)
448 Trivial function to access N-Tuple Service 450 return self._ntupleSvc_
458 Trivial function to access Event Collection Service 460 return self._evtcolSvc_
467 The default finalization : finalize the base C++ class 469 status = self._Base.finalize_(self)
480 def _hasProperty_(self, pname):
482 The trivial function which checks the existence of the property with given name 484 return cpp.Gaudi.Utils.hasProperty(self, pname)
492 Get the property by name 494 if not self.hasProperty(pname):
495 raise AttributeError,
'property %s does not exist' % pname
496 return iAlgorithm.__getattr__(self, pname)
504 Set the property from the value 506 if not self.hasProperty(pname):
507 raise AttributeError,
'property %s does not exist' % pname
508 return iAlgorithm.__setattr__(self, pname, pvalue)
516 Get the attribute (or property) 517 - if the attribute name corresponds to the property name, property value is returned 519 if self.hasProperty(pname):
520 return iAlgorithm.__getattr__(self, pname)
521 raise AttributeError,
'attribute/property %s does not exist' % pname
529 Set the attribute (or property) : 530 - if the attribute name corresponds to the property name, the property is updated 532 if not self.hasProperty(pname):
533 self.__dict__[pname] = pvalue
535 iAlgorithm.__setattr__(self, pname, pvalue)
538 _GaudiAlgorithm = cpp.GaudiPython.PyAlg(
'GaudiAlgorithm')
539 _GaudiHistoAlg = cpp.GaudiPython.PyAlg(
'GaudiHistoAlg')
540 _GaudiTupleAlg = cpp.GaudiPython.PyAlg(
'GaudiTupleAlg')
609 ******************************************************************************* 610 * * 'Physisics do not like it, * 611 * * physisics do not need it, * 612 * * physisics do not use it' * 613 * * **************************** 616 * from GaudiPython.GaudiAlgs import GaudiAlgo, SUCCESS * 618 * class MyClass(GaudiAlgo) : * 619 * ' My specific Algorithm, derived from GaudiAlgo base class ' * 620 * def __init__( self , name , **args ) : * 621 * 'Constructor from algorithm instance name & parameters' * 622 * #invoke the constructor of base class * 623 * GaudiAlgo.__init__(self , name , **args ) * 625 * def initialize ( self ) : * 626 * 'Algorithm initialization' * 627 * # initialize the base class * 628 * status = GaudiAlgo.initialize( self ) * 629 * if status.isFailure() : return status * 631 * # locate the services and tools * 633 * # locate some tool: * 634 * extrapolator = self.tool(ITrExtrapolator,'TrExtrapolator') * 636 * # locate the service * 637 * rndmSvc = self.svc(IRndmGenSvc, 'RndmGenSvc') * 642 * def execute ( self ) : * 643 * 'Major method (from IAlgorithm interface)' * 645 * # get some data from Transient Event Store * 646 * tracks = self.get('/Event/Rec/Tracks') * 649 * c1 = self.counter('#Tracks') * 650 * c2 = self.counter('No Tracks') * 651 * if tracks.empty : * 653 * c1 += tracks->size() * 655 * if 1000 < tracks.size() : * 656 * return self.Error('The event is *VERY* busy') * 660 ******************************************************************************* 737 ******************************************************************************* 738 * * 'Physisics do not like it, * 739 * * physisics do not need it, * 740 * * physisics do not use it' * 741 * * **************************** 744 * from GaudiPython.GaudiAlgs import HistoAlgo, SUCCESS * 746 * class MyClass(HistoAlgo) : * 747 * ' My specific Algorithm, derived from GaudiAlgo base class ' * 748 * def __init__( self , name , **args ) : * 749 * 'Constructor from algorithm instance name' * 750 * #invoke the constructor of base class * 751 * HistoAlgo.__init__(self , name , **args ) * 753 * def execute ( self ) : * 754 * 'Major method (from IAlgorithm interface)' * 756 * # get some data from Transient Event Store * 757 * tracks = self.get('/Event/Rec/Tracks') * 759 * self.plot1D ( tracks->size() , '#tracks' , 0 , 100 ) * 763 * Alternatively the histogram could be booked in advance: * 765 * class MyClass(HistoAlgo) : * 766 * ' My specific Algorithm, derived from GaudiAlgo base class ' * 767 * def __init__( self , name ) : * 768 * 'Constructor from algorithm instance name' * 769 * #invoke the constructor of base class * 770 * HistoAlgo.__init__(self , name ) * 772 * def initialize ( self ) : * 773 * 'Algorithm initialization' * 774 * # initialize the base class * 775 * status = HistoAlgo.initialize( self ) * 776 * if status.isFailure() : return status * 778 * # book the histogram * 779 * self.h1 = selff.book1D ( '#tracks' , 0 , 100 ) * 784 * def execute ( self ) : * 785 * 'Major method (from IAlgorithm interface)' * 787 * # get some data from Transient Event Store * 788 * tracks = self.get('/Event/Rec/Tracks') * 790 * # fill the histogram * 791 * self.h1.fill ( tracks->size() ) * 795 ******************************************************************************* 849 ******************************************************************************* 850 * * 'Physisics do not like it, * 851 * * physisics do not need it, * 852 * * physisics do not use it' * 853 * * **************************** 856 * from GaudiPython.GaudiAlgs import TupleAlgo, SUCCESS * 858 * class MyClass(TupleAlgo) : * 859 * ' My specific Algorithm, derived from TupleAlgo base class ' * 860 * def __init__( self , name , **args ) : * 861 * 'Constructor from algorithm instance name & parameters' * 862 * #invoke the constructor of base class * 863 * TupleAlgo.__init__(self , name , **args ) * 865 * def execute ( self ) : * 866 * 'Major method (from IAlgorithm interface)' * 868 * # get some data from Transient Event Store * 869 * tracks = self.get('/Event/Rec/Tracks') * 871 * tup = self.nTuple('My N-Tuple') * 873 * for track in tracks : * 877 * chi2 = track.chi2 () * 880 * tup.column ( 'pt' , pt ) * 881 * tup.column ( 'p' , p ) * 882 * tup.column ( 'chi2' , chi2 ) * 888 ******************************************************************************* 902 GaudiAlgo._Base = _GaudiAlgorithm
903 HistoAlgo._Base = _GaudiHistoAlg
904 TupleAlgo._Base = _GaudiTupleAlg
907 GaudiAlgo.initialize = _initialize_
908 HistoAlgo.initialize = _initialize_histo_
909 TupleAlgo.initialize = _initialize_tuple_
914 The stub 'start' method needed by the internal implementation of PyAlg<>. 920 GaudiAlgo.start = _start_
921 HistoAlgo.start = _start_
922 TupleAlgo.start = _start_
927 The fictive 'execute' method, which MUST be overwitten by user 929 raise RuntimeError,
'Execute method is not implemented for %s' % self.name()
932 GaudiAlgo.execute = _execute_
933 HistoAlgo.execute = _execute_
934 TupleAlgo.execute = _execute_
939 The stub 'stop' method needed by the internal implementation of PyAlg<>. 945 GaudiAlgo.stop = _stop_
946 HistoAlgo.stop = _stop_
947 TupleAlgo.stop = _stop_
954 The basic method to fill (book-on-demand) 1D-histogram 956 The histogram will be created/booked dautomatically according to the 959 - literal or numerical ID (optional) 963 - number of bins (default is 100) 965 The reference to the histogram is returned and could be used for later manipulations 968 return HistoDecorator.plot1D(s, *a)
974 The basic method to fill (book-on-demand) 2D-histogram 976 The histogram will be created/booked dautomatically according to the 979 - literal or numerical ID (optional) 985 - number of X-bins (default is 50) 986 - number of Y-bins (default is 50) 988 The reference to the histogram is returned and could be used for later manipulations 991 return HistoDecorator.plot2D(s, *a)
997 The basic method to fill (book-on-demand) 3D-histogram 999 The histogram will be created/booked dautomatically according to the 1002 - literal or numerical ID (optional) 1010 - number of X-bins (default is 10) 1011 - number of Y-bins (default is 10) 1012 - number of Y-bins (default is 10) 1014 The reference to the histogram is returned and could be used for later manipulations 1017 return HistoDecorator.plot3D(s, *a)
1023 The basic method to fill (book-on-demand) 1D profile histogram 1025 The profile histogram will be created/booked dautomatically 1026 according to the specifications: 1028 - literal or numerical ID (optional) 1032 - number of X-bins (default is 100) 1034 The reference to the histogram is returned and could be used for later manipulations 1037 return HistoDecorator.profile1D(s, *a)
1043 The basic method to fill (book-on-demand) 2D profile histiogram 1045 The profile histogram will be created/booked automatically 1046 according to the specifications: 1048 - literal or numerical ID (optional) 1054 - number of X-bins (default is 50) 1055 - number of Y-bins (default is 50) 1057 The reference to the histogram is returned and could be used for later manipulations 1060 return HistoDecorator.profile2D(s, *a)
1064 _plot1D_ .__doc__ +=
'\n' + HistoDecorator.plot1D .__doc__
1065 _plot2D_ .__doc__ +=
'\n' + HistoDecorator.plot2D .__doc__
1066 _plot3D_ .__doc__ +=
'\n' + HistoDecorator.plot3D .__doc__
1067 _profile1D_ .__doc__ +=
'\n' + HistoDecorator.profile1D .__doc__
1068 _profile2D_ .__doc__ +=
'\n' + HistoDecorator.profile2D .__doc__
1073 if not issubclass(t, list)
and \
1074 not issubclass(t, tuple):
1076 for klass
in klasses:
1077 klass .plot = _plot1D_
1078 klass .plot1D = _plot1D_
1079 klass .plot2D = _plot2D_
1080 klass .plot3D = _plot3D_
1081 klass .profile1D = _profile1D_
1082 klass .profile2D = _profile2D_
1092 Retrieve (book-on-demand) N-Tuple object 1094 return TupleAlgDecorator.nTuple(s, *a)
1100 Retrieve (book-on-demand) N-Tuple object for Event Tag Collections 1102 return TupleAlgDecorator.evtCol(s, *a)
1105 _nTuple_.__doc__ +=
'\n' + TupleAlgDecorator.nTuple.__doc__
1106 _evtCol_.__doc__ +=
'\n' + TupleAlgDecorator.evtCol.__doc__
1111 if not issubclass(t, list)
and \
1112 not issubclass(t, tuple):
1114 for klass
in klasses:
1115 klass . nTuple = _nTuple_
1116 klass . evtCol = _evtCol_
1117 klass . ntupleSvc = _ntupleSvc
1118 klass . tupleSvc = _ntupleSvc
1119 klass . ntupSvc = _ntupleSvc
1120 klass . tupSvc = _ntupleSvc
1121 klass . evtColSvc = _evtcolSvc
1122 klass . evtcolSvc = _evtcolSvc
1130 Tuple = cpp.Tuples.Tuple
1131 _Dec = TupleDecorator
1135 '''Helper decorator class to workaround ROOT-6697''' 1141 mapping = {int:
'int', bool:
'bool', float:
'double'}
1143 signature =
'const Tuples::Tuple& tuple, const string& name, const %s value' % (
1145 mapping[k] = func.disp(signature)
1150 Explicitly call the explicit signature for the case with 3 arguments and 1151 the last one is 'int', 'bool' or 'float', for the other cases fall back 1152 on the default dispatcher. 1160 return self.
func(*a)
1169 Access to underlying INTuple object 1171 return _Dec.nTuple(s, *a)
1176 Access to underlying NTuple::Tuple object 1178 return _Dec.ntuple(s, *a)
1183 Valid NTuple::Tuple object? 1185 return _Dec.valid(s, *a)
1190 Commit the row/record to n-tuple 1192 return _Dec.write(s, *a)
1197 Fill the certain column to n-tuple 1199 return _Dec.column(s, *a)
1204 Fill the 'long long' column 1206 return _Dec.column_ll(s, *a)
1211 Fill the 'unsigned long long' column 1213 return _Dec.column_ull(s, *a)
1218 Fill the fixed-size array column 1220 return _Dec.array(s, *a)
1225 Fill the fixed-size matrix column 1227 return _Dec.matrix(s, *a)
1232 Fill the floating-size array column 1234 return _Dec.farray(s, *a)
1239 Fill the floating-size matrix column 1241 return _Dec.fmatrix(s, *a)
1244 _t_nTuple_ . __doc__ +=
'\n' + _Dec.nTuple . __doc__
1245 _t_ntuple_ . __doc__ +=
'\n' + _Dec.ntuple . __doc__
1246 _t_valid_ . __doc__ +=
'\n' + _Dec.valid . __doc__
1247 _t_write_ . __doc__ +=
'\n' + _Dec.write . __doc__
1248 _t_column_ . __doc__ +=
'\n' + _Dec.column . __doc__
1249 _t_column_ll_ . __doc__ +=
'\n' + _Dec.column_ll . __doc__
1250 _t_column_ull_ . __doc__ +=
'\n' + _Dec.column_ull . __doc__
1251 _t_array_ . __doc__ +=
'\n' + _Dec.array . __doc__
1252 _t_matrix_ . __doc__ +=
'\n' + _Dec.matrix . __doc__
1253 _t_farray_ . __doc__ +=
'\n' + _Dec.farray . __doc__
1254 _t_fmatrix_ . __doc__ +=
'\n' + _Dec.fmatrix . __doc__
1256 Tuple.nTuple = _t_nTuple_
1257 Tuple.ntuple = _t_ntuple_
1258 Tuple.valid = _t_valid_
1259 Tuple.write = _t_write_
1260 Tuple.column = _t_column_
1261 Tuple.column_ll = _t_column_ll_
1262 Tuple.column_ull = _t_column_ull_
1263 Tuple.array = _t_array_
1264 Tuple.matrix = _t_matrix_
1265 Tuple.farray = _t_farray_
1266 Tuple.fmatrix = _t_fmatrix_
1273 'eventSvc': _evtSvc,
1275 'histoSvc': _histoSvc,
1276 'histSvc': _histoSvc,
1281 'finalize': _finalize_,
1282 'beginRun': _success_,
1283 'endRun': _success_,
1285 'hasProperty': _hasProperty_,
1286 'getProperty': _getProperty_,
1287 'setProperty': _setProperty_,
1288 '__setattr__': _set_attr_,
1289 '__getattr__': _get_attr_
1296 if not issubclass(t, list)
and \
1297 not issubclass(t, tuple):
1299 for _alg
in klasses:
1300 for key
in _alg_map_:
1301 setattr(_alg, key, _alg_map_[key])
1315 """ Helper function to fill histogram/ntuple using 'map'-operation """ 1320 if hasattr(sequence,
'size'):
1321 vct.reserve(vct.size() + sequence.size())
1322 elif hasattr(sequence,
'__len__'):
1323 vct.reserve(vct.size() + len(sequence))
1324 for object
in sequence:
1325 vct.push_back(
func(object))
1339 _func = getattr(AlgDecorator, method)
1340 _num = _func(self, _tools)
1341 if _tools.size() != _num:
1342 raise RuntimeError,
'Unable to extract Tools' 1344 for _tool
in _tools:
1345 _res += [
iAlgTool(_tool.name(), _tool)]
1352 Retrieve the list of tools, 1353 aquired by component through GaudiCommon<TYPE> base: 1355 >>> alg = ... ## get the algorithm 1356 >>> tools = alg.Tools() ## get the tools 1357 >>> for tool in tools : 1361 _cmp = getattr(self,
'_ialg')
1363 self.retrieveInterface()
1364 _cmp = getattr(self,
'_ialg')
1371 Retrieve the list of tools, 1372 aquired by component through GaudiCommon<TYPE> base: 1374 >>> tool = ... ## get the tool 1375 >>> tools = tool.Tools() ## get the tools 1376 >>> for t in tools : 1380 _cmp = getattr(self,
'_itool')
1382 self.retrieveInterface()
1383 _cmp = getattr(self,
'_itool')
1397 _func = getattr(AlgDecorator, method)
1398 _num = _func(self, _nams, _cnts)
1399 if _nams.size() != _num
or _cnts.size() != _num:
1400 raise RuntimeError,
'Unable to extract Counters' 1402 for _i
in range(0, _num):
1408 return _res.get(name,
None)
1415 Retrieve the counters, managed GaudiCommon<TYPE> base: 1417 >>> alg = ... ## get the algorithm 1418 >>> cnts = alg.Counters() ## get the counters 1419 >>> for key in cnts : 1420 ... print key, cnts[key] 1423 Retrieve the counter, managed GaudiCommon<TYPE> base by name: 1425 >>> alg = ... ## get the algorithm 1426 >>> cnt = alg.Counters('MyCounter') ## get the counter 1430 _cmp = getattr(self,
'_ialg')
1432 self.retrieveInterface()
1433 _cmp = getattr(self,
'_ialg')
1440 Retrieve the counters, managed GaudiCommon<TYPE> base: 1442 >>> tool = ... ## get the tool 1443 >>> cnts = tool.Counters() ## get the counters 1444 >>> for key in cnts : 1445 ... print key, cnts[key] 1448 Retrieve the counter, managed GaudiCommon<TYPE> base by name: 1450 >>> tool = ... ## get the tool 1451 >>> cnt = tool.Counters('MyCounter') ## get the counter 1455 _cmp = getattr(self,
'_itool')
1457 self.retrieveInterface()
1458 _cmp = getattr(self,
'_itool')
1469 _func = getattr(AlgDecorator, method)
1470 return _func(self, name)
1476 Retrieve the counter managed GaudiCommon<TYPE> base by name: 1478 >>> alg = ... ## get the algorithm 1479 >>> cnt = alg.Counter('#accept') ## get the counter 1483 _cmp = getattr(self,
'_ialg')
1485 self.retrieveInterface()
1486 _cmp = getattr(self,
'_ialg')
1493 Retrieve the counter managed GaudiCommon<TYPE> base by name: 1495 >>> tool = ... ## get the tool 1496 >>> cnt = tool.Counter('#accept') ## get the counter 1500 _cmp = getattr(self,
'_itool')
1502 self.retrieveInterface()
1503 _cmp = getattr(self,
'_itool')
1510 cpp.GaudiAlg.ID .__repr__ = cpp.GaudiAlg.ID.idAsString
1511 cpp.GaudiAlg.ID . __str__ = cpp.GaudiAlg.ID.idAsString
1512 cpp.StatEntity .__repr__ = cpp.StatEntity.toString
1513 cpp.StatEntity . __str__ = cpp.StatEntity.toString
1519 Get All histogram form the component 1522 for _his
in (
std.vector(
'AIDA::IProfile2D*'),
1529 _fun = getattr(HistoDecorator, method)
1530 _num = _fun(component, _ids, _his)
1531 if _ids.size() != _num
or _his.size() != _num:
1532 raise RuntimeError,
'Unable to extract Histos!' 1533 for _i
in range(0, _num):
1536 _id = _id.numericID()
1538 _id = _id.literalID()
1540 _id = _is.idAsString()
1541 _res[_id] = _his[_i]
1546 id = cpp.GaudiAlg.ID(name)
1550 id.idAsString(), id):
1551 h = _res.get(i,
None)
1561 Retrieve all histograms & profiles, booked through GauydiHistos<TYPE> base: 1563 >>> alg = ... ## get the algorithm 1564 >>> histos = alg.Histos() ## get all histograms & profiles 1565 >>> for key in histos : 1566 ... print key, histos[key] 1568 Retrive the histogram with the certain ID : 1570 >>> alg = ... ## get the algorithm 1571 >>> histo = alg.Histos('some histo ID') ## get the histo by ID 1575 _cmp = getattr(self,
'_ialg')
1577 self.retrieveInterface()
1578 _cmp = getattr(self,
'_ialg')
1585 Retrieve all histograms & profiles, booked through GauydiHistos<TYPE> base: 1587 >>> tool = ... ## get the tool 1588 >>> histos = tool.Histos() ## get all histograms & profiles 1589 >>> for key in histos : 1590 ... print key, histos[key] 1592 Retrive the historgam with certain ID : 1594 >>> tool = ... ## get the tool 1595 >>> histo = tool.Histos('some histo ID') ## get the histo by ID 1599 _cmp = getattr(self,
'_itool')
1601 self.retrieveInterface()
1602 _cmp = getattr(self,
'_itool')
1607 _Tools_a_ . __doc__ +=
'\n' + AlgDecorator . _tools_a_ . __doc__
1608 _Tools_t_ . __doc__ +=
'\n' + AlgDecorator . _tools_t_ . __doc__
1609 _Counters_a_ . __doc__ +=
'\n' + AlgDecorator . _counters_a_ . __doc__
1610 _Counters_t_ . __doc__ +=
'\n' + AlgDecorator . _counters_t_ . __doc__
1611 _Counter_a_ . __doc__ +=
'\n' + AlgDecorator . _counter_a_ . __doc__
1612 _Counter_t_ . __doc__ +=
'\n' + AlgDecorator . _counter_t_ . __doc__
1613 _Histos_a_ . __doc__ +=
'\n' + HistoDecorator . _histos_a_ . __doc__
1614 _Histos_t_ . __doc__ +=
'\n' + HistoDecorator . _histos_t_ . __doc__
1616 iAlgorithm . Tools = _Tools_a_
1617 iAlgTool . Tools = _Tools_t_
1618 iAlgorithm . Counters = _Counters_a_
1619 iAlgTool . Counters = _Counters_t_
1620 iAlgorithm . Counter = _Counter_a_
1621 iAlgTool . Counter = _Counter_t_
1622 iAlgorithm . Histos = _Histos_a_
1623 iAlgTool . Histos = _Histos_t_
1634 print __doc__, __author__
1635 print '\t\t\tDoc-string for class GaudiAlgo \n', GaudiAlgo.__doc__
1636 print '\t\t\tDoc-string for class HistoAlgo \n', HistoAlgo.__doc__
1637 print '\t\t\tDoc-string for class TupleAlgo \n', TupleAlgo.__doc__
1643 if __name__ ==
'__main__':
def _getDet(self, location)
def _Counter_a_(self, name)
def _Counter_t_(self, name)
def _decorate_tuples_(klasses)
def _get_all_counters_(self, method, name=None)
def _init_(self, name, args)
def _get_(self, location, rootInTES=True)
def _initialize_tuple_(self)
def ROOT6WorkAroundEnabled(id=None)
def mapvct(func, sequence, ovct=None)
def _evtSvc(self, location=None)
def _service_(self, interface, name, create=True)
def _get_all_histos_(component, method, name)
def _decorate_algs_(klasses)
def _decorate_plots_(klasses)
def _get_counter_(self, method, name)
def _get_attr_(self, pname)
def _set_attr_(self, pname, pvalue)
def _Histos_t_(self, name=None)
def _Counters_a_(self, name=None)
decltype(auto) range(Args &&...args)
Zips multiple containers together to form a single range.
def _initialize_histo_(self)
def _Histos_a_(self, name=None)
def _get_all_tools_(self, method)
def _tool_(self, interface, typename, name=None, parent=None, create=True)
def _exist_(self, location, rootInTES=True)
def _histoSvc(self, address=None)
def _Counters_t_(self, name=None)
def _setProperty_(self, pname, pvalue)
def _getProperty_(self, pname)