| The Gaudi Framework v27r1

- Main Page
- Related Pages
- Modules
- Namespaces
- Classes
- Files

- File List
- File Members

GaudiTool.cpp
Go to the documentation of this file.
1 // ============================================================================
2 // Include files
3 // ============================================================================
4 // GaudiKernel
5 // ============================================================================
6 #include "GaudiKernel/IChronoStatSvc.h"
7 #include "GaudiKernel/IIncidentSvc.h"
8 #include "GaudiKernel/IDataProviderSvc.h"
9 #include "GaudiKernel/IHistogramSvc.h"
10 #include "GaudiKernel/INTupleSvc.h"
11 #include "GaudiKernel/IAlgContextSvc.h"
12 #include "GaudiKernel/Bootstrap.h"
13 // ============================================================================
14 // GaudiAlg
15 // ============================================================================
16 #include "GaudiAlg/GaudiTool.h"
17 #include "GaudiAlg/GaudiAlgorithm.h"
18 // ============================================================================
26 // ============================================================================
27 // templated methods
28 // ============================================================================
29 #include "GaudiCommon.icpp"
30 // ============================================================================
31 template class GaudiCommon<AlgTool>;
32 // ============================================================================
39 // ============================================================================
40 namespace GaudiToolServices
41 {
43 const std::string s_EventDataSvc = "EventDataSvc" ;
45 const std::string s_DetectorDataSvc = "DetectorDataSvc" ;
47 const std::string s_ChronoStatSvc = "ChronoStatSvc" ;
49 const std::string s_IncidentSvc = "IncidentSvc" ;
51 const std::string s_HistoSvc = "HistogramDataSvc" ;
52 }
53 // ============================================================================
54 namespace GaudiToolLocal
55 {
56 // ==========================================================================
60 class Counter final
61 {
62 public:
63 // ========================================================================
64 // constructor
65 Counter ( std::string msg = " Misbalance ")
66 : m_message ( std::move(msg) )
67 {};
68 // destructor
69 ~Counter() { report(); }
70 // ========================================================================
71 public:
72 // ========================================================================
74 long increment ( const std::string& object ) { return ++m_map[object] ; }
76 long decrement ( const std::string& object ) { return --m_map[object] ; }
78 long counts ( const std::string& object ) { return m_map[object] ; }
80 void report() const
81 {
83 if ( !GaudiTool::summaryEnabled() ) { return ; } // RETURN
84 //
85 for ( const auto& entry : m_map )
86 {
87 if( entry.second ) {
88 std::cout << "GaudiTool WARNING " << m_message
89 << "'" << entry.first << "' Counts = " << entry.second
90 << std::endl ;
91 }
92 }
93 }
94 // ========================================================================
95 private:
96 // ========================================================================
97 typedef std::map<std::string,long> Map;
98 Map m_map ;
99 std::string m_message ;
100 // ========================================================================
101 };
102 // ==========================================================================
108 static Counter s_InstanceCounter ( " Create/Destroy (mis)balance " ) ;
109 // ==========================================================================
115 static Counter s_FinalizeCounter ( " Initialize/Finalize (mis)balance " ) ;
116 // ==========================================================================
117 }
118 // ============================================================================
120 // ============================================================================
121 bool GaudiTool::s_enableSummary = true ; // summary is enabled
122 // ============================================================================
123 // enable/disable summary
124 // ============================================================================
125 bool GaudiTool::enableSummary ( bool value ) // enable/disable summary
126 {
127 s_enableSummary = value ;
128 return summaryEnabled () ;
129 }
130 // ============================================================================
131 // is summary enabled?
132 // ============================================================================
133 bool GaudiTool::summaryEnabled () // is summary enabled?
134 { return s_enableSummary ; }
135 // ============================================================================
136 // Standard constructor
137 // ============================================================================
138 GaudiTool::GaudiTool ( const std::string& this_type ,
139 const std::string& this_name ,
140 const IInterface* parent )
141 : GaudiCommon<AlgTool> ( this_type , this_name , parent )
142 , m_local ( this_type + "/" + this_name )
143 {
144 declareProperty
145 ( "ContextService" ,
146 m_contextSvcName ,
147 "The name of Algorithm Context Service" ) ;
148 // make instance counts
149 GaudiToolLocal::s_InstanceCounter.increment ( m_local ) ;
150 }
151 // ============================================================================
152 // destructor
153 // ============================================================================
154 GaudiTool::~GaudiTool()
155 {
156 GaudiToolLocal::s_InstanceCounter.decrement ( m_local ) ;
157 }
158 // ============================================================================
159 // standard initialization method
160 // ============================================================================
161 StatusCode GaudiTool::initialize ()
162 {
163 // initialize the base class
164 const StatusCode sc = GaudiCommon<AlgTool>::initialize() ;
165 if ( sc.isFailure() ) { return sc; }
166
167 // increment the counter
168 GaudiToolLocal::s_FinalizeCounter.increment( m_local ) ;
169
170 // are we a public tool ?
171 m_isPublic = isPublic();
172
173 // return
174 return sc;
175 }
176 // ============================================================================
177 // standard finalization method
178 // ============================================================================
179 StatusCode GaudiTool::finalize ()
180 {
181 if ( msgLevel(MSG::DEBUG) )
182 debug() << " ==> Finalize the base class GaudiTool " << endmsg;
183
184 // clear "explicit services"
185 m_detSvc = nullptr ;
186 m_chronoSvc = nullptr ;
187 m_incSvc = nullptr ;
188 m_histoSvc = nullptr ;
189
190 // finalize the base class
191 const StatusCode sc = GaudiCommon<AlgTool>::finalize() ;
192 if ( sc.isFailure() ) { return sc; }
193
194 // Decrement the counter
195 GaudiToolLocal::s_FinalizeCounter.decrement( m_local ) ;
196
197 // return
198 return sc;
199 }
200 // ============================================================================
201 // Determines if this tool is public or not (i.e. owned by the ToolSvc).
202 // ============================================================================
203 bool GaudiTool::isPublic() const
204 {
205 const IAlgTool * tool = this;
206 // Recurse down the ownership tree, to see with we ever end up at the ToolSvc
207 bool ownedByToolSvc = false;
208 unsigned int sanityCheck(0);
209 while ( tool && ++sanityCheck < 99999 )
210 {
211 ownedByToolSvc = ( nullptr != dynamic_cast<const IToolSvc*>(tool->parent()) );
212 if ( ownedByToolSvc ) { break; }
213 // if parent is also a tool, try again
214 tool = dynamic_cast<const IAlgTool*>(tool->parent());
215 }
216 return ownedByToolSvc;
217 }
218 // ============================================================================
219 // accessor to detector service
220 // ============================================================================
221 IDataProviderSvc* GaudiTool::detSvc () const
222 {
223 if ( !m_detSvc )
224 {
225 m_detSvc =
226 svc<IDataProviderSvc>( GaudiToolServices::s_DetectorDataSvc , true ) ;
227 }
228 return m_detSvc ;
229 }
230 // ============================================================================
231 // The standard N-Tuple
232 // ============================================================================
233 INTupleSvc* GaudiTool::ntupleSvc () const
234 {
235 if ( !m_ntupleSvc )
236 {
237 m_ntupleSvc = svc<INTupleSvc>( "NTupleSvc" , true ) ;
238 }
239 return m_ntupleSvc ;
240 }
241 // ============================================================================
242 // The standard event collection service
243 // ============================================================================
244 INTupleSvc* GaudiTool::evtColSvc () const
245 {
246 if ( !m_evtColSvc )
247 {
248 m_evtColSvc = svc< INTupleSvc > ( "EvtTupleSvc" , true ) ;
249 }
250 return m_evtColSvc ;
251 }
252 // ============================================================================
253 // accessor to Incident Service
254 // ============================================================================
255 IIncidentSvc* GaudiTool::incSvc () const
256 {
257 if ( !m_incSvc )
258 {
259 m_incSvc =
260 svc<IIncidentSvc> ( GaudiToolServices::s_IncidentSvc , true ) ;
261 }
262 return m_incSvc ;
263 }
264 // ============================================================================
265 // accessor to Chrono & Stat Service
266 // ============================================================================
267 IChronoStatSvc* GaudiTool::chronoSvc () const
268 {
269 if ( !m_chronoSvc )
270 {
271 m_chronoSvc =
272 svc<IChronoStatSvc> ( GaudiToolServices::s_ChronoStatSvc , true ) ;
273 }
274 return m_chronoSvc ;
275 }
276 // ============================================================================
277 // accessor to histogram Service
278 // ============================================================================
279 IHistogramSvc* GaudiTool::histoSvc () const
280 {
281 if ( !m_histoSvc )
282 {
283 m_histoSvc = svc<IHistogramSvc> ( GaudiToolServices::s_HistoSvc, true ) ;
284 }
285 return m_histoSvc;
286 }
287 // ============================================================================
288 // accessor to Algorithm Context Service
289 // ============================================================================
290 IAlgContextSvc* GaudiTool::contextSvc () const
291 {
292 if ( !m_contextSvc )
293 {
294 m_contextSvc = svc<IAlgContextSvc> ( m_contextSvcName , true ) ;
295 }
296 return m_contextSvc;
297 }
298 // ============================================================================
299 // The END
300 // ============================================================================
GaudiTool::chronoSvc
IChronoStatSvc * chronoSvc() const
accessor to Chrono & Stat Service
Definition: GaudiTool.cpp:267
GaudiTool::incSvc
IIncidentSvc * incSvc() const
accessor to Incident Service
Definition: GaudiTool.cpp:255
IToolSvc
The interface implemented by the IToolSvc base class.
Definition: IToolSvc.h:18
GaudiTool::contextSvc
IAlgContextSvc * contextSvc() const
acessor to the Algorithm Context Service
Definition: GaudiTool.cpp:290
GaudiTool::m_contextSvcName
std::string m_contextSvcName
Algorithm Context Service.
Definition: GaudiTool.h:812
GaudiTool.h
Header file for class GaudiAlgorithm.
GaudiTool::m_isPublic
bool m_isPublic
Flag to say if the tool is a public or private tool.
Definition: GaudiTool.h:817
GaudiToolLocal::Counter::counts
long counts(const std::string &object)
current count
Definition: GaudiTool.cpp:78
GaudiTool::m_chronoSvc
IChronoStatSvc * m_chronoSvc
pointer to Chrono & Stat Service
Definition: GaudiTool.h:804
GaudiMP.FdsRegistry.msg
tuple msg
Definition: FdsRegistry.py:8
GaudiToolLocal::Counter::report
void report() const
make a report
Definition: GaudiTool.cpp:80
GaudiTool::histoSvc
IHistogramSvc * histoSvc() const
acessor to the histogram service
Definition: GaudiTool.cpp:279
GaudiToolLocal::Counter::Counter
Counter(std::string msg=" Misbalance ")
Definition: GaudiTool.cpp:65
GaudiAlgorithm.h
MSG::DEBUG
Definition: IMessageSvc.h:18
std::endl
T endl(T...args)
GaudiToolServices::s_ChronoStatSvc
const std::string s_ChronoStatSvc
the default name for Chrono & Stat Service
Definition: GaudiTool.cpp:47
GaudiTool::m_detSvc
IDataProviderSvc * m_detSvc
pointer to Detector Data Service
Definition: GaudiTool.h:802
Bootstrap.h
std
STL namespace.
GaudiTool::enableSummary
static bool enableSummary(bool)
enable/disable summary
Definition: GaudiTool.cpp:125
GaudiCommon::finalize
StatusCode finalize() override
standard finalization method
Definition: GaudiCommon.icpp:280
IDataProviderSvc
Data provider interface definition.
Definition: IDataProviderSvc.h:45
GaudiTool::ntupleSvc
INTupleSvc * ntupleSvc() const
Access the standard N-Tuple.
Definition: GaudiTool.cpp:233
merge_files.sc
int sc
Definition: merge_files.py:167
std::map< std::string, long >
StatusCode::isFailure
bool isFailure() const
Test for a status code of FAILURE.
Definition: StatusCode.h:86
GaudiToolServices::s_IncidentSvc
const std::string s_IncidentSvc
the default name for Incident Service
Definition: GaudiTool.cpp:49
GaudiToolServices
Collection of default services names to be used for class GaudiTool.
std::string
STL class.
INTupleSvc
Definition: INTupleSvc.h:37
IChronoStatSvc
The IChronoStatSvc is the interface implemented by the ChronoStatService.
Definition: IChronoStatSvc.h:33
GaudiToolLocal::Counter::m_map
Map m_map
Definition: GaudiTool.cpp:98
GaudiTool::evtColSvc
INTupleSvc * evtColSvc() const
Access the standard event collection service.
Definition: GaudiTool.cpp:244
GaudiToolLocal::Counter::m_message
std::string m_message
Definition: GaudiTool.cpp:99
GaudiTool::m_contextSvc
IAlgContextSvc * m_contextSvc
Algorithm Context Service.
Definition: GaudiTool.h:810
IDataProviderSvc.h
GaudiToolServices::s_HistoSvc
const std::string s_HistoSvc
the default name for Histogram Service
Definition: GaudiTool.cpp:51
IIncidentSvc.h
StatusCode
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:26
IInterface
Definition of the basic interface.
Definition: IInterface.h:234
GaudiTool::declareProperty
Property * declareProperty(const std::string &name, DataObjectHandle< T > &hndl, const std::string &doc="none") const
Definition: GaudiTool.h:834
GaudiTool::GaudiTool
GaudiTool()=delete
no default/copy constructor, no assignment
GaudiTool::~GaudiTool
~GaudiTool() override
destructor, virtual and protected
Definition: GaudiTool.cpp:154
dump_component_properties.value
list value
Definition: dump_component_properties.py:12
IHistogramSvc
Definition of the IHistogramSvc interface class.
Definition: IHistogramSvc.h:47
GaudiTool::m_histoSvc
IHistogramSvc * m_histoSvc
pointer for histogram service
Definition: GaudiTool.h:808
GaudiTool::isPublic
bool isPublic() const
Determines if this tool is public or not (i.e. owned by the ToolSvc).
Definition: GaudiTool.cpp:203
GaudiToolLocal::Counter::increment
long increment(const std::string &object)
make the increment
Definition: GaudiTool.cpp:74
GaudiToolServices::s_DetectorDataSvc
const std::string s_DetectorDataSvc
the default name for Detector Data Service
Definition: GaudiTool.cpp:45
GaudiCommon.icpp
GaudiCommon::initialize
StatusCode initialize() override
standard initialization method
Definition: GaudiCommon.icpp:186
IAlgTool::parent
virtual const IInterface * parent() const =0
The parent of the concrete AlgTool.
GaudiToolLocal::Counter::Map
std::map< std::string, long > Map
Definition: GaudiTool.cpp:97
IAlgContextSvc.h
GaudiTool::s_enableSummary
static bool s_enableSummary
enable printout of summary?
Definition: GaudiTool.h:827
CommonMessagingBase::debug
MsgStream & debug() const
shortcut for the method msgStream(MSG::DEBUG)
Definition: CommonMessaging.h:127
GaudiTool::m_incSvc
IIncidentSvc * m_incSvc
pointer to Incident Service
Definition: GaudiTool.h:806
GaudiTool::m_ntupleSvc
INTupleSvc * m_ntupleSvc
pointer to the N-Tuple service
Definition: GaudiTool.h:798
GaudiToolLocal::Counter
simple local counter
Definition: GaudiTool.cpp:60
GaudiTool::m_evtColSvc
INTupleSvc * m_evtColSvc
pointer to the event tag collection service
Definition: GaudiTool.h:800
AlgTool
Base class from which all the concrete tool classes should be derived.
Definition: AlgTool.h:45
IAlgTool
The interface implemented by the AlgTool base class.
Definition: IAlgTool.h:23
GaudiTool::finalize
StatusCode finalize() override
standard finalization method
Definition: GaudiTool.cpp:179
GaudiToolLocal
Definition: GaudiTool.cpp:54
GaudiCommon< AlgTool >
GaudiToolServices::s_EventDataSvc
const std::string s_EventDataSvc
the default name for Event Data Service
Definition: GaudiTool.cpp:43
IAlgContextSvc
An abstract interface for Algorithm Context Service.
Definition: IAlgContextSvc.h:23
IChronoStatSvc.h
GaudiTool::m_local
const std::string m_local
full tool name "type/name"
Definition: GaudiTool.h:822
CommonMessagingBase::msgLevel
MSG::Level msgLevel() const
get the output level from the embedded MsgStream
Definition: CommonMessaging.h:136
GaudiToolLocal::Counter::decrement
long decrement(const std::string &object)
make the decrement
Definition: GaudiTool.cpp:76
GaudiCommon< AlgTool >::tool
TOOL * tool(const std::string &type, const std::string &name, const IInterface *parent=0, bool create=true) const
Useful method for the easy location of tools.
std::cout
GaudiTool::summaryEnabled
static bool summaryEnabled()
is summary enabled?
Definition: GaudiTool.cpp:133
endmsg
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:244
IIncidentSvc
The interface implemented by the IncidentSvc service.
Definition: IIncidentSvc.h:21
GaudiTool::initialize
StatusCode initialize() override
standard initialization method
Definition: GaudiTool.cpp:161
GaudiTool::detSvc
IDataProviderSvc * detSvc() const
accessor to detector service
Definition: GaudiTool.cpp:221
GaudiToolLocal::Counter::~Counter
~Counter()
Definition: GaudiTool.cpp:69
INTupleSvc.h
IHistogramSvc.h