Jpp test-rotations-new
the software that should make you happy
Loading...
Searching...
No Matches
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
123 typedef map<string, JParameters_t> map_type;
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 FATAL(A)
Definition JMessage.hh:67
int debug
debug level
Definition JSirene.cc:72
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Definition JParser.hh:2142
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:1698
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.
Definition JString.hh:478
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).
for(int i=n/2;i !=0 &&p !=this->end();--i,++p)
Definition JPolint.hh:793