The Gaudi Framework  v32r2 (46d42edc)
ApplicationMgr Class Reference

The Application Manager class. More...

#include <src/ApplicationMgr/ApplicationMgr.h>

Inheritance diagram for ApplicationMgr:
Collaboration diagram for ApplicationMgr:

Public Member Functions

 ApplicationMgr (IInterface *=nullptr)
 
StatusCode queryInterface (const InterfaceID &iid, void **pinterface) override
 
StatusCode run () override
 
StatusCode configure () override
 
StatusCode terminate () override
 
StatusCode initialize () override
 
StatusCode start () override
 
StatusCode stop () override
 
StatusCode finalize () override
 
StatusCode nextEvent (int maxevt) override
 
const std::stringname () const override
 
EventContext createEventContext () override
 implementation of IEventProcessor::createEventContext() More...
 
StatusCode executeEvent (EventContext &&ctx) override
 implementation of IEventProcessor::executeEvent(void*) More...
 
StatusCode executeRun (int evtmax) override
 implementation of IEventProcessor::executeRun(int) More...
 
StatusCode stopRun () override
 implementation of IEventProcessor::stopRun() More...
 
Gaudi::StateMachine::State FSMState () const override
 
Gaudi::StateMachine::State targetFSMState () const override
 
StatusCode reinitialize () override
 
StatusCode restart () override
 
StatusCode sysInitialize () override
 
StatusCode sysStart () override
 
StatusCode sysStop () override
 
StatusCode sysFinalize () override
 
StatusCode sysReinitialize () override
 
StatusCode sysRestart () override
 
template<class I >
SmartIF< IComponentManager > & getManager ()
 
SmartIF< ISvcManager > & svcManager ()
 
SmartIF< IAlgManager > & algManager ()
 
SmartIF< ISvcLocator > & serviceLocator () const override
 Needed to locate the message service. More...
 
void outputLevelUpdate () override
 Function to call to update the outputLevel of the components (after a change in MessageSvc). More...
 
void printAlgsSequences ()
 Print the sequence of algorithms that have been loaded. More...
 
void push (EventContext &&ctx) override
 
bool empty () const override
 
std::optional< Gaudi::Interfaces::IQueueingEventProcessor::ResultTypepop () override
 
Gaudi::Details::PropertyBase handlers
void evtLoopPropertyHandler (Gaudi::Details::PropertyBase &theProp)
 
StatusCode decodeExtSvcNameList ()
 
StatusCode decodeCreateSvcNameList ()
 
void createSvcNameListHandler (Gaudi::Details::PropertyBase &)
 
void extSvcNameListHandler (Gaudi::Details::PropertyBase &theProp)
 
StatusCode decodeDllNameList ()
 
void dllNameListHandler (Gaudi::Details::PropertyBase &theProp)
 
void pluginDebugPropertyHandler (Gaudi::Details::PropertyBase &theProp)
 
- Public Member Functions inherited from PropertyHolder< CommonMessaging< implements< IAppMgrUI, Gaudi::Interfaces::IQueueingEventProcessor, IService, IStateful, INamedInterface, IProperty > > >
 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< IAppMgrUI, Gaudi::Interfaces::IQueueingEventProcessor, IService, IStateful, INamedInterface, IProperty > >
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...
 

Protected Types

typedef std::map< unsigned long, SmartIF< IComponentManager > > ManagersMap
 Typedef for the map of component managers, the key is the "id" field of the basic InterfaceID of the managed components. More...
 

Protected Member Functions

void setServiceManager (ISvcManager *) override
 
StatusCode i_startup ()
 Internal startup routine. More...
 
StatusCode GoToState (Gaudi::StateMachine::State state, bool ignoreFailures=false)
 Reach a state from current state (whichever it is) going through the correct transitions. More...
 
- Protected Member Functions inherited from PropertyHolder< CommonMessaging< implements< IAppMgrUI, Gaudi::Interfaces::IQueueingEventProcessor, IService, IStateful, INamedInterface, IProperty > > >
Gaudi::Details::PropertyBaseproperty (const std::string &name) const
 
- Protected Member Functions inherited from CommonMessaging< implements< IAppMgrUI, Gaudi::Interfaces::IQueueingEventProcessor, IService, IStateful, INamedInterface, IProperty > >
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

ManagersMap m_managers
 Map of known component managers. More...
 
Gaudi::Property< std::vector< std::string > > m_declaredManagers
 Property to declare the list of known managers. More...
 
SmartIF< ISvcManagerm_svcManager
 Cached pointer to the manager of services. More...
 
SmartIF< IAlgManagerm_algManager
 Cached pointer to the manager of algorithms. More...
 
SmartIF< ISvcLocatorm_svcLocator
 Reference to its own service locator (must be instantiated prior to any service!) More...
 
SmartIF< DLLClassManagerm_classManager
 Reference to the class manager. More...
 
Gaudi::Property< int > m_SIGo
 
Gaudi::Property< int > m_SIExit
 
Gaudi::Property< std::vector< std::string > > m_topAlgNameList
 
Gaudi::Property< std::vector< std::string > > m_outStreamNameList
 
Gaudi::Property< std::stringm_outStreamType
 
Gaudi::Property< std::stringm_messageSvcType {this, "MessageSvcType", "MessageSvc", "MessageSvc type"}
 
Gaudi::Property< std::stringm_jobOptionsSvcType {this, "JobOptionsSvcType", "JobOptionsSvc", "JobOptionsSvc type"}
 
std::string m_name = "ApplicationMgr"
 Name. More...
 
Gaudi::StateMachine::State m_state = Gaudi::StateMachine::OFFLINE
 Internal State. More...
 
Gaudi::StateMachine::State m_targetState = Gaudi::StateMachine::OFFLINE
 Internal State. More...
 
Gaudi::Property< std::vector< std::string > > m_svcMapping {this, "SvcMapping", {}, "Default mapping of services"}
 
Gaudi::Property< std::vector< std::string > > m_svcOptMapping
 
SmartIF< IMessageSvcm_messageSvc
 Reference to the message service. More...
 
SmartIF< IRunablem_runable
 Reference to the runable object. More...
 
SmartIF< IEventProcessorm_processingMgr
 Reference to processing manager object. More...
 
SmartIF< IJobOptionsSvcm_jobOptionsSvc
 Reference to JobOption service. More...
 
SmartIF< IQueueingEventProcessor > m_queueingProcessor
 Reference to a queueing processing manager object. More...
 
Gaudi::Property< int > m_evtMax {this, "EvtMax", -1, "Number of events to be processed (-1 means all events)"}
 
Gaudi::Property< std::vector< std::string > > m_extSvcNameList {this, "ExtSvc", {}, "List of external services names"}
 
Gaudi::Property< bool > m_extSvcCreates
 
Gaudi::Property< std::vector< std::string > > m_dllNameList {this, "Dlls", {}, "List of DDL's names"}
 
Gaudi::Property< std::stringm_jobOptionsType {this, "JobOptionsType", "FILE", "Source type (e.g. dbase, file...)"}
 
Gaudi::Property< std::stringm_jobOptionsPath {this, "JobOptionsPath", {}, "The \"file\" to look for properties"}
 
Gaudi::Property< std::stringm_jobOptionsPreAction
 
Gaudi::Property< std::stringm_jobOptionsPostAction
 
Gaudi::Property< std::stringm_runableType {this, "Runable", "AppMgrRunable", "Runable type"}
 
Gaudi::Property< std::stringm_eventLoopMgr {this, "EventLoop", "EventLoopMgr", "Processing manager type"}
 
Gaudi::Property< std::stringm_evtsel {this, "EvtSel", {}, "Event selection"}
 
Gaudi::Property< std::stringm_histPersName {this, "HistogramPersistency", "NONE", "Name of the Hist Pers Svc"}
 
Gaudi::Property< int > m_outputLevel {this, "OutputLevel", MSG::INFO, "Message output level"}
 
Gaudi::Property< std::stringm_appName {this, "AppName", "ApplicationMgr", "The name of the application"}
 
Gaudi::Property< std::stringm_appVersion {this, "AppVersion", {}, "The version of the application"}
 
Gaudi::Property< bool > m_actHistory {this, "ActivateHistory", false, "Activate HistorySvc"}
 
Gaudi::Property< bool > m_codeCheck {this, "StatusCodeCheck", false, "Activate StatusCode checking"}
 
Gaudi::Property< int > m_pluginDebugLevel
 
Gaudi::Property< std::vector< std::string > > m_createSvcNameList
 
Gaudi::Property< bool > m_auditTools {this, "AuditTools", false}
 Defaults for auditors. More...
 
Gaudi::Property< bool > m_auditSvcs {this, "AuditServices", false}
 
Gaudi::Property< bool > m_auditAlgs {this, "AuditAlgorithms", false}
 
Gaudi::Property< std::map< std::string, std::string > > m_environment
 
Gaudi::Property< bool > m_loopCheck
 
Gaudi::Property< bool > m_stopOnSignal
 Property to enable/disable the "stop on signal" service. More...
 
Gaudi::Property< bool > m_stalledEventMonitoring
 Property to enable/disable the monitoring and reporting of stalled events. More...
 
Gaudi::Property< bool > m_propertiesPrint
 
Gaudi::Property< int > m_returnCode
 Property to record the error conditions occurring during the running. More...
 
Gaudi::Property< bool > m_printAlgsSequence
 
bool m_useHiveAlgorithmManager
 

Static Private Member Functions

template<typename SELF , typename PIMPL , typename METHOD , typename... ARGS>
static auto i_delegateToEvtProc (SELF *self, PIMPL &member, std::string_view method_name, METHOD &&method, ARGS &&... args)
 Helper to delegate calls to event processor implementation. More...
 

Private Attributes

std::vector< std::stringm_okDlls
 names of successfully loaded dlls More...
 

Additional Inherited Members

- Public Types inherited from PropertyHolder< CommonMessaging< implements< IAppMgrUI, Gaudi::Interfaces::IQueueingEventProcessor, IService, IStateful, INamedInterface, IProperty > > >
using PropertyHolderImpl = PropertyHolder< CommonMessaging< implements< IAppMgrUI, Gaudi::Interfaces::IQueueingEventProcessor, IService, IStateful, INamedInterface, IProperty > > >
 Typedef used to refer to this class from derived classes, as in. More...
 
- Public Types inherited from CommonMessaging< implements< IAppMgrUI, Gaudi::Interfaces::IQueueingEventProcessor, IService, IStateful, INamedInterface, IProperty > >
using base_class = CommonMessaging
 

Detailed Description

The Application Manager class.

The main purpose of the Application Manager is to steer any data processing application. This includes all data processing applications for LHCb data in all stages: simulation, reconstruction, analysis, high level triggers, etc. Specific implementations of the ApplicationMgr will be developed to cope with the different environments (on-line, off-line, interactive, batch, etc.).

Author
Pere Mato

Definition at line 45 of file ApplicationMgr.h.

Member Typedef Documentation

◆ ManagersMap

typedef std::map<unsigned long, SmartIF<IComponentManager> > ApplicationMgr::ManagersMap
protected

Typedef for the map of component managers, the key is the "id" field of the basic InterfaceID of the managed components.

Definition at line 162 of file ApplicationMgr.h.

Constructor & Destructor Documentation

◆ ApplicationMgr()

ApplicationMgr::ApplicationMgr ( IInterface = nullptr)

Definition at line 48 of file ApplicationMgr.cpp.

