The Gaudi Framework  v30r3 (a5ef0a68)
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
using Factory = Gaudi::PluginService::Factory< IService *(const std::string &, ISvcLocator *)>
 
- 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...
 
- 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 declareTool (ToolHandle< T > &handle, std::string toolTypeAndName, bool createIf=true)
 Declare used 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
 
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, 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
 
- Public Member Functions inherited from CommonMessaging< implements< IService, IProperty, IStateful > >
MSG::Level msgLevel () const
 get the cached level (originally extracted from the embedded MsgStream) More...
 
bool msgLevel (MSG::Level lvl) const
 get the output level from the embedded MsgStream More...
 
MSG::Level outputLevel () const
 Backward compatibility function for getting the output level. More...
 
- Public Member Functions inherited from CommonMessagingBase
virtual ~CommonMessagingBase ()=default
 Virtual destructor. More...
 
const 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...
 

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

SmartIF< IHiveWhiteBoardm_WB
 
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 > >
MSG::Level setUpMessaging () const
 Set up local caches. More...
 
MSG::Level resetMessaging ()
 Reinitialize internal states. More...
 
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 28 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 54 of file MinimalEventLoopMgr.cpp.

55  : base_class( nam, svcLoc ), m_appMgrUI( svcLoc )
56 {
57  m_topAlgNames.declareUpdateHandler( &MinimalEventLoopMgr::topAlgHandler, this );
58  m_outStreamNames.declareUpdateHandler( &MinimalEventLoopMgr::outStreamHandler, this );
59 }
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:15
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 526 of file MinimalEventLoopMgr.cpp.

527 {
529  if ( CONFIGURED == m_state || INITIALIZED == m_state ) {
530  auto algMan = serviceLocator()->as<IAlgManager>();
531  if ( algMan ) {
532  // Reset the existing Top Algorithm List
534  for ( const auto& it : m_outStreamNames.value() ) {
536  const bool CREATE = false;
537  SmartIF<IAlgorithm> os = algMan->algorithm( item, CREATE );
538  if ( os ) {
539  DEBMSG << "Output Stream " << item.name() << " already exists" << endmsg;
540  } else {
541  DEBMSG << "Creating Output Stream " << it << endmsg;
542  IAlgorithm* ios = nullptr;
543  StatusCode sc1 = algMan->createAlgorithm( item.type(), item.name(), ios );
544  if ( !sc1.isSuccess() ) {
545  error() << "Unable to create Output Stream " << it << endmsg;
546  return sc1;
547  }
548  os = ios; // manage reference counting
549  }
551  }
552  return sc;
553  }
554  sc = StatusCode::FAILURE;
555  }
556  return sc;
557 }
constexpr static const auto FAILURE
Definition: StatusCode.h:88
bool isSuccess() const
Definition: StatusCode.h:287
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:109
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:51
T clear(T...args)
The IAlgorithm is the interface implemented by the Algorithm base class.
Definition: IAlgorithm.h:28
constexpr static const auto SUCCESS
Definition: StatusCode.h:87
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:291
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:209
StatusCode MinimalEventLoopMgr::decodeTopAlgs ( )

decodeTopAlgNameList & topAlgNameListHandler

Definition at line 476 of file MinimalEventLoopMgr.cpp.

