Jpp  debug
the software that should make you happy
Functions
JTestTuna.cc File Reference

Auxiliary program to apply test criteria to file. More...

#include <string>
#include <iostream>
#include <fstream>
#include <iomanip>
#include <map>
#include "TROOT.h"
#include "TFile.h"
#include "TObject.h"
#include "TKey.h"
#include "TString.h"
#include "TRegexp.h"
#include "TGraph.h"
#include "TF1.h"
#include "JGizmo/JRootObjectID.hh"
#include "JGizmo/JGizmoToolkit.hh"
#include "JTools/JRange.hh"
#include "JLang/JLangToolkit.hh"
#include "JLang/JColorFacet.hh"
#include "JLang/JVectorize.hh"
#include "Jeep/JParser.hh"
#include "Jeep/JMessage.hh"
#include "Jeep/JPrint.hh"
#include "Jeep/JColor.hh"

Go to the source code of this file.

Functions

int main (int argc, char **argv)
 

Detailed Description

Auxiliary program to apply test criteria to file.

The option -f corresponds to <file name>:<object name>.

Definition in file JTestTuna.cc.

Function Documentation

◆ main()

int main ( int  argc,
char **  argv 
)

Definition at line 93 of file JTestTuna.cc.

94 {
95  using namespace std;
96  using namespace JPP;
97 
98  JRootObjectID inputFile;
99  string parametersFile;
100  string outputFile;
101  string facet;
102  int debug;
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");
110  zap['o'] = make_field(outputFile, "Optional output file with copy of failing input") = "";
111  zap['F'] = make_field(facet, "Color facet") = get_keys(color_facets);
112  zap['d'] = make_field(debug) = 1;
113 
114  zap(argc, argv);
115  }
116  catch(const exception &error) {
117  FATAL(error.what() << endl);
118  }
119 
120 
121  map<string, int> counts;
122 
124 
125  map_type zmap;
126 
127  ifstream in(parametersFile.c_str());
128 
129  if (in) {
130 
131  string key;
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;
142  counts[key] = 0;
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 
160  TDirectory* dir = getDirectory(inputFile);
161 
162  if (dir == NULL) {
163  FATAL("File: " << inputFile.getFullFilename() << " not opened." << endl);
164  }
165 
166 
167  TFile* out = (outputFile != "" ? new TFile(outputFile.c_str(), "recreate") : NULL);
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 
174  const TRegexp regexp(inputFile.getObjectName());
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  // option match
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 
237  for (map<string, int>::const_iterator i = counts.begin(); i != counts.end(); ++i) {
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 }
string outputFile
#define DEBUG(A)
Message macros.
Definition: JMessage.hh:62
#define FATAL(A)
Definition: JMessage.hh:67
int debug
debug level
Definition: JSirene.cc:69
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Definition: JParser.hh:2158
#define MAKE_CSTRING(A)
Make C-string.
Definition: JPrint.hh:136
Double_t g1(const Double_t x)
Function.
Definition: JQuantiles.cc:25
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.
Definition: JParser.hh:1714
@ debug_t
debug
Definition: JMessage.hh:29
TDirectory * getDirectory(const JRootObjectID &id)
Get TDirectory pointer.
bool isTObject(const TKey *key)
Check if given key corresponds to a TObject.
static const JColorFacetMap_t color_facets
Color facets.
Definition: JColorFacet.hh:332
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.
Definition: JVectorize.hh:139
std::istream & getline(std::istream &in, JString &object)
Read string from input stream until end of line.
Definition: JString.hh:478
@ RED
red
Definition: JColorFacet.hh:30
@ RESET
reset
Definition: JColorFacet.hh:37
@ GREEN
green
Definition: JColorFacet.hh:31
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
std::map< int, range_type > map_type
Definition: JSTDTypes.hh:14