The Gaudi Framework  master (e68eea06)
Loading...
Searching...
No Matches
H1.h
Go to the documentation of this file.
1/***********************************************************************************\
2* (c) Copyright 1998-2025 CERN for the benefit of the LHCb and ATLAS collaborations *
3* *
4* This software is distributed under the terms of the Apache version 2 licence, *
5* copied verbatim in the file "LICENSE". *
6* *
7* In applying this licence, CERN does not waive the privileges and immunities *
8* granted to it by virtue of its status as an Intergovernmental Organization *
9* or submit itself to any jurisdiction. *
10\***********************************************************************************/
11#pragma once
12// ============================================================================
13// Include files
14// ============================================================================
15namespace {
16 // ==========================================================================
18 typedef std::pair<double, double> Bin;
20 typedef std::vector<Bin> Bins;
21 // ==========================================================================
27 struct Edges final {
28 //
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 ); }
33 //
34 Edges& operator-=( double value ) {
35 setLowEdge( value );
36 return *this;
37 }
38 Edges& operator+=( double value ) {
39 setHighEdge( value );
40 return *this;
41 }
42 Edges& operator*=( std::vector<double> value ) {
43 setEdges( std::move( value ) );
44 return *this;
45 }
46 Edges& operator/=( unsigned int value ) {
47 setNBins( value );
48 return *this;
49 }
50 //
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; }
53 //
54 double low;
55 double high;
56 unsigned int nbins;
57 std::vector<double> edges;
58 };
59 // ==========================================================================
65 struct H1 final {
66 //
67 void setName( std::string value ) { m_name = std::move( value ); }
68 void setTitle( std::string value ) { m_title = std::move( value ); }
69
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 ); }
74
75 void setBins( Bins value ) { m_bins = std::move( value ); }
76 //
77 H1& operator*=( std::string value ) {
78 setName( std::move( value ) );
79 return *this;
80 }
81 H1& operator/=( std::string value ) {
82 setTitle( std::move( value ) );
83 return *this;
84 }
85 H1& operator^=( const double value ) {
86 setHighEdge( value );
87 return *this;
88 }
89 H1& operator-=( const double value ) {
90 setLowEdge( value );
91 return *this;
92 }
93 H1& operator|=( const unsigned int value ) {
94 setNBins( value );
95 return *this;
96 }
97
98 H1& operator&=( Edges value ) {
99 setEdges( std::move( value ) );
100 return *this;
101 }
102 H1& operator+=( Bins value ) {
103 setBins( std::move( value ) );
104 return *this;
105 }
106 //
107 bool ok() const {
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; }
111 return true;
112 }
113 //
114 std::string m_name;
115 std::string m_title;
116 Edges m_edges;
117 Bins m_bins;
118 };
119 // ==========================================================================
125 struct H2 final {
126 //
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 ); }
132 //
133 H2& operator*=( std::string value ) {
134 setName( std::move( value ) );
135 return *this;
136 }
137 H2& operator/=( std::string value ) {
138 setTitle( std::move( value ) );
139 return *this;
140 }
141 H2& operator&=( Edges value ) {
142 setXEdges( std::move( value ) );
143 return *this;
144 }
145 H2& operator|=( Edges value ) {
146 setYEdges( std::move( value ) );
147 return *this;
148 }
149 H2& operator+=( Bins value ) {
150 setBins( std::move( value ) );
151 return *this;
152 }
153 //
154 bool ok() const {
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; }
159 return true;
160 }
161 //
162 //
163 std::string m_name;
164 std::string m_title;
165 Edges m_xedges;
166 Edges m_yedges;
167 Bins m_bins;
168 };
169 // ==========================================================================
175 struct H3 final {
176 //
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 ); }
183 //
184 H3& operator*=( std::string value ) {
185 setName( std::move( value ) );
186 return *this;
187 }
188 H3& operator/=( std::string value ) {
189 setTitle( std::move( value ) );
190 return *this;
191 }
192 H3& operator&=( Edges value ) {
193 setXEdges( std::move( value ) );
194 return *this;
195 }
196 H3& operator|=( Edges value ) {
197 setYEdges( std::move( value ) );
198 return *this;
199 }
200 H3& operator-=( Edges value ) {
201 setZEdges( std::move( value ) );
202 return *this;
203 }
204 H3& operator+=( Bins value ) {
205 setBins( std::move( value ) );
206 return *this;
207 }
208 //
209 bool ok() const {
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 ) ) {
215 return false;
216 }
217 return true;
218 }
219 //
220 //
221 std::string m_name;
222 std::string m_title;
223 Edges m_xedges;
224 Edges m_yedges;
225 Edges m_zedges;
226 Bins m_bins;
227 };
228
229 // ==========================================================================
230} // end of anonymous namespace
231// ============================================================================
232// The END
233// ============================================================================