The Gaudi Framework  v30r2 (9eca68f7)
HLTEventLoopMgr Class Reference

#include <GaudiHive/HLTEventLoopMgr.h>

Inheritance diagram for HLTEventLoopMgr:
Collaboration diagram for HLTEventLoopMgr:

Classes

struct  HLTExecutionTask
 

Public Member Functions

StatusCode initialize () override
 implementation of IService::initialize More...
 
StatusCode reinitialize () override
 implementation of IService::reinitialize More...
 
StatusCode finalize () override
 implementation of IService::finalize 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...
 
- 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...
 

Private Member Functions

StatusCode declareEventRootAddress ()
 Declare the root address of the event. More...
 
StatusCode eventFailed (EventContext *eventContext)
 Method to check if an event failed and take appropriate actions. More...
 
void promoteToExecuted (std::unique_ptr< EventContext > eventContext)
 Algorithm promotion. More...
 
unsigned int algname2index (const std::string &algoname)
 Convert a name to an integer. More...
 
const std::stringindex2algname (unsigned int index)
 Convert an integer to a name. More...
 

Private Attributes

Gaudi::Property< std::stringm_histPersName {this, "HistogramPersistency", "", ""}
 
Gaudi::Property< std::stringm_evtsel {this, "EvtSel", "", ""}
 
Gaudi::Property< int > m_threadPoolSize {this, "ThreadPoolSize", -1, "Size of the threadpool initialised by TBB"}
 
Gaudi::Property< std::stringm_whiteboardSvcName {this, "WhiteboardSvc", "EventDataSvc", "The whiteboard name"}
 
IDataManagerSvcm_evtDataMgrSvc
 Reference to the Event Data Service's IDataManagerSvc interface. More...
 
IEvtSelectorm_evtSelector
 Reference to the Event Selector. More...
 
IDataManagerSvcm_histoDataMgrSvc
 Reference to the Histogram Data Service. More...
 
IConversionSvcm_histoPersSvc
 Reference to the Histogram Persistency Service. More...
 
IHiveWhiteBoardm_whiteboard
 Reference to the Whiteboard. More...
 
IAlgExecStateSvcm_algExecStateSvc
 Reference to the AlgExecStateSvc. More...
 
IPrecedenceSvcm_precSvc
 A shortcut to the Precedence Service. More...
 
std::atomic< unsigned int > m_finishedEvt {0}
 atomic count of the number of finished events More...
 
std::condition_variable m_createEventCond
 condition variable to wake up main thread when we need to create a new event More...
 
std::mutex m_createEventMutex
 mutex assoiciated with m_createEventCond condition variable More...
 
IEvtSelector::Contextm_evtSelContext {nullptr}
 event selector context More...
 
std::vector< std::stringm_algname_vect
 Vector to bookkeep the information necessary to the index2name conversion. More...
 
std::unordered_map< std::string, unsigned int > m_algname_index_map
 Map to bookkeep the information necessary to the name2index conversion. More...
 
std::vector< EventSlotm_eventSlots
 Vector of events slots. More...
 
std::vector< IAlgorithm * > m_algos
 Vector of algorithms to run for every event. More...
 

Additional Inherited Members

- 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...
 
- 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...
 
- 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...
 

Detailed Description

Definition at line 25 of file HLTEventLoopMgr.h.

Member Function Documentation

unsigned int HLTEventLoopMgr::algname2index ( const std::string algoname)
inlineprivate

Convert a name to an integer.

Definition at line 82 of file HLTEventLoopMgr.h.

82 { return m_algname_index_map[algoname]; }
std::unordered_map< std::string, unsigned int > m_algname_index_map
Map to bookkeep the information necessary to the name2index conversion.
StatusCode HLTEventLoopMgr::declareEventRootAddress ( )
private

Declare the root address of the event.

Definition at line 439 of file HLTEventLoopMgr.cpp.

440 {
441  IOpaqueAddress* pAddr = nullptr;
443  if ( sc.isSuccess() ) {
444  // Create root address and assign address to data service
446  if ( !sc.isSuccess() ) {
448  if ( sc.isSuccess() ) {
450  if ( !sc.isSuccess() ) warning() << "Error creating IOpaqueAddress." << endmsg;
451  }
452  }
453  }
454  if ( !sc.isSuccess() ) {
455  info() << "No more events in event selection " << endmsg;
456  return StatusCode::FAILURE;
457  }
458  sc = m_evtDataMgrSvc->setRoot( "/Event", pAddr );
459  if ( !sc.isSuccess() ) {
460  warning() << "Error declaring event root address." << endmsg;
461  }
462  return StatusCode::SUCCESS;
463 }
constexpr static const auto FAILURE
Definition: StatusCode.h:88
MsgStream & info() const
shortcut for the method msgStream(MSG::INFO)
bool isSuccess() const
Definition: StatusCode.h:287
virtual StatusCode setRoot(std::string root_name, DataObject *pObject)=0
Initialize data store for new event by giving new event path.
IDataManagerSvc * m_evtDataMgrSvc
Reference to the Event Data Service&#39;s IDataManagerSvc interface.
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
IEvtSelector::Context * m_evtSelContext
event selector context
constexpr static const auto SUCCESS
Definition: StatusCode.h:87
IEvtSelector * m_evtSelector
Reference to the Event Selector.
virtual StatusCode next(Context &c) const =0
Fetch the next event or the first event if it will be use soon after the creation of the context...
virtual StatusCode createAddress(const Context &c, IOpaqueAddress *&iop) const =0
Create an IOpaqueAddress object from the event fetched.
Opaque address interface definition.
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:209
StatusCode HLTEventLoopMgr::eventFailed ( EventContext eventContext)
private

