MinimalEventLoopMgr Class Reference

This is the default processing manager of the application manager. More...

#include <GaudiKernel/MinimalEventLoopMgr.h>

Inheritance diagram for MinimalEventLoopMgr:
Collaboration diagram for MinimalEventLoopMgr:

Public Types

typedef std::vector< SmartIF< IAlgorithm > > ListAlg
 
- Public Types inherited from extends< Service, IEventProcessor >
using base_class = extends
 Typedef to this class. More...
 
using extend_interfaces_base = extend_interfaces< Interfaces... >
 Typedef to the base of this class. More...
 
- Public Types inherited from Service
typedef Gaudi::PluginService::Factory< IService *, const std::string &, ISvcLocator * > Factory
 
- Public Types inherited from PropertyHolder< CommonMessaging< implements< IService, IProperty, IStateful > > >
using PropertyHolderImpl = PropertyHolder< CommonMessaging< implements< IService, IProperty, IStateful > > >
 Typedef used to refer to this class from derived classes, as in. More...
 
- Public Types inherited from CommonMessaging< implements< IService, IProperty, IStateful > >
using base_class = CommonMessaging
 
- Public Types inherited from extend_interfaces< Interfaces... >
using ext_iids = typename Gaudi::interface_list_cat< typename Interfaces::ext_iids... >::type
 take union of the ext_iids of all Interfaces... More...
 

Public Member Functions

 MinimalEventLoopMgr (const std::string &nam, ISvcLocator *svcLoc)
 Standard Constructor. More...
 
StatusCode initialize () override
 implementation of IService::initialize More...
 
StatusCode start () override
 implementation of IService::start More...
 
StatusCode stop () override
 implementation of IService::stop More...
 
StatusCode finalize () override
 implementation of IService::finalize More...
 
StatusCode reinitialize () override
 implementation of IService::reinitialize More...
 
StatusCode restart () override
 implementation of IService::restart More...
 
StatusCode nextEvent (int maxevt) override
 implementation of IEventProcessor::nextEvent More...
 
StatusCode executeEvent (void *par) override
 implementation of IEventProcessor::executeEvent(void* par) More...
 
StatusCode executeRun (int maxevt) override
 implementation of IEventProcessor::executeRun( ) More...
 
StatusCode stopRun () override
 implementation of IEventProcessor::stopRun( ) More...
 
void topAlgHandler (Gaudi::Details::PropertyBase &p)
 Top algorithm List handler. More...
 
StatusCode decodeTopAlgs ()
 decodeTopAlgNameList & topAlgNameListHandler More...
 
void outStreamHandler (Gaudi::Details::PropertyBase &p)
 Output stream List handler. More...
 
StatusCode decodeOutStreams ()
 decodeOutStreamNameList & outStreamNameListHandler More...
 
- Public Member Functions inherited from extends< Service, IEventProcessor >
void * i_cast (const InterfaceID &tid) const override
 Implementation of IInterface::i_cast. More...
 
StatusCode queryInterface (const InterfaceID &ti, void **pp) override
 Implementation of IInterface::queryInterface. More...
 
std::vector< std::stringgetInterfaceNames () const override
 Implementation of IInterface::getInterfaceNames. More...
 
 ~extends () override=default
 Virtual destructor. More...
 
- Public Member Functions inherited from Service
const std::stringname () const override
 Retrieve name of the service. More...
 
StatusCode configure () override
 
StatusCode initialize () override
 
StatusCode start () override
 
StatusCode stop () override
 
StatusCode finalize () override
 
StatusCode terminate () override
 
Gaudi::StateMachine::State FSMState () const override
 
Gaudi::StateMachine::State targetFSMState () const override
 
StatusCode reinitialize () override
 
StatusCode restart () override
 
StatusCode sysInitialize () override
 Initialize Service. More...
 
StatusCode sysStart () override
 Initialize Service. More...
 
StatusCode sysStop () override
 Initialize Service. More...
 
StatusCode sysFinalize () override
 Finalize Service. More...
 
StatusCode sysReinitialize () override
 Re-initialize the Service. More...
 
StatusCode sysRestart () override
 Re-initialize the Service. More...
 
 Service (std::string name, ISvcLocator *svcloc)
 Standard Constructor. More...
 
SmartIF< ISvcLocator > & serviceLocator () const override
 Retrieve pointer to service locator. More...
 
StatusCode setProperties ()
 Method for setting declared properties to the values specified for the job. More...
 
template<class T >
StatusCode service (const std::string &name, const T *&psvc, bool createIf=true) const
 Access a service by name, creating it if it doesn't already exist. More...
 
template<class T >
StatusCode service (const std::string &name, T *&psvc, bool createIf=true) const
 
template<typename IFace = IService>
SmartIF< IFace > service (const std::string &name, bool createIf=true) const
 
template<class T >
StatusCode service (const std::string &svcType, const std::string &svcName, T *&psvc) const
 Access a service by name and type, creating it if it doesn't already exist. More...
 
template<class T >
StatusCode declarePrivateTool (ToolHandle< T > &handle, std::string toolTypeAndName="", bool createIf=true)
 Declare used Private tool. More...
 
template<class T >
StatusCode declarePublicTool (ToolHandle< T > &handle, std::string toolTypeAndName="", bool createIf=true)
 Declare used Public tool. More...
 
SmartIF< IAuditorSvc > & auditorSvc () const
 The standard auditor service.May not be invoked before sysInitialize() has been invoked. More...
 
- Public Member Functions inherited from PropertyHolder< CommonMessaging< implements< IService, IProperty, IStateful > > >
 PropertyHolder ()=default
 
 ~PropertyHolder () override=default
 
Gaudi::Details::PropertyBasedeclareProperty (Gaudi::Details::PropertyBase &prop)
 Declare a property. More...
 
Gaudi::Details::PropertyBasedeclareProperty (const std::string &name, TYPE &value, const std::string &doc="none")
 Helper to wrap a regular data member and use it as a regular property. More...
 
