Jpp 19.3.0-rc.2
the software that should make you happy
Loading...
Searching...
No Matches
JDiffPDF.cc File Reference

Auxiliary program to compare PDF tables of the arrival time of the Cherenkov light from a muon. More...

#include <string>
#include <iostream>
#include <fstream>
#include <iomanip>
#include <cmath>
#include <algorithm>
#include "JTools/JFunction1D_t.hh"
#include "JTools/JFunctionalMap_t.hh"
#include "JPhysics/JPDFTable.hh"
#include "Jeep/JParser.hh"
#include "Jeep/JMessage.hh"

Go to the source code of this file.

Functions

int main (int argc, char **argv)
 

Detailed Description

Auxiliary program to compare PDF tables of the arrival time of the Cherenkov light from a muon.

Author
mdejong

Definition in file JDiffPDF.cc.

Function Documentation

◆ main()

int main ( int argc,
char ** argv )

Definition at line 39 of file JDiffPDF.cc.

40{
41 using namespace std;
42 using namespace JPP;
43
44 string inputFileA;
45 string inputFileB;
46 double precision;
47 int debug;
48
49 try {
50
51 JParser<> zap("Auxiliary program to compare PDF tables of the arrival time of the Cherenkov light from a muon.");
52
53 zap['a'] = make_field(inputFileA);
54 zap['b'] = make_field(inputFileB);
55 zap['p'] = make_field(precision) = 1.0e-6;
56 zap['d'] = make_field(debug) = 0;
57
58 zap(argc, argv);
59 }
60 catch(const exception &error) {
61 FATAL(error.what() << endl);
62 }
63
64 typedef JSplineFunction1D_t JFunction1D_t;
67 JPolint1FunctionalGridMap>::maplist JMapList_t;
69
70 typedef JFunction1D_t::argument_type argument_type;
71 typedef JArray<3, argument_type> JArray_t;
72
73 JPDF_t pdfA;
74 JPDF_t pdfB;
75
76 const JFunction1D_t::JSupervisor supervisor(new JFunction1D_t::JDefaultResult(0.0));
77
78 struct pair_type {
79 const string file_name;
80 JPDF_t& pdf;
81 } buffer[] = {
82 { inputFileA, pdfA },
83 { inputFileB, pdfB }
84 };
85
86 for (const pair_type& i : buffer) {
87
88 try {
89
90 NOTICE("loading input from file " << i.file_name << "... " << flush);
91
92 i.pdf.load(i.file_name.c_str());
93 i.pdf.compile();
94 i.pdf.setExceptionHandler(supervisor);
95
96 NOTICE("OK" << endl);
97 }
98 catch(const JException& error) {
99 FATAL(error.what() << endl);
100 }
101 }
102
103 bool ok = true;
104
105 JPDF_t::super_const_iterator i = pdfA.super_begin();
106 JPDF_t::super_const_iterator j = pdfB.super_begin();
107
108 for ( ; i != pdfA.super_end() &&
109 j != pdfB.super_end(); ++i, ++j) {
110
111 const double Wa = pdfA.transformer->getWeight(JArray_t((*i).getKey()));
112 const double Wb = pdfB.transformer->getWeight(JArray_t((*j).getKey()));
113
114 if (fabs(i->first - j->first) > precision ||
115 fabs(i->second->first - j->second->first) > precision ||
116 fabs(i->second->second->first - j->second->second->first) > precision ||
117 fabs(Wa - Wb) > precision) {
118
119 DEBUG("a[] "
120 << i->first << ' '
121 << i->second->first << ' '
122 << i->second->second->first << ' '
123 << Wa << endl);
124
125 DEBUG("b[] "
126 << j->first << ' '
127 << j->second->first << ' '
128 << j->second->second->first << ' '
129 << Wb << endl);
130
131 ok = false;
132 }
133
134 const JFunction1D_t& fa = (*i).getValue();
135 const JFunction1D_t& fb = (*j).getValue();
136
137 JFunction1D_t::const_iterator p = fa.begin();
138 JFunction1D_t::const_iterator q = fb.begin();
139
140 while (p != fa.end() &&
141 q != fb.end()) {
142
143 if (fabs(p->getX() - q->getX()) > precision) {
144
145 DEBUG("a.x " << p->getX() << endl);
146 DEBUG("b.x " << q->getX() << endl);
147
148 ok = false;
149 }
150
151 if (!compare(p->getY(), q->getY(), precision)) {
152
153 DEBUG("a.y " << p->getX() << ' ' << p->getY() << endl);
154 DEBUG("b.y " << q->getX() << ' ' << q->getY() << endl);
155
156 ok = false;
157 }
158
159 if (p->getX() < q->getX())
160 ++p;
161 else if (q->getX() < p->getX())
162 ++q;
163 else {
164 ++p;
165 ++q;
166 }
167 }
168
169 for ( ; p != fa.end(); ++p) {
170
171 DEBUG("a.x " << p->getX() << endl);
172
173 ok = false;
174 }
175
176 for ( ; q != fb.end(); ++q) {
177
178 DEBUG("b.x " << q->getX() << endl);
179
180 ok = false;
181 }
182 }
183
184 for ( ; i != pdfA.super_end(); ++i) {
185
186 DEBUG("a[] "
187 << i->first << ' '
188 << i->second->first << ' '
189 << i->second->second->first << endl);
190
191 ok = false;
192 }
193
194 for ( ; j != pdfB.super_end(); ++j) {
195
196 DEBUG("b[] "
197 << j->first << ' '
198 << j->second->first << ' '
199 << j->second->second->first << endl);
200
201 ok = false;
202 }
203
204 if (!ok) {
205 ERROR(inputFileA << " and " << inputFileB << " differ." << endl);
206 }
207
208 return (ok ? 0 : 1);
209}
#define DEBUG(A)
Message macros.
Definition JMessage.hh:62
#define ERROR(A)
Definition JMessage.hh:66
#define NOTICE(A)
Definition JMessage.hh:64
#define FATAL(A)
Definition JMessage.hh:67
int debug
debug level
Definition JSirene.cc:72
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Definition JParser.hh:2142
General exception.
Definition JException.hh:24
virtual const char * what() const override
Get error message.
Definition JException.hh:64
Utility class to parse command line options.
Definition JParser.hh:1698
Multi-dimensional PDF table for arrival time of Cherenkov light.
Definition JPDFTable.hh:44
One dimensional array of template objects with fixed length.
Definition JArray.hh:43
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
int j
Definition JPolint.hh:801
Data structure for a pair of indices.
Auxiliary class for recursive map list generation.
Definition JMapList.hh:109
Type definition of a 1st degree polynomial interpolation based on a JGridMap implementation.
Type definition of a 1st degree polynomial interpolation based on a JMap implementation.
Type definition of a spline interpolation method based on a JCollection with double result type.