The Gaudi Framework  v30r3 (a5ef0a68)
H1.h
Go to the documentation of this file.
1 #ifndef GAUDIUTILS_H1_H
2 #define GAUDIUTILS_H1_H 1
3 // ============================================================================
4 // Include files
5 // ============================================================================
6 namespace
7 {
8  // ==========================================================================
10  typedef std::pair<double, double> Bin;
12  typedef std::vector<Bin> Bins;
13  // ==========================================================================
19  struct Edges final {
20  //
21  void setHighEdge( double value ) { high = value; }
22  void setLowEdge( double value ) { low = value; }
23  void setNBins( unsigned int value ) { nbins = value; }
24  void setEdges( std::vector<double> value ) { edges = std::move( value ); }
25  //
26  Edges& operator-=( double value )
27  {
28  setLowEdge( value );
29  return *this;
30  }
31  Edges& operator+=( double value )
32  {
33  setHighEdge( value );
34  return *this;
35  }
36  Edges& operator*=( std::vector<double> value )
37  {
38  setEdges( std::move( value ) );
39  return *this;
40  }
41  Edges& operator/=( unsigned int value )
42  {
43  setNBins( value );
44  return *this;
45  }
46  //
47  bool ok() const { return edges.empty() ? low < high && 0 < nbins : 2 < edges.size(); }
48  unsigned int nBins() const { return edges.empty() ? nbins : edges.size() - 1; }
49  //
50  double low;
51  double high;
52  unsigned int nbins;
53  std::vector<double> edges;
54  };
55  // ==========================================================================
61  struct H1 final {
62  //
63  void setName( std::string value ) { m_name = std::move( value ); }
64  void setTitle( std::string value ) { m_title = std::move( value ); }
65 
66  void setEdges( Edges value ) { m_edges = std::move( value ); }
67  void setHighEdge( const double value ) { m_edges.setHighEdge( value ); }
68  void setLowEdge( const double value ) { m_edges.setLowEdge( value ); }
69  void setNBins( const unsigned int value ) { m_edges.setNBins( value ); }
70 
71  void setBins( Bins value ) { m_bins = std::move( value ); }
72  //
73  H1& operator*=( std::string value )
74  {
75  setName( std::move( value ) );
76  return *this;
77  }
78  H1& operator/=( std::string value )
79  {
80  setTitle( std::move( value ) );
81  return *this;
82  }
83  H1& operator^=( const double value )
84  {
85  setHighEdge( value );
86  return *this;
87  }
88  H1& operator-=( const double value )
89  {
90  setLowEdge( value );
91  return *this;
92  }
93  H1& operator|=( const unsigned int value )
94  {
95  setNBins( value );
96  return *this;
97  }
98 
99  H1& operator&=( Edges value )
100  {
101  setEdges( std::move( value ) );
102  return *this;
103  }
104  H1& operator+=( Bins value )
105  {
106  setBins( std::move( value ) );
107  return *this;
108  }
109  //
110  bool ok() const
111  {
112  if ( m_bins.empty() ) {
113  return false;
114  }
115  if ( !m_edges.ok() ) {
116  return false;
117  }
118  if ( m_bins.size() != m_edges.nBins() + 2 ) {
119  return false;
120  }
121  return true;
122  }
123  //
124  std::string m_name;
125  std::string m_title;
126  Edges m_edges;
127  Bins m_bins;
128  };
129  // ==========================================================================
135  struct H2 final {
136  //
137  void setName( std::string value ) { m_name = std::move( value ); }
138  void setTitle( std::string value ) { m_title = std::move( value ); }
139  void setXEdges( Edges value ) { m_xedges = std::move( value ); }
140  void setYEdges( Edges value ) { m_yedges = std::move( value ); }
141  void setBins( Bins value ) { m_bins = std::move( value ); }
142  //
143  H2& operator*=( std::string value )
144  {
145  setName( std::move( value ) );
146  return *this;
147  }
148  H2& operator/=( std::string value )
149  {
150  setTitle( std::move( value ) );
151  return *this;
152  }
153  H2& operator&=( Edges value )
154  {
155  setXEdges( std::move( value ) );
156  return *this;
157  }
158  H2& operator|=( Edges value )
159  {
160  setYEdges( std::move( value ) );
161  return *this;
162  }
163  H2& operator+=( Bins value )
164  {
165  setBins( std::move( value ) );
166  return *this;
167  }
168  //
169  bool ok() const
170  {
171  if ( m_bins.empty() ) {
172  return false;
173  }
174  if ( !m_xedges.ok() ) {
175  return false;
176  }
177  if ( !m_yedges.ok() ) {
178  return false;
179  }
180  if ( m_bins.size() != ( m_xedges.nBins() + 2 ) * ( m_yedges.nBins() + 2 ) ) {
181  return false;
182  }
183  return true;
184  }
185  //
186  //
187  std::string m_name;
188  std::string m_title;
189  Edges m_xedges;
190  Edges m_yedges;
191  Bins m_bins;
192  };
193  // ==========================================================================
194 } // end of anonymous namespace
195 // ============================================================================
196 // The END
197 // ============================================================================
198 #endif // GAUDIUTILS_H1_H
199 // ============================================================================
STL class.
T move(T...args)
STL class.
bool & operator|=(bool &lhs, const StatusCode &sc)
Boolean OR assignment operator.
Definition: StatusCode.h:351
bool & operator&=(bool &lhs, const StatusCode &sc)
Boolean AND assignment operator.
Definition: StatusCode.h:348