Gaudi::Details::PropertyBasedeclareProperty (const std::string &name, TYPE &value, const std::string &doc="none") const
 
Gaudi::Details::PropertyBasedeclareProperty (const std::string &name, Gaudi::Property< TYPE, VERIFIER, HANDLERS > &prop, const std::string &doc="none")
 Declare a PropertyBase instance setting name and documentation. More...
 
Gaudi::Details::PropertyBasedeclareRemoteProperty (const std::string &name, IProperty *rsvc, const std::string &rname="")
 Declare a remote property. More...
 
StatusCode setProperty (const Gaudi::Details::PropertyBase &p) override
 set the property form another property More...
 
StatusCode setProperty (const std::string &s) override
 set the property from the formatted string More...
 
StatusCode setProperty (const std::string &n, const std::string &v) override
 set the property from name and the value More...
 
StatusCode setProperty (const std::string &name, const TYPE &value)
 set the property form the value More...
 
StatusCode getProperty (Gaudi::Details::PropertyBase *p) const override
 get the property More...
 
const Gaudi::Details::PropertyBasegetProperty (const std::string &name) const override
 get the property by name More...
 
StatusCode getProperty (const std::string &n, std::string &v) const override
 convert the property to the string More...
 
const std::vector< Gaudi::Details::PropertyBase * > & getProperties () const override
 get all properties More...
 
bool hasProperty (const std::string &name) const override
 Return true if we have a property with the given name. More...
 
 PropertyHolder (const PropertyHolder &)=delete
 
PropertyHolderoperator= (const PropertyHolder &)=delete
 
Gaudi::Details::PropertyBasedeclareProperty (const std::string &name, GaudiHandleBase &ref, const std::string &doc="none")
 Specializations for various GaudiHandles. More...
 
Gaudi::Details::PropertyBasedeclareProperty (const std::string &name, GaudiHandleArrayBase &ref, const std::string &doc="none")
 
Gaudi::Details::PropertyBasedeclareProperty (const std::string &name, DataObjectHandleBase &ref, const std::string &doc="none")
 
- Public Member Functions inherited from CommonMessagingBase
virtual ~CommonMessagingBase ()=default
 Virtual destructor. More...
 
SmartIF< IMessageSvc > & msgSvc () const
 The standard message service. More...
 
MsgStreammsgStream () const
 Return an uninitialized MsgStream. More...
 
MsgStreammsgStream (const MSG::Level level) const
 Predefined configurable message stream for the efficient printouts. More...
 
MsgStreamalways () const
 shortcut for the method msgStream(MSG::ALWAYS) More...
 
MsgStreamfatal () const
 shortcut for the method msgStream(MSG::FATAL) More...
 
MsgStreamerr () const
 shortcut for the method msgStream(MSG::ERROR) More...
 
MsgStreamerror () const
 shortcut for the method msgStream(MSG::ERROR) More...
 
MsgStreamwarning () const
 shortcut for the method msgStream(MSG::WARNING) More...
 
MsgStreaminfo () const
 shortcut for the method msgStream(MSG::INFO) More...
 
MsgStreamdebug () const
 shortcut for the method msgStream(MSG::DEBUG) More...
 
MsgStreamverbose () const
 shortcut for the method msgStream(MSG::VERBOSE) More...
 
MsgStreammsg () const
 shortcut for the method msgStream(MSG::INFO) More...
 
MSG::Level msgLevel () const
 get the output level from the embedded MsgStream More...
 
MSG::Level outputLevel () const __attribute__((deprecated))
 Backward compatibility function for getting the output level. More...
 
bool msgLevel (MSG::Level lvl) const
 get the output level from the embedded MsgStream More...
 
- Public Member Functions inherited from extend_interfaces< Interfaces... >
 ~extend_interfaces () override=default
 Virtual destructor. More...
 

Protected Types

enum  State { OFFLINE, CONFIGURED, FINALIZED, INITIALIZED }
 

Protected Attributes

Gaudi::Property< std::vector< std::string > > m_topAlgNames {this, "TopAlg", {}, "list of top level algorithms names"}
 
Gaudi::Property< std::vector< std::string > > m_outStreamNames {this, "OutStream", {}, "list of output stream names"}
 
Gaudi::Property< std::stringm_outStreamType
 
Gaudi::Property< bool > m_printCFExp
 
SmartIF< IAppMgrUIm_appMgrUI
 Reference to the IAppMgrUI interface of the application manager. More...
 
SmartIF< IIncidentSvcm_incidentSvc
 Reference to the incident service. More...
 
SmartIF< IAlgExecStateSvcm_aess
 List of top level algorithms. More...
 
ListAlg m_topAlgList
 
ListAlg m_outStreamList
 List of output streams. More...
 
State m_state = OFFLINE
 State of the object. More...
 
bool m_scheduledStop = false
 Scheduled stop of event processing. More...
 
SmartIF< IIncidentListenerm_abortEventListener
 Instance of the incident listener waiting for AbortEvent. More...
 
bool m_abortEvent = false
 Flag signalling that the event being processedhas to be aborted (skip all following top algs). More...
 
std::string m_abortEventSource
 Source of the AbortEvent incident. More...
 
- Protected Attributes inherited from Service
Gaudi::StateMachine::State m_state = Gaudi::StateMachine::OFFLINE
 Service state. More...
 
Gaudi::StateMachine::State m_targetState = Gaudi::StateMachine::OFFLINE
 Service state. More...
 
Gaudi::Property< int > m_outputLevel {this, "OutputLevel", MSG::NIL, "output level"}
 
Gaudi::Property< bool > m_auditInit {this, "AuditServices", false, "[[deprecated]] unused"}
 
Gaudi::Property< bool > m_auditorInitialize {this, "AuditInitialize", false, "trigger auditor on initialize()"}
 
