18 #define ON_DEBUG if ( msgLevel( MSG::DEBUG ) ) 19 #define DEBUG_MSG ON_DEBUG debug() 21 #define ON_VERBOSE if ( msgLevel( MSG::VERBOSE ) ) 22 #define VERBOSE_MSG ON_VERBOSE verbose() 35 error() <<
"Failed to initialize Service Base class." <<
endmsg;
42 fatal() <<
"Error retrieving IncidentSvc." <<
endmsg;
49 fatal() <<
"Error retrieving EventDataSvc interface IDataManagerSvc." <<
endmsg;
54 fatal() <<
"Error retrieving EventDataSvc interface IHiveWhiteBoard." <<
endmsg;
59 fatal() <<
"Error retrieving SchedulerSvc interface IScheduler." <<
endmsg;
65 fatal() <<
"IProperty interface not found in ApplicationMgr." <<
endmsg;
78 fatal() <<
"Can not create the event selector Context." <<
endmsg;
89 warning() <<
"Unable to locate service \"EventSelector\" " <<
endmsg;
90 warning() <<
"No events will be processed from external input." <<
endmsg;
97 fatal() <<
"Error retrieving HistogramDataSvc." <<
endmsg;
103 warning() <<
"Histograms cannot not be saved - though required." <<
endmsg;
110 fatal() <<
"Error retrieving AlgResourcePool" <<
endmsg;
116 fatal() <<
"Error retrieving AlgExecStateSvc" <<
endmsg;
145 sc = theSvc->reinitialize();
146 if ( !sc.isSuccess() ) {
147 error() <<
"Failure Reinitializing EventSelector " << theSvc->name() <<
endmsg;
151 sc = theSvc->sysInitialize();
152 if ( !sc.isSuccess() ) {
153 error() <<
"Failure Initializing EventSelector " << theSvc->name() <<
endmsg;
158 if ( !sc.isSuccess() ) {
159 error() <<
"Can not create Context " << theSvc->name() <<
endmsg;
169 if ( !sc.isSuccess() ) {
170 error() <<
"Can not create Context " << theSvc->name() <<
endmsg;
206 error() <<
"Problems finalizing Service base class" <<
endmsg;
219 if ( iret.
isSuccess() ) i->registry()->setAddress( pAddr );
220 return s.isFailure() ?
s : iret;
225 return s.isFailure() ?
s : iret;
227 if ( sc.isSuccess() ) {
228 info() <<
"Histograms converted successfully according to request." <<
endmsg;
230 error() <<
"Error while saving Histograms." <<
endmsg;
233 error() <<
"Error while traversing Histogram data store" <<
endmsg;
299 fatal() <<
"An event processing slot should be now free in the scheduler, but it appears not to be the case." 311 bool eventfailed =
false;
314 const unsigned int umaxevt = static_cast<unsigned int>(
maxevt );
324 if ( sc.
isFailure() ) eventfailed =
true;
359 int finishedEvts = 0;
362 info() <<
"Starting loop on events" <<
endmsg;
364 bool loop_ended =
false;
366 bool newEvtAllowed =
false;
368 constexpr
double oneOver1024 = 1. / 1024.;
371 auto start_time = Clock::now();
372 while ( !loop_ended && (
maxevt < 0 || ( finishedEvts + skippedEvts ) <
maxevt ) ) {
375 if ( ( newEvtAllowed || createdEvts == 0 ) &&
381 if ( 1 == createdEvts )
382 start_time = Clock::now();
398 if ( !
ctx.valid() ) {
421 newEvtAllowed =
true;
424 auto end_time = Clock::now();
426 info() <<
"---> Loop Finished (skipping 1st evt) - " 428 << std::chrono::duration_cast<std::chrono::nanoseconds>( end_time - start_time ).count() <<
endmsg;
429 info() << skippedEvts <<
" events were SKIPed" <<
endmsg;
460 info() <<
"No more events in event selection " <<
endmsg;
507 DEBUG_MSG <<
"Context " << ( sc.
isSuccess() ?
"obtained" :
"not obtained: a problem in the scheduling?" ) <<
endmsg;
508 finishedEvtContexts.
push_back( finishedEvtContext );
512 finishedEvtContexts.
push_back( finishedEvtContext );
517 for (
auto& thisFinishedEvtContext : finishedEvtContexts ) {
518 if ( !thisFinishedEvtContext ) {
519 error() <<
"Detected nullptr ctxt before clearing WB!" <<
endmsg;
534 DEBUG_MSG <<
"Clearing slot " << thisFinishedEvtContext->slot() <<
" (event " << thisFinishedEvtContext->evt()
535 <<
") of the whiteboard" <<
endmsg;
539 error() <<
"Whiteboard slot " << thisFinishedEvtContext->slot() <<
" could not be properly cleared";
541 delete thisFinishedEvtContext;
virtual StatusCode traverseTree(IDataStoreAgent *pAgent)=0
Analyse by traversing all data objects in the data store.
StatusCode clearWBSlot(int evtSlot)
Clear a slot in the WB.
StatusCode initialize() override
Gaudi::Property< std::string > m_evtsel
SmartIF< IIncidentSvc > m_incidentSvc
Reference to the incident service.
SmartIF< ISvcLocator > & serviceLocator() const override
Retrieve pointer to service locator.
std::unique_ptr< boost::dynamic_bitset<> > m_blackListBS
SmartIF< IDataManagerSvc > m_evtDataMgrSvc
Reference to the Event Data Service's IDataManagerSvc interface.
Define general base for Gaudi exception.
StatusCode declareEventRootAddress()
Declare the root address of the event.
Gaudi::Property< bool > m_abortOnFailure
EventContext createEventContext() override
implementation of IEventProcessor::createEventContext()
StatusCode finalize() override
StatusCode setProperty(const Gaudi::Details::PropertyBase &p) override
set the property form another property
MsgStream & warning() const
shortcut for the method msgStream(MSG::WARNING)
virtual const EventStatus::Status & eventStatus(const EventContext &ctx) const =0
StatusCode drainScheduler(int &finishedEvents)
Drain the scheduler from all actions that may be queued.
The Event Selector Interface.
HistogramAgent base in charge of collecting all the references to DataObjects in a transient store th...
SmartIF< IHiveWhiteBoard > m_whiteboard
Reference to the Whiteboard.
virtual StatusCode setRoot(std::string root_name, DataObject *pObject)=0
Initialize data store for new event by giving new event path.
SmartIF< IScheduler > m_schedulerSvc
A shortcut for the scheduler.
constexpr static const auto RECOVERABLE
bool m_scheduledStop
Scheduled stop of event processing.
T binary_search(T... args)
constexpr static const auto SUCCESS
Gaudi::Property< std::vector< unsigned int > > m_eventNumberBlacklist
virtual StatusCode createRep(DataObject *pObject, IOpaqueAddress *&refpAddress)=0
Convert the transient object to the requested representation.
virtual size_t freeSlots()=0
Get free slots number.
MsgStream & info() const
shortcut for the method msgStream(MSG::INFO)
TYPE * get() const
Get interface pointer.
This class represents an entry point to all the event specific data.
SmartIF< IProperty > m_appMgrProperty
Property interface of ApplicationMgr.
constexpr int ScheduledStop
#define DECLARE_COMPONENT(type)
Gaudi::Property< bool > m_warnings
StatusCode service(const Gaudi::Utils::TypeNameString &name, T *&svc, bool createIf=true)
Templated method to access a service by name.
const std::string & name() const override
Retrieve name of the service.
StatusCode finalize() override
implementation of IService::finalize
StatusCode stopRun() override
implementation of IEventProcessor::stopRun()
MsgStream & error() const
shortcut for the method msgStream(MSG::ERROR)
virtual StatusCode selectStore(size_t partitionIndex)=0
Activate an given 'slot' for all subsequent calls within the same thread id.
virtual void fireIncident(const Incident &incident)=0
Fire an Incident.
~HiveSlimEventLoopMgr() override
virtual StatusCode clearStore(size_t partitionIndex)=0
Clear an given 'slot'.
This class is used for returning status codes from appropriate routines.
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.
StatusCode executeRun(int maxevt) override
implementation of IEventProcessor::executeRun()
virtual StatusCode createContext(Context *&c) const =0
Create and return a context object that will keep track of the state of selection.
virtual StatusCode getProperty(Gaudi::Details::PropertyBase *p) const =0
Get the property by property.
virtual StatusCode releaseContext(Context *&) const =0
Release the Context object.
The IRegistry represents the entry door to the environment any data object residing in a transient da...
virtual StatusCode pushNewEvent(EventContext *eventContext)=0
Make an event available to the scheduler.
StatusCode getEventRoot(IOpaqueAddress *&refpAddr)
Create event address using event selector.
StatusCode setAppReturnCode(SmartIF< IProperty > &appmgr, int value, bool force=false)
Set the application return code.
virtual IOpaqueAddress * address() const =0
Retrieve opaque storage address.
virtual void reset(const EventContext &ctx)=0
GAUDI_API long mappedMemory(MemoryUnit unit=kByte, InfoType fetch=Memory, long pid=-1)
Basic Process Information: priority boost.
const StatusCode & ignore() const
Ignore/check StatusCode.
StatusCode initialize() override
implementation of IService::initialize
SmartIF< IAlgExecStateSvc > m_algExecStateSvc
Reference to the AlgExecStateSvc.
SmartIF< IConversionSvc > m_histoPersSvc
Reference to the Histogram Persistency Service.
virtual size_t allocateStore(int evtnumber)=0
Allocate a store partition for new event.
Gaudi::Property< std::string > m_schedulerName
virtual StatusCode tryPopFinishedEvent(EventContext *&eventContext)=0
Try to retrieve a finished event from the scheduler.
Base class for all Incidents (computing events).
SmartIF< IDataManagerSvc > m_histoDataMgrSvc
Reference to the Histogram Data Service.
SmartIF< IEvtSelector > m_evtSelector
Reference to the Event Selector.
virtual StatusCode freeStore(size_t partitionIndex)=0
Free a store partition.
bool isRecoverable() const
constexpr static const auto FAILURE
StatusCode executeEvent(EventContext &&ctx) override
implementation of IEventProcessor::executeEvent(EventContext&&)
StatusCode reinitialize() override
implementation of IService::reinitialize
void reset(TYPE *ptr=nullptr)
Set the internal pointer to the passed one disposing of the old one.
AttribStringParser::Iterator begin(const AttribStringParser &parser)
Opaque address interface definition.
The IProperty is the basic interface for all components which have properties that can be set or get.
SmartIF< IAlgResourcePool > m_algResourcePool
Reference to the Algorithm resource pool.
virtual StatusCode createAddress(const Context &c, IOpaqueAddress *&iop) const =0
Create an IOpaqueAddress object from the event fetched.
virtual StatusCode fillRepRefs(IOpaqueAddress *pAddress, DataObject *pObject)=0
Resolve the references of the converted object.
StatusCode nextEvent(int maxevt) override
implementation of IService::nextEvent
virtual unsigned int freeSlots()=0
Get the free event processing slots.
MsgStream & fatal() const
shortcut for the method msgStream(MSG::FATAL)
virtual StatusCode popFinishedEvent(EventContext *&eventContext)=0
Retrieve a finished event from the scheduler.
const IDataSelector & selectedObjects() const
Return the set of selected DataObjects.
bool m_endEventFired
Flag to avoid to fire the EnvEvent incident twice in a row (and also not before the first event)
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
StatusCode stop() override
implementation of IService::stop
EventContext::ContextEvt_t m_nevt
IEvtSelector::Context * m_evtContext
Event Iterator.