The Gaudi Framework  master (ff829712)
Loading...
Searching...
No Matches
DataOnDemandSvc Class Reference

The DataOnDemandSvc listens to incidents typically triggered by the data service of the configurable name "IncidentName". More...

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

Inheritance diagram for DataOnDemandSvc:
Collaboration diagram for DataOnDemandSvc:

Classes

struct  Leaf
 
struct  Node
 Helper class of the DataOnDemandSvc. More...
 
struct  Protection
 Helper class of the DataOnDemandSvc. More...
 

Public Types

typedef std::vector< std::string > Setup
 
typedef TClass * ClassH
 
typedef GaudiUtils::HashMap< Gaudi::StringKey, NodeNodeMap
 
typedef GaudiUtils::HashMap< Gaudi::StringKey, LeafAlgMap
 
- Public Types inherited from extends< Service, IIncidentListener >
using base_class
 Typedef to this class.
 
using extend_interfaces_base
 Typedef to the base of this class.
 
- Public Types inherited from Service
using Factory = Gaudi::PluginService::Factory<IService*( const std::string&, ISvcLocator* )>
 
- Public Types inherited from PropertyHolder< CommonMessaging< implements< IService, IProperty, IStateful > > >
using PropertyHolderImpl
 Typedef used to refer to this class from derived classes, as in.
 
- Public Types inherited from CommonMessaging< implements< IService, IProperty, IStateful > >
using base_class
 
- Public Types inherited from extend_interfaces< Interfaces... >
using ext_iids
 take union of the ext_iids of all Interfaces...
 

Public Member Functions

StatusCode initialize () override
 Inherited Service overrides: Service initialization.
 
StatusCode finalize () override
 Inherited Service overrides: Service finalization.
 
StatusCode reinitialize () override
 Inherited Service overrides: Service reinitialization.
 
void handle (const Incident &incident) override
 IIncidentListener interfaces overrides: incident handling.
 
- Public Member Functions inherited from extends< Service, IIncidentListener >
void const * i_cast (const InterfaceID &tid) const override
 Implementation of IInterface::i_cast.
 
StatusCode queryInterface (const InterfaceID &ti, void **pp) override
 Implementation of IInterface::queryInterface.
 
std::vector< std::string > getInterfaceNames () const override
 Implementation of IInterface::getInterfaceNames.
 
- Public Member Functions inherited from Service
const std::string & name () const override
 Retrieve name of the service.
 
StatusCode configure () override
 
StatusCode initialize () override
 
StatusCode start () override
 
StatusCode stop () override
 
StatusCode finalize () override
 
StatusCode terminate () override
 
Gaudi::StateMachine::State FSMState () const override
 
Gaudi::StateMachine::State targetFSMState () const override
 
StatusCode reinitialize () override
 
StatusCode restart () override
 
StatusCode sysInitialize () override
 Initialize Service.
 
StatusCode sysStart () override
 Initialize Service.
 
StatusCode sysStop () override
 Initialize Service.
 
StatusCode sysFinalize () override
 Finalize Service.
 
StatusCode sysReinitialize () override
 Re-initialize the Service.
 
StatusCode sysRestart () override
 Re-initialize the Service.
 
 Service (std::string name, ISvcLocator *svcloc)
 Standard Constructor.
 
SmartIF< ISvcLocator > & serviceLocator () const override
 Retrieve pointer to service locator.
 
template<typename IFace = IService>
SmartIF< IFace > service (const std::string &name, bool createIf=true) const
 
template<class T>
Gaudi::Details::PropertyBasedeclareProperty (const std::string &name, ToolHandle< T > &hndl, const std::string &doc="none")
 
template<class T>
StatusCode declareTool (ToolHandle< T > &handle, bool createIf=true)
 
template<class T>
StatusCode declareTool (ToolHandle< T > &handle, const std::string &toolTypeAndName, bool createIf=true)
 Declare used tool.
 
template<class T>
Gaudi::Details::PropertyBasedeclareProperty (const std::string &name, ToolHandleArray< T > &hndlArr, const std::string &doc="none")
 
template<class T>
void addToolsArray (ToolHandleArray< T > &hndlArr)
 
const std::vector< IAlgTool * > & tools () const
 
SmartIF< IAuditorSvc > & auditorSvc () const
 The standard auditor service.May not be invoked before sysInitialize() has been invoked.
 
- Public Member Functions inherited from PropertyHolder< CommonMessaging< implements< IService, IProperty, IStateful > > >
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::PropertyBasedeclareProperty (Gaudi::Details::PropertyBase &prop)
 Declare a property.
 
Gaudi::Details::PropertyBasedeclareProperty (const std::string &name, TYPE &value, const std::string &doc="none")
 Helper to wrap a regular data member and use it as a regular property.
 
Gaudi::Details::PropertyBasedeclareProperty (const std::string &name, Gaudi::Property< TYPE, VERIFIER, HANDLERS > &prop, const std::string &doc="none")
 Declare a PropertyBase instance setting name and documentation.
 
Gaudi::Details::PropertyBasedeclareRemoteProperty (const std::string &name, IProperty *rsvc, const std::string &rname="")
 Declare a remote property.
 
StatusCode setProperty (const std::string &name, const Gaudi::Details::PropertyBase &p) override
 set the property from another property with a different name
 
StatusCode setProperty (const std::string &s) override
 set the property from the formatted string
 
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
 
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 Gaudi::Details::PropertyBasegetProperty (std::string_view name) const override
 get the property by name
 
StatusCode getProperty (std::string_view n, std::string &v) const override
 convert the property to the string
 
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::PropertyBaseproperty (std::string_view name) const
 \fixme property and bindPropertiesTo should be protected
 
void bindPropertiesTo (Gaudi::Interfaces::IOptionsSvc &optsSvc)
 
 PropertyHolder (const PropertyHolder &)=delete
 
PropertyHolderoperator= (const PropertyHolder &)=delete
 
- Public Member Functions inherited from CommonMessaging< implements< IService, IProperty, IStateful > >
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
 
- Public Member Functions inherited from CommonMessagingBase
virtual ~CommonMessagingBase ()=default
 Virtual destructor.
 
const SmartIF< IMessageSvc > & msgSvc () const
 The standard message service.
 
MsgStreammsgStream () const
 Return an uninitialized MsgStream.
 
MsgStreammsgStream (const MSG::Level level) const
 Predefined configurable message stream for the efficient printouts.
 
MsgStreamalways () const
 shortcut for the method msgStream(MSG::ALWAYS)
 
MsgStreamfatal () const
 shortcut for the method msgStream(MSG::FATAL)
 