Gaudi::Property< bool > m_auditorStart {this, "AuditStart", false, "trigger auditor on start()"}
 
Gaudi::Property< bool > m_auditorStop {this, "AuditStop", false, "trigger auditor on stop()"}
 
Gaudi::Property< bool > m_auditorFinalize {this, "AuditFinalize", false, "trigger auditor on finalize()"}
 
Gaudi::Property< bool > m_auditorReinitialize {this, "AuditReinitialize", false, "trigger auditor on reinitialize()"}
 
Gaudi::Property< bool > m_auditorRestart {this, "AuditRestart", false, "trigger auditor on restart()"}
 
SmartIF< IAuditorSvcm_pAuditorSvc
 Auditor Service. More...
 

Private Member Functions

 MinimalEventLoopMgr (const MinimalEventLoopMgr &)
 Fake copy constructor (never implemented). More...
 
MinimalEventLoopMgroperator= (const MinimalEventLoopMgr &)
 Fake assignment operator (never implemented). More...
 

Private Attributes

size_t m_nevt {0}
 

Additional Inherited Members

- Protected Member Functions inherited from Service
 ~Service () override
 Standard Destructor. More...
 
int outputLevel () const
 get the Service's output level More...
 
- Protected Member Functions inherited from PropertyHolder< CommonMessaging< implements< IService, IProperty, IStateful > > >
Gaudi::Details::PropertyBaseproperty (const std::string &name) const
 
- Protected Member Functions inherited from CommonMessaging< implements< IService, IProperty, IStateful > >
void updateMsgStreamOutputLevel (int level)
 Update the output level of the cached MsgStream. More...
 

Detailed Description

This is the default processing manager of the application manager.

This object handles the minimal requirements needed by the application manager. It also is capable of handling a bunch of algorithms and output streams. However, they list may as well be empty.

Author
Markus Frank
Version
1.0

Definition at line 27 of file MinimalEventLoopMgr.h.

Member Typedef Documentation

Member Enumeration Documentation

Constructor & Destructor Documentation

MinimalEventLoopMgr::MinimalEventLoopMgr ( const std::string nam,
ISvcLocator svcLoc 
)

Standard Constructor.

Definition at line 56 of file MinimalEventLoopMgr.cpp.

57  : base_class( nam, svcLoc ), m_appMgrUI( svcLoc )
58 {
59  m_topAlgNames.declareUpdateHandler( &MinimalEventLoopMgr::topAlgHandler, this );
60  m_outStreamNames.declareUpdateHandler( &MinimalEventLoopMgr::outStreamHandler, this );
61 }
void topAlgHandler(Gaudi::Details::PropertyBase &p)
Top algorithm List handler.
void outStreamHandler(Gaudi::Details::PropertyBase &p)
Output stream List handler.
extends base_class
Typedef to this class.
Definition: extends.h:14
Gaudi::Property< std::vector< std::string > > m_outStreamNames
Gaudi::Property< std::vector< std::string > > m_topAlgNames
SmartIF< IAppMgrUI > m_appMgrUI
Reference to the IAppMgrUI interface of the application manager.
MinimalEventLoopMgr::MinimalEventLoopMgr ( const MinimalEventLoopMgr )
private

Fake copy constructor (never implemented).

Member Function Documentation

StatusCode MinimalEventLoopMgr::decodeOutStreams ( )

decodeOutStreamNameList & outStreamNameListHandler

Definition at line 550 of file MinimalEventLoopMgr.cpp.

551 {
553  if ( CONFIGURED == m_state || INITIALIZED == m_state ) {
554  auto algMan = serviceLocator()->as<IAlgManager>();
555  if ( algMan ) {
556  // Reset the existing Top Algorithm List
558  for ( const auto& it : m_outStreamNames.value() ) {
560  const bool CREATE = false;
561  SmartIF<IAlgorithm> os = algMan->algorithm( item, CREATE );
562  if ( os ) {
563  DEBMSG << "Output Stream " << item.name() << " already exists" << endmsg;
564  } else {
565  DEBMSG << "Creating Output Stream " << it << endmsg;
566  IAlgorithm* ios = nullptr;
567  StatusCode sc1 = algMan->createAlgorithm( item.type(), item.name(), ios );
568  if ( !sc1.isSuccess() ) {
569  error() << "Unable to create Output Stream " << it << endmsg;
570  return sc1;
571  }
572  os = ios; // manage reference counting
573  }
575  }
576  return sc;
577  }
578  sc = StatusCode::FAILURE;
579  }
580  return sc;
581 }
bool isSuccess() const
Test for a status code of SUCCESS.
Definition: StatusCode.h:74
The IAlgManager is the interface implemented by the Algorithm Factory in the Application Manager to s...
Definition: IAlgManager.h:27
SmartIF< IFace > as()
Definition: ISvcLocator.h:106
State m_state
State of the object.
T push_back(T...args)
MsgStream & error() const
shortcut for the method msgStream(MSG::ERROR)
Gaudi::Property< std::vector< std::string > > m_outStreamNames
Helper class to parse a string of format "type/name".
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:26
T clear(T...args)
The IAlgorithm is the interface implemented by the Algorithm base class.
Definition: IAlgorithm.h:27
ListAlg m_outStreamList
List of output streams.
#define DEBMSG
Gaudi::Property< std::string > m_outStreamType
SmartIF< ISvcLocator > & serviceLocator() const override
Retrieve pointer to service locator.
Definition: Service.cpp:292
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:244
StatusCode MinimalEventLoopMgr::decodeTopAlgs ( )

decodeTopAlgNameList & topAlgNameListHandler

Definition at line 500 of file MinimalEventLoopMgr.cpp.

