14 #define ON_DEBUG if ( msgLevel( MSG::DEBUG ) ) 15 #define ON_VERBOSE if ( msgLevel( MSG::VERBOSE ) ) 37 error() <<
"Unable to configure one or more sequencer members " <<
endmsg;
42 error() <<
"Unable to configure one or more branch members " <<
endmsg;
48 result = alg->sysInitialize();
50 error() <<
"Unable to initialize Algorithm " << alg->name() <<
endmsg;
57 result = alg->sysInitialize();
59 error() <<
"Unable to initialize Algorithm " << alg->name() <<
endmsg;
75 if ( alg->isEnabled() ) alg->reinitialize().
ignore();
80 if ( alg->isEnabled() ) {
81 alg->reinitialize().
ignore();
107 if ( !theAlgs.empty() ) {
109 if ( lastAlgorithm == branchAlgorithm ) {
138 if ( alg->sysFinalize().isFailure() ) {
139 error() <<
"Unable to finalize Algorithm " << alg->name() <<
endmsg;
151 result = alg->sysStart();
153 error() <<
"Unable to start Algorithm " << alg->name() <<
endmsg;
160 result = alg->sysStart();
162 error() <<
"Unable to start Algorithm " << alg->name() <<
endmsg;
176 if ( alg->sysStop().isFailure() ) {
177 error() <<
"Unable to stop Algorithm " << alg->name() <<
endmsg;
182 if ( alg->sysStop().isFailure() ) {
183 error() <<
"Unable to stop Algorithm " << alg->name() <<
endmsg;
265 pAlgorithm->addRef();
276 StatusCode result = theAlgMgr->createAlgorithm( type, algName, tmp );
279 pAlgorithm =
dynamic_cast<Algorithm*
>( tmp );
282 error() <<
"Unable to create Algorithm " << algName <<
endmsg;
301 for (
const auto&
n : theNames.value() ) {
319 bool isInverted =
false;
320 std::string::size_type invert = theName.
find_first_of(
":" );
322 while ( std::string::npos != invert && invert < ( theName.
size() - 1 ) && theName[invert + 1] ==
':' )
324 if ( std::string::npos != invert ) {
325 if ( theName == theType ) {
328 theType = theType.
substr( 0, invert );
330 theName = theName.
substr( 0, invert );
340 theAlgorithm =
dynamic_cast<Algorithm*
>( theIAlg.
get() );
342 warning() << theName <<
" is not an Algorithm - Failed dynamic cast" <<
endmsg;
343 theAlgorithm =
nullptr;
346 if ( theAlgorithm ) {
349 status =
append( theAlgorithm, theAlgs );
353 warning() << theName <<
" already exists - append failed!!!" <<
endmsg;
362 ON_DEBUG debug() << theName <<
" doesn't exist - created and appended to member list" <<
endmsg;
364 warning() << theName <<
" doesn't exist - creation failed!!!" <<
endmsg;
373 info() <<
"Member list: ";
374 auto ai = theAlgs.
begin();
375 auto li = theLogic.
begin();
376 for ( ; ai != theAlgs.
end(); ++ai, ++li ) {
378 if ( ai != theAlgs.
begin() )
info() <<
", ";
381 info() << alg->name();
385 if ( *li )
info() <<
":invert";
393 Algorithm*& lastAlgorithm,
unsigned int first )
402 for (
unsigned int i = first; i <
size; i++ ) {
403 lastAlgorithm = theAlgs[i];
410 bool isInverted = theLogic[i];
411 if ( isInverted ) passed = !passed;
418 if ( !passed )
break;
443 for (
auto& alg : theAlgs ) {
444 if ( alg->name() == algname ) {
448 info() <<
"Sequencer::remove( ) isn't implemented yet!!!!!" <<
endmsg;
459 if ( theAlgs.empty() )
return os <<
"CFTrue";
462 const auto algs_count = theAlgs.size();
465 while ( i < algs_count ) {
468 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.
The ISvcLocator is the interface implemented by the Service Factory in the Application Manager to loc...
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.
Sequencer(const std::string &name, ISvcLocator *svcloc)
Constructor(s)
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.
PropertyBase base class allowing PropertyBase* collections to be "homogeneous".
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.
bool isInitialized() const override
Has the Algorithm already been initialized?
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.