48  {
49  // IInterface initialization
50  addRef(); // Initial count set to 1
51 
52  // Instantiate component managers
53  m_managers[IService::interfaceID().id()] = new ServiceManager( this );
54 
56 
57  // Instantiate internal services
58  // SvcLocator/Factory HAS to be already instantiated
59  m_classManager = new DLLClassManager( this );
60 
61  AlgorithmManager* algMgr = new AlgorithmManager( this );
62  m_managers[IAlgorithm::interfaceID().id()] = algMgr;
63  // m_managers[IAlgorithm::interfaceID().id()] = new HiveAlgorithmManager(this);
64 
65  // This property is not hosted in the ApplicationMgr instance
66  declareProperty( "AlgTypeAliases", algMgr->typeAliases(),
67  "Aliases of algorithm types, to replace an algorithm type for every instance" );
68 
69  // ServiceMgr Initialization loop checking
71 
72  m_svcMapping = {"EvtDataSvc/EventDataSvc",
73  "DetDataSvc/DetectorDataSvc",
74  "HistogramSvc/HistogramDataSvc",
75  "HbookCnv::PersSvc/HbookHistSvc",
76  "RootHistCnv::PersSvc/RootHistSvc",
77  "EvtPersistencySvc/EventPersistencySvc",
78  "DetPersistencySvc/DetectorPersistencySvc",
79  "HistogramPersistencySvc/HistogramPersistencySvc"};
80 }
The ServiceManager class is in charge of the creation of concrete instances of Services.
The AlgorithmManager class is in charge of the creation of concrete instances of Algorithms.
ManagersMap m_managers
Map of known component managers.
AlgTypeAliasesMap & typeAliases()
SmartIF< ISvcManager > & svcManager()
SmartIF< ISvcLocator > m_svcLocator
Reference to its own service locator (must be instantiated prior to any service!)
Gaudi::Property< std::vector< std::string > > m_svcMapping
SmartIF< DLLClassManager > m_classManager
Reference to the class manager.
virtual void setLoopCheckEnabled(bool en=true)=0
Set the value of the initialization loop check flag.
Gaudi::Property< bool > m_loopCheck

Member Function Documentation

◆ algManager()

SmartIF<IAlgManager>& ApplicationMgr::algManager ( )
inline

Definition at line 132 of file ApplicationMgr.h.

132  {
133  // Cache the casted pointer to IAlgManager
134  if ( !m_algManager ) { m_algManager = getManager<IAlgorithm>(); }
135  return m_algManager;
136  }
SmartIF< IAlgManager > m_algManager
Cached pointer to the manager of algorithms.

◆ configure()

StatusCode ApplicationMgr::configure ( )
override

Definition at line 221 of file ApplicationMgr.cpp.

221  {
222 
223  // Check if the state is compatible with the transition
224  MsgStream tlog( m_messageSvc, name() );
226  tlog << MSG::INFO << "Already Configured" << endmsg;
227  return StatusCode::SUCCESS;
228  }
230  tlog << MSG::FATAL << "configure: Invalid state \"" << m_state << "\"" << endmsg;
231  return StatusCode::FAILURE;
232  }
234 
235  // Reset application return code.
237 
238  StatusCode sc;
239  sc = i_startup();
240  if ( !sc.isSuccess() ) { return sc; }
241 
242  {
244  // Get my own options using the Job options service
245  if ( log.level() <= MSG::DEBUG ) log << MSG::DEBUG << "Getting my own properties" << endmsg;
246  sc = m_jobOptionsSvc->setMyProperties( name(), this );
247  if ( !sc.isSuccess() ) {
248  log << MSG::WARNING << "Problems getting my properties from JobOptionsSvc" << endmsg;
249  return sc;
250  }
251  }
252 
253  // Make sure that the OutputLevel is in sync
256 
257  // Check current outputLevel to eventually inform the MessageSvc
258  if ( m_outputLevel != MSG::NIL && !m_appName.empty() ) {
259  // Print a welcome message
261  << "=================================================================="
262  << "==================================================================" << std::endl
263  << " "
264  << " Welcome to " << m_appName.value();
265 
266  if ( !m_appVersion.empty() ) {
267  log << MSG::ALWAYS << " version " << m_appVersion.value();
268  } else {
269  log << MSG::ALWAYS << " (GaudiCoreSvc "
270  << "v" << GAUDICORESVC_MAJOR_VERSION << "r" << GAUDICORESVC_MINOR_VERSION
271 #if GAUDICORESVC_PATCH_VERSION
272  << "p" << GAUDICORESVC_PATCH_VERSION
273 #endif
274  << ")";
275  }
276 
277  // Add the host name and current time to the message
279  << " "
280  << " running on " << System::hostName() << " on " << Gaudi::Time::current().format( true ) << std::endl
281  << "=================================================================="
282  << "==================================================================" << endmsg;
283  }
284 
285  // print all own properties if the options "PropertiesPrint" is set to true
286  if ( m_propertiesPrint ) {
287  const auto& properties = getProperties();
288  log << MSG::ALWAYS << "List of ALL properties of " << System::typeinfoName( typeid( *this ) ) << "/" << this->name()
289  << " #properties = " << properties.size() << endmsg;
290  for ( const auto& property : properties ) { log << "Property ['Name': Value] = " << *property << endmsg; }
291  }
292 
293  // Check if StatusCode need to be checked
294  if ( m_codeCheck ) {
296  sc = svcManager()->addService( "StatusCodeSvc", -9999 );
297  if ( sc.isFailure() ) {
298  log << MSG::FATAL << "Error adding StatusCodeSvc" << endmsg;
299  return StatusCode::FAILURE;
300  } else {
301  ON_VERBOSE
302  log << MSG::VERBOSE << "added service StatusCodeSvc" << endmsg;
303  }
304  } else {
306  }
307 
308  // set the requested environment variables
309  for ( auto& var : m_environment ) {
310  const std::string& name = var.first;
311  const std::string& value = var.second;
313  const MSG::Level lvl = ( !old.empty() && ( old != "UNKNOWN" ) ) ? MSG::WARNING : MSG::DEBUG;
314  if ( UNLIKELY( m_outputLevel <= lvl ) ) log << lvl << "Setting " << name << " = " << value << endmsg;
315  System::setEnv( name, value );
316  }
317 
318  // Declare Service Types
319  for ( auto& j : m_svcMapping ) {
321  if ( svcManager()->declareSvcType( itm.name(), itm.type() ).isFailure() ) {
322  log << MSG::ERROR << "configure: declaring svc type:'" << j << "' failed." << endmsg;
323  return StatusCode::FAILURE;
324  } else {
325  ON_VERBOSE
326  log << MSG::VERBOSE << "declared service " << j << endmsg;
327  }
328  }
329  for ( auto& j : m_svcOptMapping ) {
331  if ( svcManager()->declareSvcType( itm.name(), itm.type() ).isFailure() ) {
332  log << MSG::ERROR << "declaring svc type:'" << j << "' failed." << endmsg;
333  return StatusCode::FAILURE;
334  }
335  }
336 
337  //--------------------------------------------------------------------------
338  // Declare other Services and Algorithms by loading DLL's
339  sc = decodeDllNameList();
340  if ( sc.isFailure() ) {
341  log << MSG::ERROR << "Failure loading declared DLL's" << endmsg;
342  return sc;
343  }
344 
345  //--------------------------------------------------------------------------
346  // Deal with the services explicitly declared by the user.
347  sc = decodeExtSvcNameList();
348  if ( sc.isFailure() ) {
349  log << MSG::ERROR << "Failure during external service association" << endmsg;
350  return sc;
351  }
352 
354  if ( sc.isFailure() ) {
355  log << MSG::ERROR << "Failure during external service creation" << endmsg;
356  return sc;
357  }
358 
359  //--------------------------------------------------------------------------
360  // Retrieve intrinsic services. If needed configure them.
361  //--------------------------------------------------------------------------
362  const Gaudi::Utils::TypeNameString evtloop_item( m_eventLoopMgr );
363  sc = svcManager()->addService( evtloop_item, ServiceManager::DEFAULT_SVC_PRIORITY * 10 );
364  if ( !sc.isSuccess() ) {
365  log << MSG::FATAL << "Error adding :" << m_eventLoopMgr << endmsg;
366  return sc;
367  } else {
368  ON_VERBOSE
369  log << MSG::VERBOSE << "added service " << evtloop_item << endmsg;
370  }
371 
373  if ( !m_runable ) {
374  log << MSG::FATAL << "Error retrieving Runable: " << m_runableType.value() << "\n Check option ApplicationMgr."
375  << m_runableType.name() << endmsg;
376  return sc;
377  }
378  m_processingMgr = m_svcLocator->service( evtloop_item );
379  if ( !m_processingMgr ) {
380  log << MSG::FATAL << "Error retrieving Processing manager: " << m_eventLoopMgr.value()
381  << "\n Check option ApplicationMgr." << m_eventLoopMgr.name() << "\n No events will be processed." << endmsg;
382  return sc;
383  }
384  // The IEventProcessor might also be an IQueueingEventProcessor
386 
387  // Establish Update Handlers for ExtSvc and DLLs Properties
388  m_extSvcNameList.declareUpdateHandler( &ApplicationMgr::extSvcNameListHandler, this );
389  m_createSvcNameList.declareUpdateHandler( &ApplicationMgr::createSvcNameListHandler, this );
390  m_dllNameList.declareUpdateHandler( &ApplicationMgr::dllNameListHandler, this );
391 
392  if ( m_actHistory ) {
393  // Create HistorySvc with a priority to ensure it's initialized last, finalized first
394  sc = svcManager()->addService( "HistorySvc", std::numeric_limits<int>::max() );
395  if ( sc.isFailure() ) {
396  log << MSG::FATAL << "Error adding HistorySvc" << endmsg;
397  return StatusCode::FAILURE;
398  }
399  }
400 
401  log << MSG::INFO << "Application Manager Configured successfully" << endmsg;
403  return StatusCode::SUCCESS;
404 }
Gaudi::StateMachine::State m_targetState
Internal State.
GAUDI_API std::string getEnv(const char *var)
get a particular environment variable (returning "UNKNOWN" if not set)
Definition: System.cpp:369
#define UNLIKELY(x)
Definition: Kernel.h:96
virtual StatusCode addService(IService *svc, int prio=DEFAULT_SVC_PRIORITY)=0
Add a service to the "active" list of services of the factory.
Definition of the MsgStream class used to transmit messages.
Definition: MsgStream.h:24
Gaudi::Property< bool > m_propertiesPrint
T empty(T... args)
StatusCode decodeDllNameList()
Gaudi::Property< int > m_returnCode
Property to record the error conditions occurring during the running.
GAUDI_API int setEnv(const std::string &name, const std::string &value, int overwrite=1)
Set an environment variables.
Definition: System.cpp:482
Gaudi::Property< bool > m_codeCheck
SmartIF< IRunable > m_runable
Reference to the runable object.
GAUDI_API const std::string typeinfoName(const std::type_info &)
Get platform independent information about the class type.
Definition: System.cpp:298
T endl(T... args)
static Time current()
Returns the current time.
Definition: Time.cpp:109
Gaudi::Property< std::map< std::string, std::string > > m_environment
constexpr static const auto SUCCESS
Definition: StatusCode.h:85
Gaudi::Property< std::string > m_appVersion
static GAUDI_API void enableChecking()
Definition: StatusCode.cpp:42
SmartIF< IJobOptionsSvc > m_jobOptionsSvc
Reference to JobOption service.
void createSvcNameListHandler(Gaudi::Details::PropertyBase &)
SmartIF< IEventProcessor > m_processingMgr
Reference to processing manager object.
SmartIF< ISvcManager > & svcManager()
Gaudi::Property< std::string > m_eventLoopMgr
STL class.
StatusCode service(const Gaudi::Utils::TypeNameString &name, T *&svc, bool createIf=true)
Templated method to access a service by name.
Definition: ISvcLocator.h:76
Gaudi::Property< int > m_outputLevel
Helper class to parse a string of format "type/name".
void extSvcNameListHandler(Gaudi::Details::PropertyBase &theProp)
SmartIF< ISvcLocator > m_svcLocator
Reference to its own service locator (must be instantiated prior to any service!)
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:50
virtual StatusCode setMyProperties(const std::string &client, IProperty *me)=0
Override default properties of the calling client.
Gaudi::Property< std::vector< std::string > > m_extSvcNameList
void dllNameListHandler(Gaudi::Details::PropertyBase &theProp)
Gaudi::Property< std::string > m_runableType
bool isSuccess() const
Definition: StatusCode.h:267
Gaudi::Property< std::vector< std::string > > m_svcOptMapping
Gaudi::Property< std::vector< std::string > > m_svcMapping
Gaudi::Property< std::vector< std::string > > m_dllNameList
Gaudi::Property< bool > m_actHistory
StatusCode decodeExtSvcNameList()
GAUDI_API const std::string & hostName()
Host name.
Definition: System.cpp:303
std::string format(bool local, std::string spec="%c") const
Format the time using strftime.
Definition: Time.cpp:252
Gaudi::Property< std::vector< std::string > > m_createSvcNameList
StatusCode decodeCreateSvcNameList()
T c_str(T... args)
constexpr static const auto FAILURE
Definition: StatusCode.h:86
StatusCode i_startup()
Internal startup routine.
static GAUDI_API void disableChecking()
Definition: StatusCode.cpp:44
#define ON_VERBOSE
Gaudi::StateMachine::State m_state
Internal State.
bool isFailure() const
Definition: StatusCode.h:130
Gaudi::Property< std::string > m_appName
constexpr int Success
Definition: AppReturnCode.h:16
SmartIF< IQueueingEventProcessor > m_queueingProcessor
Reference to a queueing processing manager object.
const std::string & name() const override
SmartIF< IMessageSvc > m_messageSvc
Reference to the message service.
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:192
virtual void setOutputLevel(int new_level)=0
Set new global output level threshold.

◆ createEventContext()

EventContext ApplicationMgr::createEventContext ( )
override

implementation of IEventProcessor::createEventContext()

Definition at line 809 of file ApplicationMgr.cpp.

809  {
812  }
814  ss << "createEventContext: Invalid state \"" << FSMState() << '"';
815  throw GaudiException( ss.str(), name(), StatusCode::FAILURE );
816 }
Define general base for Gaudi exception.
SmartIF< IEventProcessor > m_processingMgr
Reference to processing manager object.
T str(T... args)
virtual EventContext createEventContext()=0
constexpr static const auto FAILURE
Definition: StatusCode.h:86
Gaudi::StateMachine::State m_state
Internal State.
Gaudi::StateMachine::State FSMState() const override
const std::string & name() const override

◆ createSvcNameListHandler()

void ApplicationMgr::createSvcNameListHandler ( Gaudi::Details::PropertyBase )

Definition at line 915 of file ApplicationMgr.cpp.

915  {
916  if ( !( decodeCreateSvcNameList() ).isSuccess() ) {
917  throw GaudiException( "Failed to create ext services", "MinimalEventLoopMgr::createSvcNameListHandler",
919  }
920 }
Define general base for Gaudi exception.
StatusCode decodeCreateSvcNameList()
constexpr static const auto FAILURE
Definition: StatusCode.h:86

◆ decodeCreateSvcNameList()

StatusCode ApplicationMgr::decodeCreateSvcNameList ( )

Definition at line 924 of file ApplicationMgr.cpp.

924  {
926  const auto& theNames = m_createSvcNameList.value();
927  auto it = theNames.begin();
928  auto et = theNames.end();
929  while ( result.isSuccess() && it != et ) {
930  Gaudi::Utils::TypeNameString item( *it++ );
931  if ( ( result = svcManager()->addService( item, ServiceManager::DEFAULT_SVC_PRIORITY ) ).isFailure() ) {
933  log << MSG::ERROR << "decodeCreateSvcNameList: Cannot create service " << item.type() << "/" << item.name()
934  << endmsg;
935  } else {
936  ON_DEBUG {
938  log << MSG::DEBUG << "decodeCreateSvcNameList: Created service " << item.type() << "/" << item.name() << endmsg;
939  }
940  }
941  }
942  return result;
943 }
Definition of the MsgStream class used to transmit messages.
Definition: MsgStream.h:24
constexpr static const auto SUCCESS
Definition: StatusCode.h:85
SmartIF< ISvcManager > & svcManager()
Helper class to parse a string of format "type/name".
#define ON_DEBUG
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:50
bool isSuccess() const
Definition: StatusCode.h:267
Gaudi::Property< std::vector< std::string > > m_createSvcNameList
std::string m_name
Name.
SmartIF< IMessageSvc > m_messageSvc
Reference to the message service.
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:192

◆ decodeDllNameList()

StatusCode ApplicationMgr::decodeDllNameList ( )

Definition at line 996 of file ApplicationMgr.cpp.

996  {
997 
1000 
1001  // Clean up multiple entries from DLL list
1002  // -------------------------------------------------------------------------
1003  std::vector<std::string> newList;
1004  std::map<std::string, unsigned int> dllInList, duplicateList;
1005  {
1006  for ( const auto it : m_dllNameList ) {
1007  if ( 0 == dllInList[it] ) {
1008  newList.push_back( it ); // first instance of this module
1009  } else {
1010  ++duplicateList[it];
1011  } // module listed multiple times
1012  ++dllInList[it]; // increment count for this module
1013  }
1014  }
1015  // m_dllNameList = newList; // update primary list to new, filtered list (do not use the
1016  // property itself otherwise we get called again infinitely)
1017  // List modules that were in there twice..
1018  ON_DEBUG if ( !duplicateList.empty() ) {
1019  log << MSG::DEBUG << "Removed duplicate entries for modules : ";
1020  for ( auto it = duplicateList.begin(); it != duplicateList.end(); ++it ) {
1021  log << it->first << "(" << 1 + it->second << ")";
1022  if ( it != --duplicateList.end() ) log << ", ";
1023  }
1024  log << endmsg;
1025  }
1026  // -------------------------------------------------------------------------
1027 
1028  const std::vector<std::string>& theNames = newList;
1029 
1030  // only load the new dlls or previously failed dlls
1031  ON_DEBUG log << MSG::DEBUG << "Loading declared DLL's" << endmsg;
1032 
1033  std::vector<std::string> successNames, failNames;
1034  for ( const auto& it : theNames ) {
1035  if ( std::find( m_okDlls.rbegin(), m_okDlls.rend(), it ) == m_okDlls.rend() ) {
1036  // found a new module name
1037  StatusCode status = m_classManager->loadModule( it );
1038  if ( status.isFailure() ) {
1039  failNames.push_back( it );
1040  result = StatusCode::FAILURE;
1041  } else {
1042  successNames.push_back( it );
1043  }
1044  }
1045  }
1046 
1047  // report back to the user and store the names of the succesfully loaded dlls
1048  if ( !successNames.empty() ) {
1049  log << MSG::INFO << "Successfully loaded modules : ";
1050  for ( auto it = successNames.begin(); it != successNames.end(); it++ ) {
1051  log << ( *it );
1052  if ( ( it + 1 ) != successNames.end() ) log << ", ";
1053  // save name
1054  m_okDlls.push_back( *it );
1055  }
1056  log << endmsg;
1057  }
1058 
1059  if ( result == StatusCode::FAILURE ) {
1060  log << MSG::WARNING << "Failed to load modules: ";
1061  for ( auto it = failNames.begin(); it != failNames.end(); it++ ) {
1062  log << ( *it );
1063  if ( ( it + 1 ) != failNames.end() ) log << ", ";
1064  }
1065  log << endmsg;
1066  }
1067  return result;
1068 }
Definition of the MsgStream class used to transmit messages.
Definition: MsgStream.h:24
T empty(T... args)
StatusCode loadModule(const std::string &module, bool fireIncident=true) override
T rend(T... args)
constexpr static const auto SUCCESS
Definition: StatusCode.h:85
T end(T... args)
std::vector< std::string > m_okDlls
names of successfully loaded dlls
T push_back(T... args)
#define ON_DEBUG
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:50
Gaudi::Property< std::vector< std::string > > m_dllNameList
T find(T... args)
SmartIF< DLLClassManager > m_classManager
Reference to the class manager.
T begin(T... args)
constexpr static const auto FAILURE
Definition: StatusCode.h:86
std::string m_name
Name.
bool isFailure() const
Definition: StatusCode.h:130
SmartIF< IMessageSvc > m_messageSvc
Reference to the message service.
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:192
T rbegin(T... args)

◆ decodeExtSvcNameList()

StatusCode ApplicationMgr::decodeExtSvcNameList ( )

Definition at line 958 of file ApplicationMgr.cpp.

958  {
960 
961  const auto& theNames = m_extSvcNameList.value();
962 
963  auto it = theNames.begin();
964  auto et = theNames.end();
965  while ( result.isSuccess() && it != et ) {
966  Gaudi::Utils::TypeNameString item( *it++ );
967  if ( m_extSvcCreates ) {
968  if ( ( result = svcManager()->addService( item, ServiceManager::DEFAULT_SVC_PRIORITY ) ).isFailure() ) {
970  log << MSG::ERROR << "decodeExtSvcNameList: Cannot create service " << item.type() << "/" << item.name()
971  << endmsg;
972  }
973  } else {
974  if ( ( result = svcManager()->declareSvcType( item.name(), item.type() ) ).isFailure() ) {
976  log << MSG::ERROR << "decodeExtSvcNameList: Cannot declare service " << item.type() << "/" << item.name()
977  << endmsg;
978  }
979  }
980  }
981  return result;
982 }
Definition of the MsgStream class used to transmit messages.
Definition: MsgStream.h:24
constexpr static const auto SUCCESS
Definition: StatusCode.h:85
SmartIF< ISvcManager > & svcManager()
Helper class to parse a string of format "type/name".
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:50
Gaudi::Property< std::vector< std::string > > m_extSvcNameList
bool isSuccess() const
Definition: StatusCode.h:267
Gaudi::Property< bool > m_extSvcCreates
std::string m_name
Name.
SmartIF< IMessageSvc > m_messageSvc
Reference to the message service.
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:192

◆ dllNameListHandler()

void ApplicationMgr::dllNameListHandler ( Gaudi::Details::PropertyBase theProp)

Definition at line 987 of file ApplicationMgr.cpp.

987  {
988  if ( !( decodeDllNameList() ).isSuccess() ) {
989  throw GaudiException( "Failed to load DLLs.", "MinimalEventLoopMgr::dllNameListHandler", StatusCode::FAILURE );
990  }
991 }
Define general base for Gaudi exception.
StatusCode decodeDllNameList()
constexpr static const auto FAILURE
Definition: StatusCode.h:86

◆ empty()

bool ApplicationMgr::empty ( ) const
override

Definition at line 801 of file ApplicationMgr.cpp.

801  {
803 }
static auto i_delegateToEvtProc(SELF *self, PIMPL &member, std::string_view method_name, METHOD &&method, ARGS &&... args)
Helper to delegate calls to event processor implementation.
virtual bool empty() const =0
Tell if the processor has events in the queues.
SmartIF< IQueueingEventProcessor > m_queueingProcessor
Reference to a queueing processing manager object.

◆ evtLoopPropertyHandler()

void ApplicationMgr::evtLoopPropertyHandler ( Gaudi::Details::PropertyBase theProp)

Definition at line 905 of file ApplicationMgr.cpp.

905  {
906  if ( m_processingMgr ) {
907  auto props = m_processingMgr.as<IProperty>();
908  if ( props ) props->setProperty( p ).ignore();
909  }
910 }
SmartIF< IFace > as() const
return a new SmartIF instance to another interface
Definition: SmartIF.h:107
SmartIF< IEventProcessor > m_processingMgr
Reference to processing manager object.
virtual StatusCode setProperty(const Gaudi::Details::PropertyBase &p)=0
Set the property by property.
const StatusCode & ignore() const
Ignore/check StatusCode.
Definition: StatusCode.h:153
The IProperty is the basic interface for all components which have properties that can be set or get.
Definition: IProperty.h:20

◆ executeEvent()

StatusCode ApplicationMgr::executeEvent ( EventContext &&  ctx)
override

implementation of IEventProcessor::executeEvent(void*)

Definition at line 787 of file ApplicationMgr.cpp.

787  {
789  if ( m_processingMgr ) { return m_processingMgr->executeEvent( std::move( ctx ) ); }
790  }
792  log << MSG::FATAL << "executeEvent: Invalid state \"" << FSMState() << "\"" << endmsg;
793  return StatusCode::FAILURE;
794 }
Definition of the MsgStream class used to transmit messages.
Definition: MsgStream.h:24
virtual StatusCode executeEvent(EventContext &&ctx)=0
Process single event.
SmartIF< IEventProcessor > m_processingMgr
Reference to processing manager object.
T move(T... args)
constexpr static const auto FAILURE
Definition: StatusCode.h:86
Gaudi::StateMachine::State m_state
Internal State.
Gaudi::StateMachine::State FSMState() const override
const std::string & name() const override
SmartIF< IMessageSvc > m_messageSvc
Reference to the message service.
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:192

