ATLAS Offline Software
Loading...
Searching...
No Matches
AthHistogramming Class Reference

#include <AthHistogramming.h>

Inheritance diagram for AthHistogramming:
Collaboration diagram for AthHistogramming:

Public Member Functions

 AthHistogramming (const std::string &name)
 Constructor with parameters:
virtual ~AthHistogramming ()
 Destructor:
const ServiceHandle< ITHistSvc > & histSvc () const
 The standard THistSvc (for writing histograms and TTrees and more to a root file) Returns (kind of) a pointer to the THistSvc.

Protected Member Functions

StatusCode configAthHistogramming (const ServiceHandle< ITHistSvc > &histSvc, const std::string &prefix, const std::string &rootDir, const std::string &histNamePrefix, const std::string &histNamePostfix, const std::string &histTitlePrefix, const std::string &histTitlePostfix)
 To be called by the derived classes to fill the internal configuration.
TH1 * bookGetPointer (const TH1 &hist, const std::string &tDir="", const std::string &stream="")
 Simplify the booking and registering (into THistSvc) of histograms.
TH1 * bookGetPointer (TH1 *hist, const std::string &tDir="", const std::string &stream="")
 Simplify the booking and registering (into THistSvc) of histograms.
TH1 * bookGetPointer (TH1 &histRef, std::string tDir="", std::string stream="")
 Simplify the booking and registering (into THistSvc) of histograms.
StatusCode book (const TH1 &hist, const std::string &tDir="", const std::string &stream="")
 Simplify the booking and registering (into THistSvc) of histograms.
StatusCode book (TH1 *hist, const std::string &tDir="", const std::string &stream="")
 Simplify the booking and registering (into THistSvc) of histograms.
StatusCode book (TH1 &histRef, const std::string &tDir="", const std::string &stream="")
 Simplify the booking and registering (into THistSvc) of histograms.
TH1 * hist (const std::string &histName, const std::string &tDir="", const std::string &stream="")
 Simplify the retrieval of registered histograms of any type.
TH2 * hist2d (const std::string &histName, const std::string &tDir="", const std::string &stream="")
 Simplify the retrieval of registered 2-d histograms.
TH3 * hist3d (const std::string &histName, const std::string &tDir="", const std::string &stream="")
 Simplify the retrieval of registered 3-d histograms.
TTree * bookGetPointer (const TTree &treeRef, std::string tDir="", std::string stream="")
 Simplify the booking and registering (into THistSvc) of TTrees.
StatusCode book (const TTree &treeRef, const std::string &tDir="", const std::string &stream="")
 Simplify the booking and registering (into THistSvc) of TTrees.
TTree * tree (const std::string &treeName, const std::string &tDir="", const std::string &stream="")
 Simplify the retrieval of registered TTrees.
TGraph * bookGetPointer (const TGraph &graphRef, std::string tDir="", std::string stream="")
 Simplify the booking and registering (into THistSvc) of TGraphs.
StatusCode book (const TGraph &graphRef, const std::string &tDir="", const std::string &stream="")
 Simplify the booking and registering (into THistSvc) of TGraphs.
TGraph * graph (const std::string &graphName, const std::string &tDir="", const std::string &stream="")
 Simplify the retrieval of registered TGraphs.
TEfficiency * bookGetPointer (const TEfficiency &eff, const std::string &tDir="", const std::string &stream="")
 Simplify the booking and registering (into THistSvc) of TEfficiency.
TEfficiency * bookGetPointer (TEfficiency *eff, const std::string &tDir="", const std::string &stream="")
 Simplify the booking and registering (into THistSvc) of TEfficiency.
TEfficiency * bookGetPointer (TEfficiency &effRef, std::string tDir="", std::string stream="")
 Simplify the booking and registering (into THistSvc) of TEfficiency.
StatusCode book (const TEfficiency &eff, const std::string &tDir="", const std::string &stream="")
 Simplify the booking and registering (into THistSvc) of TEfficiency.
StatusCode book (TEfficiency *eff, const std::string &tDir="", const std::string &stream="")
 Simplify the booking and registering (into THistSvc) of TEfficiency.
StatusCode book (TEfficiency &effRef, const std::string &tDir="", const std::string &stream="")
 Simplify the booking and registering (into THistSvc) of TEfficiency.
TEfficiency * efficiency (const std::string &effName, const std::string &tDir="", const std::string &stream="")
 Simplify the retrieval of registered TEfficiency.

Private Types

typedef uint32_t hash_t
 typedef for the internal hash
typedef std::map< const hash_t, TH1 * > HistMap_t
 Typedef for convenience.
typedef std::map< const hash_t, TEfficiency * > EffMap_t
 Typedef for convenience.
typedef std::map< const hash_t, TTree * > TreeMap_t
 Typedef for convenience.
typedef std::map< const hash_t, TGraph * > GraphMap_t
 Typedef for convenience.

Private Member Functions

void buildBookingString (std::string &bookingString, std::string &histName, std::string &tDir, std::string &stream, bool usePrefixPostfix=false)
 Method to build individual booking string.
void myReplace (std::string &str, const std::string &oldStr, const std::string &newStr)
 Helper method to replace sub-string.
hash_t hash (const std::string &histName) const
 Method to calculate a 32-bit hash from a string.

Private Attributes

