14 #define ON_DEBUG if ( msgLevel( MSG::DEBUG ) ) 15 #define ON_VERBOSE if ( msgLevel( MSG::VERBOSE ) ) 23 error() <<
"Unable to configure one or more sequencer members " <<
endmsg;
28 error() <<
"Unable to configure one or more branch members " <<
endmsg;
34 result = alg->sysInitialize();
36 error() <<
"Unable to initialize Algorithm " << alg->name() <<
endmsg;
43 result = alg->sysInitialize();
45 error() <<
"Unable to initialize Algorithm " << alg->name() <<
endmsg;
61 if ( alg->isEnabled() ) alg->reinitialize().
ignore();
66 if ( alg->isEnabled() ) {
67 alg->reinitialize().
ignore();
93 if ( !theAlgs.empty() ) {
95 if ( lastAlgorithm == branchAlgorithm ) {
124 if ( alg->sysFinalize().isFailure() ) {
125 error() <<
"Unable to finalize Algorithm " << alg->name() <<
endmsg;
137 result = alg->sysStart();
139 error() <<
"Unable to start Algorithm " << alg->name() <<
endmsg;
146 result = alg->sysStart();
148 error() <<
"Unable to start Algorithm " << alg->name() <<
endmsg;
162 if ( alg->sysStop().isFailure() ) {
163 error() <<
"Unable to stop Algorithm " << alg->name() <<
endmsg;
168 if ( alg->sysStop().isFailure() ) {
169 error() <<
"Unable to stop Algorithm " << alg->name() <<
endmsg;
251 pAlgorithm->addRef();
262 StatusCode result = theAlgMgr->createAlgorithm( type, algName, tmp );
265 pAlgorithm =
dynamic_cast<Algorithm*
>( tmp );
268 error() <<
"Unable to create Algorithm " << algName <<
endmsg;
287 for (
const auto&
n : theNames.value() ) {
305 bool isInverted =
false;
306 std::string::size_type invert = theName.
find_first_of(
":" );
308 while ( std::string::npos != invert && invert < ( theName.
size() - 1 ) && theName[invert + 1] ==
':' )
310 if ( std::string::npos != invert ) {
311 if ( theName == theType ) {
314 theType = theType.
substr( 0, invert );
316 theName = theName.
substr( 0, invert );
326 theAlgorithm =
dynamic_cast<Algorithm*
>( theIAlg.
get() );
328 warning() << theName <<
" is not an Algorithm - Failed dynamic cast" <<
endmsg;
329 theAlgorithm =
nullptr;
332 if ( theAlgorithm ) {
335 status =
append( theAlgorithm, theAlgs );
339 warning() << theName <<
" already exists - append failed!!!" <<
endmsg;
348 ON_DEBUG debug() << theName <<
" doesn't exist - created and appended to member list" <<
endmsg;
350 warning() << theName <<
" doesn't exist - creation failed!!!" <<
endmsg;
359 info() <<
"Member list: ";
360 auto ai = theAlgs.
begin();
361 auto li = theLogic.
begin();
362 for ( ; ai != theAlgs.
end(); ++ai, ++li ) {
364 if ( ai != theAlgs.
begin() )
info() <<
", ";
367 info() << alg->name();
371 if ( *li )
info() <<
":invert";
379 Algorithm*& lastAlgorithm,
unsigned int first )
388 for (
unsigned int i = first; i <
size; i++ ) {
389 lastAlgorithm = theAlgs[i];
396 bool isInverted = theLogic[i];
397 if ( isInverted ) passed = !passed;
404 if ( !passed )
break;
429 for (
auto& alg : theAlgs ) {
430 if ( alg->name() == algname ) {
434 info() <<
"Sequencer::remove( ) isn't implemented yet!!!!!" <<
endmsg;
445 if ( theAlgs.empty() )
return os <<
"CFTrue";
448 const auto algs_count = theAlgs.size();
451 while ( i < algs_count ) {
454 theAlgs[i]->toControlFlowExpression( os );
void resetExecuted() override
Reset the executed state of the Algorithm for the duration of the current event.
virtual bool isStopOverride() const
Has the StopOverride mode been set?
constexpr static const auto FAILURE
StatusCode append(Algorithm *pAlgorithm)
Append an algorithm to the sequencer.
const std::string & name() const override
The identifying name of the algorithm object.
void setFilterPassed(bool state) const override
Set the filter passed flag to the specified state.
StatusCode remove(Algorithm *pAlgorithm)
Remove the specified algorithm from the sequencer.
Implementation of property with value of concrete type.
StatusCode removeFromBranch(Algorithm *pAlgorithm)
bool isExecuted() const override
Has this algorithm been executed since the last reset?
Gaudi::Property< std::vector< std::string > > m_branchNames
MsgStream & info() const
shortcut for the method msgStream(MSG::INFO)
GAUDI_API const std::string typeinfoName(const std::type_info &)
Get platform independent information about the class type.
The IAlgManager is the interface implemented by the Algorithm Factory in the Application Manager to s...
virtual bool branchFilterPassed() const
Was the branch filter passed for the last event?
StatusCode stop() override
Sequencer finalization.
bool m_branchFilterPassed
StatusCode reinitialize() override
Sequencer Reinitialization.
const std::vector< Algorithm * > & branchAlgorithms() const
List of branch algorithms.
StatusCode executeMember(Algorithm *theAlgorithm)
Execute member algorithm.
constexpr auto size(const C &c) noexcept(noexcept(c.size())) -> decltype(c.size())
StatusCode decodeBranchMemberNames()
Decode branch member name list.
TYPE * get() const
Get interface pointer.
virtual StatusCode setBranchFilterPassed(bool state)
Set the branch filter passed flag for the last event.
Gaudi::Property< bool > m_stopOverride
StatusCode service(const Gaudi::Utils::TypeNameString &name, T *&svc, bool createIf=true)
Templated method to access a service by name.
MsgStream & error() const
shortcut for the method msgStream(MSG::ERROR)
bool isEnabled() const override
Is this algorithm enabled or disabled?
Helper class to parse a string of format "type/name".
StatusCode execute() override
The actions to be performed by the sequencer on an event.
MsgStream & warning() const
shortcut for the method msgStream(MSG::WARNING)
StatusCode decodeMemberNames()
Decode Member Name list.
StatusCode createAndAppendToBranch(const std::string &type, const std::string &name, Algorithm *&pAlgorithm)
Create a algorithm and append it to the sequencer branch.
This class is used for returning status codes from appropriate routines.
const EventContext & getContext() const override
get the context
Gaudi::Property< std::vector< std::string > > m_names
T find_first_of(T...args)
std::ostream & toControlFlowExpression(std::ostream &os) const override
Produce string represention of the control flow expression.
The IAlgorithm is the interface implemented by the Algorithm base class.
SmartIF< ISvcLocator > & serviceLocator() const override
The standard service locator.
constexpr static const auto SUCCESS
const std::vector< Algorithm * > * subAlgorithms() const
List of sub-algorithms. Returns a pointer to a vector of (sub) Algorithms.
Base class from which all concrete algorithm classes should be derived.
std::vector< Algorithm * > m_branchAlgs
MsgStream & debug() const
shortcut for the method msgStream(MSG::DEBUG)
std::vector< bool > m_isInverted
StatusCode createAndAppend(const std::string &type, const std::string &name, Algorithm *&pAlgorithm)
Create a algorithm and append it to the sequencer.
const std::string & type() const
const StatusCode & ignore() const
Ignore/check StatusCode.
bool filterPassed() const override
Did this algorithm pass or fail its filter criterion for the last event?
StatusCode appendToBranch(Algorithm *pAlgorithm)
Append an algorithm to the sequencer branch.
void setExecuted(bool state) const override
Set the executed flag to the specified state.
StatusCode decodeNames(Gaudi::Property< std::vector< std::string >> &theNames, std::vector< Algorithm * > &theAlgs, std::vector< bool > &theLogic)
Decode algorithm names, creating or appending algorithms as appropriate.
StatusCode finalize() override
Sequencer finalization.
StatusCode initialize() override
Initialization of a sequencer.
const std::string & name() const
std::string typeName(const std::type_info &typ)
const std::string & type() const override
The type of the algorithm object.
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
void resetExecuted() override
Reset the Sequencer executed state for the current event.
StatusCode sysExecute(const EventContext &ctx) override
The actions to be performed by the algorithm on an event.
std::vector< bool > m_isBranchInverted
StatusCode start() override
Sequencer finalization.