◆ executeRun()

StatusCode ApplicationMgr::executeRun ( int  evtmax)
override

implementation of IEventProcessor::executeRun(int)

Definition at line 820 of file ApplicationMgr.cpp.

820  {
823  if ( m_processingMgr ) { return m_processingMgr->executeRun( evtmax ); }
824  log << MSG::WARNING << "No EventLoop Manager specified " << endmsg;
825  return StatusCode::SUCCESS;
826  }
827  log << MSG::FATAL << "executeRun: Invalid state \"" << FSMState() << "\"" << endmsg;
828  return StatusCode::FAILURE;
829 }
Definition of the MsgStream class used to transmit messages.
Definition: MsgStream.h:24
constexpr static const auto SUCCESS
Definition: StatusCode.h:85
SmartIF< IEventProcessor > m_processingMgr
Reference to processing manager object.
constexpr static const auto FAILURE
Definition: StatusCode.h:86
Gaudi::StateMachine::State m_state
Internal State.
Gaudi::StateMachine::State FSMState() const override
virtual StatusCode executeRun(int maxevt)=0
Process the maxevt events as a Run.
const std::string & name() const override
SmartIF< IMessageSvc > m_messageSvc
Reference to the message service.
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:192

◆ extSvcNameListHandler()

void ApplicationMgr::extSvcNameListHandler ( Gaudi::Details::PropertyBase theProp)

Definition at line 948 of file ApplicationMgr.cpp.

948  {
949  if ( !( decodeExtSvcNameList() ).isSuccess() ) {
950  throw GaudiException( "Failed to declare ext services", "MinimalEventLoopMgr::extSvcNameListHandler",
952  }
953 }
Define general base for Gaudi exception.
StatusCode decodeExtSvcNameList()
constexpr static const auto FAILURE
Definition: StatusCode.h:86

◆ finalize()

StatusCode ApplicationMgr::finalize ( )
override

Definition at line 572 of file ApplicationMgr.cpp.

572  {
575  log << MSG::INFO << "Already Finalized" << endmsg;
576  return StatusCode::SUCCESS;
577  }
579  log << MSG::FATAL << "finalize: Invalid state \"" << m_state << "\"" << endmsg;
580  return StatusCode::FAILURE;
581  }
583 
584  // disable message suppression in finalize
585  m_svcLocator->service<IProperty>( "MessageSvc" )
586  ->setProperty( Gaudi::Property<bool>( "enableSuppression", false ) )
587  .ignore();
588 
589  // Finalize independently managed Algorithms
590  StatusCode sc = algManager()->finalize();
591  if ( sc.isFailure() ) {
592  log << MSG::WARNING << "Failed to finalize an algorithm." << endmsg;
594  }
595 
596  // Finalize all Services
597  sc = svcManager()->finalize();
598  if ( sc.isFailure() ) {
599  log << MSG::WARNING << "Failed to finalize a service." << endmsg;
601  }
602 
603  // svcManager()->removeService( (IService*) m_processingMgr.get() );
604  // svcManager()->removeService( (IService*) m_runable.get() );
605 
607 
608  if ( sc.isSuccess() ) {
609  log << MSG::INFO << "Application Manager Finalized successfully" << endmsg;
610  } else {
611  log << MSG::ERROR << "Application Manager failed to finalize" << endmsg;
612  }
613 
615  return sc;
616 }
Gaudi::StateMachine::State m_targetState
Internal State.
constexpr int FinalizationFailure
Error codes for operation failures.
Definition: AppReturnCode.h:32
Definition of the MsgStream class used to transmit messages.
Definition: MsgStream.h:24
Gaudi::Property< int > m_returnCode
Property to record the error conditions occurring during the running.
Gaudi::Property< bool > m_codeCheck
Implementation of property with value of concrete type.
Definition: Property.h:352
constexpr static const auto SUCCESS
Definition: StatusCode.h:85
SmartIF< ISvcManager > & svcManager()
StatusCode service(const Gaudi::Utils::TypeNameString &name, T *&svc, bool createIf=true)
Templated method to access a service by name.
Definition: ISvcLocator.h:76
SmartIF< ISvcLocator > m_svcLocator
Reference to its own service locator (must be instantiated prior to any service!)
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:50
bool isSuccess() const
Definition: StatusCode.h:267
virtual StatusCode finalize()=0
Finalize (from INITIALIZED to CONFIGURED).
constexpr static const auto FAILURE
Definition: StatusCode.h:86
static GAUDI_API void disableChecking()
Definition: StatusCode.cpp:44
Gaudi::StateMachine::State m_state
Internal State.
bool isFailure() const
Definition: StatusCode.h:130
The IProperty is the basic interface for all components which have properties that can be set or get.
Definition: IProperty.h:20
SmartIF< IAlgManager > & algManager()
const std::string & name() const override
SmartIF< IMessageSvc > m_messageSvc
Reference to the message service.
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:192

◆ FSMState()

Gaudi::StateMachine::State ApplicationMgr::FSMState ( ) const
override

Definition at line 848 of file ApplicationMgr.cpp.

848 { return m_state; }
Gaudi::StateMachine::State m_state
Internal State.

◆ getManager()

template<class I >
SmartIF<IComponentManager>& ApplicationMgr::getManager ( )
inline

Definition at line 122 of file ApplicationMgr.h.

122  {
123  return m_managers[I::interfaceID().id()];
124  }
ManagersMap m_managers
Map of known component managers.

◆ GoToState()

StatusCode ApplicationMgr::GoToState ( Gaudi::StateMachine::State  state,
bool  ignoreFailures = false 
)
protected

Reach a state from current state (whichever it is) going through the correct transitions.

By default, if a transition fails, the chain is interrupted, but the behavior can be changed with the parameter "gnoreFailures"

Definition at line 675 of file ApplicationMgr.cpp.

675  {
677 
678  switch ( state ) {
679 
681  switch ( m_state ) {
683  return StatusCode::SUCCESS;
684  break;
686  return terminate();
687  break;
688  default: // Gaudi::StateMachine::INITIALIZED or Gaudi::StateMachine::RUNNING
690  if ( sc.isSuccess() ) { return terminate(); }
691  break;
692  }
693  break;
694 
696  switch ( m_state ) {
698  return StatusCode::SUCCESS;
699  break;
701  return configure();
702  break;
704  return finalize();
705  break;
706  default: // Gaudi::StateMachine::RUNNING
708  if ( sc.isSuccess() ) { return finalize(); }
709  break;
710  }
711  break;
712 
714  switch ( m_state ) {
716  return StatusCode::SUCCESS;
717  break;
719  return initialize();
720  break;
722  return stop();
723  break;
724  default: // Gaudi::StateMachine::OFFLINE
726  if ( sc.isSuccess() ) { return initialize(); }
727  break;
728  }
729  break;
730 
732  switch ( m_state ) {
734  return StatusCode::SUCCESS;
735  break;
737  return start();
738  break;
739  default: // Gaudi::StateMachine::OFFLINE or Gaudi::StateMachine::CONFIGURED
741  if ( sc.isSuccess() ) { return start(); }
742  break;
743  }
744  break;
745  }
746 
747  // If I get here, there has been a problem in the recursion
748 
749  if ( ignoreFailures ) {
750  // force the new state
751  m_state = state;
752  return StatusCode::SUCCESS;
753  }
754 
755  return sc;
756 }
StatusCode initialize() override
constexpr static const auto SUCCESS
Definition: StatusCode.h:85
StatusCode terminate() override
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:50
StatusCode GoToState(Gaudi::StateMachine::State state, bool ignoreFailures=false)
Reach a state from current state (whichever it is) going through the correct transitions.
bool isSuccess() const
Definition: StatusCode.h:267
StatusCode finalize() override
StatusCode start() override
StatusCode configure() override
StatusCode stop() override
Gaudi::StateMachine::State m_state
Internal State.

◆ i_delegateToEvtProc()

template<typename SELF , typename PIMPL , typename METHOD , typename... ARGS>
static auto ApplicationMgr::i_delegateToEvtProc ( SELF *  self,
PIMPL &  member,
std::string_view  method_name,
METHOD &&  method,
ARGS &&...  args 
)
inlinestaticprivate

Helper to delegate calls to event processor implementation.

Definition at line 298 of file ApplicationMgr.h.

299  {
300  if ( LIKELY( self->m_state == Gaudi::StateMachine::RUNNING ) ) {
301  if ( LIKELY( bool( member ) ) ) {
302  return std::invoke( method, *member.get(), std::forward<ARGS>( args )... );
303  } else {
305  s << method_name << ": event processor is not a \""
306  << System::typeinfoName( typeid( decltype( *member.get() ) ) ) << '"';
307  throw GaudiException{s.str(), self->name(), StatusCode::FAILURE};
308  }
309  }
311  s << method_name << ": Invalid state \"" << self->FSMState() << '"';
312  throw GaudiException{s.str(), self->name(), StatusCode::FAILURE};
313  }
Define general base for Gaudi exception.
GAUDI_API const std::string typeinfoName(const std::type_info &)
Get platform independent information about the class type.
Definition: System.cpp:298
#define LIKELY(x)
Definition: Kernel.h:95
string s
Definition: gaudirun.py:318
constexpr static const auto FAILURE
Definition: StatusCode.h:86

◆ i_startup()

StatusCode ApplicationMgr::i_startup ( )
protected

Internal startup routine.

Definition at line 111 of file ApplicationMgr.cpp.

