45       if (cta != ToA_t && cta != ToE_t) {
 
   53           if ((cta == ToA_t && first.
getToA() == second.
getToA()) ||
 
   67             if (cta == ToA_t) { 
return first.
getToA() < second.
getToA(); }
 
   68             if (cta == ToE_t) { 
return first.
getToE() < second.
getToE(); }
 
   92     inline bool operator()(
const JEvent& first, 
const JEvent& second)
 const 
   98           if (first.size() == second.size()) {
 
  100             for (JEvent::const_iterator
 
  102                    p1 = second.begin(); p0 != first.end() && 
p1 != second.end(); ++p0, ++
p1) {
 
  104               if ((*
this)(*p0, *
p1)) {
 
  113             return first.size() < second.size();
 
  148     std::ostream& operator()(std::ostream& out, 
const std::string& filename, 
const int index, 
const JEvent& evt, 
const std::string& prefix, 
const std::string& postfix)
 const 
  154         out << prefix << (prefix == 
"" ? 
"" : 
" ")
 
  155             << setw(width)  << left << filename << right    << 
' ' 
  156             << 
"[" << 
FILL(6,
'0') << index << 
"]" << 
FILL() << 
' ' 
  159             << setw(2)      << evt.
getID()                  << 
' ' 
  160             << 
FIXED(12,6)  << evt. begin()->getToA()       << 
' ' 
  161             << 
FIXED(12,6)  << evt.rbegin()->getToA()
 
  162             << (postfix == 
"" ? 
"" :  
" ") << postfix       << endl;
 
  178     std::ostream& operator()(std::ostream& out, 
const JTransmission& 
object, 
const std::string& prefix, 
const std::string& postfix)
 const 
  184         out << prefix << (prefix == 
"" ? 
"" : 
" ")
 
  185             << setw(8) << 
object.getID()                     << 
' ' 
  186             << setw(8) << 
object.getRunNumber()              << 
' ' 
  187             << 
FIXED(13,7) << 
object.getToA()                << 
' ' 
  188             << 
FIXED(13,7) << 
object.getToE()                << 
' ' 
  189             << 
FIXED(8,0) << 
object.getQ() 
 
  190             << (postfix == 
"" ? 
"" :  
" ") << postfix        << endl;
 
  205   static inline bool toa(
const JEvent& first, 
const JEvent& second)
 
  207     return first.begin()->getToA() < second.begin()->getToA();
 
  218   static inline bool toe(
const JEvent& first, 
const JEvent& second)
 
  220     return first.begin()->getToE() < second.begin()->getToE();
 
  239 int main(
int argc, 
char **argv)
 
  251     JParser<> zap(
"Program to compare acoustics event data.");
 
  253     zap[
'f'] = 
make_field(inputFile,  
"two outputs of JAcousticsEventBuilder[.sh]");
 
  254     zap[
'n'] = 
make_field(numberOfEvents)                                    = JLimit::max();    
 
  255     zap[
'O'] = 
make_field(option,     Null_t << 
" -> nothing " << Sort_t << 
" -> sort")  = Null_t, Sort_t;
 
  256     zap[
'C'] = 
make_field(cta,        ToA_t  << 
" -> ToA "     << ToE_t  << 
" -> ToE")   = ToA_t,  ToE_t;
 
  261   catch(
const exception &error) {
 
  262     FATAL(error.what() << endl);
 
  265   if (inputFile.size() != 2u) {
 
  266     FATAL(
"Wrong number of input files " << inputFile.size() << endl); 
 
  269   const size_t  width = max(inputFile[0].size(), inputFile[1].size());
 
  274   for (
int i = 0; i != 2; ++i) {
 
  277       buffer[i].push_back(*in.next());
 
  281   if (option == Sort_t) {
 
  283     for (
int i = 0; i != 2; ++i) {
 
  285       for (
JEvent& evt : buffer[i]) {
 
  286         sort(evt.begin(), evt.end(), compare);
 
  289       if (cta == ToA_t) { sort(buffer[i].begin(), buffer[i].end(), toa); }
 
  290       if (cta == ToE_t) { sort(buffer[i].begin(), buffer[i].end(), toe); }
 
  293         sort(p->begin(), p->end(), compare);
 
  298   int count[] = { 0, 0 };
 
  301          p0 = buffer[0].begin(),
 
  302          p1 = buffer[1].begin(); p0 != buffer[0].end() && 
p1 != buffer[1].end(); ) {
 
  304     for ( ; p0 != buffer[0].end() && 
p1 != buffer[1].end() && ((cta == ToA_t && toa(*p0,*
p1)) || (cta == ToE_t && toe(*p0,*
p1))); ++p0, ++count[1]) {
 
  305       print(cout, inputFile[0], 
distance(buffer[0].cbegin(),p0), *p0, 
">>", 
"");
 
  308     for ( ; p0 != buffer[0].end() && 
p1 != buffer[1].end() && ((cta == ToA_t && toa(*
p1,*p0)) || (cta == ToE_t && toe(*
p1,*p0))); ++
p1, ++count[1]) {
 
  312     if (p0 != buffer[0].end() && 
p1 != buffer[1].end()) {
 
  314       if (!compare(*p0,*
p1) && !compare(*
p1,*p0)) {
 
  318         print(cout, inputFile[0], 
distance(buffer[0].cbegin(),p0), *p0, 
"", 
"\\");
 
  325         print(cout, inputFile[0], 
distance(buffer[0].cbegin(),p0), *p0, 
"", 
"*");
 
  328         if (p0->getDetectorID() == 
p1->getDetectorID() &&
 
  329             p0->getCounter()    == 
p1->getCounter()    &&
 
  330             p0->getID()         == 
p1->getID()) {
 
  332           JEvent::const_iterator i0 = p0->begin();
 
  333           JEvent::const_iterator i1 = 
p1->begin();
 
  335           while (i0 != p0->end() && i1 != 
p1->end()) {
 
  337             for ( ; i0 != p0->end() && i1 != 
p1->end() && compare(*i0,*i1); ++i0) {
 
  338               print(cout, *i0, 
">>", 
"");
 
  341             for ( ; i0 != p0->end() && i1 != 
p1->end() && compare(*i1,*i0); ++i1) {
 
  342               print(cout, *i1, 
"<<", 
"");
 
  345             if (i0 != p0->end() && i1 != 
p1->end()) {
 
  346               if (!compare(*i0, *i1) && !compare(*i1,*i0)) {
 
  353           for ( ; i0 != p0->end(); ++i0) {
 
  354             print(cout, *i0, 
">>", 
"");
 
  357           for ( ; i1 != 
p1->end(); ++i1) {
 
  358             print(cout, *i1, 
"<<", 
"");
 
  363           print(cout, inputFile[0], 
distance(buffer[0].cbegin(),p0), *p0, 
">>", 
"");
 
  368       if (toa(*p0,*
p1) || toa(*
p1,*p0)) {
 
  378   STATUS(
"Number of differences / events: " << count[1] << 
" / " << count[0] << endl);
 
  380   if (buffer[0].size() != buffer[1].size()) {
 
  381     FATAL(
"Different size " << buffer[0].size() << 
' ' << buffer[1].size() << endl);
 
  385     FATAL(
"Number of differences " << count[1] << endl);
 
ROOT TTree parameter settings.
 
int main(int argc, char **argv)
 
#define THROW(JException_t, A)
Marco for throwing exception with std::ostream compatible message.
 
General purpose messaging.
 
Utility class to parse command line options.
 
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
 
Scanning of objects from a single file according a format that follows from the extension of each fil...
 
std::vector< T >::difference_type distance(typename std::vector< T >::const_iterator first, typename PhysicsEvent::const_iterator< T > second)
Specialisation of STL distance.
 
Exception for accessing a value in a collection that is outside of its range.
 
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.
 
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
 
Auxiliary data structure for sequence of same character.
 
Auxiliary data structure for floating point format specification.
 
int getCounter() const
Get counter.
 
int getID() const
Get emitter identifier.
 
const int getDetectorID() const
Get detector identifier.
 
double getToA() const
Get calibrated time of arrival.
 
double getToE() const
Get estimated time of emission.
 
double getW() const
Get normalisation.
 
double getQ() const
Get quality.
 
int getRunNumber() const
Get run number.
 
int getID() const
Get identifier.
 
Auxiliary class for defining the range of iterations of objects.