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

Almost-a-struct for holding the single histogram definition. More...

#include <SingleHistogramDefinition.h>

Collaboration diagram for SingleHistogramDefinition:

Public Types

typedef const std::string & Titles_t
typedef const unsigned int NBins_t
typedef const float Var_t

Public Member Functions

 SingleHistogramDefinition ()
 SingleHistogramDefinition (Titles_t name, Titles_t histoType, Titles_t title, NBins_t nbinsX, Var_t xLo, Var_t xHi, Titles_t xName, Titles_t yName, Titles_t theFolder="")
 C'tor for 1D histograms (no Y bins or limits)
 SingleHistogramDefinition (Titles_t name, Titles_t histoType, Titles_t title, NBins_t nbinsX, NBins_t nbinsY, Var_t xLo, Var_t xHi, Var_t yLo, Var_t yHi, Titles_t xName, Titles_t yName, Titles_t theFolder="")
 C'tor for 2D histograms (Y bins and limits)
 SingleHistogramDefinition (Titles_t name, Titles_t histoType, Titles_t title, NBins_t nbinsX, NBins_t nbinsY, NBins_t nbinsZ, Var_t xLo, Var_t xHi, Var_t yLo, Var_t yHi, Var_t zLo, Var_t zHi, Titles_t xName, Titles_t yName, Titles_t zName, Titles_t theFolder="")
 C'tor for 3D histograms (Y,Z bins and limits)
bool empty () const
 Is the histogram definition empty?
std::string str () const
 String representation of the histogram definition.
bool validType () const
 Does the histogram definition have a valid type (TH1, TH2 etc)?
bool isValid () const
 Is the histogram definition valid.
std::string stringIndex () const
 add the folder path to produce the full histogram name e.g. myFolder/myHisto
std::string titleDigest () const
 produce single-line representation of the titles (titles separated by the ';' delimiter)

Static Public Member Functions

static std::string stringIndex (const std::string &thisname, const std::string &thisfolder)
 concatenate a sanitised folderName with the histogram name

Public Attributes

std::string name
std::string histoType
std::string title
unsigned int nBinsX
unsigned int nBinsY
unsigned int nBinsZ
IHistogramDefinitionSvc::axesLimits_t xAxis
IHistogramDefinitionSvc::axesLimits_t yAxis
IHistogramDefinitionSvc::axesLimits_t zAxis
std::string xTitle
std::string yTitle
std::string zTitle
std::string allTitles
std::string folder
bool m_empty

Detailed Description

Almost-a-struct for holding the single histogram definition.

Definition at line 17 of file SingleHistogramDefinition.h.

Member Typedef Documentation

◆ NBins_t

typedef const unsigned int SingleHistogramDefinition::NBins_t

Definition at line 20 of file SingleHistogramDefinition.h.

◆ Titles_t

typedef const std::string& SingleHistogramDefinition::Titles_t

Definition at line 19 of file SingleHistogramDefinition.h.

◆ Var_t

typedef const float SingleHistogramDefinition::Var_t

Definition at line 21 of file SingleHistogramDefinition.h.

Constructor & Destructor Documentation

◆ SingleHistogramDefinition() [1/4]

SingleHistogramDefinition::SingleHistogramDefinition ( )

Definition at line 15 of file SingleHistogramDefinition.cxx.

15 :
16 name{},
17 histoType{},
18 title{},
19 nBinsX{},
20 nBinsY{},
21 nBinsZ{},
22 xAxis(std::make_pair(std::numeric_limits<float>::quiet_NaN(), std::numeric_limits<float>::quiet_NaN())),
23 yAxis(std::make_pair(std::numeric_limits<float>::quiet_NaN(), std::numeric_limits<float>::quiet_NaN())),
24 zAxis(std::make_pair(std::numeric_limits<float>::quiet_NaN(), std::numeric_limits<float>::quiet_NaN())),
25 xTitle{},
26 yTitle{},
27 zTitle{},
28 allTitles{},
29 folder{},
30 m_empty(true) {
31}
IHistogramDefinitionSvc::axesLimits_t zAxis
IHistogramDefinitionSvc::axesLimits_t xAxis
IHistogramDefinitionSvc::axesLimits_t yAxis

◆ SingleHistogramDefinition() [2/4]

SingleHistogramDefinition::SingleHistogramDefinition ( Titles_t name,
Titles_t histoType,
Titles_t title,
NBins_t nbinsX,
Var_t xLo,
Var_t xHi,
Titles_t xName,
Titles_t yName,
Titles_t theFolder = "" )

