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).