g4tools  5.4.0
rcsv_histo
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_rcsv_histo
5 #define tools_rcsv_histo
6 
7 #include "sto"
8 #include "chars"
9 #include "words"
10 #include "forit"
11 #include "sout"
12 
13 #include "histo/h1d"
14 #include "histo/h2d"
15 #include "histo/h3d"
16 #include "histo/p1d"
17 #include "histo/p2d"
18 //#include "histo/h1df"
19 
20 #ifdef TOOLS_MEM
21 #include "mem"
22 #endif
23 
24 #include <istream>
25 
26 namespace tools {
27 namespace rcsv {
28 
29 class histo {
30 #ifdef TOOLS_MEM
31 public:
32  static const std::string& s_class() {
33  static const std::string s_v("tools::rcsv::histo");
34  return s_v;
35  }
36 #endif
37 public:
38  histo(std::istream& a_reader)
39  :m_reader(a_reader)
40  {
41 #ifdef TOOLS_MEM
42  mem::increment(s_class().c_str());
43 #endif
44  }
45  virtual ~histo() {
46 #ifdef TOOLS_MEM
47  mem::decrement(s_class().c_str());
48 #endif
49  }
50 protected:
51  histo(const histo& a_from)
52  :m_reader(a_from.m_reader)
53  {
54 #ifdef TOOLS_MEM
55  mem::increment(s_class().c_str());
56 #endif
57  }
58  histo& operator=(const histo&){return *this;}
59 public:
60  std::istream& istrm() {return m_reader;}
61 public:
62  bool read(std::ostream& a_out,std::string& a_class,void*& a_obj,bool a_verbose = false) {
63  a_class.clear();
64  a_obj = 0;
65 
66  std::streampos file_sz = 0;
67  m_reader.clear();
68  m_reader.seekg(0,std::ios::end);
69  file_sz = m_reader.tellg();
70  m_reader.seekg(0,std::ios::beg);
71  if(!file_sz) {
72  a_out << "tools::rcsv::histo::read : stream is empty." << std::endl;
73  return false;
74  }
75  if(a_verbose) a_out << "file size is " << file_sz << std::endl;
76 
78  hdata.m_dimension = 0;
79  hdata.m_bin_number = 0;
80 
81  bool is_profile = false;
82  bool _cut_v = false;
83  double _min_v = 0;
84  double _max_v = 0;
85 
86  // read commented header :
87  std::string _class;
89  {std::string line;
90  while(read_header_line(m_reader,file_sz,line)) {
91 // a_out << "line : " << sout(s) << std::endl;
92  std::vector<std::string> _words;
93  words(line," ",false,_words);
94  if(!_words.size()) {
95  a_out << "tools::rcsv::histo::read : syntax error : empty header line." << std::endl;
96  return false;
97  }
98  if((_words[0]=="#class")) {
99  if(_words.size()!=2) {
100  a_out << "tools::rcsv::histo::read : syntax error in " << sout(line) << std::endl;
101  return false;
102  }
103  _class = _words[1];
104  } else if(_words[0]=="#title") {
105  if(_words.size()<1) {
106  a_out << "tools::rcsv::histo::read : syntax error in " << sout(line) << std::endl;
107  return false;
108  }
109  if(_words.size()==1) {
110  hdata.m_title.clear();
111  } else {
112  std::string::size_type pos = line.find(_words[0]);
113  pos += _words[0].size()+1;
114  hdata.m_title = line.substr(pos,line.size()-pos);
115  }
116  } else if(_words[0]=="#dimension") {
117  if(_words.size()!=2) {
118  a_out << "tools::rcsv::histo::read : syntax error in " << sout(line) << std::endl;
119  return false;
120  }
121  to(_words[1],hdata.m_dimension);
122  } else if(_words[0]=="#annotation") {
123  if(_words.size()<2) {
124  a_out << "tools::rcsv::histo::read : syntax error in " << sout(line) << std::endl;
125  return false;
126  }
127  if(_words.size()==2) {
128  hdata.m_annotations[_words[1]] = std::string();
129  } else {
130  std::string::size_type pos = line.find(_words[1]);
131  pos += _words[1].size()+1;
132  hdata.m_annotations[_words[1]] = line.substr(pos,line.size()-pos);
133  }
134  } else if(_words[0]=="#axis") {
135  if(_words.size()<2) {
136  a_out << "tools::rcsv::histo::read : syntax error in " << sout(line) << std::endl;
137  return false;
138  }
139  if(_words[1]=="fixed") {
140  if(_words.size()!=5) {
141  a_out << "tools::rcsv::histo::read : syntax error in " << sout(line) << std::endl;
142  return false;
143  }
144  unsigned int number_of_bins;
145  if(!to(_words[2],number_of_bins)) {
146  a_out << "tools::rcsv::histo::read : syntax error in " << sout(line) << std::endl;
147  return false;
148  }
149  double minimum_value;
150  if(!to(_words[3],minimum_value)) {
151  a_out << "tools::rcsv::histo::read : syntax error in " << sout(line) << std::endl;
152  return false;
153  }
154  double maximum_value;
155  if(!to(_words[4],maximum_value)) {
156  a_out << "tools::rcsv::histo::read : syntax error in " << sout(line) << std::endl;
157  return false;
158  }
159  axis_t axis;
160  if(!axis.configure(number_of_bins,minimum_value,maximum_value)) {
161  a_out << "tools::rcsv::histo::read : bad axis values in line " << sout(line) << std::endl;
162  return false;
163  }
164  hdata.m_axes.push_back(axis);
165  } else if(_words[1]=="edges") {
166  std::vector<double> edges;
167  double value;
168  for(unsigned int index=2;index<_words.size();index++) {
169  if(!to(_words[index],value)) {
170  a_out << "tools::rcsv::histo::read : syntax error in " << sout(line) << std::endl;
171  return false;
172  }
173  edges.push_back(value);
174  }
175  axis_t axis;
176  if(!axis.configure(edges)) {
177  a_out << "tools::rcsv::histo::read : bad axis values in line " << sout(line) << std::endl;
178  return false;
179  }
180  hdata.m_axes.push_back(axis);
181  } else {
182  a_out << "tools::rcsv::histo::read : syntax error in " << sout(line) << std::endl;
183  return false;
184  }
185 
186  } else if(_words[0]=="#planes_Sxyw") {
187  std::vector<double> planes;
188  double value;
189  for(unsigned int index=1;index<_words.size();index++) {
190  if(!to(_words[index],value)) {
191  a_out << "tools::rcsv::histo::read : syntax error in " << sout(line) << std::endl;
192  return false;
193  }
194  planes.push_back(value);
195  }
196  hdata.m_in_range_plane_Sxyw = planes;
197 
198  } else if(_words[0]=="#bin_number") {
199  if(_words.size()!=2) {
200  a_out << "tools::rcsv::histo::read : syntax error in " << sout(line) << std::endl;
201  return false;
202  }
203  to(_words[1],hdata.m_bin_number);
204  } else if(_words[0]=="#cut_v") {
205  if(_words.size()!=2) {
206  a_out << "tools::rcsv::histo::read : syntax error in " << sout(line) << std::endl;
207  return false;
208  }
209  if(!to(_words[1],_cut_v)) {
210  a_out << "tools::rcsv::histo::read : syntax error in " << sout(line) << std::endl;
211  return false;
212  }
213  is_profile = true;
214  } else if(_words[0]=="#min_v") {
215  if(_words.size()!=2) {
216  a_out << "tools::rcsv::histo::read : syntax error in " << sout(line) << std::endl;
217  return false;
218  }
219  if(!to(_words[1],_min_v)) {
220  a_out << "tools::rcsv::histo::read : syntax error in " << sout(line) << std::endl;
221  return false;
222  }
223  } else if(_words[0]=="#max_v") {
224  if(_words.size()!=2) {
225  a_out << "tools::rcsv::histo::read : syntax error in " << sout(line) << std::endl;
226  return false;
227  }
228  if(!to(_words[1],_max_v)) {
229  a_out << "tools::rcsv::histo::read : syntax error in " << sout(line) << std::endl;
230  return false;
231  }
232  } else {
233  a_out << "tools::rcsv::histo::read : syntax error in " << sout(line) << std::endl;
234  return false;
235  }
236  }}
237 
238  if(a_verbose) {
239  a_out << "class " << _class << std::endl;
240  a_out << "title " << hdata.m_title << std::endl;
241  tools_mforcit(std::string,std::string,hdata.m_annotations,it) {
242  a_out << "annotation " << (*it).first << " " << sout((*it).second) << std::endl;
243  }
244  }
245 
246  if(!hdata.m_dimension) {
247  a_out << "tools::rcsv::histo::read : null dimension." << std::endl;
248  return false;
249  }
250 
251  // csv labels :
252  std::vector<std::string> labels;
253  {std::string line;
254  if(!read_line(m_reader,file_sz,line)) {
255  a_out << "tools::rcsv::histo::read :"
256  << " syntax error in " << sout(line)
257  << ". Can't read labels."
258  << std::endl;
259  return false;
260  }
261  if(a_verbose) a_out << "labels " << sout(line) << std::endl;
262  words(line,",",false,labels);}
263 
264  unsigned int valn = 3+2*hdata.m_dimension;
265 
266  if(is_profile) valn += 2;
267  std::vector<double> _bin_Svw;
268  std::vector<double> _bin_Sv2w;
269 
270  if(labels.size()!=valn) {
271  a_out << "tools::rcsv::histo::read :"
272  << " bad number of labels " << labels.size() << ". Expected " << valn << "."
273  << std::endl;
274  return false;
275  }
276 
277  // csv data (bins) :
278  {std::vector<double> vals;
279  unsigned int nline = 0;
280  std::vector<double> bin_Sxw(hdata.m_dimension);
281  std::vector<double> bin_Sx2w(hdata.m_dimension);
282  while(read_data_line(m_reader,file_sz,labels.size(),vals)) {
283 /*
284  for(unsigned int index=0;index<vals.size();index++) {
285  a_out << vals[index] << " ";
286  }
287  a_out << std::endl;
288 */
289  if(vals.size()!=valn) {
290  a_out << "tools::rcsv::histo::read :"
291  << " bad number of items in data line " << vals.size() << ". Expected " << valn << "."
292  << std::endl;
293  return false;
294  }
295  unsigned int ival = 0;
296  hdata.m_bin_entries.push_back(static_cast<unsigned int>(vals[ival++]));
297  hdata.m_bin_Sw.push_back(vals[ival++]);
298  hdata.m_bin_Sw2.push_back(vals[ival++]);
299  if(is_profile) {
300  _bin_Svw.push_back(vals[ival++]);
301  _bin_Sv2w.push_back(vals[ival++]);
302  }
303  {for(unsigned int iaxis=0;iaxis<hdata.m_dimension;iaxis++) {
304  bin_Sxw[iaxis] = vals[ival++];
305  bin_Sx2w[iaxis] = vals[ival++];
306  }}
307  hdata.m_bin_Sxw.push_back(bin_Sxw);
308  hdata.m_bin_Sx2w.push_back(bin_Sx2w);
309  nline++;
310  }
311  if(nline!=hdata.m_bin_number) {
312  a_out << "tools::rcsv::histo::read : bad data line number " << nline << ". Expected " << hdata.m_bin_number << "."
313  << std::endl;
314  return false;
315  }}
316 
317  if(hdata.m_axes.size()!=hdata.m_dimension) {
318  a_out << "tools::rcsv::histo::read : inconsistent axes data." << std::endl;
319  return false;
320  }
321 
322  hdata.m_axes[0].m_offset = 1;
323  {for(unsigned int iaxis=1;iaxis<hdata.m_dimension;iaxis++) {
324  hdata.m_axes[iaxis].m_offset = hdata.m_axes[iaxis-1].m_offset * (hdata.m_axes[iaxis-1].bins()+2);
325  }}
326 
327  hdata.update_fast_getters(); //important.
328 
330  if(is_profile) {
331  pdata.m_is_profile = true;
332  pdata.m_bin_Svw = _bin_Svw;
333  pdata.m_bin_Sv2w = _bin_Sv2w;
334  pdata.m_cut_v = _cut_v;
335  pdata.m_min_v = _min_v;
336  pdata.m_max_v = _max_v;
337  }
338 
339  if(_class==tools::histo::h1d::s_class()) {
340  if(hdata.m_dimension!=1) {
341  a_out << "tools::rcsv::histo::read :"
342  << " inconsistent dimension data."
343  << std::endl;
344  return false;
345  }
346  tools::histo::h1d* h = new tools::histo::h1d("",10,0,1);
347  h->copy_from_data(hdata);
348  //if(a_verbose) h->hprint(a_out);
349  if(a_verbose) {
350  a_out << "h1d : " << h->title()
351  << ", all entries " << h->all_entries()
352  << ", entries " << h->entries()
353  << ", mean " << h->mean() << ", rms " << h->rms()
354  << std::endl;
355  }
356  a_class = _class;
357  a_obj = h;
358 
359  } else if(_class==tools::histo::h2d::s_class()) {
360  if(hdata.m_dimension!=2) {
361  a_out << "tools::rcsv::histo::read :"
362  << " inconsistent dimension data."
363  << std::endl;
364  return false;
365  }
366  tools::histo::h2d* h = new tools::histo::h2d("",10,0,1,10,0,1);
367  h->copy_from_data(hdata);
368  //if(a_verbose) h->hprint(a_out);
369  if(a_verbose) {
370  a_out << "h2d : " << h->title()
371  << ", all entries " << h->all_entries()
372  << ", entries " << h->entries()
373  << ", mean_x " << h->mean_x() << ", rms_x " << h->rms_x()
374  << ", mean_y " << h->mean_y() << ", rms_y " << h->rms_y()
375  << std::endl;
376  }
377  a_class = _class;
378  a_obj = h;
379 
380  } else if(_class==tools::histo::h3d::s_class()) {
381  if(hdata.m_dimension!=3) {
382  a_out << "tools::rcsv::histo::read :"
383  << " inconsistent dimension data."
384  << std::endl;
385  return false;
386  }
387  tools::histo::h3d* h = new tools::histo::h3d("",10,0,1,10,0,1,10,0,1);
388  h->copy_from_data(hdata);
389  //if(a_verbose) h->hprint(a_out);
390  if(a_verbose) {
391  a_out << "h3d : " << h->title()
392  << ", all entries " << h->all_entries()
393  << ", entries " << h->entries()
394  << ", mean_x " << h->mean_x() << ", rms_x " << h->rms_x()
395  << ", mean_y " << h->mean_y() << ", rms_y " << h->rms_y()
396  << ", mean_z " << h->mean_z() << ", rms_z " << h->rms_z()
397  << std::endl;
398  }
399  a_class = _class;
400  a_obj = h;
401 
402  } else if(_class==tools::histo::p1d::s_class()) {
403  if(hdata.m_dimension!=1) {
404  a_out << "tools::rcsv::histo::read :"
405  << " inconsistent dimension data."
406  << std::endl;
407  return false;
408  }
409  tools::histo::p1d* h = new tools::histo::p1d("",10,0,1);
410  h->copy_from_data(pdata);
411  //if(a_verbose) h->hprint(a_out);
412  if(a_verbose) {
413  a_out << "p1d : " << h->title()
414  << ", all entries " << h->all_entries()
415  << ", entries " << h->entries()
416  << ", mean " << h->mean() << ", rms " << h->rms()
417  << std::endl;
418  }
419  a_class = _class;
420  a_obj = h;
421 
422  } else if(_class==tools::histo::p2d::s_class()) {
423  if(hdata.m_dimension!=2) {
424  a_out << "tools::rcsv::histo::read :"
425  << " inconsistent dimension data."
426  << std::endl;
427  return false;
428  }
429  tools::histo::p2d* h = new tools::histo::p2d("",10,0,1,10,0,1);
430  h->copy_from_data(pdata);
431  //if(a_verbose) h->hprint(a_out);
432  if(a_verbose) {
433  a_out << "p2d : " << h->title()
434  << ", all entries " << h->all_entries()
435  << ", entries " << h->entries()
436  << ", mean_x " << h->mean_x() << ", rms_x " << h->rms_x()
437  << ", mean_y " << h->mean_y() << ", rms_y " << h->rms_y()
438  << std::endl;
439  }
440  a_class = _class;
441  a_obj = h;
442 
443 /*
444  } else if(_class==tools::histo::h1df::s_class()) {
445  if(hdata.m_dimension!=1) {
446  a_out << "tools::rcsv::histo::read :"
447  << " inconsistent dimension data."
448  << std::endl;
449  return false;
450  }
451  tools::histo::h1df* h = new tools::histo::h1df("",10,0,1);
452  h->copy_from_data(hdata);
453  //return h; //give ownership to caller.
454  if(a_verbose) h->hprint(a_out);
455 */
456 
457  } else {
458  a_out << "tools::rcsv::histo::read : unknown class " << sout(_class) << std::endl;
459  return false;
460  }
461 
462  return true;
463  }
464 protected:
465  static bool read_line(std::istream& a_reader,std::streampos a_sz,std::string& a_s){
466  a_s.clear();
467  char c;
468  while(true) {
469  if(a_reader.tellg()>=a_sz) {a_s.clear();return false;}
470  a_reader.get(c);
471  if(c==CR()) continue;
472  if(c==LF()) break; //eol.
473  a_s += c;
474  }
475  return true;
476  }
477 
478  static bool read_header_line(std::istream& a_reader,std::streampos a_sz,std::string& a_s){
479  //we should be at bol.
480  //ret true = we had a commented line, false : a data line or nothing.
481  if(a_reader.tellg()>=a_sz) {a_s.clear();return false;}
482  char c;
483  a_reader.get(c);
484  a_reader.putback(c);
485  if(c!='#') {a_s.clear();return false;}
486  return read_line(a_reader,a_sz,a_s);
487  }
488 
489  static bool _read(std::istream& a_reader,double& a_v) {
490  a_reader >> a_v;
491  if(a_reader.tellg()==std::streampos(-1)) {a_v = 0;return false;}
492  //std::cout << "debug : _read(double) " << a_v << std::endl;
493  return true;
494  }
495 
496  static bool read_data_line(std::istream& a_reader,std::streampos a_sz,size_t a_number,std::vector<double>& a_vals) {
497  a_vals.clear();
498  for(size_t index=0;index<a_number;index++) {
499  double v;
500  if(!_read(a_reader,v)) return false;
501  a_vals.push_back(v);
502  if(index==(a_number-1)) { //read up to LF()
503  char c;
504  while(true){
505  if(a_reader.tellg()>=a_sz) break;
506  a_reader.get(c);
507  if(c==LF()) break;
508  }
509  } else { //read sep :
510  char sep;
511  a_reader.get(sep);
512  }
513  }
514  return true;
515  }
516 protected:
517  std::istream& m_reader;
518 };
519 
520 }}
521 
522 #endif
h2d
tools::histo::p1d
Definition: p1d:12
tools::histo::b2::rms_x
TC rms_x() const
Definition: b2:37
tools::histo::h3d::s_class
static const std::string & s_class()
Definition: h3d:15
tools::value
Definition: value:18
tools::histo::profile_data::m_is_profile
bool m_is_profile
Definition: profile_data:73
tools::histo::histo_data::m_annotations
std::map< std::string, std::string > m_annotations
Definition: histo_data:184
tools::histo::b3::rms_x
TC rms_x() const
Definition: b3:52
tools::histo::histo_data::update_fast_getters
void update_fast_getters()
Definition: histo_data:103
tools::histo::h1d
Definition: h1d:14
tools::histo::histo_data::m_bin_Sx2w
std::vector< std::vector< TC > > m_bin_Sx2w
Definition: histo_data:179
tools::histo::p1d::s_class
static const std::string & s_class()
Definition: p1d:15
tools::histo::h2d::s_class
static const std::string & s_class()
Definition: h2d:15
p1d
tools::histo::axis< double, unsigned int >
tools::histo::p2d
Definition: p2d:12
tools::histo::histo_data::m_bin_entries
std::vector< TN > m_bin_entries
Definition: histo_data:175
tools::rcsv::histo
Definition: rcsv_histo:29
tools::histo::b3::mean_x
TC mean_x() const
Definition: b3:37
tools::rcsv::histo::read_line
static bool read_line(std::istream &a_reader, std::streampos a_sz, std::string &a_s)
Definition: rcsv_histo:465
tools::histo::histo_data::m_bin_Sw
std::vector< TW > m_bin_Sw
Definition: histo_data:176
tools::histo::b2::mean_x
TC mean_x() const
Definition: b2:27
tools::histo::profile_data::m_bin_Sv2w
std::vector< TV > m_bin_Sv2w
Definition: profile_data:75
tools::rcsv::histo::istrm
std::istream & istrm()
Definition: rcsv_histo:60
tools::histo::h2d
Definition: h2d:12
tools::histo::b3::mean_z
TC mean_z() const
Definition: b3:47
tools::histo::b3::mean_y
TC mean_y() const
Definition: b3:42
tools::histo::profile_data::m_min_v
TV m_min_v
Definition: profile_data:77
tools::rcsv::histo::histo
histo(std::istream &a_reader)
Definition: rcsv_histo:38
tools::histo::b2::mean_y
TC mean_y() const
Definition: b2:32
tools::histo::b3::rms_y
TC rms_y() const
Definition: b3:58
tools::histo::profile_data::m_cut_v
bool m_cut_v
Definition: profile_data:76
chars
tools::histo::histo_data::m_title
std::string m_title
Definition: histo_data:171
tools::histo::profile_data
Definition: profile_data:13
mem
tools::histo::profile_data::m_bin_Svw
std::vector< TV > m_bin_Svw
Definition: profile_data:74
sto
tools::histo::p2d::s_class
static const std::string & s_class()
Definition: p2d:15
h1d
tools::sout
Definition: sout:17
tools::rcsv::histo::read
bool read(std::ostream &a_out, std::string &a_class, void *&a_obj, bool a_verbose=false)
Definition: rcsv_histo:62
tools::histo::p2::copy_from_data
void copy_from_data(const pd_t &a_from)
Definition: p2:101
tools::histo::h3::copy_from_data
void copy_from_data(const hd_t &a_from)
Definition: h3:34
tools::histo::p1::copy_from_data
void copy_from_data(const pd_t &a_from)
Definition: p1:109
tools::histo::b1::rms
TC rms() const
Definition: b1:37
tools::rcsv::histo::histo
histo(const histo &a_from)
Definition: rcsv_histo:51
tools::histo::histo_data::m_bin_Sxw
std::vector< std::vector< TC > > m_bin_Sxw
Definition: histo_data:178
h3d
tools::histo::histo_data< double, unsigned int, unsigned int, double >
tools::rcsv::histo::~histo
virtual ~histo()
Definition: rcsv_histo:45
tools::histo::base_histo::all_entries
TN all_entries() const
Definition: base_histo:95
tools::to
std::vector< std::string > to(int a_argc, char **a_argv)
Definition: args:507
tools::histo::histo_data::m_axes
std::vector< axis_t > m_axes
Definition: histo_data:181
tools::histo::h1d::s_class
static const std::string & s_class()
Definition: h1d:17
tools::CR
char CR()
Definition: chars:17
tools::histo::h1::copy_from_data
void copy_from_data(const hd_t &a_from)
Definition: h1:40
tools::histo::base_histo::title
const std::string & title() const
Definition: base_histo:87
tools
inlined C code : ///////////////////////////////////
Definition: aida_ntuple:26
tools::rcsv::histo::operator=
histo & operator=(const histo &)
Definition: rcsv_histo:58
tools::words
void words(const std::string &a_string, const std::string &a_sep, bool a_take_empty, std::vector< std::string > &a_words, bool a_clear=true)
Definition: words:12
tools_mforcit
#define tools_mforcit(a__K, a__V, a__m, a__it)
Definition: forit:49
words
tools::waxml::end
void end(std::ostream &a_writer)
Definition: begend:31
tools::histo::histo_data::m_bin_Sw2
std::vector< TW > m_bin_Sw2
Definition: histo_data:177
tools::rcsv::histo::_read
static bool _read(std::istream &a_reader, double &a_v)
Definition: rcsv_histo:489
p2d
tools::histo::b3::rms_z
TC rms_z() const
Definition: b3:64
tools::rcsv::histo::m_reader
std::istream & m_reader
Definition: rcsv_histo:517
tools::rroot::axis_t
histo::axis< double, unsigned int > axis_t
Definition: THistogram:19
tools::histo::h3d
Definition: h3d:12
forit
tools::histo::h2::copy_from_data
void copy_from_data(const hd_t &a_from)
Definition: h2:34
tools::line
Definition: line:13
tools::sep
const std::string & sep()
Definition: sep:11
tools::histo::histo_data::m_bin_number
TO m_bin_number
Definition: histo_data:174
tools::histo::histo_data::m_in_range_plane_Sxyw
std::vector< TC > m_in_range_plane_Sxyw
Definition: histo_data:183
tools::histo::profile_data::m_max_v
TV m_max_v
Definition: profile_data:78
tools::LF
char LF()
Definition: chars:16
tools::histo::base_histo::entries
TN entries() const
Definition: base_histo:92
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::rcsv::histo::read_header_line
static bool read_header_line(std::istream &a_reader, std::streampos a_sz, std::string &a_s)
Definition: rcsv_histo:478
sout
tools::rcsv::histo::read_data_line
static bool read_data_line(std::istream &a_reader, std::streampos a_sz, size_t a_number, std::vector< double > &a_vals)
Definition: rcsv_histo:496
tools::histo::b2::rms_y
TC rms_y() const
Definition: b2:43