C'tor for 1D histograms (no Y bins or limits)

Definition at line 33 of file SingleHistogramDefinition.cxx.

37 :
38 name(thename), histoType(thehistoType), title(thetitle),
39 nBinsX(nbinsX), nBinsY(0), nBinsZ(0),
40 xAxis(xLo, xHi),
41 yAxis(std::numeric_limits<float>::quiet_NaN(), std::numeric_limits<float>::quiet_NaN()),
42 zAxis(std::numeric_limits<float>::quiet_NaN(), std::numeric_limits<float>::quiet_NaN()),
43 xTitle(xName), yTitle(yName), zTitle(""),
44 folder(thefolder), m_empty(false) {
45
47}
std::string titleDigest() const
produce single-line representation of the titles (titles separated by the ';' delimiter)

◆ SingleHistogramDefinition() [3/4]

SingleHistogramDefinition::SingleHistogramDefinition ( Titles_t name,
Titles_t histoType,
Titles_t title,
NBins_t nbinsX,
NBins_t nbinsY,
Var_t xLo,
Var_t xHi,
Var_t yLo,
Var_t yHi,
Titles_t xName,
Titles_t yName,
Titles_t theFolder = "" )

C'tor for 2D histograms (Y bins and limits)

Definition at line 49 of file SingleHistogramDefinition.cxx.

52 :
53 name(thename), histoType(thehistoType), title(thetitle),
54 nBinsX(nbinsX), nBinsY(nbinsY), nBinsZ(0),
55 xAxis(xLo, xHi),
56 yAxis(yLo, yHi),
57 zAxis(std::numeric_limits<float>::quiet_NaN(), std::numeric_limits<float>::quiet_NaN()),
58 xTitle(xName), yTitle(yName), zTitle(""),
59 folder(thefolder), m_empty(false) {
60 // should do sanity checks here
61
63}

◆ SingleHistogramDefinition() [4/4]

SingleHistogramDefinition::SingleHistogramDefinition ( Titles_t name,
Titles_t histoType,
Titles_t title,
NBins_t nbinsX,
NBins_t nbinsY,
NBins_t nbinsZ,
Var_t xLo,
Var_t xHi,
Var_t yLo,
Var_t yHi,
Var_t zLo,
Var_t zHi,
Titles_t xName,
Titles_t yName,
Titles_t zName,
Titles_t theFolder = "" )

C'tor for 3D histograms (Y,Z bins and limits)

Definition at line 65 of file SingleHistogramDefinition.cxx.

68 :
69 name(thename), histoType(thehistoType), title(thetitle),
70 nBinsX(nbinsX), nBinsY(nbinsY), nBinsZ(nbinsZ),
71 xAxis(xLo, xHi),
72 yAxis(yLo, yHi),
73 zAxis(zLo, zHi),
74 xTitle(xName), yTitle(yName), zTitle(zName),
75 folder(thefolder), m_empty(false) {
76 // should do sanity checks here
77
79}

Member Function Documentation

◆ empty()

bool SingleHistogramDefinition::empty ( ) const

Is the histogram definition empty?

Definition at line 82 of file SingleHistogramDefinition.cxx.

82 {
83 return m_empty;
84}

◆ isValid()

bool SingleHistogramDefinition::isValid ( ) const

Is the histogram definition valid.

Definition at line 104 of file SingleHistogramDefinition.cxx.

104 {
105 if (name.empty() or histoType.empty()) {
106 return false;
107 }
108 bool sane(true);
109 // note: if yaxis is left undefined, the limits should be NaN, but (NaN != NaN) is always true
110 const bool sensibleLimits = (xAxis.first != xAxis.second)and(yAxis.first != yAxis.second)and(zAxis.first != zAxis.second);
111 const bool sensibleXBins = (nBinsX != 0);
112 const bool sensibleYBins = (nBinsY != 0);
113 const bool sensibleZBins = (nBinsZ != 0);
114 const bool sensibleTitles = not (title.empty() or xTitle.empty());
115 sane = (sensibleLimits and sensibleXBins and sensibleTitles);
116 if (histoType.substr(0, 3) == "TH2") {
117 sane = (sane and sensibleYBins);
118 }
119 if (histoType.substr(0, 3) == "TH3") {
120 sane = (sane and sensibleYBins and sensibleZBins);
121 }
122 return sane;
123}

◆ str()

std::string SingleHistogramDefinition::str ( ) const

String representation of the histogram definition.