ServiceHandle< ITHistSvc > m_histSvc
 Pointer to the THistSvc (event store by default).
HistMap_t m_histMap
 The map of histogram names to their pointers.
EffMap_t m_effMap
 The map of histogram names to their pointers.
TreeMap_t m_treeMap
 The map of TTree names to their pointers.
GraphMap_t m_graphMap
 The map of TGraph names to their pointers.
std::string m_streamName
 Name of the ROOT output stream (file).
std::string m_rootDir
 Name of the ROOT directory.
std::string m_histNamePrefix
 The prefix for the histogram THx name.
std::string m_histNamePostfix
 The postfix for the histogram THx name.
std::string m_histTitlePrefix
 The prefix for the histogram THx title.
std::string m_histTitlePostfix
 The postfix for the histogram THx title.
std::string m_name
 Instance name.
MsgStream m_msg
 Cached Message Stream.

Detailed Description

Definition at line 38 of file AthHistogramming.h.

Member Typedef Documentation

◆ EffMap_t

typedef std::map< const hash_t, TEfficiency* > AthHistogramming::EffMap_t
private

Typedef for convenience.

Definition at line 207 of file AthHistogramming.h.

◆ GraphMap_t

typedef std::map< const hash_t, TGraph* > AthHistogramming::GraphMap_t
private

Typedef for convenience.

Definition at line 221 of file AthHistogramming.h.

◆ hash_t

typedef uint32_t AthHistogramming::hash_t
private

typedef for the internal hash

Definition at line 171 of file AthHistogramming.h.

◆ HistMap_t

typedef std::map< const hash_t, TH1* > AthHistogramming::HistMap_t
private

Typedef for convenience.

Definition at line 200 of file AthHistogramming.h.

◆ TreeMap_t

typedef std::map< const hash_t, TTree* > AthHistogramming::TreeMap_t
private

Typedef for convenience.

Definition at line 214 of file AthHistogramming.h.

Constructor & Destructor Documentation

◆ AthHistogramming()

AthHistogramming::AthHistogramming ( const std::string & name)

Constructor with parameters:

Definition at line 26 of file AthHistogramming.cxx.

26 :
27 m_histSvc ( "THistSvc/THistSvc", name ),
28 m_streamName(""),
29 m_name ( name ),
31{
32}
ServiceHandle< ITHistSvc > m_histSvc
Pointer to the THistSvc (event store by default).
std::string m_streamName
Name of the ROOT output stream (file).
std::string m_name
Instance name.
MsgStream m_msg
Cached Message Stream.
IMessageSvc * getMessageSvc(bool quiet=false)

◆ ~AthHistogramming()

AthHistogramming::~AthHistogramming ( )
virtual

Destructor:

Definition at line 39 of file AthHistogramming.cxx.

40{
41 //ATH_MSG_DEBUG ("Calling destructor of AthHistogramming");
42 if ( m_msg.level() <= MSG::VERBOSE ) m_msg << MSG::DEBUG << "Calling destructor of AthHistogramming" << endmsg;
43}
#define endmsg

Member Function Documentation

◆ book() [1/8]

StatusCode AthHistogramming::book ( const TEfficiency & eff,
const std::string & tDir = "",
const std::string & stream = "" )
inlineprotected

Simplify the booking and registering (into THistSvc) of TEfficiency.

Definition at line 337 of file AthHistogramming.h.

338{
339 // We need to create a non-const clone
340 TEfficiency* effClone = dynamic_cast< TEfficiency* >( eff.Clone() );
341 if ( !effClone ) {
342 m_msg << MSG::ERROR << "Couldn't create a TEfficiency clone" << endmsg;
343 return StatusCode::FAILURE;
344 }
345 return this->book( *effClone, tDir, stream );
346}
StatusCode book(const TH1 &hist, const std::string &tDir="", const std::string &stream="")
Simplify the booking and registering (into THistSvc) of histograms.

◆ book() [2/8]

StatusCode AthHistogramming::book ( const TGraph & graphRef,
const std::string & tDir = "",
const std::string & stream = "" )
inlineprotected

Simplify the booking and registering (into THistSvc) of TGraphs.

◆ book() [3/8]

StatusCode AthHistogramming::book ( const TH1 & hist,
const std::string & tDir = "",
const std::string & stream = "" )
inlineprotected

Simplify the booking and registering (into THistSvc) of histograms.

Definition at line 305 of file AthHistogramming.h.

306{
307 // We need to create a non-const clone
308 TH1* histClone = dynamic_cast< TH1* >( hist.Clone() );
309 if ( !histClone ) {
310 m_msg << MSG::ERROR << "Couldn't create a TH1 clone" << endmsg;
311 return StatusCode::FAILURE;
312 }
313 return this->book( *histClone, tDir, stream );
314}
TH1 * hist(const std::string &histName, const std::string &tDir="", const std::string &stream="")
Simplify the retrieval of registered histograms of any type.

◆ book() [4/8]

StatusCode AthHistogramming::book ( const TTree & treeRef,
const std::string & tDir = "",
const std::string & stream = "" )
inlineprotected

Simplify the booking and registering (into THistSvc) of TTrees.

Definition at line 405 of file AthHistogramming.h.

