Jpp  test_elongated_shower_pde
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 182 of file JDiffAcousticsEvt.cc.

183 {
184  using namespace std;
185  using namespace JPP;
186 
187  vector<string> inputFile;
188  JLimit numberOfEvents;
189  int debug;
190 
191  try {
192 
193  JParser<> zap("Program to compare acoustics fit data.");
194 
195  zap['f'] = make_field(inputFile, "two outputs of JKatoomba[.sh]");
196  zap['n'] = make_field(numberOfEvents) = JLimit::max();
197  zap['d'] = make_field(debug) = 2;
198 
199  zap(argc, argv);
200  }
201  catch(const exception &error) {
202  FATAL(error.what() << endl);
203  }
204 
205  if (inputFile.size() != 2u) {
206  FATAL("Wrong number of input files " << inputFile.size() << endl);
207  }
208 
209  const size_t width = max(inputFile[0].size(), inputFile[1].size());
210  const printer print = { debug, width };
211 
212  vector<JEvt> buffer[2];
213 
214  for (int i = 0; i != 2; ++i) {
215 
216  for (JSingleFileScanner<JEvt> in(inputFile[i], numberOfEvents); in.hasNext(); ) {
217  buffer[i].push_back(*in.next());
218  }
219 
220  sort(buffer[i].begin(), buffer[i].end());
221  }
222 
223  if (true) {
224  for (int i = 0; i != 2; ++i) {
225  for (vector<JEvt>::iterator p = buffer[i].begin(); p != buffer[i].end(); ++p) {
226  sort(p->begin(), p->end(), make_comparator(&JFit::id, JComparison::lt()));
227  }
228  }
229  }
230 
231  int count[] = { 0, 0 };
232 
234  p0 = buffer[0].begin(),
235  p1 = buffer[1].begin(); p0 != buffer[0].end() && p1 != buffer[1].end(); ) {
236 
237  for ( ; p0 != buffer[0].end() && p1 != buffer[1].end() && compare(*p0,*p1); ++p0, ++count[1]) {
238  print(cout, inputFile[0], distance(buffer[0].cbegin(),p0), *p0, ">>", "");
239  }
240 
241  for ( ; p0 != buffer[0].end() && p1 != buffer[1].end() && compare(*p1,*p0); ++p1, ++count[1]) {
242  print(cout, inputFile[1], distance(buffer[1].cbegin(),p1), *p1, "<<", "");
243  }
244 
245  if (p0 != buffer[0].end() && p1 != buffer[1].end()) {
246 
247  if (!compare(*p0,*p1) && !compare(*p1,*p0)) {
248 
249  ++count[0];
250 
251  print(cout, inputFile[0], distance(buffer[0].cbegin(),p0), *p0, "", "\\");
252  print(cout, inputFile[1], distance(buffer[1].cbegin(),p1), *p1, "", "/ ");
253 
254  } else {
255 
256  ++count[1];
257 
258  if (p0->oid == p1->oid &&
259  p0->UNIXTimeStart == p1->UNIXTimeStart &&
260  p0->UNIXTimeStop == p1->UNIXTimeStop) {
261 
262  print(cout, inputFile[0], distance(buffer[0].cbegin(),p0), *p0, "", "");
263  print(cout, inputFile[1], distance(buffer[1].cbegin(),p1), *p1, "", "");
264 
265  JEvt::const_iterator i0 = p0->begin();
266  JEvt::const_iterator i1 = p1->begin();
267 
268  for ( ; i0 != p0->end() && i1 != p1->end(); ++i0, ++i1) {
269  if (compare(*i0, *i1) || compare(*i1,*i0)) {
270  print(cout, *i0, ">>", "");
271  print(cout, *i1, "<<", "");
272  }
273  }
274 
275  for ( ; i0 != p0->end(); ++i0) {
276  print(cout, *i0, ">>", "");
277  }
278 
279  for ( ; i1 != p1->end(); ++i1) {
280  print(cout, *i1, "<<", "");
281  }
282 
283  } else {
284 
285  print(cout, inputFile[0], distance(buffer[0].cbegin(),p0), *p0, ">>", "");
286  print(cout, inputFile[1], distance(buffer[1].cbegin(),p1), *p1, "<<", "");
287  }
288  }
289 
290  if (compare(*p0,*p1) || compare(*p1,*p0)) {
291 
292  } else {
293 
294  ++p0;
295  ++p1;
296  }
297  }
298  }
299 
300  STATUS("Number of differences / events: " << count[1] << " / " << count[0] << endl);
301 
302  if (count[1] != 0) {
303  FATAL("Number of differences " << count[1] << endl);
304  }
305 }
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:68
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