42{
45
47 JLimit_t& numberOfEvents = inputFile.getLimit();
49 string detectorFile;
50 string ahrsFile;
51 double precision;
55
56 try {
57
58 JParser<> zap(
"Program to monitor AHRS data.");
59
60 zap[
'f'] =
make_field(inputFile,
"output of JConvertDB -q ahrs");
64 zap[
'c'] =
make_field(ahrsFile,
"output of JAHRSCalibration");
65 zap[
'p'] =
make_field(precision,
"precision") = 1.0e-6;
69
70 zap(argc, argv);
71 }
72 catch(const exception &error) {
73 FATAL(error.what() << endl);
74 }
75
76
78
79 try {
81 }
84 }
85
87
90
92
94
95 TH1D h0("h0", NULL, 100, 0.0, 5.0);
96 TH1D h1("h1", NULL, 100, 0.0, 5.0);
97 TH2D h2("h2", NULL, 100, 0.0, 5.0, 100, 0.0, 5.0);
98 TH1D hn("hn", NULL, 100, 0.0, 1.0e4);
99
100 TH2D* ha = new TH2D("ha", NULL,
101 string.size(), -0.5, string.size() - 0.5,
103
104 for (Int_t i = 1; i <= ha->GetXaxis()->GetNbins(); ++i) {
105 ha->GetXaxis()->SetBinLabel(i,
MAKE_CSTRING(
string.at(i-1)));
106 }
107 for (Int_t i = 1; i <= ha->GetYaxis()->GetNbins(); ++i) {
109 }
110
111 TH2D* hb = (TH2D*) ha->Clone("hb");
112 TH2D* hc = (TH2D*) ha->Clone("hc");
113 TH2D* hd = (TH2D*) ha->Clone("hd");
114
116
118
119 for (JDetector::const_iterator module =
detector.begin(); module !=
detector.end(); ++module) {
120 if (module->getFloor() != 0) {
121 data[module->getID()] = 0;
122 }
123 }
124
126
128
130
131 const JAHRS* parameters = inputFile.
next();
132
133 if (router.hasModule(parameters->
DOMID)) {
134
136
138
145
146 h0.Fill(A);
149
151
153
155
158 }
159 }
160
162 buffer[parameters->
DOMID].push_back(*parameters);
163 else
165 << setw(16) << parameters->
UNIXTIME <<
' '
166 << setw(4) << parameters->
DUID <<
' '
167 << setw(2) << parameters->
FLOORID <<
' '
176 }
177 }
178 }
180
181
183
185
186 if (i->second.size() >= 2u) {
187
189
190 for (vector<JAHRS>::const_iterator q = i->second.begin(), p = q++; q != i->second.end(); ++p, ++q) {
191
192 if ((fabs(p->AHRS_A0 - q->AHRS_A0) > precision ||
193 fabs(p->AHRS_A1 - q->AHRS_A1) > precision ||
194 fabs(p->AHRS_A2 - q->AHRS_A2) > precision)
195 &&
196 (fabs(p->AHRS_H0 - q->AHRS_H0) > precision ||
197 fabs(p->AHRS_H1 - q->AHRS_H1) > precision ||
198 fabs(p->AHRS_H2 - q->AHRS_H2) > precision)) {
199
201 }
202 }
203 }
204 }
205
206 for (map_type::const_iterator i =
data.begin(); i !=
data.end(); ++i) {
207
208 const JLocation& location = router.getModule(i->first);
209
210 hn.Fill(i->second);
211
213 }
214
216
217 for (JDetector::const_iterator module =
detector.begin(); module !=
detector.end(); ++module) {
218
219 map_type::const_iterator p =
data.find(module->getID());
220
221 if (p !=
data.end()) {
222 cout <<
getLabel(module->getLocation()) <<
' ' << setw(8) << module->getID() <<
' ' << setw(6) << p->second << endl;
223 }
224 }
225 }
226
228
230
231 out << h0 << h1 << h2 << hn;
232 out << *ha << *hb << *hc << *hd;
233
234 out.Write();
235 out.Close();
236 }
237
239
240 int n_no_data_compass = 0;
241 for (map_type::const_iterator i =
data.begin(); i !=
data.end(); ++i) {
242 if (i->second > 0) {
243 q1.put(i->second);
244 }
245 else {
246 n_no_data_compass++;
247 }
248 }
249
250 for (vector<double>::const_iterator i = Q.begin(); i != Q.end(); ++i) {
252 <<
FIXED(5,0) << n_no_data_compass <<
' '
253 <<
FIXED(8,3) << q1.getQuantile(*i));
254 }
256
257 return 0;
258}
#define DEBUG(A)
Message macros.
#define QAQC(A)
QA/QC output macro.
int qaqc
QA/QC file descriptor.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
#define MAKE_CSTRING(A)
Make C-string.
Logical location of module.
int getFloor() const
Get floor number.
int getString() const
Get string number.
Router for direct addressing of module data in detector data structure.
Utility class to parse command line options.
General purpose class for object reading from a list of file names.
virtual bool hasNext() override
Check availability of next element.
counter_type getCounter() const
Get counter.
virtual const pointer_type & next() override
Get next element.
std::string getLabel(const JLocation &location)
Get module label for monitoring and other applications.
floor_range getRangeOfFloors(const JDetector &detector)
Get range of floors.
void load(const std::string &file_name, JDetector &detector)
Load detector from input file.
JComparator< JResult_t T::*, JComparison::lt > make_comparator(JResult_t T::*member)
Helper method to create comparator between values of data member.
int getIndex()
Get index for user I/O manipulation.
static const double H
Planck constant [eV s].
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
bool is_valid(const json &js)
Check validity of JSon data.
std::map< int, range_type > map_type
Auxiliary data structure for floating point format specification.
Auxiliary class to map module identifier to AHRS calibration.
Auxiliary data structure to check validity of AHRS data.
long long int UNIXTIME
[ms]
Router for mapping of string identifier to index.
Auxiliary class for defining the range of iterations of objects.
static counter_type max()
Get maximum counter value.