Method to check if an event failed and take appropriate actions.

It can be possible that an event fails.

In this case this method is called. It dumps the state of the scheduler, drains the actions (without executing them) and events in the queues and returns a failure.

Definition at line 470 of file HLTEventLoopMgr.cpp.

471 {
472  fatal() << "*** Event " << eventContext->evt() << " on slot " << eventContext->slot() << " failed! ***" << endmsg;
473  std::ostringstream ost;
474  m_algExecStateSvc->dump( ost, *eventContext );
475  info() << "Dumping Alg Exec State for slot " << eventContext->slot() << ":\n" << ost.str() << endmsg;
476  return StatusCode::FAILURE;
477 }
constexpr static const auto FAILURE
Definition: StatusCode.h:88
ContextID_t slot() const
Definition: EventContext.h:40
MsgStream & info() const
shortcut for the method msgStream(MSG::INFO)
virtual void dump(std::ostringstream &ost, const EventContext &ctx) const =0
ContextEvt_t evt() const
Definition: EventContext.h:39
MsgStream & fatal() const
shortcut for the method msgStream(MSG::FATAL)
IAlgExecStateSvc * m_algExecStateSvc
Reference to the AlgExecStateSvc.
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:209
StatusCode HLTEventLoopMgr::executeEvent ( void *  par)
override

implementation of IEventProcessor::executeEvent(void* par)

Definition at line 312 of file HLTEventLoopMgr.cpp.

313 {
314  // Leave the interface intact and swallow this C trick.
315  int& createdEvts = *( (int*)createdEvts_IntPtr );
316 
317  std::unique_ptr<EventContext> evtContext = std::make_unique<EventContext>();
318  evtContext->set( createdEvts, m_whiteboard->allocateStore( createdEvts ) );
319  m_algExecStateSvc->reset( *evtContext.get() );
320 
321  StatusCode sc = m_whiteboard->selectStore( evtContext->slot() );
322  if ( sc.isFailure() ) {
323  fatal() << "Slot " << evtContext->slot() << " could not be selected for the WhiteBoard\n"
324  << "Impossible to create event context" << endmsg;
325  return StatusCode::FAILURE;
326  }
327 
328  StatusCode declEvtRootSc = declareEventRootAddress();
329  if ( declEvtRootSc.isFailure() ) { // We ran out of events!
330  createdEvts = -1; // Set created event to a negative value: we finished!
331  return StatusCode::SUCCESS;
332  }
333 
334  // Now add event to the scheduler
335  verbose() << "Adding event " << evtContext->evt() << ", slot " << evtContext->slot() << " to the scheduler" << endmsg;
336 
337  // Event processing slot forced to be the same as the wb slot
338  const unsigned int thisSlotNum = evtContext->slot();
339  m_eventSlots[thisSlotNum].reset( evtContext.get() );
340  // closure to be executed at the end of event
341  auto promote2ExecutedClosure = [this]( std::unique_ptr<EventContext> evtContext ) {
342  this->promoteToExecuted( std::move( evtContext ) );
343  };
344  // tbb task
345  tbb::task* task = new ( tbb::task::allocate_root() ) HLTExecutionTask(
346  m_algos, std::move( evtContext ), serviceLocator(), m_algExecStateSvc, promote2ExecutedClosure );
347  tbb::task::enqueue( *task );
348 
349  if ( msgLevel( MSG::DEBUG ) )
350  debug() << "All algorithms were submitted on event " << evtContext->evt() << " in slot " << thisSlotNum << endmsg;
351 
352  createdEvts++;
353  return StatusCode::SUCCESS;
354 }
std::vector< IAlgorithm * > m_algos
Vector of algorithms to run for every event.
constexpr static const auto FAILURE
Definition: StatusCode.h:88
void set(const ContextEvt_t &e=0, const ContextID_t &s=INVALID_CONTEXT_ID)
Definition: EventContext.h:44
ContextID_t slot() const
Definition: EventContext.h:40
MsgStream & verbose() const
shortcut for the method msgStream(MSG::VERBOSE)
bool isFailure() const
Definition: StatusCode.h:139
ContextEvt_t evt() const
Definition: EventContext.h:39
virtual StatusCode selectStore(size_t partitionIndex)=0
Activate an given &#39;slot&#39; for all subsequent calls within the same thread id.
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:51
std::vector< EventSlot > m_eventSlots
Vector of events slots.
IHiveWhiteBoard * m_whiteboard
Reference to the Whiteboard.
T move(T...args)
constexpr static const auto SUCCESS
Definition: StatusCode.h:87
T get(T...args)
virtual void reset(const EventContext &ctx)=0
MsgStream & debug() const
shortcut for the method msgStream(MSG::DEBUG)
virtual size_t allocateStore(int evtnumber)=0
Allocate a store partition for new event.
void promoteToExecuted(std::unique_ptr< EventContext > eventContext)
Algorithm promotion.
StatusCode declareEventRootAddress()
Declare the root address of the event.
MsgStream & fatal() const
shortcut for the method msgStream(MSG::FATAL)
IAlgExecStateSvc * m_algExecStateSvc
Reference to the AlgExecStateSvc.
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
MSG::Level msgLevel() const
get the cached level (originally extracted from the embedded MsgStream)
StatusCode HLTEventLoopMgr::executeRun ( int  maxevt)
inlineoverride