501 {
503  if ( CONFIGURED == m_state || INITIALIZED == m_state ) {
504  auto algMan = serviceLocator()->as<IAlgManager>();
505  if ( algMan ) {
506  // Reset the existing Top Algorithm List
508  m_topAlgList.reserve( m_topAlgNames.value().size() );
509  for ( const auto& it : m_topAlgNames.value() ) {
511  // Got the type and name. Now creating the algorithm, avoiding duplicate creation.
512  std::string item_name = item.name() + getGaudiThreadIDfromName( name() );
513  const bool CREATE = false;
514  SmartIF<IAlgorithm> alg = algMan->algorithm( item_name, CREATE );
515  if ( alg ) {
516  DEBMSG << "Top Algorithm " << item_name << " already exists" << endmsg;
517  } else {
518  DEBMSG << "Creating Top Algorithm " << item.type() << " with name " << item_name << endmsg;
519  IAlgorithm* ialg = nullptr;
520  StatusCode sc1 = algMan->createAlgorithm( item.type(), item_name, ialg );
521  if ( !sc1.isSuccess() ) {
522  error() << "Unable to create Top Algorithm " << item.type() << " with name " << item_name << endmsg;
523  return sc1;
524  }
525  alg = ialg; // manage reference counting
526  }
527  m_topAlgList.push_back( alg );
528  }
529  return sc;
530  }
531  sc = StatusCode::FAILURE;
532  }
533  return sc;
534 }
const std::string & name() const override
Retrieve name of the service.
Definition: Service.cpp:289
bool isSuccess() const
Test for a status code of SUCCESS.
Definition: StatusCode.h:74
The IAlgManager is the interface implemented by the Algorithm Factory in the Application Manager to s...
Definition: IAlgManager.h:27
SmartIF< IFace > as()
Definition: ISvcLocator.h:106
STL class.
State m_state
State of the object.
T push_back(T...args)
MsgStream & error() const
shortcut for the method msgStream(MSG::ERROR)
Helper class to parse a string of format "type/name".
Gaudi::Property< std::vector< std::string > > m_topAlgNames
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:26
T clear(T...args)
The IAlgorithm is the interface implemented by the Algorithm base class.
Definition: IAlgorithm.h:27
#define DEBMSG
GAUDI_API std::string getGaudiThreadIDfromName(const std::string &name)
helper function to extract Gaudi Thread ID from thread copy name
Definition: ThreadGaudi.cpp:26
SmartIF< ISvcLocator > & serviceLocator() const override
Retrieve pointer to service locator.
Definition: Service.cpp:292
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:244
T reserve(T...args)
StatusCode MinimalEventLoopMgr::executeEvent ( void *  par)
override

implementation of IEventProcessor::executeEvent(void* par)

Definition at line 390 of file MinimalEventLoopMgr.cpp.

