Jpp  18.0.0
the software that should make you happy
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Functions
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

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 
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->oid == p1->oid &&
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 }
Utility class to parse command line options.
Definition: JParser.hh:1514
TPaveText * p1
JComparator< JResult_t T::*, JComparison::lt > make_comparator(JResult_t T::*member)
Helper method to create comparator between values of data member.
std::vector< T >::difference_type distance(typename std::vector< T >::const_iterator first, typename PhysicsEvent::const_iterator< T > second)
Specialisation of STL distance.
#define STATUS(A)
Definition: JMessage.hh:63
Auxiliary class for defining the range of iterations of objects.
Definition: JLimit.hh:41
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Definition: JParser.hh:1989
print
Definition: JConvertDusj.sh:44
#define FATAL(A)
Definition: JMessage.hh:67
Object reading from a list of files.
double u[N+1]
Definition: JPolint.hh:776
then fatal Wrong number of arguments fi set_variable DETECTOR $argv[1] set_variable INPUT_FILE $argv[2] eval JPrintDetector a $DETECTOR O IDENTIFIER eval JPrintDetector a $DETECTOR O SUMMARY JAcoustics sh $DETECTOR_ID source JAcousticsToolkit sh CHECK_EXIT_CODE typeset A EMITTERS get_tripods $WORKDIR tripod txt EMITTERS get_transmitters $WORKDIR transmitter txt EMITTERS for EMITTER in
Definition: JCanberra.sh:46
int debug
debug level