111  {
112 
113  StatusCode sc;
114 
115  // declare factories in current module
117 
118  // Note: we cannot use CommonMessaging methods here because MessageSvc is not there yet
119  MsgStream log( nullptr, name() );
120 
121  // Create the Message service
122  auto msgsvc = svcManager()->createService( Gaudi::Utils::TypeNameString( "MessageSvc", m_messageSvcType ) );
123  if ( !msgsvc ) {
124  log << MSG::FATAL << "Error creating MessageSvc of type " << m_messageSvcType << endmsg;
125  return StatusCode::FAILURE;
126  }
127  // Get the useful interface from Message services
128  m_messageSvc = m_svcLocator->service( "MessageSvc" );
129  if ( !m_messageSvc ) {
130  log << MSG::FATAL << "Error retrieving MessageSvc." << endmsg;
131  return StatusCode::FAILURE;
132  }
133 
134  auto jobsvc = svcManager()->createService( Gaudi::Utils::TypeNameString( "JobOptionsSvc", m_jobOptionsSvcType ) );
135  // Create the Job Options service
136  if ( !jobsvc ) {
137  log << MSG::FATAL << "Error creating JobOptionsSvc" << endmsg;
138  return StatusCode::FAILURE;
139  }
140  // Get the useful interface from Message services
141  m_jobOptionsSvc = m_svcLocator->service( "JobOptionsSvc" );
142  if ( !m_jobOptionsSvc ) {
143  log << MSG::FATAL << "Error retrieving JobOptionsSvc." << endmsg;
144  return StatusCode::FAILURE;
145  }
146 
147  auto jobOptsIProp = jobsvc.as<IProperty>();
148  if ( !jobOptsIProp ) {
149  log << MSG::FATAL << "Error locating JobOptionsSvc" << endmsg;
150  return StatusCode::FAILURE;
151  }
152  sc = jobOptsIProp->setProperty( Gaudi::Property<std::string>( "TYPE", m_jobOptionsType ) );
153  if ( !sc.isSuccess() ) {
154  log << MSG::FATAL << "Error setting TYPE option in JobOptionsSvc" << endmsg;
155  return sc;
156  }
157 
158  if ( !m_jobOptionsPreAction.empty() ) {
159  sc = jobOptsIProp->setProperty( Gaudi::Property<std::string>( "PYTHONPARAMS", m_jobOptionsPreAction ) );
160  if ( !sc.isSuccess() ) {
161  log << MSG::FATAL << "Error setting JobOptionsPreAction option in JobOptionsSvc" << endmsg;
162  return sc;
163  }
164  }
165 
166  if ( !m_jobOptionsPostAction.empty() ) {
167  sc = jobOptsIProp->setProperty( Gaudi::Property<std::string>( "PYTHONACTION", m_jobOptionsPostAction ) );
168  if ( !sc.isSuccess() ) {
169  log << MSG::FATAL << "Error setting JobOptionsPostAction option in JobOptionsSvc" << endmsg;
170  return sc;
171  }
172  }
173 
174  if ( !m_jobOptionsPath.empty() ) { // The command line takes precedence
175  sc = jobOptsIProp->setProperty( Gaudi::Property<std::string>( "PATH", m_jobOptionsPath ) );
176  if ( !sc.isSuccess() ) {
177  log << MSG::FATAL << "Error setting PATH option in JobOptionsSvc" << endmsg;
178  return sc;
179  }
180  } else if ( isEnvSet( "JOBOPTPATH" ) ) { // Otherwise the Environment JOBOPTPATH
181  sc = jobOptsIProp->setProperty( Gaudi::Property<std::string>( "PATH", getEnv( "JOBOPTPATH" ) ) );
182  if ( !sc.isSuccess() ) {
183  log << MSG::FATAL << "Error setting PATH option in JobOptionsSvc from env" << endmsg;
184  return sc;
185  }
186  } else { // Otherwise the default
187  sc = jobOptsIProp->setProperty( Gaudi::Property<std::string>( "PATH", "../options/job.opts" ) );
188  if ( !sc.isSuccess() ) {
189  log << MSG::FATAL << "Error setting PATH option in JobOptionsSvc to default" << endmsg;
190  return sc;
191  }
192  }
193  jobOptsIProp.reset();
194 
195  // Sets my default the Output Level of the Message service to be
196  // the same as this
197  auto msgSvcIProp = msgsvc.as<IProperty>();
198  msgSvcIProp->setProperty( Gaudi::Property<int>( "OutputLevel", m_outputLevel ) ).ignore();
199  msgSvcIProp.reset();
200 
201  sc = jobsvc->sysInitialize();
202  if ( !sc.isSuccess() ) {
203  log << MSG::FATAL << "Error initializing JobOptionsSvc" << endmsg;
204  return sc;
205  }
206  sc = msgsvc->sysInitialize();
207  if ( !sc.isSuccess() ) {
208  log << MSG::FATAL << "Error initializing MessageSvc" << endmsg;
209  return sc;
210  }
211 
212  // Make sure output level caches are up to date.
214 
215  return sc;
216 }
GAUDI_API std::string getEnv(const char *var)
get a particular environment variable (returning "UNKNOWN" if not set)
Definition: System.cpp:369
Definition of the MsgStream class used to transmit messages.
Definition: MsgStream.h:24
StatusCode loadModule(const std::string &module, bool fireIncident=true) override
Implementation of property with value of concrete type.
Definition: Property.h:352
Gaudi::Property< std::string > m_jobOptionsType
void outputLevelUpdate() override
Function to call to update the outputLevel of the components (after a change in MessageSvc).
SmartIF< IJobOptionsSvc > m_jobOptionsSvc
Reference to JobOption service.
SmartIF< ISvcManager > & svcManager()
StatusCode service(const Gaudi::Utils::TypeNameString &name, T *&svc, bool createIf=true)
Templated method to access a service by name.
Definition: ISvcLocator.h:76
virtual StatusCode setProperty(const Gaudi::Details::PropertyBase &p)=0
Set the property by property.
Gaudi::Property< int > m_outputLevel
Helper class to parse a string of format "type/name".
SmartIF< ISvcLocator > m_svcLocator
Reference to its own service locator (must be instantiated prior to any service!)
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:50
virtual SmartIF< IService > & createService(const Gaudi::Utils::TypeNameString &nametype)=0
Creates and instance of a service type that has been declared beforehand and assigns it a name.
bool isSuccess() const
Definition: StatusCode.h:267
Gaudi::Property< std::string > m_jobOptionsPreAction
GAUDI_API bool isEnvSet(const char *var)
Check if an environment variable is set or not.
Definition: System.cpp:389
const StatusCode & ignore() const
Ignore/check StatusCode.
Definition: StatusCode.h:153
SmartIF< DLLClassManager > m_classManager
Reference to the class manager.
Gaudi::Property< std::string > m_jobOptionsSvcType
Gaudi::Property< std::string > m_jobOptionsPostAction
constexpr static const auto FAILURE
Definition: StatusCode.h:86
Gaudi::Property< std::string > m_messageSvcType
The IProperty is the basic interface for all components which have properties that can be set or get.
Definition: IProperty.h:20
const std::string & name() const override
SmartIF< IMessageSvc > m_messageSvc
Reference to the message service.
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:192
Gaudi::Property< std::string > m_jobOptionsPath

◆ initialize()

StatusCode ApplicationMgr::initialize ( )
override

Definition at line 409 of file ApplicationMgr.cpp.

409  {
410  StatusCode sc;
411 
413 
414  // Make sure output level caches are up to date.
416 
417  // I cannot add these services in configure() because they are coming from GaudiUtils
418  // and it messes up genconf when rebuilding it.
419  if ( m_stopOnSignal ) {
420  // Instantiate the service that schedules a stop when a signal is received
421  std::string svcname( "Gaudi::Utils::StopSignalHandler" );
422  sc = svcManager()->addService( svcname );
423  if ( sc.isFailure() ) {
424  log << MSG::INFO << "Cannot instantiate " << svcname << "signals will be ignored" << endmsg;
425  }
426  }
427 
428  if ( m_stalledEventMonitoring ) {
429  // Instantiate the service that schedules a stop when a signal is received
430  std::string svcname( "StalledEventMonitor" );
431  sc = svcManager()->addService( svcname );
432  if ( sc.isFailure() ) {
433  log << MSG::INFO << "Cannot instantiate " << svcname << "signals will be ignored" << endmsg;
434  }
435  }
436 
438  log << MSG::INFO << "Already Initialized!" << endmsg;
439  return StatusCode::SUCCESS;
440  }
442  log << MSG::FATAL << "initialize: Invalid state \"" << m_state << "\"" << endmsg;
443  return StatusCode::FAILURE;
444  }
446 
447  //--------------------------------------------------------------------------
448  // Initialize the list of top Services
449  //--------------------------------------------------------------------------
450  sc = svcManager()->initialize();
451  if ( !sc.isSuccess() ) return sc;
452 
453  sc = algManager()->initialize();
454  if ( !sc.isSuccess() ) return sc;
455 
456  //--------------------------------------------------------------------------
457  // Final steps: Inform user and change internal state
458  //--------------------------------------------------------------------------
459  log << MSG::INFO << "Application Manager Initialized successfully" << endmsg;
461 
463 
464  return sc;
465 }
Gaudi::StateMachine::State m_targetState
Internal State.
virtual StatusCode addService(IService *svc, int prio=DEFAULT_SVC_PRIORITY)=0
Add a service to the "active" list of services of the factory.
Definition of the MsgStream class used to transmit messages.
Definition: MsgStream.h:24
Gaudi::Property< bool > m_printAlgsSequence
Gaudi::Property< bool > m_stopOnSignal
Property to enable/disable the "stop on signal" service.
constexpr static const auto SUCCESS
Definition: StatusCode.h:85
void outputLevelUpdate() override
Function to call to update the outputLevel of the components (after a change in MessageSvc).
SmartIF< ISvcManager > & svcManager()
STL class.
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:50
Gaudi::Property< bool > m_stalledEventMonitoring
Property to enable/disable the monitoring and reporting of stalled events.
bool isSuccess() const
Definition: StatusCode.h:267
virtual StatusCode initialize()=0
Initialization (from CONFIGURED to INITIALIZED).
void printAlgsSequences()
Print the sequence of algorithms that have been loaded.
constexpr static const auto FAILURE
Definition: StatusCode.h:86
Gaudi::StateMachine::State m_state
Internal State.
bool isFailure() const
Definition: StatusCode.h:130
SmartIF< IAlgManager > & algManager()
const std::string & name() const override
SmartIF< IMessageSvc > m_messageSvc
Reference to the message service.
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:192

◆ name()

const std::string & ApplicationMgr::name ( ) const
override

Definition at line 845 of file ApplicationMgr.cpp.

845 { return m_name; }
std::string m_name
Name.

◆ nextEvent()

StatusCode ApplicationMgr::nextEvent ( int  maxevt)
override

Definition at line 512 of file ApplicationMgr.cpp.

512  {
515  log << MSG::FATAL << "nextEvent: Invalid state \"" << m_state << "\"" << endmsg;
516  return StatusCode::FAILURE;
517  }
518  if ( !m_processingMgr ) {
520  log << MSG::FATAL << "No event processing manager specified. Check option: " << m_eventLoopMgr.name() << endmsg;
521  return StatusCode::FAILURE;
522  }
523  return m_processingMgr->nextEvent( maxevt );
524 }
Definition of the MsgStream class used to transmit messages.
Definition: MsgStream.h:24
SmartIF< IEventProcessor > m_processingMgr
Reference to processing manager object.
Gaudi::Property< std::string > m_eventLoopMgr
virtual StatusCode nextEvent(int maxevt)=0
Process the next maxevt events.
constexpr static const auto FAILURE
Definition: StatusCode.h:86
Gaudi::StateMachine::State m_state
Internal State.
int maxevt
Definition: Bootstrap.cpp:260
const std::string & name() const override
SmartIF< IMessageSvc > m_messageSvc
Reference to the message service.
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:192

◆ outputLevelUpdate()

void ApplicationMgr::outputLevelUpdate ( )
override

Function to call to update the outputLevel of the components (after a change in MessageSvc).

Definition at line 1070 of file ApplicationMgr.cpp.

1070  {
1071  resetMessaging();
1072  for ( auto& mgrItem : m_managers ) { mgrItem.second->outputLevelUpdate(); }
1073 }
ManagersMap m_managers
Map of known component managers.

◆ pluginDebugPropertyHandler()

void ApplicationMgr::pluginDebugPropertyHandler ( Gaudi::Details::PropertyBase theProp)