Definition at line 87 of file SingleHistogramDefinition.cxx.

87 {
88 return std::format("{} {} {} {} {} {} {:f} {:f} {:f} {:f} {:f} {:f} {} {} {}",
90 xAxis.first, xAxis.second,
91 yAxis.first, yAxis.second,
92 zAxis.first, zAxis.second,
94}

◆ stringIndex() [1/2]

std::string SingleHistogramDefinition::stringIndex ( ) const

add the folder path to produce the full histogram name e.g. myFolder/myHisto

Definition at line 126 of file SingleHistogramDefinition.cxx.

126 {
127 return stringIndex(name, folder);
128}
std::string stringIndex() const
add the folder path to produce the full histogram name e.g. myFolder/myHisto

◆ stringIndex() [2/2]

std::string SingleHistogramDefinition::stringIndex ( const std::string & thisname,
const std::string & thisfolder )
static

concatenate a sanitised folderName with the histogram name

Definition at line 138 of file SingleHistogramDefinition.cxx.

138 {
139 if (thisfolder.empty()) {
140 return thisname;
141 }
142 const std::string delimiter("/");
143 std::string result(thisfolder);
144 if ((thisfolder.substr(0, 1)) == delimiter) {
145 result = thisfolder.substr(1, thisfolder.size() - 2);// reduce "/myfolder" to "myfolder"
146 }
147 size_t lastChar(result.size() - 1);
148 if ((result.substr(lastChar, 1) != delimiter)) {
149 result = result + delimiter; // add a slash: "myfolder" => "myfolder/"
150 }
151 return result + thisname;
152}

◆ titleDigest()

std::string SingleHistogramDefinition::titleDigest ( ) const

produce single-line representation of the titles (titles separated by the ';' delimiter)

Definition at line 131 of file SingleHistogramDefinition.cxx.

131 {
132 const std::string s(";");
133
134 return title + s + xTitle + s + yTitle + s + zTitle;
135}

◆ validType()

bool SingleHistogramDefinition::validType ( ) const

Does the histogram definition have a valid type (TH1, TH2 etc)?

Definition at line 97 of file SingleHistogramDefinition.cxx.

97 {
98 const std::string signature((histoType.substr(0, 3)));
99
100 return((signature == "TH1")or(signature == "TH2")or(signature == "TH3")or(signature == "TPr") or(signature == "TEf"));
101}

Member Data Documentation

◆ allTitles

std::string SingleHistogramDefinition::allTitles

Definition at line 56 of file SingleHistogramDefinition.h.

◆ folder

std::string SingleHistogramDefinition::folder

Definition at line 57 of file SingleHistogramDefinition.h.

◆ histoType

std::string SingleHistogramDefinition::histoType

Definition at line 45 of file SingleHistogramDefinition.h.

◆ m_empty

bool SingleHistogramDefinition::m_empty

Definition at line 73 of file SingleHistogramDefinition.h.

◆ name

std::string SingleHistogramDefinition::name

Definition at line 44 of file SingleHistogramDefinition.h.

◆ nBinsX

unsigned int SingleHistogramDefinition::nBinsX

Definition at line 47 of file SingleHistogramDefinition.h.

◆ nBinsY

unsigned int SingleHistogramDefinition::nBinsY

Definition at line 48 of file SingleHistogramDefinition.h.

◆ nBinsZ

unsigned int SingleHistogramDefinition::nBinsZ

Definition at line 49 of file SingleHistogramDefinition.h.

◆ title

std::string SingleHistogramDefinition::title

Definition at line 46 of file SingleHistogramDefinition.h.

◆ xAxis

IHistogramDefinitionSvc::axesLimits_t SingleHistogramDefinition::xAxis

Definition at line 50 of file SingleHistogramDefinition.h.

◆ xTitle

std::string SingleHistogramDefinition::xTitle

Definition at line 53 of file SingleHistogramDefinition.h.

◆ yAxis

IHistogramDefinitionSvc::axesLimits_t SingleHistogramDefinition::yAxis

Definition at line 51 of file SingleHistogramDefinition.h.

◆ yTitle

std::string SingleHistogramDefinition::yTitle

Definition at line 54 of file SingleHistogramDefinition.h.

◆ zAxis

IHistogramDefinitionSvc::axesLimits_t SingleHistogramDefinition::zAxis

Definition at line 52 of file SingleHistogramDefinition.h.

◆ zTitle

std::string SingleHistogramDefinition::zTitle

Definition at line 55 of file SingleHistogramDefinition.h.


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