| The Gaudi Framework v30r0 (c919700c)

- Main Page
- Related Pages
- Modules
- Namespaces
- Classes
- Files

- File List
- File Members

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 // ============================================================================
std::string
STL class.
std::move
T move(T...args)
std::pair
std::vector
STL class.