The Gaudi Framework  v30r4 (9b837755)
AlgTool.cpp
Go to the documentation of this file.
1 // Include files
2 #include "GaudiKernel/AlgTool.h"
7 
9 #include "GaudiKernel/Auditor.h"
11 #include "GaudiKernel/Guards.h"
12 #include "GaudiKernel/Service.h"
14 #include "GaudiKernel/System.h"
15 #include "GaudiKernel/ToolHandle.h"
16 
17 //------------------------------------------------------------------------------
18 namespace
19 {
20  template <typename FUN>
21  StatusCode attempt( AlgTool& tool, const char* label, FUN&& fun )
22  {
23  try {
24  return fun();
25  } catch ( const GaudiException& Exception ) {
26  MsgStream log( tool.msgSvc(), tool.name() + "." + label );
27  log << MSG::FATAL << " Exception with tag=" << Exception.tag() << " is caught" << endmsg;
28  log << MSG::ERROR << Exception << endmsg;
29  } catch ( const std::exception& Exception ) {
30  MsgStream log( tool.msgSvc(), tool.name() + "." + label );
31  log << MSG::FATAL << " Standard std::exception is caught" << endmsg;
32  log << MSG::ERROR << Exception.what() << endmsg;
33  } catch ( ... ) {
34  MsgStream log( tool.msgSvc(), tool.name() + "." + label );
35  log << MSG::FATAL << "UNKNOWN Exception is caught" << endmsg;
36  }
37  return StatusCode::FAILURE;
38  }
39 }
40 
41 //------------------------------------------------------------------------------
42 StatusCode AlgTool::queryInterface( const InterfaceID& riid, void** ppvi )
43 //------------------------------------------------------------------------------
44 {
45  if ( !ppvi ) {
46  return StatusCode::FAILURE;
47  } // RETURN
48  StatusCode sc = base_class::queryInterface( riid, ppvi );
49  if ( sc.isSuccess() ) return sc;
51  [&]( const std::pair<InterfaceID, void*>& item ) { return item.first.versionMatch( riid ); } );
52  if ( i == std::end( m_interfaceList ) ) {
53  *ppvi = nullptr;
54  return Status::NO_INTERFACE; // RETURN
55  }
56  *ppvi = i->second;
57  addRef();
58  return StatusCode::SUCCESS; // RETURN
59 }
60 //------------------------------------------------------------------------------
61 const std::string& AlgTool::name() const
62 //------------------------------------------------------------------------------
63 {
64  return m_name;
65 }
66 
67 //------------------------------------------------------------------------------
68 const std::string& AlgTool::type() const
69 //------------------------------------------------------------------------------
70 {
71  return m_type;
72 }
73 
74 //------------------------------------------------------------------------------
76 //------------------------------------------------------------------------------
77 {
78  return m_parent;
79 }
80 
81 //------------------------------------------------------------------------------
83 //------------------------------------------------------------------------------
84 {
85  return m_svcLocator;
86 }
87 
88 // ============================================================================
89 // accessor to event service service
90 // ============================================================================
92 {
93  if ( !m_evtSvc ) {
94  m_evtSvc = service( "EventDataSvc", true );
95  if ( !m_evtSvc ) {
96  throw GaudiException( "Service [EventDataSvc] not found", name(), StatusCode::FAILURE );
97  }
98  }
99  return m_evtSvc;
100 }
101 //------------------------------------------------------------------------------
103 //------------------------------------------------------------------------------
104 {
105  if ( !m_ptoolSvc ) {
106  m_ptoolSvc = service( "ToolSvc", true );
107  if ( !m_ptoolSvc ) {
108  throw GaudiException( "Service [ToolSvc] not found", name(), StatusCode::FAILURE );
109  }
110  }
111  return m_ptoolSvc.get();
112 }
113 
114 //------------------------------------------------------------------------------
116 //------------------------------------------------------------------------------
117 {
118  if ( !m_svcLocator ) return StatusCode::FAILURE;
119  auto jos = m_svcLocator->service<IJobOptionsSvc>( "JobOptionsSvc" );
120  if ( !jos ) return StatusCode::FAILURE;
121 
122  return jos->setMyProperties( name(), this );
123 }
124 
125 //------------------------------------------------------------------------------
127  //------------------------------------------------------------------------------
128  : m_type( type ),
129  m_name( name ),
130  m_parent( parent )
131 {
132  addRef(); // Initial count set to 1
133 
134  IInterface* _p = const_cast<IInterface*>( parent );
135 
136  if ( Algorithm* _alg = dynamic_cast<Algorithm*>( _p ) ) {
137  m_svcLocator = _alg->serviceLocator();
138  } else if ( Service* _svc = dynamic_cast<Service*>( _p ) ) {
139  m_svcLocator = _svc->serviceLocator();
140  } else if ( AlgTool* _too = dynamic_cast<AlgTool*>( _p ) ) {
141  m_svcLocator = _too->serviceLocator();
142  } else if ( Auditor* _aud = dynamic_cast<Auditor*>( _p ) ) {
143  m_svcLocator = _aud->serviceLocator();
144  } else {
145  throw GaudiException( "Failure to create tool '" + type + "/" + name + "': illegal parent type '" +
146  System::typeinfoName( typeid( *_p ) ) + "'",
147  "AlgTool", StatusCode::FAILURE );
148  }
149 
150  // inherit output level from parent
151  { // get the "OutputLevel" property from parent
152  SmartIF<IProperty> pprop( _p );
153  if ( pprop && pprop->hasProperty( "OutputLevel" ) ) {
154  m_outputLevel.assign( pprop->getProperty( "OutputLevel" ) );
155  }
156  }
157 
158  {
159  // Auditor monitoring properties
160  // Initialize the default value from ApplicationMgr AuditAlgorithms
161  Gaudi::Property<bool> audit( false );
162  // note that here we need that the service locator is already defined
163  auto appMgr = serviceLocator()->service<IProperty>( "ApplicationMgr" );
164  if ( appMgr && appMgr->hasProperty( "AuditTools" ) ) {
165  audit.assign( appMgr->getProperty( "AuditTools" ) );
166  }
167  m_auditInit = audit;
168  m_auditorInitialize = audit;
169  m_auditorStart = audit;
170  m_auditorStop = audit;
171  m_auditorFinalize = audit;
172  m_auditorReinitialize = audit;
173  m_auditorRestart = audit;
174  }
175 }
176 
177 //-----------------------------------------------------------------------------
179 {
180  //-----------------------------------------------------------------------------
181  return attempt( *this, "sysInitialize", [&]() {
183  Gaudi::Guards::AuditorGuard guard( this,
184  // check if we want to audit the initialize
186  StatusCode sc = initialize();
187  if ( !sc ) return sc;
188 
190 
191  // Perfor any scheduled dependency update
193 
194  // Collect all explicit dependencies in a single place
196 
197  // Check for explicit circular data dependencies
198  sc = handleCircularDataDependencies( [this]( const DataObjID& key ) -> CircularDepAction {
199  error() << "Explicit circular data dependency detected for id " << key << endmsg;
200  return CircularDepAction::Abort;
201  } );
202  if ( !sc ) return sc;
203 
204  // Add tool dependencies to our dependency list
205  for ( auto i_tool : tools() ) {
206  auto tool = dynamic_cast<AlgTool*>( i_tool );
207 
208  // Here, there is an edge case to be handled concerning circular
209  // dependencies between tools: in the presence of a circular dependency,
210  // one tool will observe the other in an uninitialized state, before its
211  // data dependencies are ready and finalized.
212  //
213  // To handle this, we need to setup a notification mechanism so that this
214  // tool may complete our dependency list once it is initialized. And we
215  // also need to propagate this information and notification to any tool
216  // depending on us which will be initialized in meantime.
217  //
218  if ( tool->FSMState() >= Gaudi::StateMachine::INITIALIZED ) {
221  } else {
222  addUninitializedTool( tool );
223  }
224  }
225 
226  // Initialize the inner DataHandles
227  initializeDataHandleHolder(); // this should 'freeze' the handle configuration.
228 
229  // Notify all tools waiting for us to be initialized
230  for ( auto tool : m_toolsAwaitingInit ) {
231  tool->collectImplicitDataDependencies( this );
232  tool->propagateUninitializedTools( this );
233  tool->m_uninitializedTools.erase( this );
234  }
235  m_toolsAwaitingInit.clear();
236 
237  return sc;
238  } );
239 }
240 //------------------------------------------------------------------------------
242 //------------------------------------------------------------------------------
243 {
244  // For the time being there is nothing to be done here.
245  // Setting the properties is done by the ToolSvc calling setProperties()
246  // explicitly.
247  return StatusCode::SUCCESS;
248 }
249 
250 //-----------------------------------------------------------------------------
252 {
253  //-----------------------------------------------------------------------------
254  return attempt( *this, "sysStart", [&]() {
256  Gaudi::Guards::AuditorGuard guard( this,
257  // check if we want to audit the initialize
258  m_auditorStart ? auditorSvc() : nullptr, IAuditor::Start );
259  StatusCode sc = start();
260  if ( sc.isSuccess() ) m_state = m_targetState;
261  return sc;
262  } );
263 }
264 
265 //------------------------------------------------------------------------------
267 //------------------------------------------------------------------------------
268 {
269  // For the time being there is nothing to be done here.
270  return StatusCode::SUCCESS;
271 }
272 
273 //-----------------------------------------------------------------------------
275 {
276  //-----------------------------------------------------------------------------
277  return attempt( *this, "sysStop", [&]() {
279  Gaudi::Guards::AuditorGuard guard( this,
280  // check if we want to audit the initialize
281  m_auditorStop ? auditorSvc() : nullptr, IAuditor::Stop );
282  StatusCode sc = stop();
283  if ( sc.isSuccess() ) m_state = m_targetState;
284  return sc;
285  } );
286 }
287 
288 //------------------------------------------------------------------------------
290 //------------------------------------------------------------------------------
291 {
292  // For the time being there is nothing to be done here.
293  return StatusCode::SUCCESS;
294 }
295 
296 //-----------------------------------------------------------------------------
298 {
299  //-----------------------------------------------------------------------------
300  return attempt( *this, "sysFinalize", [&]() {
302  Gaudi::Guards::AuditorGuard guard( this,
303  // check if we want to audit the initialize
305  StatusCode sc = finalize();
306  if ( sc.isSuccess() ) m_state = m_targetState;
307  return sc;
308  } );
309 }
310 //------------------------------------------------------------------------------
312 //------------------------------------------------------------------------------
313 {
314  // For the time being there is nothing to be done here.
315  return StatusCode::SUCCESS;
316 }
317 
318 //-----------------------------------------------------------------------------
320 {
321  //-----------------------------------------------------------------------------
322 
323  // Check that the current status is the correct one.
325  error() << "sysReinitialize(): cannot reinitialize tool not initialized" << endmsg;
326  return StatusCode::FAILURE;
327  }
328 
329  return attempt( *this, "SysReinitialize()", [&]() {
330  Gaudi::Guards::AuditorGuard guard( this,
331  // check if we want to audit the initialize
333  return reinitialize();
334  } );
335 }
336 
337 //------------------------------------------------------------------------------
339 //------------------------------------------------------------------------------
340 {
341  /* @TODO
342  * MCl 2008-10-23: the implementation of reinitialize as finalize+initialize
343  * is causing too many problems
344  *
345  // Default implementation is finalize+initialize
346  StatusCode sc = finalize();
347  if (sc.isFailure()) {
348  error() << "reinitialize(): cannot be finalized" << endmsg;
349  return sc;
350  }
351  sc = initialize();
352  if (sc.isFailure()) {
353  error() << "reinitialize(): cannot be initialized" << endmsg;
354  return sc;
355  }
356  */
357  return StatusCode::SUCCESS;
358 }
359 
360 //-----------------------------------------------------------------------------
362 {
363  //-----------------------------------------------------------------------------
364 
365  // Check that the current status is the correct one.
367  error() << "sysRestart(): cannot reinitialize tool not started" << endmsg;
368  return StatusCode::FAILURE;
369  }
370 
371  return attempt( *this, "sysRestart", [&]() {
373  Gaudi::Guards::AuditorGuard guard( this,
374  // check if we want to audit the initialize
376  return restart();
377  } );
378 }
379 
380 //------------------------------------------------------------------------------
382 //------------------------------------------------------------------------------
383 {
384  // Default implementation is stop+start
385  StatusCode sc = stop();
386  if ( sc.isFailure() ) {
387  error() << "restart(): cannot be stopped" << endmsg;
388  return sc;
389  }
390  sc = start();
391  if ( sc.isFailure() ) {
392  error() << "restart(): cannot be started" << endmsg;
393  return sc;
394  }
395  return StatusCode::SUCCESS;
396 }
397 
398 //------------------------------------------------------------------------------
400 //------------------------------------------------------------------------------
401 {
402  if ( m_pMonitorSvc ) {
403  m_pMonitorSvc->undeclareAll( this );
404  }
405 }
406 
408 {
409 
410  IAlgTool* tool = nullptr;
411  for ( auto thArr : m_toolHandleArrays ) {
412  if ( !thArr->retrieved() ) {
413  if ( UNLIKELY( msgLevel( MSG::DEBUG ) ) )
414  debug() << "ToolHandleArray " << thArr->propertyName() << " not used: not registering any of its Tools"
415  << endmsg;
416  } else {
417  if ( UNLIKELY( msgLevel( MSG::DEBUG ) ) )
418  debug() << "Registering all Tools in ToolHandleArray " << thArr->propertyName() << endmsg;
419  // Iterate over its tools:
420  for ( auto toolHandle : thArr->getBaseArray() ) {
421  // Try to cast it into a BaseToolHandle pointer:
422  BaseToolHandle* bth = dynamic_cast<BaseToolHandle*>( toolHandle );
423  if ( bth ) {
424  // If the cast was successful, the code is pretty simple:
425  tool = bth->get();
426  if ( UNLIKELY( msgLevel( MSG::DEBUG ) ) ) {
427  debug() << "Adding " << ( bth->isPublic() ? "public" : "private" ) << " ToolHandle tool " << tool->name()
428  << " (" << tool->type() << ") from ToolHandleArray " << thArr->propertyName() << endmsg;
429  }
430  m_tools.push_back( tool );
431  } else {
432  // If it wasn't for some strange reason, then fall back on the
433  // logic implemented previously:
434  if ( toolSvc()->retrieveTool( toolHandle->typeAndName(), tool, this, false ).isSuccess() ) {
435  if ( UNLIKELY( msgLevel( MSG::DEBUG ) ) ) {
436  debug() << "Adding private"
437  << " ToolHandle tool " << tool->name() << " (" << tool->type() << ") from ToolHandleArray "
438  << thArr->propertyName() << endmsg;
439  }
440  m_tools.push_back( tool );
441  } else if ( toolSvc()->retrieveTool( toolHandle->typeAndName(), tool, 0, false ).isSuccess() ) {
442  if ( UNLIKELY( msgLevel( MSG::DEBUG ) ) ) {
443  debug() << "Adding public"
444  << " ToolHandle tool " << tool->name() << " (" << tool->type() << ") from ToolHandleArray "
445  << thArr->propertyName() << endmsg;
446  }
447  m_tools.push_back( tool );
448  } else {
449  warning() << "Error retrieving Tool " << toolHandle->typeAndName() << " in ToolHandleArray "
450  << thArr->propertyName() << ". Not registered" << endmsg;
451  }
452  }
453  }
454  }
455  }
456 
457  for ( auto th : m_toolHandles ) {
458  if ( !th->isEnabled() ) {
459  if ( UNLIKELY( msgLevel( MSG::DEBUG ) ) && !th->typeAndName().empty() )
460  debug() << "ToolHandle " << th->typeAndName() << " not used" << endmsg;
461  continue;
462  }
463  if ( !th->get() ) {
464  auto sc = th->retrieve();
465  if ( UNLIKELY( sc.isFailure() ) ) {
466  throw GaudiException( "Failed to retrieve tool " + th->typeAndName(), this->name(), StatusCode::FAILURE );
467  }
468  }
469  tool = th->get();
470  if ( UNLIKELY( msgLevel( MSG::DEBUG ) ) )
471  debug() << "Adding " << ( th->isPublic() ? "public" : "private" ) << " ToolHandle tool " << tool->name() << " ("
472  << tool->type() << ")" << endmsg;
473  m_tools.push_back( tool );
474  }
475  m_toolHandlesInit = true;
476 }
477 
479 {
480  if ( tool == this ) return;
482  tool->m_toolsAwaitingInit.insert( this );
483 }
484 
486 {
487  for ( auto uninitializedTool : tool->m_uninitializedTools ) {
488  addUninitializedTool( uninitializedTool );
489  }
490 }
491 
493 {
495 
496  return m_tools;
497 }
498 
500 {
502 
503  return m_tools;
504 }
505 
506 //------------------------------------------------------------------------------
508 StatusCode AlgTool::service_i( const std::string& svcName, bool createIf, const InterfaceID& iid, void** ppSvc ) const
509 {
510  const ServiceLocatorHelper helper( *serviceLocator(), *this );
511  return helper.getService( svcName, createIf, iid, ppSvc );
512 }
513 
514 //------------------------------------------------------------------------------
515 StatusCode AlgTool::service_i( const std::string& svcType, const std::string& svcName, const InterfaceID& iid,
516  void** ppSvc ) const
517 {
518  const ServiceLocatorHelper helper( *serviceLocator(), *this );
519  return helper.createService( svcType, svcName, iid, ppSvc );
520 }
521 
522 SmartIF<IService> AlgTool::service( const std::string& name, const bool createIf, const bool quiet ) const
523 {
524  const ServiceLocatorHelper helper( *serviceLocator(), *this );
525  return helper.service( name, quiet, createIf );
526 }
527 
528 //-----------------------------------------------------------------------------
530 {
531  //---------------------------------------------------------------------------
532  if ( !m_pAuditorSvc ) {
533  m_pAuditorSvc = service( "AuditorSvc", true );
534  if ( !m_pAuditorSvc ) {
535  throw GaudiException( "Service [AuditorSvc] not found", name(), StatusCode::FAILURE );
536  }
537  }
538  return m_pAuditorSvc.get();
539 }
std::unordered_set< AlgTool * > m_toolsAwaitingInit
Definition: AlgTool.h:335
The interface implemented by the IToolSvc base class.
Definition: IToolSvc.h:19
SmartIF< IDataProviderSvc > & eventSvc() const final override
Added for interface compatibility with Algorithm.
Definition: AlgTool.cpp:91
#define UNLIKELY(x)
Definition: Kernel.h:89
constexpr static const auto FAILURE
Definition: StatusCode.h:88
Definition of the MsgStream class used to transmit messages.
Definition: MsgStream.h:24
an helper to share the implementation of service() among the various kernel base classes ...
SmartIF< IMonitorSvc > m_pMonitorSvc
Online Monitoring Service.
Definition: AlgTool.h:305
Define general base for Gaudi exception.
SmartIF< ISvcLocator > & serviceLocator() const override
Retrieve pointer to service locator.
Definition: AlgTool.cpp:82
Gaudi::Property< bool > m_auditorStart
Definition: AlgTool.h:321
bool m_toolHandlesInit
Definition: AlgTool.h:331
std::string m_type
AlgTool type (concrete class name)
Definition: AlgTool.h:298
Implementation of property with value of concrete type.
Definition: Property.h:383
std::unordered_set< AlgTool * > m_uninitializedTools
flag indicating whether ToolHandle tools have been added to m_tools
Definition: AlgTool.h:334
StatusCode initialize() override
Definition: AlgTool.cpp:241
StatusCode service_i(const std::string &algName, bool createIf, const InterfaceID &iid, void **ppSvc) const
implementation of service method
Definition: AlgTool.cpp:508
GAUDI_API const std::string typeinfoName(const std::type_info &)
Get platform independent information about the class type.
Definition: System.cpp:332
virtual const std::string & type() const =0
The type of an AlgTool, meaning the concrete AlgTool class.
bool isPublic() const noexcept
Definition: ToolHandle.h:41
bool isSuccess() const
Definition: StatusCode.h:287
virtual bool hasProperty(const std::string &name) const =0
Return true if we have a property with the given name.
const IInterface * m_parent
AlgTool parent.
Definition: AlgTool.h:300
IToolSvc * toolSvc() const
The standard ToolSvc service, Return a pointer to the service if present.
Definition: AlgTool.cpp:102
Non-templated base class for actual ToolHandle<T>.
Definition: ToolHandle.h:71
StatusCode sysReinitialize() override
Initialize AlgTool.
Definition: AlgTool.cpp:319
T end(T...args)
virtual StatusCode getProperty(Gaudi::Details::PropertyBase *p) const =0
Get the property by property.
Gaudi::Property< bool > m_auditorReinitialize
Definition: AlgTool.h:324
void updateDataDependencies(const DataObjIDMapping &keyMap)
Update the key of each registered data dependency, using a user-defined mapping from the old to the n...
~AlgTool() override
Definition: AlgTool.cpp:399
std::vector< IAlgTool * > m_tools
Definition: AlgTool.h:328
StatusCode queryInterface(const InterfaceID &riid, void **ppvUnknown) override
Query for a given interface.
Definition: AlgTool.cpp:42
bool isFailure() const
Definition: StatusCode.h:139
StatusCode setProperties()
Method for setting declared properties to the values specified in the jobOptions via the job option s...
Definition: AlgTool.cpp:115
StatusCode sysStart() override
Start AlgTool.
Definition: AlgTool.cpp:251
STL class.
StatusCode sysStop() override
Stop AlgTool.
Definition: AlgTool.cpp:274
DataObjIDMapping m_updateDependencies
Hook for for derived classes to alter the DataObjID of dependencies.
Definition: AlgTool.h:233
TYPE * get() const
Get interface pointer.
Definition: SmartIF.h:82
StatusCode finalize() override
Definition: AlgTool.cpp:311
const std::string m_name
AlgTool full name.
Definition: AlgTool.h:299
StatusCode service(const Gaudi::Utils::TypeNameString &name, T *&svc, bool createIf=true)
Templated method to access a service by name.
Definition: ISvcLocator.h:79
T push_back(T...args)
Gaudi::StateMachine::State FSMState() const override
Definition: AlgTool.h:75
Interface ID class.
Definition: IInterface.h:29
MsgStream & error() const
shortcut for the method msgStream(MSG::ERROR)
AlgTool(const std::string &type, const std::string &name, const IInterface *parent)
Standard Constructor.
Definition: AlgTool.cpp:126
Main interface for the JobOptions service.
MsgStream & warning() const
shortcut for the method msgStream(MSG::WARNING)
T what(T...args)
Gaudi::Property< int > m_outputLevel
Definition: AlgTool.h:312
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:51
void collectImplicitDataDependencies(const IDataHandleHolder *child)
Add the dependencies of another DataHandleHolder to our dependency list.
Definition of the basic interface.
Definition: IInterface.h:277
T erase(T...args)
StatusCode service(const std::string &name, T *&svc, bool createIf=true) const
Access a service by name, creating it if it doesn&#39;t already exist.
Definition: AlgTool.h:131
Gaudi::Property< bool > m_auditorStop
Definition: AlgTool.h:322
virtual const std::string & tag() const
name tag for the exception, or exception type
StatusCode restart() override
Definition: AlgTool.cpp:381
const SmartIF< IMessageSvc > & msgSvc() const
The standard message service.
SmartIF< IToolSvc > m_ptoolSvc
Tool service.
Definition: AlgTool.h:304
const std::vector< IAlgTool * > & tools() const
Definition: AlgTool.cpp:492
STL class.
constexpr static const auto SUCCESS
Definition: StatusCode.h:87
SmartIF< IAuditorSvc > m_pAuditorSvc
Auditor Service.
Definition: AlgTool.h:306
Gaudi::Property< bool > m_auditorRestart
Definition: AlgTool.h:325
T insert(T...args)
Base class from which all concrete algorithm classes should be derived.
Definition: Algorithm.h:79
T find_if(T...args)
const std::string & name() const override
Retrieve full identifying name of the concrete tool object.
Definition: AlgTool.cpp:61
Gaudi::StateMachine::State m_state
state of the Tool
Definition: AlgTool.h:342
State GAUDI_API ChangeState(const Transition transition, const State state)
Function to get the new state according to the required transition, checking if the transition is all...
std::vector< BaseToolHandle * > m_toolHandles
Definition: AlgTool.h:329
MsgStream & debug() const
shortcut for the method msgStream(MSG::DEBUG)
T begin(T...args)
Gaudi::Property< bool > m_auditInit
Definition: AlgTool.h:319
void addUninitializedTool(AlgTool *tool)
Definition: AlgTool.cpp:478
double fun(const std::vector< double > &x)
Definition: PFuncTest.cpp:26
Base class from which all the concrete tool classes should be derived.
Definition: AlgTool.h:47
The interface implemented by the AlgTool base class.
Definition: IAlgTool.h:23
const IInterface * parent() const override
Retrieve parent of the sub-algtool.
Definition: AlgTool.cpp:75
SmartIF< ISvcLocator > m_svcLocator
Pointer to Service Locator service.
Definition: AlgTool.h:302
void propagateUninitializedTools(AlgTool *tool)
Definition: AlgTool.cpp:485
appMgr
Definition: IOTest.py:94
SmartIF< IDataProviderSvc > m_evtSvc
Event data service.
Definition: AlgTool.h:303
bool assign(const Details::PropertyBase &source) override
get the value from another property
Definition: Property.h:763
SmartIF< IService > service(const std::string &name, const bool quiet=false, const bool createIf=true) const
Gaudi::Property< bool > m_auditorInitialize
Definition: AlgTool.h:320
StatusCode reinitialize() override
Definition: AlgTool.cpp:338
InterfaceList m_interfaceList
Interface list.
Definition: AlgTool.h:308
const IAlgTool * get() const
Definition: ToolHandle.h:86
StatusCode stop() override
Definition: AlgTool.cpp:289
StatusCode sysInitialize() override
Initialize AlgTool.
Definition: AlgTool.cpp:178
StatusCode queryInterface(const InterfaceID &iid, void **pinterface) override
Gaudi::StateMachine::State m_targetState
state of the Tool
Definition: AlgTool.h:343
The IProperty is the basic interface for all components which have properties that can be set or get...
Definition: IProperty.h:20
StatusCode handleCircularDataDependencies(CircularDepHandler &&circularDepHandler)
Look for circular dependencies and let a user-specified handler deal with each of them...
It is a simple guard, which "locks" the scope for the Auditor Service is am exception-safe way...
Definition: Guards.h:215
The interface implemented by the IAuditorSvc base class.
Definition: IAuditorSvc.h:15
Base class for all services.
Definition: Service.h:36
virtual void undeclareAll(const IInterface *owner)=0
Undeclare monitoring information.
void initToolHandles() const
Definition: AlgTool.cpp:407
StatusCode getService(const std::string &name, bool createIf, const InterfaceID &iid, void **ppSvc) const
const std::string & type() const override
Retrieve type (concrete class) of the sub-algtool.
Definition: AlgTool.cpp:68
IAuditorSvc * auditorSvc() const
Access the auditor service.
Definition: AlgTool.cpp:529
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:209
virtual const std::string & name() const =0
Retrieve the name of the instance.
StatusCode sysFinalize() override
Finalize AlgTool.
Definition: AlgTool.cpp:297
std::vector< GaudiHandleArrayBase * > m_toolHandleArrays
Definition: AlgTool.h:330
Gaudi::Property< bool > m_auditorFinalize
Definition: AlgTool.h:323
StatusCode createService(const std::string &name, const InterfaceID &iid, void **ppSvc) const
Base class from which all concrete auditor classes should be derived.
Definition: Auditor.h:35
MSG::Level msgLevel() const
get the cached level (originally extracted from the embedded MsgStream)
StatusCode sysRestart() override
Start AlgTool.
Definition: AlgTool.cpp:361
StatusCode start() override
Definition: AlgTool.cpp:266