406{
407 // Call the other Book method and see if it returns a valid pointer
408 TTree* treePointer = this->bookGetPointer( treeRef, tDir, stream );
409 if ( treePointer )
410 {
411 return StatusCode::SUCCESS;
412 }
413 else
414 {
415 return StatusCode::FAILURE;
416 }
417}
TH1 * bookGetPointer(const TH1 &hist, const std::string &tDir="", const std::string &stream="")
Simplify the booking and registering (into THistSvc) of histograms.

◆ book() [5/8]

StatusCode AthHistogramming::book ( TEfficiency & effRef,
const std::string & tDir = "",
const std::string & stream = "" )
inlineprotected

Simplify the booking and registering (into THistSvc) of TEfficiency.

Definition at line 358 of file AthHistogramming.h.

359{
360 // Call the other Book method and see if it returns a valid pointer
361 TEfficiency* effPointer = this->bookGetPointer( effRef, tDir, stream );
362 if ( !effPointer ) {
363 m_msg << MSG::ERROR << "Couldn't book a TEfficiency" << endmsg;
364 return StatusCode::FAILURE;
365 }
366 return StatusCode::SUCCESS;
367}

◆ book() [6/8]

StatusCode AthHistogramming::book ( TEfficiency * eff,
const std::string & tDir = "",
const std::string & stream = "" )
inlineprotected

Simplify the booking and registering (into THistSvc) of TEfficiency.

Definition at line 348 of file AthHistogramming.h.

349{
350 if ( !eff ) {
351 m_msg << MSG::ERROR << "Got a zero pointer to a TEfficiency" << endmsg;
352 return StatusCode::FAILURE;
353 }
354 return this->book( *eff, tDir, stream );
355}

◆ book() [7/8]

StatusCode AthHistogramming::book ( TH1 & histRef,
const std::string & tDir = "",
const std::string & stream = "" )
inlineprotected

Simplify the booking and registering (into THistSvc) of histograms.

Definition at line 326 of file AthHistogramming.h.

327{
328 // Call the other Book method and see if it returns a valid pointer
329 TH1* histPointer = this->bookGetPointer( histRef, tDir, stream );
330 if ( !histPointer ) {
331 m_msg << MSG::ERROR << "Couldn't book a TH1" << endmsg;
332 return StatusCode::FAILURE;
333 }
334 return StatusCode::SUCCESS;
335}

◆ book() [8/8]

StatusCode AthHistogramming::book ( TH1 * hist,
const std::string & tDir = "",
const std::string & stream = "" )
inlineprotected

Simplify the booking and registering (into THistSvc) of histograms.

Definition at line 316 of file AthHistogramming.h.

317{
318 if ( !hist ) {
319 m_msg << MSG::ERROR << "Got a zero pointer to a TH1" << endmsg;
320 return StatusCode::FAILURE;
321 }
322 return this->book( *hist, tDir, stream );
323}

◆ bookGetPointer() [1/8]

TEfficiency * AthHistogramming::bookGetPointer ( const TEfficiency & eff,
const std::string & tDir = "",
const std::string & stream = "" )
inlineprotected

Simplify the booking and registering (into THistSvc) of TEfficiency.

Definition at line 283 of file AthHistogramming.h.

284{
285 // We need to create a non-const clone
286 TEfficiency* histClone = dynamic_cast< TEfficiency* >( hist.Clone() );
287 if ( !histClone ) {
288 m_msg << MSG::ERROR << "Couldn't create a TEfficiency clone in bookGetPointer" << endmsg;
289 return 0;
290 }
291 return this->bookGetPointer( *histClone, tDir, stream );
292
293}

◆ bookGetPointer() [2/8]

TGraph * AthHistogramming::bookGetPointer ( const TGraph & graphRef,
std::string tDir = "",
std::string stream = "" )
protected

Simplify the booking and registering (into THistSvc) of TGraphs.

Definition at line 388 of file AthHistogramming.cxx.

