Go to the documentation of this file.00001 #ifndef GAUDIUTILS_H1_H
00002 #define GAUDIUTILS_H1_H 1
00003
00004
00005
00006 namespace
00007 {
00008
00010 typedef std::pair<double,double> Bin ;
00012 typedef std::vector<Bin> Bins ;
00013
00019 struct Edges
00020 {
00021
00022 void setHighEdge ( const double value ) { high = value ; }
00023 void setLowEdge ( const double value ) { low = value ; }
00024 void setNBins ( const unsigned int value ) { nbins = value ; }
00025 void setEdges ( const std::vector<double>& value ) { edges = value ; }
00026
00027 Edges& operator -= ( const double value )
00028 { setLowEdge ( value ) ; return *this ; }
00029 Edges& operator += ( const double value )
00030 { setHighEdge ( value ) ; return *this ; }
00031 Edges& operator *= ( const std::vector<double>& value )
00032 { setEdges ( value ) ; return *this ; }
00033 Edges& operator /= ( const unsigned int value )
00034 { setNBins ( value ) ; return *this ; }
00035
00036 bool ok () const
00037 {
00038 return
00039 edges.empty() ? low < high && 0 < nbins : 2 < edges.size() ;
00040 }
00041 unsigned int nBins() const
00042 {
00043 return
00044 edges.empty() ? nbins : edges.size() - 1 ;
00045 }
00046
00047 double low ;
00048 double high ;
00049 unsigned int nbins ;
00050 std::vector<double> edges ;
00051 };
00052
00058 struct H1
00059 {
00060
00061 void setName ( const std::string& value ) { m_name = value ; }
00062 void setTitle ( const std::string& value ) { m_title = value ; }
00063
00064 void setEdges ( const Edges& value ) { m_edges = value ; }
00065 void setHighEdge ( const double value ) { m_edges.setHighEdge(value ); }
00066 void setLowEdge ( const double value ) { m_edges.setLowEdge(value ); }
00067 void setNBins ( const unsigned int value ) { m_edges.setNBins(value );}
00068
00069
00070 void setBins ( const Bins& value ) { m_bins = value ; }
00071
00072 H1& operator*=( const std::string& value ) { setName ( value ) ; return *this ; }
00073 H1& operator/=( const std::string& value ) { setTitle ( value ) ; return *this ; }
00074 H1& operator^=( const double value ) { setHighEdge(value) ; return *this ; }
00075 H1& operator-=( const double value ) { setLowEdge(value) ; return *this ; }
00076 H1& operator|=( const unsigned int value) { setNBins(value) ; return *this ; }
00077
00078 H1& operator&=( const Edges& value ) { setEdges ( value ) ; return *this ; }
00079 H1& operator+=( const Bins& value ) { setBins ( value ) ; return *this ; }
00080
00081 bool ok () const
00082 {
00083 if ( m_bins.empty() ) { return false ; }
00084 if ( !m_edges.ok () ) { return false ; }
00085 if ( m_bins.size() != m_edges.nBins() + 2 ) { return false ; }
00086 return true ;
00087 }
00088
00089 std::string m_name ;
00090 std::string m_title ;
00091 Edges m_edges ;
00092 Bins m_bins ;
00093
00094 } ;
00095
00101 struct H2
00102 {
00103
00104 void setName ( const std::string& value ) { m_name = value ; }
00105 void setTitle ( const std::string& value ) { m_title = value ; }
00106 void setXEdges ( const Edges& value ) { m_xedges = value ; }
00107 void setYEdges ( const Edges& value ) { m_yedges = value ; }
00108 void setBins ( const Bins& value ) { m_bins = value ; }
00109
00110 H2& operator*=( const std::string& value ) { setName ( value ) ; return *this ; }
00111 H2& operator/=( const std::string& value ) { setTitle ( value ) ; return *this ; }
00112 H2& operator&=( const Edges& value ) { setXEdges ( value ) ; return *this ; }
00113 H2& operator|=( const Edges& value ) { setYEdges ( value ) ; return *this ; }
00114 H2& operator+=( const Bins& value ) { setBins ( value ) ; return *this ; }
00115
00116 bool ok () const
00117 {
00118 if ( m_bins.empty () ) { return false ; }
00119 if ( !m_xedges.ok () ) { return false ; }
00120 if ( !m_yedges.ok () ) { return false ; }
00121 if ( m_bins.size() !=
00122 ( m_xedges.nBins() + 2 ) *
00123 ( m_yedges.nBins() + 2 ) ) { return false ; }
00124 return true ;
00125 }
00126
00127
00128 std::string m_name ;
00129 std::string m_title ;
00130 Edges m_xedges ;
00131 Edges m_yedges ;
00132 Bins m_bins ;
00133 } ;
00134
00135 }
00136
00137
00138
00139 #endif // GAUDIUTILS_H1_H
00140