◆ pop()

std::optional< Gaudi::Interfaces::IQueueingEventProcessor::ResultType > ApplicationMgr::pop ( )
override

Definition at line 805 of file ApplicationMgr.cpp.

805  {
807 }
static auto i_delegateToEvtProc(SELF *self, PIMPL &member, std::string_view method_name, METHOD &&method, ARGS &&... args)
Helper to delegate calls to event processor implementation.
virtual std::optional< ResultType > pop()=0
Get the next available result.
SmartIF< IQueueingEventProcessor > m_queueingProcessor
Reference to a queueing processing manager object.

◆ printAlgsSequences()

void ApplicationMgr::printAlgsSequences ( )

Print the sequence of algorithms that have been loaded.

Definition at line 1096 of file ApplicationMgr.cpp.

1096  {
1098  log << MSG::ALWAYS << "****************************** Algorithm Sequence ****************************" << endmsg;
1099  for ( auto& algname : m_topAlgNameList ) { printAlgsSequencesHelper( algManager(), algname, log, 0 ); }
1100  log << MSG::ALWAYS << "******************************************************************************" << endmsg;
1101 }
Definition of the MsgStream class used to transmit messages.
Definition: MsgStream.h:24
Gaudi::Property< std::vector< std::string > > m_topAlgNameList
std::string m_name
Name.
SmartIF< IAlgManager > & algManager()
SmartIF< IMessageSvc > m_messageSvc
Reference to the message service.
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:192

◆ push()

void ApplicationMgr::push ( EventContext &&  ctx)
override

Definition at line 796 of file ApplicationMgr.cpp.

796  {
798  std::move( ctx ) );
799 }
static auto i_delegateToEvtProc(SELF *self, PIMPL &member, std::string_view method_name, METHOD &&method, ARGS &&... args)
Helper to delegate calls to event processor implementation.
T move(T... args)
virtual void push(EventContext &&ctx)=0
Schedule the processing of an event.
SmartIF< IQueueingEventProcessor > m_queueingProcessor
Reference to a queueing processing manager object.

◆ queryInterface()

StatusCode ApplicationMgr::queryInterface ( const InterfaceID iid,
void **  pinterface 
)
override

Definition at line 85 of file ApplicationMgr.cpp.

85  {
86  if ( !ppvi ) { return StatusCode::FAILURE; }
87 
88  // try to find own/direct interfaces:
89  StatusCode sc = base_class::queryInterface( iid, ppvi );
90  if ( sc.isSuccess() ) return sc;
91 
92  // find indirect interfaces :
93  if ( ISvcLocator::interfaceID().versionMatch( iid ) ) { return serviceLocator()->queryInterface( iid, ppvi ); }
94  if ( ISvcManager::interfaceID().versionMatch( iid ) ) { return svcManager()->queryInterface( iid, ppvi ); }
95  if ( IAlgManager::interfaceID().versionMatch( iid ) ) { return algManager()->queryInterface( iid, ppvi ); }
96  if ( IClassManager::interfaceID().versionMatch( iid ) ) { return m_classManager->queryInterface( iid, ppvi ); }
97  if ( IMessageSvc::interfaceID().versionMatch( iid ) ) {
98  *ppvi = m_messageSvc.get();
100  // Note that 0 can be a valid IMessageSvc pointer value (when used for
101  // MsgStream).
102  return StatusCode::SUCCESS;
103  }
104  *ppvi = nullptr;
105  return StatusCode::FAILURE;
106 }
constexpr static const auto SUCCESS
Definition: StatusCode.h:85
TYPE * get() const
Get interface pointer.
Definition: SmartIF.h:76
SmartIF< ISvcManager > & svcManager()
constexpr bool versionMatch(const InterfaceID &iid) const
check compatibility.
Definition: IInterface.h:55
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:50
SmartIF< ISvcLocator > & serviceLocator() const override
Needed to locate the message service.
bool isSuccess() const
Definition: StatusCode.h:267
StatusCode queryInterface(const InterfaceID &iid, void **pinterface) override
implementation of IInterface::queryInterface
SmartIF< DLLClassManager > m_classManager
Reference to the class manager.
constexpr static const auto FAILURE
Definition: StatusCode.h:86
virtual unsigned long addRef()=0
Increment the reference count of Interface instance.
SmartIF< IAlgManager > & algManager()
static const InterfaceID & interfaceID()
Return an instance of InterfaceID identifying the interface.
Definition: IInterface.h:253
SmartIF< IMessageSvc > m_messageSvc
Reference to the message service.
virtual StatusCode queryInterface(const InterfaceID &ti, void **pp)=0
Set the void** to the pointer to the requested interface of the instance.

◆ reinitialize()

StatusCode ApplicationMgr::reinitialize ( )
override

Definition at line 855 of file ApplicationMgr.cpp.

855  {
858  StatusCode sc;
860  throw GaudiException( "Cannot reinitialize application if not INITIALIZED or RUNNING",
861  "ApplicationMgr::reinitialize", StatusCode::FAILURE );
862  }
864  sc = svcManager()->reinitialize();
865  if ( sc.isFailure() ) retval = sc;
866  sc = algManager()->reinitialize();
867  if ( sc.isFailure() ) retval = sc;
868 
870  if ( sc.isFailure() ) retval = sc;
872  if ( sc.isFailure() ) retval = sc;
873 
874  log << MSG::INFO << "Application Manager Reinitialized successfully" << endmsg;
875 
876  return retval;
877 }
Definition of the MsgStream class used to transmit messages.
Definition: MsgStream.h:24
Define general base for Gaudi exception.
constexpr static const auto SUCCESS
Definition: StatusCode.h:85
SmartIF< IFace > as() const
return a new SmartIF instance to another interface
Definition: SmartIF.h:107
SmartIF< IJobOptionsSvc > m_jobOptionsSvc
Reference to JobOption service.
SmartIF< ISvcManager > & svcManager()
StatusCode sysReinitialize() override
virtual StatusCode reinitialize()=0
Initialization (from INITIALIZED or RUNNING to INITIALIZED, via CONFIGURED).
General service interface definition.
Definition: IService.h:18
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:50
StatusCode GoToState(Gaudi::StateMachine::State state, bool ignoreFailures=false)
Reach a state from current state (whichever it is) going through the correct transitions.
constexpr static const auto FAILURE
Definition: StatusCode.h:86
Gaudi::StateMachine::State m_state
Internal State.
bool isFailure() const
Definition: StatusCode.h:130
SmartIF< IAlgManager > & algManager()
const std::string & name() const override
SmartIF< IMessageSvc > m_messageSvc
Reference to the message service.
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:192

◆ restart()

StatusCode ApplicationMgr::restart ( )
override

Definition at line 882 of file ApplicationMgr.cpp.

882  {
884  StatusCode sc;
886  throw GaudiException( "Cannot restart application if not RUNNING", "ApplicationMgr::restart", StatusCode::FAILURE );
887  }
888 
889  sc = svcManager()->restart();
890  if ( sc.isFailure() ) retval = sc;
891  sc = algManager()->restart();
892  if ( sc.isFailure() ) retval = sc;
893 
894  sc = m_messageSvc.as<IService>()->sysRestart();
895  if ( sc.isFailure() ) retval = sc;
897  if ( sc.isFailure() ) retval = sc;
898 
899  return retval;
900 }
Define general base for Gaudi exception.
constexpr static const auto SUCCESS
Definition: StatusCode.h:85
SmartIF< IFace > as() const
return a new SmartIF instance to another interface
Definition: SmartIF.h:107
StatusCode sysRestart() override
SmartIF< IJobOptionsSvc > m_jobOptionsSvc
Reference to JobOption service.
SmartIF< ISvcManager > & svcManager()
General service interface definition.
Definition: IService.h:18
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:50
virtual StatusCode restart()=0
Initialization (from RUNNING to RUNNING, via INITIALIZED).
constexpr static const auto FAILURE
Definition: StatusCode.h:86
Gaudi::StateMachine::State m_state
Internal State.
bool isFailure() const
Definition: StatusCode.h:130
SmartIF< IAlgManager > & algManager()
SmartIF< IMessageSvc > m_messageSvc
Reference to the message service.

◆ run()

StatusCode ApplicationMgr::run ( )
override

Definition at line 761 of file ApplicationMgr.cpp.

761  {
763 
765  if ( sc.isSuccess() ) {
767  if ( m_runable != 0 ) { // loop over the events
768  sc = m_runable->run();
769  if ( !sc.isSuccess() ) { log << MSG::FATAL << "Application execution failed. Ending the job." << endmsg; }
770  } else {
771  log << MSG::FATAL << "Application has no runable object. Check option:" << m_runableType.name() << endmsg;
772  }
773  }
774  if ( sc.isSuccess() ) { // try to close cleanly
776  }
777  // either the runable failed of the stut-down
778  if ( sc.isFailure() ) { // try to close anyway (but keep the StatusCode unchanged)
780  }
781  return sc;
782 }
Definition of the MsgStream class used to transmit messages.
Definition: MsgStream.h:24
virtual StatusCode run()=0
Run the class implementation.
SmartIF< IRunable > m_runable
Reference to the runable object.
constexpr static const auto SUCCESS
Definition: StatusCode.h:85
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:50
Gaudi::Property< std::string > m_runableType
StatusCode GoToState(Gaudi::StateMachine::State state, bool ignoreFailures=false)
Reach a state from current state (whichever it is) going through the correct transitions.
bool isSuccess() const
Definition: StatusCode.h:267
const StatusCode & ignore() const
Ignore/check StatusCode.
Definition: StatusCode.h:153
bool isFailure() const
Definition: StatusCode.h:130
const std::string & name() const override
SmartIF< IMessageSvc > m_messageSvc
Reference to the message service.
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:192

◆ serviceLocator()

SmartIF<ISvcLocator>& ApplicationMgr::serviceLocator ( ) const
inlineoverride

Needed to locate the message service.

Definition at line 139 of file ApplicationMgr.h.

139 { return m_svcLocator; }
SmartIF< ISvcLocator > m_svcLocator
Reference to its own service locator (must be instantiated prior to any service!)

◆ setServiceManager()

void ApplicationMgr::setServiceManager ( ISvcManager )
inlineoverrideprotected

Definition at line 149 of file ApplicationMgr.h.

149 {}

◆ start()

StatusCode ApplicationMgr::start ( )
override

Definition at line 470 of file ApplicationMgr.cpp.

470  {
471 
473  StatusCode sc;
474 
476  log << MSG::INFO << "Already Initialized!" << endmsg;
477  return StatusCode::SUCCESS;
478  }
480  log << MSG::FATAL << "start: Invalid state \"" << m_state << "\"" << endmsg;
481  return StatusCode::FAILURE;
482  }
484 
485  //--------------------------------------------------------------------------
486  // Initialize the list of top Services
487  //--------------------------------------------------------------------------
488  sc = m_jobOptionsSvc.as<IService>()->sysStart();
489  if ( !sc.isSuccess() ) return sc;
490 
491  sc = m_messageSvc.as<IService>()->sysStart();
492  if ( !sc.isSuccess() ) return sc;
493 
494  sc = svcManager()->start();
495  if ( !sc.isSuccess() ) return sc;
496 
497  sc = algManager()->start();
498  if ( !sc.isSuccess() ) return sc;
499 
500  //--------------------------------------------------------------------------
501  // Final steps: Inform user and change internal state
502  //--------------------------------------------------------------------------
503  log << MSG::INFO << "Application Manager Started successfully" << endmsg;
505 
506  return sc;
507 }
Gaudi::StateMachine::State m_targetState
Internal State.
Definition of the MsgStream class used to transmit messages.
Definition: MsgStream.h:24
StatusCode sysStart() override
constexpr static const auto SUCCESS
Definition: StatusCode.h:85
SmartIF< IFace > as() const
return a new SmartIF instance to another interface
Definition: SmartIF.h:107
SmartIF< IJobOptionsSvc > m_jobOptionsSvc
Reference to JobOption service.
SmartIF< ISvcManager > & svcManager()
virtual StatusCode start()=0
Start (from INITIALIZED to RUNNING).
General service interface definition.
Definition: IService.h:18
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:50
bool isSuccess() const
Definition: StatusCode.h:267
constexpr static const auto FAILURE
Definition: StatusCode.h:86
Gaudi::StateMachine::State m_state
Internal State.
SmartIF< IAlgManager > & algManager()
const std::string & name() const override
SmartIF< IMessageSvc > m_messageSvc
Reference to the message service.
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:192

