g4tools  5.4.0
b1
Go to the documentation of this file.
1 // Copyright (C) 2010, Guy Barrand. All rights reserved.
2 // See the file tools.license for terms.
3 
4 #ifndef tools_histo_b1
5 #define tools_histo_b1
6 
7 #include "base_histo"
8 
9 #include <ostream>
10 
11 namespace tools {
12 namespace histo {
13 
14 template <class TC,class TO,class TN,class TW,class TH>
15 class b1 : public base_histo<TC,TO,TN,TW,TH> {
17 protected:
18  enum {AxisX=0};
19 public:
21  typedef typename parent::axis_t axis_t;
22  typedef typename parent::bn_t bn_t;
23 public:
24  virtual TH bin_error(int) const = 0; //for print
25 public:
26  // Partition :
27  int coord_to_index(TC aCoord) const {
28  return axis().coord_to_index(aCoord);
29  }
30  TC mean() const {
31  //TC value;
32  //parent::get_ith_axis_mean(AxisX,value); //can return false.
33  //return value;
34  if(parent::m_in_range_Sw==0) return 0;
36  }
37  TC rms() const {
38  //TC value;
39  //parent::get_ith_axis_rms(AxisX,value); //can return false.
40  //return value;
41  if(parent::m_in_range_Sw==0) return 0;
43  return ::sqrt(::fabs((parent::m_in_range_Sx2w[0] / parent::m_in_range_Sw) - _mean * _mean));
44  }
45 
46  // bins :
47  TN bin_entries(int aI) const {
48  TO offset;
49  if(!_find_offset(aI,offset)) return 0;
50  return parent::m_bin_entries[offset];
51  }
52 
53  TW bin_Sw(int aI) const {
54  TO offset;
55  if(!_find_offset(aI,offset)) return 0;
56  return parent::m_bin_Sw[offset];
57  }
58 
59  TW bin_Sw2(int aI) const {
60  TO offset;
61  if(!_find_offset(aI,offset)) return 0;
62  return parent::m_bin_Sw2[offset];
63  }
64  TC bin_Sxw(int aI) const {
65  TO offset;
66  if(!_find_offset(aI,offset)) return 0;
67  return parent::m_bin_Sxw[offset][AxisX];
68  }
69  TC bin_Sx2w(int aI) const {
70  TO offset;
71  if(!_find_offset(aI,offset)) return 0;
72  return parent::m_bin_Sx2w[offset][AxisX];
73  }
74 
75  TH bin_height(int aI) const {
76  TO offset;
77  if(!_find_offset(aI,offset)) return 0;
78  return this->get_bin_height(offset);
79  }
80 
81  TC bin_center(int aI) const {return parent::m_axes[0].bin_center(aI);}
82 
83  TC bin_mean(int aI) const {
84  TO offset;
85  if(!_find_offset(aI,offset)) return 0;
86  TW sw = parent::m_bin_Sw[offset];
87  if(sw==0) return 0;
88  return parent::m_bin_Sxw[offset][AxisX]/sw;
89  }
90 
91  TC bin_rms(int aI) const {
92  TO offset;
93  if(!_find_offset(aI,offset)) return 0;
94  TW sw = parent::m_bin_Sw[offset];
95  if(sw==0) return 0;
96  TC sxw = parent::m_bin_Sxw[offset][AxisX];
97  TC sx2w = parent::m_bin_Sx2w[offset][AxisX];
98  TC _mean = sxw/sw;
99  return ::sqrt(::fabs((sx2w / sw) - _mean * _mean));
100  }
101 
102  // Axis :
103  const axis_t& axis() const {return parent::m_axes[0];}
104  axis_t& axis() {return parent::m_axes[0];} //touchy
105 public:
106  //NOTE : print is a Python keyword.
107  void hprint(std::ostream& a_out) {
108  // A la HPRINT.
109  a_out << parent::dimension() << parent::title() << std::endl;
110  a_out
111  << " * ENTRIES = " << parent::all_entries()
112  << " * ALL CHANNELS = " << parent::sum_bin_heights()
113  << " * UNDERFLOW = " << bin_height(axis_t::UNDERFLOW_BIN)
114  << " * OVERFLOW = " << bin_height(axis_t::OVERFLOW_BIN)
115  << std::endl;
116  a_out
117  << " * BIN WID = " << axis().bin_width(0)
118  << " * MEAN VALUE = " << mean()
119  << " * R . M . S = " << rms()
120  << std::endl;
121 
122  // Some bins :
123  bn_t bins = axis().bins();
124  a_out
125  << " * ENTRIES[0] = "
126  << bin_entries(0)
127  << " * HEIGHT[0] = "
128  << bin_height(0)
129  << " * ERROR[0] = "
130  << bin_error(0)
131  << std::endl;
132  a_out
133  << " * ENTRIES[N/2] = "
134  << bin_entries(bins/2)
135  << " * HEIGHT[N/2] = "
136  << bin_height(bins/2)
137  << " * ERROR[N/2] = "
138  << bin_error(bins/2)
139  << std::endl;
140  a_out
141  << " * ENTRIES[N-1] = "
142  << bin_entries(bins-1)
143  << " * HEIGHT[N-1] = "
144  << bin_height(bins-1)
145  << " * ERROR[N-1] = "
146  << bin_error(bins-1)
147  << std::endl;
148  }
149 protected:
150  b1(const std::string& a_title,bn_t aXnumber,TC aXmin,TC aXmax) {
151  parent::m_title = a_title;
152  std::vector<bn_t> nbins;
153  nbins.push_back(aXnumber);
154  std::vector<TC> mins;
155  mins.push_back(aXmin);
156  std::vector<TC> maxs;
157  maxs.push_back(aXmax);
158  parent::configure(1,nbins,mins,maxs);
159  }
160  b1(const std::string& a_title,const std::vector<TC>& a_edges) {
161  parent::m_title = a_title;
162  std::vector< std::vector<TC> > edges(1);
163  edges[0] = a_edges;
164  parent::configure(1,edges);
165  }
166 
167  virtual ~b1(){}
168 protected:
169  b1(const b1& a_from):parent(a_from){}
170  b1& operator=(const b1& a_from) {
171  if(&a_from==this) return *this;
172  parent::operator=(a_from);
173  return *this;
174  }
175 public:
176  bool configure(bn_t aXnumber,TC aXmin,TC aXmax){
177  std::vector<bn_t> nbins;
178  nbins.push_back(aXnumber);
179  std::vector<TC> mins;
180  mins.push_back(aXmin);
181  std::vector<TC> maxs;
182  maxs.push_back(aXmax);
183  return parent::configure(1,nbins,mins,maxs);
184  }
185  bool configure(const std::vector<TC>& a_edges) {
186  std::vector< std::vector<TC> > edges(1);
187  edges[0] = a_edges;
188  return parent::configure(1,edges);
189  }
190 protected:
191  bool _find_offset(int aI,TO& a_offset) const {
192  if(parent::m_dimension!=1) {a_offset=0;return false;}
193  bn_t ibin;
194  if(!parent::m_axes[0].in_range_to_absolute_index(aI,ibin)) {a_offset=0;return false;}
195  a_offset = ibin;
196  return true;
197  }
198 };
199 
200 }}
201 
202 #endif
203 
204 
205 
206 
tools::histo::b1::_find_offset
bool _find_offset(int aI, TO &a_offset) const
Definition: b1:191
tools::histo::b1::axis
axis_t & axis()
Definition: b1:104
tools::histo::b1::b1
b1(const std::string &a_title, bn_t aXnumber, TC aXmin, TC aXmax)
Definition: b1:150
tools::histo::b1::hprint
void hprint(std::ostream &a_out)
Definition: b1:107
tools::histo::b1::base_histo_t
base_histo< TC, TO, TN, TW, TH > base_histo_t
Definition: b1:20
tools::histo::axis::coord_to_index
int coord_to_index(TC a_value) const
Definition: axis:97
tools::histo::b1::AxisX
@ AxisX
Definition: b1:18
tools::histo::histo_data::m_bin_Sx2w
std::vector< std::vector< TC > > m_bin_Sx2w
Definition: histo_data:179
tools::histo::histo_data::m_in_range_Sxw
std::vector< TC > m_in_range_Sxw
Definition: histo_data:190
tools::histo::b1::bn_t
parent::bn_t bn_t
Definition: b1:22
tools::histo::b1::~b1
virtual ~b1()
Definition: b1:167
tools::histo::b1
Definition: b1:15
tools::histo::axis< double, unsigned int >
tools::histo::b1::bin_Sx2w
TC bin_Sx2w(int aI) const
Definition: b1:69
tools::histo::histo_data::m_bin_entries
std::vector< TN > m_bin_entries
Definition: histo_data:175
tools::histo::histo_data::m_bin_Sw
std::vector< TW > m_bin_Sw
Definition: histo_data:176
tools::histo::base_histo::get_bin_height
virtual TH get_bin_height(TO) const =0
tools::histo::histo_data::m_in_range_Sx2w
std::vector< TC > m_in_range_Sx2w
Definition: histo_data:191
tools::histo::b1::bin_rms
TC bin_rms(int aI) const
Definition: b1:91
tools::histo::histo_data::m_title
std::string m_title
Definition: histo_data:171
tools::histo::b1::axis
const axis_t & axis() const
Definition: b1:103
tools::histo::axis::bins
bn_t bins() const
Definition: axis:28
tools::histo::b1::rms
TC rms() const
Definition: b1:37
tools::histo::b1::configure
bool configure(const std::vector< TC > &a_edges)
Definition: b1:185
base_histo
tools::histo::histo_data::m_bin_Sxw
std::vector< std::vector< TC > > m_bin_Sxw
Definition: histo_data:178
tools::histo::axis::UNDERFLOW_BIN
@ UNDERFLOW_BIN
Definition: axis:23
tools::histo::base_histo< double, unsigned int, unsigned int, double, double >::bn_t
axis_t::bn_t bn_t
Definition: base_histo:37
tools::histo::base_histo::all_entries
TN all_entries() const
Definition: base_histo:95
tools::histo::b1::bin_center
TC bin_center(int aI) const
Definition: b1:81
tools::histo::histo_data::m_axes
std::vector< axis_t > m_axes
Definition: histo_data:181
tools::histo::b1::bin_height
TH bin_height(int aI) const
Definition: b1:75
tools::histo::base_histo::title
const std::string & title() const
Definition: base_histo:87
tools::histo::b1::axis_t
parent::axis_t axis_t
Definition: b1:21
tools
inlined C code : ///////////////////////////////////
Definition: aida_ntuple:26
tools::histo::base_histo::configure
bool configure(dim_t a_dim, const std::vector< bn_t > &aNumbers, const std::vector< TC > &aMins, const std::vector< TC > &aMaxs)
Definition: base_histo:293
tools::histo::histo_data::m_bin_Sw2
std::vector< TW > m_bin_Sw2
Definition: histo_data:177
tools::histo::b1::bin_mean
TC bin_mean(int aI) const
Definition: b1:83
tools::histo::b1::bin_Sw2
TW bin_Sw2(int aI) const
Definition: b1:59
tools::histo::histo_data::m_in_range_Sw
TW m_in_range_Sw
Definition: histo_data:188
tools::histo::b1::bin_error
virtual TH bin_error(int) const =0
tools::histo::b1::bin_Sxw
TC bin_Sxw(int aI) const
Definition: b1:64
tools::histo::axis::OVERFLOW_BIN
@ OVERFLOW_BIN
Definition: axis:23
tools::histo::base_histo::operator=
base_histo & operator=(const base_histo &a_from)
Definition: base_histo:76
tools::histo::b1::operator=
b1 & operator=(const b1 &a_from)
Definition: b1:170
tools::histo::base_histo
Definition: base_histo:27
tools::histo::base_histo::sum_bin_heights
TH sum_bin_heights() const
Definition: base_histo:114
tools::histo::histo_data::m_dimension
dim_t m_dimension
Definition: histo_data:172
tools::histo::b1::mean
TC mean() const
Definition: b1:30
tools::histo::base_histo::dimension
dim_t dimension() const
Definition: base_histo:89
tools::histo::axis::bin_width
TC bin_width(int a_bin) const
Definition: axis:31
tools::histo::b1::configure
bool configure(bn_t aXnumber, TC aXmin, TC aXmax)
Definition: b1:176
tools::histo::b1::coord_to_index
int coord_to_index(TC aCoord) const
Definition: b1:27
tools::histo::b1::b1
b1(const b1 &a_from)
Definition: b1:169
tools::histo::b1::bin_entries
TN bin_entries(int aI) const
Definition: b1:47
tools::histo::b1::bin_Sw
TW bin_Sw(int aI) const
Definition: b1:53
tools::histo::b1::b1
b1(const std::string &a_title, const std::vector< TC > &a_edges)
Definition: b1:160