MsgStreamerr () const
 shortcut for the method msgStream(MSG::ERROR)
 
MsgStreamerror () const
 shortcut for the method msgStream(MSG::ERROR)
 
MsgStreamwarning () const
 shortcut for the method msgStream(MSG::WARNING)
 
MsgStreaminfo () const
 shortcut for the method msgStream(MSG::INFO)
 
MsgStreamdebug () const
 shortcut for the method msgStream(MSG::DEBUG)
 
MsgStreamverbose () const
 shortcut for the method msgStream(MSG::VERBOSE)
 
MsgStreammsg () const
 shortcut for the method msgStream(MSG::INFO)
 

Protected Member Functions

StatusCode configureHandler (Leaf &leaf)
 Configure handler for leaf.
 
StatusCode execHandler (const std::string &tag, Leaf &leaf)
 Execute leaf handler (algorithm)
 
StatusCode execHandler (const std::string &tag, Node &node)
 Execute node handler (simple object creation using seal reflection)
 
StatusCode setupNodeHandlers ()
 Initialize node handlers.
 
StatusCode setupAlgHandlers ()
 Initialize leaf handlers.
 
StatusCode setup ()
 Setup routine (called by (re-) initialize.
 
void i_setNodeHandler (const std::string &name, const std::string &type)
 Internal method to initialize a node handler.
 
StatusCode i_setAlgHandler (const std::string &name, const Gaudi::Utils::TypeNameString &alg)
 Internal method to initialize an algorithm handler.
 
StatusCode update ()
 update the handlers
 
void dump (const MSG::Level level, const bool mode=true) const
 dump the content of DataOnDemand service
 
- Protected Member Functions inherited from Service
std::vector< IAlgTool * > & tools ()
 
 ~Service () override
 
int outputLevel () const
 get the Service's output level
 
- Protected Member Functions inherited from CommonMessaging< implements< IService, IProperty, IStateful > >
MSG::Level setUpMessaging () const
 Set up local caches.
 
MSG::Level resetMessaging ()
 Reinitialize internal states.
 
void updateMsgStreamOutputLevel (int level)
 Update the output level of the cached MsgStream.
 

Private Types

typedef std::map< std::string, std::string > Map
 

Private Member Functions

void force_update (Gaudi::Details::PropertyBase &p)
 
void deprecated_property (Gaudi::Details::PropertyBase &p)
 

Private Attributes

SmartIF< IIncidentSvcm_incSvc = nullptr
 Incident service.
 
SmartIF< IAlgManagerm_algMgr = nullptr
 Algorithm manager.
 
SmartIF< IDataProviderSvcm_dataSvc = nullptr
 Data provider reference.
 
SmartIF< IToolSvcm_toolSvc
 Data provider reference.
 
AlgMap m_algs
 Map of algorithms to handle incidents.
 
NodeMap m_nodes
 Map of "empty" objects to be placed as intermediate nodes.
 
bool m_updateRequired = true
 
ChronoEntity m_total
 
unsigned long long m_statAlg = 0
 
unsigned long long m_statNode = 0
 
unsigned long long m_stat = 0
 
ChronoEntity m_timer_nodes
 
ChronoEntity m_timer_algs
 
ChronoEntity m_timer_all
 
bool m_locked_nodes = false
 
bool m_locked_algs = false
 
bool m_locked_all = false
 
std::vector< IDODNodeMapper * > m_nodeMappers
 
std::vector< IDODAlgMapper * > m_algMappers
 
Gaudi::Property< std::string > m_trapType { this, "IncidentName", "DataFault", "the type of handled Incident" }
 
Gaudi::Property< std::string > m_dataSvcName { this, "DataSvc", "EventDataSvc", "DataSvc name" }
 
Gaudi::Property< bool > m_partialPath { this, "UsePreceedingPath", true, "allow creation of partial leaves" }
 
Gaudi::Property< bool > m_dump
 
Gaudi::Property< bool > m_init { this, "PreInitialize", false, "(pre)initialize all algorithms" }
 
Gaudi::Property< bool > m_allowInitFailure
 
Gaudi::Property< Setupm_algMapping
 
Gaudi::Property< Setupm_nodeMapping
 
Gaudi::Property< Mapm_algMap { this, "AlgMap", {}, &DataOnDemandSvc::force_update, "mapping {'data': 'algorithm'}" }
 
Gaudi::Property< Mapm_nodeMap { this, "NodeMap", {}, &DataOnDemandSvc::force_update, "mapping {'data': 'type'}" }
 
Gaudi::Property< std::string > m_prefix { this, "Prefix", "/Event/" }
 
Gaudi::Property< std::vector< std::string > > m_nodeMapTools
 
Gaudi::Property< std::vector< std::string > > m_algMapTools
 

Additional Inherited Members

- Protected Attributes inherited from Service
Gaudi::StateMachine::State m_state = Gaudi::StateMachine::OFFLINE
 Service state.
 
Gaudi::StateMachine::State m_targetState = Gaudi::StateMachine::OFFLINE
 Service state.
 
Gaudi::Property< int > m_outputLevel { this, "OutputLevel", MSG::NIL, "output level" }
 flag indicating whether ToolHandle tools have been added to m_tools
 
Gaudi::Property< bool > m_auditorInitialize { this, "AuditInitialize", false, "trigger auditor on initialize()" }
 
Gaudi::Property< bool > m_auditorStart { this, "AuditStart", false, "trigger auditor on start()" }
 
Gaudi::Property< bool > m_auditorStop { this, "AuditStop", false, "trigger auditor on stop()" }
 
Gaudi::Property< bool > m_auditorFinalize { this, "AuditFinalize", false, "trigger auditor on finalize()" }
 
Gaudi::Property< bool > m_auditorReinitialize { this, "AuditReinitialize", false, "trigger auditor on reinitialize()" }
 
Gaudi::Property< bool > m_auditorRestart { this, "AuditRestart", false, "trigger auditor on restart()" }
 
Gaudi::Property< bool > m_autoRetrieveTools
 
Gaudi::Property< bool > m_checkToolDeps
 
SmartIF< IAuditorSvcm_pAuditorSvc
 Auditor Service.
 

Detailed Description

The DataOnDemandSvc listens to incidents typically triggered by the data service of the configurable name "IncidentName".

In the job options handlers can be declared, which allow to configure this service. Such handlers are either:

  • Node handlers, if objects other than the default object type have to be instantiated. DataOnDemandSvc.Nodes = { "DATA='/Event/Rec' TYPE='DataObject'", "DATA='/Event/Rec/Muon' TYPE='DataObject'" };
  • Leaf handlers (Algorithms), which get instantiated and executed on demand. DataOnDemandSvc.Algorithms = { "DATA='/Event/Rec/Muon/Digits' TYPE='MuonDigitAlg/MyMuonDigits'" }; If the algorithm name is omitted the class name will be the instance name.

The handlers only get called if the exact path matches. In the event already the partial path to any handler is missing a leaf handler may be triggered, which includes the partial paths ( DataOnDemandSvc.UsePreceedingPath = true )

2006-10-15: New options (using map-like semantics:)

{ "Phys/StdLoosePions/Particles" : "PreLoadParticles/StdLoosePions" ,
"Phys/StdLoosePions/Vertioces" : "PreLoadParticles/StdLoosePions" } ;
{ "Phys" : "DataObject" ,
"MC" : "DataObject" } ;
The DataOnDemandSvc listens to incidents typically triggered by the data service of the configurable ...
GaudiUtils::HashMap< Gaudi::StringKey, Leaf > AlgMap
GaudiUtils::HashMap< Gaudi::StringKey, Node > NodeMap

New treatment of preceding paths. for each registered leaf or node the all parent nodes are added into the node-map with default directory type 'DataObject'

The major properties are equipped with handlers (more or less mandatory for interactive work in python)

From now the default prefix ( "/Event/" ) could be omitted from any data-item. It will be added automatically.

Author
M.Frank
Version
1.0

Definition at line 87 of file DataOnDemandSvc.h.

Member Typedef Documentation

◆ AlgMap

◆ ClassH

typedef TClass* DataOnDemandSvc::ClassH

Definition at line 90 of file DataOnDemandSvc.h.

◆ Map

typedef std::map<std::string, std::string> DataOnDemandSvc::Map
private

Definition at line 245 of file DataOnDemandSvc.h.

◆ NodeMap

◆ Setup

typedef std::vector<std::string> DataOnDemandSvc::Setup

Definition at line 89 of file DataOnDemandSvc.h.

Member Function Documentation

◆ configureHandler()

StatusCode DataOnDemandSvc::configureHandler ( Leaf & leaf)
protected

Configure handler for leaf.

Parameters
leaf[IN] Reference to leaf handler
Returns
StatusCode indicating success or failure

Definition at line 347 of file DataOnDemandSvc.cpp.

347 {
348 if ( l.algorithm ) { return StatusCode::SUCCESS; }
349 if ( !m_algMgr ) { return StatusCode::FAILURE; }
350 l.algorithm = m_algMgr->algorithm( l.name, false );
351 if ( l.algorithm ) { return StatusCode::SUCCESS; }
352 // create it!
353 StatusCode sc = m_algMgr->createAlgorithm( l.type, l.name, l.algorithm, true );
354 if ( sc.isFailure() ) {
355 error() << "Failed to create algorithm " << l.type << "('" << l.name << "')" << endmsg;
356 l.algorithm = nullptr;
357 return sc;
358 }
359 if ( l.algorithm->isInitialized() ) { return StatusCode::SUCCESS; }
360 // initialize it!
361 sc = l.algorithm->sysInitialize();
362 if ( sc.isFailure() ) {
363 error() << "Failed to initialize algorithm " << l.type << "('" << l.name << "')" << endmsg;
364 l.algorithm = nullptr;
365 return sc;
366 }
367 if ( Gaudi::StateMachine::RUNNING == l.algorithm->FSMState() ) { return StatusCode::SUCCESS; }
368 // run it!
369 sc = l.algorithm->sysStart();
370 if ( sc.isFailure() ) {
371 error() << "Failed to 'run' algorithm " << l.type << "('" << l.name << "')" << endmsg;
372 l.algorithm = nullptr;
373 return sc;
374 }
375 return StatusCode::SUCCESS;
376}
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition MsgStream.h:198
MsgStream & error() const
shortcut for the method msgStream(MSG::ERROR)
SmartIF< IAlgManager > m_algMgr
Algorithm manager.
bool isFailure() const
Definition StatusCode.h:129
constexpr static const auto SUCCESS
Definition StatusCode.h:99
constexpr static const auto FAILURE
Definition StatusCode.h:100
dict l
Definition gaudirun.py:583

◆ deprecated_property()

void DataOnDemandSvc::deprecated_property ( Gaudi::Details::PropertyBase & p)
inlineprivate

Definition at line 190 of file DataOnDemandSvc.h.

190 {
191 warning() << p.name() << " " << p.documentation() << endmsg;
192 force_update( p );
193 };
MsgStream & warning() const
shortcut for the method msgStream(MSG::WARNING)
void force_update(Gaudi::Details::PropertyBase &p)
std::string documentation() const
property documentation
const std::string name() const
property name

◆ dump()

void DataOnDemandSvc::dump ( const MSG::Level level,
const bool mode = true ) const
protected

dump the content of DataOnDemand service

Parameters
levelthe printout level
modethe printout mode

Definition at line 554 of file DataOnDemandSvc.cpp.

554 {
555 if ( m_algs.empty() && m_nodes.empty() ) { return; }
556
557 typedef std::pair<std::string, std::string> Pair;
558 std::map<std::string, Pair> _m;
559 for ( auto& alg : m_algs ) {
560 auto check = _m.find( alg.first );
561 if ( _m.end() != check ) {
562 warning() << " The data item is activated for '" << check->first << "' as '" << check->second.first << "'"
563 << endmsg;
564 }
565 const Leaf& l = alg.second;
566 std::string nam = ( l.name == l.type ? l.type : ( l.type + "/" + l.name ) );
567
568 if ( !mode && 0 == l.num ) { continue; }
569
570 std::string val;
571 if ( mode ) {
572 val = ( !l.algorithm ) ? "F" : "T";
573 } else {
574 val = std::to_string( l.num );
575 }
576
577 _m[no_prefix( alg.first, m_prefix )] = { nam, val };
578 }
579 // nodes:
580 for ( const auto& node : m_nodes ) {
581 auto check = _m.find( node.first );
582 if ( _m.end() != check ) {
583 warning() << " The data item is already activated for '" << check->first << "' as '" << check->second.first << "'"
584 << endmsg;
585 }
586 const Node& n = node.second;
587 std::string nam = "'" + n.name + "'";
588
589 std::string val;
590
591 if ( !mode && 0 == n.num ) { continue; }
592
593 if ( mode ) {
594 val = ( 0 == n.clazz ) ? "F" : "T";
595 } else {
596 val = std::to_string( n.num );
597 }
598
599 _m[no_prefix( node.first, m_prefix )] = { nam, val };
600 }
601
602 if ( _m.empty() ) { return; }
603
604 // set width of the columns
605 size_t n1 = 10; // minimum width
606 size_t n2 = 10; // minimum width
607 size_t n3 = 0;
608 for ( const auto& i : _m ) {
609 n1 = std::max( n1, i.first.size() );
610 n2 = std::max( n2, i.second.first.size() );
611 n3 = std::max( n3, i.second.second.size() );
612 }
613 n1 = std::min( n1, size_t{ 60 } ); // maximum width
614 n2 = std::min( n2, size_t{ 60 } ); // maximum width
615
616 auto& msg = msgStream( level );
617
618 if ( mode ) {
619 msg << "Data-On-Demand Actions enabled for:";
620 } else {
621 msg << "Data-On-Demand Actions has been used for:";
622 }
623
624 const auto header = fmt::format( " | {3:<{0}.{0}s} | {4:<{1}.{1}s} | {5:>{2}.{2}s} |", n1, n2, n3, "Address",
625 "Creator", ( mode ? "S" : "#" ) );
626 const auto line = fmt::format( " {0:-^{1}}", "", header.size() - 1 );
627 msg << '\n' << line << '\n' << header << '\n' << line;
628
629 // make the actual printout:
630 for ( const auto& item : _m ) {
631 msg << fmt::format( "\n | {3:<{0}.{0}s} | {4:<{1}.{1}s} | {5:>{2}.{2}s} |", n1, n2, n3, item.first,
632 item.second.first, item.second.second );
633 }
634
635 msg << '\n' << line << endmsg;
636}
MsgStream & msgStream() const
Return an uninitialized MsgStream.
MsgStream & msg() const
shortcut for the method msgStream(MSG::INFO)
Gaudi::Property< std::string > m_prefix
NodeMap m_nodes
Map of "empty" objects to be placed as intermediate nodes.
AlgMap m_algs
Map of algorithms to handle incidents.
GAUDI_API std::string header(const int ID=Default)
get the recommended header by enum
check(causes, result)
Helper class of the DataOnDemandSvc.

◆ execHandler() [1/2]

StatusCode DataOnDemandSvc::execHandler ( const std::string & tag,
Leaf & leaf )
protected

Execute leaf handler (algorithm)

Parameters
tag[IN] Path to requested leaf
leaf[IN] Reference to leaf handler
Returns
StatusCode indicating success or failure

Definition at line 524 of file DataOnDemandSvc.cpp.

524 {
525 Gaudi::Utils::LockedChrono timer( m_timer_algs, m_locked_algs );
526
527 if ( l.executing ) { return StatusCode::FAILURE; }
528
529 if ( !l.algorithm ) {
530 StatusCode sc = configureHandler( l );
531 if ( sc.isFailure() ) {
532 error() << "Failed to configure handler for: " << l.name << "[" << l.type << "] " << tag << endmsg;
533 return sc;
534 }
535 }
536
537 Chrono atimer( m_total );
538
539 Protection p( l.executing );
540 // FIXME: this will cause problems for Hive, as we need to set
541 // the EventContext of the called Algorithm.
542 // if (!l.algorithm->getContext()) {
543 // l.algorithm->setContext( &Gaudi::Hive::currentContext() );
544 // }
545 StatusCode sc = l.algorithm->sysExecute( Gaudi::Hive::currentContext() );
546 if ( sc.isFailure() ) {
547 error() << "Failed to execute the algorithm:" << l.algorithm->name() << " for location:" << tag << endmsg;
548 return sc;
549 }
550 ++l.num;
551
552 return StatusCode::SUCCESS;
553}
ChronoEntity m_timer_algs
ChronoEntity m_total
StatusCode configureHandler(Leaf &leaf)
Configure handler for leaf.
GAUDI_API const EventContext & currentContext()
Helper class of the DataOnDemandSvc.

◆ execHandler() [2/2]

StatusCode DataOnDemandSvc::execHandler ( const std::string & tag,
Node & node )
protected

Execute node handler (simple object creation using seal reflection)

Parameters
tag[IN] Path to requested leaf
node[IN] Reference to node handler
Returns
StatusCode indicating success or failure

Definition at line 487 of file DataOnDemandSvc.cpp.

487 {
488
489 Gaudi::Utils::LockedChrono timer( m_timer_nodes, m_locked_nodes );
490
491 if ( n.executing ) { return StatusCode::FAILURE; }
492
493 Protection p( n.executing );
494
495 std::unique_ptr<DataObject> object;
496
497 if ( n.dataObject ) {
498 object.reset( new DataObject() );
499 } else {
500 // try to recover the handler
501 if ( !n.clazz ) { n.clazz = TClass::GetClass( n.name.c_str() ); }
502 if ( !n.clazz ) {
503 error() << "Failed to get dictionary for class '" << n.name << "' for location:" << tag << endmsg;
504 return StatusCode::FAILURE;
505 }
506
507 object.reset( reinterpret_cast<DataObject*>( n.clazz->New() ) );
508
509 if ( !object ) {
510 error() << "Failed to create an object of type:" << n.clazz->GetName() << " for location:" << tag << endmsg;
511 return StatusCode::FAILURE;
512 }
513 }
514 //
515 StatusCode sc = m_dataSvc->registerObject( tag, object.release() );
516 if ( sc.isFailure() ) {
517 error() << "Failed to register an object of type:" << n.name << " at location:" << tag << endmsg;
518 return sc;
519 }
520 ++n.num;
521 //
522 return StatusCode::SUCCESS;
523}
ChronoEntity m_timer_nodes
SmartIF< IDataProviderSvc > m_dataSvc
Data provider reference.
str release
Definition conf.py:27

◆ finalize()

StatusCode DataOnDemandSvc::finalize ( )
override

Inherited Service overrides: Service finalization.

Definition at line 179 of file DataOnDemandSvc.cpp.

179 {
180 info() << "Handled \"" << m_trapType.value() << "\" incidents: " << m_statAlg << "/" << m_statNode << "/" << m_stat
181 << "(Alg/Node/Total)." << endmsg;
182 if ( m_dump || msgLevel( MSG::DEBUG ) ) {
183 info() << m_total.outputUserTime( "Algorithm timing: Mean(+-rms)/Min/Max:%3%(+-%4%)/%6%/%7%[ms] ",
185 << m_total.outputUserTime( "Total:%2%[s]", System::Sec ) << endmsg;
186 info() << m_timer_nodes.outputUserTime( "Nodes timing: Mean(+-rms)/Min/Max:%3%(+-%4%)/%6%/%7%[ms] ",
188 << m_timer_nodes.outputUserTime( "Total:%2%[s]", System::Sec ) << endmsg;
189 info() << m_timer_algs.outputUserTime( "Algs timing: Mean(+-rms)/Min/Max:%3%(+-%4%)/%6%/%7%[ms] ",
191 << m_timer_algs.outputUserTime( "Total:%2%[s]", System::Sec ) << endmsg;
192 info() << m_timer_all.outputUserTime( "All timing: Mean(+-rms)/Min/Max:%3%(+-%4%)/%6%/%7%[ms] ",
194 << m_timer_all.outputUserTime( "Total:%2%[s]", System::Sec ) << endmsg;
195 }
196 // dump it!
197 if ( m_dump ) {
198 dump( MSG::INFO, false );
199 } else if ( msgLevel( MSG::DEBUG ) ) {
200 dump( MSG::DEBUG, false );
201 }
202
203 if ( m_incSvc ) {
204 m_incSvc->removeListener( this, m_trapType );
205 m_incSvc.reset();
206 }
207 m_algMgr.reset();
208 m_dataSvc.reset();
209 if ( m_toolSvc ) { // we may not have retrieved the ToolSvc
210 // Do not call releaseTool if the ToolSvc was already finalized.
211 if ( SmartIF<IStateful>( m_toolSvc )->FSMState() > Gaudi::StateMachine::CONFIGURED ) {
212 for ( const auto& i : m_nodeMappers ) m_toolSvc->releaseTool( i ).ignore();
213 for ( const auto& i : m_algMappers ) m_toolSvc->releaseTool( i ).ignore();
214 } else {
215 warning() << "ToolSvc already finalized: cannot release tools. Check options." << endmsg;
216 }
217 m_nodeMappers.clear();
218 m_algMappers.clear();
219 m_toolSvc.reset();
220 }
221 return Service::finalize();
222}
MsgStream & info() const
shortcut for the method msgStream(MSG::INFO)
Gaudi::Property< std::string > m_trapType
void dump(const MSG::Level level, const bool mode=true) const
dump the content of DataOnDemand service
std::vector< IDODNodeMapper * > m_nodeMappers
SmartIF< IIncidentSvc > m_incSvc
Incident service.
unsigned long long m_statAlg
Gaudi::Property< bool > m_dump
SmartIF< IToolSvc > m_toolSvc
Data provider reference.
unsigned long long m_stat
unsigned long long m_statNode
std::vector< IDODAlgMapper * > m_algMappers
ChronoEntity m_timer_all
Gaudi::StateMachine::State FSMState() const override
Definition Service.h:55
StatusCode finalize() override
Definition Service.cpp:223
@ DEBUG
Definition IMessageSvc.h:22
@ INFO
Definition IMessageSvc.h:22
@ milliSec
Definition Timing.h:45
@ Sec
Definition Timing.h:45

◆ force_update()

void DataOnDemandSvc::force_update ( Gaudi::Details::PropertyBase & p)
inlineprivate

Definition at line 186 of file DataOnDemandSvc.h.

186 {
187 verbose() << "updated property " << p.name() << ", forcing update" << endmsg;
188 m_updateRequired = true;
189 };
MsgStream & verbose() const
shortcut for the method msgStream(MSG::VERBOSE)

◆ handle()

void DataOnDemandSvc::handle ( const Incident & incident)
override

IIncidentListener interfaces overrides: incident handling.

Definition at line 426 of file DataOnDemandSvc.cpp.

426 {
427
428 Gaudi::Utils::LockedChrono timer( m_timer_all, m_locked_all );
429
430 ++m_stat;
431 // proper incident type?
432 if ( incident.type() != m_trapType ) { return; }
433 const DataIncident* inc = dynamic_cast<const DataIncident*>( &incident );
434 if ( !inc ) { return; }
435 // update if needed!
436 if ( m_updateRequired ) {
437 if ( !update() ) throw GaudiException( "Failed to update", name(), StatusCode::FAILURE );
438 }
439
440 if ( msgLevel( MSG::VERBOSE ) ) {
441 verbose() << "Incident: [" << incident.type() << "] "
442 << " = " << incident.source() << " Location:" << inc->tag() << endmsg;
443 }
444
445 Gaudi::StringKey tag( inc->tag() );
446
447 auto icl = m_nodes.find( tag );
448 if ( icl != m_nodes.end() ) {
449 StatusCode sc = execHandler( tag, icl->second );
450 if ( sc.isSuccess() ) { ++m_statNode; }
451 return;
452 }
453
454 auto ialg = m_algs.find( tag );
455 if ( ialg != m_algs.end() ) {
456 StatusCode sc = execHandler( tag, ialg->second );
457 if ( sc.isSuccess() ) { ++m_statAlg; }
458 return;
459 }
460
461 // Fall back on the tools
462 if ( m_toolSvc ) {
463 if ( msgLevel( MSG::VERBOSE ) ) verbose() << "Try to find mapping with mapping tools" << endmsg;
464 Finder finder( no_prefix( inc->tag(), m_prefix ), m_nodeMappers, m_algMappers );
465 // - try the node mappers
466 std::string node = finder.node();
467 if ( isGood( node ) ) {
468 // if one is found update the internal node mapping and try again.
469 if ( msgLevel( MSG::VERBOSE ) ) verbose() << "Found Node handler: " << node << endmsg;
470 i_setNodeHandler( inc->tag(), node );
471 handle( incident );
472 --m_stat; // avoid double counting because of recursion
473 return;
474 }
475 // - try alg mappings
476 Gaudi::Utils::TypeNameString alg = finder.alg();
477 if ( isGood( alg ) ) {
478 // we got an algorithm, update alg map and try to handle again
479 if ( msgLevel( MSG::VERBOSE ) ) verbose() << "Found Algorithm handler: " << alg << endmsg;
480 i_setAlgHandler( inc->tag(), alg ).ignore();
481 handle( incident );
482 --m_stat; // avoid double counting because of recursion
483 return;
484 }
485 }
486}
ContextIncident< std::string > DataIncident
Specific incident type used by the data-on-demand-service.
StatusCode execHandler(const std::string &tag, Leaf &leaf)
Execute leaf handler (algorithm)
void i_setNodeHandler(const std::string &name, const std::string &type)
Internal method to initialize a node handler.
StatusCode update()
update the handlers
StatusCode i_setAlgHandler(const std::string &name, const Gaudi::Utils::TypeNameString &alg)
Internal method to initialize an algorithm handler.
void handle(const Incident &incident) override
IIncidentListener interfaces overrides: incident handling.
const std::string & type() const
Access to the incident type.
Definition Incident.h:43
const std::string & source() const
Access to the source of the incident.
Definition Incident.h:49
const std::string & name() const override
Retrieve name of the service.
Definition Service.cpp:333
const StatusCode & ignore() const
Allow discarding a StatusCode without warning.
Definition StatusCode.h:139
bool isSuccess() const
Definition StatusCode.h:314
@ VERBOSE
Definition IMessageSvc.h:22

◆ i_setAlgHandler()

StatusCode DataOnDemandSvc::i_setAlgHandler ( const std::string & name,
const Gaudi::Utils::TypeNameString & alg )
protected

Internal method to initialize an algorithm handler.

Definition at line 99 of file DataOnDemandSvc.cpp.

99 {
100 Leaf leaf( alg.type(), alg.name() );
101 if ( m_init ) {
102 StatusCode sc = configureHandler( leaf );
103 if ( sc.isFailure() ) {
104 if ( m_allowInitFailure ) {
105 // re-store the content of the leaf object to try again to initialize
106 // the algorithm later (on demand)
107 leaf = Leaf( alg.type(), alg.name() );
108 } else
109 return sc;
110 }
111 }
112 m_algs[name] = leaf;
113 return StatusCode::SUCCESS;
114}
Gaudi::Property< bool > m_init
Gaudi::Property< bool > m_allowInitFailure

◆ i_setNodeHandler()

void DataOnDemandSvc::i_setNodeHandler ( const std::string & name,
const std::string & type )
protected

Internal method to initialize a node handler.

Definition at line 93 of file DataOnDemandSvc.cpp.

93 {
94 ClassH cl = TClass::GetClass( type.c_str() );
95 if ( !cl ) { warning() << "Failed to access dictionary class for " << name << " of type:" << type << endmsg; }
96 m_nodes[name] = Node( cl, false, type );
97}

◆ initialize()

StatusCode DataOnDemandSvc::initialize ( )
override

Inherited Service overrides: Service initialization.

Definition at line 162 of file DataOnDemandSvc.cpp.

162 {
163 // initialize the Service Base class
164 StatusCode sc = Service::initialize();
165 if ( sc.isFailure() ) { return sc; }
166 sc = setup();
167 if ( sc.isFailure() ) { return sc; }
168 //
169 if ( m_dump ) {
170 dump( MSG::INFO );
171 } else if ( msgLevel( MSG::DEBUG ) ) {
172 dump( MSG::DEBUG );
173 }
174
175 if ( m_init ) { return update(); }
176
177 return StatusCode::SUCCESS;
178}
StatusCode setup()
Setup routine (called by (re-) initialize.
StatusCode initialize() override
Definition Service.cpp:118

◆ reinitialize()

StatusCode DataOnDemandSvc::reinitialize ( )
override

Inherited Service overrides: Service reinitialization.

Definition at line 223 of file DataOnDemandSvc.cpp.

223 {
224 // reinitialize the Service Base class
225 if ( m_incSvc ) {
226 m_incSvc->removeListener( this, m_trapType );
227 m_incSvc.reset();
228 }
229 m_algMgr.reset();
230 m_dataSvc.reset();
231 for ( const auto& i : m_nodeMappers ) m_toolSvc->releaseTool( i ).ignore();
232 m_nodeMappers.clear();
233 for ( const auto& i : m_algMappers ) m_toolSvc->releaseTool( i ).ignore();
234 m_algMappers.clear();
235 m_toolSvc.reset();
236
237 StatusCode sc = Service::reinitialize();
238 if ( sc.isFailure() ) { return sc; }
239
240 sc = setup();
241 if ( sc.isFailure() ) { return sc; }
242
243 if ( m_dump ) {
244 dump( MSG::INFO );
245 } else if ( msgLevel( MSG::DEBUG ) ) {
246 dump( MSG::DEBUG );
247 }
248
249 return StatusCode::SUCCESS;
250}
StatusCode reinitialize() override
Definition Service.cpp:296

◆ setup()

StatusCode DataOnDemandSvc::setup ( )
protected

Setup routine (called by (re-) initialize.

Definition at line 251 of file DataOnDemandSvc.cpp.

251 {
252 if ( !( m_algMgr = serviceLocator() ) ) // assignment meant
253 {
254 error() << "Failed to retrieve the IAlgManager interface." << endmsg;
255 return StatusCode::FAILURE;
256 }
257
258 if ( !( m_incSvc = serviceLocator()->service( "IncidentSvc" ) ) ) // assignment meant
259 {
260 error() << "Failed to retrieve Incident service." << endmsg;
261 return StatusCode::FAILURE;
262 }
263 m_incSvc->addListener( this, m_trapType );
264
265 if ( !( m_dataSvc = serviceLocator()->service( m_dataSvcName ) ) ) // assignment meant
266 {
267 error() << "Failed to retrieve the data provider interface of " << m_dataSvcName << endmsg;
268 return StatusCode::FAILURE;
269 }
270
271 // No need to get the ToolSvc if we are not using tools
272 if ( !( m_nodeMapTools.empty() && m_algMapTools.empty() ) ) {
273 if ( !( m_toolSvc = serviceLocator()->service( "ToolSvc" ) ) ) // assignment meant
274 {
275 error() << "Failed to retrieve ToolSvc" << endmsg;
276 return StatusCode::FAILURE;
277 }
278
279 // load the node mapping tools
280 IDODNodeMapper* nodetool = nullptr;
281 for ( const auto& i : m_nodeMapTools ) {
282 const StatusCode sc = m_toolSvc->retrieveTool( i, nodetool );
283 if ( sc.isFailure() ) return sc;
284 m_nodeMappers.push_back( nodetool );
285 }
286 IDODAlgMapper* algtool = nullptr;
287 for ( const auto& i : m_algMapTools ) {
288 const StatusCode sc = m_toolSvc->retrieveTool( i, algtool );
289 if ( sc.isFailure() ) return sc;
290 m_algMappers.push_back( algtool );
291 }
292 }
293 return update();
294}
Gaudi::Property< std::vector< std::string > > m_algMapTools
Gaudi::Property< std::vector< std::string > > m_nodeMapTools
Gaudi::Property< std::string > m_dataSvcName
SmartIF< ISvcLocator > & serviceLocator() const override
Retrieve pointer to service locator.
Definition Service.cpp:336
SmartIF< IFace > service(const std::string &name, bool createIf=true) const
Definition Service.h:79

◆ setupAlgHandlers()

StatusCode DataOnDemandSvc::setupAlgHandlers ( )
protected

Initialize leaf handlers.

Definition at line 321 of file DataOnDemandSvc.cpp.

321 {
322 std::string typ, tag;
323
324 for ( auto alg : m_algMapping ) {
325 using Parser = Gaudi::Utils::AttribStringParser;
326 for ( auto attrib : Parser( alg ) ) {
327 switch ( ::toupper( attrib.tag[0] ) ) {
328 case 'D':
329 tag = std::move( attrib.value );
330 break;
331 case 'T':
332 typ = std::move( attrib.value );
333 break;
334 }
335 }
336 Gaudi::Utils::TypeNameString item( typ );
337 if ( m_algMap.end() != m_algMap.find( tag ) || m_nodeMap.end() != m_nodeMap.find( tag ) ) {
338 warning() << "The obsolete property 'Algorithms' redefines the action for '" + tag + "' to be '" + item.type() +
339 "/" + item.name() + "'"
340 << endmsg;
341 }
342 m_algMap[tag] = item.type() + "/" + item.name();
343 }
344 m_updateRequired = true;
345 return StatusCode::SUCCESS;
346}
void toupper(std::string &s)
Gaudi::Property< Setup > m_algMapping
Gaudi::Property< Map > m_algMap
Gaudi::Property< Map > m_nodeMap

◆ setupNodeHandlers()

StatusCode DataOnDemandSvc::setupNodeHandlers ( )
protected

Initialize node handlers.

Definition at line 295 of file DataOnDemandSvc.cpp.

295 {
296 std::string nam, typ, tag;
297 StatusCode sc = StatusCode::SUCCESS;
298 // Setup for node leafs, where simply a constructor is called...
299 for ( auto node : m_nodeMapping ) {
300 using Parser = Gaudi::Utils::AttribStringParser;
301 for ( auto attrib : Parser( node ) ) {
302 switch ( ::toupper( attrib.tag[0] ) ) {
303 case 'D':
304 tag = std::move( attrib.value );
305 break;
306 case 'T':
307 nam = std::move( attrib.value );
308 break;
309 }
310 }
311 if ( m_algMap.end() != m_algMap.find( tag ) || m_nodeMap.end() != m_nodeMap.find( tag ) ) {
312 warning() << "The obsolete property 'Nodes' redefines the action for '" + tag + "' to be '" + nam + "'" << endmsg;
313 }
314 m_nodeMap[tag] = nam;
315 }
316
317 m_updateRequired = true;
318
319 return sc;
320}
Gaudi::Property< Setup > m_nodeMapping

◆ update()

StatusCode DataOnDemandSvc::update ( )
protected

update the handlers

Definition at line 116 of file DataOnDemandSvc.cpp.

116 {
117 if ( !m_updateRequired ) { return StatusCode::SUCCESS; }
118
119 // convert obsolete "Nodes" into new "NodeMap"
120 StatusCode sc = setupNodeHandlers(); // convert "Nodes" new "NodeMap"
121 if ( sc.isFailure() ) {
122 error() << "Failed to setup old \"Nodes\"" << endmsg;
123 return sc;
124 }
125 // convert obsolete "Algorithms" into new "AlgMap"
126 sc = setupAlgHandlers(); // convert "Algorithms" into "AlgMap"
127 if ( sc.isFailure() ) {
128 error() << "Failed to setup old \"Algorithms\"" << endmsg;
129 return sc;
130 }
131 // add the default prefix
132 add_prefix( m_algMap, m_prefix );
133 // add the default prefix
134 add_prefix( m_nodeMap, m_prefix );
135 // get all directories
136 std::set<std::string> dirs;
137 if ( m_partialPath ) { get_dirs( m_algMap, dirs ); }
138 if ( m_partialPath ) { get_dirs( m_nodeMap, dirs ); }
139
140 auto _e = dirs.find( "/Event" );
141 if ( dirs.end() != _e ) { dirs.erase( _e ); }
142 // add all directories as nodes
143 for ( const auto& dir : dirs ) {
144 if ( m_algMap.end() == m_algMap.find( dir ) && m_nodeMap.end() == m_nodeMap.find( dir ) )
145 m_nodeMap[dir] = "DataObject";
146 }
147
148 m_algs.clear();
149 m_nodes.clear();
150
151 // setup algorithms
152 for ( const auto& alg : m_algMap ) {
153 if ( i_setAlgHandler( alg.first, alg.second ).isFailure() ) return StatusCode::FAILURE;
154 }
155 // setup nodes
156 for ( const auto& node : m_nodeMap ) { i_setNodeHandler( node.first, node.second ); }
157
158 m_updateRequired = false;
159
160 return StatusCode::SUCCESS;
161}
Gaudi::Property< bool > m_partialPath
StatusCode setupAlgHandlers()
Initialize leaf handlers.
StatusCode setupNodeHandlers()
Initialize node handlers.

Member Data Documentation

◆ m_algMap

Gaudi::Property<Map> DataOnDemandSvc::m_algMap { this, "AlgMap", {}, &DataOnDemandSvc::force_update, "mapping {'data': 'algorithm'}" }
private

Definition at line 246 of file DataOnDemandSvc.h.

246{ this, "AlgMap", {}, &DataOnDemandSvc::force_update, "mapping {'data': 'algorithm'}" };

◆ m_algMappers

std::vector<IDODAlgMapper*> DataOnDemandSvc::m_algMappers
private

Definition at line 223 of file DataOnDemandSvc.h.

◆ m_algMapping

Gaudi::Property<Setup> DataOnDemandSvc::m_algMapping
private
Initial value:
{
this, "Algorithms", {}, &DataOnDemandSvc::deprecated_property, "[[deprecated]] use AlgMap" }
void deprecated_property(Gaudi::Details::PropertyBase &p)

Definition at line 240 of file DataOnDemandSvc.h.

240 {
241 this, "Algorithms", {}, &DataOnDemandSvc::deprecated_property, "[[deprecated]] use AlgMap" };

◆ m_algMapTools

Gaudi::Property<std::vector<std::string> > DataOnDemandSvc::m_algMapTools
private
Initial value:
{
this, "AlgMappingTools", {}, "list of tools of type IDODAlgMapper" }

Definition at line 253 of file DataOnDemandSvc.h.

253 {
254 this, "AlgMappingTools", {}, "list of tools of type IDODAlgMapper" };

◆ m_algMgr

SmartIF<IAlgManager> DataOnDemandSvc::m_algMgr = nullptr
private

Algorithm manager.

Definition at line 198 of file DataOnDemandSvc.h.

◆ m_algs

AlgMap DataOnDemandSvc::m_algs
private

Map of algorithms to handle incidents.

Definition at line 204 of file DataOnDemandSvc.h.

◆ m_allowInitFailure

Gaudi::Property<bool> DataOnDemandSvc::m_allowInitFailure
private
Initial value:
{
this, "AllowPreInitializeFailure", false,
"allow (pre)initialization of algorithms to fail without stopping the application" }

Definition at line 236 of file DataOnDemandSvc.h.

236 {
237 this, "AllowPreInitializeFailure", false,
238 "allow (pre)initialization of algorithms to fail without stopping the application" };

◆ m_dataSvc

SmartIF<IDataProviderSvc> DataOnDemandSvc::m_dataSvc = nullptr
private

Data provider reference.

Definition at line 200 of file DataOnDemandSvc.h.

◆ m_dataSvcName

Gaudi::Property<std::string> DataOnDemandSvc::m_dataSvcName { this, "DataSvc", "EventDataSvc", "DataSvc name" }
private

Definition at line 226 of file DataOnDemandSvc.h.

226{ this, "DataSvc", "EventDataSvc", "DataSvc name" };

◆ m_dump

Gaudi::Property<bool> DataOnDemandSvc::m_dump
private
Initial value:
{
this, "Dump", false,
[this]( auto& ) {
},
"dump configuration and stastics, if set to True after initialize it triggers a dump immediately" }
@ ALWAYS
Definition IMessageSvc.h:22

Definition at line 229 of file DataOnDemandSvc.h.

229 {
230 this, "Dump", false,
231 [this]( auto& ) {
233 },
234 "dump configuration and stastics, if set to True after initialize it triggers a dump immediately" };

◆ m_incSvc

SmartIF<IIncidentSvc> DataOnDemandSvc::m_incSvc = nullptr
private

Incident service.

Definition at line 196 of file DataOnDemandSvc.h.

◆ m_init

Gaudi::Property<bool> DataOnDemandSvc::m_init { this, "PreInitialize", false, "(pre)initialize all algorithms" }
private

Definition at line 235 of file DataOnDemandSvc.h.

235{ this, "PreInitialize", false, "(pre)initialize all algorithms" };

◆ m_locked_algs

bool DataOnDemandSvc::m_locked_algs = false
private

Definition at line 219 of file DataOnDemandSvc.h.

◆ m_locked_all

bool DataOnDemandSvc::m_locked_all = false
private

Definition at line 220 of file DataOnDemandSvc.h.

◆ m_locked_nodes

bool DataOnDemandSvc::m_locked_nodes = false
private

Definition at line 218 of file DataOnDemandSvc.h.

◆ m_nodeMap

Gaudi::Property<Map> DataOnDemandSvc::m_nodeMap { this, "NodeMap", {}, &DataOnDemandSvc::force_update, "mapping {'data': 'type'}" }
private

Definition at line 247 of file DataOnDemandSvc.h.

247{ this, "NodeMap", {}, &DataOnDemandSvc::force_update, "mapping {'data': 'type'}" };

◆ m_nodeMappers

std::vector<IDODNodeMapper*> DataOnDemandSvc::m_nodeMappers
private

Definition at line 222 of file DataOnDemandSvc.h.

◆ m_nodeMapping

Gaudi::Property<Setup> DataOnDemandSvc::m_nodeMapping
private
Initial value:
{
this, "Nodes", {}, &DataOnDemandSvc::deprecated_property, "[[deprecated]] use NodeMap" }

Definition at line 242 of file DataOnDemandSvc.h.

242 {
243 this, "Nodes", {}, &DataOnDemandSvc::deprecated_property, "[[deprecated]] use NodeMap" };

◆ m_nodeMapTools

Gaudi::Property<std::vector<std::string> > DataOnDemandSvc::m_nodeMapTools
private
Initial value:
{
this, "NodeMappingTools", {}, "list of tools of type IDODNodeMapper" }

Definition at line 251 of file DataOnDemandSvc.h.

251 {
252 this, "NodeMappingTools", {}, "list of tools of type IDODNodeMapper" };

◆ m_nodes

NodeMap DataOnDemandSvc::m_nodes
private

Map of "empty" objects to be placed as intermediate nodes.

Definition at line 206 of file DataOnDemandSvc.h.

◆ m_partialPath

Gaudi::Property<bool> DataOnDemandSvc::m_partialPath { this, "UsePreceedingPath", true, "allow creation of partial leaves" }
private

Definition at line 228 of file DataOnDemandSvc.h.

228{ this, "UsePreceedingPath", true, "allow creation of partial leaves" };

◆ m_prefix

Gaudi::Property<std::string> DataOnDemandSvc::m_prefix { this, "Prefix", "/Event/" }
private

Definition at line 249 of file DataOnDemandSvc.h.

249{ this, "Prefix", "/Event/" };

◆ m_stat

unsigned long long DataOnDemandSvc::m_stat = 0
private

Definition at line 213 of file DataOnDemandSvc.h.

◆ m_statAlg

unsigned long long DataOnDemandSvc::m_statAlg = 0
private

Definition at line 211 of file DataOnDemandSvc.h.

◆ m_statNode

unsigned long long DataOnDemandSvc::m_statNode = 0
private

Definition at line 212 of file DataOnDemandSvc.h.

◆ m_timer_algs

ChronoEntity DataOnDemandSvc::m_timer_algs
private

Definition at line 216 of file DataOnDemandSvc.h.

◆ m_timer_all

ChronoEntity DataOnDemandSvc::m_timer_all
private

Definition at line 217 of file DataOnDemandSvc.h.

◆ m_timer_nodes

ChronoEntity DataOnDemandSvc::m_timer_nodes
private

Definition at line 215 of file DataOnDemandSvc.h.

◆ m_toolSvc

SmartIF<IToolSvc> DataOnDemandSvc::m_toolSvc
private

Data provider reference.

Definition at line 202 of file DataOnDemandSvc.h.

◆ m_total

ChronoEntity DataOnDemandSvc::m_total
private

Definition at line 210 of file DataOnDemandSvc.h.

◆ m_trapType

Gaudi::Property<std::string> DataOnDemandSvc::m_trapType { this, "IncidentName", "DataFault", "the type of handled Incident" }
private

Definition at line 225 of file DataOnDemandSvc.h.

225{ this, "IncidentName", "DataFault", "the type of handled Incident" };

◆ m_updateRequired

bool DataOnDemandSvc::m_updateRequired = true
private

Definition at line 208 of file DataOnDemandSvc.h.


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