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 );