477 {
479  if ( CONFIGURED == m_state || INITIALIZED == m_state ) {
480  auto algMan = serviceLocator()->as<IAlgManager>();
481  if ( algMan ) {
482  // Reset the existing Top Algorithm List
484  m_topAlgList.reserve( m_topAlgNames.value().size() );
485  for ( const auto& it : m_topAlgNames.value() ) {
487  // Got the type and name. Now creating the algorithm, avoiding duplicate creation.
488  std::string item_name = item.name();
489  const bool CREATE = false;
490  SmartIF<IAlgorithm> alg = algMan->algorithm( item_name, CREATE );
491  if ( alg ) {
492  DEBMSG << "Top Algorithm " << item_name << " already exists" << endmsg;
493  } else {
494  DEBMSG << "Creating Top Algorithm " << item.type() << " with name " << item_name << endmsg;
495  IAlgorithm* ialg = nullptr;
496  StatusCode sc1 = algMan->createAlgorithm( item.type(), item_name, ialg );
497  if ( !sc1.isSuccess() ) {
498  error() << "Unable to create Top Algorithm " << item.type() << " with name " << item_name << endmsg;
499  return sc1;
500  }
501  alg = ialg; // manage reference counting
502  }
503  m_topAlgList.push_back( alg );
504  }
505  return sc;
506  }
507  sc = StatusCode::FAILURE;
508  }
509  return sc;
510 }
constexpr static const auto FAILURE
Definition: StatusCode.h:88
bool isSuccess() const
Definition: StatusCode.h:287
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:109
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:51
T clear(T...args)
The IAlgorithm is the interface implemented by the Algorithm base class.
Definition: IAlgorithm.h:28
constexpr static const auto SUCCESS
Definition: StatusCode.h:87
#define DEBMSG
SmartIF< ISvcLocator > & serviceLocator() const override
Retrieve pointer to service locator.
Definition: Service.cpp:291
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:209
T reserve(T...args)
StatusCode MinimalEventLoopMgr::executeEvent ( void *  par)
override

implementation of IEventProcessor::executeEvent(void* par)

Definition at line 370 of file MinimalEventLoopMgr.cpp.

371 {
372  bool eventfailed = false;
373 
374  // reset state of ALL "known" algorithms
375  // (before we were reseting only the topalgs)
376  const EventContext& context = Gaudi::Hive::currentContext();
377  m_aess->reset( context );
378 
379  // Set event number in the context
381 
382  // select the appropriate store
383  if ( m_WB.isValid() ) m_WB->selectStore( context.slot() ).ignore();
384 
385  // Get the IProperty interface of the ApplicationMgr to pass it to RetCodeGuard
386  const auto appmgr = serviceLocator()->as<IProperty>();
387  // Call the execute() method of all top algorithms
388  for ( auto& ita : m_topAlgList ) {
390  try {
391  if ( UNLIKELY( m_abortEvent ) ) {
392  DEBMSG << "AbortEvent incident fired by " << m_abortEventSource << endmsg;
393  m_abortEvent = false;
394  sc.ignore();
395  break;
396  }
398  sc = ita->sysExecute( context );
399  rcg.ignore(); // disarm the guard
400  } catch ( const GaudiException& Exception ) {
401  fatal() << ".executeEvent(): Exception with tag=" << Exception.tag() << " thrown by " << ita->name() << endmsg;
402  error() << Exception << endmsg;
403  } catch ( const std::exception& Exception ) {
404  fatal() << ".executeEvent(): Standard std::exception thrown by " << ita->name() << endmsg;
405  error() << Exception.what() << endmsg;
406  } catch ( ... ) {
407  fatal() << ".executeEvent(): UNKNOWN Exception thrown by " << ita->name() << endmsg;
408  }
409 
410  if ( UNLIKELY( !sc.isSuccess() ) ) {
411  warning() << "Execution of algorithm " << ita->name() << " failed" << endmsg;
412  eventfailed = true;
413  }
414  }
415 
416  m_aess->updateEventStatus( eventfailed, context );
417 
418  // ensure that the abortEvent flag is cleared before the next event
419  if ( UNLIKELY( m_abortEvent ) ) {
420  DEBMSG << "AbortEvent incident fired by " << m_abortEventSource << endmsg;
421  m_abortEvent = false;
422  }
423 
424  // Call the execute() method of all output streams
425  for ( auto& ito : m_outStreamList ) {
426  AlgExecState& state = m_aess->algExecState( ito, context );
427  state.setFilterPassed( true );
428  StatusCode sc = ito->sysExecute( context );
429  if ( UNLIKELY( !sc.isSuccess() ) ) {
430  warning() << "Execution of output stream " << ito->name() << " failed" << endmsg;
431  eventfailed = true;
432  }
433  }
434 
435  m_nevt++;
436 
437  // Check if there was an error processing current event
438  if ( UNLIKELY( eventfailed ) ) {
439  error() << "Error processing event loop." << endmsg;
440  std::ostringstream ost;
441  m_aess->dump( ost, context );
442  debug() << "Dumping AlgExecStateSvc status:\n" << ost.str() << endmsg;
443  return StatusCode( StatusCode::FAILURE, true );
444  }
445 
446  return StatusCode( StatusCode::SUCCESS, true );
447 }
#define UNLIKELY(x)
Definition: Kernel.h:122
constexpr static const auto FAILURE
Definition: StatusCode.h:88
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
ContextID_t slot() const
Definition: EventContext.h:40
SmartIF< IAlgExecStateSvc > m_aess
List of top level algorithms.
virtual void dump(std::ostringstream &ost, const EventContext &ctx) const =0
bool isSuccess() const
Definition: StatusCode.h:287
SmartIF< IFace > as()
Definition: ISvcLocator.h:109
This class represents an entry point to all the event specific data.
Definition: EventContext.h:24
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.
virtual StatusCode selectStore(size_t partitionIndex)=0
Activate an given &#39;slot&#39; for all subsequent calls within the same thread id.
MsgStream & warning() const
shortcut for the method msgStream(MSG::WARNING)
SmartIF< IHiveWhiteBoard > m_WB
T what(T...args)
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:51
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
STL class.
constexpr static const auto SUCCESS
Definition: StatusCode.h:87
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)
bool isValid() const
Allow for check if smart pointer is valid.
Definition: SmartIF.h:68
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:291
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:209
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 336 of file MinimalEventLoopMgr.cpp.

337 {
338 
339  // Call now the nextEvent(...)
340  return nextEvent( maxevt );
341 }
StatusCode nextEvent(int maxevt) override
implementation of IEventProcessor::nextEvent
int maxevt
Definition: Bootstrap.cpp:276
StatusCode MinimalEventLoopMgr::finalize ( )
override

implementation of IService::finalize

Definition at line 276 of file MinimalEventLoopMgr.cpp.

277 {
280  // Call the finalize() method of all top algorithms
281  for ( auto& ita : m_topAlgList ) {
282  sc = ita->sysFinalize();
283  if ( !sc.isSuccess() ) {
284  scRet = StatusCode::FAILURE;
285  warning() << "Finalization of algorithm " << ita->name() << " failed" << endmsg;
286  }
287  }
288  // Call the finalize() method of all Output streams
289  for ( auto& ita : m_outStreamList ) {
290  sc = ita->sysFinalize();
291  if ( !sc.isSuccess() ) {
292  scRet = StatusCode::FAILURE;
293  warning() << "Finalization of algorithm " << ita->name() << " failed" << endmsg;
294  }
295  }
296  // release all top algorithms
297  auto algMan = serviceLocator()->as<IAlgManager>();
298  for ( auto& ita : m_topAlgList ) {
299  if ( algMan->removeAlgorithm( ita ).isFailure() ) {
300  scRet = StatusCode::FAILURE;
301  warning() << "Problems removing Algorithm " << ita->name() << endmsg;
302  }
303  }
304  m_topAlgList.clear();
305  m_outStreamList.clear();
306  if ( sc.isSuccess() ) m_state = FINALIZED;
307 
308  m_incidentSvc->removeListener( m_abortEventListener, IncidentType::AbortEvent );
310 
312  m_appMgrUI.reset();
313 
314  sc = Service::finalize();
315 
316  if ( sc.isFailure() ) {
317  scRet = StatusCode::FAILURE;
318  error() << "Problems finalizing Service base class" << endmsg;
319  }
320 
321  return scRet;
322 }
constexpr static const auto FAILURE
Definition: StatusCode.h:88
StatusCode finalize() override
Definition: Service.cpp:173
bool isSuccess() const
Definition: StatusCode.h:287
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:109
bool isFailure() const
Definition: StatusCode.h:139
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:51
void clear(STATE_TYPE _i=std::ios_base::failbit)
Definition: MsgStream.h:187
SmartIF< IIncidentSvc > m_incidentSvc
Reference to the incident service.
constexpr static const auto SUCCESS
Definition: StatusCode.h:87
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:92
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:291
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:209
SmartIF< IAppMgrUI > m_appMgrUI
Reference to the IAppMgrUI interface of the application manager.
StatusCode MinimalEventLoopMgr::initialize ( )
override