◆ stop()

StatusCode ApplicationMgr::stop ( )
override

Definition at line 529 of file ApplicationMgr.cpp.

529  {
530 
532  StatusCode sc;
533 
535  log << MSG::INFO << "Already Initialized!" << endmsg;
536  return StatusCode::SUCCESS;
537  }
539  log << MSG::FATAL << "stop: Invalid state \"" << m_state << "\"" << endmsg;
540  return StatusCode::FAILURE;
541  }
543 
544  // Stop independently managed Algorithms
545  sc = algManager()->stop();
546  if ( !sc.isSuccess() ) return sc;
547 
548  //--------------------------------------------------------------------------
549  // Stop the list of top Services
550  //--------------------------------------------------------------------------
551  sc = svcManager()->stop();
552  if ( !sc.isSuccess() ) return sc;
553 
554  sc = m_messageSvc.as<IService>()->sysStop();
555  if ( !sc.isSuccess() ) return sc;
556 
557  sc = m_jobOptionsSvc.as<IService>()->sysStop();
558  if ( !sc.isSuccess() ) return sc;
559 
560  //--------------------------------------------------------------------------
561  // Final steps: Inform user and change internal state
562  //--------------------------------------------------------------------------
563  log << MSG::INFO << "Application Manager Stopped successfully" << endmsg;
565 
566  return sc;
567 }
Gaudi::StateMachine::State m_targetState
Internal State.
Definition of the MsgStream class used to transmit messages.
Definition: MsgStream.h:24
constexpr static const auto SUCCESS
Definition: StatusCode.h:85
SmartIF< IFace > as() const
return a new SmartIF instance to another interface
Definition: SmartIF.h:107
SmartIF< IJobOptionsSvc > m_jobOptionsSvc
Reference to JobOption service.
SmartIF< ISvcManager > & svcManager()
virtual StatusCode stop()=0
Stop (from RUNNING to INITIALIZED).
General service interface definition.
Definition: IService.h:18
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:50
StatusCode sysStop() override
bool isSuccess() const
Definition: StatusCode.h:267
constexpr static const auto FAILURE
Definition: StatusCode.h:86
Gaudi::StateMachine::State m_state
Internal State.
SmartIF< IAlgManager > & algManager()
const std::string & name() const override
SmartIF< IMessageSvc > m_messageSvc
Reference to the message service.
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:192

◆ stopRun()

StatusCode ApplicationMgr::stopRun ( )
override

implementation of IEventProcessor::stopRun()

Definition at line 834 of file ApplicationMgr.cpp.

834  {
837  if ( m_processingMgr ) { return m_processingMgr->stopRun(); }
838  log << MSG::WARNING << "No EventLoop Manager specified " << endmsg;
839  return StatusCode::SUCCESS;
840  }
841  log << MSG::FATAL << "stopRun: Invalid state \"" << FSMState() << "\"" << endmsg;
842  return StatusCode::FAILURE;
843 }
Definition of the MsgStream class used to transmit messages.
Definition: MsgStream.h:24
virtual StatusCode stopRun()=0
Schedule a stop of the current event processing.
constexpr static const auto SUCCESS
Definition: StatusCode.h:85
SmartIF< IEventProcessor > m_processingMgr
Reference to processing manager object.
constexpr static const auto FAILURE
Definition: StatusCode.h:86
Gaudi::StateMachine::State m_state
Internal State.
Gaudi::StateMachine::State FSMState() const override
const std::string & name() const override
SmartIF< IMessageSvc > m_messageSvc
Reference to the message service.
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:192

◆ svcManager()

SmartIF<ISvcManager>& ApplicationMgr::svcManager ( )
inline

Definition at line 126 of file ApplicationMgr.h.

126  {
127  // Cache the casted pointer to ISvcManager
128  if ( !m_svcManager ) { m_svcManager = getManager<IService>(); }
129  return m_svcManager;
130  }
SmartIF< ISvcManager > m_svcManager
Cached pointer to the manager of services.

◆ sysFinalize()

StatusCode ApplicationMgr::sysFinalize ( )
inlineoverride

Definition at line 97 of file ApplicationMgr.h.

97 { return StatusCode::SUCCESS; }
constexpr static const auto SUCCESS
Definition: StatusCode.h:85

◆ sysInitialize()

StatusCode ApplicationMgr::sysInitialize ( )
inlineoverride

Definition at line 91 of file ApplicationMgr.h.

91 { return StatusCode::SUCCESS; }
constexpr static const auto SUCCESS
Definition: StatusCode.h:85

◆ sysReinitialize()

StatusCode ApplicationMgr::sysReinitialize ( )
inlineoverride

Definition at line 99 of file ApplicationMgr.h.

99 { return StatusCode::SUCCESS; }
constexpr static const auto SUCCESS
Definition: StatusCode.h:85

◆ sysRestart()

StatusCode ApplicationMgr::sysRestart ( )
inlineoverride

Definition at line 101 of file ApplicationMgr.h.

101 { return StatusCode::SUCCESS; }
constexpr static const auto SUCCESS
Definition: StatusCode.h:85

◆ sysStart()

StatusCode ApplicationMgr::sysStart ( )
inlineoverride

Definition at line 93 of file ApplicationMgr.h.

93 { return StatusCode::SUCCESS; }
constexpr static const auto SUCCESS
Definition: StatusCode.h:85

◆ sysStop()

StatusCode ApplicationMgr::sysStop ( )
inlineoverride

Definition at line 95 of file ApplicationMgr.h.

95 { return StatusCode::SUCCESS; }
constexpr static const auto SUCCESS
Definition: StatusCode.h:85

◆ targetFSMState()

Gaudi::StateMachine::State ApplicationMgr::targetFSMState ( ) const
override

Definition at line 850 of file ApplicationMgr.cpp.

850 { return m_targetState; }
Gaudi::StateMachine::State m_targetState
Internal State.

◆ terminate()

StatusCode ApplicationMgr::terminate ( )
override

Definition at line 621 of file ApplicationMgr.cpp.

621  {
623 
625  log << MSG::INFO << "Already Offline" << endmsg;
626  return StatusCode::SUCCESS;
627  }
629  log << MSG::FATAL << "terminate: Invalid state \"" << m_state << "\"" << endmsg;
630  return StatusCode::FAILURE;
631  }
632  // release all Services
634 
635  if ( m_returnCode.value() == Gaudi::ReturnCode::Success ) {
636  log << MSG::INFO << "Application Manager Terminated successfully" << endmsg;
637  } else if ( m_returnCode.value() == Gaudi::ReturnCode::ScheduledStop ) {
638  log << MSG::INFO << "Application Manager Terminated successfully with a user requested ScheduledStop" << endmsg;
639  } else {
640  log << MSG::ERROR << "Application Manager Terminated with error code " << m_returnCode.value() << endmsg;
641  }
642 
643  { // Force a disable the auditing of finalize for MessageSvc
644  auto prop = m_messageSvc.as<IProperty>();
645  if ( prop ) { prop->setProperty( Gaudi::Property<bool>( "AuditFinalize", false ) ).ignore(); }
646  }
647  { // Force a disable the auditing of finalize for JobOptionsSvc
648  auto prop = m_jobOptionsSvc.as<IProperty>();
649  if ( prop ) { prop->setProperty( Gaudi::Property<bool>( "AuditFinalize", false ) ).ignore(); }
650  }
651 
652  // finalize MessageSvc
653  auto svc = m_messageSvc.as<IService>();
654  if ( !svc ) {
655  log << MSG::ERROR << "Could not get the IService interface of the MessageSvc" << endmsg;
656  } else {
657  svc->sysFinalize().ignore();
658  }
659 
660  // finalize JobOptionsSvc
661  svc = m_jobOptionsSvc.as<IService>();
662  if ( !svc ) {
663  log << MSG::ERROR << "Could not get the IService interface of the JobOptionsSvc" << endmsg;
664  } else {
665  svc->sysFinalize().ignore();
666  }
667 
669  return StatusCode::SUCCESS;
670 }
Gaudi::StateMachine::State m_targetState
Internal State.
Definition of the MsgStream class used to transmit messages.
Definition: MsgStream.h:24
Gaudi::Property< int > m_returnCode
Property to record the error conditions occurring during the running.
Implementation of property with value of concrete type.
Definition: Property.h:352
constexpr static const auto SUCCESS
Definition: StatusCode.h:85
SmartIF< IFace > as() const
return a new SmartIF instance to another interface
Definition: SmartIF.h:107
SmartIF< IJobOptionsSvc > m_jobOptionsSvc
Reference to JobOption service.
constexpr int ScheduledStop
Definition: AppReturnCode.h:25
virtual StatusCode setProperty(const Gaudi::Details::PropertyBase &p)=0
Set the property by property.
General service interface definition.
Definition: IService.h:18
const StatusCode & ignore() const
Ignore/check StatusCode.
Definition: StatusCode.h:153
constexpr static const auto FAILURE
Definition: StatusCode.h:86
Gaudi::StateMachine::State m_state
Internal State.
constexpr int Success
Definition: AppReturnCode.h:16
The IProperty is the basic interface for all components which have properties that can be set or get.
Definition: IProperty.h:20
const std::string & name() const override
SmartIF< IMessageSvc > m_messageSvc
Reference to the message service.
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:192

Member Data Documentation

◆ m_actHistory

Gaudi::Property<bool> ApplicationMgr::m_actHistory {this, "ActivateHistory", false, "Activate HistorySvc"}
protected

Definition at line 243 of file ApplicationMgr.h.

◆ m_algManager

SmartIF<IAlgManager> ApplicationMgr::m_algManager
protected

Cached pointer to the manager of algorithms.

Definition at line 174 of file ApplicationMgr.h.

◆ m_appName

Gaudi::Property<std::string> ApplicationMgr::m_appName {this, "AppName", "ApplicationMgr", "The name of the application"}
protected

Definition at line 241 of file ApplicationMgr.h.

◆ m_appVersion

Gaudi::Property<std::string> ApplicationMgr::m_appVersion {this, "AppVersion", {}, "The version of the application"}
protected

Definition at line 242 of file ApplicationMgr.h.

◆ m_auditAlgs

Gaudi::Property<bool> ApplicationMgr::m_auditAlgs {this, "AuditAlgorithms", false}
protected

Definition at line 261 of file ApplicationMgr.h.

◆ m_auditSvcs

Gaudi::Property<bool> ApplicationMgr::m_auditSvcs {this, "AuditServices", false}
protected

Definition at line 260 of file ApplicationMgr.h.

◆ m_auditTools

Gaudi::Property<bool> ApplicationMgr::m_auditTools {this, "AuditTools", false}
protected

Defaults for auditors.

Definition at line 259 of file ApplicationMgr.h.

◆ m_classManager

SmartIF<DLLClassManager> ApplicationMgr::m_classManager
protected

Reference to the class manager.

Definition at line 179 of file ApplicationMgr.h.

◆ m_codeCheck

