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

Program to compare acoustics fit data. More...

#include <iostream>
#include <iomanip>
#include <vector>
#include <algorithm>
#include "TROOT.h"
#include "TFile.h"
#include "JAcoustics/JEvt.hh"
#include "JAcoustics/JSupport.hh"
#include "JSupport/JSingleFileScanner.hh"
#include "JLang/JComparator.hh"
#include "JLang/JComparison.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

Program to compare acoustics fit data.

Author
mdejong

Definition in file JDiffAcousticsEvt.cc.

Function Documentation

◆ main()

int main ( int argc,
char ** argv )

Definition at line 191 of file JDiffAcousticsEvt.cc.

192{
193 using namespace std;
194 using namespace JPP;
195
196 vector<string> inputFile;
197 JLimit numberOfEvents;
198 int debug;
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]");
205 zap['n'] = make_field(numberOfEvents) = JLimit::max();
206 zap['d'] = make_field(debug) = 2;
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());
219 const printer print = { debug, width };
220
221 vector<JEvt> buffer[2];
222
223 for (int i = 0; i != 2; ++i) {
224
225 for (JSingleFileScanner<JEvt> in(inputFile[i], numberOfEvents); in.hasNext(); ) {
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) {
234 for (vector<JEvt>::iterator p = buffer[i].begin(); p != buffer[i].end(); ++p) {
235 sort(p->begin(), p->end(), make_comparator(&JFit::id, JComparison::lt()));
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]) {
251 print(cout, inputFile[1], distance(buffer[1].cbegin(),p1), *p1, "<<", "");
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, "", "\\");
261 print(cout, inputFile[1], distance(buffer[1].cbegin(),p1), *p1, "", "/ ");
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, "", "");
272 print(cout, inputFile[1], distance(buffer[1].cbegin(),p1), *p1, "", "");
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, ">>", "");
295 print(cout, inputFile[1], distance(buffer[1].cbegin(),p1), *p1, "<<", "");
296 }
297 }
298
299 if (compare(*p0,*p1) || compare(*p1,*p0)) {
300
301 } else {
302
303 ++p0;
304 ++p1;
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}
TPaveText * p1
#define STATUS(A)
Definition JMessage.hh:63
#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
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.
Definition JParser.hh:1698
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.
Definition JLimit.hh:45
static counter_type max()
Get maximum counter value.
Definition JLimit.hh:128