389{
390 // Get a pointer
391 const TGraph* graphPointer = &graphRef;
392
393 // Check that we got a valid pointer
394 if ( !graphPointer )
395 {
396 m_msg << MSG::WARNING
397 << "We got an invalid TGraph pointer in the BookGetPointer(TGraph*) method of the class" << m_name
398 << "!" << endmsg;
399 return NULL;
400 }
401
402 // Modify the name and title according to the prefixes of this classes instance
403 std::string graphName = graphPointer->GetName();
404 const std::string graphTitle = graphPointer->GetTitle();
405
406 // Check if the hash for this graphName already exists, i.e., if we have a hash collision
407 const hash_t graphHash = this->hash(graphName);
408 GraphMap_t::const_iterator it = m_graphMap.find( graphHash );
409 if ( it != m_graphMap.end() ) // It does exist!
410 {
411 m_msg << MSG::WARNING
412 << "Detected a hash collision. The hash for the TGraph with name=" << graphName
413 << " already exists and points to a TGraph with name=" << it->second->GetName()
414 << " NOT going to book the new histogram and returning a NULL pointer!" << endmsg;
415 return NULL;
416 }
417
418 // Create a clone that has the new name
419 TGraph* graphClone = dynamic_cast< TGraph* >( graphPointer->Clone((m_histNamePrefix+graphName+m_histNamePostfix).c_str()) );
420 if( !graphClone )
421 {
422 m_msg << MSG::WARNING
423 << "We couldn't clone the TGraph in the BookGetPointer(TGraph&) method of the class" << m_name
424 << "!" << endmsg;
425 return NULL;
426 }
427 graphClone->SetTitle ((m_histTitlePrefix+graphTitle+m_histTitlePostfix).c_str());
428
429 // Massage the final string to book things
430 std::string bookingString("");
431 this->buildBookingString( bookingString, graphName, tDir, stream );
432
433 // Register the TGraph into the THistSvc
434 if ( !((histSvc()->regGraph(bookingString, graphClone)).isSuccess()) )
435 {
436 m_msg << MSG::WARNING
437 << "Problem registering TGraph with name " << graphName
438 << ", title " << graphTitle
439 << " in " << m_name << "!" << endmsg;
440 return NULL;
441 }
442
443 // Also register it in the local map of string to pointer
444 m_graphMap.insert( m_graphMap.end(), std::pair< const hash_t, TGraph* >( graphHash, graphClone ) );
445
446 return graphClone;
447}
const ServiceHandle< ITHistSvc > & histSvc() const
The standard THistSvc (for writing histograms and TTrees and more to a root file) Returns (kind of) a...
std::string m_histNamePostfix
The postfix for the histogram THx name.
hash_t hash(const std::string &histName) const
Method to calculate a 32-bit hash from a string.
uint32_t hash_t
typedef for the internal hash
std::string m_histTitlePostfix
The postfix for the histogram THx title.
std::string m_histTitlePrefix
The prefix for the histogram THx title.
void buildBookingString(std::string &bookingString, std::string &histName, std::string &tDir, std::string &stream, bool usePrefixPostfix=false)
Method to build individual booking string.
std::string m_histNamePrefix
The prefix for the histogram THx name.
GraphMap_t m_graphMap
The map of TGraph names to their pointers.

◆ bookGetPointer() [3/8]

TH1 * AthHistogramming::bookGetPointer ( const TH1 & hist,
const std::string & tDir = "",
const std::string & stream = "" )
inlineprotected

Simplify the booking and registering (into THistSvc) of histograms.

Definition at line 262 of file AthHistogramming.h.

263{
264 // We need to create a non-const clone
265 TH1* histClone = dynamic_cast< TH1* >( hist.Clone() );
266 if ( !histClone ) {
267 m_msg << MSG::ERROR << "Couldn't create a TH1 clone in bookGetPointer" << endmsg;
268 return 0;
269 }
270 return this->bookGetPointer( *histClone, tDir, stream );
271
272}

◆ bookGetPointer() [4/8]

TTree * AthHistogramming::bookGetPointer ( const TTree & treeRef,
std::string tDir = "",
std::string stream = "" )
protected

Simplify the booking and registering (into THistSvc) of TTrees.

Definition at line 273 of file AthHistogramming.cxx.

274{
275 // Get a pointer
276 const TTree* treePointer = &treeRef;
277
278 // Check that we got a valid pointer
279 if ( !treePointer )
280 {
281 m_msg << MSG::WARNING
282 << "We got an invalid TTree pointer in the BookGetPointer(TTree*) method of the class" << m_name
283 << "!" << endmsg;
284 return NULL;
285 }
286
287 // Modify the name and title according to the prefixes of this classes instance
288 std::string treeName = treePointer->GetName();
289 const std::string treeTitle = treePointer->GetTitle();
290
291 // Check if the hash for this treeName already exists, i.e., if we have a hash collision
292 const hash_t treeHash = this->hash(treeName);
293 TreeMap_t::const_iterator it = m_treeMap.find( treeHash );
294 if ( it != m_treeMap.end() ) // It does exist!
295 {
296 m_msg << MSG::WARNING
297 << "Detected a hash collision. The hash for the TTree with name=" << treeName
298 << " already exists and points to a TTree with name=" << it->second->GetName()
299 << " NOT going to book the new histogram and returning a NULL pointer!" << endmsg;
300 return NULL;
301 }
302
303 // Create a clone that has the new name
304 TTree* treeClone = dynamic_cast< TTree* >( treePointer->Clone(treeName.c_str()) );
305 if( !treeClone )
306 {
307 m_msg << MSG::WARNING
308 << "We couldn't clone the TTree in the BookGetPointer(TTree&) method of the class" << m_name
309 << "!" << endmsg;
310 return NULL;
311 }
312 treeClone->SetTitle (treeTitle.c_str());
313
314 // Massage the final string to book things
315 std::string bookingString("");
316 this->buildBookingString( bookingString, treeName, tDir, stream );
317
318 // Register the TTree into the THistSvc
319 if ( !((histSvc()->regTree(bookingString, treeClone)).isSuccess()) )
320 {
321 m_msg << MSG::WARNING
322 << "Problem registering TTree with name " << treeName
323 << ", title " << treeTitle
324 << " in " << m_name << "!" << endmsg;
325 return NULL;
326 }
327
328 // Also register it in the local map of string to pointer
329 m_treeMap.insert( m_treeMap.end(), std::pair< const hash_t, TTree* >( treeHash, treeClone ) );
330
331 return treeClone;
332}
TreeMap_t m_treeMap
The map of TTree names to their pointers.

◆ bookGetPointer() [5/8]

TEfficiency * AthHistogramming::bookGetPointer ( TEfficiency & effRef,
std::string tDir = "",
std::string stream = "" )
protected

Simplify the booking and registering (into THistSvc) of TEfficiency.