Gaudi::Property<bool> ApplicationMgr::m_codeCheck {this, "StatusCodeCheck", false, "Activate StatusCode checking"}
protected

Definition at line 244 of file ApplicationMgr.h.

◆ m_createSvcNameList

Gaudi::Property<std::vector<std::string> > ApplicationMgr::m_createSvcNameList
protected
Initial value:
{
this, "CreateSvc", {}, "List of extra services to be created"}

Definition at line 255 of file ApplicationMgr.h.

◆ m_declaredManagers

Gaudi::Property<std::vector<std::string> > ApplicationMgr::m_declaredManagers
protected

Property to declare the list of known managers.

Definition at line 168 of file ApplicationMgr.h.

◆ m_dllNameList

Gaudi::Property<std::vector<std::string> > ApplicationMgr::m_dllNameList {this, "Dlls", {}, "List of DDL's names"}
protected

Definition at line 229 of file ApplicationMgr.h.

◆ m_environment

Gaudi::Property<std::map<std::string, std::string> > ApplicationMgr::m_environment
protected
Initial value:
{
this, "Environment", {}, "Environment variables to set"}

Definition at line 263 of file ApplicationMgr.h.

◆ m_eventLoopMgr

Gaudi::Property<std::string> ApplicationMgr::m_eventLoopMgr {this, "EventLoop", "EventLoopMgr", "Processing manager type"}
protected

Definition at line 237 of file ApplicationMgr.h.

◆ m_evtMax

Gaudi::Property<int> ApplicationMgr::m_evtMax {this, "EvtMax", -1, "Number of events to be processed (-1 means all events)"}
protected

Definition at line 224 of file ApplicationMgr.h.

◆ m_evtsel

Gaudi::Property<std::string> ApplicationMgr::m_evtsel {this, "EvtSel", {}, "Event selection"}
protected

Definition at line 238 of file ApplicationMgr.h.

◆ m_extSvcCreates

Gaudi::Property<bool> ApplicationMgr::m_extSvcCreates
protected
Initial value:
{this, "ExtSvcCreates", true,
"LHCb (default) or ATLAS definition of \"ExtSvc\""}

Definition at line 226 of file ApplicationMgr.h.

◆ m_extSvcNameList

Gaudi::Property<std::vector<std::string> > ApplicationMgr::m_extSvcNameList {this, "ExtSvc", {}, "List of external services names"}
protected

Definition at line 225 of file ApplicationMgr.h.

◆ m_histPersName

Gaudi::Property<std::string> ApplicationMgr::m_histPersName {this, "HistogramPersistency", "NONE", "Name of the Hist Pers Svc"}
protected

Definition at line 239 of file ApplicationMgr.h.

◆ m_jobOptionsPath

Gaudi::Property<std::string> ApplicationMgr::m_jobOptionsPath {this, "JobOptionsPath", {}, "The \"file\" to look for properties"}
protected

Definition at line 231 of file ApplicationMgr.h.

◆ m_jobOptionsPostAction

Gaudi::Property<std::string> ApplicationMgr::m_jobOptionsPostAction
protected
Initial value:
{
this, "JobOptionsPreAction", {}, "additional command to run on config"}

Definition at line 234 of file ApplicationMgr.h.

◆ m_jobOptionsPreAction

Gaudi::Property<std::string> ApplicationMgr::m_jobOptionsPreAction
protected
Initial value:
{
this, "JobOptionsPostAction", {}, "additional command to run on config"}

Definition at line 232 of file ApplicationMgr.h.

◆ m_jobOptionsSvc

SmartIF<IJobOptionsSvc> ApplicationMgr::m_jobOptionsSvc
protected

Reference to JobOption service.

Definition at line 217 of file ApplicationMgr.h.

◆ m_jobOptionsSvcType

Gaudi::Property<std::string> ApplicationMgr::m_jobOptionsSvcType {this, "JobOptionsSvcType", "JobOptionsSvc", "JobOptionsSvc type"}
protected

Definition at line 204 of file ApplicationMgr.h.

◆ m_jobOptionsType

Gaudi::Property<std::string> ApplicationMgr::m_jobOptionsType {this, "JobOptionsType", "FILE", "Source type (e.g. dbase, file...)"}
protected

Definition at line 230 of file ApplicationMgr.h.

◆ m_loopCheck

Gaudi::Property<bool> ApplicationMgr::m_loopCheck
protected
Initial value:
{this, "InitializationLoopCheck", true,
[this]( auto& ) { this->svcManager()->setLoopCheckEnabled( m_loopCheck ); },
"For ServiceMgr initialization loop checking"}

Definition at line 266 of file ApplicationMgr.h.

◆ m_managers

ManagersMap ApplicationMgr::m_managers
protected

Map of known component managers.

It contains (at least) the managers for IService and IAlgorithm. IAlgTool and IAuditor are not mandatory (but a missing manager for IAlgTool will probably not allow any job to run).

Definition at line 166 of file ApplicationMgr.h.

◆ m_messageSvc

SmartIF<IMessageSvc> ApplicationMgr::m_messageSvc
protected

Reference to the message service.

Definition at line 214 of file ApplicationMgr.h.

◆ m_messageSvcType

Gaudi::Property<std::string> ApplicationMgr::m_messageSvcType {this, "MessageSvcType", "MessageSvc", "MessageSvc type"}
protected

Definition at line 203 of file ApplicationMgr.h.

◆ m_name

std::string ApplicationMgr::m_name = "ApplicationMgr"
protected

Name.

Definition at line 206 of file ApplicationMgr.h.

◆ m_okDlls

std::vector<std::string> ApplicationMgr::m_okDlls
private

names of successfully loaded dlls

Definition at line 294 of file ApplicationMgr.h.

◆ m_outputLevel

Gaudi::Property<int> ApplicationMgr::m_outputLevel {this, "OutputLevel", MSG::INFO, "Message output level"}
protected

Definition at line 240 of file ApplicationMgr.h.

◆ m_outStreamNameList

Gaudi::Property<std::vector<std::string> > ApplicationMgr::m_outStreamNameList
protected
Initial value:
{
this, "OutStream", {}, &ApplicationMgr::evtLoopPropertyHandler, "List of output stream names"}

Definition at line 198 of file ApplicationMgr.h.

◆ m_outStreamType

Gaudi::Property<std::string> ApplicationMgr::m_outStreamType
protected
Initial value:
{this, "OutStreamType", "OutputStream",
" Output stream type"}

Definition at line 200 of file ApplicationMgr.h.

◆ m_pluginDebugLevel

Gaudi::Property<int> ApplicationMgr::m_pluginDebugLevel
protected
Initial value:
{
this, "PluginDebugLevel", 0,
[this]( auto& ) {
log << MSG::INFO << "Updating Gaudi::PluginService::SetDebug(level) to level=" << m_pluginDebugLevel << endmsg;
},
"Debug level for the plugin system"}

Definition at line 245 of file ApplicationMgr.h.

◆ m_printAlgsSequence

Gaudi::Property<bool> ApplicationMgr::m_printAlgsSequence
protected
Initial value:
{this, "PrintAlgsSequence", false,
"Print the sequence of algorithms that have been loaded."}

Definition at line 287 of file ApplicationMgr.h.

◆ m_processingMgr

SmartIF<IEventProcessor> ApplicationMgr::m_processingMgr
protected

Reference to processing manager object.

Definition at line 216 of file ApplicationMgr.h.

◆ m_propertiesPrint

Gaudi::Property<bool> ApplicationMgr::m_propertiesPrint
protected
Initial value:
{this, "PropertiesPrint", false,
"Flag to activate the printout of properties"}

Definition at line 280 of file ApplicationMgr.h.

◆ m_queueingProcessor

SmartIF<IQueueingEventProcessor> ApplicationMgr::m_queueingProcessor
protected

Reference to a queueing processing manager object.

Definition at line 219 of file ApplicationMgr.h.

◆ m_returnCode

Gaudi::Property<int> ApplicationMgr::m_returnCode
protected
Initial value:
{this, "ReturnCode", Gaudi::ReturnCode::Success,
"Return code of the application. Set internally in case of error conditions."}

Property to record the error conditions occurring during the running.

Definition at line 284 of file ApplicationMgr.h.

◆ m_runable

SmartIF<IRunable> ApplicationMgr::m_runable
protected

Reference to the runable object.

Definition at line 215 of file ApplicationMgr.h.

◆ m_runableType

Gaudi::Property<std::string> ApplicationMgr::m_runableType {this, "Runable", "AppMgrRunable", "Runable type"}
protected

Definition at line 236 of file ApplicationMgr.h.

◆ m_SIExit

Gaudi::Property<int> ApplicationMgr::m_SIExit
protected
Initial value:
{this, "Exit", 0,
[this]( auto& ) {
::exit( 0 );
},
"For SI's \"Exit\" command via callback"}

Definition at line 189 of file ApplicationMgr.h.

◆ m_SIGo

Gaudi::Property<int> ApplicationMgr::m_SIGo
protected
Initial value:
{this, "Go", 0,
[this]( auto& ) {
this->reinitialize().ignore();
},
"For SI's \"Go\" command via callback"}

Definition at line 181 of file ApplicationMgr.h.

◆ m_stalledEventMonitoring

Gaudi::Property<bool> ApplicationMgr::m_stalledEventMonitoring
protected
Initial value:
{
this, "StalledEventMonitoring", false, "Flag to enable/disable the monitoring and reporting of stalled events"}

Property to enable/disable the monitoring and reporting of stalled events.

See also
StalledEventMonitor

Definition at line 277 of file ApplicationMgr.h.

◆ m_state

Gaudi::StateMachine::State ApplicationMgr::m_state = Gaudi::StateMachine::OFFLINE
protected

Internal State.

Definition at line 207 of file ApplicationMgr.h.

◆ m_stopOnSignal

Gaudi::Property<bool> ApplicationMgr::m_stopOnSignal
protected
Initial value:
{
this, "StopOnSignal", false, "Flag to enable/disable the signal handler that schedule a stop of the event loop"}

Property to enable/disable the "stop on signal" service.

See also
Gaudi::Utils::StopSignalHandler

Definition at line 272 of file ApplicationMgr.h.

◆ m_svcLocator

SmartIF<ISvcLocator> ApplicationMgr::m_svcLocator
mutableprotected

Reference to its own service locator (must be instantiated prior to any service!)

Definition at line 177 of file ApplicationMgr.h.

◆ m_svcManager

SmartIF<ISvcManager> ApplicationMgr::m_svcManager
protected

Cached pointer to the manager of services.

Definition at line 171 of file ApplicationMgr.h.

◆ m_svcMapping

Gaudi::Property<std::vector<std::string> > ApplicationMgr::m_svcMapping {this, "SvcMapping", {}, "Default mapping of services"}
protected

Definition at line 210 of file ApplicationMgr.h.

◆ m_svcOptMapping

Gaudi::Property<std::vector<std::string> > ApplicationMgr::m_svcOptMapping
protected
Initial value:
{
this, "SvcOptMapping", {}, "Default mapping of optional services"}

Definition at line 211 of file ApplicationMgr.h.

◆ m_targetState

Gaudi::StateMachine::State ApplicationMgr::m_targetState = Gaudi::StateMachine::OFFLINE
protected

Internal State.

Definition at line 208 of file ApplicationMgr.h.

◆ m_topAlgNameList

Gaudi::Property<std::vector<std::string> > ApplicationMgr::m_topAlgNameList
protected
Initial value:
{
this, "TopAlg", {}, &ApplicationMgr::evtLoopPropertyHandler, "List of top level algorithms names"}

Definition at line 196 of file ApplicationMgr.h.

◆ m_useHiveAlgorithmManager

bool ApplicationMgr::m_useHiveAlgorithmManager
protected

Definition at line 291 of file ApplicationMgr.h.


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