98 JRootObjectID inputFile;
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");
116 catch(
const exception &error) {
117 FATAL(error.what() << endl);
125 ifstream in(parametersFile.c_str());
130 JParameters_t parameters;
132 for (
string buffer;
getline(in, buffer); ) {
134 if (!buffer.empty() && buffer[0] != JParameters_t::SKIPLINE) {
136 istringstream is(buffer);
138 if (is >> key >> parameters) {
139 zmap[key] = parameters;
147 FATAL(
"Error opening file: " << parametersFile << endl);
151 for (map_type::const_iterator i = zmap.begin(); i != zmap.end(); ++i) {
152 cout << setw(48) << left << i->first <<
' ' << i->second << endl;
160 FATAL(
"File: " << inputFile.getFullFilename() <<
" not opened." << endl);
166 cout.imbue(locale(cout.getloc(),
color_facets[facet]->clone()));
169 int number_of_tests = 0;
170 int number_of_failures = 0;
172 const TRegexp regexp(inputFile.getObjectName());
174 TIter iter(dir->GetListOfKeys());
176 for (TKey* key; (key = (TKey*) iter.Next()) != NULL; ) {
178 const TString tag(key->GetName());
180 DEBUG(
"Key: " << tag <<
" match = " << tag.Contains(regexp) << endl);
184 if (tag.Contains(regexp)) {
186 TGraph*
g1 = dynamic_cast<TGraph*>(key->ReadObj());
190 map_type::const_iterator p = zmap.find(
g1->GetName());
192 if (p != zmap.end()) {
194 const JParameters_t& parameters = p->second;
196 const int N =
g1->GetN();
198 bool status = (N >= parameters.number_of_entries);
200 int number_of_outliers = 0;
202 for (
int i = 0; i !=
g1->GetN(); ++i) {
203 if (!parameters.range(
g1->GetY()[i])) {
204 ++number_of_outliers;
208 status = status && (number_of_outliers <= parameters.number_of_outliers);
210 cout << (status ?
GREEN :
RED) <<
"Test " <<
g1->GetName() <<
" " << (status ?
"passed" :
"failed") <<
"." <<
RESET << endl;
212 if (out != NULL && !status) {
214 const JRange<double> range(
g1->GetX(),
g1->GetX() +
g1->GetN());
216 g1->GetListOfFunctions()->Add(
new TF1(
MAKE_CSTRING(
g1->GetName() <<
":upper"),
MAKE_CSTRING(parameters.range.getUpperLimit()), range.getLowerLimit(), range.getUpperLimit()));
217 g1->GetListOfFunctions()->Add(
new TF1(
MAKE_CSTRING(
g1->GetName() <<
":lower"),
MAKE_CSTRING(parameters.range.getLowerLimit()), range.getLowerLimit(), range.getUpperLimit()));
218 out->WriteTObject(
g1);
221 number_of_tests += 1;
222 number_of_failures += (status ? 0 : 1);
228 cout << (number_of_tests > 0 && number_of_failures == 0 ?
GREEN :
RED) <<
"Number of tests/failures " << number_of_tests <<
"/" << number_of_failures <<
RESET << endl;