Definition at line 123 of file AthHistogramming.cxx.

124{
125 std::string effName(effRef.GetName());
126 const std::string effTitle(effRef.GetTitle());
127 std::string bookingString;
128 this->buildBookingString(bookingString, effName, tDir, stream);
129 const std::string finalEffName = m_histNamePrefix + effName + m_histNamePostfix;
130 effRef.SetTitle((m_histTitlePrefix + effTitle + m_histTitlePostfix).c_str());
131 effRef.SetName(finalEffName.c_str());
132
133 const hash_t effHash = this->hash(effName);
134 EffMap_t::const_iterator it = m_effMap.find(effHash);
135 if (it != m_effMap.end()) {
136 m_msg << MSG::WARNING
137 << "Detected a hash collision. The hash for the TEfficiency with name=" << effName
138 << " already exists and points to a TEfficiency with name=" << it->second->GetName()
139 << " NOT going to book the new TEfficiency and returning a NULL pointer!" << endmsg;
140 return nullptr;
141 }
142
143 if (!histSvc()->regEfficiency(bookingString, &effRef).isSuccess()) {
144 m_msg << MSG::WARNING
145 << "Problem registering TEfficiency with name " << effName
146 << ", name prefix " << m_histNamePrefix
147 << ", title " << effTitle
148 << ", title prefix " << m_histTitlePrefix
149 << ", and title postfix " << m_histTitlePostfix
150 << " in " << m_name << "!" << endmsg;
151 return nullptr;
152 }
153
154 m_effMap.insert(m_effMap.end(), std::pair<const hash_t, TEfficiency*>(effHash, &effRef));
155
156 return &effRef;
157}
EffMap_t m_effMap
The map of histogram names to their pointers.

◆ bookGetPointer() [6/8]

TEfficiency * AthHistogramming::bookGetPointer ( TEfficiency * eff,
const std::string & tDir = "",
const std::string & stream = "" )
inlineprotected

Simplify the booking and registering (into THistSvc) of TEfficiency.

Definition at line 295 of file AthHistogramming.h.

296{
297 if ( !hist ) {
298 m_msg << MSG::ERROR << "Got a zero pointer to a TEfficiency in bookGetPointer" << endmsg;
299 return 0;
300 }
301 return this->bookGetPointer( *hist, tDir, stream );
302}

◆ bookGetPointer() [7/8]

TH1 * AthHistogramming::bookGetPointer ( TH1 & histRef,
std::string tDir = "",
std::string stream = "" )
protected

Simplify the booking and registering (into THistSvc) of histograms.

Definition at line 83 of file AthHistogramming.cxx.

84{
85 std::string histName(histRef.GetName());
86 const std::string histTitle(histRef.GetTitle());
87 std::string bookingString;
88
89 this->buildBookingString(bookingString, histName, tDir, stream);
90
91 const std::string finalHistName = m_histNamePrefix + histName + m_histNamePostfix;
92
93 histRef.SetTitle((m_histTitlePrefix + histTitle + m_histTitlePostfix).c_str());
94 histRef.SetName(finalHistName.c_str());
95
96 const hash_t histHash = this->hash(histName);
97 HistMap_t::const_iterator it = m_histMap.find(histHash);
98 if (it != m_histMap.end()) {
99 m_msg << MSG::WARNING
100 << "Detected a hash collision. The hash for the histogram with name=" << histName
101 << " already exists and points to a histogram with name=" << it->second->GetName()
102 << " NOT going to book the new histogram and returning a NULL pointer!" << endmsg;
103 return nullptr;
104 }
105
106 if (!histSvc()->regHist(bookingString, &histRef).isSuccess()) {
107 m_msg << MSG::WARNING
108 << "Problem registering histogram with name " << histName
109 << ", name prefix " << m_histNamePrefix
110 << ", title " << histTitle
111 << ", title prefix " << m_histTitlePrefix
112 << ", and title postfix " << m_histTitlePostfix
113 << " in " << m_name << "!" << endmsg;
114 return nullptr;
115 }
116
117 m_histMap.insert(m_histMap.end(), std::pair<const hash_t, TH1*>(histHash, &histRef));
118
119 return &histRef;
120}
HistMap_t m_histMap
The map of histogram names to their pointers.

◆ bookGetPointer() [8/8]

TH1 * AthHistogramming::bookGetPointer ( TH1 * hist,
const std::string & tDir = "",
const std::string & stream = "" )
inlineprotected

Simplify the booking and registering (into THistSvc) of histograms.

Definition at line 274 of file AthHistogramming.h.

275{
276 if ( !hist ) {
277 m_msg << MSG::ERROR << "Got a zero pointer to a TH1 in bookGetPointer" << endmsg;
278 return 0;
279 }
280 return this->bookGetPointer( *hist, tDir, stream );
281}

◆ buildBookingString()

void AthHistogramming::buildBookingString ( std::string & bookingString,
std::string & histName,
std::string & tDir,
std::string & stream,
bool usePrefixPostfix = false )
private

Method to build individual booking string.

Definition at line 521 of file AthHistogramming.cxx.

