All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
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
20  {
21  //
22  void setHighEdge ( const double value ) { high = value ; }
23  void setLowEdge ( const double value ) { low = value ; }
24  void setNBins ( const unsigned int value ) { nbins = value ; }
25  void setEdges ( const std::vector<double>& value ) { edges = value ; }
26  //
27  Edges& operator -= ( const double value )
28  { setLowEdge ( value ) ; return *this ; }
29  Edges& operator += ( const double value )
30  { setHighEdge ( value ) ; return *this ; }
31  Edges& operator *= ( const std::vector<double>& value )
32  { setEdges ( value ) ; return *this ; }
33  Edges& operator /= ( const unsigned int value )
34  { setNBins ( value ) ; return *this ; }
35  //
36  bool ok () const
37  {
38  return
39  edges.empty() ? low < high && 0 < nbins : 2 < edges.size() ;
40  }
41  unsigned int nBins() const
42  {
43  return
44  edges.empty() ? nbins : edges.size() - 1 ;
45  }
46  //
47  double low ;
48  double high ;
49  unsigned int nbins ;
50  std::vector<double> edges ;
51  };
52  // ==========================================================================
58  struct H1
59  {
60  //
61  void setName ( const std::string& value ) { m_name = value ; }
62  void setTitle ( const std::string& value ) { m_title = value ; }
63 
64  void setEdges ( const Edges& value ) { m_edges = value ; }
65  void setHighEdge ( const double value ) { m_edges.setHighEdge(value ); }
66  void setLowEdge ( const double value ) { m_edges.setLowEdge(value ); }
67  void setNBins ( const unsigned int value ) { m_edges.setNBins(value );}
68 
69 
70  void setBins ( const Bins& value ) { m_bins = value ; }
71  //
72  H1& operator*=( const std::string& value ) { setName ( value ) ; return *this ; }
73  H1& operator/=( const std::string& value ) { setTitle ( value ) ; return *this ; }
74  H1& operator^=( const double value ) { setHighEdge(value) ; return *this ; }
75  H1& operator-=( const double value ) { setLowEdge(value) ; return *this ; }
76  H1& operator|=( const unsigned int value) { setNBins(value) ; return *this ; }
77 
78  H1& operator&=( const Edges& value ) { setEdges ( value ) ; return *this ; }
79  H1& operator+=( const Bins& value ) { setBins ( value ) ; return *this ; }
80  //
81  bool ok () const
82  {
83  if ( m_bins.empty() ) { return false ; }
84  if ( !m_edges.ok () ) { return false ; }
85  if ( m_bins.size() != m_edges.nBins() + 2 ) { return false ; }
86  return true ;
87  }
88  //
89  std::string m_name ;
90  std::string m_title ;
91  Edges m_edges ;
92  Bins m_bins ;
93 
94  } ;
95  // ==========================================================================
101  struct H2
102  {
103  //
104  void setName ( const std::string& value ) { m_name = value ; }
105  void setTitle ( const std::string& value ) { m_title = value ; }
106  void setXEdges ( const Edges& value ) { m_xedges = value ; }
107  void setYEdges ( const Edges& value ) { m_yedges = value ; }
108  void setBins ( const Bins& value ) { m_bins = value ; }
109  //
110  H2& operator*=( const std::string& value ) { setName ( value ) ; return *this ; }
111  H2& operator/=( const std::string& value ) { setTitle ( value ) ; return *this ; }
112  H2& operator&=( const Edges& value ) { setXEdges ( value ) ; return *this ; }
113  H2& operator|=( const Edges& value ) { setYEdges ( value ) ; return *this ; }
114  H2& operator+=( const Bins& value ) { setBins ( value ) ; return *this ; }
115  //
116  bool ok () const
117  {
118  if ( m_bins.empty () ) { return false ; }
119  if ( !m_xedges.ok () ) { return false ; }
120  if ( !m_yedges.ok () ) { return false ; }
121  if ( m_bins.size() !=
122  ( m_xedges.nBins() + 2 ) *
123  ( m_yedges.nBins() + 2 ) ) { return false ; }
124  return true ;
125  }
126  //
127  //
128  std::string m_name ;
129  std::string m_title ;
130  Edges m_xedges ;
131  Edges m_yedges ;
132  Bins m_bins ;
133  } ;
134  // ==========================================================================
135 } // end of anonymous namespace
136 // ============================================================================
137 // The END
138 // ============================================================================
139 #endif // GAUDIUTILS_H1_H
140 // ============================================================================