implementation of IEventProcessor::executeRun()

Definition at line 69 of file HLTEventLoopMgr.h.

69 { return nextEvent( maxevt ); }
StatusCode nextEvent(int maxevt) override
implementation of IEventProcessor::nextEvent
int maxevt
Definition: Bootstrap.cpp:276
StatusCode HLTEventLoopMgr::finalize ( )
override

implementation of IService::finalize

Definition at line 277 of file HLTEventLoopMgr.cpp.

278 {
279  StatusCode sc;
280  // Save Histograms Now
281  if ( m_histoPersSvc ) {
282  HistogramAgent agent;
283  sc = m_histoDataMgrSvc->traverseTree( &agent );
284  if ( sc.isSuccess() ) {
285  const IDataSelector& objects = agent.selectedObjects();
286  // skip /stat entry!
287  sc = std::accumulate( begin( objects ), end( objects ), sc, [&]( StatusCode s, const auto& i ) {
288  IOpaqueAddress* pAddr = nullptr;
289  StatusCode iret = m_histoPersSvc->createRep( i, pAddr );
290  if ( iret.isSuccess() ) i->registry()->setAddress( pAddr );
291  return s.isFailure() ? s : iret;
292  } );
293  sc = std::accumulate( begin( objects ), end( objects ), sc, [&]( StatusCode s, const auto& i ) {
294  IRegistry* reg = i->registry();
295  StatusCode iret = m_histoPersSvc->fillRepRefs( reg->address(), i );
296  return s.isFailure() ? s : iret;
297  } );
298  if ( sc.isSuccess() ) {
299  info() << "Histograms converted successfully according to request." << endmsg;
300  } else {
301  error() << "Error while saving Histograms." << endmsg;
302  }
303  } else {
304  error() << "Error while traversing Histogram data store" << endmsg;
305  }
306  }
307 
309  return sc.isFailure() ? sc2.ignore(), sc : sc2;
310 }
virtual StatusCode traverseTree(IDataStoreAgent *pAgent)=0
Analyse by traversing all data objects in the data store.
IConversionSvc * m_histoPersSvc
Reference to the Histogram Persistency Service.
StatusCode finalize() override
Definition: Service.cpp:173
MsgStream & info() const
shortcut for the method msgStream(MSG::INFO)
bool isSuccess() const
Definition: StatusCode.h:287
HistogramAgent base in charge of collecting all the refereces to DataObjects in a transient store tha...
virtual StatusCode createRep(DataObject *pObject, IOpaqueAddress *&refpAddress)=0
Convert the transient object to the requested representation.
bool isFailure() const
Definition: StatusCode.h:139
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
The IRegistry represents the entry door to the environment any data object residing in a transient da...
Definition: IRegistry.h:22
IDataSelector * selectedObjects()
Return the set of selected DataObjects.
IDataManagerSvc * m_histoDataMgrSvc
Reference to the Histogram Data Service.
const StatusCode & ignore() const
Ignore/check StatusCode.
Definition: StatusCode.h:165
string s
Definition: gaudirun.py:253
AttribStringParser::Iterator begin(const AttribStringParser &parser)
T accumulate(T...args)
Opaque address interface definition.
virtual IOpaqueAddress * address() const =0
Retrieve opaque storage address.
virtual StatusCode fillRepRefs(IOpaqueAddress *pAddress, DataObject *pObject)=0
Resolve the references of the converted object.
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:209
const std::string& HLTEventLoopMgr::index2algname ( unsigned int  index)
inlineprivate

Convert an integer to a name.

Definition at line 84 of file HLTEventLoopMgr.h.

84 { return m_algname_vect[index]; }
std::vector< std::string > m_algname_vect
Vector to bookkeep the information necessary to the index2name conversion.
StatusCode HLTEventLoopMgr::initialize ( )
override

implementation of IService::initialize

Definition at line 58 of file HLTEventLoopMgr.cpp.

59 {
61  if ( !sc.isSuccess() ) {
62  error() << "Failed to initialize Service Base class." << endmsg;
63  return StatusCode::FAILURE;
64  }
65  // Setup access to event data services
66  m_evtDataMgrSvc = serviceLocator()->service<IDataManagerSvc>( "EventDataSvc" );
67  if ( !m_evtDataMgrSvc ) {
68  fatal() << "Error retrieving EventDataSvc interface IDataManagerSvc." << endmsg;
69  return StatusCode::FAILURE;
70  }
71  m_whiteboard = serviceLocator()->service<IHiveWhiteBoard>( "EventDataSvc" );
72  if ( !m_whiteboard ) {
73  fatal() << "Error retrieving EventDataSvc interface IHiveWhiteBoard." << endmsg;
74  return StatusCode::FAILURE;
75  }
76  // Obtain the IProperty of the ApplicationMgr
77  IProperty* appMgrProperty = serviceLocator()->service<IProperty>( "ApplicationMgr" );
78  if ( !appMgrProperty ) {
79  fatal() << "IProperty interface not found in ApplicationMgr." << endmsg;
80  return StatusCode::FAILURE;
81  }
82  // We do not expect a Event Selector necessarily being declared
83  setProperty( appMgrProperty->getProperty( "EvtSel" ) ).ignore();
84 
85  if ( m_evtsel != "NONE" || m_evtsel.length() == 0 ) {
86  m_evtSelector = serviceLocator()->service<IEvtSelector>( "EventSelector" );
87  } else {
88  m_evtSelector = 0;
89  warning() << "Unable to locate service \"EventSelector\" " << endmsg;
90  warning() << "No events will be processed from external input." << endmsg;
91  }
92 
93  // Setup access to histogramming services
94  m_histoDataMgrSvc = serviceLocator()->service<IDataManagerSvc>( "HistogramDataSvc" );
95  if ( !m_histoDataMgrSvc ) {
96  fatal() << "Error retrieving HistogramDataSvc." << endmsg;
97  return sc;
98  }
99  // Setup histogram persistency
100  m_histoPersSvc = serviceLocator()->service<IConversionSvc>( "HistogramPersistencySvc" );
101  if ( !m_histoPersSvc ) {
102  warning() << "Histograms cannot not be saved - though required." << endmsg;
103  return sc;
104  }
105 
106  m_algExecStateSvc = serviceLocator()->service<IAlgExecStateSvc>( "AlgExecStateSvc" );
107  if ( !m_algExecStateSvc ) {
108  fatal() << "Error retrieving AlgExecStateSvc" << endmsg;
109  return StatusCode::FAILURE;
110  }
111 
112  // Get the precedence service
113  m_precSvc = serviceLocator()->service<IPrecedenceSvc>( "PrecedenceSvc" );
114  if ( !m_precSvc ) {
115  fatal() << "Error retrieving PrecedenceSvc" << endmsg;
116  return StatusCode::FAILURE;
117  }
118  const PrecedenceSvc* precSvc = dynamic_cast<const PrecedenceSvc*>( m_precSvc );
119  if ( !precSvc ) {
120  fatal() << "Unable to dcast PrecedenceSvc" << endmsg;
121  return StatusCode::FAILURE;
122  }
123 
124  m_algExecStateSvc = serviceLocator()->service<IAlgExecStateSvc>( "AlgExecStateSvc" );
125  if ( !m_algExecStateSvc ) {
126  fatal() << "Error retrieving AlgExecStateSvc" << endmsg;
127  return StatusCode::FAILURE;
128  }
129 
130  // Get the list of algorithms
131  IAlgResourcePool* algResourcePool = serviceLocator()->service<IAlgResourcePool>( "AlgResourcePool" );
132  if ( !algResourcePool ) {
133  fatal() << "Error retrieving AlgoResourcePool" << endmsg;
134  return StatusCode::FAILURE;
135  }
136  for ( auto alg : algResourcePool->getFlatAlgList() ) {
137  m_algos.push_back( alg );
138  }
139  const unsigned int algsNumber = m_algos.size();
140 
141  /* Dependencies
142  1) Look for handles in algo, if none
143  2) Assume none are required
144  */
145  DataObjIDColl globalInp, globalOutp;
146 
147  // figure out all outputs
149  for ( IAlgorithm* ialgoPtr : m_algos ) {
150  Algorithm* algoPtr = dynamic_cast<Algorithm*>( ialgoPtr );
151  if ( !algoPtr ) {
152  fatal() << "Could not convert IAlgorithm into Algorithm: this will result in a crash." << endmsg;
153  }
154  for ( auto id : algoPtr->outputDataObjs() ) {
155  auto r = globalOutp.insert( id );
156  producers[id] = algoPtr;
157  if ( !r.second ) {
158  warning() << "multiple algorithms declare " << id << " as output! could be a single instance in multiple paths "
159  "though, or control flow may guarantee only one runs...!"
160  << endmsg;
161  }
162  }
163  }
164 
165  // Building and printing Data Dependencies
166  std::vector<DataObjIDColl> algosDependencies;
168  info() << "Data Dependencies for Algorithms:";
169  int n = 0;
170  for ( IAlgorithm* ialgoPtr : m_algos ) {
171  Algorithm* algoPtr = dynamic_cast<Algorithm*>( ialgoPtr );
172  info() << "\n " << algoPtr->name();
173 
174  DataObjIDColl algoDependencies;
175  if ( !algoPtr->inputDataObjs().empty() || !algoPtr->outputDataObjs().empty() ) {
176  for ( const DataObjID* idp : sortedDataObjIDColl( algoPtr->inputDataObjs() ) ) {
177  DataObjID id = *idp;
178  info() << "\n o INPUT " << id;
179  if ( id.key().find( ":" ) != std::string::npos ) {
180  info() << " contains alternatives which require resolution...\n";
181  auto tokens = boost::tokenizer<boost::char_separator<char>>{id.key(), boost::char_separator<char>{":"}};
182  auto itok = std::find_if( tokens.begin(), tokens.end(), [&]( const std::string& t ) {
183  return globalOutp.find( DataObjID{t} ) != globalOutp.end();
184  } );
185  if ( itok != tokens.end() ) {
186  info() << "found matching output for " << *itok << " -- updating scheduler info\n";
187  id.updateKey( *itok );
188  } else {
189  error() << "failed to find alternate in global output list"
190  << " for id: " << id << " in Alg " << algoPtr->name() << endmsg;
191  }
192  }
193  algoDependencies.insert( id );
194  globalInp.insert( id );
195  }
196  for ( const DataObjID* id : sortedDataObjIDColl( algoPtr->outputDataObjs() ) ) {
197  info() << "\n o OUTPUT " << *id;
198  if ( id->key().find( ":" ) != std::string::npos ) {
199  error() << " in Alg " << algoPtr->name() << " alternatives are NOT allowed for outputs! id: " << *id
200  << endmsg;
201  }
202  }
203  } else {
204  info() << "\n none";
205  }
206  algosDependencies.emplace_back( algoDependencies );
207  algo2Index[ialgoPtr] = n;
208  n++;
209  }
210  info() << endmsg;
211 
212  // Check if we have unmet global input dependencies
213  DataObjIDColl unmetDep;
214  for ( auto o : globalInp ) {
215  if ( globalOutp.find( o ) == globalOutp.end() ) {
216  unmetDep.insert( o );
217  }
218  }
219  if ( unmetDep.size() > 0 ) {
220  std::ostringstream ost;
221  for ( const DataObjID* o : sortedDataObjIDColl( unmetDep ) ) {
222  ost << "\n o " << *o << " required by Algorithm: ";
223  for ( size_t i = 0; i < algosDependencies.size(); ++i ) {
224  if ( algosDependencies[i].find( *o ) != algosDependencies[i].end() ) {
225  ost << "\n * " << m_algname_vect[i];
226  }
227  }
228  }
229  fatal() << "The following unmet INPUT dependencies were found:" << ost.str() << endmsg;
230  return StatusCode::FAILURE;
231  } else {
232  info() << "No unmet INPUT data dependencies were found" << endmsg;
233  }
234 
235  // Deal with Event Slots
236  auto messageSvc = serviceLocator()->service<IMessageSvc>( "MessageSvc" );
238  EventSlot( algsNumber, precSvc->getRules()->getControlFlowNodeCounter(), messageSvc ) );
239 
240  // Clearly inform about the level of concurrency
241  info() << "Concurrency level information:" << endmsg;
242  info() << " o Number of events slots: " << m_whiteboard->getNumberOfStores() << endmsg;
243  info() << " o TBB thread pool size: " << m_threadPoolSize << endmsg;
244 
245  // rework the flat algo list to respect data dependencies
246  auto start = m_algos.begin();
247  auto end = m_algos.end();
248  auto current = std::partition( start, end, [&algosDependencies, &algo2Index]( const IAlgorithm* algo ) {
249  return algosDependencies[algo2Index[algo]].empty();
250  } );
251 
252  // Repeatedly put in front algos for which input are already fullfilled
253  while ( current != end ) {
254  current = std::partition(
255  current, end, [start, current, &producers, &algosDependencies, &algo2Index]( const IAlgorithm* algo ) {
256  return std::none_of( algosDependencies[algo2Index[algo]].begin(), algosDependencies[algo2Index[algo]].end(),
257  [start, current, &producers]( const DataObjID& id ) {
258  return std::find( start, current, producers[id] ) == current;
259  } );
260  } );
261  }
262 
263  // Fill the containers to convert algo names to index
264  debug() << "Order of algo execution :" << endmsg;
265  m_algname_vect.resize( algsNumber );
266  for ( IAlgorithm* algo : m_algos ) {
267  const std::string& name = algo->name();
268  auto index = precSvc->getRules()->getAlgorithmNode( name )->getAlgoIndex();
269  m_algname_index_map[name] = index;
270  m_algname_vect.at( index ) = name;
271  debug() << " . " << algo->name() << endmsg;
272  }
273 
274  return sc;
275 }
const concurrency::PrecedenceRulesGraph * getRules() const
Precedence rules accessor.
Definition: PrecedenceSvc.h:65
std::vector< IAlgorithm * > m_algos
Vector of algorithms to run for every event.
constexpr static const auto FAILURE
Definition: StatusCode.h:88
StatusCode initialize() override
Definition: Service.cpp:63
const unsigned int & getAlgoIndex() const
Get algorithm index.
T empty(T...args)
IConversionSvc * m_histoPersSvc
Reference to the Histogram Persistency Service.
const std::string & name() const override
The identifying name of the algorithm object.
Definition: Algorithm.cpp:746
const std::string & name() const override
Retrieve name of the service.
Definition: Service.cpp:288
StatusCode setProperty(const Gaudi::Details::PropertyBase &p) override
set the property form another property
MsgStream & info() const
shortcut for the method msgStream(MSG::INFO)
StatusCode start() override
Definition: Service.cpp:136
The Event Selector Interface.
Definition: IEvtSelector.h:18
const DataObjIDColl & outputDataObjs() const override
bool isSuccess() const
Definition: StatusCode.h:287
A service to resolve the task execution precedence.
Definition: PrecedenceSvc.h:21
Abstract interface for a service that manages tasks&#39; precedence.
virtual StatusCode getProperty(Gaudi::Details::PropertyBase *p) const =0
Get the property by property.
AlgorithmNode * getAlgorithmNode(const std::string &algoName) const
Get the AlgorithmNode from by algorithm name using graph index.
virtual std::list< IAlgorithm * > getFlatAlgList()=0
Get the flat list of algorithms.
IDataManagerSvc * m_evtDataMgrSvc
Reference to the Event Data Service&#39;s IDataManagerSvc interface.
STL class.
T partition(T...args)
T resize(T...args)
STL class.
The IAlgResourcePool is the interface for managing algorithm instances, in particular if clones of th...
T at(T...args)
StatusCode service(const Gaudi::Utils::TypeNameString &name, T *&svc, bool createIf=true)
Templated method to access a service by name.
Definition: ISvcLocator.h:79
T push_back(T...args)
MsgStream & error() const
shortcut for the method msgStream(MSG::ERROR)
MsgStream & warning() const
shortcut for the method msgStream(MSG::WARNING)
Abstract interface for a service that manages the Algorithm execution states.
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:51
const DataObjIDColl & inputDataObjs() const override
std::vector< EventSlot > m_eventSlots
Vector of events slots.
const std::string & key() const
Definition: DataObjID.h:49
The IMessage is the interface implemented by the message service.
Definition: IMessageSvc.h:38
std::unordered_map< std::string, unsigned int > m_algname_index_map
Map to bookkeep the information necessary to the name2index conversion.
The IAlgorithm is the interface implemented by the Algorithm base class.
Definition: IAlgorithm.h:28
IHiveWhiteBoard * m_whiteboard
Reference to the Whiteboard.
IDataManagerSvc * m_histoDataMgrSvc
Reference to the Histogram Data Service.
T insert(T...args)
Base class from which all concrete algorithm classes should be derived.
Definition: Algorithm.h:78
T find(T...args)
T size(T...args)
Gaudi::Property< int > m_threadPoolSize
T assign(T...args)
STL class.
Gaudi::Property< std::string > m_evtsel
MsgStream & debug() const
shortcut for the method msgStream(MSG::DEBUG)
T none_of(T...args)
IEvtSelector * m_evtSelector
Reference to the Event Selector.
Class representing the event slot.
Definition: EventSlot.h:10
std::vector< std::string > m_algname_vect
Vector to bookkeep the information necessary to the index2name conversion.
AttribStringParser::Iterator begin(const AttribStringParser &parser)
MsgStream & fatal() const
shortcut for the method msgStream(MSG::FATAL)
IAlgExecStateSvc * m_algExecStateSvc
Reference to the AlgExecStateSvc.
virtual size_t getNumberOfStores() const =0
Get the number of &#39;slots&#39;.
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
IPrecedenceSvc * m_precSvc
A shortcut to the Precedence Service.
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:209
unsigned int getControlFlowNodeCounter() const
Get total number of control flow graph nodes.
T emplace_back(T...args)
StatusCode HLTEventLoopMgr::nextEvent ( int  maxevt)
override

