Jpp  16.0.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 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  sort(buffer[i].begin(), buffer[i].end());
225  }
226 
227  if (true) {
228  for (int i = 0; i != 2; ++i) {
229  for (vector<JEvent>::iterator p = buffer[i].begin(); p != buffer[i].end(); ++p) {
230  sort(p->begin(), p->end(), make_comparator(&JTransmission::getToA, JComparison::lt()));
231  }
232  }
233  }
234 
235  int count[] = { 0, 0 };
236 
238  p0 = buffer[0].begin(),
239  p1 = buffer[1].begin(); p0 != buffer[0].end() && p1 != buffer[1].end(); ) {
240 
241  for ( ; p0 != buffer[0].end() && p1 != buffer[1].end() && *p0 < *p1; ++p0, ++count[1]) {
242  print(cout, inputFile[0], distance(buffer[0].cbegin(),p0), *p0, ">>", "");
243  }
244 
245  for ( ; p0 != buffer[0].end() && p1 != buffer[1].end() && *p1 < *p0; ++p1, ++count[1]) {
246  print(cout, inputFile[1], distance(buffer[1].cbegin(),p1), *p1, "<<", "");
247  }
248 
249  if (p0 != buffer[0].end() && p1 != buffer[1].end()) {
250 
251  if (!compare(*p0,*p1) && !compare(*p1,*p0)) {
252 
253  ++count[0];
254 
255  print(cout, inputFile[0], distance(buffer[0].cbegin(),p0), *p0, "", "\\");
256  print(cout, inputFile[1], distance(buffer[1].cbegin(),p1), *p1, "", "/ ");
257 
258  } else {
259 
260  ++count[1];
261 
262  if (p0->getOID() == p1->getOID() &&
263  p0->getCounter() == p1->getCounter() &&
264  p0->getID() == p1->getID()) {
265 
266  print(cout, inputFile[0], distance(buffer[0].cbegin(),p0), *p0, "", "");
267  print(cout, inputFile[1], distance(buffer[1].cbegin(),p1), *p1, "", "");
268 
269  JEvent::const_iterator i0 = p0->begin();
270  JEvent::const_iterator i1 = p1->begin();
271 
272  for ( ; i0 != p0->end() && i1 != p1->end(); ++i0, ++i1) {
273  if (compare(*i0, *i1) || compare(*i1,*i0)) {
274  print(cout, *i0, ">>", "");
275  print(cout, *i1, "<<", "");
276  }
277  }
278 
279  for ( ; i0 != p0->end(); ++i0) {
280  print(cout, *i0, ">>", "");
281  }
282 
283  for ( ; i1 != p1->end(); ++i1) {
284  print(cout, *i1, "<<", "");
285  }
286 
287  } else {
288 
289  print(cout, inputFile[0], distance(buffer[0].cbegin(),p0), *p0, ">>", "");
290  print(cout, inputFile[1], distance(buffer[1].cbegin(),p1), *p1, "<<", "");
291  }
292  }
293 
294  if (*p0 < *p1 || *p1 < *p0) {
295 
296  } else {
297 
298  ++p0;
299  ++p1;
300  }
301  }
302  }
303 
304  STATUS("Number of differences / events: " << count[1] << " / " << count[0] << endl);
305 
306  if (count[1] != 0) {
307  FATAL("Number of differences " << count[1] << endl);
308  }
309 }
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:63
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 source JAcoustics sh $DETECTOR_ID CHECK_EXIT_CODE typeset A TRIPODS get_tripods $WORKDIR tripod txt TRIPODS for EMITTER in
Definition: JCanberra.sh:42