94{
   97 
   99  string         parametersFile;
  101  string         facet;
  103 
  104  try {
  105 
  106    JParser<> zap(
"Auxiliary program to apply test criteria to file.");
 
  107    
  108    zap[
'f'] = 
make_field(inputFile,         
"<input file>:<object name>");
 
  109    zap[
'P'] = 
make_field(parametersFile,    
"ASCII formatted input file with test criteria");
 
  113     
  114    zap(argc, argv);
  115  }
  116  catch(const exception &error) {
  117    FATAL(error.what() << endl);
 
  118  }
  119 
  120 
  122 
  124 
  125  map_type zmap;
  126 
  127  ifstream in(parametersFile.c_str());
  128 
  129  if (in) {
  130 
  132    JParameters_t parameters;
  133 
  134    for (
string buffer; 
getline(in, buffer); ) {
 
  135 
  136      if (!buffer.empty() && buffer[0] != JParameters_t::SKIPLINE) {
  137 
  138        istringstream is(buffer);
  139 
  140        if (is >> key >> parameters) {
  141          zmap  [
key] = parameters;
 
  143        }
  144      }
  145    }
  146 
  147    in.close();
  148 
  149  } else {
  150    FATAL(
"Error opening file: " << parametersFile << endl);
 
  151  }
  152 
  153  if (
debug >= debug_t) {
 
  154    for (map_type::const_iterator i = zmap.begin(); i != zmap.end(); ++i) {
  155      cout << setw(48) << left << i->first << ' ' << i->second << endl; 
  156    }
  157  }
  158 
  159 
  161 
  162  if (dir == NULL) {
  164  }
  165 
  166 
  168 
  169  cout.imbue(locale(cout.getloc(), color_facets[facet]->clone()));
  170 
  171  int number_of_tests    = 0;
  172  int number_of_failures = 0;
  173 
  175 
  176  TIter iter(dir->GetListOfKeys());
  177 
  178  for (TKey* key; (
key = (TKey*) iter.Next()) != NULL; ) {
 
  179 
  180    const TString tag(key->GetName());
  181 
  182    DEBUG("Key: " << tag << " match = " << tag.Contains(regexp) << endl);
  183        
  184    
  185 
  186    if (tag.Contains(regexp) && isTObject(key) && strcmp(key->GetClassName(),TGraph::Class_Name()) == 0) {
  187 
  188      TGraph*  g1 = dynamic_cast<TGraph*>(key->ReadObj());
  189 
  190      DEBUG(key->GetName() << ' ' << (g1 != NULL) << endl);
  191 
  192      if (g1 != NULL) {
  193 
  194        map_type::const_iterator p = zmap.find(g1->GetName());
  195 
  196        if (p != zmap.end()) {
  197 
  198          counts[p->first] += 1;
  199 
  200          const JParameters_t& parameters = p->second;
  201 
  202          const int number_of_entries = g1->GetN();
  203 
  204          int number_of_outliers = 0;
  205 
  206          for (int i = 0; i != g1->GetN(); ++i) {
  207            if (!parameters.range(g1->GetY()[i])) {
  208              ++number_of_outliers;
  209            }
  210          }
  211          
  212          const bool status = (number_of_entries  >= parameters.number_of_entries  &&
  213                               number_of_outliers <= parameters.number_of_outliers);
  214 
  215          cout << (status ? GREEN : RED) << "Test " << g1->GetName()                               << ' ' 
  216               << (status ? "passed" : "failed")                                                   << ' ' 
  217               << (number_of_entries  >= parameters.number_of_entries  ? "" : "too few entries")   << ' '
  218               << (number_of_outliers <= parameters.number_of_outliers ? "" : "too many outliers") << '.'
  219               << RESET << endl;
  220 
  221          if (out != NULL && !status) {
  222 
  223            const JRange<double> range(g1->GetX(), g1->GetX() + g1->GetN());
  224 
  225            g1->GetListOfFunctions()->Add(new TF1(MAKE_CSTRING(g1->GetName() << ":upper"), MAKE_CSTRING(parameters.range.getUpperLimit()), range.getLowerLimit(), range.getUpperLimit()));
  226            g1->GetListOfFunctions()->Add(new TF1(MAKE_CSTRING(g1->GetName() << ":lower"), MAKE_CSTRING(parameters.range.getLowerLimit()), range.getLowerLimit(), range.getUpperLimit()));
  227            out->WriteTObject(g1);
  228          }
  229 
  230          number_of_tests    +=  1;
  231          number_of_failures += (status ? 0 : 1);
  232        }
  233      }
  234    }
  235  }
  236 
  238    if (i->second == 0) {
  239 
  240      cout << RED << "Test " << i->first << " missing data." << RESET << endl;
  241 
  242      number_of_tests    +=  1;
  243      number_of_failures +=  1;
  244    }
  245  }
  246 
  247  cout << (number_of_tests > 0 && number_of_failures == 0 ? GREEN : RED) << "Number of tests/failures " << number_of_tests << "/" << number_of_failures << RESET << endl;
  248 
  249  if (out != NULL) {
  250 
  251    out->Write();
  252    out->Close();
  253 
  254    delete out;
  255  }
  256}
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
 
Auxiliary class to handle file name, ROOT directory and object name.
 
TString getObjectName() const
Get object name.
 
TString getFullFilename() const
Get full file name, including path.
 
Utility class to parse command line options.
 
TDirectory * getDirectory(const JRootObjectID &id)
Get TDirectory pointer.
 
std::istream & getline(std::istream &in, JString &object)
Read string from input stream until end of line.
 
const array_type< JKey_t > & get_keys(const std::map< JKey_t, JValue_t, JComparator_t, JAllocator_t > &data)
Method to create array of keys of map.
 
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).