Jpp  master_rocky-37-gf0c5bc59d
the software that should make you happy
Public Member Functions | Protected Attributes | Private Attributes | List of all members
JCOMPAREHISTOGRAMS::JTestZero Class Reference

Implementation of a bin-by-bin compatibility test for histograms with low bin contents. More...

#include <JTestZero.hh>

Inheritance diagram for JCOMPAREHISTOGRAMS::JTestZero:
JCOMPAREHISTOGRAMS::JTest_t std::vector< JTestResult >

Public Member Functions

 JTestZero ()
 Default constructor. More...
 
void test (const TObject *o1, const TObject *o2) override
 Bin-by-bin comparison for ROOT histograms, of compatibility with a Poisson pdf of parameter 1. More...
 
std::istream & read (std::istream &in) override
 Read test parameters from input. More...
 
virtual std::ostream & write (std::ostream &out, const char delimiter=' ', const bool onlyFailures=false) const
 Write test result to output. More...
 
virtual void save (TFile *f, const std::string &path, const bool onlyFailures=false) const
 Writes the test result to root file. More...
 
const std::string & getTestName () const
 Get test name. More...
 
const std::string & getResultType () const
 Get result type. More...
 

Protected Attributes

const std::string testName
 test name More...
 
const std::string resultType
 test result type More...
 

Private Attributes

double threshold
 threshold p-value to decide if test is passed. More...
 
double outliersThreshold
 Fraction of bins allowed to fail. More...
 

Detailed Description

Implementation of a bin-by-bin compatibility test for histograms with low bin contents.


The test loops over all the bins of both histograms and performs the following operations.
-Calculates the probability that the observed bin content for histogram A is obtained from a Poisson of parameter 1.
-Compares the previous result with the threshold value given as an input parameter. The result is true if the probability is higher than the threshold.
-Calculates the probability that the observed bin content for histogram B is obtained from a Poisson of parameter 1.
-Compares the previous result with the threshold value given as an input parameter. The result is true if the probability is higher than the threshold.
-Compares the results from both bins: If both are true, or both are false, the test is passed. If one is true and the other is false, the test is failed.
At the end of the loop, a failure fraction is computed and compared to the outliersThreshold parameter. If the failure fraction is above the threshold, the test is failed.
This class is derived from the abstract class JTest_t(). For a general description of the implementation of this and other tests derived from JTest_t(), see its documentation.

Definition at line 44 of file JTestZero.hh.

Constructor & Destructor Documentation

◆ JTestZero()

JCOMPAREHISTOGRAMS::JTestZero::JTestZero ( )
inline

Default constructor.

Definition at line 52 of file JTestZero.hh.

52  :
53  JTest_t("Zero", "failure_fraction")
54  {}
JTest_t(const std::string &testName, const std::string &resultType)
Constructor.
Definition: JTest_t.hh:51

Member Function Documentation

◆ test()

void JCOMPAREHISTOGRAMS::JTestZero::test ( const TObject o1,
const TObject o2 
)
inlineoverridevirtual

Bin-by-bin comparison for ROOT histograms, of compatibility with a Poisson pdf of parameter 1.

Parameters
o1First histogram
o2Second histogram

Implements JCOMPAREHISTOGRAMS::JTest_t.

Definition at line 63 of file JTestZero.hh.

64  {
65  using namespace std;
66  using namespace JPP;
67 
68  const TH1* h1 = dynamic_cast<const TH1*>(o1);
69  const TH1* h2 = dynamic_cast<const TH1*>(o2);
70 
71  if (h1 == NULL || h2 == NULL) {
72  THROW(JValueOutOfRange, "JTestChi2::test(): Could not cast given TObjects to TH2.");
73  }
74 
75  const int nx1 = h1->GetNbinsX();
76  const int nx2 = h2->GetNbinsX();
77  const int ny1 = h1->GetNbinsY();
78  const int ny2 = h2->GetNbinsY();
79  const int nz1 = h1->GetNbinsZ();
80  const int nz2 = h2->GetNbinsZ();
81 
82  if(nx1 != nx2 || ny1 != ny2 || nz1 != nz2) {
83  THROW(JValueOutOfRange, "JTestZero::test(): Histograms with different binning. The objects: " <<
84  h1->GetName() << " and " << h2->GetName() << " can not be compared." << endl);
85  }
86 
87  TH1* h3 = (TH1*) h1->Clone(h1->GetName() == h2->GetName() ?
88  MAKE_CSTRING(h1->GetName() << "_" << testName) :
89  MAKE_CSTRING(h1->GetName() << "_VS_" << h2->GetName() << "_" << testName));
90 
91  h3->Reset();
92 
93  double failures = 0;
94 
95  for (int i=1 ; i<nx1+1 ; ++i) {
96  for (int j=1 ; j<ny1+1 ; ++j) {
97  for (int k=1 ; k<nz1+1 ; ++k) {
98 
99  const int Nbin = h3->GetBin(i,j,k);
100 
101  const double m = h1->GetBinContent(i,j,k);
102  const double n = h2->GetBinContent(i,j,k);
103 
104  const double p1 = 1 - ROOT::Math::poisson_cdf(m,1);
105  const double p2 = 1 - ROOT::Math::poisson_cdf(n,1);
106 
107  if ((p1 > threshold && p2 < threshold) ||
108  (p1 < threshold && p2 > threshold)) {
109 
110  failures+=1./(nx1*ny1);
111  h3->Fill(Nbin);
112  }
113  }
114  }
115  }
116 
117  const bool passed = (failures < outliersThreshold);
118 
119  const JResultTitle title(testName, resultType, passed , failures);
120 
121  h3->SetTitle(title.getTitle().c_str());
122 
123  const int Ndims = h3->GetDimension();
124 
125  if (Ndims == 1) {
126  h3->GetYaxis()->SetTitle(resultType.c_str());
127  } else if (Ndims == 2) {
128  h3->GetZaxis()->SetTitle(resultType.c_str());
129  }
130 
131  const JTestResult r(testName,
132  JRootObjectID(MAKE_STRING(h1->GetDirectory()->GetPath() << h1->GetName())),
133  JRootObjectID(MAKE_STRING(h2->GetDirectory()->GetPath() << h1->GetName())),
134  resultType, failures, threshold, h3, passed);
135 
136  this->push_back(r);
137  }
TPaveText * p1
#define THROW(JException_t, A)
Marco for throwing exception with std::ostream compatible message.
Definition: JException.hh:712
#define MAKE_CSTRING(A)
Make C-string.
Definition: JPrint.hh:72
#define MAKE_STRING(A)
Make string.
Definition: JPrint.hh:63
Class dedicated to standardize the title of the graphical objects produced by the JTest_t() derived c...
Definition: JResultTitle.hh:26
double outliersThreshold
Fraction of bins allowed to fail.
Definition: JTestZero.hh:166
double threshold
threshold p-value to decide if test is passed.
Definition: JTestZero.hh:165
const std::string resultType
test result type
Definition: JTest_t.hh:181
const std::string testName
test name
Definition: JTest_t.hh:180
Auxiliary class to handle file name, ROOT directory and object name.
Exception for accessing a value in a collection that is outside of its range.
Definition: JException.hh:180
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
const int n
Definition: JPolint.hh:786
data_type r[M+1]
Definition: JPolint.hh:868
int j
Definition: JPolint.hh:792
Definition: JSTDTypes.hh:14
Structure containing the result of the test.
Definition: JTestResult.hh:30