implementation of IEventProcessor::nextEvent

Definition at line 366 of file HLTEventLoopMgr.cpp.

367 {
368  // Calculate runtime
370 
371  // Reset the application return code.
372  auto appmgr = serviceLocator()->as<IProperty>();
374 
375  // create m_evtSelContext used internally in executeEvent and more
376  // precisely in declareEventRootAddress. Cannot be passed through the interface
377  // without breaking other schedulers
379  if ( !sc.isSuccess() ) {
380  fatal() << "Can not create the event selector Context." << endmsg;
381  return sc;
382  }
383 
384  // create th tbb thread pool
385  tbb::task_scheduler_init tbbSchedInit( m_threadPoolSize.value() + 1 );
386 
387  int createdEvts = 0;
388  // Run the first event before spilling more than one
389  bool newEvtAllowed = false;
390 
391  info() << "Starting loop on events" << endmsg;
392  auto start_time = Clock::now();
393  while ( maxevt < 0 || m_finishedEvt < (unsigned int)maxevt ) {
394  // if the created events did not reach maxevt, create an event
395  if ( !( ( newEvtAllowed || createdEvts == 0 ) && // Launch the first event alone
396  // The events are not finished with an unlimited number of events
397  createdEvts >= 0 &&
398  // The events are not finished with a limited number of events
399  ( createdEvts < maxevt || maxevt < 0 ) &&
400  // There are still free slots in the whiteboard
401  m_whiteboard->freeSlots() > 0 ) ) {
402 
404  using namespace std::chrono_literals;
405  m_createEventCond.wait_for( lock, 1ms, [this, newEvtAllowed, createdEvts, maxevt] {
406  return ( newEvtAllowed || createdEvts == 0 ) && // Launch the first event alone
407  // The events are not finished with an unlimited number of events
408  createdEvts >= 0 &&
409  // The events are not finished with a limited number of events
410  ( createdEvts < maxevt || maxevt < 0 ) &&
411  // There are still free slots in the whiteboard
412  this->m_whiteboard->freeSlots() > 0;
413  } );
414  continue;
415  }
416  if ( 1 == createdEvts ) // reset counter to count from event 1
417  start_time = Clock::now();
418 
419  // TODO can we adapt the interface of executeEvent for a nicer solution?
421  sc = executeEvent( &createdEvts );
422  if ( !sc.isSuccess() ) {
423  return StatusCode::FAILURE;
424  } // else we have an success --> exit loop
425  newEvtAllowed = true;
426  } // end main loop on finished events
427  auto end_time = Clock::now();
428 
429  delete m_evtSelContext;
430  m_evtSelContext = nullptr;
431 
432  constexpr double oneOver1024 = 1. / 1024.;
433  info() << "---> Loop Finished (skipping 1st evt) - "
434  << " WSS " << System::mappedMemory( System::MemoryUnit::kByte ) * oneOver1024 << " total time "
435  << std::chrono::duration_cast<std::chrono::nanoseconds>( end_time - start_time ).count() << endmsg;
436  return StatusCode::SUCCESS;
437 }
constexpr static const auto FAILURE
Definition: StatusCode.h:88
std::mutex m_createEventMutex
mutex assoiciated with m_createEventCond condition variable
MsgStream & info() const
shortcut for the method msgStream(MSG::INFO)
bool isSuccess() const
Definition: StatusCode.h:287
std::condition_variable m_createEventCond
condition variable to wake up main thread when we need to create a new event
T duration_cast(T...args)
virtual size_t freeSlots()=0
Get free slots number.
SmartIF< IFace > as()
Definition: ISvcLocator.h:109
constexpr static const auto RECOVERABLE
Definition: StatusCode.h:89
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:51
IEvtSelector::Context * m_evtSelContext
event selector context
T lock(T...args)
StatusCode setAppReturnCode(SmartIF< IProperty > &appmgr, int value, bool force=false)
Set the application return code.
Definition: AppReturnCode.h:51
IHiveWhiteBoard * m_whiteboard
Reference to the Whiteboard.
constexpr static const auto SUCCESS
Definition: StatusCode.h:87
T count(T...args)
GAUDI_API long mappedMemory(MemoryUnit unit=kByte, InfoType fetch=Memory, long pid=-1)
Basic Process Information: priority boost.
Definition: Memory.cpp:204
Gaudi::Property< int > m_threadPoolSize
const StatusCode & ignore() const
Ignore/check StatusCode.
Definition: StatusCode.h:165
IEvtSelector * m_evtSelector
Reference to the Event Selector.
std::atomic< unsigned int > m_finishedEvt
atomic count of the number of finished events
StatusCode executeEvent(void *par) override
implementation of IEventProcessor::executeEvent(void* par)
virtual StatusCode createContext(Context *&c) const =0
Create and return a context object that will keep track of the state of selection.
int maxevt
Definition: Bootstrap.cpp:276
MsgStream & fatal() const
shortcut for the method msgStream(MSG::FATAL)
constexpr int Success
Definition: AppReturnCode.h:18
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
constexpr double ms
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:209
void HLTEventLoopMgr::promoteToExecuted ( std::unique_ptr< EventContext eventContext)
private

Algorithm promotion.

Definition at line 479 of file HLTEventLoopMgr.cpp.

480 {
481  // Check if the execution failed
482  if ( m_algExecStateSvc->eventStatus( *eventContext ) != EventStatus::Success )
483  eventFailed( eventContext.get() ).ignore();
484  int si = eventContext->slot();
485 
486  if ( msgLevel( MSG::DEBUG ) )
487  debug() << "Event " << eventContext->evt() << " executed in slot " << si << "." << endmsg;
488 
489  // Schedule the cleanup of the event
490  if ( m_algExecStateSvc->eventStatus( *eventContext ) == EventStatus::Success ) {
491  if ( msgLevel( MSG::DEBUG ) )
492  debug() << "Event " << eventContext->evt() << " finished (slot " << si << ")." << endmsg;
493  } else {
494  fatal() << "Failed event detected on " << *eventContext << endmsg;
495  }
496 
497  debug() << "Clearing slot " << si << " (event " << eventContext->evt() << ") of the whiteboard" << endmsg;
498 
499  StatusCode sc = m_whiteboard->clearStore( si );
500  if ( !sc.isSuccess() ) {
501  warning() << "Clear of Event data store failed" << endmsg;
502  }
503  m_eventSlots[si].eventContext = nullptr;
504  sc = m_whiteboard->freeStore( si );
505  if ( !sc.isSuccess() ) {
506  error() << "Whiteboard slot " << eventContext->slot() << " could not be properly cleared";
507  }
508  m_finishedEvt++;
510 }
ContextID_t slot() const
Definition: EventContext.h:40
StatusCode eventFailed(EventContext *eventContext)
Method to check if an event failed and take appropriate actions.
bool isSuccess() const
Definition: StatusCode.h:287
std::condition_variable m_createEventCond
condition variable to wake up main thread when we need to create a new event
ContextEvt_t evt() const
Definition: EventContext.h:39
MsgStream & error() const
shortcut for the method msgStream(MSG::ERROR)
MsgStream & warning() const
shortcut for the method msgStream(MSG::WARNING)
virtual StatusCode clearStore(size_t partitionIndex)=0
Clear an given &#39;slot&#39;.
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:51
std::vector< EventSlot > m_eventSlots
Vector of events slots.
IHiveWhiteBoard * m_whiteboard
Reference to the Whiteboard.
T get(T...args)
MsgStream & debug() const
shortcut for the method msgStream(MSG::DEBUG)
virtual const EventStatus::Status & eventStatus(const EventContext &ctx) const =0
std::atomic< unsigned int > m_finishedEvt
atomic count of the number of finished events
virtual StatusCode freeStore(size_t partitionIndex)=0
Free a store partition.
MsgStream & fatal() const
shortcut for the method msgStream(MSG::FATAL)
IAlgExecStateSvc * m_algExecStateSvc
Reference to the AlgExecStateSvc.
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:209
MSG::Level msgLevel() const
get the cached level (originally extracted from the embedded MsgStream)
StatusCode HLTEventLoopMgr::reinitialize ( )
inlineoverride

