ATLAS Offline Software
validatefunctions.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 #ifndef VALIDATEFUNCTIONS_H
6 #define VALIDATEFUNCTIONS_H
7 
8 #include <string>
9 #include "TH1.h"
10 #include "TH2.h"
11 #include "TProfile.h"
12 #include "TProfile2D.h"
13 #include "TObjString.h"
14 #include "THashList.h"
15 #include "LWHists/LWHist1D.h"
16 #include "LWHists/LWHist2D.h"
17 #include "LWHists/TProfile_LW.h"
18 #include "LWHists/TProfile2D_LW.h"
19 #include <iostream>
20 #include <sstream>
21 #include <cmath>
22 #include <cassert>
23 #include <vector>
24 #include <utility>
25 #include <iomanip>
26 
27 namespace HistValFunctions {
28 
29  template <class T> inline std::string toString(const T& t) { std::ostringstream s;s<<t;return s.str(); }
30  template <class T1,class T2>
31  inline std::string toString(const std::pair<T1,T2>& p) {
32  std::ostringstream s;
33  s<<"("<<toString(p.first)<<", "<<toString(p.second)<<")";
34  return s.str();
35  }
36  template <class T>
37  inline std::string toString(const std::vector<T>& v) {
38  std::ostringstream s;
39  s<<"[ ";
40  for (unsigned i=0;i<v.size();++i)
41  s<<(i==0?"":", ")<<toString(v.at(i));
42  s<<" ]";
43  return s.str();
44  }
45 
46  inline bool floatCompat(const double& val1, const double& val2, const double& eps)
47  {
48  return (fabs(val1-val2)/(1.0+std::max(fabs(val1),fabs(val2)))<eps) || ((val1!=val1)&&(val2!=val2));
49  }
50 
51  inline bool compatible(const double& val1, const double& val2)
52  {
53  return floatCompat(val1,val2,1.0e-5);
54  }
55 
56  template<class T1, class T2>
57  inline bool compatible(const std::pair<T1,T2>& val1, const std::pair<T1,T2>& val2)
58  {
59  return compatible(val1.first,val2.first) && compatible(val1.second,val2.second);
60  }
61 
62  template<class T>
63  inline bool compatible(const std::vector<T>& val1, const std::vector<T>& val2)
64  {
65  const unsigned n(val2.size());
66  if (val1.size()!=n)
67  return false;
68  for (unsigned i=0;i<n;++i)
69  if (!compatible(val1[i],val2[i]))
70  return false;
71  return true;
72  }
73 
74  [[noreturn]]
75  void testfailed(const std::string& testname);
76 
77  template <class T1, class T2>
78  inline void testfailed(const std::string& testname, T1 val1, T2 val2)
79  {
80  std::cout<<"Value in h1 ("<<typeid(T1).name()<<"): ->"<<std::setprecision(14)<<val1<<std::setprecision(6)<<"<-"<<std::endl;
81  std::cout<<"Value in h2 ("<<typeid(T2).name()<<"): ->"<<std::setprecision(14)<<val2<<std::setprecision(6)<<"<-"<<std::endl;
82  testfailed(testname);
83  }
84  template <class T1, class T2>
85  inline void test(const std::string& testname, T1 val1, T2 val2)
86  {
87  if (val1!=val2)
88  testfailed(testname,val1,val2);
89  }
90  void test(const std::string& testname, double val1, double val2);
91  void test(const std::string& testname, const char* val1, const char* val2);
92 
93  void testTypes();
94 
95  class TH1_FieldsAccess : public TH1 {
96  public:
97  Int_t& access_fNcells() { return fNcells; }
98  Int_t& access_fDimension() { return fDimension; }
99  Double_t& access_fEntries() { return fEntries; }
100  Double_t& access_fTsumw() { return fTsumw; }
101  Double_t& access_fTsumw2() { return fTsumw2; }
102  Double_t& access_fTsumwx() { return fTsumwx; }
103  Double_t& access_fTsumwx2() { return fTsumwx2; }
104  Double_t& access_fMaximum() { return fMaximum; }
105  Double_t& access_fMinimum() { return fMinimum; }
106  Double_t& access_fNormFactor() { return fNormFactor; }
107 
108  Int_t access_fNcells() const { return fNcells; }
109  Int_t access_fDimension() const { return fDimension; }
110  Double_t access_fEntries() const { return fEntries; }
111  Double_t access_fTsumw() const { return fTsumw; }
112  Double_t access_fTsumw2() const { return fTsumw2; }
113  Double_t access_fTsumwx() const { return fTsumwx; }
114  Double_t access_fTsumwx2() const { return fTsumwx2; }
115  Double_t access_fMaximum() const { return fMaximum; }
116  Double_t access_fMinimum() const { return fMinimum; }
117  Double_t access_fNormFactor() const { return fNormFactor; }
118 
119  static void set_fgAddDirectory(bool b) { fgAddDirectory = b; }
120  };
121 
122  class TH2_FieldsAccess : public TH2 {
123  public:
124  Double_t& access_fTsumwy() { return fTsumwy; }
125  Double_t& access_fTsumwy2() { return fTsumwy2; }
126  Double_t& access_fTsumwxy() { return fTsumwxy; }
127  Double_t& access_fScalefactor() { return fScalefactor; }
128 
129  Double_t access_fTsumwy() const { return fTsumwy; }
130  Double_t access_fTsumwy2() const { return fTsumwy2; }
131  Double_t access_fTsumwxy() const { return fTsumwxy; }
132  Double_t access_fScalefactor() const { return fScalefactor; }
133  };
135  public:
136  Double_t& access_fTsumwy() { return fTsumwy; }
137  Double_t& access_fTsumwy2() { return fTsumwy2; }
138 
139  Double_t access_fTsumwy() const { return fTsumwy; }
140  Double_t access_fTsumwy2() const { return fTsumwy2; }
141  };
143  public:
144  Double_t& access_fTsumwz() { return fTsumwz; }
145  Double_t& access_fTsumwz2() { return fTsumwz2; }
146 
147  Double_t access_fTsumwz() const { return fTsumwz; }
148  Double_t access_fTsumwz2() const { return fTsumwz2; }
149  };
150 
151  //____________________________________________________________________
152  void compareFields(TH1 * t1, TH1 * t2);
153 
154  //____________________________________________________________________
155  // Disable ubsan to turn off warnings about casting TH1F to TH1_FieldsAccess.
156  template <class TH, class THLW>
157  static inline void compareMetaData NO_SANITIZE_UNDEFINED (const TH* hroot, THLW * hlw, bool ignorename = false)
158  {
159  assert (hroot&&hlw);
160  if (!hroot||!hlw)
161  return;
162  //TH1 fields:
163  if (!ignorename) {
164  if (hroot->GetName()[0]!=':') {
165  test("GetName()",hroot->GetName(), hlw->GetName());
166  }
167  //"if name starts with 't' it might begin with "::trigger::" => ignore
168  }
169  assert(hroot->GetTitle());
170  assert(hlw->GetTitle());
171  test("GetTitle()",hroot->GetTitle(), hlw->GetTitle());
172  int nbinsx=int(hroot->GetNbinsX());
173  test("GetNbinsX()",int(hroot->GetNbinsX()), int(hlw->GetNbinsX()));
174  test("Integral()",hroot->Integral(), hlw->Integral());
175 
176  test("GetXaxis()->GetBinCenter(-2)",hroot->GetXaxis()->GetBinCenter(-2),hlw->GetXaxis()->GetBinCenter(-2));
177  test("GetXaxis()->GetBinCenter(0)",hroot->GetXaxis()->GetBinCenter(0),hlw->GetXaxis()->GetBinCenter(0));
178  test("GetXaxis()->GetBinCenter(1)",hroot->GetXaxis()->GetBinCenter(1),hlw->GetXaxis()->GetBinCenter(1));
179  test("GetXaxis()->GetBinCenter(nbinsx/2)",hroot->GetXaxis()->GetBinCenter(nbinsx/2),hlw->GetXaxis()->GetBinCenter(nbinsx/2));
180  test("GetXaxis()->GetBinCenter(nbinsx-2)",hroot->GetXaxis()->GetBinCenter(nbinsx-2),hlw->GetXaxis()->GetBinCenter(nbinsx-2));
181  test("GetXaxis()->GetBinCenter(nbinsx-1)",hroot->GetXaxis()->GetBinCenter(nbinsx-1),hlw->GetXaxis()->GetBinCenter(nbinsx-1));
182  test("GetXaxis()->GetBinCenter(nbinsx)",hroot->GetXaxis()->GetBinCenter(nbinsx),hlw->GetXaxis()->GetBinCenter(nbinsx));
183  test("GetXaxis()->GetBinCenter(nbinsx+1)",hroot->GetXaxis()->GetBinCenter(nbinsx+1),hlw->GetXaxis()->GetBinCenter(nbinsx+1));
184  test("GetXaxis()->GetBinCenter(nbinsx+2)",hroot->GetXaxis()->GetBinCenter(nbinsx+2),hlw->GetXaxis()->GetBinCenter(nbinsx+2));
185 
186  if (dynamic_cast<const TH2*>(hroot)) {
187  test("GetYaxis()->GetBinCenter(-200)",hroot->GetYaxis()->GetBinCenter(-200),hlw->GetYaxis()->GetBinCenter(-200));
188  test("GetYaxis()->GetBinCenter(0)",hroot->GetYaxis()->GetBinCenter(0),hlw->GetYaxis()->GetBinCenter(0));
189  test("GetYaxis()->GetBinCenter(1)",hroot->GetYaxis()->GetBinCenter(1),hlw->GetYaxis()->GetBinCenter(1));
190  test("GetYaxis()->GetBinCenter(17)",hroot->GetYaxis()->GetBinCenter(17),hlw->GetYaxis()->GetBinCenter(17));
191  test("GetYaxis()->GetBinCenter(100)",hroot->GetYaxis()->GetBinCenter(100),hlw->GetYaxis()->GetBinCenter(100));
192  test("GetYaxis()->GetBinCenter(500)",hroot->GetYaxis()->GetBinCenter(500),hlw->GetYaxis()->GetBinCenter(500));
193  }
194  //Protected TH1 fields:
195  const TH1_FieldsAccess * hroot_1daccess(static_cast<const TH1_FieldsAccess*>(static_cast<const TH1*>(hroot)));
196  test("Entries",hroot_1daccess->access_fEntries(), hlw->GetEntries());
197 
198  if (dynamic_cast<const TH2*>(hroot)) {
199  const TH2* hroot2d = static_cast<const TH2*>(static_cast<const TH1*>(hroot));
200  const LWHist2D * hlw2d = dynamic_cast<const LWHist2D *>(hlw);
201  if (hlw2d) {
202  test("GetNbinsY()",int(hroot2d->GetNbinsY()), int(hlw2d->GetNbinsY()));
203  const TH1_FieldsAccess * hroot_1daccess(static_cast<const TH1_FieldsAccess*>(static_cast<const TH1*>(hroot2d)));
204  const TH2_FieldsAccess * hroot_2daccess(static_cast<const TH2_FieldsAccess*>(hroot2d));
205  double sumW, sumW2, sumWX, sumWX2;
206  double sumWY, sumWY2, sumWXY;
207  hlw2d->getSums(sumW, sumW2, sumWX, sumWX2,sumWY, sumWY2, sumWXY);
208  test("sumw",hroot_1daccess->access_fTsumw(), sumW);
209  test("sumw2",hroot_1daccess->access_fTsumw2(), sumW2);
210  test("sumwx",hroot_1daccess->access_fTsumwx(), sumWX);
211  test("sumwx2",hroot_1daccess->access_fTsumwx2(), sumWX2);
212  test("sumwy",hroot_2daccess->access_fTsumwy(), sumWY);
213  test("sumwy2",hroot_2daccess->access_fTsumwy2(), sumWY2);
214  test("sumwxy",hroot_2daccess->access_fTsumwxy(), sumWXY);
215  } else {
216  const TProfile2D_LW * hlwprof2d = dynamic_cast<const TProfile2D_LW *>(hlw);
217  const TProfile2D* hrootprof2d = static_cast<const TProfile2D*>(static_cast<const TH1*>(hroot));
218  assert(hlwprof2d);
219  assert(hrootprof2d);
220  test("GetNbinsY()",int(hrootprof2d->GetNbinsY()), int(hlwprof2d->GetNbinsY()));
221  const TH1_FieldsAccess * hroot_1daccess(static_cast<const TH1_FieldsAccess*>(static_cast<const TH1*>(hroot2d)));
222  const TH2_FieldsAccess * hroot_2daccess(static_cast<const TH2_FieldsAccess*>(hroot2d));
223  const TProfile2D_FieldsAccess * hroot_prof2daccess(static_cast<const TProfile2D_FieldsAccess*>(hroot2d));
224  double sumW, sumW2, sumWX, sumWX2;
225  double sumWY, sumWY2, sumWXY;
226  double sumWZ, sumWZ2;
227  hlwprof2d->getSums(sumW, sumW2, sumWX, sumWX2,sumWY, sumWY2, sumWXY,sumWZ, sumWZ2);
228  test("sumw",hroot_1daccess->access_fTsumw(), sumW);
229  test("sumw2",hroot_1daccess->access_fTsumw2(), sumW2);
230  test("sumwx",hroot_1daccess->access_fTsumwx(), sumWX);
231  test("sumwx2",hroot_1daccess->access_fTsumwx2(), sumWX2);
232  test("sumwy",hroot_2daccess->access_fTsumwy(), sumWY);
233  test("sumwy2",hroot_2daccess->access_fTsumwy2(), sumWY2);
234  test("sumwxy",hroot_2daccess->access_fTsumwxy(), sumWXY);
235  test("sumwz",hroot_prof2daccess->access_fTsumwz(), sumWZ);
236  test("sumwz2",hroot_prof2daccess->access_fTsumwz2(), sumWZ2);
237  }
238  } else {
239  const LWHist1D * hlw1d = dynamic_cast<const LWHist1D *>(hlw);
240  if (hlw1d) {
241  double sumW, sumW2, sumWX, sumWX2;
242  hlw1d->getSums(sumW, sumW2, sumWX, sumWX2);
243  test("sumw",hroot_1daccess->access_fTsumw(), sumW);
244  test("sumw2",hroot_1daccess->access_fTsumw2(), sumW2);
245  test("sumwx",hroot_1daccess->access_fTsumwx(), sumWX);
246  test("sumwx2",hroot_1daccess->access_fTsumwx2(), sumWX2);
247  } else {
248  const TProfile_LW * hlwprof = dynamic_cast<const TProfile_LW *>(hlw);
249  assert(hlwprof);
250  const TProfile_FieldsAccess * hroot_profileaccess(static_cast<const TProfile_FieldsAccess*>(static_cast<const TH1*>(hroot)));
251  double sumW, sumW2, sumWX, sumWX2,sumWY, sumWY2;
252  hlwprof->getSums(sumW, sumW2, sumWX, sumWX2,sumWY, sumWY2);
253  test("sumw",hroot_1daccess->access_fTsumw(), sumW);
254  test("sumw2",hroot_1daccess->access_fTsumw2(), sumW2);
255  test("sumwx",hroot_1daccess->access_fTsumwx(), sumWX);
256  test("sumwx2",hroot_1daccess->access_fTsumwx2(), sumWX2);
257  test("sumwy",hroot_profileaccess->access_fTsumwy(), sumWY);
258  test("sumwy2",hroot_profileaccess->access_fTsumwy2(), sumWY2);
259  }
260  }
261  //Fixme: add other stuff as necessary...
262 
263  HistValFunctions::test("[TH1-level] GetMarkerColor()",hroot->GetMarkerColor(), hlw->GetMarkerColor());
264  HistValFunctions::test("[TH1-level] GetMarkerStyle()",hroot->GetMarkerStyle(), hlw->GetMarkerStyle());
265  HistValFunctions::test("[TH1-level] GetMarkerSize()",hroot->GetMarkerSize(), hlw->GetMarkerSize());
266 
267 
268  //Bin labels:
269 
270  TListIter next1(hroot->GetXaxis()->GetLabels());
271  TObjString *obj1;
272  while ((obj1=(TObjString*)next1())) {
273  int bin1 = obj1->GetUniqueID();
274  assert(bin1>=0);
275  unsigned bin = static_cast<unsigned>(bin1);
276  const std::string label(obj1->GetString().Data());
277  const char * label_lw = hlw->GetXaxis()->GetBinLabel(bin);
278  if (!label_lw)
279  testfailed("GetXaxis()->GetBinLabel(..) (NULL)");
280  test("GetXaxis()->GetBinLabel(..)",label.c_str(),label_lw);
281  }
282  TListIter next2(hroot->GetYaxis()->GetLabels());
283  TObjString *obj2;
284  while ((obj2=(TObjString*)next2())) {
285  int bin1 = obj2->GetUniqueID();
286  assert(bin1>=0);
287  unsigned bin = static_cast<unsigned>(bin1);
288  std::string label(obj2->GetString().Data());
289  const char * label_lw = hlw->GetYaxis()->GetBinLabel(bin);
290  if (!label_lw)
291  testfailed("GetYaxis()->GetBinLabel(..) (NULL)");
292  test("GetYaxis()->GetBinLabel(..)",label.c_str(),label_lw);
293  }
294  }
295 
296  //____________________________________________________________________
297  template <class T1, class T2>
298  static void compareBinContents_1D(const T1* t1, const T2 * t2, bool relaxedErrorComparison = false)
299  {
300  test("GetNbinsX()",int(t1->GetNbinsX()), int(t2->GetNbinsX()));
301  int n = t1->GetNbinsX();
302 // for (int i=0;i<=n+1;++i) {
303 // std::cout<<"-----> Test: ibin="<<i<<", controot: "<<t1->GetBinContent(i)<<", contlw: "<<t2->GetBinContent(i)<<std::endl;
304 // std::cout<<"-----> Test: ibin="<<i<<", errroot: "<<t1->GetBinError(i)<<", errlw: "<<t2->GetBinError(i)<<std::endl;
305 // }
306  for (int i=0;i<=n+1;++i) {
307  if (!compatible(t1->GetBinContent(i),t2->GetBinContent(i))) {
308  std::ostringstream s;
309  s << "["<<typeid(T1).name()<<" vs. "<<typeid(T2).name()<<"] GetBinContent("<<i<<", nbins="<<n<<", ninternalbins="<<n+2<<")";
310  test(s.str(),t1->GetBinContent(i),t2->GetBinContent(i));
311  }
312  }
313  for (int i=0;i<=n+1;++i) {
314  if (!(relaxedErrorComparison
315  ?floatCompat(t1->GetBinError(i),t2->GetBinError(i),1.0e-3)
316  :compatible(t1->GetBinError(i),t2->GetBinError(i)))) {
317  std::ostringstream s;
318  s << "["<<typeid(T1).name()<<" vs. "<<typeid(T2).name()<<"] GetBinError("<<i<<", nbins="<<n<<", ninternalbins="<<n+2<<")";
319  test(s.str(),t1->GetBinError(i),t2->GetBinError(i));
320  }
321  }
322  }
323  //____________________________________________________________________
324  template <class T1, class T2>
325  static void compareBinContents_2D(const T1* t1, const T2 * t2, bool relaxedErrorComparison = false)
326  {
327  assert(t1);
328  assert(t2);
329  test("GetNbinsX()",int(t1->GetNbinsX()), int(t2->GetNbinsX()));
330  test("GetNbinsY()",int(t1->GetNbinsY()), int(t2->GetNbinsY()));
331  const int nx = t1->GetNbinsX();
332  const int ny = t1->GetNbinsY();
333  for (int ix=0;ix<=nx+1;++ix)
334  for (int iy=0;iy<=ny+1;++iy) {
335  if (!compatible(t1->GetBinContent(ix,iy),t2->GetBinContent(ix,iy))) {
336  std::ostringstream s;
337  s << "GetBinContent("<<ix<<", "<<iy<<")";
338  test(s.str(),t1->GetBinContent(ix,iy),t2->GetBinContent(ix,iy));
339  }
340  }
341  for (int ix=0;ix<=nx+1;++ix)
342  for (int iy=0;iy<=ny+1;++iy) {
343  if (!(relaxedErrorComparison
344  ?floatCompat(t1->GetBinError(ix,iy),t2->GetBinError(ix,iy),1.0e-3)
345  :compatible(t1->GetBinError(ix,iy),t2->GetBinError(ix,iy)))) {
346  std::ostringstream s;
347  s << "GetBinError("<<ix<<", "<<iy<<")";
348  test(s.str(),t1->GetBinError(ix,iy),t2->GetBinError(ix,iy));
349  }
350  }
351  }
352 
353 }
354 
355 #endif
HistValFunctions::NO_SANITIZE_UNDEFINED
void compareFields NO_SANITIZE_UNDEFINED(TH1 *t1, TH1 *t2)
Definition: validatefunctions.cxx:45
HistValFunctions::TH2_FieldsAccess::access_fScalefactor
Double_t & access_fScalefactor()
Definition: validatefunctions.h:127
HistValFunctions::TH1_FieldsAccess::access_fMaximum
Double_t access_fMaximum() const
Definition: validatefunctions.h:115
HistValFunctions::floatCompat
bool floatCompat(const double &val1, const double &val2, const double &eps)
Definition: validatefunctions.h:46
HistValFunctions::TH1_FieldsAccess::access_fTsumwx
Double_t & access_fTsumwx()
Definition: validatefunctions.h:102
HistValFunctions
Definition: validatefunctions.cxx:8
HistValFunctions::TH1_FieldsAccess::access_fMaximum
Double_t & access_fMaximum()
Definition: validatefunctions.h:104
python.SystemOfUnits.s
int s
Definition: SystemOfUnits.py:131
python.PerfMonSerializer.p
def p
Definition: PerfMonSerializer.py:743
max
#define max(a, b)
Definition: cfImp.cxx:41
HistValFunctions::TProfile_FieldsAccess::access_fTsumwy2
Double_t access_fTsumwy2() const
Definition: validatefunctions.h:140
CaloCellPos2Ntuple.int
int
Definition: CaloCellPos2Ntuple.py:24
HistValFunctions::TH1_FieldsAccess::access_fTsumw
Double_t & access_fTsumw()
Definition: validatefunctions.h:100
HistValFunctions::TH1_FieldsAccess::access_fTsumw
Double_t access_fTsumw() const
Definition: validatefunctions.h:111
PlotCalibFromCool.label
label
Definition: PlotCalibFromCool.py:78
HistValFunctions::TH1_FieldsAccess::access_fTsumwx2
Double_t & access_fTsumwx2()
Definition: validatefunctions.h:103
HistValFunctions::TH1_FieldsAccess::access_fMinimum
Double_t access_fMinimum() const
Definition: validatefunctions.h:116
HistValFunctions::TProfile2D_FieldsAccess::access_fTsumwz2
Double_t & access_fTsumwz2()
Definition: validatefunctions.h:145
ALFA_EventTPCnv_Dict::t1
std::vector< ALFA_RawDataCollection_p1 > t1
Definition: ALFA_EventTPCnvDict.h:43
TProfile2D
Definition: rootspy.cxx:531
bin
Definition: BinsDiffFromStripMedian.h:43
LWHist1D.h
ReadCellNoiseFromCoolCompare.obj2
obj2
Definition: ReadCellNoiseFromCoolCompare.py:303
HistValFunctions::TH1_FieldsAccess::access_fNormFactor
Double_t & access_fNormFactor()
Definition: validatefunctions.h:106
TProfile_LW.h
LWHist1D
Definition: LWHist1D.h:23
HistValFunctions::compareFields
void compareFields(TH1 *t1, TH1 *t2)
HistValFunctions::TProfile_FieldsAccess::access_fTsumwy
Double_t access_fTsumwy() const
Definition: validatefunctions.h:139
HistValFunctions::TH1_FieldsAccess::access_fNcells
Int_t & access_fNcells()
Definition: validatefunctions.h:97
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
LWHist2D::GetNbinsY
virtual unsigned GetNbinsY() const =0
TProfile_LW
Definition: TProfile_LW.h:24
HistValFunctions::TH1_FieldsAccess::set_fgAddDirectory
static void set_fgAddDirectory(bool b)
Definition: validatefunctions.h:119
HistValFunctions::compatible
bool compatible(const double &val1, const double &val2)
Definition: validatefunctions.h:51
HistValFunctions::TH1_FieldsAccess::access_fTsumwx2
Double_t access_fTsumwx2() const
Definition: validatefunctions.h:114
HistValFunctions::TH1_FieldsAccess::access_fNcells
Int_t access_fNcells() const
Definition: validatefunctions.h:108
HistValFunctions::TH1_FieldsAccess::access_fTsumw2
Double_t access_fTsumw2() const
Definition: validatefunctions.h:112
HistValFunctions::testTypes
void testTypes()
Definition: validatefunctions.cxx:16
TProfile_LW::getSums
void getSums(double &sumW, double &sumW2, double &sumWX, double &sumWX2, double &sumWY, double &sumWY2) const
Definition: TProfile_LW.cxx:257
HistValFunctions::test
void test(const std::string &testname, double val1, double val2)
Definition: validatefunctions.cxx:27
HistValFunctions::TH1_FieldsAccess::access_fMinimum
Double_t & access_fMinimum()
Definition: validatefunctions.h:105
HistValFunctions::TProfile2D_FieldsAccess::access_fTsumwz
Double_t & access_fTsumwz()
Definition: validatefunctions.h:144
HistValFunctions::TH2_FieldsAccess::access_fTsumwy2
Double_t access_fTsumwy2() const
Definition: validatefunctions.h:130
lumiFormat.i
int i
Definition: lumiFormat.py:92
beamspotman.n
n
Definition: beamspotman.py:731
HistValFunctions::toString
std::string toString(const T &t)
Definition: validatefunctions.h:29
HistValFunctions::TH1_FieldsAccess::access_fEntries
Double_t access_fEntries() const
Definition: validatefunctions.h:110
HistValFunctions::TProfile2D_FieldsAccess::access_fTsumwz
Double_t access_fTsumwz() const
Definition: validatefunctions.h:147
HistValFunctions::TH1_FieldsAccess::access_fEntries
Double_t & access_fEntries()
Definition: validatefunctions.h:99
HistValFunctions::TH1_FieldsAccess::access_fTsumwx
Double_t access_fTsumwx() const
Definition: validatefunctions.h:113
HistValFunctions::TProfile2D_FieldsAccess
Definition: validatefunctions.h:142
TH2
Definition: rootspy.cxx:373
TProfile2D_LW::getSums
void getSums(double &sumW, double &sumW2, double &sumWX, double &sumWX2, double &sumWY, double &sumWY2, double &sumWXY, double &sumWZ, double &sumWZ2) const
Definition: TProfile2D_LW.cxx:281
LWHist2D
Definition: LWHist2D.h:25
TProfile2D_LW::GetNbinsY
unsigned GetNbinsY() const
Definition: TProfile2D_LW.cxx:265
HistValFunctions::TProfile_FieldsAccess
Definition: validatefunctions.h:134
HistValFunctions::TH2_FieldsAccess::access_fTsumwy
Double_t & access_fTsumwy()
Definition: validatefunctions.h:124
HistValFunctions::TH1_FieldsAccess::access_fDimension
Int_t access_fDimension() const
Definition: validatefunctions.h:109
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
HistValFunctions::TH2_FieldsAccess::access_fScalefactor
Double_t access_fScalefactor() const
Definition: validatefunctions.h:132
plotBeamSpotMon.b
b
Definition: plotBeamSpotMon.py:77
TProfile2D_LW.h
TProfile
Definition: rootspy.cxx:515
TProfile2D_LW
Definition: TProfile2D_LW.h:24
HTXS::Stage0::TH
@ TH
Definition: HiggsTemplateCrossSectionsDefs.h:46
HistValFunctions::TH2_FieldsAccess::access_fTsumwxy
Double_t access_fTsumwxy() const
Definition: validatefunctions.h:131
HistValFunctions::TProfile2D_FieldsAccess::access_fTsumwz2
Double_t access_fTsumwz2() const
Definition: validatefunctions.h:148
python.PyAthena.v
v
Definition: PyAthena.py:157
HistValFunctions::TH2_FieldsAccess::access_fTsumwy2
Double_t & access_fTsumwy2()
Definition: validatefunctions.h:125
ALFA_EventTPCnv_Dict::t2
std::vector< ALFA_RawDataContainer_p1 > t2
Definition: ALFA_EventTPCnvDict.h:44
DiTauMassTools::MaxHistStrategyV2::e
e
Definition: PhysicsAnalysis/TauID/DiTauMassTools/DiTauMassTools/HelperFunctions.h:26
dqt_zlumi_pandas.bin1
bin1
Definition: dqt_zlumi_pandas.py:329
HistValFunctions::TH1_FieldsAccess::access_fDimension
Int_t & access_fDimension()
Definition: validatefunctions.h:98
HistValFunctions::testfailed
void testfailed(const std::string &testname)
Definition: validatefunctions.cxx:10
HistValFunctions::TH1_FieldsAccess::access_fTsumw2
Double_t & access_fTsumw2()
Definition: validatefunctions.h:101
HistValFunctions::TH2_FieldsAccess::access_fTsumwxy
Double_t & access_fTsumwxy()
Definition: validatefunctions.h:126
TH1
Definition: rootspy.cxx:268
HistValFunctions::TH1_FieldsAccess::access_fNormFactor
Double_t access_fNormFactor() const
Definition: validatefunctions.h:117
LWHist2D::getSums
virtual void getSums(double &sumW, double &sumW2, double &sumWX, double &sumWX2, double &sumWY, double &sumWY2, double &sumWXY) const =0
HistValFunctions::TH1_FieldsAccess
Definition: validatefunctions.h:95
HistValFunctions::TH2_FieldsAccess
Definition: validatefunctions.h:122
LWHist1D::getSums
virtual void getSums(double &sumW, double &sumW2, double &sumWX, double &sumWX2) const =0
HistValFunctions::TH2_FieldsAccess::access_fTsumwy
Double_t access_fTsumwy() const
Definition: validatefunctions.h:129
HistValFunctions::TProfile_FieldsAccess::access_fTsumwy2
Double_t & access_fTsumwy2()
Definition: validatefunctions.h:137
HistValFunctions::TProfile_FieldsAccess::access_fTsumwy
Double_t & access_fTsumwy()
Definition: validatefunctions.h:136
LWHist2D.h