Jpp  17.1.0
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 186 of file JDiffAcousticsEvent.cc.

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