All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
Sequencer.cpp
Go to the documentation of this file.
1 // Sequencer class
2 // Implements:
3 // 1) Common functionality of IInterface
4 // 2) Default behavior for the IAlgorithm
5 
6 #include "GaudiAlg/Sequencer.h"
7 
8 #include "GaudiKernel/IAlgManager.h"
9 #include "GaudiKernel/ISvcLocator.h"
10 #include "GaudiKernel/MsgStream.h"
11 #include "GaudiKernel/Chrono.h"
12 #include "GaudiKernel/Stat.h"
13 #include "GaudiKernel/GaudiException.h"
14 
15 #define ON_DEBUG if (UNLIKELY(outputLevel() <= MSG::DEBUG))
16 #define ON_VERBOSE if (UNLIKELY(outputLevel() <= MSG::VERBOSE))
17 
21 Sequencer::Sequencer( const std::string& name, ISvcLocator* pSvcLocator )
22 : Algorithm( name, pSvcLocator )
23 {
24  // Declare Sequencer properties with their defaults
25  declareProperty( "Members", m_names );
26  declareProperty( "BranchMembers", m_branchNames );
27  declareProperty( "StopOverride", m_stopOverride=false );
28 
29  // Associate action handlers with the "Members" and "BranchMembers" properties
32 
33 }
34 
37 {
39  MsgStream log( msgSvc( ), name( ) );
40 
41 
42  result = decodeMemberNames();
43  if( result.isFailure() ) {
44  log << MSG::ERROR << "Unable to configure one or more sequencer members " << endmsg;
45  return result;
46  }
47  result = decodeBranchMemberNames();
48  if( result.isFailure() ) {
49  log << MSG::ERROR << "Unable to configure one or more branch members " << endmsg;
50  return result;
51  }
52 
53  // Loop over all sub-algorithms
54  for (auto& alg : *subAlgorithms() ) {
55  result = alg->sysInitialize( );
56  if( result.isFailure() ) {
57  log << MSG::ERROR << "Unable to initialize Algorithm " << alg->name() << endmsg;
58  return result;
59  }
60  }
61 
62  // Loop over all branches
63  for (auto& alg : branchAlgorithms() ) {
64  result = alg->sysInitialize( );
65  if( result.isFailure() ) {
66  log << MSG::ERROR << "Unable to initialize Algorithm " << alg->name() << endmsg;
67  return result;
68  }
69  }
70 
71  return result;
72 }
73 
76 {
77  // Bypass the loop if this sequencer is disabled
78  if ( isEnabled( ) ) {
79 
80  // Loop over all members calling their reinitialize functions
81  // if they are not disabled.
82  for (auto& alg : *subAlgorithms() ) {
83  if ( alg->isEnabled( ) ) alg->reinitialize( ).ignore();
84  }
85  // Loop over all branch members calling their reinitialize functions
86  // if they are not disabled.
87  for (auto& alg : branchAlgorithms() ) {
88  if ( alg->isEnabled( ) ) {
89  alg->reinitialize( ).ignore();
90  }
91  }
92 
93  }
94  return StatusCode::SUCCESS;
95 }
96 
99 {
101  MsgStream log( msgSvc( ), name( ) );
102 
103  ON_DEBUG log << MSG::DEBUG << name( ) << " Sequencer::execute( )" << endmsg;
104 
105  // Bypass the loop if this sequencer is disabled or has already been executed
106  if ( isEnabled( ) && ! isExecuted( ) ) {
107  Algorithm* lastAlgorithm;
108  result = execute( *subAlgorithms( ), m_isInverted, lastAlgorithm );
109  if ( result.isSuccess( ) ) {
110  bool passed = filterPassed( );
111  if ( ! passed && ! isStopOverride( ) ) {
112 
113  // Filter failed and stop override not set. Execute the
114  // branch if there is one associated with the filter
115  // algorithm that failed. Note that the first member on
116  // the branch is the failing algorithm and so should
117  // be skipped.
118  const auto& theAlgs = branchAlgorithms( );
119  if ( !theAlgs.empty( ) ) {
120  Algorithm* branchAlgorithm = theAlgs[0];
121  if ( lastAlgorithm == branchAlgorithm ) {
122 
123  // Branch specified - Loop over branch members
124  result = execute( branchAlgorithms( ),
126  lastAlgorithm, 1 );
127  if ( result.isSuccess( ) ) {
128 
129  // The final filter passed state will be set true if either
130  // of the main or branches passed, otherwise false.
131 
132  // Save the branch filter passed state.
134  }
135  }
136  }
137  }
138  }
139 
140  // Prevent multiple executions of this sequencer for the current event
141  setExecuted( true );
142  }
143  return result;
144 }
145 
148 {
149  // Loop over all branch members calling their finalize functions
150  // if they are not disabled. Note that the Algorithm::sysFinalize
151  // function already does this for the main members.
152  for (auto & alg : branchAlgorithms() ) {
153  if (alg->sysFinalize( ).isFailure()) {
154  MsgStream log( msgSvc( ), name( ) );
155  log << MSG::ERROR << "Unable to finalize Algorithm "
156  << alg->name() << endmsg;
157  }
158  }
159  return StatusCode::SUCCESS;
160 }
161 
164 {
166  MsgStream log( msgSvc( ), name( ) );
167 
168 
169  // Loop over all sub-algorithms
170  for (auto& alg : *subAlgorithms() ) {
171  result = alg->sysStart( );
172  if( result.isFailure() ) {
173  log << MSG::ERROR << "Unable to start Algorithm " << alg->name() << endmsg;
174  return result;
175  }
176  }
177 
178  // Loop over all branches
179  for (auto& alg : branchAlgorithms() ) {
180  result = alg->sysStart( );
181  if( result.isFailure() ) {
182  log << MSG::ERROR << "Unable to start Algorithm " << alg->name() << endmsg;
183  return result;
184  }
185  }
186 
187  return result;
188 }
189 
192 {
193  // Loop over all branch members calling their finalize functions
194  // if they are not disabled.
195 
196  for (auto& alg : *subAlgorithms() ) {
197  if (alg->sysStop( ).isFailure()) {
198  MsgStream log( msgSvc( ), name( ) );
199  log << MSG::ERROR << "Unable to stop Algorithm "
200  << alg->name() << endmsg;
201  }
202  }
203 
204  for (auto& alg : branchAlgorithms() ) {
205  if (alg->sysStop( ).isFailure()) {
206  MsgStream log( msgSvc( ), name( ) );
207  log << MSG::ERROR << "Unable to stop Algorithm "
208  << alg->name() << endmsg;
209  }
210  }
211  return StatusCode::SUCCESS;
212 }
213 
216 {
218  MsgStream log( msgSvc( ), name( ) );
219 
220  // Bypass the loop if this sequencer is disabled
221  if ( isEnabled( ) ) {
222 
223  // Loop over all members calling their sysInitialize functions
224  // if they are not disabled. Note that the Algoriithm::sysInitialize
225  // function protects this from affecting Algorithms that have already
226  // been initialized.
227  for (auto& alg : *subAlgorithms() ) {
228  result = alg->sysInitialize( );
229  if( result.isFailure() ) {
230  log << MSG::ERROR << "Unable to initialize Algorithm " << alg->name() << endmsg;
231  break;
232  }
233  result = alg->sysStart( );
234  if( result.isFailure() ) {
235  log << MSG::ERROR << "Unable to start Algorithm " << alg->name() << endmsg;
236  break;
237  }
238  }
239 
240  // Loop over all members calling their beginRun functions
241  // if they are not disabled.
242  for (auto& alg : *subAlgorithms() ) {
243  if ( ! alg->isEnabled( ) ) {
244  alg->beginRun( ).ignore();
245  }
246  }
247 
248  // Loop over all branch members calling their sysInitialize functions
249  // if they are not disabled. Note that the Algoriithm::sysInitialize
250  // function protects this from affecting Algorithms that have already
251  // been initialized.
252  for (auto& alg : branchAlgorithms() ) {
253  result = alg->sysInitialize( );
254  if( result.isFailure() ) {
255  log << MSG::ERROR << "Unable to initialize Algorithm " << alg->name() << endmsg;
256  break;
257  }
258  result = alg->sysStart( );
259  if( result.isFailure() ) {
260  log << MSG::ERROR << "Unable to start Algorithm " << alg->name() << endmsg;
261  break;
262  }
263  }
264 
265  // Loop over all branch members calling their beginRun functions
266  // if they are not disabled.
267  for (auto& alg : branchAlgorithms()) {
268  if ( ! alg->isEnabled( ) ) {
269  alg->beginRun( ).ignore();
270  }
271  }
272  }
273  return StatusCode::SUCCESS;
274 }
275 
278 {
279  // Bypass the loop if this sequencer is disabled
280  if ( isEnabled( ) ) {
281 
282  // Loop over all members calling their endRun functions
283  // if they are not disabled.
284  for (auto& alg : *subAlgorithms()) {
285  if ( ! alg->isEnabled( ) ) alg->endRun( ).ignore();
286  }
287  // Loop over all branch members calling their endRun functions
288  // if they are not disabled.
289  for (auto& alg : branchAlgorithms()) {
290  if ( ! alg->isEnabled( ) ) alg->endRun( ).ignore();
291  }
292  }
293  return StatusCode::SUCCESS;
294 }
295 
296 void
298 {
300 
301  // Loop over all members calling their resetExecuted functions
302  // if they are not disabled.
303  for (auto& alg : *subAlgorithms() ) alg->resetExecuted( );
304 
305  // Loop over all branch members calling their resetExecuted functions
306  // if they are not disabled.
307  for (auto& alg : branchAlgorithms() ) alg->resetExecuted( );
308 
309  // Reset the branch filter passed flag
310  m_branchFilterPassed = false;
311 }
312 
313 bool
315 {
316  return m_branchFilterPassed;
317 }
318 
321 {
323  return StatusCode::SUCCESS;
324 }
325 
326 bool
328 {
329  return m_stopOverride.value( );
330 }
331 
334 {
335  return append( pAlgorithm, *subAlgorithms( ) );
336 }
337 
340 {
341  return append( pAlgorithm, branchAlgorithms( ) );
342 }
343 
345 Sequencer::createAndAppend( const std::string& type,
346  const std::string& name,
347  Algorithm*& pAlgorithm )
348 {
349  return createAndAppend( type, name, pAlgorithm, *subAlgorithms( ) );
350 }
351 
354  const std::string& name,
355  Algorithm*& pAlgorithm )
356 {
357  return createAndAppend( type, name, pAlgorithm, branchAlgorithms( ) );
358 }
359 
362 {
363  return remove( pAlgorithm->name( ) );
364 }
365 
367 Sequencer::remove( const std::string& algname )
368 {
369  return remove( algname, *subAlgorithms( ) );
370 }
371 
374 {
375  return removeFromBranch( pAlgorithm->name( ) );
376 }
377 
379 Sequencer::removeFromBranch( const std::string& algname )
380 {
381  return remove( algname, branchAlgorithms( ) );
382 }
383 
384 const std::vector<Algorithm*>&
386  return m_branchAlgs;
387 }
388 
389 std::vector<Algorithm*>&
391  return m_branchAlgs;
392 }
393 
396 {
397  // Decode the membership list
398  return decodeNames( m_names,
399  *subAlgorithms( ),
400  m_isInverted );
401 }
402 
403 void
405 {
406  if ( isInitialized() ) decodeMemberNames();
407 }
408 
411 {
412  // Decode the branch membership list
413  return decodeNames( m_branchNames,
414  branchAlgorithms( ),
416 }
417 
418 void
420 {
422 }
423 
430  std::vector<Algorithm*>& theAlgs )
431 {
432  // Check that the specified algorithm doesn't already exist in the membership list
433  if (std::find(std::begin(theAlgs),std::end(theAlgs),pAlgorithm)!=std::end(theAlgs)) {
434  return StatusCode::FAILURE;
435  }
436  theAlgs.push_back( pAlgorithm );
437  pAlgorithm->addRef();
438  return StatusCode::SUCCESS;
439 }
440 
442 Sequencer::createAndAppend( const std::string& type,
443  const std::string& algName,
444  Algorithm*& pAlgorithm,
445  std::vector<Algorithm*>& theAlgs )
446 {
447  MsgStream log( msgSvc( ), name( ) );
448  auto theAlgMgr = serviceLocator()->service<IAlgManager>("ApplicationMgr");
449  if ( !theAlgMgr ) return StatusCode::FAILURE;
450 
451  IAlgorithm* tmp;
452  StatusCode result = theAlgMgr->createAlgorithm( type, algName, tmp );
453  if ( result.isSuccess( ) ) {
454  try{
455  pAlgorithm = dynamic_cast<Algorithm*>(tmp);
456  theAlgs.push_back( pAlgorithm );
457  } catch(...){
458  log << MSG::ERROR << "Unable to create Algorithm " << algName << endmsg;
459  result = StatusCode::FAILURE;
460  }
461  }
462 
463  return result;
464 }
465 
468  std::vector<Algorithm*>& theAlgs,
469  std::vector<bool>& theLogic )
470 {
471  StatusCode result;
472  MsgStream log( msgSvc( ), name( ) );
473  auto theAlgMgr = serviceLocator()->service<IAlgManager>("ApplicationMgr");
474  if ( theAlgMgr ) {
475  // Clear the existing list of algorithms
476  theAlgs.clear( );
477 
478  // Build the list of member algorithms from the contents of the
479  // theNames list.
480  for (const auto& n : theNames.value() ) {
481 
482  // Parse the name for a syntax of the form:
483  //
484  // <type>/<name>
485  //
486  // Where <name> is the algorithm instance name, and <type> is the
487  // algorithm class type (being a subclass of Algorithm).
489  std::string theName = typeName.name();
490  std::string theType = typeName.type();
491 
492  // Parse the name for a syntax of the form:
493  //
494  // <name>:invert
495  //
496  // Where <name> is the algorithm instance name and ":invert"
497  // indicates that the filter passed logic is inverted.
498  bool isInverted = false;
499  std::string::size_type invert = theName.find_first_of( ":" );
500  // Skip all occurrences of "::" (allow namespaces)
501  while ( std::string::npos != invert
502  && invert < (theName.size() - 1) && theName[invert+1] == ':' )
503  invert = theName.find_first_of( ":", invert+2 );
504  if ( std::string::npos != invert ) {
505  if ( theName == theType ) {
506  // This means that we got something like "Type:invert",
507  // so we have to strip the ":invert" from the type too.
508  theType = theType.substr( 0, invert );
509  }
510  theName = theName.substr( 0, invert );
511  isInverted = true;
512  }
513  // Check whether the supplied name corresponds to an existing
514  // Algorithm object.
515  SmartIF<IAlgorithm>& theIAlg = theAlgMgr->algorithm(theName, false);
516  Algorithm* theAlgorithm = nullptr;
518  if ( theIAlg ) {
519  try{
520  theAlgorithm = dynamic_cast<Algorithm*>(theIAlg.get());
521  } catch(...){
522  log << MSG::WARNING << theName << " is not an Algorithm - Failed dynamic cast" << endmsg;
523  theAlgorithm = nullptr; // release
524  }
525  }
526  if ( theAlgorithm ) {
527 
528  // The specified Algorithm already exists - just append it to the membership list.
529  status = append( theAlgorithm, theAlgs );
530  if ( status.isSuccess( ) ) {
531  ON_DEBUG log << MSG::DEBUG << theName << " already exists - appended to member list" << endmsg;
532  } else {
533  log << MSG::WARNING << theName << " already exists - append failed!!!" << endmsg;
534  result = StatusCode::FAILURE;
535  }
536  } else {
537 
538  // The specified name doesn't exist - create a new object of the specified type
539  // and append it to the membership list.
540  status = createAndAppend( theType, theName, theAlgorithm, theAlgs );
541  if ( status.isSuccess( ) ) {
542  ON_DEBUG log << MSG::DEBUG << theName << " doesn't exist - created and appended to member list" << endmsg;
543  } else {
544  log << MSG::WARNING << theName << " doesn't exist - creation failed!!!" << endmsg;
545  result = StatusCode::FAILURE;
546  }
547  }
548  if ( status.isSuccess( ) ) theLogic.push_back( isInverted );
549  }
550 
551  }
552  // Print membership list
553  if ( result.isSuccess() && theAlgs.size() != 0 ) {
554  log << MSG::INFO << "Member list: ";
555  auto ai = theAlgs.begin();
556  auto li = theLogic.begin();
557  for ( ; ai != theAlgs.end(); ++ai, ++li ) {
558 
559  if ( ai != theAlgs.begin() ) log << ", ";
560  auto alg = *ai;
561  if ( alg->name() == System::typeinfoName(typeid(*alg)) )
562  log << alg->name();
563  else
564  log << System::typeinfoName(typeid(*alg)) << "/" << alg->name();
565 
566  if (*li) log << ":invert";
567  }
568  log << endmsg;
569  }
570  return result;
571 }
572 
574 Sequencer::execute( const std::vector<Algorithm*>& theAlgs,
575  std::vector<bool>& theLogic,
576  Algorithm*& lastAlgorithm,
577  unsigned int first )
578 {
580 
581  // Loop over all algorithms calling their execute functions if they
582  // are (a) not disabled, and (b) aren't already executed. Note that
583  // in the latter case the filter state is still examined. Terminate
584  // the loop if an algorithm indicates that it's filter didn't pass.
585  unsigned int size = theAlgs.size( );
586  for (unsigned int i = first; i < size; i++) {
587  lastAlgorithm = theAlgs[i];
588  result = executeMember( lastAlgorithm );
589  if ( result.isSuccess( ) ) {
590 
591  // Take the filter passed status of this algorithm as my own status.
592  // Note that we take into account inverted logic.
593  bool passed = lastAlgorithm->filterPassed( );
594  bool isInverted = theLogic[i];
595  if ( isInverted ) passed = ! passed;
596  setFilterPassed( passed );
597 
598  // The behaviour when the filter fails depends on the StopOverride property.
599  // The default action is to stop processing, but this default can be
600  // overridden by setting the "StopOverride" property to true.
601  if ( ! isStopOverride( ) ) {
602  if ( ! passed ) break;
603  }
604  } else {
605  break;
606  }
607  }
608  return result;
609 }
610 
613 {
615  if ( theAlgorithm->isEnabled( ) ) {
616  if ( ! theAlgorithm->isExecuted( ) ) {
617  result = theAlgorithm->sysExecute( );
618 
619  // Set the executed state of the algorithm.
620  // I think this should be done by the algorithm itself, but just in case...
621  theAlgorithm->setExecuted( true );
622  }
623  }
624  return result;
625 }
626 
628 Sequencer::remove( const std::string& algname, std::vector<Algorithm*>& theAlgs )
629 {
630  MsgStream log( msgSvc( ), name( ) );
632 
633  // Test that the algorithm exists in the member list
634  for (auto& alg : theAlgs ) {
635  if ( alg->name( ) == algname ) {
636 
637  // Algorithm with specified name exists in the algorithm list - remove it
638  // THIS ISN'T IMPLEMENTED YET!!!!
639  log << MSG::INFO <<"Sequencer::remove( ) isn't implemented yet!!!!!" << endmsg;
640  result = StatusCode::SUCCESS;
641  break;
642  }
643  }
644  return result;
645 }
std::vector< bool > m_isBranchInverted
Definition: Sequencer.h:243
void resetExecuted() override
Reset the executed state of the Algorithm for the duration of the current event.
Definition: Algorithm.cpp:939
virtual bool isStopOverride() const
Has the StopOverride mode been set?
Definition: Sequencer.cpp:327
StatusCode append(Algorithm *pAlgorithm)
Append an algorithm to the sequencer.
Definition: Sequencer.cpp:333
Definition of the MsgStream class used to transmit messages.
Definition: MsgStream.h:24
The ISvcLocator is the interface implemented by the Service Factory in the Application Manager to loc...
Definition: ISvcLocator.h:25
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:244
StatusCode remove(Algorithm *pAlgorithm)
Remove the specified algorithm from the sequencer.
Definition: Sequencer.cpp:361
SmartIF< ISvcLocator > & serviceLocator() const
The standard service locator.
Definition: Algorithm.cpp:1045
StatusCode removeFromBranch(Algorithm *pAlgorithm)
Definition: Sequencer.cpp:373
virtual Property & declareUpdateHandler(std::function< void(Property &)> fun)
set new callback for update
Definition: Property.cpp:72
bool isSuccess() const
Test for a status code of SUCCESS.
Definition: StatusCode.h:76
auto begin(reverse_wrapper< T > &w)
Definition: reverse.h:45
Sequencer(const std::string &name, ISvcLocator *svcloc)
Constructor(s)
Definition: Sequencer.cpp:21
GAUDI_API const std::string typeinfoName(const std::type_info &)
Get platform independent information about the class type.
Definition: System.cpp:297
The IAlgManager is the interface implemented by the Algorithm Factory in the Application Manager to s...
Definition: IAlgManager.h:27
virtual bool branchFilterPassed() const
additional interface methods
Definition: Sequencer.cpp:314
Property * declareProperty(const std::string &name, T &property, const std::string &doc="none") const
Declare the named property.
Definition: Algorithm.h:435
StatusCode stop() override
Sequencer finalization.
Definition: Sequencer.cpp:191
void branchMembershipHandler(Property &theProp)
"BranchMembers" property handler
Definition: Sequencer.cpp:419
bool filterPassed() const override
Did this algorithm pass or fail its filter criterion for the last event?
Definition: Algorithm.cpp:948
bool m_branchFilterPassed
Definition: Sequencer.h:245
BooleanProperty m_stopOverride
Definition: Sequencer.h:244
StatusCode reinitialize() override
Sequencer Reinitialization.
Definition: Sequencer.cpp:75
StatusCode beginRun() override
Sequencer beginRun.
Definition: Sequencer.cpp:215
const std::vector< Algorithm * > & branchAlgorithms() const
List of branch algorithms.
Definition: Sequencer.cpp:385
StatusCode executeMember(Algorithm *theAlgorithm)
Execute member algorithm.
Definition: Sequencer.cpp:612
bool isFailure() const
Test for a status code of FAILURE.
Definition: StatusCode.h:86
StringArrayProperty m_branchNames
Definition: Sequencer.h:241
StatusCode decodeBranchMemberNames()
Decode branch member name list.
Definition: Sequencer.cpp:410
const std::string & name() const override
The identifying name of the algorithm object.
Definition: Algorithm.cpp:919
TYPE * get() const
Get interface pointer.
Definition: SmartIF.h:76
virtual StatusCode setBranchFilterPassed(bool state)
Set the branch filter passed flag for the last event.
Definition: Sequencer.cpp:320
StatusCode service(const Gaudi::Utils::TypeNameString &name, T *&svc, bool createIf=true)
Templated method to access a service by name.
Definition: ISvcLocator.h:78
StatusCode decodeNames(StringArrayProperty &theNames, std::vector< Algorithm * > &theAlgs, std::vector< bool > &theLogic)
Decode algorithm names, creating or appending algorithms as appropriate.
Definition: Sequencer.cpp:467
Helper class to parse a string of format "type/name".
Definition: TypeNameString.h:9
void setExecuted(bool state) override
Set the executed flag to the specified state.
Definition: Algorithm.cpp:935
StatusCode execute() override
The actions to be performed by the sequencer on an event.
Definition: Sequencer.cpp:98
StatusCode decodeMemberNames()
Decode Member Name list.
Definition: Sequencer.cpp:395
StatusCode createAndAppendToBranch(const std::string &type, const std::string &name, Algorithm *&pAlgorithm)
Create a algorithm and append it to the sequencer branch.
Definition: Sequencer.cpp:353
unsigned long addRef() override
Reference Interface instance.
Definition: implements.h:44
auto end(reverse_wrapper< T > &w)
Definition: reverse.h:47
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:26
StatusCode sysExecute() override
The actions to be performed by the algorithm on an event.
Definition: Algorithm.cpp:652
bool isExecuted() const override
Has this algorithm been executed since the last reset?
Definition: Algorithm.cpp:931
The IAlgorithm is the interface implemented by the Algorithm base class.
Definition: IAlgorithm.h:23
const TYPE & value() const
explicit conversion
Definition: Property.h:341
const std::vector< Algorithm * > * subAlgorithms() const
List of sub-algorithms. Returns a pointer to a vector of (sub) Algorithms.
Definition: Algorithm.cpp:956
Base class from which all concrete algorithm classes should be derived.
Definition: Algorithm.h:77
Property base class allowing Property* collections to be "homogeneous".
Definition: Property.h:38
void membershipHandler(Property &theProp)
"Members" property handler
Definition: Sequencer.cpp:404
#define ON_DEBUG
Definition: Sequencer.cpp:15
StatusCode endRun() override
Sequencer endRun.
Definition: Sequencer.cpp:277
bool isInitialized() const override
Has the Algorithm already been initialized?
Definition: Algorithm.h:829
std::vector< bool > m_isInverted
Definition: Sequencer.h:240
StatusCode createAndAppend(const std::string &type, const std::string &name, Algorithm *&pAlgorithm)
Create a algorithm and append it to the sequencer.
Definition: Sequencer.cpp:345
bool isEnabled() const override
Is this algorithm enabled or disabled?
Definition: Algorithm.cpp:944
const std::string & type() const
StatusCode appendToBranch(Algorithm *pAlgorithm)
Append an algorithm to the sequencer branch.
Definition: Sequencer.cpp:339
StringArrayProperty m_names
Definition: Sequencer.h:239
StatusCode finalize() override
Sequencer finalization.
Definition: Sequencer.cpp:147
StatusCode initialize() override
Initialization of a sequencer.
Definition: Sequencer.cpp:36
std::vector< Algorithm * > m_branchAlgs
Definition: Sequencer.h:242
const std::string & name() const
void ignore() const
Definition: StatusCode.h:108
std::string typeName(const std::type_info &typ)
Definition: Dictionary.cpp:21
list i
Definition: ana.py:128
SmartIF< IMessageSvc > & msgSvc() const
The standard message service.
Definition: Algorithm.cpp:1001
void setFilterPassed(bool state) override
Set the filter passed flag to the specified state.
Definition: Algorithm.cpp:952
void resetExecuted() override
Reset the Sequencer executed state for the current event.
Definition: Sequencer.cpp:297
string type
Definition: gaudirun.py:151
StatusCode start() override
Sequencer finalization.
Definition: Sequencer.cpp:163