7 __version__ =
'$Revision: 1.21 $'
8 __author__ =
"""Wim Lavrijsen (WLavrijsen@lbl.gov)
9 Sebastien Binet <binet@cern.ch>
12 __all__ = [
'AlgSequence',
'AthSequencer',
17 import GaudiSequencer.GaudiSequencerConf
as GaudiSequencerConf
24 """Sequence of Gaudi algorithms"""
26 def __init__( self, name = "AthSequencer", **kwargs ):
28 super( AthSequencer, self ).
__init__( name, **kwargs )
35 if 'Members' in props:
36 props[
'Members'] = [ c.getFullName()
for c
in self.getChildren() ]
48 self._flags &= ~self._fIsLocked
50 self.
Members = [ c.getFullName()
for c
in self.getChildren() ]
52 from AthenaCommon
import Logging
53 msg = Logging.logging.getLogger(
"AthSequencer" )
54 msg.debug(
'setup of sequence: %s', self.getName() )
55 if msg.isEnabledFor( Logging.logging.VERBOSE ):
57 msg.verbose(
'layout of sequence: %s\n%s', self.getName(),
str(self) )
60 super( AthSequencer, self ).
setup()
63 from AthenaCommon
import CfgMgr
64 CfgMgr.AthSequencer = AthSequencer
68 if hasattr(GaudiSequencerConf,
'AthRetrySequencer'):
71 """Sequence of Gaudi algorithms"""
73 def __init__( self, name = "AthRetrySequencer", **kwargs ):
75 super( AthRetrySequencer, self ).
__init__( name, **kwargs )
82 if 'Members' in props:
83 props[
'Members'] = [ c.getFullName()
for c
in self.getChildren() ]
87 self.__iadd__( item, index = index )
92 self.
Members = [ c.getFullName()
for c
in self.getChildren() ]
94 from AthenaCommon
import Logging
95 msg = Logging.logging.getLogger(
"AthRetrySequencer" )
96 msg.debug(
'setup of sequence: %s', self.getName() )
97 if msg.isEnabledFor( Logging.logging.VERBOSE ):
99 msg.verbose(
'layout of sequence: %s\n%s', self.getName(),
str(self) )
102 super( AthRetrySequencer, self ).
setup()
105 from AthenaCommon
import CfgMgr
106 CfgMgr.AthRetrySequencer = AthRetrySequencer
113 """Convenience method to get the default sequence for algorithms"""
119 """iterate over a (possibly nested) ``seq`` AlgSequence.
121 if the sequence contains nested sub-sequences, everything will be flatten
125 >>> import AthenaCommon.AlgSequence as acas
126 >>> aaa = CfgMgr.AthSequencer('aaa')
127 >>> aaa += CfgMgr.AthSequencer('aaa1')
128 >>> aaa.aaa1 += CfgMgr.AthSequencer('aaa2')
129 >>> aaa.aaa1.aaa2 += CfgMgr.AthSequencer('aaa3')
130 >>> aaa.aaa1.aaa2.aaa3 += CfgMgr.AthSequencer('aaa4')
131 >>> aaa.aaa1.aaa2.aaa3.aaa4 += CfgMgr.AthSequencer('aaa5')
132 >>> aaa += CfgMgr.AthSequencer('aaa11')
133 >>> aaa.aaa11 += CfgMgr.AthSequencer('aaa21')
134 >>> print ([c.getName() for c in acas.iter_algseq(aaa)])
135 ['aaa', 'aaa1', 'aaa2', 'aaa3', 'aaa4', 'aaa5', 'aaa11', 'aaa21']
137 def _iter_algseq(seq):
139 for c
in seq.getChildren():
140 for sub
in _iter_algseq(c):
142 return _iter_algseq(seq)
145 def _dump (seq, indent):
147 for c
in seq.getChildren():
148 o.append( (c.getFullName(), indent) )
149 o.extend( _dump (c, indent+1) )
151 out = [(seq.getFullName(),indent)]
152 out.extend( _dump( seq, indent=indent+1 ) )
154 print (
" "*i,
"+--",n)
158 Helper function to display on screen the current master sequencer layout
162 from AthenaCommon.AppMgr
import theApp, AthAppMgr
163 app_state = theApp.state()
164 if app_state != AthAppMgr.State.OFFLINE: