Jpp  17.3.1
the software that should make you happy
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Functions
JDiffAcousticsEvent.cc File Reference

Program to compare acoustics event data. More...

#include <iostream>
#include <iomanip>
#include <vector>
#include <algorithm>
#include "TROOT.h"
#include "TFile.h"
#include "JAcoustics/JEvent.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 event data.

Author
mdejong

Definition in file JDiffAcousticsEvent.cc.

Function Documentation

int main ( int  argc,
char **  argv 
)

Definition at line 193 of file JDiffAcousticsEvent.cc.

194 {
195  using namespace std;
196  using namespace JPP;
197 
198  vector<string> inputFile;
199  JLimit numberOfEvents;
200  int debug;
201 
202  try {
203 
204  JParser<> zap("Program to compare acoustics event data.");
205 
206  zap['f'] = make_field(inputFile, "two outputs of JAcousticsEventBuilder[.sh]");
207  zap['n'] = make_field(numberOfEvents) = JLimit::max();
208  zap['d'] = make_field(debug) = 2;
209 
210  zap(argc, argv);
211  }
212  catch(const exception &error) {
213  FATAL(error.what() << endl);
214  }
215 
216  if (inputFile.size() != 2u) {
217  FATAL("Wrong number of input files " << inputFile.size() << endl);
218  }
219 
220  const size_t width = max(inputFile[0].size(), inputFile[1].size());
221  const printer print = { debug, width };
222 
223  vector<JEvent> buffer[2];
224 
225  for (int i = 0; i != 2; ++i) {
226 
227  for (JSingleFileScanner<JEvent> in(inputFile[i], numberOfEvents); in.hasNext(); ) {
228  buffer[i].push_back(*in.next());
229  }
230  }
231 
232  if (false) {
233 
234  for (int i = 0; i != 2; ++i) {
235 
236  sort(buffer[i].begin(), buffer[i].end());
237 
238  for (vector<JEvent>::iterator p = buffer[i].begin(); p != buffer[i].end(); ++p) {
239  sort(p->begin(), p->end(), make_comparator(&JTransmission::getToA, JComparison::lt()));
240  }
241  }
242  }
243 
244  int count[] = { 0, 0 };
245 
247  p0 = buffer[0].begin(),
248  p1 = buffer[1].begin(); p0 != buffer[0].end() && p1 != buffer[1].end(); ) {
249 
250  for ( ; p0 != buffer[0].end() && p1 != buffer[1].end() && *p0 < *p1; ++p0, ++count[1]) {
251  print(cout, inputFile[0], distance(buffer[0].cbegin(),p0), *p0, ">>", "");
252  }
253 
254  for ( ; p0 != buffer[0].end() && p1 != buffer[1].end() && *p1 < *p0; ++p1, ++count[1]) {
255  print(cout, inputFile[1], distance(buffer[1].cbegin(),p1), *p1, "<<", "");
256  }
257 
258  if (p0 != buffer[0].end() && p1 != buffer[1].end()) {
259 
260  if (!compare(*p0,*p1) && !compare(*p1,*p0)) {
261 
262  ++count[0];
263 
264  print(cout, inputFile[0], distance(buffer[0].cbegin(),p0), *p0, "", "\\");
265  print(cout, inputFile[1], distance(buffer[1].cbegin(),p1), *p1, "", "/ ");
266 
267  } else {
268 
269  ++count[1];
270 
271  if (p0->getOID() == p1->getOID() &&
272  p0->getCounter() == p1->getCounter() &&
273  p0->getID() == p1->getID()) {
274 
275  print(cout, inputFile[0], distance(buffer[0].cbegin(),p0), *p0, "", "");
276  print(cout, inputFile[1], distance(buffer[1].cbegin(),p1), *p1, "", "");
277 
278  JEvent::const_iterator i0 = p0->begin();
279  JEvent::const_iterator i1 = p1->begin();
280 
281  for ( ; i0 != p0->end() && i1 != p1->end(); ++i0, ++i1) {
282  if (compare(*i0, *i1) || compare(*i1,*i0)) {
283  print(cout, *i0, ">>", "");
284  print(cout, *i1, "<<", "");
285  }
286  }
287 
288  for ( ; i0 != p0->end(); ++i0) {
289  print(cout, *i0, ">>", "");
290  }
291 
292  for ( ; i1 != p1->end(); ++i1) {
293  print(cout, *i1, "<<", "");
294  }
295 
296  } else {
297 
298  print(cout, inputFile[0], distance(buffer[0].cbegin(),p0), *p0, ">>", "");
299  print(cout, inputFile[1], distance(buffer[1].cbegin(),p1), *p1, "<<", "");
300  }
301  }
302 
303  if (*p0 < *p1 || *p1 < *p0) {
304 
305  } else {
306 
307  ++p0;
308  ++p1;
309  }
310  }
311  }
312 
313  STATUS("Number of differences / events: " << count[1] << " / " << count[0] << endl);
314 
315  if (buffer[0].size() != buffer[1].size()) {
316  FATAL("Different size " << buffer[0].size() << ' ' << buffer[1].size() << endl);
317  }
318 
319  if (count[1] != 0) {
320  FATAL("Number of differences " << count[1] << endl);
321  }
322 }
Utility class to parse command line options.
Definition: JParser.hh:1517
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:1993
static struct JACOUSTICS::@4 compare
Auxiliary data structure to sort transmissions.
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