◆ read()

std::istream& JCOMPAREHISTOGRAMS::JTestZero::read ( std::istream &  in)
inlineoverridevirtual

Read test parameters from input.

Parameters
ininput stream
Returns
input stream

Implements JCOMPAREHISTOGRAMS::JTest_t.

Definition at line 146 of file JTestZero.hh.

147  {
148  using namespace JPP;
149 
150  in >> threshold >> outliersThreshold;
151 
152  if (threshold < 0.0 || threshold > 1.0) {
153  THROW(JValueOutOfRange, "JTestZero::read(): Invalid threshold value " << threshold);
154  }
155 
156  if (outliersThreshold < 0.0 || outliersThreshold > 1.0) {
157  THROW(JValueOutOfRange, "JTestZero::read(): Invalid outliersThreshold value " << outliersThreshold);
158  }
159 
160  return in;
161  }

◆ write()

virtual std::ostream& JCOMPAREHISTOGRAMS::JTest_t::write ( std::ostream &  out,
const char  delimiter = ' ',
const bool  onlyFailures = false 
) const
inlinevirtualinherited

Write test result to output.

Parameters
outoutput stream
delimiterfield delimiter
onlyFailuresif true, write only failures.
Returns
output stream

Definition at line 84 of file JTest_t.hh.

87  {
88  using namespace std;
89  using namespace JPP;
90 
91  for (vector<JTestResult>::const_iterator r = this->begin() ; r != this->end() ; ++r) {
92 
93  if (onlyFailures && r->passed) { continue; }
94 
95  print(out, *r, delimiter, true);
96  }
97 
98  return out;
99  }
std::ostream & print(std::ostream &out, const JTestSummary &summary, const char delimiter=' ', const bool useColors=true)
Print test summary.

◆ save()

virtual void JCOMPAREHISTOGRAMS::JTest_t::save ( TFile *  f,
const std::string &  path,
const bool  onlyFailures = false 
) const
inlinevirtualinherited

Writes the test result to root file.

Parameters
fA ROOT file
pathPath in root file.
onlyFailuresIf true, write only failures.

Definition at line 108 of file JTest_t.hh.

111  {
112  using namespace std;
113  using namespace JPP;
114 
115  if (f->GetDirectory(path.c_str())==0) {
116  f->mkdir(path.c_str());
117  }
118 
119  f->cd(path.c_str());
120 
121  for (vector<JTestResult>::const_iterator r = this->begin() ; r != this->end() ; ++r) {
122 
123  if (onlyFailures && r->passed) { continue; }
124 
125  r->obj->Write();
126  }
127  }

◆ getTestName()

const std::string& JCOMPAREHISTOGRAMS::JTest_t::getTestName ( ) const
inlineinherited

Get test name.

Returns
test name

Definition at line 135 of file JTest_t.hh.

136  {
137  return testName;
138  }

◆ getResultType()

const std::string& JCOMPAREHISTOGRAMS::JTest_t::getResultType ( ) const
inlineinherited

Get result type.

Returns
result type

Definition at line 146 of file JTest_t.hh.

147  {
148  return resultType;
149  }

Member Data Documentation

◆ threshold

double JCOMPAREHISTOGRAMS::JTestZero::threshold
private

threshold p-value to decide if test is passed.

Definition at line 165 of file JTestZero.hh.

◆ outliersThreshold

double JCOMPAREHISTOGRAMS::JTestZero::outliersThreshold
private

Fraction of bins allowed to fail.

Definition at line 166 of file JTestZero.hh.

◆ testName

const std::string JCOMPAREHISTOGRAMS::JTest_t::testName
protectedinherited

test name

Definition at line 180 of file JTest_t.hh.

◆ resultType

const std::string JCOMPAREHISTOGRAMS::JTest_t::resultType
protectedinherited

test result type

Definition at line 181 of file JTest_t.hh.


The documentation for this class was generated from the following file: