40{
43
46 double precision;
48
49 try {
50
51 JParser<> zap(
"Auxiliary program to compare PDF tables of the arrival time of the Cherenkov light from a shower.");
52
57
59 }
60 catch(const exception &error) {
62 }
63
70
71 typedef JFunction1D_t::argument_type argument_type;
73
74 JPDF_t pdfA;
75 JPDF_t pdfB;
76
77 const JFunction1D_t::JSupervisor
supervisor(
new JFunction1D_t::JDefaultResult(0.0));
78
80 const string file_name;
81 JPDF_t& pdf;
82 } buffer[] = {
85 };
86
88
89 try {
90
91 NOTICE(
"loading input from file " << i.file_name <<
"... " << flush);
92
93 i.pdf.load(i.file_name.c_str());
94 i.pdf.compile();
96
98 }
101 }
102 }
103
105
106 JPDF_t::super_const_iterator i = pdfA.super_begin();
107 JPDF_t::super_const_iterator
j = pdfB.super_begin();
108
109 for ( ; i != pdfA.super_end() &&
110 j != pdfB.super_end(); ++i, ++
j) {
111
112 const double Wa = pdfA.transformer->getWeight(
JArray_t(i.getKey()));
113 const double Wb = pdfB.transformer->getWeight(
JArray_t(
j.getKey()));
114
115 if (fabs(i->first -
j->first) > precision ||
116 fabs(i->second->first -
j->second->first) > precision ||
117 fabs(i->second->second->first -
j->second->second->first) > precision ||
118 fabs(i->second->second->second->first -
j->second->second->second->first) > precision ||
119 fabs(
Wa -
Wb) > precision) {
120
122 << i->first << ' '
123 << i->second->first << ' '
124 << i->second->second->first << ' '
125 << i->second->second->second->first << ' '
127
130 <<
j->second->first <<
' '
131 <<
j->second->second->first <<
' '
132 <<
j->second->second->second->first <<
' '
134
136 }
137
138 const JFunction1D_t&
fa = i.getValue();
139 const JFunction1D_t& fb =
j.getValue();
140
141 JFunction1D_t::const_iterator p =
fa.begin();
142 JFunction1D_t::const_iterator q = fb.begin();
143
144 while (p !=
fa.end() &&
145 q != fb.end()) {
146
147 if (fabs(p->getX() - q->getX()) > precision) {
148
151
153 }
154
155 if (!compare(p->getY(), q->getY(), precision)) {
156
157 DEBUG(
"a.y " << p->getX() <<
' ' << p->getY() <<
endl);
158 DEBUG(
"b.y " << q->getX() <<
' ' << q->getY() <<
endl);
159
161 }
162
163 if (p->getX() < q->getX())
164 ++p;
165 else if (q->getX() < p->getX())
166 ++q;
167 else {
168 ++p;
169 ++q;
170 }
171 }
172
173 for ( ; p !=
fa.end(); ++p) {
174
176
178 }
179
180 for ( ; q != fb.end(); ++q) {
181
183
185 }
186 }
187
188 for ( ; i != pdfA.super_end(); ++i) {
189
191 << i->first << ' '
192 << i->second->first << ' '
193 << i->second->second->first << ' '
194 << i->second->second->second->first <<
endl);
195
197 }
198
199 for ( ;
j != pdfB.super_end(); ++
j) {
200
203 <<
j->second->first <<
' '
204 <<
j->second->second->first <<
' '
205 <<
j->second->second->second->first <<
endl);
206
208 }
209
212 }
213
215}
#define DEBUG(A)
Message macros.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
virtual const char * what() const override
Get error message.
Template definition of a multi-dimensional oscillation probability interpolation table.
Utility class to parse command line options.
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).