implementation of IService::initialize

Definition at line 64 of file MinimalEventLoopMgr.cpp.

65 {
66 
67  if ( !m_appMgrUI ) return StatusCode::FAILURE;
68 
70  if ( !sc.isSuccess() ) {
71  error() << "Failed to initialize Service Base class." << endmsg;
72  return StatusCode::FAILURE;
73  }
74 
75  auto prpMgr = serviceLocator()->as<IProperty>();
76  if ( !prpMgr ) {
77  error() << "Error retrieving AppMgr interface IProperty." << endmsg;
78  return StatusCode::FAILURE;
79  }
80  if ( m_topAlgNames.value().empty() ) {
81  setProperty( prpMgr->getProperty( "TopAlg" ) ).ignore();
82  }
83  if ( m_outStreamNames.value().empty() ) {
84  setProperty( prpMgr->getProperty( "OutStream" ) ).ignore();
85  }
86 
87  // Get the references to the services that are needed by the ApplicationMgr itself
88  m_incidentSvc = serviceLocator()->service( "IncidentSvc" );
89  if ( !m_incidentSvc ) {
90  fatal() << "Error retrieving IncidentSvc." << endmsg;
91  return StatusCode::FAILURE;
92  }
93 
94  m_abortEventListener = new AbortEventListener( m_abortEvent, m_abortEventSource );
95  m_incidentSvc->addListener( m_abortEventListener, IncidentType::AbortEvent );
96 
97  // The state is changed at this moment to allow decodeXXXX() to do something
99 
100  // Get WhiteBoard interface if implemented by EventDataSvc
101  m_WB = service( "EventDataSvc" );
102 
103  // setup the default EventContext with slot 0
105 
106  //--------------------------------------------------------------------------------------------
107  // Create output streams. Do not initialize them yet.
108  // The state is updated temporarily in order to enable the handler, which
109  // is also triggered by a change to the "OutputStream" Property.
110  //--------------------------------------------------------------------------------------------
111  sc = decodeOutStreams();
112  if ( !sc.isSuccess() ) {
113  error() << "Failed to initialize Output streams." << endmsg;
115  return sc;
116  }
117  //--------------------------------------------------------------------------------------------
118  // Create all needed Top Algorithms. Do not initialize them yet.
119  // The state is updated temporarily in order to enable the handler, which
120  // is also triggered by a change to the "TopAlg" Property.
121  //--------------------------------------------------------------------------------------------
122  sc = decodeTopAlgs();
123  if ( !sc.isSuccess() ) {
124  error() << "Failed to initialize Top Algorithms streams." << endmsg;
126  return sc;
127  }
128 
129  // Initialize all the new TopAlgs. In fact Algorithms are protected against
130  // getting initialized twice.
131  for ( auto& ita : m_topAlgList ) {
132  sc = ita->sysInitialize();
133  if ( !sc.isSuccess() ) {
134  error() << "Unable to initialize Algorithm: " << ita->name() << endmsg;
135  return sc;
136  }
137  }
138  for ( auto& ita : m_outStreamList ) {
139  sc = ita->sysInitialize();
140  if ( !sc.isSuccess() ) {
141  error() << "Unable to initialize Output Stream: " << ita->name() << endmsg;
142  return sc;
143  }
144  }
145 
146  // get hold of the Algorithm Execution State mgr
147  m_aess = serviceLocator()->service( "AlgExecStateSvc" );
148  if ( !m_aess ) {
149  fatal() << "Error retrieving AlgExecStateSvc." << endmsg;
150  return StatusCode::FAILURE;
151  }
152 
153  if ( m_printCFExp && !m_topAlgList.empty() ) {
154  info() << "Control Flow Expression:" << endmsg;
155  std::stringstream expr;
156  auto& first = m_topAlgList.front();
157  for ( auto& ialg : m_topAlgList ) {
158  if ( ialg != first ) expr << " >> ";
159  ialg->toControlFlowExpression( expr );
160  }
161  info() << expr.str() << endmsg;
162  }
163  return StatusCode::SUCCESS;
164 }
std::size_t ContextIdType
Internal type used for the ContextId.
constexpr static const auto FAILURE
Definition: StatusCode.h:88
StatusCode initialize() override
Definition: Service.cpp:63
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
Definition: StatusCode.h:287
SmartIF< IFace > as()
Definition: ISvcLocator.h:109
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:79
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
SmartIF< IHiveWhiteBoard > m_WB
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:51
T str(T...args)
SmartIF< IIncidentSvc > m_incidentSvc
Reference to the incident service.
constexpr static const auto SUCCESS
Definition: StatusCode.h:87
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 service(const std::string &name, const T *&psvc, bool createIf=true) const
Access a service by name, creating it if it doesn&#39;t already exist.
Definition: Service.h:84
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:291
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:209
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 327 of file MinimalEventLoopMgr.cpp.

