33{
36
39
42 int Nmin;
43 double Tmax_us;
45 string disableFile;
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).");
54 zap[
'N'] =
make_field(Nmin,
"minimum number of entries") = 1;
55 zap[
'T'] =
make_field(Tmax_us,
"maximal time [us]");
57 zap[
'!'] =
make_field(disableFile,
"disable transmission file") =
"";
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
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
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}
#define DEBUG(A)
Message macros.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Utility class to parse command line options.
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
Auxiliary data structure for floating point format specification.
Acoustic transmission identifier.
Auxiliary wrapper for I/O of container with optional comment (see JComment).
Auxiliary data structure for return type of make methods.