391 {
392  bool eventfailed = false;
393 
394  // reset state of ALL "known" algorithms
395  // (before we were reseting only the topalgs)
396  const EventContext& context = Gaudi::Hive::currentContext();
397  m_aess->reset(context);
398 
399  // Set event number in the context
401 
402  // Get the IProperty interface of the ApplicationMgr to pass it to RetCodeGuard
403  const auto appmgr = serviceLocator()->as<IProperty>();
404  // Call the execute() method of all top algorithms
405  for ( auto& ita : m_topAlgList ) {
407  try {
408  if ( UNLIKELY( m_abortEvent ) ) {
409  DEBMSG << "AbortEvent incident fired by " << m_abortEventSource << endmsg;
410  m_abortEvent = false;
411  sc.ignore();
412  break;
413  }
415  sc = ita->sysExecute();
416  rcg.ignore(); // disarm the guard
417  } catch ( const GaudiException& Exception ) {
418  fatal() << ".executeEvent(): Exception with tag=" << Exception.tag() << " thrown by " << ita->name() << endmsg;
419  error() << Exception << endmsg;
420  } catch ( const std::exception& Exception ) {
421  fatal() << ".executeEvent(): Standard std::exception thrown by " << ita->name() << endmsg;
422  error() << Exception.what() << endmsg;
423  } catch ( ... ) {
424  fatal() << ".executeEvent(): UNKNOWN Exception thrown by " << ita->name() << endmsg;
425  }
426 
427  AlgExecState& state = m_aess->algExecState(ita, context);
428  state.setExecuted(true);
429  state.setExecStatus(sc);
430 
431  if ( UNLIKELY( !sc.isSuccess() ) ) {
432  warning() << "Execution of algorithm " << ita->name() << " failed" << endmsg;
433  eventfailed = true;
434  }
435  }
436 
437  m_aess->updateEventStatus(eventfailed, context);
438 
439  // ensure that the abortEvent flag is cleared before the next event
440  if ( UNLIKELY( m_abortEvent ) ) {
441  DEBMSG << "AbortEvent incident fired by " << m_abortEventSource << endmsg;
442  m_abortEvent = false;
443  }
444 
445  // Call the execute() method of all output streams
446  for ( auto& ito : m_outStreamList ) {
447  AlgExecState& state = m_aess->algExecState(ito, context);
448  state.setExecuted(false);
449  state.setFilterPassed(true);
450  StatusCode sc;
451  sc = ito->sysExecute();
452  state.setExecStatus(sc);
453  if ( UNLIKELY( !sc.isSuccess() ) ) {
454  warning() << "Execution of output stream " << ito->name() << " failed" << endmsg;
455  eventfailed = true;
456  }
457  }
458 
459  m_nevt++;
460 
461  // Check if there was an error processing current event
462  if ( UNLIKELY( eventfailed ) ) {
463  error() << "Error processing event loop." << endmsg;
464  std::ostringstream ost;
465  m_aess->dump(ost, context);
466  debug() << "Dumping AlgExecStateSvc status:\n" << ost.str() << endmsg;
467  return StatusCode( StatusCode::FAILURE, true );
468  }
469 
470  return StatusCode( StatusCode::SUCCESS, true );
471 }
Define general base for Gaudi exception.
Helper class to set the application return code in case of early exit (e.g.
Definition: RetCodeGuard.h:9
SmartIF< IAlgExecStateSvc > m_aess
List of top level algorithms.
virtual void dump(std::ostringstream &ost, const EventContext &ctx) const =0
bool isSuccess() const
Test for a status code of SUCCESS.
Definition: StatusCode.h:74
void setExecStatus(const StatusCode &sc=StatusCode::SUCCESS)
#define UNLIKELY(x)
Definition: Kernel.h:126
SmartIF< IFace > as()
Definition: ISvcLocator.h:106
This class represents an entry point to all the event specific data.
Definition: EventContext.h:25
constexpr int UnhandledException
Definition: AppReturnCode.h:29
MsgStream & error() const
shortcut for the method msgStream(MSG::ERROR)
std::string m_abortEventSource
Source of the AbortEvent incident.
MsgStream & warning() const
shortcut for the method msgStream(MSG::WARNING)
T what(T...args)
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:26
virtual const AlgExecState & algExecState(const Gaudi::StringKey &algName, const EventContext &ctx) const =0
GAUDI_API const EventContext & currentContext()
virtual const std::string & tag() const
name tag for the exception, or exception type
void setExecuted(bool e=true)
STL class.
virtual void updateEventStatus(const bool &b, const EventContext &ctx)=0
virtual void reset(const EventContext &ctx)=0
ListAlg m_outStreamList
List of output streams.
MsgStream & debug() const
shortcut for the method msgStream(MSG::DEBUG)
GAUDI_API void setCurrentContextEvt(long int evtN)
#define DEBMSG
MsgStream & fatal() const
shortcut for the method msgStream(MSG::FATAL)
void setFilterPassed(bool f=true)
The IProperty is the basic interface for all components which have properties that can be set or get...
Definition: IProperty.h:20
SmartIF< ISvcLocator > & serviceLocator() const override
Retrieve pointer to service locator.
Definition: Service.cpp:292
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:244
bool m_abortEvent
Flag signalling that the event being processedhas to be aborted (skip all following top algs)...
StatusCode MinimalEventLoopMgr::executeRun ( int  maxevt)
override

implementation of IEventProcessor::executeRun( )

Definition at line 333 of file MinimalEventLoopMgr.cpp.

334 {
335  StatusCode sc;
336  bool eventfailed = false;
337 
338  // Call the beginRun() method of all top algorithms
339  for ( auto& ita : m_topAlgList ) {
340  sc = ita->sysBeginRun();
341  if ( !sc.isSuccess() ) {
342  warning() << "beginRun() of algorithm " << ita->name() << " failed" << endmsg;
343  eventfailed = true;
344  }
345  }
346 
347  // Call now the nextEvent(...)
348  sc = nextEvent( maxevt );
349  if ( !sc.isSuccess() ) eventfailed = true;
350 
351  // Call the endRun() method of all top algorithms
352  for ( auto& ita : m_topAlgList ) {
353  sc = ita->sysEndRun();
354  if ( !sc.isSuccess() ) {
355  warning() << "endRun() of algorithm " << ita->name() << " failed" << endmsg;
356  eventfailed = true;
357  }
358  }
359 
360  return eventfailed ? StatusCode::FAILURE : StatusCode::SUCCESS;
361 }
bool isSuccess() const
Test for a status code of SUCCESS.
Definition: StatusCode.h:74
MsgStream & warning() const
shortcut for the method msgStream(MSG::WARNING)
StatusCode nextEvent(int maxevt) override
implementation of IEventProcessor::nextEvent
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:26
int maxevt
Definition: Bootstrap.cpp:279
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:244
StatusCode MinimalEventLoopMgr::finalize ( )
override

implementation of IService::finalize

Definition at line 273 of file MinimalEventLoopMgr.cpp.

274 {
277  // Call the finalize() method of all top algorithms
278  for ( auto& ita : m_topAlgList ) {
279  sc = ita->sysFinalize();
280  if ( !sc.isSuccess() ) {
281  scRet = StatusCode::FAILURE;
282  warning() << "Finalization of algorithm " << ita->name() << " failed" << endmsg;
283  }
284  }
285  // Call the finalize() method of all Output streams
286  for ( auto& ita : m_outStreamList ) {
287  sc = ita->sysFinalize();
288  if ( !sc.isSuccess() ) {
289  scRet = StatusCode::FAILURE;
290  warning() << "Finalization of algorithm " << ita->name() << " failed" << endmsg;
291  }
292  }
293  // release all top algorithms
294  auto algMan = serviceLocator()->as<IAlgManager>();
295  for ( auto& ita : m_topAlgList ) {
296  if ( algMan->removeAlgorithm( ita ).isFailure() ) {
297  scRet = StatusCode::FAILURE;
298  warning() << "Problems removing Algorithm " << ita->name() << endmsg;
299  }
300  }
301  m_topAlgList.clear();
302  m_outStreamList.clear();
303  if ( sc.isSuccess() ) m_state = FINALIZED;
304 
305  m_incidentSvc->removeListener( m_abortEventListener, IncidentType::AbortEvent );
307 
309  m_appMgrUI.reset();
310 
311  sc = Service::finalize();
312 
313  if ( sc.isFailure() ) {
314  scRet = StatusCode::FAILURE;
315  error() << "Problems finalizing Service base class" << endmsg;
316  }
317 
318  return scRet;
319 }
StatusCode finalize() override
Definition: Service.cpp:174
bool isSuccess() const
Test for a status code of SUCCESS.
Definition: StatusCode.h:74
The IAlgManager is the interface implemented by the Algorithm Factory in the Application Manager to s...
Definition: IAlgManager.h:27
SmartIF< IFace > as()
Definition: ISvcLocator.h:106
bool isFailure() const
Test for a status code of FAILURE.
Definition: StatusCode.h:84
State m_state
State of the object.
MsgStream & error() const
shortcut for the method msgStream(MSG::ERROR)
SmartIF< IIncidentListener > m_abortEventListener
Instance of the incident listener waiting for AbortEvent.
MsgStream & warning() const
shortcut for the method msgStream(MSG::WARNING)
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:26
void clear(STATE_TYPE _i=std::ios_base::failbit)
Definition: MsgStream.h:222
SmartIF< IIncidentSvc > m_incidentSvc
Reference to the incident service.
ListAlg m_outStreamList
List of output streams.
void reset(TYPE *ptr=nullptr)
Set the internal pointer to the passed one disposing of the old one.
Definition: SmartIF.h:88
virtual void removeListener(IIncidentListener *lis, const std::string &type="")=0
Remove listener.
SmartIF< ISvcLocator > & serviceLocator() const override
Retrieve pointer to service locator.
Definition: Service.cpp:292
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:244
SmartIF< IAppMgrUI > m_appMgrUI
Reference to the IAppMgrUI interface of the application manager.
StatusCode MinimalEventLoopMgr::initialize ( )
override

implementation of IService::initialize

Definition at line 66 of file MinimalEventLoopMgr.cpp.

67 {
68 
69  if ( !m_appMgrUI ) return StatusCode::FAILURE;
70 
72  if ( !sc.isSuccess() ) {
73  error() << "Failed to initialize Service Base class." << endmsg;
74  return StatusCode::FAILURE;
75  }
76 
77  auto prpMgr = serviceLocator()->as<IProperty>();
78  if ( !prpMgr ) {
79  error() << "Error retrieving AppMgr interface IProperty." << endmsg;
80  return StatusCode::FAILURE;
81  }
82  if ( m_topAlgNames.value().empty() ) {
83  setProperty( prpMgr->getProperty( "TopAlg" ) ).ignore();
84  }
85  if ( m_outStreamNames.value().empty() ) {
86  setProperty( prpMgr->getProperty( "OutStream" ) ).ignore();
87  }
88 
89  // Get the references to the services that are needed by the ApplicationMgr itself
90  m_incidentSvc = serviceLocator()->service( "IncidentSvc" );
91  if ( !m_incidentSvc ) {
92  fatal() << "Error retrieving IncidentSvc." << endmsg;
93  return StatusCode::FAILURE;
94  }
95 
96  m_abortEventListener = new AbortEventListener( m_abortEvent, m_abortEventSource );
97  m_incidentSvc->addListener( m_abortEventListener, IncidentType::AbortEvent );
98 
99  // The state is changed at this moment to allow decodeXXXX() to do something
101 
102  // setup the default EventContext with slot 0
104 
105  //--------------------------------------------------------------------------------------------
106  // Create output streams. Do not initialize them yet.
107  // The state is updated temporarily in order to enable the handler, which
108  // is also triggered by a change to the "OutputStream" Property.
109  //--------------------------------------------------------------------------------------------
110  sc = decodeOutStreams();
111  if ( !sc.isSuccess() ) {
112  error() << "Failed to initialize Output streams." << endmsg;
114  return sc;
115  }
116  //--------------------------------------------------------------------------------------------
117  // Create all needed Top Algorithms. Do not initialize them yet.
118  // The state is updated temporarily in order to enable the handler, which
119  // is also triggered by a change to the "TopAlg" Property.
120  //--------------------------------------------------------------------------------------------
121  sc = decodeTopAlgs();
122  if ( !sc.isSuccess() ) {
123  error() << "Failed to initialize Top Algorithms streams." << endmsg;
125  return sc;
126  }
127 
128  // Initialize all the new TopAlgs. In fact Algorithms are protected against
129  // getting initialized twice.
130  for ( auto& ita : m_topAlgList ) {
131  sc = ita->sysInitialize();
132  if ( !sc.isSuccess() ) {
133  error() << "Unable to initialize Algorithm: " << ita->name() << endmsg;
134  return sc;
135  }
136  }
137  for ( auto& ita : m_outStreamList ) {
138  sc = ita->sysInitialize();
139  if( !sc.isSuccess() ) {
140  error() << "Unable to initialize Output Stream: " << ita->name() << endmsg;
141  return sc;
142  }
143  }
144 
145  // get hold of the Algorithm Execution State mgr
146  m_aess = serviceLocator()->service("AlgExecStateSvc");
147  if( !m_aess ) {
148  fatal() << "Error retrieving AlgExecStateSvc." << endmsg;
149  return StatusCode::FAILURE;
150  }
151 
152  if (m_printCFExp && !m_topAlgList.empty()) {
153  info() << "Control Flow Expression:" << endmsg;
154  std::stringstream expr;
155  auto& first = m_topAlgList.front();
156  for(auto& ialg: m_topAlgList) {
157  if (ialg != first) expr << " >> ";
158  ialg->toControlFlowExpression(expr);
159  }
160  info() << expr.str() << endmsg;
161  }
162  return StatusCode::SUCCESS;
163 }
std::size_t ContextIdType
Internal type used for the ContextId.
StatusCode initialize() override
Definition: Service.cpp:64
GAUDI_API void setCurrentContextId(ContextIdType newId)
Used by the framework to change the value of the current context id.
StatusCode setProperty(const Gaudi::Details::PropertyBase &p) override
set the property form another property
MsgStream & info() const
shortcut for the method msgStream(MSG::INFO)
SmartIF< IAlgExecStateSvc > m_aess
List of top level algorithms.
bool isSuccess() const
Test for a status code of SUCCESS.
Definition: StatusCode.h:74
SmartIF< IFace > as()
Definition: ISvcLocator.h:106
StatusCode decodeTopAlgs()
decodeTopAlgNameList & topAlgNameListHandler
State m_state
State of the object.
StatusCode service(const Gaudi::Utils::TypeNameString &name, T *&svc, bool createIf=true)
Templated method to access a service by name.
Definition: ISvcLocator.h:78
MsgStream & error() const
shortcut for the method msgStream(MSG::ERROR)
std::string m_abortEventSource
Source of the AbortEvent incident.
Gaudi::Property< std::vector< std::string > > m_outStreamNames
SmartIF< IIncidentListener > m_abortEventListener
Instance of the incident listener waiting for AbortEvent.
Gaudi::Property< std::vector< std::string > > m_topAlgNames
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:26
T str(T...args)
SmartIF< IIncidentSvc > m_incidentSvc
Reference to the incident service.
ListAlg m_outStreamList
List of output streams.
virtual void addListener(IIncidentListener *lis, const std::string &type="", long priority=0, bool rethrow=false, bool singleShot=false)=0
Add listener.
StatusCode decodeOutStreams()
decodeOutStreamNameList & outStreamNameListHandler
MsgStream & fatal() const
shortcut for the method msgStream(MSG::FATAL)
The IProperty is the basic interface for all components which have properties that can be set or get...
Definition: IProperty.h:20
Gaudi::Property< bool > m_printCFExp
SmartIF< ISvcLocator > & serviceLocator() const override
Retrieve pointer to service locator.
Definition: Service.cpp:292
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:244
SmartIF< IAppMgrUI > m_appMgrUI
Reference to the IAppMgrUI interface of the application manager.
bool m_abortEvent
Flag signalling that the event being processedhas to be aborted (skip all following top algs)...
StatusCode MinimalEventLoopMgr::nextEvent ( int  maxevt)
override

implementation of IEventProcessor::nextEvent

Definition at line 324 of file MinimalEventLoopMgr.cpp.

325 {
326  error() << "This method cannot be called on an object of type " << System::typeinfoName( typeid( *this ) ) << endmsg;
327  return StatusCode::FAILURE;
328 }
GAUDI_API const std::string typeinfoName(const std::type_info &)
Get platform independent information about the class type.
Definition: System.cpp:299
MsgStream & error() const
shortcut for the method msgStream(MSG::ERROR)
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:244
MinimalEventLoopMgr& MinimalEventLoopMgr::operator= ( const MinimalEventLoopMgr )
private

Fake assignment operator (never implemented).

void MinimalEventLoopMgr::outStreamHandler ( Gaudi::Details::PropertyBase p)

Output stream List handler.

Definition at line 539 of file MinimalEventLoopMgr.cpp.

540 {
541  if ( !( decodeOutStreams() ).isSuccess() ) {
542  throw GaudiException( "Failed to initialize output streams.", "MinimalEventLoopMgr::outStreamHandler",
544  }
545 }
Define general base for Gaudi exception.
StatusCode decodeOutStreams()
decodeOutStreamNameList & outStreamNameListHandler
StatusCode MinimalEventLoopMgr::reinitialize ( )
override

implementation of IService::reinitialize

Definition at line 222 of file MinimalEventLoopMgr.cpp.

223 {
225 
226  // Reinitialize all the TopAlgs.
227  for ( auto& ita : m_topAlgList ) {
228  sc = ita->sysReinitialize();
229  if ( !sc.isSuccess() ) {
230  error() << "Unable to reinitialize Algorithm: " << ita->name() << endmsg;
231  return sc;
232  }
233  }
234  for ( auto& ita : m_outStreamList ) {
235  sc = ita->sysReinitialize();
236  if ( !sc.isSuccess() ) {
237  error() << "Unable to reinitialize Output Stream: " << ita->name() << endmsg;
238  return sc;
239  }
240  }
241 
242  return sc;
243 }
bool isSuccess() const
Test for a status code of SUCCESS.
Definition: StatusCode.h:74
MsgStream & error() const
shortcut for the method msgStream(MSG::ERROR)
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:26
ListAlg m_outStreamList
List of output streams.
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:244
StatusCode MinimalEventLoopMgr::restart ( )
override

implementation of IService::restart

Definition at line 247 of file MinimalEventLoopMgr.cpp.

248 {
250 
251  // Restart all the TopAlgs.
252  for ( auto& ita : m_topAlgList ) {
253  sc = ita->sysRestart();
254  if ( !sc.isSuccess() ) {
255  error() << "Unable to restart Algorithm: " << ita->name() << endmsg;
256  return sc;
257  }
258  }
259  for ( auto& ita : m_outStreamList ) {
260  sc = ita->sysRestart();
261  if ( !sc.isSuccess() ) {
262  error() << "Unable to restart Output Stream: " << ita->name() << endmsg;
263  return sc;
264  }
265  }
266 
267  return sc;
268 }
bool isSuccess() const
Test for a status code of SUCCESS.
Definition: StatusCode.h:74
MsgStream & error() const
shortcut for the method msgStream(MSG::ERROR)
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:26
ListAlg m_outStreamList
List of output streams.
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:244
StatusCode MinimalEventLoopMgr::start ( )
override

implementation of IService::start

Definition at line 167 of file MinimalEventLoopMgr.cpp.

168 {
169 
170  StatusCode sc = Service::start();
171  if ( !sc.isSuccess() ) return sc;
172 
173  // Start all the new TopAlgs. In fact Algorithms are protected against getting
174  // started twice.
175  for ( auto& ita : m_topAlgList ) {
176  sc = ita->sysStart();
177  if ( !sc.isSuccess() ) {
178  error() << "Unable to start Algorithm: " << ita->name() << endmsg;
179  return sc;
180  }
181  }
182  for ( auto& ita : m_outStreamList ) {
183  sc = ita->sysStart();
184  if ( !sc.isSuccess() ) {
185  error() << "Unable to start Output Stream: " << ita->name() << endmsg;
186  return sc;
187  }
188  }
189  return StatusCode::SUCCESS;
190 }
StatusCode start() override
Definition: Service.cpp:137
bool isSuccess() const
Test for a status code of SUCCESS.
Definition: StatusCode.h:74
MsgStream & error() const
shortcut for the method msgStream(MSG::ERROR)
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:26
ListAlg m_outStreamList
List of output streams.
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:244
StatusCode MinimalEventLoopMgr::stop ( )
override

implementation of IService::stop

Definition at line 194 of file MinimalEventLoopMgr.cpp.

195 {
196 
197  StatusCode sc( StatusCode::SUCCESS, true );
198 
199  // Stop all the TopAlgs. In fact Algorithms are protected against getting
200  // stopped twice.
201  for ( auto& ita : m_topAlgList ) {
202  sc = ita->sysStop();
203  if ( !sc.isSuccess() ) {
204  error() << "Unable to stop Algorithm: " << ita->name() << endmsg;
205  return sc;
206  }
207  }
208  for ( auto& ita : m_outStreamList ) {
209  sc = ita->sysStop();
210  if ( !sc.isSuccess() ) {
211  error() << "Unable to stop Output Stream: " << ita->name() << endmsg;
212  return sc;
213  }
214  }
215 
216  return Service::stop();
217 }
MsgStream & error() const
shortcut for the method msgStream(MSG::ERROR)
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:26
StatusCode stop() override
Definition: Service.cpp:130
ListAlg m_outStreamList
List of output streams.
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:244
StatusCode MinimalEventLoopMgr::stopRun ( )
override

implementation of IEventProcessor::stopRun( )

Definition at line 475 of file MinimalEventLoopMgr.cpp.

476 {
477  // Set the application return code
478  auto appmgr = serviceLocator()->as<IProperty>();
480  error() << "Could not set return code of the application (" << Gaudi::ReturnCode::ScheduledStop << ")" << endmsg;
481  }
482  m_scheduledStop = true;
483  return StatusCode::SUCCESS;
484 }
bool m_scheduledStop
Scheduled stop of event processing.
SmartIF< IFace > as()
Definition: ISvcLocator.h:106
bool isFailure() const
Test for a status code of FAILURE.
Definition: StatusCode.h:84
constexpr int ScheduledStop
Definition: AppReturnCode.h:27
MsgStream & error() const
shortcut for the method msgStream(MSG::ERROR)
StatusCode setAppReturnCode(SmartIF< IProperty > &appmgr, int value, bool force=false)
Set the application return code.
Definition: AppReturnCode.h:51
The IProperty is the basic interface for all components which have properties that can be set or get...
Definition: IProperty.h:20
SmartIF< ISvcLocator > & serviceLocator() const override
Retrieve pointer to service locator.
Definition: Service.cpp:292
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:244
void MinimalEventLoopMgr::topAlgHandler ( Gaudi::Details::PropertyBase p)

Top algorithm List handler.

Definition at line 489 of file MinimalEventLoopMgr.cpp.

490 {
491  if ( !( decodeTopAlgs() ).isSuccess() ) {
492  throw GaudiException( "Failed to initialize Top Algorithms streams.", "MinimalEventLoopMgr::topAlgHandler",
494  }
495 }
Define general base for Gaudi exception.
StatusCode decodeTopAlgs()
decodeTopAlgNameList & topAlgNameListHandler

Member Data Documentation

bool MinimalEventLoopMgr::m_abortEvent = false
protected

Flag signalling that the event being processedhas to be aborted (skip all following top algs).

Definition at line 60 of file MinimalEventLoopMgr.h.

SmartIF<IIncidentListener> MinimalEventLoopMgr::m_abortEventListener
protected

Instance of the incident listener waiting for AbortEvent.

Definition at line 57 of file MinimalEventLoopMgr.h.

std::string MinimalEventLoopMgr::m_abortEventSource
protected

Source of the AbortEvent incident.

Definition at line 62 of file MinimalEventLoopMgr.h.

SmartIF<IAlgExecStateSvc> MinimalEventLoopMgr::m_aess
protected

List of top level algorithms.

Definition at line 48 of file MinimalEventLoopMgr.h.

SmartIF<IAppMgrUI> MinimalEventLoopMgr::m_appMgrUI
protected

Reference to the IAppMgrUI interface of the application manager.

Definition at line 44 of file MinimalEventLoopMgr.h.

SmartIF<IIncidentSvc> MinimalEventLoopMgr::m_incidentSvc
protected

Reference to the incident service.

Definition at line 46 of file MinimalEventLoopMgr.h.

size_t MinimalEventLoopMgr::m_nevt {0}
private

Definition at line 119 of file MinimalEventLoopMgr.h.

ListAlg MinimalEventLoopMgr::m_outStreamList
protected

List of output streams.

Definition at line 51 of file MinimalEventLoopMgr.h.

Gaudi::Property<std::vector<std::string> > MinimalEventLoopMgr::m_outStreamNames {this, "OutStream", {}, "list of output stream names"}
protected

Definition at line 35 of file MinimalEventLoopMgr.h.

Gaudi::Property<std::string> MinimalEventLoopMgr::m_outStreamType
protected
Initial value:
{this, "OutStreamType", "OutputStream",
"[[deprecated]] default type for OutputStream instances"}

Definition at line 36 of file MinimalEventLoopMgr.h.

Gaudi::Property<bool> MinimalEventLoopMgr::m_printCFExp
protected
Initial value:
{this, "PrintControlFlowExpression", false,
"Print the control flow expression representing the content of TopAlg"}

Definition at line 38 of file MinimalEventLoopMgr.h.

bool MinimalEventLoopMgr::m_scheduledStop = false
protected

Scheduled stop of event processing.

Definition at line 55 of file MinimalEventLoopMgr.h.

State MinimalEventLoopMgr::m_state = OFFLINE
protected

State of the object.

Definition at line 53 of file MinimalEventLoopMgr.h.

ListAlg MinimalEventLoopMgr::m_topAlgList
protected

Definition at line 49 of file MinimalEventLoopMgr.h.

Gaudi::Property<std::vector<std::string> > MinimalEventLoopMgr::m_topAlgNames {this, "TopAlg", {}, "list of top level algorithms names"}
protected

Definition at line 34 of file MinimalEventLoopMgr.h.


The documentation for this class was generated from the following files: