The Gaudi Framework  master (57817a18)
Loading...
Searching...
No Matches
ApplicationMgr Class Reference

The Application Manager class. More...

#include </builds/gaudi/Gaudi/GaudiCoreSvc/src/ApplicationMgr/ApplicationMgr.h>

Inheritance diagram for ApplicationMgr:
Collaboration diagram for ApplicationMgr:

Public Member Functions

 ApplicationMgr (IInterface *=nullptr)
void const * i_cast (const InterfaceID &iid) const 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::string & name () const override
EventContext createEventContext () override
 implementation of IEventProcessor::createEventContext()
StatusCode executeEvent (EventContext &&ctx) override
 implementation of IEventProcessor::executeEvent(void*)
StatusCode executeRun (int evtmax) override
 implementation of IEventProcessor::executeRun(int)
StatusCode stopRun () override
 implementation of IEventProcessor::stopRun()
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
void push (EventContext &&ctx) override
bool empty () const override
std::optional< Gaudi::Interfaces::IQueueingEventProcessor::ResultType > pop () override
Public Member Functions inherited from PropertyHolder< CommonMessaging< implements< IAppMgrUI, Gaudi::Interfaces::IQueueingEventProcessor, IService, IStateful, INamedInterface, IProperty > > >
StatusCode setProperty (const Gaudi::Details::PropertyBase &p)
 Set the property from a property.
StatusCode setProperty (const std::string &name, const char *v)
 Special case for string literals.
StatusCode setProperty (const std::string &name, const std::string &v)
 Special case for std::string.
StatusCode setProperty (const std::string &name, const TYPE &value)
 set the property form the value
 PropertyHolder ()=default
Gaudi::Details::PropertyBase & declareProperty (Gaudi::Details::PropertyBase &prop)
 Declare a property.
Gaudi::Details::PropertyBase * declareRemoteProperty (const std::string &name, IProperty *rsvc, const std::string &rname="")
 Declare a remote property.
StatusCode setPropertyRepr (const std::string &n, const std::string &r) override
 set the property from name and value string representation
StatusCode getProperty (Gaudi::Details::PropertyBase *p) const override
 get the property
const std::vector< Gaudi::Details::PropertyBase * > & getProperties () const override
 get all properties
bool hasProperty (std::string_view name) const override
 Return true if we have a property with the given name.
Gaudi::Details::PropertyBase * property (std::string_view name) const
 \fixme property and bindPropertiesTo should be protected
void bindPropertiesTo (Gaudi::Interfaces::IOptionsSvc &optsSvc)
PropertyHolder & operator= (const PropertyHolder &)=delete
Public Member Functions inherited from CommonMessagingBase
virtual ~CommonMessagingBase ()=default
 Virtual destructor.
const SmartIF< IMessageSvc > & msgSvc () const
 The standard message service.
MsgStream & msgStream () const
 Return an uninitialized MsgStream.
MsgStream & msgStream (const MSG::Level level) const
 Predefined configurable message stream for the efficient printouts.
MsgStream & always () const
 shortcut for the method msgStream(MSG::ALWAYS)
MsgStream & fatal () const
 shortcut for the method msgStream(MSG::FATAL)
MsgStream & err () const
 shortcut for the method msgStream(MSG::ERROR)
MsgStream & error () const
 shortcut for the method msgStream(MSG::ERROR)
MsgStream & warning () const
 shortcut for the method msgStream(MSG::WARNING)
MsgStream & info () const
 shortcut for the method msgStream(MSG::INFO)
MsgStream & debug () const
 shortcut for the method msgStream(MSG::DEBUG)
MsgStream & verbose () const
 shortcut for the method msgStream(MSG::VERBOSE)
MsgStream & msg () const
 shortcut for the method msgStream(MSG::INFO)
MSG::Level msgLevel () const
 get the cached level (originally extracted from the embedded MsgStream)
bool msgLevel (MSG::Level lvl) const
 get the output level from the embedded MsgStream

Gaudi::Details::PropertyBase handlers

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.
ManagersMap m_managers
 Map of known component managers.
Gaudi::Property< std::vector< std::string > > m_declaredManagers
 Property to declare the list of known managers.
SmartIF< ISvcManager > m_svcManager
 Cached pointer to the manager of services.
SmartIF< IAlgManager > m_algManager
 Cached pointer to the manager of algorithms.
SmartIF< ISvcLocator > m_svcLocator
 Reference to its own service locator (must be instantiated prior to any service!).
SmartIF< DLLClassManager > m_classManager
 Reference to the class manager.
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::string > m_messageSvcType
Gaudi::Property< std::string > m_jobOptionsSvcType
std::string m_name = "ApplicationMgr"
 Name.
Gaudi::StateMachine::State m_state = Gaudi::StateMachine::OFFLINE
 Internal State.
Gaudi::StateMachine::State m_targetState = Gaudi::StateMachine::OFFLINE
 Internal State.
Gaudi::Property< std::vector< std::string > > m_svcMapping { this, "SvcMapping", {}, "Default mapping of services" }
Gaudi::Property< std::vector< std::string > > m_svcOptMapping
SmartIF< IMessageSvc > m_messageSvc
 Reference to the message service.
SmartIF< IRunable > m_runable
 Reference to the runable object.
SmartIF< IEventProcessor > m_processingMgr
 Reference to processing manager object.
SmartIF< IQueueingEventProcessor > m_queueingProcessor
 Reference to a queueing processing manager object.
Gaudi::Monitoring::Hub m_monitoringHub
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
Gaudi::Property< bool > m_extSvcCreates
Gaudi::Property< std::vector< std::string > > m_dllNameList { this, "Dlls", {}, "List of DDL's names" }
Gaudi::Property< std::string > m_jobOptionsType { this, "JobOptionsType", "FILE", "Source type (e.g. dbase, file...)" }
Gaudi::Property< std::string > m_jobOptionsPath { this, "JobOptionsPath", {}, "The \"file\" to look for properties" }
Gaudi::Property< std::string > m_jobOptionsPreAction
Gaudi::Property< std::string > m_jobOptionsPostAction
Gaudi::Property< std::string > m_runableType { this, "Runable", "AppMgrRunable", "Runable type", "Service:IRunable" }
Gaudi::Property< std::string > m_eventLoopMgr
Gaudi::Property< std::string > m_evtsel { this, "EvtSel", {}, "Event selection" }
Gaudi::Property< std::string > m_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::string > m_appName { this, "AppName", "ApplicationMgr", "The name of the application" }
Gaudi::Property< std::string > m_appVersion { this, "AppVersion", {}, "The version of the application" }
Gaudi::Property< bool > m_actHistory { this, "ActivateHistory", false, "Activate HistorySvc" }
Gaudi::Property< int > m_pluginDebugLevel
Gaudi::Property< std::vector< std::string > > m_createSvcNameList
Gaudi::Property< bool > m_auditTools { this, "AuditTools", false }
 Defaults for auditors.
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.
Gaudi::Property< bool > m_propertiesPrint
Gaudi::Property< int > m_returnCode
 Property to record the error conditions occurring during the running.
Gaudi::Property< bool > m_printAlgsSequence
Gaudi::Property< bool > m_useMessageSvcForROOTMessages
Gaudi::Property< bool > m_enableROOTThreadSafety
bool m_useHiveAlgorithmManager
std::vector< std::string > m_okDlls
 names of successfully loaded dlls
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)
template<class I>
SmartIF< IComponentManager > & getManager ()
SmartIF< ISvcManager > & svcManager ()
SmartIF< IAlgManager > & algManager ()
SmartIF< ISvcLocator > & serviceLocator () const override
 Needed to locate the message service.
void outputLevelUpdate () override
 Function to call to update the outputLevel of the components (after a change in MessageSvc).
Gaudi::Monitoring::Hub & monitoringHub () override
void printAlgsSequences ()
 Print the sequence of algorithms that have been loaded.
void setServiceManager (ISvcManager *) override
StatusCode i_startup ()
 Internal startup routine.
StatusCode GoToState (Gaudi::StateMachine::State state, bool ignoreFailures=false)
 Reach a state from current state (whichever it is) going through the correct transitions.
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.

Additional Inherited Members

Public Types inherited from PropertyHolder< CommonMessaging< implements< IAppMgrUI, Gaudi::Interfaces::IQueueingEventProcessor, IService, IStateful, INamedInterface, IProperty > > >
using PropertyHolderImpl
 Typedef used to refer to this class from derived classes, as in.
Public Types inherited from CommonMessaging< implements< IAppMgrUI, Gaudi::Interfaces::IQueueingEventProcessor, IService, IStateful, INamedInterface, IProperty > >
using base_class
Protected Member Functions inherited from CommonMessaging< implements< IAppMgrUI, Gaudi::Interfaces::IQueueingEventProcessor, IService, IStateful, INamedInterface, IProperty > >
MSG::Level setUpMessaging () const override final
 Set up local caches.