526{
527 // Massage the final string to book things
528 if(tDir.empty()) tDir = m_rootDir;
529 size_t pos = histName.rfind('/');
530 if(pos != std::string::npos){
531 tDir+='/';
532 tDir.append(histName, 0,pos);
533 histName.erase(0,pos+1);
534 };
535 if(stream.empty()) stream = m_streamName;
536
537 if(usePrefixPostfix){
538 bookingString = "/"+stream+"/"+tDir+"/"+m_histNamePrefix+histName+m_histNamePostfix;
539 } else {
540 bookingString = "/"+stream+"/"+tDir+"/"+histName;
541 }
542 while(bookingString.find("//") != std::string::npos){
543 this->myReplace(bookingString,"//","/");
544 }
545
546 return;
547}
std::string m_rootDir
Name of the ROOT directory.
void myReplace(std::string &str, const std::string &oldStr, const std::string &newStr)
Helper method to replace sub-string.

◆ configAthHistogramming()

StatusCode AthHistogramming::configAthHistogramming ( const ServiceHandle< ITHistSvc > & histSvc,
const std::string & prefix,
const std::string & rootDir,
const std::string & histNamePrefix,
const std::string & histNamePostfix,
const std::string & histTitlePrefix,
const std::string & histTitlePostfix )
protected

To be called by the derived classes to fill the internal configuration.

Definition at line 51 of file AthHistogramming.cxx.

55{
58 m_rootDir = rootDir;
59 m_histNamePrefix = histNamePrefix;
60 m_histNamePostfix = histNamePostfix;
61 m_histTitlePrefix = histTitlePrefix;
62 m_histTitlePostfix = histTitlePostfix;
63
64 return StatusCode::SUCCESS;
65}

◆ efficiency()

TEfficiency * AthHistogramming::efficiency ( const std::string & effName,
const std::string & tDir = "",
const std::string & stream = "" )
protected

Simplify the retrieval of registered TEfficiency.

Definition at line 211 of file AthHistogramming.cxx.

212{
213 // Build a 32 bit hash out of the name
214 const hash_t effHash = this->hash(effName);
215
216 // See if this entry exists in the map
217 EffMap_t::const_iterator it = m_effMap.find( effHash );
218 if ( it == m_effMap.end() ) // It doesn't exist!
219 { // Let's see into the THistSvc if somebody else has registered the TEfficiency...
220
221 // Need to copy the strings as we will massage them from here on
222 std::string effNameCopy = effName;
223 std::string tDirCopy = tDir;
224 std::string streamCopy = stream;
225
226 // Massage the final string to book things
227 std::string bookingString("");
228 this->buildBookingString( bookingString, effNameCopy, tDirCopy, streamCopy ,false);
229
230 TEfficiency* effPointer(NULL);
231 if ( !((histSvc()->getEfficiency(bookingString, effPointer)).isSuccess()) )
232 {
233 // Massage the final string to book things
234 std::string bookingString("");
235 this->buildBookingString( bookingString, effNameCopy, tDirCopy, streamCopy, true );
236
237 if ( !((histSvc()->getEfficiency(bookingString, effPointer)).isSuccess()) )
238 {
239 m_msg << MSG::WARNING
240 << "Problem retrieving the TEfficiency with name (including pre- and post-fixes) "
241 << m_histNamePrefix + effNameCopy + m_histNamePostfix
242 << " or with name " << effNameCopy
243 << " in " << m_name << "... it doesn't exist, neither in the cached map nor in the THistSvc!"
244 << " Will return an NULL pointer... you have to handle it correctly!" << endmsg;
245 return NULL;
246 }
247 // If we get to here, we actually found the TEfficiency in the THistSvc.
248 // So let's add it to the local cache map and return its pointer
249 m_effMap.insert( m_effMap.end(), std::pair< const hash_t, TEfficiency* >( effHash, effPointer ) );
250 return effPointer;
251 }
252 // If we get to here, we actually found the TEfficiency in the THistSvc.
253 // So let's add it to the local cache map and return its pointer
254 m_effMap.insert( m_effMap.end(), std::pair< const hash_t, TEfficiency* >( effHash, effPointer ) );
255 return effPointer;
256 }
257
258 // Return the pointer to the TEfficiency that we got from the local cache map
259 return it->second;
260}
std::pair< StatusCode, TEfficiency * > getEfficiency(ITHistSvc &svc, const std::string &name)

◆ graph()

TGraph * AthHistogramming::graph ( const std::string & graphName,
const std::string & tDir = "",
const std::string & stream = "" )
protected

Simplify the retrieval of registered TGraphs.

Definition at line 453 of file AthHistogramming.cxx.

