192{
  195  
  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]");
 
  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());
  220 
  222 
  223  for (int i = 0; i != 2; ++i) {
  224    
  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) {
  236      }
  237    }
  238  }
  239  
  240  int count[] = { 0, 0 };
  241  
  242  for (vector<JEvt>::const_iterator
  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]) {
 
  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, 
"", 
"\\");
 
  262 
  263      } else {
  264        
  265        ++count[1];
  266 
  267        if (p0->detid         == 
p1->detid         &&
 
  268            p0->UNIXTimeStart == 
p1->UNIXTimeStart &&
 
  269            p0->UNIXTimeStop  == 
p1->UNIXTimeStop) {
 
  270 
  271          print(cout, inputFile[0], 
distance(buffer[0].cbegin(),p0), *p0, 
"", 
"");
 
  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, 
">>", 
"");
 
  296        }
  297      }
  298      
  299      if (compare(*p0,*
p1) || compare(*
p1,*p0)) {
 
  300 
  301      } else {
  302 
  303        ++p0;
  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}
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
 
std::vector< T >::difference_type distance(typename std::vector< T >::const_iterator first, typename PhysicsEvent::const_iterator< T > second)
Specialisation of STL distance.
 
Utility class to parse command line options.
 
Object reading from a list of files.
 
virtual bool hasNext() override
Check availability of next element.
 
std::ostream & print(std::ostream &out, const JTestSummary &summary, const char delimiter=' ', const bool useColors=true)
Print test summary.
 
JComparator< JResult_t T::*, JComparison::lt > make_comparator(JResult_t T::*member)
Helper method to create comparator between values of data member.
 
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
 
Auxiliary class for defining the range of iterations of objects.
 
static counter_type max()
Get maximum counter value.