MSG::Level resetMessaging ()
 Reinitialize internal states.
void updateMsgStreamOutputLevel (int level)
 Update the output level of the cached MsgStream.

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 52 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 171 of file ApplicationMgr.h.

Constructor & Destructor Documentation

◆ ApplicationMgr()

ApplicationMgr::ApplicationMgr ( IInterface * = nullptr)

Definition at line 83 of file ApplicationMgr.cpp.

83 {
84 // IInterface initialization
85 addRef(); // Initial count set to 1
86
87 // Instantiate component managers
88 m_managers[IService::interfaceID().id()] = new ServiceManager( this );
89
91
92 // Instantiate internal services
93 // SvcLocator/Factory HAS to be already instantiated
94 m_classManager = new DLLClassManager( this );
95
96 AlgorithmManager* algMgr = new AlgorithmManager( this );
98 // m_managers[IAlgorithm::interfaceID().id()] = new HiveAlgorithmManager(this);
99
100 // This property is not hosted in the ApplicationMgr instance
101 declareProperty( "AlgTypeAliases", algMgr->typeAliases(),
102 "Aliases of algorithm types, to replace an algorithm type for every instance" );
103
104 // ServiceMgr Initialization loop checking
106
107 m_svcMapping = { "EvtDataSvc/EventDataSvc",
108 "DetDataSvc/DetectorDataSvc",
109 "HistogramSvc/HistogramDataSvc",
110 "HbookCnv::PersSvc/HbookHistSvc",
111 "RootHistCnv::PersSvc/RootHistSvc",
112 "EvtPersistencySvc/EventPersistencySvc",
113 "DetPersistencySvc/DetectorPersistencySvc",
114 "HistogramPersistencySvc/HistogramPersistencySvc" };
115}
AlgTypeAliasesMap & typeAliases()
Gaudi::Property< std::vector< std::string > > m_svcMapping
SmartIF< ISvcLocator > m_svcLocator
Reference to its own service locator (must be instantiated prior to any service!).
SmartIF< DLLClassManager > m_classManager
Reference to the class manager.
Gaudi::Property< bool > m_loopCheck
ManagersMap m_managers
Map of known component managers.
SmartIF< ISvcManager > & svcManager()
virtual void setLoopCheckEnabled(bool en=true)=0
Set the value of the initialization loop check flag.
constexpr unsigned long id() const
get the interface identifier
Definition IInterface.h:47

Member Function Documentation

◆ algManager()

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

Definition at line 139 of file ApplicationMgr.h.

139 {
140 // Cache the casted pointer to IAlgManager
142 return m_algManager;
143 }
SmartIF< IComponentManager > & getManager()
SmartIF< IAlgManager > m_algManager
Cached pointer to the manager of algorithms.

◆ configure()

StatusCode ApplicationMgr::configure ( )
override

Definition at line 267 of file ApplicationMgr.cpp.

267 {
268
269 // Check if the state is compatible with the transition
270 MsgStream tlog( m_messageSvc, name() );
272 tlog << MSG::INFO << "Already Configured" << endmsg;
273 return StatusCode::SUCCESS;
274 }
276 tlog << MSG::FATAL << "configure: Invalid state \"" << m_state << "\"" << endmsg;
277 return StatusCode::FAILURE;
278 }
280
281 // Reset application return code.
283
284 StatusCode sc;
285 sc = i_startup();
286 if ( !sc.isSuccess() ) { return sc; }
287
288 {
289 MsgStream log( m_messageSvc, name() );
290 // Get my own options using the Job options service
291 if ( log.level() <= MSG::DEBUG ) log << MSG::DEBUG << "Getting my own properties" << endmsg;
292 bindPropertiesTo( serviceLocator()->getOptsSvc() );
293 }
294
295 // Make sure that the OutputLevel is in sync
296 if ( m_outputLevel != MSG::NIL && m_messageSvc ) m_messageSvc->setOutputLevel( name(), m_outputLevel );
297 MsgStream log( m_messageSvc, name() );
298
299 // Check current outputLevel to eventually inform the MessageSvc
300 if ( m_outputLevel != MSG::NIL && !m_appName.empty() ) {
301 // Print a welcome message
302 log << MSG::ALWAYS << std::endl
303 << "=================================================================="
304 << "==================================================================" << std::endl
305 << " "
306 << " Welcome to " << m_appName.value();
307
308 if ( !m_appVersion.empty() ) {
309 log << MSG::ALWAYS << " version " << m_appVersion.value();
310 } else {
311 log << MSG::ALWAYS << " (GaudiCoreSvc "
312 << "v" << GAUDI_MAJOR_VERSION << "r" << GAUDI_MINOR_VERSION
313#if GAUDI_PATCH_VERSION
314 << "p" << GAUDI_PATCH_VERSION
315#endif
316 << ")";
317 }
318
319 // Add the host name and current time to the message
320 log << MSG::ALWAYS << std::endl
321 << " "
322 << " running on " << System::hostName() << " on " << Gaudi::Time::current().format( true ) << std::endl
323 << "=================================================================="
324 << "==================================================================" << endmsg;
325 }
326
327 // print all own properties if the options "PropertiesPrint" is set to true
328 if ( m_propertiesPrint ) {
329 const auto& properties = getProperties();
330 log << MSG::ALWAYS << "List of ALL properties of " << System::typeinfoName( typeid( *this ) ) << "/" << this->name()
331 << " #properties = " << properties.size() << endmsg;
332 for ( const auto& property : properties ) { log << "Property ['Name': Value] = " << *property << endmsg; }
333 }
334
335 // set the requested environment variables
336 for ( auto& var : m_environment ) {
337 const std::string& name = var.first;
338 const std::string& value = var.second;
339 std::string old = System::getEnv( name.c_str() );
340 const MSG::Level lvl = ( !old.empty() && ( old != "UNKNOWN" ) ) ? MSG::WARNING : MSG::DEBUG;
341 if ( m_outputLevel <= lvl ) log << lvl << "Setting " << name << " = " << value << endmsg;
342 System::setEnv( name, value );
343 }
344
345 // Declare Service Types
346 for ( auto& j : m_svcMapping ) {
347 Gaudi::Utils::TypeNameString itm( j );
348 if ( svcManager()->declareSvcType( itm.name(), itm.type() ).isFailure() ) {
349 log << MSG::ERROR << "configure: declaring svc type:'" << j << "' failed." << endmsg;
350 return StatusCode::FAILURE;
351 } else {
353 log << MSG::VERBOSE << "declared service " << j << endmsg;
354 }
355 }
356 for ( auto& j : m_svcOptMapping ) {
357 Gaudi::Utils::TypeNameString itm( j );
358 if ( svcManager()->declareSvcType( itm.name(), itm.type() ).isFailure() ) {
359 log << MSG::ERROR << "declaring svc type:'" << j << "' failed." << endmsg;
360 return StatusCode::FAILURE;
361 }
362 }
363
364 //--------------------------------------------------------------------------
365 // Declare other Services and Algorithms by loading DLL's
366 sc = decodeDllNameList();
367 if ( sc.isFailure() ) {
368 log << MSG::ERROR << "Failure loading declared DLL's" << endmsg;
369 return sc;
370 }
371
372 //--------------------------------------------------------------------------
373 // Deal with the services explicitly declared by the user.
375 if ( sc.isFailure() ) {
376 log << MSG::ERROR << "Failure during external service association" << endmsg;
377 return sc;
378 }
379
381 if ( sc.isFailure() ) {
382 log << MSG::ERROR << "Failure during external service creation" << endmsg;
383 return sc;
384 }
385
386 //--------------------------------------------------------------------------
387 // Retrieve intrinsic services. If needed configure them.
388 //--------------------------------------------------------------------------
389 const Gaudi::Utils::TypeNameString evtloop_item( m_eventLoopMgr );
390 sc = svcManager()->addService( evtloop_item, ServiceManager::DEFAULT_SVC_PRIORITY * 10 );
391 if ( !sc.isSuccess() ) {
392 log << MSG::FATAL << "Error adding :" << m_eventLoopMgr << endmsg;
393 return sc;
394 } else {
396 log << MSG::VERBOSE << "added service " << evtloop_item << endmsg;
397 }
398
400 if ( !m_runable ) {
401 log << MSG::FATAL << "Error retrieving Runable: " << m_runableType.value() << "\n Check option ApplicationMgr."
402 << m_runableType.name() << endmsg;
403 return sc;
404 }
405 m_processingMgr = m_svcLocator->service( evtloop_item );
406 if ( !m_processingMgr ) {
407 log << MSG::FATAL << "Error retrieving Processing manager: " << m_eventLoopMgr.value()
408 << "\n Check option ApplicationMgr." << m_eventLoopMgr.name() << "\n No events will be processed." << endmsg;
409 return sc;
410 }
411 // The IEventProcessor might also be an IQueueingEventProcessor
413
414 // Establish Update Handlers for ExtSvc and DLLs Properties
415 m_extSvcNameList.declareUpdateHandler( &ApplicationMgr::extSvcNameListHandler, this );
417 m_dllNameList.declareUpdateHandler( &ApplicationMgr::dllNameListHandler, this );
418
419 if ( m_actHistory ) {
420 // Create HistorySvc with a priority to ensure it's initialized last, finalized first
421 sc = svcManager()->addService( "HistorySvc", std::numeric_limits<int>::max() );
422 if ( sc.isFailure() ) {
423 log << MSG::FATAL << "Error adding HistorySvc" << endmsg;
424 return StatusCode::FAILURE;
425 }
426 }
427
428 log << MSG::INFO << "Application Manager Configured successfully" << endmsg;
430 return StatusCode::SUCCESS;
431}
#define ON_VERBOSE
#define GAUDI_MAJOR_VERSION
#define GAUDI_MINOR_VERSION
#define GAUDI_PATCH_VERSION
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition MsgStream.h:198
SmartIF< IRunable > m_runable
Reference to the runable object.
SmartIF< IQueueingEventProcessor > m_queueingProcessor
Reference to a queueing processing manager object.
Gaudi::Property< int > m_returnCode
Property to record the error conditions occurring during the running.
Gaudi::Property< std::vector< std::string > > m_dllNameList
Gaudi::StateMachine::State m_targetState
Internal State.
Gaudi::Property< std::string > m_runableType
Gaudi::Property< bool > m_actHistory
void createSvcNameListHandler(Gaudi::Details::PropertyBase &)
Gaudi::Property< bool > m_propertiesPrint
Gaudi::Property< std::vector< std::string > > m_extSvcNameList
SmartIF< ISvcLocator > & serviceLocator() const override
Needed to locate the message service.
SmartIF< IMessageSvc > m_messageSvc
Reference to the message service.
Gaudi::Property< std::vector< std::string > > m_svcOptMapping
Gaudi::Property< std::string > m_eventLoopMgr
const std::string & name() const override
Gaudi::Property< std::string > m_appVersion
StatusCode decodeDllNameList()
Gaudi::Property< std::vector< std::string > > m_createSvcNameList
Gaudi::Property< std::map< std::string, std::string > > m_environment
Gaudi::Property< std::string > m_appName
void extSvcNameListHandler(Gaudi::Details::PropertyBase &theProp)
StatusCode i_startup()
Internal startup routine.
Gaudi::StateMachine::State m_state
Internal State.
StatusCode decodeExtSvcNameList()
StatusCode decodeCreateSvcNameList()
void dllNameListHandler(Gaudi::Details::PropertyBase &theProp)
Gaudi::Property< int > m_outputLevel
SmartIF< IEventProcessor > m_processingMgr
Reference to processing manager object.
std::string format(bool local, std::string spec="%c") const
Format the time using strftime.
Definition Time.cpp:155
static Time current()
Returns the current time.
Definition Time.cpp:41
virtual StatusCode addService(IService *svc, int prio=DEFAULT_SVC_PRIORITY)=0
Add a service to the "active" list of services of the factory.
bool isFailure() const
Definition StatusCode.h:118
bool isSuccess() const
Definition StatusCode.h:302
constexpr static const auto SUCCESS
Definition StatusCode.h:99
constexpr static const auto FAILURE
Definition StatusCode.h:100
constexpr int Success
@ NIL
Definition IMessageSvc.h:22
@ WARNING
Definition IMessageSvc.h:22
@ FATAL
Definition IMessageSvc.h:22
@ DEBUG
Definition IMessageSvc.h:22
@ ERROR
Definition IMessageSvc.h:22
@ ALWAYS
Definition IMessageSvc.h:22
@ INFO
Definition IMessageSvc.h:22
@ VERBOSE
Definition IMessageSvc.h:22
GAUDI_API const std::string typeinfoName(const std::type_info &)
Get platform independent information about the class type.
Definition System.cpp:254
GAUDI_API std::vector< std::string > getEnv()
get all environment variables
Definition System.cpp:341
GAUDI_API const std::string & hostName()
Host name.
Definition System.cpp:259
GAUDI_API int setEnv(const std::string &name, const std::string &value, int overwrite=1)
Set an environment variables.
Definition System.cpp:425

◆ createEventContext()

EventContext ApplicationMgr::createEventContext ( )
override

implementation of IEventProcessor::createEventContext()

Definition at line 793 of file ApplicationMgr.cpp.

793 {
795 if ( m_processingMgr ) { return m_processingMgr->createEventContext(); }
796 }
797 std::stringstream ss;
798 ss << "createEventContext: Invalid state \"" << FSMState() << '"';
799 throw GaudiException( ss.str(), name(), StatusCode::FAILURE );
800}
Gaudi::StateMachine::State FSMState() const override

◆ createSvcNameListHandler()

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

Definition at line 879 of file ApplicationMgr.cpp.

879 {
880 if ( !( decodeCreateSvcNameList() ).isSuccess() ) {
881 throw GaudiException( "Failed to create ext services", "MinimalEventLoopMgr::createSvcNameListHandler",
883 }
884}

◆ decodeCreateSvcNameList()

StatusCode ApplicationMgr::decodeCreateSvcNameList ( )

Definition at line 885 of file ApplicationMgr.cpp.

885 {
886 StatusCode result = StatusCode::SUCCESS;
887 const auto& theNames = m_createSvcNameList.value();
888 auto it = theNames.begin();
889 auto et = theNames.end();
890 while ( result.isSuccess() && it != et ) {
891 Gaudi::Utils::TypeNameString item( *it++ );
892 if ( ( result = svcManager()->addService( item, ServiceManager::DEFAULT_SVC_PRIORITY ) ).isFailure() ) {
893 MsgStream log( m_messageSvc, m_name );
894 log << MSG::ERROR << "decodeCreateSvcNameList: Cannot create service " << item.type() << "/" << item.name()
895 << endmsg;
896 } else {
897 ON_DEBUG {
898 MsgStream log( m_messageSvc, m_name );
899 log << MSG::DEBUG << "decodeCreateSvcNameList: Created service " << item.type() << "/" << item.name() << endmsg;
900 }
901 }
902 }
903 return result;
904}
#define ON_DEBUG
std::string m_name
Name.

◆ decodeDllNameList()

StatusCode ApplicationMgr::decodeDllNameList ( )

Definition at line 945 of file ApplicationMgr.cpp.

945 {
946
947 MsgStream log( m_messageSvc, m_name );
948 StatusCode result = StatusCode::SUCCESS;
949
950 // Clean up multiple entries from DLL list
951 std::vector<std::string> newList;
952 std::map<std::string, unsigned int> dllInList, duplicateList;
953 {
954 for ( const auto& it : m_dllNameList ) {
955 if ( 0 == dllInList[it] ) {
956 newList.push_back( it ); // first instance of this module
957 } else {
958 ++duplicateList[it];
959 } // module listed multiple times
960 ++dllInList[it]; // increment count for this module
961 }
962 }
963 // m_dllNameList = newList; // update primary list to new, filtered list (do not use the
964 // property itself otherwise we get called again infinitely)
965 // List modules that were in there twice..
966 ON_DEBUG if ( !duplicateList.empty() ) {
967 log << MSG::DEBUG << "Removed duplicate entries for modules : ";
968 for ( auto it = duplicateList.begin(); it != duplicateList.end(); ++it ) {
969 log << it->first << "(" << 1 + it->second << ")";
970 if ( it != --duplicateList.end() ) log << ", ";
971 }
972 log << endmsg;
973 }
974
975 const std::vector<std::string>& theNames = newList;
976
977 // only load the new dlls or previously failed dlls
978 ON_DEBUG log << MSG::DEBUG << "Loading declared DLL's" << endmsg;
979
980 std::vector<std::string> successNames, failNames;
981 for ( const auto& it : theNames ) {
982 if ( std::find( m_okDlls.rbegin(), m_okDlls.rend(), it ) == m_okDlls.rend() ) {
983 // found a new module name
984 StatusCode status = m_classManager->loadModule( it );
985 if ( status.isFailure() ) {
986 failNames.push_back( it );
987 result = StatusCode::FAILURE;
988 } else {
989 successNames.push_back( it );
990 }
991 }
992 }
993
994 // report back to the user and store the names of the succesfully loaded dlls
995 if ( !successNames.empty() ) {
996 log << MSG::INFO << "Successfully loaded modules : ";
997 for ( auto it = successNames.begin(); it != successNames.end(); it++ ) {
998 log << ( *it );
999 if ( ( it + 1 ) != successNames.end() ) log << ", ";
1000 // save name
1001 m_okDlls.push_back( *it );
1002 }
1003 log << endmsg;
1004 }
1005
1006 if ( result == StatusCode::FAILURE ) {
1007 log << MSG::WARNING << "Failed to load modules: ";
1008 for ( auto it = failNames.begin(); it != failNames.end(); it++ ) {
1009 log << ( *it );
1010 if ( ( it + 1 ) != failNames.end() ) log << ", ";
1011 }
1012 log << endmsg;
1013 }
1014 return result;
1015}
std::vector< std::string > m_okDlls
names of successfully loaded dlls

◆ decodeExtSvcNameList()

StatusCode ApplicationMgr::decodeExtSvcNameList ( )

Definition at line 913 of file ApplicationMgr.cpp.

913 {
914 StatusCode result = StatusCode::SUCCESS;
915
916 const auto& theNames = m_extSvcNameList.value();
917
918 auto it = theNames.begin();
919 auto et = theNames.end();
920 while ( result.isSuccess() && it != et ) {
921 Gaudi::Utils::TypeNameString item( *it++ );
922 if ( m_extSvcCreates ) {
923 if ( ( result = svcManager()->addService( item, ServiceManager::DEFAULT_SVC_PRIORITY ) ).isFailure() ) {
924 MsgStream log( m_messageSvc, m_name );
925 log << MSG::ERROR << "decodeExtSvcNameList: Cannot create service " << item.type() << "/" << item.name()
926 << endmsg;
927 }
928 } else {
929 if ( ( result = svcManager()->declareSvcType( item.name(), item.type() ) ).isFailure() ) {
930 MsgStream log( m_messageSvc, m_name );
931 log << MSG::ERROR << "decodeExtSvcNameList: Cannot declare service " << item.type() << "/" << item.name()
932 << endmsg;
933 }
934 }
935 }
936 return result;
937}
Gaudi::Property< bool > m_extSvcCreates

◆ dllNameListHandler()

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

Definition at line 939 of file ApplicationMgr.cpp.

939 {
940 if ( !( decodeDllNameList() ).isSuccess() ) {
941 throw GaudiException( "Failed to load DLLs.", "MinimalEventLoopMgr::dllNameListHandler", StatusCode::FAILURE );
942 }
943}

◆ empty()

bool ApplicationMgr::empty ( ) const
override

Definition at line 785 of file ApplicationMgr.cpp.

785 {
787}
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.

◆ evtLoopPropertyHandler()

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

Definition at line 872 of file ApplicationMgr.cpp.

872 {
873 if ( m_processingMgr ) {
874 auto props = m_processingMgr.as<IProperty>();
875 if ( props ) props->setProperty( p ).ignore();
876 }
877}

◆ executeEvent()

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

implementation of IEventProcessor::executeEvent(void*)

Definition at line 771 of file ApplicationMgr.cpp.

771 {
773 if ( m_processingMgr ) { return m_processingMgr->executeEvent( std::move( ctx ) ); }
774 }
775 MsgStream log( m_messageSvc, name() );
776 log << MSG::FATAL << "executeEvent: Invalid state \"" << FSMState() << "\"" << endmsg;
777 return StatusCode::FAILURE;
778}

◆ executeRun()

StatusCode ApplicationMgr::executeRun ( int evtmax)
override

implementation of IEventProcessor::executeRun(int)

Definition at line 802 of file ApplicationMgr.cpp.

802 {
803 MsgStream log( m_messageSvc, name() );
805 if ( m_processingMgr ) { return m_processingMgr->executeRun( evtmax ); }
806 log << MSG::WARNING << "No EventLoop Manager specified " << endmsg;
807 return StatusCode::SUCCESS;
808 }
809 log << MSG::FATAL << "executeRun: Invalid state \"" << FSMState() << "\"" << endmsg;
810 return StatusCode::FAILURE;
811}

◆ extSvcNameListHandler()

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

Definition at line 906 of file ApplicationMgr.cpp.

906 {
907 if ( !( decodeExtSvcNameList() ).isSuccess() ) {
908 throw GaudiException( "Failed to declare ext services", "MinimalEventLoopMgr::extSvcNameListHandler",
910 }
911}

◆ finalize()

StatusCode ApplicationMgr::finalize ( )
override

Definition at line 562 of file ApplicationMgr.cpp.

562 {
563 MsgStream log( m_messageSvc, name() );
565 log << MSG::INFO << "Already Finalized" << endmsg;
566 return StatusCode::SUCCESS;
567 }
569 log << MSG::FATAL << "finalize: Invalid state \"" << m_state << "\"" << endmsg;
570 return StatusCode::FAILURE;
571 }
573
574 // disable message suppression in finalize
575 m_svcLocator->service<IProperty>( "MessageSvc" )
576 ->setProperty( Gaudi::Property<bool>( "enableSuppression", false ) )
577 .ignore();
578
579 // Finalize independently managed Algorithms
580 StatusCode sc = algManager()->finalize();
581 if ( sc.isFailure() ) {
582 log << MSG::WARNING << "Failed to finalize an algorithm." << endmsg;
584 }
585
586 // Finalize all Services
587 sc = svcManager()->finalize();
588 if ( sc.isFailure() ) {
589 log << MSG::WARNING << "Failed to finalize a service." << endmsg;
591 }
592
593 // svcManager()->removeService( (IService*) m_processingMgr.get() );
594 // svcManager()->removeService( (IService*) m_runable.get() );
595
596 if ( sc.isSuccess() ) {
597 log << MSG::INFO << "Application Manager Finalized successfully" << endmsg;
598 } else {
599 log << MSG::ERROR << "Application Manager failed to finalize" << endmsg;
600 }
601
603 return sc;
604}
SmartIF< IAlgManager > & algManager()
virtual StatusCode finalize()=0
Finalize (from INITIALIZED to CONFIGURED).
void ignore() const
Allow discarding a StatusCode without warning.
Definition StatusCode.h:128
constexpr int FinalizationFailure
Error codes for operation failures.

◆ FSMState()

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

Definition at line 825 of file ApplicationMgr.cpp.

825{ return m_state; }

◆ getManager()

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

Definition at line 129 of file ApplicationMgr.h.

129 {
130 return m_managers[I::interfaceID().id()];
131 }

◆ 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 665 of file ApplicationMgr.cpp.

665 {
666 StatusCode sc = StatusCode::SUCCESS;
667
668 switch ( state ) {
669
671 switch ( m_state ) {
673 return StatusCode::SUCCESS;
674 break;
676 return terminate();
677 break;
678 default: // Gaudi::StateMachine::INITIALIZED or Gaudi::StateMachine::RUNNING
680 if ( sc.isSuccess() ) { return terminate(); }
681 break;
682 }
683 break;
684
686 switch ( m_state ) {
688 return StatusCode::SUCCESS;
689 break;
691 return configure();
692 break;
694 return finalize();
695 break;
696 default: // Gaudi::StateMachine::RUNNING
698 if ( sc.isSuccess() ) { return finalize(); }
699 break;
700 }
701 break;
702
704 switch ( m_state ) {
706 return StatusCode::SUCCESS;
707 break;
709 return initialize();
710 break;
712 return stop();
713 break;
714 default: // Gaudi::StateMachine::OFFLINE
716 if ( sc.isSuccess() ) { return initialize(); }
717 break;
718 }
719 break;
720
722 switch ( m_state ) {
724 return StatusCode::SUCCESS;
725 break;
727 return start();
728 break;
729 default: // Gaudi::StateMachine::OFFLINE or Gaudi::StateMachine::CONFIGURED
731 if ( sc.isSuccess() ) { return start(); }
732 break;
733 }
734 break;
735 }
736
737 // If I get here, there has been a problem in the recursion
738
739 if ( ignoreFailures ) {
740 // force the new state
741 m_state = state;
742 return StatusCode::SUCCESS;
743 }
744
745 return sc;
746}
StatusCode GoToState(Gaudi::StateMachine::State state, bool ignoreFailures=false)
Reach a state from current state (whichever it is) going through the correct transitions.
StatusCode finalize() override
StatusCode terminate() override
StatusCode initialize() override
StatusCode stop() override
StatusCode start() override
StatusCode configure() override

◆ i_cast()

void const * ApplicationMgr::i_cast ( const InterfaceID & iid) const
override

Definition at line 117 of file ApplicationMgr.cpp.

117 {
118 // try our own interfaces
119 if ( auto output = base_class::i_cast( iid ) ) { return output; }
120 // delegate to other instances
121 if ( ISvcLocator::interfaceID().versionMatch( iid ) ) { return serviceLocator().get(); }
122 if ( ISvcManager::interfaceID().versionMatch( iid ) ) {
123 return const_cast<ApplicationMgr*>( this )->svcManager().get();
124 }
125 if ( IAlgManager::interfaceID().versionMatch( iid ) ) {
126 return const_cast<ApplicationMgr*>( this )->algManager().get();
127 }
128 if ( IClassManager::interfaceID().versionMatch( iid ) ) { return m_classManager.get(); }
129 if ( IMessageSvc::interfaceID().versionMatch( iid ) ) {
130 // Note that 0 can be a valid IMessageSvc pointer value (when used for
131 // MsgStream).
132 return m_messageSvc.get();
133 }
134 return nullptr;
135}
ApplicationMgr(IInterface *=nullptr)
static const InterfaceID & interfaceID()
Return an instance of InterfaceID identifying the interface.
Definition IInterface.h:234
TYPE * get() const
Get interface pointer.
Definition SmartIF.h:82

◆ i_delegateToEvtProc()

template<typename SELF, typename PIMPL, typename METHOD, typename... ARGS>
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 317 of file ApplicationMgr.h.

318 {
319 if ( self->m_state == Gaudi::StateMachine::RUNNING ) {
320 if ( bool( member ) ) {
321 return std::invoke( method, *member.get(), std::forward<ARGS>( args )... );
322 } else {
323 std::stringstream s;
324 s << method_name << ": event processor is not a \""
325 << System::typeinfoName( typeid( decltype( *member.get() ) ) ) << '"';
326 throw GaudiException{ s.str(), self->name(), StatusCode::FAILURE };
327 }
328 }
329 std::stringstream s;
330 s << method_name << ": Invalid state \"" << self->FSMState() << '"';
331 throw GaudiException{ s.str(), self->name(), StatusCode::FAILURE };
332 }

◆ i_startup()

StatusCode ApplicationMgr::i_startup ( )
protected

Internal startup routine.

Definition at line 137 of file ApplicationMgr.cpp.

137 {
138
139 StatusCode sc;
140
141 // declare factories in current module
142 m_classManager->loadModule( "" ).ignore();
143
144 // Note: we cannot use CommonMessaging methods here because MessageSvc is not there yet
145 MsgStream log( nullptr, name() );
146
147 // Enable ROOT thread safety
149 if ( gROOT ) {
150 ROOT::EnableThreadSafety();
151 } else {
153 << "ROOT not yet initialized, we cannot enable thread safety "
154 "(EnableROOTThreadSafety==True)"
155 << endmsg;
156 }
157 }
158
159 // Create the Message service
160 auto msgsvc = svcManager()->createService( Gaudi::Utils::TypeNameString( "MessageSvc", m_messageSvcType ) );
161 if ( !msgsvc ) {
162 log << MSG::FATAL << "Error creating MessageSvc of type " << m_messageSvcType << endmsg;
163 return StatusCode::FAILURE;
164 }
165 // Get the useful interface from Message services
166 m_messageSvc = m_svcLocator->service( "MessageSvc" );
167 if ( !m_messageSvc ) {
168 log << MSG::FATAL << "Error retrieving MessageSvc." << endmsg;
169 return StatusCode::FAILURE;
170 }
171 sc = m_messageSvc.as<IProperty>()->setProperty( "OutputLevel", m_outputLevel );
172 if ( !sc ) {
173 log << MSG::FATAL << "Error setting OutputLevel option of MessageSvc" << endmsg;
174 return sc;
175 }
177 if ( gROOT ) {
178 // if ROOT is already initialized (usually it is the case) we redirect messages to MessageSvc.
179 s_messageSvcInstance = m_messageSvc.get();
180 s_originalRootErrorHandler = SetErrorHandler( ROOTErrorHandlerAdapter );
181 } else {
183 << "ROOT not yet initialized, we cannot override the error handler are requested "
184 "(UseMessageSvcForROOTMessages==true)"
185 << endmsg;
186 }
187 }
188
189 auto jobsvc = svcManager()->createService( Gaudi::Utils::TypeNameString( "JobOptionsSvc", m_jobOptionsSvcType ) );
190 // Create the Job Options service
191 if ( !jobsvc ) {
192 log << MSG::FATAL << "Error creating JobOptionsSvc" << endmsg;
193 return StatusCode::FAILURE;
194 }
195
196 auto jobOptsIProp = jobsvc.as<IProperty>();
197 if ( !jobOptsIProp ) {
198 log << MSG::FATAL << "Error locating JobOptionsSvc" << endmsg;
199 return StatusCode::FAILURE;
200 }
201 sc = jobOptsIProp->setProperty( Gaudi::Property<std::string>( "TYPE", m_jobOptionsType ) );
202 if ( !sc.isSuccess() ) {
203 log << MSG::FATAL << "Error setting TYPE option in JobOptionsSvc" << endmsg;
204 return sc;
205 }
206
207 if ( !m_jobOptionsPreAction.empty() ) {
208 sc = jobOptsIProp->setProperty( Gaudi::Property<std::string>( "PYTHONPARAMS", m_jobOptionsPreAction ) );
209 if ( !sc.isSuccess() ) {
210 log << MSG::FATAL << "Error setting JobOptionsPreAction option in JobOptionsSvc" << endmsg;
211 return sc;
212 }
213 }
214
215 if ( !m_jobOptionsPostAction.empty() ) {
216 sc = jobOptsIProp->setProperty( Gaudi::Property<std::string>( "PYTHONACTION", m_jobOptionsPostAction ) );
217 if ( !sc.isSuccess() ) {
218 log << MSG::FATAL << "Error setting JobOptionsPostAction option in JobOptionsSvc" << endmsg;
219 return sc;
220 }
221 }
222
223 if ( !m_jobOptionsPath.empty() ) { // The command line takes precedence
224 sc = jobOptsIProp->setProperty( Gaudi::Property<std::string>( "PATH", m_jobOptionsPath ) );
225 if ( !sc.isSuccess() ) {
226 log << MSG::FATAL << "Error setting PATH option in JobOptionsSvc" << endmsg;
227 return sc;
228 }
229 } else if ( isEnvSet( "JOBOPTPATH" ) ) { // Otherwise the Environment JOBOPTPATH
230 sc = jobOptsIProp->setProperty( Gaudi::Property<std::string>( "PATH", getEnv( "JOBOPTPATH" ) ) );
231 if ( !sc.isSuccess() ) {
232 log << MSG::FATAL << "Error setting PATH option in JobOptionsSvc from env" << endmsg;
233 return sc;
234 }
235 } else { // Otherwise the default
236 sc = jobOptsIProp->setProperty( Gaudi::Property<std::string>( "PATH", "../options/job.opts" ) );
237 if ( !sc.isSuccess() ) {
238 log << MSG::FATAL << "Error setting PATH option in JobOptionsSvc to default" << endmsg;
239 return sc;
240 }
241 }
242 jobOptsIProp.reset();
243
244 // Sets my default the Output Level of the Message service to be
245 // the same as this
246 auto msgSvcIProp = msgsvc.as<IProperty>();
247 msgSvcIProp->setProperty( Gaudi::Property<int>( "OutputLevel", m_outputLevel ) ).ignore();
248 msgSvcIProp.reset();
249
250 sc = jobsvc->sysInitialize();
251 if ( !sc.isSuccess() ) {
252 log << MSG::FATAL << "Error initializing JobOptionsSvc" << endmsg;
253 return sc;
254 }
255 sc = msgsvc->sysInitialize();
256 if ( !sc.isSuccess() ) {
257 log << MSG::FATAL << "Error initializing MessageSvc" << endmsg;
258 return sc;
259 }
260
261 // Make sure output level caches are up to date.
263
264 return sc;
265}
GAUDI_API bool isEnvSet(const char *var)
Check if an environment variable is set or not.
Definition System.cpp:334
GAUDI_API std::string getEnv(const char *var)
get a particular environment variable (returning "UNKNOWN" if not set)
Definition System.cpp:314
Gaudi::Property< std::string > m_jobOptionsType
Gaudi::Property< bool > m_useMessageSvcForROOTMessages
Gaudi::Property< std::string > m_jobOptionsPath
Gaudi::Property< bool > m_enableROOTThreadSafety
Gaudi::Property< std::string > m_jobOptionsPreAction
void outputLevelUpdate() override
Function to call to update the outputLevel of the components (after a change in MessageSvc).
Gaudi::Property< std::string > m_jobOptionsSvcType
Gaudi::Property< std::string > m_jobOptionsPostAction
Gaudi::Property< std::string > m_messageSvcType
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.
SmartIF< IFace > as() const
return a new SmartIF instance to another interface
Definition SmartIF.h:110

◆ initialize()

StatusCode ApplicationMgr::initialize ( )
override