454{
455 // Build a 32 bit hash out of the name
456 const hash_t graphHash = this->hash(graphName);
457
458 // See if this entry exists in the map
459 GraphMap_t::const_iterator it = m_graphMap.find( graphHash );
460 if ( it == m_graphMap.end() ) // It doesn't exist!
461 { // Let's see into the THistSvc if somebody else has registered the TGraph...
462
463 // Need to copy the strings as we will massage them from here on
464 std::string graphNameCopy = graphName;
465 std::string tDirCopy = tDir;
466 std::string streamCopy = stream;
467
468 // Massage the final string to book things
469 std::string bookingString("");
470 this->buildBookingString( bookingString, graphNameCopy, tDirCopy, streamCopy, false);
471
472 TGraph* graphPointer(nullptr);
473 if ( !((histSvc()->getGraph(bookingString, graphPointer)).isSuccess()) )
474 {
475 // Massage the final string to book things
476 std::string bookingString("");
477 this->buildBookingString( bookingString, graphNameCopy, tDirCopy, streamCopy, true );
478
479 if ( !((histSvc()->getGraph(bookingString, graphPointer)).isSuccess()) )
480 {
481 m_msg << MSG::WARNING
482 << "Problem retrieving the TGraph with name (including pre- and post-fixes) "
483 << m_histNamePrefix + graphNameCopy + m_histNamePostfix
484 << " or with name " << graphNameCopy
485 << " in " << m_name << "... it doesn't exist, neither in the cached map nor in the THistSvc!"
486 << " Will return an NULL pointer... you have to handle it correctly!" << endmsg;
487 return nullptr;
488 }
489 // If we get to here, we actually found the TGraph in the THistSvc.
490 // So let's add it to the local cache map and return its pointer
491 m_graphMap.insert( m_graphMap.end(), std::pair< const hash_t, TGraph* >( graphHash, graphPointer ) );
492 return graphPointer;
493 }
494 // If we get to here, we actually found the TGraph in the THistSvc.
495 // So let's add it to the local cache map and return its pointer
496 m_graphMap.insert( m_graphMap.end(), std::pair< const hash_t, TGraph* >( graphHash, graphPointer ) );
497 return graphPointer;
498 }
499
500
501 // Return the pointer to the TGraph that we got from the local cache map
502 return it->second;
503}
std::pair< StatusCode, TGraph * > getGraph(ITHistSvc &svc, const std::string &name)

◆ hash()

AthHistogramming::hash_t AthHistogramming::hash ( const std::string & histName) const
inlineprivate

Method to calculate a 32-bit hash from a string.

Definition at line 430 of file AthHistogramming.h.

431{
432 const uint64_t hash64 = CxxUtils::crc64( histName );
433 return (hash_t)(hash64 & 0xFFFFFFFF);
434}
uint64_t crc64(const CRCTable &table, const char *data, size_t data_len)
Find the CRC-64 of a string,.
Definition crc64.cxx:696
std::uint64_t hash64(const void *data, std::size_t size)
Passthrough to XXH3_64bits.
Definition XXH.cxx:9

◆ hist()

TH1 * AthHistogramming::hist ( const std::string & histName,
const std::string & tDir = "",
const std::string & stream = "" )
protected

Simplify the retrieval of registered histograms of any type.

Definition at line 164 of file AthHistogramming.cxx.

167{
168 std::string histNameCopy = histName;
169 std::string tDirCopy = tDir;
170 std::string streamCopy = stream;
171
172 std::string bookingString;
173 this->buildBookingString(bookingString, histNameCopy, tDirCopy, streamCopy, false);
174
175 const hash_t histHash = this->hash(histNameCopy);
176
177 HistMap_t::const_iterator it = m_histMap.find(histHash);
178 if (it == m_histMap.end()) {
179 TH1* histPointer(nullptr);
180
181 if (!histSvc()->getHist(bookingString, histPointer).isSuccess()) {
182 std::string prefixedHistNameCopy = histName;
183 std::string prefixedTDirCopy = tDir;
184 std::string prefixedStreamCopy = stream;
185
186 std::string prefixedBookingString;
187 this->buildBookingString(prefixedBookingString,
188 prefixedHistNameCopy,
189 prefixedTDirCopy,
190 prefixedStreamCopy,
191 true);
192
193 if (!histSvc()->getHist(prefixedBookingString, histPointer).isSuccess()) {
194 m_msg << MSG::WARNING
195 << "Problem retrieving the histogram with name (including pre- and post-fixes) "
196 << m_histNamePrefix + histNameCopy + m_histNamePostfix
197 << " or with name " << histNameCopy
198 << " in " << m_name << "... it doesn't exist, neither in the cached map nor in the THistSvc!"
199 << " Will return an NULL pointer... you have to handle it correctly!" << endmsg;
200 return nullptr;
201 }
202 }
203
204 m_histMap.insert(m_histMap.end(), std::pair<const hash_t, TH1*>(histHash, histPointer));
205 return histPointer;
206 }
207
208 return it->second;
209}
std::pair< StatusCode, TH1 * > getHist(ITHistSvc &svc, const std::string &name, size_t index=0)

◆ hist2d()

TH2 * AthHistogramming::hist2d ( const std::string & histName,
const std::string & tDir = "",
const std::string & stream = "" )
inlineprotected

Simplify the retrieval of registered 2-d histograms.

Definition at line 371 of file AthHistogramming.h.

372{
373 // Get the TH1 pointer
374 TH1* th1Pointer = this->hist(histName, tDir, stream);
375 if ( !th1Pointer )
376 {
377 m_msg << MSG::ERROR
378 << "Cannot get a 2-d histogram with name " << histName
379 << "... will probably seg-fault!" << endmsg;
380 return NULL;
381 }
382 // If the TH1 pointer is valid, simply return the dynamic_cast
383 return dynamic_cast<TH2*>( th1Pointer );
384}

◆ hist3d()

TH3 * AthHistogramming::hist3d ( const std::string & histName,
const std::string & tDir = "",
const std::string & stream = "" )
inlineprotected

Simplify the retrieval of registered 3-d histograms.

Definition at line 388 of file AthHistogramming.h.

