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  //
22  void setHighEdge ( double value ) { high = value ; }
23  void setLowEdge ( double value ) { low = value ; }
24  void setNBins ( unsigned int value ) { nbins = value ; }
25  void setEdges ( std::vector<double> value ) { edges = std::move(value) ; }
26  //
27  Edges& operator -= ( double value )
28  { setLowEdge ( value ) ; return *this ; }
29  Edges& operator += ( double value )
30  { setHighEdge ( value ) ; return *this ; }
31  Edges& operator *= ( std::vector<double> value )
32  { setEdges ( std::move(value) ) ; return *this ; }
33  Edges& operator /= ( 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 final
59  {
60  //
61  void setName ( std::string value ) { m_name = std::move(value) ; }
62  void setTitle ( std::string value ) { m_title = std::move(value) ; }
63 
64  void setEdges ( Edges value ) { m_edges = std::move(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 ( Bins value ) { m_bins = std::move(value) ; }
71  //
72  H1& operator*=( std::string value ) { setName ( std::move(value) ) ; return *this ; }
73  H1& operator/=( std::string value ) { setTitle ( std::move(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&=( Edges value ) { setEdges ( std::move(value) ) ; return *this ; }
79  H1& operator+=( Bins value ) { setBins ( std::move(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 final
102  {
103  //
104  void setName ( std::string value ) { m_name = std::move(value) ; }
105  void setTitle ( std::string value ) { m_title = std::move(value) ; }
106  void setXEdges ( Edges value ) { m_xedges = std::move(value) ; }
107  void setYEdges ( Edges value ) { m_yedges = std::move(value) ; }
108  void setBins ( Bins value ) { m_bins = std::move(value) ; }
109  //
110  H2& operator*=( std::string value ) { setName ( std::move(value) ) ; return *this ; }
111  H2& operator/=( std::string value ) { setTitle ( std::move(value) ) ; return *this ; }
112  H2& operator&=( Edges value ) { setXEdges ( std::move(value) ) ; return *this ; }
113  H2& operator|=( Edges value ) { setYEdges ( std::move(value) ) ; return *this ; }
114  H2& operator+=( Bins value ) { setBins ( std::move(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 // ============================================================================
STL class.
T move(T...args)
STL class.