Definition at line 433 of file ApplicationMgr.cpp.

433 {
434 StatusCode sc;
435
436 MsgStream log( m_messageSvc, name() );
437
438 // Make sure output level caches are up to date.
440
441 // I cannot add these services in configure() because they are coming from GaudiUtils
442 // and it messes up genconf when rebuilding it.
443 if ( m_stopOnSignal ) {
444 // Instantiate the service that schedules a stop when a signal is received
445 std::string svcname( "Gaudi::Utils::StopSignalHandler" );
446 sc = svcManager()->addService( svcname );
447 if ( sc.isFailure() ) {
448 log << MSG::INFO << "Cannot instantiate " << svcname << "signals will be ignored" << endmsg;
449 }
450 }
451
453 log << MSG::INFO << "Already Initialized!" << endmsg;
454 return StatusCode::SUCCESS;
455 }
457 log << MSG::FATAL << "initialize: Invalid state \"" << m_state << "\"" << endmsg;
458 return StatusCode::FAILURE;
459 }
461
462 //--------------------------------------------------------------------------
463 // Initialize the list of top Services
464 //--------------------------------------------------------------------------
465 sc = svcManager()->initialize();
466 if ( !sc.isSuccess() ) return sc;
467
468 sc = algManager()->initialize();
469 if ( !sc.isSuccess() ) return sc;
470
471 //--------------------------------------------------------------------------
472 // Final steps: Inform user and change internal state
473 //--------------------------------------------------------------------------
474 log << MSG::INFO << "Application Manager Initialized successfully" << endmsg;
476
478
479 return sc;
480}
Gaudi::Property< bool > m_printAlgsSequence
void printAlgsSequences()
Print the sequence of algorithms that have been loaded.
Gaudi::Property< bool > m_stopOnSignal
Property to enable/disable the "stop on signal" service.
virtual StatusCode initialize()=0
Initialization (from CONFIGURED to INITIALIZED).

◆ monitoringHub()

Gaudi::Monitoring::Hub & ApplicationMgr::monitoringHub ( )
inlineoverride

Definition at line 151 of file ApplicationMgr.h.

151{ return m_monitoringHub; }
Gaudi::Monitoring::Hub m_monitoringHub

◆ name()

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

Definition at line 823 of file ApplicationMgr.cpp.

823{ return m_name; }

◆ nextEvent()

StatusCode ApplicationMgr::nextEvent ( int maxevt)
override

Definition at line 513 of file ApplicationMgr.cpp.

513 {
515 MsgStream log( m_messageSvc, name() );
516 log << MSG::FATAL << "nextEvent: Invalid state \"" << m_state << "\"" << endmsg;
517 return StatusCode::FAILURE;
518 }
519 if ( !m_processingMgr ) {
520 MsgStream log( m_messageSvc, name() );
521 log << MSG::FATAL << "No event processing manager specified. Check option: " << m_eventLoopMgr.name() << endmsg;
522 return StatusCode::FAILURE;
523 }
524 return m_processingMgr->nextEvent( maxevt );
525}

◆ outputLevelUpdate()

void ApplicationMgr::outputLevelUpdate ( )
override

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

Definition at line 1017 of file ApplicationMgr.cpp.

1017 {
1019 for ( auto& mgrItem : m_managers ) { mgrItem.second->outputLevelUpdate(); }
1020}

◆ pluginDebugPropertyHandler()

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

◆ pop()

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

Definition at line 789 of file ApplicationMgr.cpp.

789 {
791}
virtual std::optional< ResultType > pop()=0
Get the next available result.

◆ printAlgsSequences()

void ApplicationMgr::printAlgsSequences ( )

Print the sequence of algorithms that have been loaded.

Definition at line 1043 of file ApplicationMgr.cpp.

1043 {
1044 MsgStream log( m_messageSvc, m_name );
1045 log << MSG::ALWAYS << "****************************** Algorithm Sequence ****************************" << endmsg;
1046 for ( auto& algname : m_topAlgNameList ) { printAlgsSequencesHelper( algManager(), algname, log, 0 ); }
1047 log << MSG::ALWAYS << "******************************************************************************" << endmsg;
1048}
Gaudi::Property< std::vector< std::string > > m_topAlgNameList

◆ push()

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

Definition at line 780 of file ApplicationMgr.cpp.

780 {
782 std::move( ctx ) );
783}
virtual void push(EventContext &&ctx)=0
Schedule the processing of an event.

◆ reinitialize()

StatusCode ApplicationMgr::reinitialize ( )
override

Definition at line 828 of file ApplicationMgr.cpp.

828 {
829 MsgStream log( m_messageSvc, name() );
830 StatusCode retval = StatusCode::SUCCESS;
831 StatusCode sc;
833 throw GaudiException( "Cannot reinitialize application if not INITIALIZED or RUNNING",
834 "ApplicationMgr::reinitialize", StatusCode::FAILURE );
835 }
837 sc = svcManager()->reinitialize();
838 if ( sc.isFailure() ) retval = sc;
839 sc = algManager()->reinitialize();
840 if ( sc.isFailure() ) retval = sc;
841
842 sc = m_messageSvc.as<IService>()->sysReinitialize();
843 if ( sc.isFailure() ) retval = sc;
844 sc = m_svcLocator->service( "JobOptionsSvc" )->sysReinitialize();
845 if ( sc.isFailure() ) retval = sc;
846
847 log << MSG::INFO << "Application Manager Reinitialized successfully" << endmsg;
848
849 return retval;
850}
StatusCode sysReinitialize() override
virtual StatusCode reinitialize()=0
Initialization (from INITIALIZED or RUNNING to INITIALIZED, via CONFIGURED).

◆ restart()

StatusCode ApplicationMgr::restart ( )
override

Definition at line 852 of file ApplicationMgr.cpp.

852 {
853 StatusCode retval = StatusCode::SUCCESS;
854 StatusCode sc;
856 throw GaudiException( "Cannot restart application if not RUNNING", "ApplicationMgr::restart", StatusCode::FAILURE );
857 }
858
859 sc = svcManager()->restart();
860 if ( sc.isFailure() ) retval = sc;
861 sc = algManager()->restart();
862 if ( sc.isFailure() ) retval = sc;
863
864 sc = m_messageSvc.as<IService>()->sysRestart();
865 if ( sc.isFailure() ) retval = sc;
866 sc = m_svcLocator->service( "JobOptionsSvc" )->sysRestart();
867 if ( sc.isFailure() ) retval = sc;
868
869 return retval;
870}
StatusCode sysRestart() override
virtual StatusCode restart()=0
Initialization (from RUNNING to RUNNING, via INITIALIZED).

◆ run()

StatusCode ApplicationMgr::run ( )
override

Definition at line 748 of file ApplicationMgr.cpp.

748 {
749 StatusCode sc = StatusCode::SUCCESS;
750
752 if ( sc.isSuccess() ) {
753 MsgStream log( m_messageSvc, name() );
754 if ( m_runable != 0 ) { // loop over the events
755 sc = m_runable->run();
756 if ( !sc.isSuccess() ) { log << MSG::FATAL << "Application execution failed. Ending the job." << endmsg; }
757 } else {
758 log << MSG::FATAL << "Application has no runable object. Check option:" << m_runableType.name() << endmsg;
759 }
760 }
761 if ( sc.isSuccess() ) { // try to close cleanly
763 }
764 // either the runable failed of the stut-down
765 if ( sc.isFailure() ) { // try to close anyway (but keep the StatusCode unchanged)
767 }
768 return sc;
769}

◆ serviceLocator()

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

Needed to locate the message service.

Definition at line 146 of file ApplicationMgr.h.

146{ return m_svcLocator; }

◆ setServiceManager()

void ApplicationMgr::setServiceManager ( ISvcManager * )
inlineoverrideprotected

Definition at line 158 of file ApplicationMgr.h.

158{}

◆ start()

StatusCode ApplicationMgr::start ( )
override

Definition at line 482 of file ApplicationMgr.cpp.

482 {
483
484 MsgStream log( m_messageSvc, name() );
485
487 log << MSG::INFO << "Already Initialized!" << endmsg;
488 return StatusCode::SUCCESS;
489 }
491 log << MSG::FATAL << "start: Invalid state \"" << m_state << "\"" << endmsg;
492 return StatusCode::FAILURE;
493 }
495
496 //--------------------------------------------------------------------------
497 // Initialize the list of top Services
498 //--------------------------------------------------------------------------
499 return m_svcLocator->service( "JobOptionsSvc" )
500 ->sysStart()
501 .andThen( [&]() { return m_messageSvc.as<IService>()->sysStart(); } )
502 .andThen( [&]() { return svcManager()->start(); } )
503 .andThen( [&]() { return algManager()->start(); } )
504 .andThen( [&]() {
505 //--------------------------------------------------------------------------
506 // Final steps: Inform user and change internal state
507 //--------------------------------------------------------------------------
508 log << MSG::INFO << "Application Manager Started successfully" << endmsg;
510 } );
511}
StatusCode sysStart() override
virtual StatusCode start()=0
Start (from INITIALIZED to RUNNING).

