29 ******************************************************************************* 30 * * 'Physisics do not like it, * 31 * * physisics do not need it, * 32 * * physisics do not use it' * 33 * * **************************** 35 * Helper module, which effectively 'imports' few useful C++ algorithmic * 36 * base classes into Python * 38 ******************************************************************************* 39 * The major imported classes are : * 41 * (1) GaudiAlgo - analogue for GaudiAlgorithm C++ class from GaudiAlg package * 42 * (2) HistoAlgo - analogue for GaudiHistoAlg C++ class from GaudiAlg package * 43 * (3) TupleAlgo - analogue for GaudiTupleAlg C++ class from GaudiAlg package * 44 ******************************************************************************* 46 from __future__
import print_function
48 __author__ =
'Vanya BELYAEV Ivan.Belyaev@lapp.in2p3.fr' 80 from GaudiKernel
import ROOT6WorkAroundEnabled
98 AlgDecorator = cpp.GaudiPython.AlgDecorator
99 HistoDecorator = cpp.GaudiPython.HistoDecorator
100 TupleAlgDecorator = cpp.GaudiPython.TupleAlgDecorator
101 TupleDecorator = cpp.GaudiPython.TupleDecorator
129 def _tool_(self, interface, typename, name=None, parent=None, create=True):
131 Useful method to locate the tool a certain 136 t1 = self.tool(ITrExtrapolator,'TrParabolicExtrapolator') 137 # locate private tool 138 t2 = self.tool(ITrExtrapolator,'TrParabolicExtrapolator',parent=self) 139 # locate public tool with defined name 140 t3 = self.tool(ITrExtrapolator,'TrParabolicExtrapolator/MyExt1') 141 # locate private tool with defined name 142 t4 = self.tool(ITrExtrapolator,'TrParabolicExtrapolator/MyExt2',parent=self) 143 # locate public tool with defined name 144 t5 = self.tool(ITrExtrapolator,'TrParabolicExtrapolator','MyExt3') 145 # locate private tool with defined name 146 t6 = self.tool(ITrExtrapolator,'TrParabolicExtrapolator','MyExt4',parent=self) 150 interface = cpp.IAlgTool
154 typename +=
'/' + name
155 _tool = AlgDecorator.tool_(self, typename, parent, create)
160 self.Warning(
'Invalid cast to interface %s' % interface)
182 Useful method to locate a service: 186 ntsvc = self.svc( INTupleSvc , 'NTUpleSvc' ) 190 interface = cpp.IInterface
191 _svc = AlgDecorator.svc_(self, name, create)
196 self.Warning(
'Invalid cast to interface %s' % interface)
210 The constructor from unique algorithm instance name & parameters 212 self._Base.__init__(self, self, name)
214 algMgr = appMgr._algmgr
215 status = algMgr.addAlgorithm(self)
216 if status.isFailure():
217 raise RuntimeError(
'Unable to add Algorithm "' + name +
'"')
218 iAlgorithm.__init__(self, name, self)
220 setattr(self, key, args[key])
222 if 'GaudiPythonAlgos' not in appMgr.__dict__:
223 appMgr.__dict__[
'GaudiPythonAlgos'] = []
224 appMgr.__dict__[
'GaudiPythonAlgos'].append(self)
236 The default initialization (initialization of base C++ class + data) 238 status = self._Base.initialize_(self)
239 if status.isFailure():
243 _e = self._Base.evtSvc(self)
247 _d = self._Base.detSvc(self)
263 The default initialization (initialization of base C++ class + data members) 266 if status.isFailure():
270 _h = self._Base.histoSvc(self)
286 The default initialization (initialization of base C++ class + data members) 289 if status.isFailure():
293 if self.produceNTuples():
294 _n = self._Base.ntupleSvc(self)
298 if self.produceEvtCols():
299 _n = self._Base.evtColSvc(self)
327 Trivial helper function to access Event Data and Event Data Service 331 # get event data service 335 hits = self.evtSvc('MC/Calo/Hits') 339 return self._evtSvc_[location]
363 Trivial helper function to access Detector Data and Event Data Service 366 # get detector data service 370 lhcb = self.detSvc('/dd/Structure/LHCb') 374 return self._detSvc_[location]
398 Trivial helper function to access Histogram Data and Histogram Data Service 402 # get histogram data service 403 svc = self.histoSvc() 406 histo = self.histoSvc('/stat/Calo/1') 409 return self._histoSvc_
410 return self._histoSvc_[address]
419 Trivial function to access the data in TES using the data service 421 return self._evtSvc_[location]
430 Trivial function to access the data in TDS using data service 432 return self._detSvc_[location]
439 def _get_(self, location, rootInTES=True):
441 Get the object from Transient Event Store using GaudiCommon machinery, 442 respecting RootInTES behaviour 444 return AlgDecorator.get_(self, location, rootInTES)
453 Check the object in Transient Event Store using GaudiCommon machinery, 454 respecting RootInTES behaviour 456 return AlgDecorator.exist_(self, location, rootInTES)
465 Trivial function to access N-Tuple Service 467 return self._ntupleSvc_
476 Trivial function to access Event Collection Service 478 return self._evtcolSvc_
485 The default finalization : finalize the base C++ class 487 status = self._Base.finalize_(self)
503 The trivial function which checks the existence of the property with given name 505 return cpp.Gaudi.Utils.hasProperty(self, pname)
514 Get the property by name 516 if not self.hasProperty(pname):
517 raise AttributeError(
'property %s does not exist' % pname)
518 return iAlgorithm.__getattr__(self, pname)
527 Set the property from the value 529 if not self.hasProperty(pname):
530 raise AttributeError(
'property %s does not exist' % pname)
531 return iAlgorithm.__setattr__(self, pname, pvalue)
540 Get the attribute (or property) 541 - if the attribute name corresponds to the property name, property value is returned 543 if self.hasProperty(pname):
544 return iAlgorithm.__getattr__(self, pname)
545 raise AttributeError(
'attribute/property %s does not exist' % pname)
554 Set the attribute (or property) : 555 - if the attribute name corresponds to the property name, the property is updated 557 if not self.hasProperty(pname):
558 self.__dict__[pname] = pvalue
560 iAlgorithm.__setattr__(self, pname, pvalue)
563 _GaudiAlgorithm = cpp.GaudiPython.PyAlg(
'GaudiAlgorithm')
564 _GaudiHistoAlg = cpp.GaudiPython.PyAlg(
'GaudiHistoAlg')
565 _GaudiTupleAlg = cpp.GaudiPython.PyAlg(
'GaudiTupleAlg')
634 ******************************************************************************* 635 * * 'Physisics do not like it, * 636 * * physisics do not need it, * 637 * * physisics do not use it' * 638 * * **************************** 641 * from GaudiPython.GaudiAlgs import GaudiAlgo, SUCCESS * 643 * class MyClass(GaudiAlgo) : * 644 * ' My specific Algorithm, derived from GaudiAlgo base class ' * 645 * def __init__( self , name , **args ) : * 646 * 'Constructor from algorithm instance name & parameters' * 647 * #invoke the constructor of base class * 648 * GaudiAlgo.__init__(self , name , **args ) * 650 * def initialize ( self ) : * 651 * 'Algorithm initialization' * 652 * # initialize the base class * 653 * status = GaudiAlgo.initialize( self ) * 654 * if status.isFailure() : return status * 656 * # locate the services and tools * 658 * # locate some tool: * 659 * extrapolator = self.tool(ITrExtrapolator,'TrExtrapolator') * 661 * # locate the service * 662 * rndmSvc = self.svc(IRndmGenSvc, 'RndmGenSvc') * 667 * def execute ( self ) : * 668 * 'Major method (from IAlgorithm interface)' * 670 * # get some data from Transient Event Store * 671 * tracks = self.get('/Event/Rec/Tracks') * 674 * c1 = self.counter('#Tracks') * 675 * c2 = self.counter('No Tracks') * 676 * if tracks.empty : * 678 * c1 += tracks->size() * 680 * if 1000 < tracks.size() : * 681 * return self.Error('The event is *VERY* busy') * 685 ******************************************************************************* 763 ******************************************************************************* 764 * * 'Physisics do not like it, * 765 * * physisics do not need it, * 766 * * physisics do not use it' * 767 * * **************************** 770 * from GaudiPython.GaudiAlgs import HistoAlgo, SUCCESS * 772 * class MyClass(HistoAlgo) : * 773 * ' My specific Algorithm, derived from GaudiAlgo base class ' * 774 * def __init__( self , name , **args ) : * 775 * 'Constructor from algorithm instance name' * 776 * #invoke the constructor of base class * 777 * HistoAlgo.__init__(self , name , **args ) * 779 * def execute ( self ) : * 780 * 'Major method (from IAlgorithm interface)' * 782 * # get some data from Transient Event Store * 783 * tracks = self.get('/Event/Rec/Tracks') * 785 * self.plot1D ( tracks->size() , '#tracks' , 0 , 100 ) * 789 * Alternatively the histogram could be booked in advance: * 791 * class MyClass(HistoAlgo) : * 792 * ' My specific Algorithm, derived from GaudiAlgo base class ' * 793 * def __init__( self , name ) : * 794 * 'Constructor from algorithm instance name' * 795 * #invoke the constructor of base class * 796 * HistoAlgo.__init__(self , name ) * 798 * def initialize ( self ) : * 799 * 'Algorithm initialization' * 800 * # initialize the base class * 801 * status = HistoAlgo.initialize( self ) * 802 * if status.isFailure() : return status * 804 * # book the histogram * 805 * self.h1 = selff.book1D ( '#tracks' , 0 , 100 ) * 810 * def execute ( self ) : * 811 * 'Major method (from IAlgorithm interface)' * 813 * # get some data from Transient Event Store * 814 * tracks = self.get('/Event/Rec/Tracks') * 816 * # fill the histogram * 817 * self.h1.fill ( tracks->size() ) * 821 ******************************************************************************* 876 ******************************************************************************* 877 * * 'Physisics do not like it, * 878 * * physisics do not need it, * 879 * * physisics do not use it' * 880 * * **************************** 883 * from GaudiPython.GaudiAlgs import TupleAlgo, SUCCESS * 885 * class MyClass(TupleAlgo) : * 886 * ' My specific Algorithm, derived from TupleAlgo base class ' * 887 * def __init__( self , name , **args ) : * 888 * 'Constructor from algorithm instance name & parameters' * 889 * #invoke the constructor of base class * 890 * TupleAlgo.__init__(self , name , **args ) * 892 * def execute ( self ) : * 893 * 'Major method (from IAlgorithm interface)' * 895 * # get some data from Transient Event Store * 896 * tracks = self.get('/Event/Rec/Tracks') * 898 * tup = self.nTuple('My N-Tuple') * 900 * for track in tracks : * 904 * chi2 = track.chi2 () * 907 * tup.column ( 'pt' , pt ) * 908 * tup.column ( 'p' , p ) * 909 * tup.column ( 'chi2' , chi2 ) * 915 ******************************************************************************* 929 GaudiAlgo._Base = _GaudiAlgorithm
930 HistoAlgo._Base = _GaudiHistoAlg
931 TupleAlgo._Base = _GaudiTupleAlg
934 GaudiAlgo.initialize = _initialize_
935 HistoAlgo.initialize = _initialize_histo_
936 TupleAlgo.initialize = _initialize_tuple_
941 The stub 'start' method needed by the internal implementation of PyAlg<>. 947 GaudiAlgo.start = _start_
948 HistoAlgo.start = _start_
949 TupleAlgo.start = _start_
954 The fictive 'execute' method, which MUST be overwitten by user 957 'Execute method is not implemented for %s' % self.name())
960 GaudiAlgo.execute = _execute_
961 HistoAlgo.execute = _execute_
962 TupleAlgo.execute = _execute_
967 The stub 'stop' method needed by the internal implementation of PyAlg<>. 973 GaudiAlgo.stop = _stop_
974 HistoAlgo.stop = _stop_
975 TupleAlgo.stop = _stop_
982 The basic method to fill (book-on-demand) 1D-histogram 984 The histogram will be created/booked dautomatically according to the 987 - literal or numerical ID (optional) 991 - number of bins (default is 100) 993 The reference to the histogram is returned and could be used for later manipulations 996 return HistoDecorator.plot1D(s, *a)
1004 The basic method to fill (book-on-demand) 2D-histogram 1006 The histogram will be created/booked dautomatically according to the 1009 - literal or numerical ID (optional) 1015 - number of X-bins (default is 50) 1016 - number of Y-bins (default is 50) 1018 The reference to the histogram is returned and could be used for later manipulations 1021 return HistoDecorator.plot2D(s, *a)
1029 The basic method to fill (book-on-demand) 3D-histogram 1031 The histogram will be created/booked dautomatically according to the 1034 - literal or numerical ID (optional) 1042 - number of X-bins (default is 10) 1043 - number of Y-bins (default is 10) 1044 - number of Y-bins (default is 10) 1046 The reference to the histogram is returned and could be used for later manipulations 1049 return HistoDecorator.plot3D(s, *a)
1057 The basic method to fill (book-on-demand) 1D profile histogram 1059 The profile histogram will be created/booked dautomatically 1060 according to the specifications: 1062 - literal or numerical ID (optional) 1066 - number of X-bins (default is 100) 1068 The reference to the histogram is returned and could be used for later manipulations 1071 return HistoDecorator.profile1D(s, *a)
1079 The basic method to fill (book-on-demand) 2D profile histiogram 1081 The profile histogram will be created/booked automatically 1082 according to the specifications: 1084 - literal or numerical ID (optional) 1090 - number of X-bins (default is 50) 1091 - number of Y-bins (default is 50) 1093 The reference to the histogram is returned and could be used for later manipulations 1096 return HistoDecorator.profile2D(s, *a)
1101 _plot1D_.__doc__ +=
'\n' + HistoDecorator.plot1D.__doc__
1102 _plot2D_.__doc__ +=
'\n' + HistoDecorator.plot2D.__doc__
1103 _plot3D_.__doc__ +=
'\n' + HistoDecorator.plot3D.__doc__
1104 _profile1D_.__doc__ +=
'\n' + HistoDecorator.profile1D.__doc__
1105 _profile2D_.__doc__ +=
'\n' + HistoDecorator.profile2D.__doc__
1110 if not issubclass(t, list)
and \
1111 not issubclass(t, tuple):
1113 for klass
in klasses:
1114 klass.plot = _plot1D_
1115 klass.plot1D = _plot1D_
1116 klass.plot2D = _plot2D_
1117 klass.plot3D = _plot3D_
1118 klass.profile1D = _profile1D_
1119 klass.profile2D = _profile2D_
1129 Retrieve (book-on-demand) N-Tuple object 1131 return TupleAlgDecorator.nTuple(s, *a)
1139 Retrieve (book-on-demand) N-Tuple object for Event Tag Collections 1141 return TupleAlgDecorator.evtCol(s, *a)
1144 _nTuple_.__doc__ +=
'\n' + TupleAlgDecorator.nTuple.__doc__
1145 _evtCol_.__doc__ +=
'\n' + TupleAlgDecorator.evtCol.__doc__
1150 if not issubclass(t, list)
and \
1151 not issubclass(t, tuple):
1153 for klass
in klasses:
1154 klass.nTuple = _nTuple_
1155 klass.evtCol = _evtCol_
1156 klass.ntupleSvc = _ntupleSvc
1157 klass.tupleSvc = _ntupleSvc
1158 klass.ntupSvc = _ntupleSvc
1159 klass.tupSvc = _ntupleSvc
1160 klass.evtColSvc = _evtcolSvc
1161 klass.evtcolSvc = _evtcolSvc
1168 Tuple = cpp.Tuples.Tuple
1169 _Dec = TupleDecorator
1173 '''Helper decorator class to workaround ROOT-6697''' 1179 mapping = {int:
'int', bool:
'bool', float:
'double'}
1181 signature =
'const Tuples::Tuple& tuple, const string& name, const %s value' % (
1183 mapping[k] = func.disp(signature)
1188 Explicitly call the explicit signature for the case with 3 arguments and 1189 the last one is 'int', 'bool' or 'float', for the other cases fall back 1190 on the default dispatcher. 1198 return self.
func(*a)
1207 Access to underlying INTuple object 1209 return _Dec.nTuple(s, *a)
1214 Access to underlying NTuple::Tuple object 1216 return _Dec.ntuple(s, *a)
1221 Valid NTuple::Tuple object? 1223 return _Dec.valid(s, *a)
1228 Commit the row/record to n-tuple 1230 return _Dec.write(s, *a)
1235 Fill the certain column to n-tuple 1237 return _Dec.column(s, *a)
1242 Fill the 'long long' column 1244 return _Dec.column_ll(s, *a)
1249 Fill the 'unsigned long long' column 1251 return _Dec.column_ull(s, *a)
1256 Fill the fixed-size array column 1258 return _Dec.array(s, *a)
1263 Fill the fixed-size matrix column 1265 return _Dec.matrix(s, *a)
1270 Fill the floating-size array column 1272 return _Dec.farray(s, *a)
1277 Fill the floating-size matrix column 1279 return _Dec.fmatrix(s, *a)
1282 _t_nTuple_.__doc__ +=
'\n' + _Dec.nTuple.__doc__
1283 _t_ntuple_.__doc__ +=
'\n' + _Dec.ntuple.__doc__
1284 _t_valid_.__doc__ +=
'\n' + _Dec.valid.__doc__
1285 _t_write_.__doc__ +=
'\n' + _Dec.write.__doc__
1286 _t_column_.__doc__ +=
'\n' + _Dec.column.__doc__
1287 _t_column_ll_.__doc__ +=
'\n' + _Dec.column_ll.__doc__
1288 _t_column_ull_.__doc__ +=
'\n' + _Dec.column_ull.__doc__
1289 _t_array_.__doc__ +=
'\n' + _Dec.array.__doc__
1290 _t_matrix_.__doc__ +=
'\n' + _Dec.matrix.__doc__
1291 _t_farray_.__doc__ +=
'\n' + _Dec.farray.__doc__
1292 _t_fmatrix_.__doc__ +=
'\n' + _Dec.fmatrix.__doc__
1294 Tuple.nTuple = _t_nTuple_
1295 Tuple.ntuple = _t_ntuple_
1296 Tuple.valid = _t_valid_
1297 Tuple.write = _t_write_
1298 Tuple.column = _t_column_
1299 Tuple.column_ll = _t_column_ll_
1300 Tuple.column_ull = _t_column_ull_
1301 Tuple.array = _t_array_
1302 Tuple.matrix = _t_matrix_
1303 Tuple.farray = _t_farray_
1304 Tuple.fmatrix = _t_fmatrix_
1311 'eventSvc': _evtSvc,
1313 'histoSvc': _histoSvc,
1314 'histSvc': _histoSvc,
1319 'finalize': _finalize_,
1323 'getProperty': _getProperty_,
1324 'setProperty': _setProperty_,
1325 '__setattr__': _set_attr_,
1326 '__getattr__': _get_attr_
1333 if not issubclass(t, list)
and \
1334 not issubclass(t, tuple):
1336 for _alg
in klasses:
1337 for key
in _alg_map_:
1338 setattr(_alg, key, _alg_map_[key])
1352 """ Helper function to fill histogram/ntuple using 'map'-operation """ 1357 if hasattr(sequence,
'size'):
1358 vct.reserve(vct.size() + sequence.size())
1359 elif hasattr(sequence,
'__len__'):
1360 vct.reserve(vct.size() + len(sequence))
1361 for object
in sequence:
1362 vct.push_back(
func(object))
1378 _func = getattr(AlgDecorator, method)
1379 _num = _func(self, _tools)
1380 if _tools.size() != _num:
1381 raise RuntimeError(
'Unable to extract Tools')
1383 for _tool
in _tools:
1384 _res += [
iAlgTool(_tool.name(), _tool)]
1393 Retrieve the list of tools, 1394 aquired by component through GaudiCommon<TYPE> base: 1396 >>> alg = ... ## get the algorithm 1397 >>> tools = alg.Tools() ## get the tools 1398 >>> for tool in tools : 1402 _cmp = getattr(self,
'_ialg')
1404 self.retrieveInterface()
1405 _cmp = getattr(self,
'_ialg')
1414 Retrieve the list of tools, 1415 aquired by component through GaudiCommon<TYPE> base: 1417 >>> tool = ... ## get the tool 1418 >>> tools = tool.Tools() ## get the tools 1419 >>> for t in tools : 1423 _cmp = getattr(self,
'_itool')
1425 self.retrieveInterface()
1426 _cmp = getattr(self,
'_itool')
1440 _func = getattr(AlgDecorator, method)
1441 _num = _func(self, _nams, _cnts)
1442 if _nams.size() != _num
or _cnts.size() != _num:
1443 raise RuntimeError(
'Unable to extract Counters')
1445 for _i
in range(0, _num):
1451 return _res.get(name,
None)
1460 Retrieve the counters, managed GaudiCommon<TYPE> base: 1462 >>> alg = ... ## get the algorithm 1463 >>> cnts = alg.Counters() ## get the counters 1464 >>> for key in cnts : 1465 ... print key, cnts[key] 1468 Retrieve the counter, managed GaudiCommon<TYPE> base by name: 1470 >>> alg = ... ## get the algorithm 1471 >>> cnt = alg.Counters('MyCounter') ## get the counter 1475 _cmp = getattr(self,
'_ialg')
1477 self.retrieveInterface()
1478 _cmp = getattr(self,
'_ialg')
1487 Retrieve the counters, managed GaudiCommon<TYPE> base: 1489 >>> tool = ... ## get the tool 1490 >>> cnts = tool.Counters() ## get the counters 1491 >>> for key in cnts : 1492 ... print key, cnts[key] 1495 Retrieve the counter, managed GaudiCommon<TYPE> base by name: 1497 >>> tool = ... ## get the tool 1498 >>> cnt = tool.Counters('MyCounter') ## get the counter 1502 _cmp = getattr(self,
'_itool')
1504 self.retrieveInterface()
1505 _cmp = getattr(self,
'_itool')
1518 _func = getattr(AlgDecorator, method)
1519 return _func(self, name)
1527 Retrieve the counter managed GaudiCommon<TYPE> base by name: 1529 >>> alg = ... ## get the algorithm 1530 >>> cnt = alg.Counter('#accept') ## get the counter 1534 _cmp = getattr(self,
'_ialg')
1536 self.retrieveInterface()
1537 _cmp = getattr(self,
'_ialg')
1546 Retrieve the counter managed GaudiCommon<TYPE> base by name: 1548 >>> tool = ... ## get the tool 1549 >>> cnt = tool.Counter('#accept') ## get the counter 1553 _cmp = getattr(self,
'_itool')
1555 self.retrieveInterface()
1556 _cmp = getattr(self,
'_itool')
1563 cpp.GaudiAlg.ID.__repr__ = cpp.GaudiAlg.ID.idAsString
1564 cpp.GaudiAlg.ID.__str__ = cpp.GaudiAlg.ID.idAsString
1565 cpp.StatEntity.__repr__ = cpp.StatEntity.toString
1566 cpp.StatEntity.__str__ = cpp.StatEntity.toString
1573 Get All histogram form the component 1576 for _his
in (
std.vector(
'AIDA::IProfile2D*'),
1583 _fun = getattr(HistoDecorator, method)
1584 _num = _fun(component, _ids, _his)
1585 if _ids.size() != _num
or _his.size() != _num:
1586 raise RuntimeError(
'Unable to extract Histos!')
1587 for _i
in range(0, _num):
1590 _id = _id.numericID()
1592 _id = _id.literalID()
1594 _id = _is.idAsString()
1595 _res[_id] = _his[_i]
1600 id = cpp.GaudiAlg.ID(name)
1601 for i
in (name, id.literalID(), id.numericID(), id.idAsString(), id):
1602 h = _res.get(i,
None)
1614 Retrieve all histograms & profiles, booked through GauydiHistos<TYPE> base: 1616 >>> alg = ... ## get the algorithm 1617 >>> histos = alg.Histos() ## get all histograms & profiles 1618 >>> for key in histos : 1619 ... print key, histos[key] 1621 Retrive the histogram with the certain ID : 1623 >>> alg = ... ## get the algorithm 1624 >>> histo = alg.Histos('some histo ID') ## get the histo by ID 1628 _cmp = getattr(self,
'_ialg')
1630 self.retrieveInterface()
1631 _cmp = getattr(self,
'_ialg')
1640 Retrieve all histograms & profiles, booked through GauydiHistos<TYPE> base: 1642 >>> tool = ... ## get the tool 1643 >>> histos = tool.Histos() ## get all histograms & profiles 1644 >>> for key in histos : 1645 ... print key, histos[key] 1647 Retrive the historgam with certain ID : 1649 >>> tool = ... ## get the tool 1650 >>> histo = tool.Histos('some histo ID') ## get the histo by ID 1654 _cmp = getattr(self,
'_itool')
1656 self.retrieveInterface()
1657 _cmp = getattr(self,
'_itool')
1663 _Tools_a_.__doc__ +=
'\n' + AlgDecorator._tools_a_.__doc__
1664 _Tools_t_.__doc__ +=
'\n' + AlgDecorator._tools_t_.__doc__
1665 _Counters_a_.__doc__ +=
'\n' + AlgDecorator._counters_a_.__doc__
1666 _Counters_t_.__doc__ +=
'\n' + AlgDecorator._counters_t_.__doc__
1667 _Counter_a_.__doc__ +=
'\n' + AlgDecorator._counter_a_.__doc__
1668 _Counter_t_.__doc__ +=
'\n' + AlgDecorator._counter_t_.__doc__
1669 _Histos_a_.__doc__ +=
'\n' + HistoDecorator._histos_a_.__doc__
1670 _Histos_t_.__doc__ +=
'\n' + HistoDecorator._histos_t_.__doc__
1672 iAlgorithm.Tools = _Tools_a_
1673 iAlgTool.Tools = _Tools_t_
1674 iAlgorithm.Counters = _Counters_a_
1675 iAlgTool.Counters = _Counters_t_
1676 iAlgorithm.Counter = _Counter_a_
1677 iAlgTool.Counter = _Counter_t_
1678 iAlgorithm.Histos = _Histos_a_
1679 iAlgTool.Histos = _Histos_t_
1690 print(__doc__, __author__)
1691 print(
'\t\t\tDoc-string for class GaudiAlgo \n', GaudiAlgo.__doc__)
1692 print(
'\t\t\tDoc-string for class HistoAlgo \n', HistoAlgo.__doc__)
1693 print(
'\t\t\tDoc-string for class TupleAlgo \n', TupleAlgo.__doc__)
1699 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 _t_column_ull_(s, *a)
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 __call__(self, *args)
def _init_(self, name, **args)
def _get_all_histos_(component, method, name)
def _hasProperty_(self, pname)
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)
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)
decltype(auto) range(Args &&... args)
Zips multiple containers together to form a single range.
def _Counters_t_(self, name=None)
def _setProperty_(self, pname, pvalue)
def _getProperty_(self, pname)