328 {
329  error() << "This method cannot be called on an object of type " << System::typeinfoName( typeid( *this ) ) << endmsg;
330  return StatusCode::FAILURE;
331 }
constexpr static const auto FAILURE
Definition: StatusCode.h:88
GAUDI_API const std::string typeinfoName(const std::type_info &)
Get platform independent information about the class type.
Definition: System.cpp:332
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:209
MinimalEventLoopMgr& MinimalEventLoopMgr::operator= ( const MinimalEventLoopMgr )
private

Fake assignment operator (never implemented).

Event data service (whiteboard)

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

Output stream List handler.

Definition at line 515 of file MinimalEventLoopMgr.cpp.

516 {
517  if ( !( decodeOutStreams() ).isSuccess() ) {
518  throw GaudiException( "Failed to initialize output streams.", "MinimalEventLoopMgr::outStreamHandler",
520  }
521 }
constexpr static const auto FAILURE
Definition: StatusCode.h:88
Define general base for Gaudi exception.
StatusCode decodeOutStreams()
decodeOutStreamNameList & outStreamNameListHandler
StatusCode MinimalEventLoopMgr::reinitialize ( )
override

implementation of IService::reinitialize

Definition at line 223 of file MinimalEventLoopMgr.cpp.

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

implementation of IService::restart

Definition at line 248 of file MinimalEventLoopMgr.cpp.

249 {
251 
252  // Restart all the TopAlgs.
253  for ( auto& ita : m_topAlgList ) {
254  m_aess->resetErrorCount( ita );
255  sc = ita->sysRestart();
256  if ( !sc.isSuccess() ) {
257  error() << "Unable to restart Algorithm: " << ita->name() << endmsg;
258  return sc;
259  }
260  }
261  for ( auto& ita : m_outStreamList ) {
262  m_aess->resetErrorCount( ita );
263  sc = ita->sysRestart();
264  if ( !sc.isSuccess() ) {
265  error() << "Unable to restart Output Stream: " << ita->name() << endmsg;
266  return sc;
267  }
268  }
269 
270  return sc;
271 }
SmartIF< IAlgExecStateSvc > m_aess
List of top level algorithms.
bool isSuccess() const
Definition: StatusCode.h:287
MsgStream & error() const
shortcut for the method msgStream(MSG::ERROR)
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:51
constexpr static const auto SUCCESS
Definition: StatusCode.h:87
ListAlg m_outStreamList
List of output streams.
virtual void resetErrorCount(const IAlgorithm *iAlg)=0
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:209
StatusCode MinimalEventLoopMgr::start ( )
override

implementation of IService::start

Definition at line 168 of file MinimalEventLoopMgr.cpp.

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

implementation of IService::stop

Definition at line 195 of file MinimalEventLoopMgr.cpp.

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

implementation of IEventProcessor::stopRun( )

Definition at line 451 of file MinimalEventLoopMgr.cpp.

452 {
453  // Set the application return code
454  auto appmgr = serviceLocator()->as<IProperty>();
456  error() << "Could not set return code of the application (" << Gaudi::ReturnCode::ScheduledStop << ")" << endmsg;
457  }
458  m_scheduledStop = true;
459  return StatusCode::SUCCESS;
460 }
bool m_scheduledStop
Scheduled stop of event processing.
SmartIF< IFace > as()
Definition: ISvcLocator.h:109
bool isFailure() const
Definition: StatusCode.h:139
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
constexpr static const auto SUCCESS
Definition: StatusCode.h:87
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:291
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:209
void MinimalEventLoopMgr::topAlgHandler ( Gaudi::Details::PropertyBase p)

