Reports failure if: no acoustic data, too large number of outliers, emitter expected to work is not working, hydrophone expected to work is not working.
150 string parametersFile;
156 int number_of_failures = 0;
161 JParser<> zap(
"Auxiliary program to apply test criteria to 2D histograms monitoring acoustic rate per emitter.");
163 zap[
'f'] =
make_field(inputFile,
"output root file from JAcousticsMonitor_short");
164 zap[
'P'] =
make_field(parametersFile,
"ASCII formatted input file with test criteria (acoustic_monitor_00000XXX.txt)");
167 zap[
'w'] =
make_field(outputFile1,
"output summary file");
168 zap[
't'] =
make_field(outputFile2,
"output root file");
173 catch(
const exception &error) {
174 FATAL(error.what() << endl);
177 ofstream out(outputFile1.c_str());
178 out.imbue(locale(out.getloc(),
color_facets[facet]->clone()));
179 out <<
"ACOUSTIC MONITORING \nRun: " << run << endl;
180 out <<
"\n(Note: red highlights are the reason for the warning)" << endl;
188 ifstream
in(parametersFile.c_str());
195 for (
string buffer;
getline(
in, buffer); ) {
197 if (!buffer.empty() && buffer[0] != JParameters_t::SKIPLINE) {
199 istringstream
is(buffer);
201 if (
is >> key >> parameters) { zmap[key] =
parameters; }
208 FATAL(
"Error opening file: " << parametersFile << endl);
218 catch(
const JException& error) {
222 JHashMap<int, JLocation> receivers;
226 receivers[
i->getID()] =
i->getLocation();
232 JManager<int, TH2D> H3(
new TH2D(
"H[%].rate-test", NULL,
233 string1.size(), - 0.5, string1.size() - 0.5,
234 floor1.getUpperLimit() + 1, - 0.5, floor1.getUpperLimit() + 0.5));
236 for (Int_t
i = 1;
i <= H3->GetXaxis()->GetNbins(); ++
i) {
240 for (Int_t
i = 1;
i <= H3->GetYaxis()->GetNbins(); ++
i) {
246 TFile*
f = TFile::Open(inputFile.c_str());
254 if(objectIDs.empty()) {
255 ++number_of_failures;
257 out <<
RED <<
"No acoustic data." << endl;
263 for (map_type::const_iterator
i = zmap.begin();
i != zmap.end(); ++
i) {
265 if (
i->first[0] ==
'0') {
continue; }
267 out <<
"\nEmitter: " <<
i->first << endl;
269 const TRegexp regexp(
i->first);
271 TH2D* h3 = H3[stoi(
i->first)];
275 for (Int_t ix = 1; ix <= h3->GetXaxis()->GetNbins(); ++ix) {
276 for (Int_t iy = 1; iy <= h3->GetYaxis()->GetNbins(); ++iy) {
277 h3->Fill(ix-1, iy-1, 1.0);
285 const TString& objectName = objectID->getFullObjectName();
288 if (objectName.Index(regexp) != -1) {
291 if (!
i->second.working) {
292 out << (
i->second.working != 0 ?
RED :
GREEN);
293 out <<
"Emitter started working." << endl;
295 out <<
"(Acoustic rates not tested)" << endl;
299 if (
i->second.working) {
303 int number_of_bins = 0;
304 int number_of_outliers = 0;
306 double min_rate =
i->second.expected_rate *
i->second.range.getLowerLimit();
307 double max_rate =
i->second.expected_rate *
i->second.range.getUpperLimit();
308 int outliers =
i->second.number_of_outliers;
310 if (h2 == NULL && dynamic_cast<TH2*>(p) != NULL) { h2 =
dynamic_cast<TH2*
>(p); };
314 for (Int_t ix = 1; ix <= h2->GetXaxis()->GetNbins(); ++ix) {
315 for (Int_t iy = 1; iy <= h2->GetYaxis()->GetNbins(); ++iy) {
317 const Double_t z = h2->GetBinContent(ix, iy);
318 string du =
to_string(h2->GetXaxis()->GetBinLabel(ix));
319 string floor =
to_string(h2->GetYaxis()->GetBinLabel(iy));
321 du.insert(du.begin(), 4 - du.length(),
'0');
322 floor.insert(floor.begin(), 3 - floor.length(),
'0');
323 const string id = du +
'.' + floor;
326 if (zmap.find(
id)!=zmap.end()) { working = zmap.find(
id)->second.working; }
331 if (z < min_rate || z > max_rate) {
333 h3->Fill(ix-1, iy-1, 1.0);
335 ++number_of_outliers;
338 if (floor ==
"000" && z == 0) {
339 out <<
"DU " << du <<
", floor " << floor <<
" : Acoustic rate out of range -> " << z <<
" Hz." <<
RED <<
" Hydrophone stopped working." << endl;
341 ++number_of_failures;
343 out <<
"DU " << du <<
", floor " << floor <<
" : Acoustic rate out of range -> " << z <<
" Hz." << endl;
346 }
else if (!working) {
347 out <<
"DU " << du <<
", floor " << floor <<
" : Working again -> " << z <<
" Hz." << endl;
352 }
else {
FATAL(
"Object at " << objectName <<
" is not TH2." << endl); }
354 out << (number_of_outliers > outliers ?
RED :
GREEN) <<
"Number of outliers = " << number_of_outliers <<
"/" << number_of_bins << endl;
357 if (number_of_outliers > outliers) {
359 ++number_of_failures;
360 out << (number_of_outliers > outliers ?
RED :
GREEN) <<
"Test failed." << endl;
364 out << (outliers >= number_of_outliers ?
GREEN :
RED) <<
"Test passed." << endl;
372 }
else if (objectID + 1 == objectIDs.cend()) {
375 for (Int_t ix = 1; ix <= h3->GetXaxis()->GetNbins(); ++ix) {
376 for (Int_t iy = 1; iy <= h3->GetYaxis()->GetNbins(); ++iy) {
377 h3->Fill(ix-1, iy-1, 1.0);
382 if (
i->second.working) {
383 ++number_of_failures;
384 out << (
i->second.working != 0 ?
RED :
GREEN) <<
"Emitter stopped working." << endl;
387 out <<
"Emitter is expected to not work." << endl;
394 TFile out2(outputFile2.c_str(),
"recreate");
402 if (number_of_failures > 0) {
403 number_of_failures = 1;
404 cout << number_of_failures << endl;
Utility class to parse command line options.
o $QUALITY_ROOT d $DEBUG!CHECK_EXIT_CODE JPlot1D f
*fatal Wrong number of arguments esac JCookie sh typeset Z DETECTOR typeset Z SOURCE_RUN typeset Z TARGET_RUN set_variable PARAMETERS_FILE $WORKDIR parameters
#define MAKE_CSTRING(A)
Make C-string.
JMODEL::JString getString(const JFit &fit)
Get model parameters of string.
static const JColorFacetMap_t color_facets
Color facets.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
const array_type< JValue_t > & make_array(const JValue_t(&array)[N])
Method to create array of values.
std::istream & getline(std::istream &in, JString &object)
Read string from input stream until end of line.
void load(const std::string &file_name, JDetector &detector)
Load detector from input file.
std::string to_string(const T &value)
Convert value to string.
do set_variable DETECTOR_TXT $WORKDIR detector
then fatal Wrong number of arguments fi set_variable DETECTOR $argv[1] set_variable INPUT_FILE $argv[2] eval JPrintDetector a $DETECTOR O IDENTIFIER eval JPrintDetector a $DETECTOR O SUMMARY JAcoustics sh $DETECTOR_ID source JAcousticsToolkit sh CHECK_EXIT_CODE typeset A EMITTERS get_tripods $WORKDIR tripod txt EMITTERS get_transmitters $WORKDIR transmitter txt EMITTERS for EMITTER in
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.
void readDir(TDirectory *dir, std::vector< TString > &v)