implementation of IService::reinitialize

Definition at line 60 of file HLTEventLoopMgr.h.

60 { return StatusCode::FAILURE; }
constexpr static const auto FAILURE
Definition: StatusCode.h:88
StatusCode HLTEventLoopMgr::stopRun ( )
override

implementation of IEventProcessor::stopRun()

Definition at line 356 of file HLTEventLoopMgr.cpp.

357 {
358  // Set the application return code
359  auto appmgr = serviceLocator()->as<IProperty>();
361  error() << "Could not set return code of the application (" << Gaudi::ReturnCode::ScheduledStop << ")" << endmsg;
362  }
363  return StatusCode::SUCCESS;
364 }
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

Member Data Documentation

IAlgExecStateSvc* HLTEventLoopMgr::m_algExecStateSvc
private

Reference to the AlgExecStateSvc.

Definition at line 103 of file HLTEventLoopMgr.h.

std::unordered_map<std::string, unsigned int> HLTEventLoopMgr::m_algname_index_map
private

Map to bookkeep the information necessary to the name2index conversion.

Definition at line 120 of file HLTEventLoopMgr.h.

std::vector<std::string> HLTEventLoopMgr::m_algname_vect
private

Vector to bookkeep the information necessary to the index2name conversion.

Definition at line 118 of file HLTEventLoopMgr.h.

