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 ) :
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 )
49 std::make_pair( std::numeric_limits<float>::quiet_NaN(),
50 std::numeric_limits<float>::quiet_NaN() );
53 std::make_pair( std::numeric_limits<float>::quiet_NaN(),
54 std::numeric_limits<float>::quiet_NaN() );
57 std::make_pair( std::numeric_limits<float>::quiet_NaN(),
58 std::numeric_limits<float>::quiet_NaN() );
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
93 (
m_type.find(
"TEfficiency" ) != std::string::npos );
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 ) );
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 );
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 );
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 );
116 sane = sane and sensibleXBins and sensibleXLimits;
120 sane = sane and sensibleYBins and sensibleYLimits;
124 sane = sane and sensibleZBins and sensibleZLimits;
139 if( m_folder.empty() ){
143 if( m_folder[0] ==
'/' ) {
144 m_folder.erase( m_folder.begin() );
147 if( m_folder.back() !=
'/' ) m_folder +=
"/";
148 m_identifier = m_folder +
m_name;
159 std::stringstream
ss;
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 <<
" )";
165 m_plotDigest =
ss.str();
176 std::stringstream
ss;
177 ss << m_title <<
";" << m_xTitle <<
";" << m_yTitle <<
";" << m_zTitle;
179 m_titleDigest =
ss.str();
189 m_is1D = (
m_type.find(
"TH1") != std::string::npos ) or
190 (
m_type ==
"TProfile" ) or (
m_type ==
"TEfficiency" );
192 m_is2D = (
m_type.find(
"TH2") != std::string::npos ) or
193 (
m_type.find(
"2D") != std::string::npos );
195 m_is3D = (
m_type.find(
"TH3") != std::string::npos ) or
196 (
m_type.find(
"3D") != std::string::npos );