192{
195
199
200 try {
201
202 JParser<> zap(
"Program to compare acoustics fit data.");
203
204 zap[
'f'] =
make_field(inputFile,
"two outputs of JKatoomba[.sh]");
207
208 zap(argc, argv);
209 }
210 catch(const exception &error) {
211 FATAL(error.what() << endl);
212 }
213
214 if (inputFile.size() != 2u) {
215 FATAL(
"Wrong number of input files " << inputFile.size() << endl);
216 }
217
218 const size_t width = max(inputFile[0].size(), inputFile[1].size());
220
222
223 for (int i = 0; i != 2; ++i) {
224
226 buffer[i].push_back(*in.next());
227 }
228
229 sort(buffer[i].begin(), buffer[i].end());
230 }
231
232 if (true) {
233 for (int i = 0; i != 2; ++i) {
236 }
237 }
238 }
239
240 int count[] = { 0, 0 };
241
242 for (vector<JEvt>::const_iterator
243 p0 = buffer[0].begin(),
244 p1 = buffer[1].begin(); p0 != buffer[0].end() &&
p1 != buffer[1].end(); ) {
245
246 for ( ; p0 != buffer[0].end() &&
p1 != buffer[1].end() && compare(*p0,*
p1); ++p0, ++count[1]) {
247 print(cout, inputFile[0],
distance(buffer[0].cbegin(),p0), *p0,
">>",
"");
248 }
249
250 for ( ; p0 != buffer[0].end() &&
p1 != buffer[1].end() && compare(*
p1,*p0); ++
p1, ++count[1]) {
252 }
253
254 if (p0 != buffer[0].end() &&
p1 != buffer[1].end()) {
255
256 if (!compare(*p0,*
p1) && !compare(*
p1,*p0)) {
257
258 ++count[0];
259
260 print(cout, inputFile[0],
distance(buffer[0].cbegin(),p0), *p0,
"",
"\\");
262
263 } else {
264
265 ++count[1];
266
267 if (p0->detid ==
p1->detid &&
268 p0->UNIXTimeStart ==
p1->UNIXTimeStart &&
269 p0->UNIXTimeStop ==
p1->UNIXTimeStop) {
270
271 print(cout, inputFile[0],
distance(buffer[0].cbegin(),p0), *p0,
"",
"");
273
274 JEvt::const_iterator i0 = p0->begin();
275 JEvt::const_iterator i1 =
p1->begin();
276
277 for ( ; i0 != p0->end() && i1 !=
p1->end(); ++i0, ++i1) {
278 if (compare(*i0, *i1) || compare(*i1,*i0)) {
279 print(cout, *i0,
">>",
"");
280 print(cout, *i1,
"<<",
"");
281 }
282 }
283
284 for ( ; i0 != p0->end(); ++i0) {
285 print(cout, *i0,
">>",
"");
286 }
287
288 for ( ; i1 !=
p1->end(); ++i1) {
289 print(cout, *i1,
"<<",
"");
290 }
291
292 } else {
293
294 print(cout, inputFile[0],
distance(buffer[0].cbegin(),p0), *p0,
">>",
"");
296 }
297 }
298
299 if (compare(*p0,*
p1) || compare(*
p1,*p0)) {
300
301 } else {
302
303 ++p0;
305 }
306 }
307 }
308
309 STATUS(
"Number of differences / events: " << count[1] <<
" / " << count[0] << endl);
310
311 if (buffer[0].size() != buffer[1].size()) {
312 FATAL(
"Different size " << buffer[0].size() <<
' ' << buffer[1].size() << endl);
313 }
314
315 if (count[1] != 0) {
316 FATAL(
"Number of differences " << count[1] << endl);
317 }
318}
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
std::vector< T >::difference_type distance(typename std::vector< T >::const_iterator first, typename PhysicsEvent::const_iterator< T > second)
Specialisation of STL distance.
Utility class to parse command line options.
Object reading from a list of files.
virtual bool hasNext() override
Check availability of next element.
std::ostream & print(std::ostream &out, const JTestSummary &summary, const char delimiter=' ', const bool useColors=true)
Print test summary.
JComparator< JResult_t T::*, JComparison::lt > make_comparator(JResult_t T::*member)
Helper method to create comparator between values of data member.
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
Auxiliary class for defining the range of iterations of objects.
static counter_type max()
Get maximum counter value.