Jpp 19.3.0-rc.1
the software that should make you happy
Loading...
Searching...
No Matches
JAcousticsDisable.cc File Reference
#include <string>
#include <iostream>
#include <iomanip>
#include <fstream>
#include <sstream>
#include <set>
#include <array>
#include <limits>
#include "TROOT.h"
#include "TFile.h"
#include "TH1D.h"
#include "TKey.h"
#include "TString.h"
#include "TRegexp.h"
#include "JAcoustics/JTransmission_t.hh"
#include "JSupport/JMeta.hh"
#include "JSystem/JGlob.hh"
#include "JSystem/JStat.hh"
#include "Jeep/JContainer.hh"
#include "Jeep/JParser.hh"
#include "Jeep/JMessage.hh"

Go to the source code of this file.

Functions

int main (int argc, char **argv)
 

Function Documentation

◆ main()

int main ( int argc,
char ** argv )
Author
mdejong Auxiliary program to set disable status of transmission based on time-of-arrival histograms.

Definition at line 32 of file JAcousticsDisable.cc.

33{
34 using namespace std;
35 using namespace JPP;
36
37 typedef JContainer< set<JTransmission_t> > disable_container;
39
40 vector<string> inputFile;
41 string outputFile;
42 int Nmin;
43 double Tmax_us;
44 array_type Q = { 0.1, 0.9 };
45 string disableFile;
46 int debug;
47
48 try {
49
50 JParser<> zap("Auxiliary program to set disable status of transmission based on time-of-arrival histograms.");
51
52 zap['f'] = make_field(inputFile, "input file (output from JCanberra).");
53 zap['o'] = make_field(outputFile) = "disable.root";
54 zap['N'] = make_field(Nmin, "minimum number of entries") = 1;
55 zap['T'] = make_field(Tmax_us, "maximal time [us]");
56 zap['Q'] = make_field(Q, "quantiles");
57 zap['!'] = make_field(disableFile, "disable transmission file") = "";
58 zap['d'] = make_field(debug, "debug.") = 1;
59
60 zap(argc, argv);
61 }
62 catch(const exception &error) {
63 FATAL(error.what() << endl);
64 }
65
66
67 inputFile = getFilenames(inputFile);
68
69 disable_container disable;
70
71 if (disableFile != "" && getFileStatus(disableFile.c_str())) {
72 disable.load(disableFile.c_str());
73 }
74
75 disable.comment.add(JMeta(argc, argv));
76
77 TFile out(outputFile.c_str(), "recreate");
78
79 TH1D ha("ha", NULL, 1000, 0.0, 1.0e4);
80 TH1D hb("hb", NULL, 1000, 0.0, 1.0e3);
81
82 for (vector<string>::const_iterator i = inputFile.begin(); i != inputFile.end(); ++i) {
83
84 NOTICE("Processing " << *i << endl) ;
85
86 TFile in(i->c_str(), "read");
87
88 TIter iter(in.GetListOfKeys());
89
90 for (TKey* key; (key = (TKey*) iter.Next()) != NULL; ) {
91
92 if (TString(key->GetName()).EndsWith(".toa")) {
93
94 TH1* h1 = dynamic_cast<TH1*>(key->ReadObj());
95
96 if (h1 != NULL) {
97
98 TString buffer(h1->GetName());
99
100 const char* regexp = "[^0-9][0-9]* [0-9]*[^0-9]";
101
102 buffer = buffer(TRegexp(regexp));
103 buffer = buffer(1, buffer.Length() - 2);
104
105 if (buffer.Length() > 0 && buffer.IsDigit()) {
106
108
109 istringstream(buffer.Data()) >> id;
110
111 const int N = h1->GetEntries();
112
113 if (N > 0 && N < Nmin) {
114
115 NOTICE("disable: " << setw(2) << id.tx << ' ' << setw(8) << id.rx << ' ' << setw(6) << N << " < " << setw(6) << Nmin << endl);
116
117 disable.insert(id);
118 }
119
120 ha.Fill(N);
121
122 if (N > 0) {
123
124 vector<double> R(Q.size());
125
126 h1->GetQuantiles(Q.size(), R.data(), Q.data());
127
128 const double T_us = (*R.rbegin() - *R.begin()) * 1.0e6;
129
130 hb.Fill(T_us);
131
132 DEBUG("transmission: " << setw(2) << id.tx << ' ' << setw(8) << id.rx << ' ' << setw(6) << N << ' ' << FIXED(6,1) << T_us << " [us]" << endl);
133
134 if (T_us > Tmax_us) {
135
136 NOTICE("disable: " << setw(2) << id.tx << ' ' << setw(8) << id.rx << ' ' << FIXED(6,1) << T_us << " > " << FIXED(6,1) << Tmax_us << " [us]" << endl);
137
138 disable.insert(id);
139 }
140 }
141
142 } else {
143
144 ERROR("Histogram name " << h1->GetName() << " not compatible with regular expression " << regexp << "." << endl);
145 }
146 }
147 }
148 }
149
150 in.Close();
151 }
152
153 if (disableFile != "") {
154 disable.store(disableFile.c_str());
155 }
156
157 out.Write();
158 out.Close();
159}
string outputFile
#define DEBUG(A)
Message macros.
Definition JMessage.hh:62
#define ERROR(A)
Definition JMessage.hh:66
#define NOTICE(A)
Definition JMessage.hh:64
#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
Utility class to parse command line options.
Definition JParser.hh:1698
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
Auxiliary data structure for floating point format specification.
Definition JManip.hh:448
Acoustic transmission identifier.
Auxiliary wrapper for I/O of container with optional comment (see JComment).
Definition JContainer.hh:42
Auxiliary data structure for return type of make methods.
Definition JVectorize.hh:28
Auxiliary class for ROOT I/O of application specific meta data.
Definition JMeta.hh:72