389{
390 // Get the TH1 pointer
391 TH1* th1Pointer = this->hist(histName, tDir, stream);
392 if ( !th1Pointer )
393 {
394 m_msg << MSG::ERROR
395 << "Cannot get a 3-d histogram with name " << histName
396 << "... will probably seg-fault!" << endmsg;
397 return NULL;
398 }
399 // If the TH1 pointer is valid, simply return the dynamic_cast
400 return dynamic_cast<TH3*>( th1Pointer );
401}

◆ histSvc()

const ServiceHandle< ITHistSvc > & AthHistogramming::histSvc ( ) const
inline

The standard THistSvc (for writing histograms and TTrees and more to a root file) Returns (kind of) a pointer to the THistSvc.

Definition at line 423 of file AthHistogramming.h.

424{
425 return m_histSvc;
426}

◆ myReplace()

void AthHistogramming::myReplace ( std::string & str,
const std::string & oldStr,
const std::string & newStr )
private

Helper method to replace sub-string.

Definition at line 551 of file AthHistogramming.cxx.

554{
555 size_t pos = 0;
556 while((pos = str.find(oldStr, pos)) != std::string::npos)
557 {
558 str.replace(pos, oldStr.length(), newStr);
559 pos += newStr.length();
560 }
561}

◆ tree()

TTree * AthHistogramming::tree ( const std::string & treeName,
const std::string & tDir = "",
const std::string & stream = "" )
protected

Simplify the retrieval of registered TTrees.

Definition at line 339 of file AthHistogramming.cxx.

340{
341 // Build a 32 bit hash out of the name
342 const hash_t treeHash = this->hash(treeName);
343
344 // See if this entry exists in the map
345 TreeMap_t::const_iterator it = m_treeMap.find( treeHash );
346 if ( it == m_treeMap.end() ) // It doesn't exist!
347 { // Let's see into the THistSvc if somebody else has registered the TTree...
348
349 // Need to copy the strings as we will massage them from here on
350 std::string treeNameCopy = treeName;
351 std::string tDirCopy = tDir;
352 std::string streamCopy = stream;
353
354 // Massage the final string to book things
355 std::string bookingString("");
356 this->buildBookingString( bookingString, treeNameCopy, tDirCopy, streamCopy );
357
358 TTree* treePointer(NULL);
359 if ( !((histSvc()->getTree(bookingString, treePointer)).isSuccess()) )
360 {
361 m_msg << MSG::WARNING
362 << "Problem retrieving the TTree with name " << treeNameCopy
363 << " in " << m_name << "... it doesn't exist, neither in the cached map nor in the THistSvc!"
364 << " Will return an NULL pointer... you have to handle it correctly!" << endmsg;
365 return NULL;
366 }
367 // If we get to here, we actually found the TTree in the THistSvc.
368 // So let's add it to the local cache map and return its pointer
369 m_treeMap.insert( m_treeMap.end(), std::pair< const hash_t, TTree* >( treeHash, treePointer ) );
370 return treePointer;
371 }
372
373 // Return the pointer to the TTree that we got from the local cache map
374 return it->second;
375}
std::pair< StatusCode, TTree * > getTree(ITHistSvc &svc, const std::string &name)

Member Data Documentation

◆ m_effMap

EffMap_t AthHistogramming::m_effMap
private

The map of histogram names to their pointers.

Definition at line 210 of file AthHistogramming.h.

◆ m_graphMap

GraphMap_t AthHistogramming::m_graphMap
private

The map of TGraph names to their pointers.

Definition at line 224 of file AthHistogramming.h.

◆ m_histMap

HistMap_t AthHistogramming::m_histMap
private

The map of histogram names to their pointers.

Definition at line 203 of file AthHistogramming.h.

◆ m_histNamePostfix

std::string AthHistogramming::m_histNamePostfix
private

The postfix for the histogram THx name.

Definition at line 237 of file AthHistogramming.h.

◆ m_histNamePrefix

std::string AthHistogramming::m_histNamePrefix
private

The prefix for the histogram THx name.

Definition at line 234 of file AthHistogramming.h.

◆ m_histSvc

ServiceHandle<ITHistSvc> AthHistogramming::m_histSvc
private

Pointer to the THistSvc (event store by default).

Definition at line 196 of file AthHistogramming.h.

◆ m_histTitlePostfix

std::string AthHistogramming::m_histTitlePostfix
private

The postfix for the histogram THx title.

Definition at line 243 of file AthHistogramming.h.

◆ m_histTitlePrefix

std::string AthHistogramming::m_histTitlePrefix
private

The prefix for the histogram THx title.

Definition at line 240 of file AthHistogramming.h.

◆ m_msg

MsgStream AthHistogramming::m_msg
private

Cached Message Stream.

Definition at line 250 of file AthHistogramming.h.

◆ m_name

std::string AthHistogramming::m_name
private

Instance name.

Definition at line 247 of file AthHistogramming.h.

◆ m_rootDir

std::string AthHistogramming::m_rootDir
private

Name of the ROOT directory.

Definition at line 231 of file AthHistogramming.h.

◆ m_streamName

std::string AthHistogramming::m_streamName
private

Name of the ROOT output stream (file).

Definition at line 228 of file AthHistogramming.h.

◆ m_treeMap

TreeMap_t AthHistogramming::m_treeMap
private

The map of TTree names to their pointers.

Definition at line 217 of file AthHistogramming.h.


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