129 std::vector<int> nodeDecisions(algPool->getExecutionFlowGraph()->getControlFlowNodeCounter(), -1);
140 while(algStates.algsPresent(AlgsExecutionStates::State::CONTROLREADY) ){
142 debug() <<
"algorithms left" <<
endmsg;
147 for(
auto it = algStates.begin(AlgsExecutionStates::State::CONTROLREADY); it != algStates.end(AlgsExecutionStates::State::CONTROLREADY); ++it){
153 debug() <<
"Running algorithm [" << algIndex <<
"] " << algName <<
endmsg;
155 std::vector<AlgsExecutionStates::State> algResults(
m_evtCtx_buffer.size());
170 bool eventfailed=
false;
181 warning() <<
"Execution of algorithm " << algName <<
" failed for event " <<
m_evtCtx_buffer[
i]->evt() <<
endmsg;
186 error() <<
".executeEvent(): Exception with tag=" << Exception.
tag()
187 <<
" thrown by " << algName <<
endmsg;
188 error() << Exception <<
endmsg;
189 }
catch (
const std::exception& Exception ) {
190 fatal() <<
".executeEvent(): Standard std::exception thrown by "
192 error() << Exception.what() <<
endmsg;
194 fatal() <<
".executeEvent(): UNKNOWN Exception thrown by "
201 algResults[
i] = AlgsExecutionStates::State::EVTACCEPTED;
203 algResults[
i] = AlgsExecutionStates::State::EVTREJECTED;
211 bool unanimous =
true;
212 for(uint i = 1; i < algResults.size(); ++
i)
213 if(result != algResults[i])
217 algStates.updateState(algIndex,result);
219 fatal() <<
"divergent algorithm execution" <<
endmsg;
220 fatal() <<
"Algorithm results: ";
221 for(uint i =0; i < algResults.size(); ++
i){
222 fatal() << i <<
": " << (algResults[
i] == AlgsExecutionStates::State::EVTACCEPTED ?
"A" :
"R") <<
"\t";
223 if(algResults[i] == AlgsExecutionStates::State::EVTREJECTED){
244 m_evtCtx_buffer.clear();
void resetExecuted() override
Reset the executed state of the Algorithm for the duration of the current event.
virtual StatusCode acquireAlgorithm(const std::string &name, IAlgorithm *&algo, bool blocking=false)=0
Acquire a certain algorithm using its name.
Define general base for Gaudi exception.
Helper class to set the application return code in case of early exit (e.g.
void updateEventState(AlgsExecutionStates &algo_states, std::vector< int > &node_decisions) const
Update the state of algorithms to controlready, where possible.
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
std::list< IAlgorithm * > m_algList
Cache the list of algs to be executed.
The AlgResourcePool is a concrete implementation of the IAlgResourcePool interface.
This class represents an entry point to all the event specific data.
GAUDI_API void setCurrentContextId(ContextIdType newId)
Used by the framework to change the value of the current context id.
void setContext(EventContext *context)
set the context
virtual StatusCode sysExecute()=0
System execution. This method invokes the execute() method of a concrete algorithm.
SmartIF< IAlgResourcePool > m_algResourcePool
constexpr int UnhandledException
TYPE * get() const
Get interface pointer.
The AlgsExecutionStates encodes the state machine for the execution of algorithms within a single eve...
void promoteToControlReadyState(AlgsExecutionStates &algo_states, std::vector< int > &node_decisions, const int &slotNum=-1) const
XXX: CF tests.
This class is used for returning status codes from appropriate routines.
std::vector< std::string > m_algname_vect
Vector to bookkeep the information necessary to the index2name conversion.
virtual const std::string & tag() const
name tag for the exception, or exception type
concurrency::ExecutionFlowManager m_controlFlow
The IAlgorithm is the interface implemented by the Algorithm base class.
virtual bool filterPassed() const =0
Did this algorithm pass or fail its filter criterion for the last event?
Base class from which all concrete algorithm classes should be derived.
tbb::concurrent_bounded_queue< EventContext * > m_finishedEvents
Queue of finished events.
State
Execution states of the algorithms.
virtual StatusCode releaseAlgorithm(const std::string &name, IAlgorithm *&algo)=0
Release a certain algorithm.
std::vector< EventContext * > m_evtCtx_buffer