Jpp test-rotations-old
the software that should make you happy
Loading...
Searching...
No Matches
JDiffPD0.cc File Reference

Auxiliary program to compare PDF tables of the arrival time of the Cherenkov light from a bright point. 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 bright point.

Author
mdejong

Definition in file JDiffPD0.cc.

Function Documentation

◆ main()

int main ( int argc,
char ** argv )

Definition at line 39 of file JDiffPD0.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 bright point.");
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;
66 JPolint1FunctionalGridMap>::maplist JMapList_t;
68
69 typedef JFunction1D_t::argument_type argument_type;
70 typedef JArray<2, argument_type> JArray_t;
71
72 JPDF_t pdfA;
73 JPDF_t pdfB;
74
75 const JFunction1D_t::JSupervisor supervisor(new JFunction1D_t::JDefaultResult(0.0));
76
77 struct pair_type {
78 const string file_name;
79 JPDF_t& pdf;
80 } buffer[] = {
81 { inputFileA, pdfA },
82 { inputFileB, pdfB }
83 };
84
85 for (const pair_type& i : buffer) {
86
87 try {
88
89 NOTICE("loading input from file " << i.file_name << "... " << flush);
90
91 i.pdf.load(i.file_name.c_str());
92 i.pdf.compile();
93 i.pdf.setExceptionHandler(supervisor);
94
95 NOTICE("OK" << endl);
96 }
97 catch(const JException& error) {
98 FATAL(error.what() << endl);
99 }
100 }
101
102 bool ok = true;
103
104 JPDF_t::super_const_iterator i = pdfA.super_begin();
105 JPDF_t::super_const_iterator j = pdfB.super_begin();
106
107 for ( ; i != pdfA.super_end() &&
108 j != pdfB.super_end(); ++i, ++j) {
109
110 const double Wa = pdfA.transformer->getWeight(JArray_t((*i).getKey()));
111 const double Wb = pdfB.transformer->getWeight(JArray_t((*j).getKey()));
112
113 if (fabs(i->first - j->first) > precision ||
114 fabs(i->second->first - j->second->first) > precision ||
115 fabs(Wa - Wb) > precision) {
116
117 DEBUG("a[] "
118 << i->first << ' '
119 << i->second->first << ' '
120 << Wa << endl);
121
122 DEBUG("b[] "
123 << j->first << ' '
124 << j->second->first << ' '
125 << Wb << endl);
126
127 ok = false;
128 }
129
130 const JFunction1D_t& fa = (*i).getValue();
131 const JFunction1D_t& fb = (*j).getValue();
132
133 JFunction1D_t::const_iterator p = fa.begin();
134 JFunction1D_t::const_iterator q = fb.begin();
135
136 while (p != fa.end() &&
137 q != fb.end()) {
138
139 if (fabs(p->getX() - q->getX()) > precision) {
140
141 DEBUG("a.x " << p->getX() << endl);
142 DEBUG("b.x " << q->getX() << endl);
143
144 ok = false;
145 }
146
147 if (!compare(p->getY(), q->getY(), precision)) {
148
149 DEBUG("a.y " << p->getX() << ' ' << p->getY() << endl);
150 DEBUG("b.y " << q->getX() << ' ' << q->getY() << endl);
151
152 ok = false;
153 }
154
155 if (p->getX() < q->getX())
156 ++p;
157 else if (q->getX() < p->getX())
158 ++q;
159 else {
160 ++p;
161 ++q;
162 }
163 }
164
165 for ( ; p != fa.end(); ++p) {
166
167 DEBUG("a.x " << p->getX() << endl);
168
169 ok = false;
170 }
171
172 for ( ; q != fb.end(); ++q) {
173
174 DEBUG("b.x " << q->getX() << endl);
175
176 ok = false;
177 }
178 }
179
180 for ( ; i != pdfA.super_end(); ++i) {
181
182 DEBUG("a[] "
183 << i->first << ' '
184 << i->second->first << endl);
185
186 ok = false;
187 }
188
189 for ( ; j != pdfB.super_end(); ++j) {
190
191 DEBUG("b[] "
192 << j->first << ' '
193 << j->second->first << endl);
194
195 ok = false;
196 }
197
198 if (!ok) {
199 ERROR(inputFileA << " and " << inputFileB << " differ." << endl);
200 }
201
202 return (ok ? 0 : 1);
203}
#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.