◆ stop()

StatusCode ApplicationMgr::stop ( )
override

Definition at line 527 of file ApplicationMgr.cpp.

527 {
528
529 MsgStream log( m_messageSvc, name() );
530
532 log << MSG::INFO << "Already Initialized!" << endmsg;
533 return StatusCode::SUCCESS;
534 }
536 log << MSG::FATAL << "stop: Invalid state \"" << m_state << "\"" << endmsg;
537 return StatusCode::FAILURE;
538 }
540
541 // Stop independently managed Algorithms
542 return algManager()
543 ->stop()
544 //--------------------------------------------------------------------------
545 // Stop the list of top Services
546 //--------------------------------------------------------------------------
547 .andThen( [&]() { return svcManager()->stop(); } )
548 .andThen( [&]() { return m_messageSvc.as<IService>()->sysStop(); } )
549 .andThen( [&]() { return m_svcLocator->service( "JobOptionsSvc" )->sysStop(); } )
550 //--------------------------------------------------------------------------
551 // Final steps: Inform user and change internal state
552 //--------------------------------------------------------------------------
553 .andThen( [&]() {
554 log << MSG::INFO << "Application Manager Stopped successfully" << endmsg;
556 } );
557}
StatusCode sysStop() override
virtual StatusCode stop()=0
Stop (from RUNNING to INITIALIZED).
StatusCode andThen(F &&f, ARGS &&... args) const
Chain code blocks making the execution conditional a success result.
Definition StatusCode.h:151

◆ stopRun()

StatusCode ApplicationMgr::stopRun ( )
override

implementation of IEventProcessor::stopRun()

Definition at line 813 of file ApplicationMgr.cpp.

813 {
814 MsgStream log( m_messageSvc, name() );
816 if ( m_processingMgr ) { return m_processingMgr->stopRun(); }
817 log << MSG::WARNING << "No EventLoop Manager specified " << endmsg;
818 return StatusCode::SUCCESS;
819 }
820 log << MSG::FATAL << "stopRun: Invalid state \"" << FSMState() << "\"" << endmsg;
821 return StatusCode::FAILURE;
822}

◆ svcManager()

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

Definition at line 133 of file ApplicationMgr.h.

133 {
134 // Cache the casted pointer to ISvcManager
136 return m_svcManager;
137 }
SmartIF< ISvcManager > m_svcManager
Cached pointer to the manager of services.

◆ sysFinalize()

StatusCode ApplicationMgr::sysFinalize ( )
inlineoverride

Definition at line 104 of file ApplicationMgr.h.

104{ return StatusCode::SUCCESS; }

◆ sysInitialize()

StatusCode ApplicationMgr::sysInitialize ( )
inlineoverride

Definition at line 98 of file ApplicationMgr.h.

98{ return StatusCode::SUCCESS; }

◆ sysReinitialize()

StatusCode ApplicationMgr::sysReinitialize ( )
inlineoverride

Definition at line 106 of file ApplicationMgr.h.

106{ return StatusCode::SUCCESS; }

◆ sysRestart()

StatusCode ApplicationMgr::sysRestart ( )
inlineoverride

Definition at line 108 of file ApplicationMgr.h.

108{ return StatusCode::SUCCESS; }

◆ sysStart()

StatusCode ApplicationMgr::sysStart ( )
inlineoverride

Definition at line 100 of file ApplicationMgr.h.

100{ return StatusCode::SUCCESS; }

◆ sysStop()

StatusCode ApplicationMgr::sysStop ( )
inlineoverride

Definition at line 102 of file ApplicationMgr.h.

102{ return StatusCode::SUCCESS; }

◆ targetFSMState()

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

Definition at line 826 of file ApplicationMgr.cpp.

826{ return m_targetState; }

◆ terminate()

StatusCode ApplicationMgr::terminate ( )
override

Definition at line 606 of file ApplicationMgr.cpp.

606 {
607 MsgStream log( m_messageSvc, name() );
608
610 log << MSG::INFO << "Already Offline" << endmsg;
611 return StatusCode::SUCCESS;
612 }
614 log << MSG::FATAL << "terminate: Invalid state \"" << m_state << "\"" << endmsg;
615 return StatusCode::FAILURE;
616 }
617 // release all Services
619
620 if ( m_returnCode.value() == Gaudi::ReturnCode::Success ) {
621 log << MSG::INFO << "Application Manager Terminated successfully" << endmsg;
622 } else if ( m_returnCode.value() == Gaudi::ReturnCode::ScheduledStop ) {
623 log << MSG::INFO << "Application Manager Terminated successfully with a user requested ScheduledStop" << endmsg;
624 } else {
625 log << MSG::ERROR << "Application Manager Terminated with error code " << m_returnCode.value() << endmsg;
626 }
627
628 {
629 auto& opts = m_svcLocator->getOptsSvc();
630 // Force a disable the auditing of finalize for MessageSvc
631 opts.set( "MessageSvc.AuditFinalize", "false" );
632 // Force a disable the auditing of finalize for JobOptionsSvc
633 opts.set( "JobOptionsSvc.AuditFinalize", "false" );
634 }
635
636 // if we have overriden it, restore the original ROOT error handler
637 if ( s_originalRootErrorHandler ) {
638 SetErrorHandler( s_originalRootErrorHandler );
639 s_originalRootErrorHandler = nullptr;
640 }
641 // make sure ROOTErrorHandlerAdapter (if in use) does not try to use the MessageSvc we are about to delete
642 s_messageSvcInstance = nullptr;
643 // finalize MessageSvc
644 auto svc = m_messageSvc.as<IService>();
645 if ( !svc ) {
646 log << MSG::ERROR << "Could not get the IService interface of the MessageSvc" << endmsg;
647 } else {
648 svc->sysFinalize().ignore();
649 svcManager()->removeService( svc ).ignore();
650 }
651
652 // finalize JobOptionsSvc
653 svc = m_svcLocator->service( "JobOptionsSvc" );
654 if ( !svc ) {
655 log << MSG::ERROR << "Could not get the IService interface of the JobOptionsSvc" << endmsg;
656 } else {
657 svc->sysFinalize().ignore();
658 svcManager()->removeService( svc ).ignore();
659 }
660
662 return StatusCode::SUCCESS;
663}
virtual StatusCode removeService(IService *svc)=0
Remove a service from the "active" list of services of the factory.
constexpr int ScheduledStop

Member Data Documentation

◆ m_actHistory

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

Definition at line 259 of file ApplicationMgr.h.

259{ this, "ActivateHistory", false, "Activate HistorySvc" };

◆ m_algManager

SmartIF<IAlgManager> ApplicationMgr::m_algManager
protected

Cached pointer to the manager of algorithms.

Definition at line 183 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 257 of file ApplicationMgr.h.

257{ this, "AppName", "ApplicationMgr", "The name of the application" };

◆ m_appVersion

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

Definition at line 258 of file ApplicationMgr.h.

258{ this, "AppVersion", {}, "The version of the application" };

◆ m_auditAlgs

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

Definition at line 279 of file ApplicationMgr.h.

279{ this, "AuditAlgorithms", false };

◆ m_auditSvcs

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

Definition at line 278 of file ApplicationMgr.h.

278{ this, "AuditServices", false };

◆ m_auditTools

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

Defaults for auditors.

Definition at line 277 of file ApplicationMgr.h.

277{ this, "AuditTools", false };

◆ m_classManager

SmartIF<DLLClassManager> ApplicationMgr::m_classManager
protected

Reference to the class manager.

Definition at line 188 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 273 of file ApplicationMgr.h.

273 {
274 this, "CreateSvc", {}, "List of extra services to be created" };

◆ m_declaredManagers

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

Property to declare the list of known managers.

Definition at line 177 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 244 of file ApplicationMgr.h.

244{ this, "Dlls", {}, "List of DDL's names" };

◆ m_enableROOTThreadSafety

Gaudi::Property<bool> ApplicationMgr::m_enableROOTThreadSafety
protected
Initial value:
{ this, "EnableROOTThreadSafety", true,
"Enable ROOT thread safety at startup." }

Definition at line 306 of file ApplicationMgr.h.

306 { this, "EnableROOTThreadSafety", true,
307 "Enable ROOT thread safety at startup." };

◆ 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 281 of file ApplicationMgr.h.

281 {
282 this, "Environment", {}, "Environment variables to set" };

◆ m_eventLoopMgr

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

Definition at line 252 of file ApplicationMgr.h.