std::vector<IAlgorithm*> HLTEventLoopMgr::m_algos
private

Vector of algorithms to run for every event.

Definition at line 124 of file HLTEventLoopMgr.h.

std::condition_variable HLTEventLoopMgr::m_createEventCond
private

condition variable to wake up main thread when we need to create a new event

Definition at line 110 of file HLTEventLoopMgr.h.

std::mutex HLTEventLoopMgr::m_createEventMutex
private

mutex assoiciated with m_createEventCond condition variable

Definition at line 112 of file HLTEventLoopMgr.h.

std::vector<EventSlot> HLTEventLoopMgr::m_eventSlots
private

Vector of events slots.

Definition at line 122 of file HLTEventLoopMgr.h.

IDataManagerSvc* HLTEventLoopMgr::m_evtDataMgrSvc
private

Reference to the Event Data Service's IDataManagerSvc interface.

Definition at line 93 of file HLTEventLoopMgr.h.

Gaudi::Property<std::string> HLTEventLoopMgr::m_evtsel {this, "EvtSel", "", ""}
private

Definition at line 88 of file HLTEventLoopMgr.h.

IEvtSelector::Context* HLTEventLoopMgr::m_evtSelContext {nullptr}
private

event selector context

Definition at line 115 of file HLTEventLoopMgr.h.

IEvtSelector* HLTEventLoopMgr::m_evtSelector
private

Reference to the Event Selector.

Definition at line 95 of file HLTEventLoopMgr.h.

std::atomic<unsigned int> HLTEventLoopMgr::m_finishedEvt {0}
private

atomic count of the number of finished events

Definition at line 108 of file HLTEventLoopMgr.h.

IDataManagerSvc* HLTEventLoopMgr::m_histoDataMgrSvc
private

Reference to the Histogram Data Service.

Definition at line 97 of file HLTEventLoopMgr.h.

IConversionSvc* HLTEventLoopMgr::m_histoPersSvc
private

Reference to the Histogram Persistency Service.

Definition at line 99 of file HLTEventLoopMgr.h.

Gaudi::Property<std::string> HLTEventLoopMgr::m_histPersName {this, "HistogramPersistency", "", ""}
private

Definition at line 87 of file HLTEventLoopMgr.h.

IPrecedenceSvc* HLTEventLoopMgr::m_precSvc
private

A shortcut to the Precedence Service.

Definition at line 105 of file HLTEventLoopMgr.h.

Gaudi::Property<int> HLTEventLoopMgr::m_threadPoolSize {this, "ThreadPoolSize", -1, "Size of the threadpool initialised by TBB"}
private

Definition at line 89 of file HLTEventLoopMgr.h.

IHiveWhiteBoard* HLTEventLoopMgr::m_whiteboard
private

Reference to the Whiteboard.

Definition at line 101 of file HLTEventLoopMgr.h.

Gaudi::Property<std::string> HLTEventLoopMgr::m_whiteboardSvcName {this, "WhiteboardSvc", "EventDataSvc", "The whiteboard name"}
private

Definition at line 90 of file HLTEventLoopMgr.h.


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