Jpp test-rotations-old
the software that should make you happy
Loading...
Searching...
No Matches
JCOMPAREHISTOGRAMS::JTestIdentical Class Reference

Implementation of the a test to check if two 1D histograms are the same. More...

#include <JTestIdentical.hh>

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

Public Member Functions

 JTestIdentical ()
 Default constructor.
 
void test (const TObject *o1, const TObject *o2) override
 Applies test for two ROOT TH1 histograms.
 
std::istream & read (std::istream &in) override
 Read test parameters from input.
 
virtual std::ostream & write (std::ostream &out, const char delimiter=' ', const bool onlyFailures=false) const
 Write test result to output.
 
virtual void save (TFile *f, const std::string &path, const bool onlyFailures=false) const
 Writes the test result to root file.
 
const std::string & getTestName () const
 Get test name.
 
const std::string & getResultType () const
 Get result type.
 

Protected Attributes

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

Private Attributes

double tolerance
 tolerance value to accept the difference as acceptable.
 

Detailed Description

Implementation of the a test to check if two 1D histograms are the same.


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.
The input parameter tolerance, is used to evaluate whether the test is passed or failed.

Definition at line 28 of file JTestIdentical.hh.

Constructor & Destructor Documentation

◆ JTestIdentical()

JCOMPAREHISTOGRAMS::JTestIdentical::JTestIdentical ( )
inline

Default constructor.

Definition at line 36 of file JTestIdentical.hh.

36 :
37 JTest_t("Identical", "Difference")
38 {}
JTest_t(const std::string &testName, const std::string &resultType)
Constructor.
Definition JTest_t.hh:51

Member Function Documentation

◆ test()

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

Applies test for two ROOT TH1 histograms.

Parameters
o1First histogram
o2Second histogram

Implements JCOMPAREHISTOGRAMS::JTest_t.

Definition at line 47 of file JTestIdentical.hh.

48 {
49 using namespace std;
50 using namespace JPP;
51
52 const TH1* h1 = dynamic_cast<const TH1*>(o1);
53 const TH1* h2 = dynamic_cast<const TH1*>(o2);
54
55 if (h1 == NULL || h2 == NULL) {
56 THROW(JValueOutOfRange, "JTestIdentical::test(): Could not cast given TObjects to TH1.");
57 }
58
59 if(h1->GetNbinsX() != h2->GetNbinsX() ||
60 h1->GetNbinsY() != h2->GetNbinsY() ||
61 h1->GetNbinsZ() != h2->GetNbinsZ()) {
62 THROW(JValueOutOfRange, "JTestIdentical::test(): Histograms with different bining. The objects: " <<
63 h1->GetName() << " and " << h2->GetName() << " can not be compared." << endl);
64 }
65
66 TH1* h3 = (TH1*) h1->Clone(h1->GetName() == h2->GetName() ?
67 MAKE_CSTRING(h1->GetName() << "_" << testName) :
68 MAKE_CSTRING(h1->GetName() << "_VS_" << h2->GetName() << "_" << testName));
69
70 h3->Add(h2,-1);
71
72 bool passed = true;
73
74 double maxDifference = 0.0;
75
76 for (int i=1 ; i <= h1->GetNbinsX() && passed ; ++i){
77 for (int j=1 ; j <= h1->GetNbinsY() && passed ; ++j){
78 for (int k=1 ; k <= h1->GetNbinsZ() && passed ; ++k){
79
80 const double d = h1->GetBinContent(i,j,k) - h2->GetBinContent(i,j,k);
81
82 if (fabs(d) > maxDifference) { maxDifference = fabs(d); }
83 if (fabs(d) > tolerance) { passed = false; }
84 }
85 }
86 }
87
88 const JResultTitle title(testName, resultType, passed, maxDifference);
89
90 h3->SetTitle(title.getTitle().c_str());
91
92 const int Ndims = h3->GetDimension();
93
94 if (Ndims == 1) {
95 h3->GetYaxis()->SetTitle(resultType.c_str());
96 } else if (Ndims == 2) {
97 h3->GetZaxis()->SetTitle(resultType.c_str());
98 }
99
100 const JTestResult r (testName,
101 JRootObjectID(MAKE_STRING(h1->GetDirectory()->GetPath() << h1->GetName())),
102 JRootObjectID(MAKE_STRING(h2->GetDirectory()->GetPath() << h1->GetName())),
103 resultType, maxDifference, tolerance, h3, passed);
104
105 this->push_back(r);
106 }
#define THROW(JException_t, A)
Marco for throwing exception with std::ostream compatible message.
#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...
double tolerance
tolerance value to accept the difference as acceptable.
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.
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
int j
Definition JPolint.hh:801
Structure containing the result of the test.

◆ read()

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

Read test parameters from input.

Parameters
ininput stream
Returns
input stream

Implements JCOMPAREHISTOGRAMS::JTest_t.

Definition at line 115 of file JTestIdentical.hh.

116 {
117 using namespace JPP;
118
119 in >> tolerance;
120
121 if (tolerance < 0.0) {
122 THROW(JValueOutOfRange, "JTestIdentical::read(): Invalid tolerance value " << tolerance);
123 }
124
125 return in;
126 }

◆ 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

◆ tolerance

double JCOMPAREHISTOGRAMS::JTestIdentical::tolerance
private

tolerance value to accept the difference as acceptable.

Definition at line 131 of file JTestIdentical.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: