40{
   43 
   44  string      inputFileA;
   45  string      inputFileB;
   46  double      precision;
   48 
   49  try { 
   50 
   51    JParser<> zap(
"Auxiliary program to compare PDF tables of the arrival time of the Cherenkov light from a bright point.");
 
   52 
   57 
   58    zap(argc, argv);
   59  }
   60  catch(const exception &error) {
   61    FATAL(error.what() << endl);
 
   62  }
   63 
   68 
   69  typedef JFunction1D_t::argument_type                            argument_type;
   71 
   72  JPDF_t pdfA;
   73  JPDF_t pdfB;
   74 
   75  const JFunction1D_t::JSupervisor supervisor(new JFunction1D_t::JDefaultResult(0.0));
   76 
   78    const string file_name;
   79    JPDF_t&      pdf;
   80  } buffer[] = { 
   81    { inputFileA, pdfA },
   82    { inputFileB, pdfB }
   83  };
   84 
   86 
   87    try {
   88 
   89      NOTICE(
"loading input from file " << i.file_name << 
"... " << flush);
 
   90 
   91      i.pdf.load(i.file_name.c_str());
   92      i.pdf.compile();
   93      i.pdf.setExceptionHandler(supervisor);
   94 
   96    }
   99    }
  100  }    
  101 
  102  bool ok = true;
  103 
  104  JPDF_t::super_const_iterator i = pdfA.super_begin();
  105  JPDF_t::super_const_iterator 
j = pdfB.super_begin();
 
  106 
  107  for ( ; i != pdfA.super_end() && 
  108          j != pdfB.super_end(); ++i, ++j) {
  109 
  110    const double Wa = pdfA.transformer->getWeight(JArray_t((*i).getKey()));
  111    const double Wb = pdfB.transformer->getWeight(JArray_t((*j).getKey()));
  112 
  113    if (fabs(i->first                 - 
j->first)                  >  precision ||
 
  114        fabs(i->second->first         - 
j->second->first)          >  precision ||
 
  115        fabs(Wa                       - Wb)                        >  precision) {
  116 
  118            << i->first                 << ' '
  119            << i->second->first         << ' '
  120            << Wa                       << endl);
  121 
  124            << 
j->second->first         << 
' ' 
  125            << Wb                       << endl);
  126 
  127      ok = false;
  128    }
  129 
  130    const JFunction1D_t& fa = (*i).getValue();
  131    const JFunction1D_t& fb = (*j).getValue();
  132 
  133    JFunction1D_t::const_iterator p = fa.begin();
  134    JFunction1D_t::const_iterator q = fb.begin();
  135 
  136    while (p != fa.end() && 
  137           q != fb.end()) {
  138      
  139      if (fabs(p->getX() - q->getX()) > precision) {
  140 
  141        DEBUG(
"a.x " << p->getX() << endl);
 
  142        DEBUG(
"b.x " << q->getX() << endl);
 
  143 
  144        ok = false;
  145      }
  146 
  147      if (!compare(p->getY(), q->getY(), precision)) {
  148 
  149        DEBUG(
"a.y " << p->getX() << 
' ' << p->getY() << endl);
 
  150        DEBUG(
"b.y " << q->getX() << 
' ' << q->getY() << endl);
 
  151 
  152        ok = false;
  153      }
  154 
  155      if      (p->getX() < q->getX())
  156        ++p;
  157      else if (q->getX() < p->getX())
  158        ++q;
  159      else {
  160        ++p;
  161        ++q;
  162      }
  163    }
  164 
  165    for ( ; p != fa.end(); ++p) {
  166 
  167      DEBUG(
"a.x " << p->getX() << endl);
 
  168 
  169      ok = false;
  170    }
  171 
  172    for ( ; q != fb.end(); ++q) {
  173 
  174      DEBUG(
"b.x " << q->getX() << endl);
 
  175 
  176      ok = false;
  177    }
  178  }
  179 
  180  for ( ; i != pdfA.super_end(); ++i) {
  181 
  183          << i->first                 << ' '
  184          << i->second->first         << endl); 
  185    
  186    ok = false;
  187  }
  188 
  189  for ( ; 
j != pdfB.super_end(); ++
j) {
 
  190 
  193          << 
j->second->first         << endl);
 
  194 
  195    ok = false;
  196  }
  197 
  198  if (!ok) {
  199    ERROR(inputFileA << 
" and " << inputFileB << 
" differ." << endl);
 
  200  }
  201 
  202  return (ok ? 0 : 1);
  203}
#define DEBUG(A)
Message macros.
 
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
 
virtual const char * what() const override
Get error message.
 
Utility class to parse command line options.
 
Multi-dimensional PDF table for arrival time of Cherenkov light.
 
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).