252 { this, "EventLoop", "EventLoopMgr", "Processing manager type",
253 "Service:IEventProcessor" };

◆ 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 238 of file ApplicationMgr.h.

238{ this, "EvtMax", -1, "Number of events to be processed (-1 means all events)" };

◆ m_evtsel

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

Definition at line 254 of file ApplicationMgr.h.

254{ this, "EvtSel", {}, "Event selection" };

◆ m_extSvcCreates

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

Definition at line 241 of file ApplicationMgr.h.

241 { this, "ExtSvcCreates", true,
242 "LHCb (default) or ATLAS definition of \"ExtSvc\"" };

◆ m_extSvcNameList

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

Definition at line 239 of file ApplicationMgr.h.

239 {
240 this, "ExtSvc", {}, "List of external services names", "vector<Service>" };

◆ m_histPersName

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

Definition at line 255 of file ApplicationMgr.h.

255{ this, "HistogramPersistency", "NONE", "Name of the Hist Pers Svc" };

◆ m_jobOptionsPath

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

Definition at line 246 of file ApplicationMgr.h.

246{ this, "JobOptionsPath", {}, "The \"file\" to look for properties" };

◆ m_jobOptionsPostAction

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

Definition at line 249 of file ApplicationMgr.h.

249 {
250 this, "JobOptionsPreAction", {}, "additional command to run on config" };

◆ m_jobOptionsPreAction

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

Definition at line 247 of file ApplicationMgr.h.

247 {
248 this, "JobOptionsPostAction", {}, "additional command to run on config" };

◆ m_jobOptionsSvcType

Gaudi::Property<std::string> ApplicationMgr::m_jobOptionsSvcType
protected
Initial value:
{ this, "JobOptionsSvcType", "JobOptionsSvc", "JobOptionsSvc type",
"Service:Gaudi::Interfaces::IOptionsSvc" }

Definition at line 215 of file ApplicationMgr.h.

215 { this, "JobOptionsSvcType", "JobOptionsSvc", "JobOptionsSvc type",
216 "Service:Gaudi::Interfaces::IOptionsSvc" };

◆ m_jobOptionsType

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

Definition at line 245 of file ApplicationMgr.h.

245{ this, "JobOptionsType", "FILE", "Source type (e.g. dbase, file...)" };

◆ 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 284 of file ApplicationMgr.h.

284 { this, "InitializationLoopCheck", true,
285 [this]( auto& ) { this->svcManager()->setLoopCheckEnabled( m_loopCheck ); },
286 "For ServiceMgr initialization loop checking" };

◆ 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 175 of file ApplicationMgr.h.

◆ m_messageSvc

SmartIF<IMessageSvc> ApplicationMgr::m_messageSvc
protected

Reference to the message service.

Definition at line 226 of file ApplicationMgr.h.

◆ m_messageSvcType

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

Definition at line 213 of file ApplicationMgr.h.

213 { this, "MessageSvcType", "MessageSvc", "MessageSvc type",
214 "Service:IMessageSvc" };

◆ m_monitoringHub

Gaudi::Monitoring::Hub ApplicationMgr::m_monitoringHub
protected

Definition at line 232 of file ApplicationMgr.h.

◆ m_name

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

Name.

Definition at line 218 of file ApplicationMgr.h.

◆ m_okDlls

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

names of successfully loaded dlls

Definition at line 313 of file ApplicationMgr.h.

◆ m_outputLevel

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

Definition at line 256 of file ApplicationMgr.h.

256{ this, "OutputLevel", MSG::INFO, "Message output level" };

◆ m_outStreamNameList

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

Definition at line 211 of file ApplicationMgr.h.

211 {
212 this, "OutStream", {}, &ApplicationMgr::evtLoopPropertyHandler, "List of output stream names" };

◆ m_pluginDebugLevel

Gaudi::Property<int> ApplicationMgr::m_pluginDebugLevel
protected
Initial value:
{ this, "PluginDebugLevel", 0,
[this]( auto& ) {
if ( m_pluginDebugLevel.value() ) {
MsgStream log( m_messageSvc, this->name() );
log << MSG::INFO
<< "Updating Gaudi::PluginService::SetDebug(level) to level="
<< m_pluginDebugLevel.value() << endmsg;
}
Gaudi::PluginService::SetDebug( m_pluginDebugLevel );
},
"Debug level for the plugin system" }
Gaudi::Property< int > m_pluginDebugLevel
Definition of the MsgStream class used to transmit messages.
Definition MsgStream.h:29

Definition at line 260 of file ApplicationMgr.h.

260 { this, "PluginDebugLevel", 0,
261 [this]( auto& ) {
262 // Setup debug level for the plugin system
263 if ( m_pluginDebugLevel.value() ) {
264 MsgStream log( m_messageSvc, this->name() );
265 log << MSG::INFO
266 << "Updating Gaudi::PluginService::SetDebug(level) to level="
267 << m_pluginDebugLevel.value() << endmsg;
268 }
269 Gaudi::PluginService::SetDebug( m_pluginDebugLevel );
270 },
271 "Debug level for the plugin system" };

◆ 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 300 of file ApplicationMgr.h.

300 { this, "PrintAlgsSequence", false,
301 "Print the sequence of algorithms that have been loaded." };

◆ m_processingMgr

SmartIF<IEventProcessor> ApplicationMgr::m_processingMgr
protected

Reference to processing manager object.

Definition at line 228 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 293 of file ApplicationMgr.h.

293 { this, "PropertiesPrint", false,
294 "Flag to activate the printout of properties" };

◆ m_queueingProcessor

SmartIF<IQueueingEventProcessor> ApplicationMgr::m_queueingProcessor
protected

Reference to a queueing processing manager object.

Definition at line 230 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 297 of file ApplicationMgr.h.

297 { this, "ReturnCode", Gaudi::ReturnCode::Success,
298 "Return code of the application. Set internally in case of error conditions." };

◆ m_runable

SmartIF<IRunable> ApplicationMgr::m_runable
protected

Reference to the runable object.

Definition at line 227 of file ApplicationMgr.h.

◆ m_runableType

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

Definition at line 251 of file ApplicationMgr.h.

251{ this, "Runable", "AppMgrRunable", "Runable type", "Service:IRunable" };

◆ 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 198 of file ApplicationMgr.h.

198 { this, "Exit", 0,
199 [this]( auto& ) {
200 finalize().ignore();
201 terminate().ignore();
202 ::exit( 0 );
203 },
204 "For SI's \"Exit\" command via callback" };

◆ 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" }
Gaudi::Property< int > m_evtMax
StatusCode reinitialize() override
StatusCode executeRun(int evtmax) override
implementation of IEventProcessor::executeRun(int)

Definition at line 190 of file ApplicationMgr.h.

190 { this, "Go", 0,
191 [this]( auto& ) {
192 // Re-initialize everything
193 this->reinitialize().ignore();
194 // Execute a number of events
195 this->executeRun( m_evtMax ).ignore();
196 },
197 "For SI's \"Go\" command via callback" };

◆ m_state

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

Internal State.

Definition at line 219 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 290 of file ApplicationMgr.h.

290 {
291 this, "StopOnSignal", false, "Flag to enable/disable the signal handler that schedule a stop of the event loop" };

◆ m_svcLocator

SmartIF<ISvcLocator> ApplicationMgr::m_svcLocator
mutableprotected

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

Definition at line 186 of file ApplicationMgr.h.

◆ m_svcManager

SmartIF<ISvcManager> ApplicationMgr::m_svcManager
protected

Cached pointer to the manager of services.

Definition at line 180 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 222 of file ApplicationMgr.h.

222{ this, "SvcMapping", {}, "Default mapping of services" };

◆ m_svcOptMapping

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

Definition at line 223 of file ApplicationMgr.h.

223 {
224 this, "SvcOptMapping", {}, "Default mapping of optional services" };

◆ m_targetState

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

Internal State.

Definition at line 220 of file ApplicationMgr.h.

◆ m_topAlgNameList

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

Definition at line 205 of file ApplicationMgr.h.

205 { this,
206 "TopAlg",
207 {},
209 "List of top level algorithms names",
210 "vector<Algorithm>" };

◆ m_useHiveAlgorithmManager

bool ApplicationMgr::m_useHiveAlgorithmManager
protected

Definition at line 310 of file ApplicationMgr.h.

◆ m_useMessageSvcForROOTMessages

Gaudi::Property<bool> ApplicationMgr::m_useMessageSvcForROOTMessages
protected
Initial value:
{ this, "UseMessageSvcForROOTMessages", true,
"Replace ROOT error handler with MessageSvc." }

Definition at line 303 of file ApplicationMgr.h.

303 { this, "UseMessageSvcForROOTMessages", true,
304 "Replace ROOT error handler with MessageSvc." };

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