| The Gaudi Framework v32r1 (f65d50dc)

GaudiCommon.h
Go to the documentation of this file.
1 #ifndef GAUDIALG_GAUDICOMMON_H
2 #define GAUDIALG_GAUDICOMMON_H 1
3 // ============================================================================
4 // Include files
5 // ============================================================================
6 // from STL
7 // ============================================================================
8 #include <algorithm>
9 #include <functional>
10 #include <list>
11 #include <map>
12 #include <mutex>
13 #include <string>
14 #include <vector>
15 // ============================================================================
16 // GaudiKernel
17 // ============================================================================
18 #include "GaudiAlg/FixTESPath.h"
19 #include "GaudiKernel/DataObjectHandle.h"
20 #include "GaudiKernel/GaudiException.h"
21 #include "GaudiKernel/HashMap.h"
22 #include "GaudiKernel/IAlgContextSvc.h"
23 #include "GaudiKernel/IAlgTool.h"
24 #include "GaudiKernel/IAlgorithm.h"
25 #include "GaudiKernel/IChronoStatSvc.h"
26 #include "GaudiKernel/ICounterSummarySvc.h"
27 #include "GaudiKernel/IDataProviderSvc.h"
28 #include "GaudiKernel/IMessageSvc.h"
29 #include "GaudiKernel/IToolSvc.h"
30 #include "GaudiKernel/IUpdateManagerSvc.h"
31 #include "GaudiKernel/SmartDataPtr.h"
32 #include "GaudiKernel/StatEntity.h"
33 #include "GaudiKernel/StatusCode.h"
34 #include "GaudiKernel/System.h"
35
36 #ifdef __CLING__
37 # define WARN_UNUSED
38 #else
39 # define WARN_UNUSED [[nodiscard]]
40 #endif
41
42 // ============================================================================
43 // forward declarations
44 // ============================================================================
45 namespace Gaudi {
46 class Algorithm; // GaudiKernel
47 }
48 class AlgTool; // GaudiKernel
49 class ISvcLocator;
50 namespace Gaudi {
51 namespace Utils {
52 template <class TYPE>
53 struct GetData;
54 }
55 } // namespace Gaudi
56
57 namespace GaudiCommon_details {
58 constexpr const struct svc_eq_t {
59 bool operator()( const std::string& n, const SmartIF<IService>& s ) const { return n == s->name(); };
60 bool operator()( const SmartIF<IService>& s, const std::string& n ) const { return s->name() == n; };
61 bool operator()( const SmartIF<IService>& s, const SmartIF<IService>& n ) const { return s->name() == n->name(); };
62 } svc_eq{};
63 constexpr const struct svc_lt_t {
64 bool operator()( const std::string& n, const SmartIF<IService>& s ) const { return n < s->name(); };
65 bool operator()( const SmartIF<IService>& s, const std::string& n ) const { return s->name() < n; };
66 bool operator()( const SmartIF<IService>& s, const SmartIF<IService>& n ) const { return s->name() < n->name(); };
67 } svc_lt{};
68 } // namespace GaudiCommon_details
69 // ============================================================================
70 /* @file GaudiCommon.h
71 *
72 * Header file for class : GaudiCommon
73 *
74 * @author Chris Jones Christopher.Rob.Jones@cern.ch
75 * @author Vanya BELYAEV Ivan.Belyaev@itep.ru
76 * @author Rob Lambert Rob.Lambert@cern.ch
77 * @date 2009-08-04
78 */
79 // ============================================================================
89 // ============================================================================
90 template <class PBASE>
91 class GAUDI_API GaudiCommon : public FixTESPath<PBASE> {
92 protected: // definitions
93 using base_class = FixTESPath<PBASE>;
94
104 static const bool IgnoreRootInTES = false;
116 static const bool UseRootInTES = true;
117 // ==========================================================================
118 protected: // few actual data types
119 // ==========================================================================
121 typedef std::map<std::string, StatEntity> StatisticsOwn;
122 typedef std::map<std::string, std::reference_wrapper<Gaudi::Accumulators::PrintableCounter>> Statistics;
124 typedef std::map<std::string, unsigned int> Counter;
126 typedef std::vector<IAlgTool*> AlgTools;
128 typedef std::vector<SmartIF<IService>> Services;
129
130 // ==========================================================================
131 // protected members such that they can be used in the derived classes
133 SmartIF<ICounterSummarySvc> m_counterSummarySvc;
134
135 public:
136 // ==========================================================================
170 template <class TYPE>
171 typename Gaudi::Utils::GetData<TYPE>::return_type get( IDataProviderSvc* svc, const std::string& location,
172 const bool useRootInTES = true ) const;
176 template <class TYPE>
177 typename Gaudi::Utils::GetData<TYPE>::return_type getIfExists( IDataProviderSvc* svc, const std::string& location,
178 const bool useRootInTES = true ) const;
205 template <class TYPE>
206 bool exist( IDataProviderSvc* svc, const std::string& location, const bool useRootInTES = true ) const;
234 template <class TYPE, class TYPE2>
235 typename Gaudi::Utils::GetData<TYPE>::return_type getOrCreate( IDataProviderSvc* svc, const std::string& location,
236 const bool useRootInTES = true ) const;
262 DataObject* put( IDataProviderSvc* svc, std::unique_ptr<DataObject> object, const std::string& location,
263 const bool useRootInTES = true ) const;
264 // [[deprecated( "please pass std::unique_ptr as 2nd argument" )]]
265 DataObject* put( IDataProviderSvc* svc, DataObject* object, const std::string& location,
266 const bool useRootInTES = true ) const {
267 return put( svc, std::unique_ptr<DataObject>( object ), location, useRootInTES );
268 }
294 template <class TOOL>
295 TOOL* tool( const std::string& type, const std::string& name, const IInterface* parent = 0,
296 bool create = true ) const;
319 template <class TOOL>
320 TOOL* tool( const std::string& type, const IInterface* parent = 0, bool create = true ) const;
343 template <class SERVICE>
344 SmartIF<SERVICE> svc( const std::string& name, const bool create = true ) const;
346 inline IUpdateManagerSvc* updMgrSvc() const;
347
348 public:
372 WARN_UNUSED
373 StatusCode Error( const std::string& msg, const StatusCode st = StatusCode::FAILURE, const size_t mx = 10 ) const;
397 WARN_UNUSED
398 StatusCode Warning( const std::string& msg, const StatusCode st = StatusCode::FAILURE, const size_t mx = 10 ) const;
414 WARN_UNUSED
415 StatusCode Info( const std::string& msg, const StatusCode st = StatusCode::SUCCESS, const size_t mx = 10 ) const;
427 WARN_UNUSED
428 StatusCode Print( const std::string& msg, const StatusCode st = StatusCode::SUCCESS,
429 const MSG::Level lev = MSG::INFO ) const;
438 inline void Assert( const bool ok, const std::string& message = "",
439 const StatusCode sc = StatusCode( StatusCode::FAILURE, true ) ) const;
448 inline void Assert( const bool ok, const char* message,
449 const StatusCode sc = StatusCode( StatusCode::FAILURE, true ) ) const;
458 void Exception( const std::string& msg, const GaudiException& exc,
459 const StatusCode sc = StatusCode( StatusCode::FAILURE, true ) ) const;
469 void Exception( const std::string& msg, const std::exception& exc,
470 const StatusCode sc = StatusCode( StatusCode::FAILURE, true ) ) const;
479 void Exception( const std::string& msg = "no message",
480 const StatusCode sc = StatusCode( StatusCode::FAILURE, true ) ) const;
481
482 private:
484 inline StatisticsOwn countersOwn() const { return m_countersOwn; }
485
486 public:
505 //[[deprecated( "see LHCBPS-1758" )]]
506 inline StatEntity& counter( const std::string& tag ) const {
507 return const_cast<GaudiCommon<PBASE>*>( this )->counter( tag );
508 }
509 inline StatEntity& counter( const std::string& tag ) {
510 std::lock_guard<std::mutex> lock( m_countersOwnMutex );
511 // Return referenced StatEntity if it already exists, else create it
512 auto p = this->findCounter( tag );
513 if ( !p ) {
514 auto& counter = m_countersOwn[tag];
515 this->declareCounter( tag, counter );
516 return counter;
517 }
518 return m_countersOwn[tag];
519 }
520 // ==========================================================================
521 public:
523 inline bool typePrint() const { return m_typePrint; }
525 inline bool propsPrint() const { return m_propsPrint; }
527 inline bool statPrint() const { return m_statPrint; }
529 inline bool errorsPrint() const { return m_errorsPrint; }
530 // ==========================================================================
531 public:
536 long printStat( const MSG::Level level = MSG::ALWAYS ) const;
541 long printErrors( const MSG::Level level = MSG::ALWAYS ) const;
546 long printProps( const MSG::Level level = MSG::ALWAYS ) const;
562 template <class CallerClass>
563 inline void registerCondition( const std::string& condition, StatusCode ( CallerClass::*mf )() = nullptr ) {
564 updMgrSvc()->registerCondition( dynamic_cast<CallerClass*>( this ), condition, mf );
565 }
596 template <class CallerClass, class CondType>
597 inline void registerCondition( const std::string& condition, CondType*& condPtrDest,
598 StatusCode ( CallerClass::*mf )() = NULL ) {
599 updMgrSvc()->registerCondition( dynamic_cast<CallerClass*>( this ), condition, mf, condPtrDest );
600 }
602 template <class CallerClass>
603 inline void registerCondition( char* condition, StatusCode ( CallerClass::*mf )() = NULL ) {
604 updMgrSvc()->registerCondition( dynamic_cast<CallerClass*>( this ), std::string( condition ), mf );
605 }
621 template <class CallerClass, class TargetClass>
622 inline void registerCondition( TargetClass* condition, StatusCode ( CallerClass::*mf )() = NULL ) {
623 updMgrSvc()->registerCondition( dynamic_cast<CallerClass*>( this ), condition, mf );
624 }
636 inline StatusCode runUpdate() { return updMgrSvc()->update( this ); }
637
638 public:
641 template <typename U = PBASE, typename = std::enable_if_t<std::is_base_of_v<Gaudi::Algorithm, PBASE>, U>>
642 GaudiCommon( const std::string& name, ISvcLocator* pSvcLocator ) : base_class( name, pSvcLocator ) {
643 initGaudiCommonConstructor();
644 }
647 template <typename U = PBASE, typename = std::enable_if_t<std::is_base_of_v<AlgTool, PBASE>, U>>
648 GaudiCommon( const std::string& type, const std::string& name, const IInterface* ancestor )
649 : base_class( type, name, ancestor ) {
650 initGaudiCommonConstructor( this->parent() );
651 }
652
653 public:
657 StatusCode initialize() override;
661 StatusCode finalize() override;
662
663 private:
664 GaudiCommon() = delete;
665 GaudiCommon( const GaudiCommon& ) = delete;
666 GaudiCommon& operator=( const GaudiCommon& ) = delete;
667
668 protected:
670 StatusCode releaseTool( const IAlgTool* tool ) const;
672 StatusCode releaseSvc( const IInterface* svc ) const;
673
674 public:
694 StatusCode release( const IInterface* interface ) const;
695
697 using PBASE::release;
698 // ==========================================================================
699 public:
700 // ==========================================================================
702 const Services& services() const { return m_services; } // get all services
703 // ==========================================================================
704 public:
705 // ==========================================================================
707 inline const std::string& context() const { return m_context; }
708
709 private:
710 // ==========================================================================
712 void addToServiceList( SmartIF<IService> svc ) const;
714 void initGaudiCommonConstructor( const IInterface* parent = nullptr );
715 // ==========================================================================
716 private:
718 mutable AlgTools m_managedTools;
720 mutable Services m_services;
721 // ==========================================================================
723 mutable Counter m_errors;
725 mutable Counter m_warnings;
727 mutable Counter m_infos;
729 mutable Counter m_exceptions;
731 StatisticsOwn m_countersOwn;
733 std::mutex m_countersOwnMutex;
734 // ==========================================================================
736 mutable IUpdateManagerSvc* m_updMgrSvc = nullptr;
737 // ==========================================================================
738 // Properties
739 Gaudi::Property<bool> m_errorsPrint{this, "ErrorsPrint", true,
740 [this]( auto& ) {
741 // no action if not yet initialized
742 if ( this->FSMState() >= Gaudi::StateMachine::INITIALIZED &&
743 this->errorsPrint() ) {
744 this->printErrors();
745 }
746 },
747 "print the statistics of errors/warnings/exceptions"};
748 Gaudi::Property<bool> m_propsPrint{this, "PropertiesPrint", false,
749 [this]( auto& ) {
750 // no action if not yet initialized
751 if ( this->FSMState() >= Gaudi::StateMachine::INITIALIZED &&
752 this->propsPrint() ) {
753 this->printProps( MSG::ALWAYS );
754 }
755 },
756 "print the properties of the component"};
757 Gaudi::Property<bool> m_statPrint{this, "StatPrint", true,
758 [this]( auto& ) {
759 // no action if not yet initialized
760 if ( this->FSMState() >= Gaudi::StateMachine::INITIALIZED && this->statPrint() ) {
761 this->printStat( MSG::ALWAYS );
762 }
763 },
764 "print the table of counters"};
765 Gaudi::Property<bool> m_printEmptyCounters{this, "PrintEmptyCounters", false,
766 "force printing of empty counters, otherwise only printed in DEBUG mode"};
767 Gaudi::Property<bool> m_typePrint{this, "TypePrint", true, "add the actual C++ component type into the messages"};
768
769 Gaudi::Property<std::string> m_context{this, "Context", {}, "note: overridden by parent settings"};
770 Gaudi::Property<std::string> m_header{this, "StatTableHeader",
771 " | Counter | # | "
772 " sum | mean/eff^* | rms/err^* | min | max |",
773 "the header row for the output Stat-table"};
774 Gaudi::Property<std::string> m_format1{
775 this, "RegularRowFormat", " | %|-48.48s|%|50t||%|10d| |%|11.7g| |%|#11.5g| |%|#11.5g| |%|#12.5g| |%|#12.5g| |",
776 "the format for regular row in the output Stat-table"};
777 Gaudi::Property<std::string> m_format2{
778 this, "EfficiencyRowFormat",
779 " |*%|-48.48s|%|50t||%|10d| |%|11.5g| |(%|#9.6g| +- %|-#9.6g|)%%| ------- | ------- |",
780 "The format for \"efficiency\" row in the output Stat-table"};
781 Gaudi::Property<bool> m_useEffFormat{this, "UseEfficiencyRowFormat", true,
782 "use the special format for printout of efficiency counters"};
783
784 Gaudi::Property<std::vector<std::string>> m_counterList{
785 this, "CounterList", {".*"}, "RegEx list, of simple integer counters for CounterSummary"};
786 Gaudi::Property<std::vector<std::string>> m_statEntityList{
787 this, "StatEntityList", {}, "RegEx list, of StatEntity counters for CounterSummary"};
788 };
789 // ============================================================================
790 #include "GaudiAlg/GaudiCommonImp.h"
791 // ============================================================================
792
793 // ============================================================================
794 // The END
795 // ============================================================================
796 #endif // GAUDIALG_GAUDICOMMON_H
GaudiCommon::StatisticsOwn
std::map< std::string, StatEntity > StatisticsOwn
the actual type of general counters
Definition: GaudiCommon.h:121
GaudiCommonImp.h
The implementation of inline/templated methods for class GaudiCommon.
System.h
GaudiCommon_details
Definition: GaudiCommon.h:57
GaudiCommon::m_warnings
Counter m_warnings
counter of warnings
Definition: GaudiCommon.h:725
Gaudi::StateMachine::INITIALIZED
Definition: StateMachine.h:15
SmartIF< IService >
GaudiException
Define general base for Gaudi exception.
Definition: GaudiException.h:21
GaudiCommon::statPrint
bool statPrint() const
Print statistical counters at finalization ?
Definition: GaudiCommon.h:527
ISvcLocator
The ISvcLocator is the interface implemented by the Service Factory in the Application Manager to loc...
Definition: ISvcLocator.h:25
GaudiCommon::m_exceptions
Counter m_exceptions
Counter of exceptions.
Definition: GaudiCommon.h:729
GaudiCommon::errorsPrint
bool errorsPrint() const
Print error counters at finalization ?
Definition: GaudiCommon.h:529
gaudiComponentHelp.name
name
Definition: gaudiComponentHelp.py:41
Gaudi::Property
Implementation of property with value of concrete type.
Definition: Property.h:352
GaudiCommon::GaudiCommon
GaudiCommon(const std::string &name, ISvcLocator *pSvcLocator)
Algorithm constructor - the SFINAE constraint below ensures that this is constructor is only defined ...
Definition: GaudiCommon.h:642
GaudiCommon::counter
StatEntity & counter(const std::string &tag)
Definition: GaudiCommon.h:509
GaudiCommon::AlgTools
std::vector< IAlgTool * > AlgTools
storage for active tools
Definition: GaudiCommon.h:126
GaudiCommon_details::svc_eq
constexpr const struct GaudiCommon_details::svc_eq_t svc_eq
IAlgorithm.h
GaudiCommon::registerCondition
void registerCondition(TargetClass *condition, StatusCode(CallerClass::*mf)()=NULL)
register the current instance to the UpdateManagerSvc as a consumer for a condition.
Definition: GaudiCommon.h:622
GaudiCommon::Counter
std::map< std::string, unsigned int > Counter
the actual type error/warning counter
Definition: GaudiCommon.h:124
GaudiCommon::m_services
Services m_services
List of active services.
Definition: GaudiCommon.h:720
GaudiCommon::services
const Services & services() const
get the list of aquired services
Definition: GaudiCommon.h:702
GaudiCommon::m_countersOwn
StatisticsOwn m_countersOwn
General counters.
Definition: GaudiCommon.h:731
GaudiPython.HistoUtils.location
location
Definition: HistoUtils.py:936
IUpdateManagerSvc.h
StatusCode::SUCCESS
constexpr static const auto SUCCESS
Definition: StatusCode.h:85
Gaudi::Utils::GetData
Helper structure for implementation of "get"-functions for GaudiCommon<BASE>
Definition: GaudiCommon.h:53
ICounterSummarySvc.h
FixTESPath.h
GaudiCommon_details::svc_eq_t::operator()
bool operator()(const std::string &n, const SmartIF< IService > &s) const
Definition: GaudiCommon.h:59
GaudiCommon::registerCondition
void registerCondition(char *condition, StatusCode(CallerClass::*mf)()=NULL)
just to avoid conflicts with the version using a pointer to a template class.
Definition: GaudiCommon.h:603
GaudiCommon::countersOwn
StatisticsOwn countersOwn() const
accessor to all owned counters
Definition: GaudiCommon.h:484
IDataProviderSvc
Data provider interface definition.
Definition: IDataProviderSvc.h:43
HashMap.h
GaudiCommon::registerCondition
void registerCondition(const std::string &condition, StatusCode(CallerClass::*mf)()=nullptr)
register the current instance to the UpdateManagerSvc as a consumer for a condition.
Definition: GaudiCommon.h:563
IToolSvc.h
std::map< std::string, StatEntity >
GaudiCommon::put
DataObject * put(IDataProviderSvc *svc, DataObject *object, const std::string &location, const bool useRootInTES=true) const
Definition: GaudiCommon.h:265
std::mutex
GaudiCommon_details::svc_eq_t::operator()
bool operator()(const SmartIF< IService > &s, const std::string &n) const
Definition: GaudiCommon.h:60
std::string
STL class.
GaudiPluginService.cpluginsvc.n
n
Definition: cpluginsvc.py:210
MSG::Level
Level
Definition: IMessageSvc.h:15
IDataProviderSvc.h
GaudiCommon_details::svc_lt
constexpr const struct GaudiCommon_details::svc_lt_t svc_lt
GaudiCommon::m_errors
Counter m_errors
Counter of errors.
Definition: GaudiCommon.h:723
SmartDataPtr.h
StatusCode
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:50
GaudiException.h
IInterface
Definition of the basic interface.
Definition: IInterface.h:244
gaudirun.type
type
Definition: gaudirun.py:142
GaudiCommon::m_infos
Counter m_infos
counter of infos
Definition: GaudiCommon.h:727
IAlgTool.h
GaudiCommon::Services
std::vector< SmartIF< IService > > Services
storage for active services
Definition: GaudiCommon.h:128
GaudiCommon::m_counterSummarySvc
SmartIF< ICounterSummarySvc > m_counterSummarySvc
a pointer to the CounterSummarySvc
Definition: GaudiCommon.h:133
IMessageSvc.h
IUpdateManagerSvc
Interface class to the Update Manager service.
Definition: IUpdateManagerSvc.h:132
GaudiCommon::runUpdate
StatusCode runUpdate()
asks the UpdateManagerSvc to perform an update of the instance (if needed) without waiting the next B...
Definition: GaudiCommon.h:636
GaudiCommon::m_countersOwnMutex
std::mutex m_countersOwnMutex
The mutex for m_countersOwn.
Definition: GaudiCommon.h:733
GaudiCommon::context
const std::string & context() const
Returns the "context" string. Used to identify different processing states.
Definition: GaudiCommon.h:707
std::exception
STL class.
GaudiCommon_details::svc_lt_t::operator()
bool operator()(const SmartIF< IService > &s, const std::string &n) const
Definition: GaudiCommon.h:65
WARN_UNUSED
#define WARN_UNUSED
Definition: GaudiCommon.h:39
GaudiCommon::counter
StatEntity & counter(const std::string &tag) const
accessor to certain counter by name
Definition: GaudiCommon.h:506
GaudiCommon::Statistics
std::map< std::string, std::reference_wrapper< Gaudi::Accumulators::PrintableCounter > > Statistics
Definition: GaudiCommon.h:122
IAlgContextSvc.h
Algorithm
Alias for backward compatibility.
Definition: Algorithm.h:56
Gaudi::Functional::details::get
auto get(const Handle &handle, const Algo &, const EventContext &) -> decltype(details::deref(handle.get()))
Definition: FunctionalDetails.h:332
std::vector< IAlgTool * >
plotSpeedupsPyRoot.counter
int counter
Definition: plotSpeedupsPyRoot.py:147
GaudiCommon_details::svc_lt_t::operator()
bool operator()(const SmartIF< IService > &s, const SmartIF< IService > &n) const
Definition: GaudiCommon.h:66
std::unique_ptr
STL class.
GaudiCommon_details::svc_eq_t::operator()
bool operator()(const SmartIF< IService > &s, const SmartIF< IService > &n) const
Definition: GaudiCommon.h:61
GaudiCommon_details::svc_lt_t::operator()
bool operator()(const std::string &n, const SmartIF< IService > &s) const
Definition: GaudiCommon.h:64
std::lock_guard
Gaudi::Functional::details::put
Out1 * put(const DataObjectHandle< Out1 > &out_handle, Out2 &&out)
Definition: FunctionalDetails.h:121
GaudiCommon::registerCondition
void registerCondition(const std::string &condition, CondType *&condPtrDest, StatusCode(CallerClass::*mf)()=NULL)
register the current instance to the UpdateManagerSvc as a consumer for a condition.
Definition: GaudiCommon.h:597
GaudiCommon_details::svc_lt_t
Definition: GaudiCommon.h:63
AlgTool
Base class from which all the concrete tool classes should be derived.
Definition: AlgTool.h:47
StatEntity.h
IAlgTool
The interface implemented by the AlgTool base class.
Definition: IAlgTool.h:23
GaudiMP.FdsRegistry.msg
msg
Definition: FdsRegistry.py:8
gaudirun.s
string s
Definition: gaudirun.py:316
StatusCode::FAILURE
constexpr static const auto FAILURE
Definition: StatusCode.h:86
GaudiCommon
Implements the common functionality between GaudiTools and GaudiAlgorithms.
Definition: GaudiCommon.h:91
GaudiCommon::propsPrint
bool propsPrint() const
Print properties at initialization ?
Definition: GaudiCommon.h:525
gaudirun.level
level
Definition: gaudirun.py:334
GaudiCommon::m_managedTools
AlgTools m_managedTools
List of active tools.
Definition: GaudiCommon.h:718
IChronoStatSvc.h
FixTESPath::initialize
StatusCode initialize() override
Definition: FixTESPath.h:39
GaudiCommon_details::svc_eq_t
Definition: GaudiCommon.h:58
StatusCode.h
GaudiCommon::GaudiCommon
GaudiCommon(const std::string &type, const std::string &name, const IInterface *ancestor)
Tool constructor - SFINAE-ed to insure this constructor is only defined if PBASE derives from AlgTool...
Definition: GaudiCommon.h:648
MSG::INFO
Definition: IMessageSvc.h:15
GAUDI_API
#define GAUDI_API
Definition: Kernel.h:71
DataObject
A DataObject is the base class of any identifiable object on any data store.
Definition: DataObject.h:30
Gaudi
Header file for std:chrono::duration-based Counters.
Definition: __init__.py:1
MSG::ALWAYS
Definition: IMessageSvc.h:15
FixTESPath
Definition: FixTESPath.h:20
GaudiCommon::typePrint
bool typePrint() const
Insert the actual C++ type of the algorithm/tool in the messages ?
Definition: GaudiCommon.h:523
DataObjectHandle.h