18 typedef std::pair<double, double> Bin;
20 typedef std::vector<Bin> Bins;
29 void setHighEdge(
double value ) { high = value; }
30 void setLowEdge(
double value ) { low = value; }
31 void setNBins(
unsigned int value ) { nbins = value; }
32 void setEdges( std::vector<double> value ) { edges = std::move( value ); }
34 Edges& operator-=(
double value ) {
38 Edges& operator+=(
double value ) {
42 Edges& operator*=( std::vector<double> value ) {
43 setEdges( std::move( value ) );
46 Edges& operator/=(
unsigned int value ) {
51 bool ok()
const {
return edges.empty() ? low < high && 0 < nbins : 2 < edges.size(); }
52 unsigned int nBins()
const {
return edges.empty() ? nbins : edges.size() - 1; }
57 std::vector<double> edges;
67 void setName( std::string value ) { m_name = std::move( value ); }
68 void setTitle( std::string value ) { m_title = std::move( value ); }
70 void setEdges( Edges value ) { m_edges = std::move( value ); }
71 void setHighEdge(
const double value ) { m_edges.setHighEdge( value ); }
72 void setLowEdge(
const double value ) { m_edges.setLowEdge( value ); }
73 void setNBins(
const unsigned int value ) { m_edges.setNBins( value ); }
75 void setBins( Bins value ) { m_bins = std::move( value ); }
77 H1& operator*=( std::string value ) {
78 setName( std::move( value ) );
81 H1& operator/=( std::string value ) {
82 setTitle( std::move( value ) );
85 H1& operator^=(
const double value ) {
89 H1& operator-=(
const double value ) {
93 H1& operator|=(
const unsigned int value ) {
98 H1& operator&=( Edges value ) {
99 setEdges( std::move( value ) );
102 H1& operator+=( Bins value ) {
103 setBins( std::move( value ) );
108 if ( m_bins.empty() ) {
return false; }
109 if ( !m_edges.ok() ) {
return false; }
110 if ( m_bins.size() != m_edges.nBins() + 2 ) {
return false; }
127 void setName( std::string value ) { m_name = std::move( value ); }
128 void setTitle( std::string value ) { m_title = std::move( value ); }
129 void setXEdges( Edges value ) { m_xedges = std::move( value ); }
130 void setYEdges( Edges value ) { m_yedges = std::move( value ); }
131 void setBins( Bins value ) { m_bins = std::move( value ); }
133 H2& operator*=( std::string value ) {
134 setName( std::move( value ) );
137 H2& operator/=( std::string value ) {
138 setTitle( std::move( value ) );
141 H2& operator&=( Edges value ) {
142 setXEdges( std::move( value ) );
145 H2& operator|=( Edges value ) {
146 setYEdges( std::move( value ) );
149 H2& operator+=( Bins value ) {
150 setBins( std::move( value ) );
155 if ( m_bins.empty() ) {
return false; }
156 if ( !m_xedges.ok() ) {
return false; }
157 if ( !m_yedges.ok() ) {
return false; }
158 if ( m_bins.size() != ( m_xedges.nBins() + 2 ) * ( m_yedges.nBins() + 2 ) ) {
return false; }
177 void setName( std::string value ) { m_name = std::move( value ); }
178 void setTitle( std::string value ) { m_title = std::move( value ); }
179 void setXEdges( Edges value ) { m_xedges = std::move( value ); }
180 void setYEdges( Edges value ) { m_yedges = std::move( value ); }
181 void setZEdges( Edges value ) { m_zedges = std::move( value ); }
182 void setBins( Bins value ) { m_bins = std::move( value ); }
184 H3& operator*=( std::string value ) {
185 setName( std::move( value ) );
188 H3& operator/=( std::string value ) {
189 setTitle( std::move( value ) );
192 H3& operator&=( Edges value ) {
193 setXEdges( std::move( value ) );
196 H3& operator|=( Edges value ) {
197 setYEdges( std::move( value ) );
200 H3& operator-=( Edges value ) {
201 setZEdges( std::move( value ) );
204 H3& operator+=( Bins value ) {
205 setBins( std::move( value ) );
210 if ( m_bins.empty() ) {
return false; }
211 if ( !m_xedges.ok() ) {
return false; }
212 if ( !m_yedges.ok() ) {
return false; }
213 if ( !m_zedges.ok() ) {
return false; }
214 if ( m_bins.size() != ( m_xedges.nBins() + 2 ) * ( m_yedges.nBins() + 2 ) * ( m_zedges.nBins() + 2 ) ) {