Top algorithm List handler.

Definition at line 465 of file MinimalEventLoopMgr.cpp.

466 {
467  if ( !( decodeTopAlgs() ).isSuccess() ) {
468  throw GaudiException( "Failed to initialize Top Algorithms streams.", "MinimalEventLoopMgr::topAlgHandler",
470  }
471 }
constexpr static const auto FAILURE
Definition: StatusCode.h:88
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 61 of file MinimalEventLoopMgr.h.

SmartIF<IIncidentListener> MinimalEventLoopMgr::m_abortEventListener
protected

Instance of the incident listener waiting for AbortEvent.

Definition at line 58 of file MinimalEventLoopMgr.h.

std::string MinimalEventLoopMgr::m_abortEventSource
protected

Source of the AbortEvent incident.

Definition at line 63 of file MinimalEventLoopMgr.h.

SmartIF<IAlgExecStateSvc> MinimalEventLoopMgr::m_aess
protected

List of top level algorithms.

Definition at line 49 of file MinimalEventLoopMgr.h.

SmartIF<IAppMgrUI> MinimalEventLoopMgr::m_appMgrUI
protected

Reference to the IAppMgrUI interface of the application manager.

Definition at line 45 of file MinimalEventLoopMgr.h.

SmartIF<IIncidentSvc> MinimalEventLoopMgr::m_incidentSvc
protected

Reference to the incident service.

Definition at line 47 of file MinimalEventLoopMgr.h.

size_t MinimalEventLoopMgr::m_nevt {0}
private

Definition at line 123 of file MinimalEventLoopMgr.h.

ListAlg MinimalEventLoopMgr::m_outStreamList
protected

List of output streams.

Definition at line 52 of file MinimalEventLoopMgr.h.

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

Definition at line 36 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 37 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 39 of file MinimalEventLoopMgr.h.

bool MinimalEventLoopMgr::m_scheduledStop = false
protected

Scheduled stop of event processing.

Definition at line 56 of file MinimalEventLoopMgr.h.

State MinimalEventLoopMgr::m_state = OFFLINE
protected

State of the object.

Definition at line 54 of file MinimalEventLoopMgr.h.

ListAlg MinimalEventLoopMgr::m_topAlgList
protected

Definition at line 50 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 35 of file MinimalEventLoopMgr.h.

SmartIF<IHiveWhiteBoard> MinimalEventLoopMgr::m_WB
private

Definition at line 120 of file MinimalEventLoopMgr.h.


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