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)