93int main(
int argc, 
char **argv)
 
   99  string         parametersFile;
 
  106    JParser<> zap(
"Auxiliary program to apply test criteria to file.");
 
  108    zap[
'f'] = 
make_field(inputFile,         
"<input file>:<object name>");
 
  109    zap[
'P'] = 
make_field(parametersFile,    
"ASCII formatted input file with test criteria");
 
  111    zap[
'F'] = 
make_field(facet,             
"Color facet")                                       = get_keys(color_facets);
 
  116  catch(
const exception &error) {
 
  117    FATAL(error.what() << endl);
 
  127  ifstream in(parametersFile.c_str());
 
  132    JParameters_t parameters;
 
  134    for (
string buffer; getline(in, buffer); ) {
 
  136      if (!buffer.empty() && buffer[0] != JParameters_t::SKIPLINE) {
 
  138        istringstream is(buffer);
 
  140        if (is >> key >> parameters) {
 
  141          zmap  [key] = parameters;
 
  150    FATAL(
"Error opening file: " << parametersFile << endl);
 
  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; 
 
  160  TDirectory* dir = getDirectory(inputFile);
 
  169  cout.imbue(locale(cout.getloc(), color_facets[facet]->clone()));
 
  171  int number_of_tests    = 0;
 
  172  int number_of_failures = 0;
 
  176  TIter iter(dir->GetListOfKeys());
 
  178  for (TKey* key; (key = (TKey*) iter.Next()) != NULL; ) {
 
  180    const TString tag(key->GetName());
 
  182    DEBUG(
"Key: " << tag << 
" match = " << tag.Contains(regexp) << endl);
 
  186    if (tag.Contains(regexp) && isTObject(key) && strcmp(key->GetClassName(),TGraph::Class_Name()) == 0) {
 
  188      TGraph*  
g1 = 
dynamic_cast<TGraph*
>(key->ReadObj());
 
  190      DEBUG(key->GetName() << 
' ' << (
g1 != NULL) << endl);
 
  194        map_type::const_iterator p = zmap.find(
g1->GetName());
 
  196        if (p != zmap.end()) {
 
  198          counts[p->first] += 1;
 
  200          const JParameters_t& parameters = p->second;
 
  202          const int number_of_entries = 
g1->GetN();
 
  204          int number_of_outliers = 0;
 
  206          for (
int i = 0; i != 
g1->GetN(); ++i) {
 
  207            if (!parameters.range(
g1->GetY()[i])) {
 
  208              ++number_of_outliers;
 
  212          const bool status = (number_of_entries  >= parameters.number_of_entries  &&
 
  213                               number_of_outliers <= parameters.number_of_outliers);
 
  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") << 
'.' 
  221          if (out != NULL && !status) {
 
  227            out->WriteTObject(
g1);
 
  230          number_of_tests    +=  1;
 
  231          number_of_failures += (status ? 0 : 1);
 
  238    if (i->second == 0) {
 
  240      cout << RED << 
"Test " << i->first << 
" missing data." << RESET << endl;
 
  242      number_of_tests    +=  1;
 
  243      number_of_failures +=  1;
 
  247  cout << (number_of_tests > 0 && number_of_failures == 0 ? GREEN : RED) << 
"Number of tests/failures " << number_of_tests << 
"/" << number_of_failures << RESET << endl;