ATLAS Offline Software
SinglePlotDefinition.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
4 
11 #include "SinglePlotDefinition.h"
13 
15 #include <limits> // std::numeric_limits
16 #include <cmath> // std::std::isnan
17 #include <sstream>
18 
19 
24  const std::string& name, const std::string& type, const std::string& title,
25  const std::string& xTitle,
26  unsigned int nBinsX, float xLow, float xHigh,
27  bool doLogLinBinsX, const std::vector<float>& xBinsVec,
28  const std::vector< std::string >& xBinLabelsVec,
29  const std::string& yTitle,
30  unsigned int nBinsY, float yLow, float yHigh,
31  bool doLogLinBinsY, const std::vector<float>& yBinsVec,
32  const std::vector< std::string >& yBinLabelsVec,
33  const std::string& zTitle,
34  unsigned int nBinsZ, float zLow, float zHigh,
35  bool doLogLinBinsZ, const std::vector<float>& zBinsVec,
36  const std::vector< std::string >& zBinLabelsVec,
37  const std::string& folder ) :
38  m_name( name ), m_type( type ), m_title( title ),
39  m_xTitle( xTitle ), m_yTitle( yTitle ), m_zTitle( zTitle ),
40  m_nBinsX( nBinsX ), m_nBinsY( nBinsY ), m_nBinsZ( nBinsZ ),
41  m_doLogLinBinsX( doLogLinBinsX ), m_doLogLinBinsY( doLogLinBinsY ), m_doLogLinBinsZ( doLogLinBinsZ ),
42  m_folder( folder ), m_is1D( false ), m_is2D( false ), m_is3D( false )
43 {
45  if( m_title.empty() ) m_title = m_name;
46 
48  m_xAxis = ( nBinsX != 0 ) ? std::make_pair( xLow, xHigh ) :
49  std::make_pair( std::numeric_limits<float>::quiet_NaN(),
50  std::numeric_limits<float>::quiet_NaN() );
51 
52  m_yAxis = ( nBinsY != 0 ) ? std::make_pair( yLow, yHigh ) :
53  std::make_pair( std::numeric_limits<float>::quiet_NaN(),
54  std::numeric_limits<float>::quiet_NaN() );
55 
56  m_zAxis = ( nBinsZ != 0 ) ? std::make_pair( zLow, zHigh ) :
57  std::make_pair( std::numeric_limits<float>::quiet_NaN(),
58  std::numeric_limits<float>::quiet_NaN() );
59 
64 
69 
71  m_empty = not isValid();
72 
73  // Re-compute digest strings
74  if( not m_empty ) digest();
75 }
76 
77 
83 {
85  if( m_name.empty() or m_type.empty() ) return false;
86 
88  bool sane =
89  ( m_type.find( "TH1" ) != std::string::npos ) or
90  ( m_type.find( "TH2" ) != std::string::npos ) or
91  ( m_type.find( "TH3" ) != std::string::npos ) or
92  ( m_type.find( "TProfile" ) != std::string::npos ) or // 1D and 2D
93  ( m_type.find( "TEfficiency" ) != std::string::npos ); // 1D and 2D
94 
96  const bool sensibleXBins = ( m_nBinsX != 0 ) and ( not std::isnan( m_nBinsX ) );
97  const bool sensibleYBins = ( m_nBinsY != 0 ) and ( not std::isnan( m_nBinsY ) );
98  const bool sensibleZBins = ( m_nBinsZ != 0 ) and ( not std::isnan( m_nBinsZ ) );
99 
103  const bool sensibleXLimits = ( not std::isnan( m_xAxis.first ) ) and
104  ( not std::isnan( m_xAxis.second ) ) and
105  ( m_xAxis.first != m_xAxis.second );
106 
107  const bool sensibleYLimits = ( not std::isnan( m_yAxis.first ) ) and
108  ( not std::isnan( m_yAxis.second ) ) and
109  ( m_yAxis.first != m_yAxis.second );
110 
111  const bool sensibleZLimits = ( not std::isnan( m_zAxis.first ) ) and
112  ( not std::isnan( m_zAxis.second ) ) and
113  ( m_zAxis.first != m_zAxis.second );
114 
116  sane = sane and sensibleXBins and sensibleXLimits;
117 
119  if( m_is2D ) {
120  sane = sane and sensibleYBins and sensibleYLimits;
121 
123  if( m_is3D ) {
124  sane = sane and sensibleZBins and sensibleZLimits;
125  }
126  }
127 
128  return sane;
129 }
130 
131 
138 {
139  if( m_folder.empty() ){
140  m_identifier = m_name;
141  } else {
143  if( m_folder[0] == '/' ) {
144  m_folder.erase( m_folder.begin() );
145  }
147  if( m_folder.back() != '/' ) m_folder += "/";
148  m_identifier = m_folder + m_name;
149  }
150 }
151 
152 
158 {
159  std::stringstream ss;
160  ss << m_name << " - " << m_type << " - " << m_title
161  << " - " << m_xTitle << " : (" << m_nBinsX << ", " << m_xAxis.first << ", " << m_xAxis.second << " )"
162  << " - " << m_yTitle << " : (" << m_nBinsY << ", " << m_yAxis.first << ", " << m_yAxis.second << " )"
163  << " - " << m_zTitle << " : (" << m_nBinsZ << ", " << m_zAxis.first << ", " << m_zAxis.second << " )";
164 
165  m_plotDigest = ss.str();
166 }
167 
168 
175 {
176  std::stringstream ss;
177  ss << m_title << ";" << m_xTitle << ";" << m_yTitle << ";" << m_zTitle;
178 
179  m_titleDigest = ss.str();
180 }
181 
182 
188 {
189  m_is1D = ( m_type.find("TH1") != std::string::npos ) or
190  ( m_type == "TProfile" ) or ( m_type == "TEfficiency" );
191 
192  m_is2D = ( m_type.find("TH2") != std::string::npos ) or
193  ( m_type.find("2D") != std::string::npos );
194 
195  m_is3D = ( m_type.find("TH3") != std::string::npos ) or
196  ( m_type.find("3D") != std::string::npos );
197 }
IDTPM::SinglePlotDefinition::setxBinsVec
void setxBinsVec(const std::vector< float > &vec)
Definition: SinglePlotDefinition.h:112
IDTPM::SinglePlotDefinition::setzBinsVec
void setzBinsVec(const std::vector< float > &vec)
Definition: SinglePlotDefinition.h:118
IDTPM::SinglePlotDefinition::zBinsVec
const std::vector< float > & zBinsVec() const
Definition: SinglePlotDefinition.h:78
SinglePlotDefinition.h
Class to store (internally) each plot definition in this package (originally based on the SingleHisto...
PowhegControl_ttHplus_NLO.ss
ss
Definition: PowhegControl_ttHplus_NLO.py:83
IDTPM::SinglePlotDefinition::setzBinLabelsVec
void setzBinLabelsVec(const std::vector< std::string > &vec)
Definition: SinglePlotDefinition.h:129
IDTPM::SinglePlotDefinition::redoPlotDigest
void redoPlotDigest()
recompute m_plotDigest
Definition: SinglePlotDefinition.cxx:157
IDTPM::SinglePlotDefinition::digest
void digest()
recompute m_identifier, m_plotDigest, m_titleDigest, m_is*D
Definition: SinglePlotDefinition.h:149
IDTPM::SinglePlotDefinition::SinglePlotDefinition
SinglePlotDefinition(const std::string &name="", const std::string &type="", const std::string &title="", const std::string &xTitle="", unsigned int nBinsX=0, float xLow=0., float xHigh=0., bool doLogLinBinsX=false, const std::vector< float > &xBinsVec={}, const std::vector< std::string > &xBinLabelsVec={}, const std::string &yTitle="", unsigned int nBinsY=0, float yLow=0., float yHigh=0., bool doLogLinBinsY=false, const std::vector< float > &yBinsVec={}, const std::vector< std::string > &yBinLabelsVec={}, const std::string &zTitle="", unsigned int nBinsZ=0, float zLow=0., float zHigh=0., bool doLogLinBinsZ=false, const std::vector< float > &zBinsVec={}, const std::vector< std::string > &zBinLabelsVec={}, const std::string &folder="")
Parametrised Constructor.
Definition: SinglePlotDefinition.cxx:23
IDTPM::SinglePlotDefinition::redoIdDigest
void redoIdDigest()
recompute m_identifier
Definition: SinglePlotDefinition.cxx:137
IDTPM::SinglePlotDefinition::m_name
std::string m_name
main members
Definition: SinglePlotDefinition.h:159
IDTPM::SinglePlotDefinition::isValid
bool isValid() const
Definition: SinglePlotDefinition.cxx:82
IDTPM::SinglePlotDefinition::xBinLabelsVec
const std::vector< std::string > & xBinLabelsVec() const
Definition: SinglePlotDefinition.h:82
IDTPM::SinglePlotDefinition::yLow
float yLow() const
Definition: SinglePlotDefinition.h:69
IDTPM::SinglePlotDefinition::m_empty
bool m_empty
status member
Definition: SinglePlotDefinition.h:170
IDTPM::SinglePlotDefinition::m_yAxis
axesLimits_t m_yAxis
Definition: SinglePlotDefinition.h:163
m_name
std::string m_name
Definition: ColumnarPhysliteTest.cxx:62
IDTPM::SinglePlotDefinition::nBinsX
unsigned int nBinsX() const
Definition: SinglePlotDefinition.h:64
IDTPM::SinglePlotDefinition::yBinsVec
const std::vector< float > & yBinsVec() const
Definition: SinglePlotDefinition.h:77
python.CaloAddPedShiftConfig.type
type
Definition: CaloAddPedShiftConfig.py:42
IDTPM::SinglePlotDefinition::setxBinLabelsVec
void setxBinLabelsVec(const std::vector< std::string > &vec)
Definition: SinglePlotDefinition.h:121
IDTPM::SinglePlotDefinition::xHigh
float xHigh() const
Definition: SinglePlotDefinition.h:68
m_type
TokenType m_type
the type
Definition: TProperty.cxx:44
IDTPM::SinglePlotDefinition::m_title
std::string m_title
Definition: SinglePlotDefinition.h:161
IDTPM::SinglePlotDefinition::nBinsZ
unsigned int nBinsZ() const
Definition: SinglePlotDefinition.h:66
IDTPM::SinglePlotDefinition::zBinLabelsVec
const std::vector< std::string > & zBinLabelsVec() const
Definition: SinglePlotDefinition.h:84
IDTPM::SinglePlotDefinition::zHigh
float zHigh() const
Definition: SinglePlotDefinition.h:72
covarianceTool.title
title
Definition: covarianceTool.py:542
IDTPM::SinglePlotDefinition::nBinsY
unsigned int nBinsY() const
Definition: SinglePlotDefinition.h:65
IDTPM::SinglePlotDefinition::yHigh
float yHigh() const
Definition: SinglePlotDefinition.h:70
IDTPM::SinglePlotDefinition::xBinsVec
const std::vector< float > & xBinsVec() const
Definition: SinglePlotDefinition.h:76
IDTPM::SinglePlotDefinition::xLow
float xLow() const
Definition: SinglePlotDefinition.h:67
IDTPM::SinglePlotDefinition::m_xAxis
axesLimits_t m_xAxis
Definition: SinglePlotDefinition.h:163
IDTPM::SinglePlotDefinition::setyBinLabelsVec
void setyBinLabelsVec(const std::vector< std::string > &vec)
Definition: SinglePlotDefinition.h:125
IDTPM::SinglePlotDefinition::yBinLabelsVec
const std::vector< std::string > & yBinLabelsVec() const
Definition: SinglePlotDefinition.h:83
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:240
IDTPM::SinglePlotDefinition::redoTitleDigest
void redoTitleDigest()
recompute m_titleDigest
Definition: SinglePlotDefinition.cxx:174
IDTPM::SinglePlotDefinition::setyBinsVec
void setyBinsVec(const std::vector< float > &vec)
Definition: SinglePlotDefinition.h:115
IDTPM::SinglePlotDefinition::m_zAxis
axesLimits_t m_zAxis
Definition: SinglePlotDefinition.h:163
IDTPM::SinglePlotDefinition::zLow
float zLow() const
Definition: SinglePlotDefinition.h:71
CaloCondBlobAlgs_fillNoiseFromASCII.folder
folder
Definition: CaloCondBlobAlgs_fillNoiseFromASCII.py:55
IDTPM::SinglePlotDefinition::redoTypeDigest
void redoTypeDigest()
recompute m_is*D
Definition: SinglePlotDefinition.cxx:187