63{
67
69 JLimit_t& numberOfEvents = inputFile.getLimit();
72 double TMaxLocal_ns;
74 int numberOfTimeslices;
76 double Pmin;
80
82
83 try {
84
85 JParser<> zap(
"Example program to search for correlations between triggered events and timeslice data.");
86
99
101
103 }
104 catch(const exception& error) {
106 }
107
108
110
111 try {
113 }
116 }
117
119
121
123
127
129
133
135
137
139
141
142 if (selector == "") {
143
149 } else {
151 }
152
153 NOTICE(
"Selected class " << ps->getClassName() <<
endl);
154
155 } else {
156
157 ps = zmap[selector];
158
159 ps->configure(inputFile);
160 }
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180 ps->setLimit(inputFile.getLimit());
181
183
185 map_type buffer;
186
188
190
191
193
194
197 }
198
199 do{
201
203
205
206
207
208 double t0 = 0.0;
210
213
216 break;
217 }
218 }
219
221
224
225 buffer[event->getFrameIndex()].push_back(t0);
226 }
228
229
230 ps->rewind();
231
232 while (ps->hasNext()) {
233
235
237
238 map_type::const_iterator p = buffer.lower_bound(timeslice->
getFrameIndex() - numberOfTimeslices);
239 map_type::const_iterator q = buffer.upper_bound(timeslice->
getFrameIndex() + numberOfTimeslices);
240
242
243 for (map_type::const_iterator i = p; i != q; ++i) {
245 }
246
248 continue;
249 }
250
251 for (JDAQTimeslice::const_iterator frame = timeslice->begin(); frame != timeslice->end(); ++frame) {
252
254
255 buildL1(*frame, router.getModule(frame->getModuleID()),
back_inserter(data));
256
258
260
262
263 for (map_type::const_iterator i = p; i != q; ++i) {
264 for (map_type::mapped_type::const_iterator
j = i->second.begin();
j != i->second.end(); ++
j) {
265
266 const double t0 = *
j;
267
268 h1->Fill(t1 - t0);
269 }
270 }
271 }
272 }
273 }
274
275 buffer.clear();
276
278
281
282 TF1 f1("f1", "[0]*exp(-0.5*(x-[1])*(x-[1])/([2]*[2])) + [3]");
283
284 string option = "L";
285
287 option += "Q";
288 }
289
291
292 bool status = false;
293
294 status2[
module->getID()] = DEFAULT;
295
297
298 if (p ==
manager.end() || p->second->GetEntries() == 0) {
299
300 status2[
module->getID()] = NODATA;
301
302 continue;
303 }
304
305 TH1D* h1 = p->second;
306
307
308
313
314 for (int i = 1; i != h1->GetNbinsX(); ++i) {
315
318
322 }
323
325 }
326
327 ymin /= h1->GetNbinsX();
328
329 f1.SetParameter(0,
ymax);
330 f1.SetParameter(1, x0);
332 f1.SetParameter(2, sigma);
333 else
335 f1.SetParameter(3,
ymin);
336
337 for (
Int_t i = 0; i != f1.GetNpar(); ++i) {
338 f1.SetParError(i, 0.0);
339 }
340
341
342
343 h1->Fit(&f1, option.c_str(), "same", x0 - 5 * sigma, x0 + 5 * sigma);
344
345 status = (fabs(f1.GetParameter(1)) <= 0.5*
getFrameTime() &&
346 f1.GetParameter(0) >= f1.GetParameter(3));
347
348 if (status)
status2[
module->getID()] = IN_SYNC;
349
350
351
354
355 for (
Int_t i = 1, ns = -(numberOfTimeslices + 1); i <= h1->GetNbinsX(); ++i) {
356
359
360 while (x > (ns + 1) *
getFrameTime() - TMax_ns) { ++ns; }
361
364 else
365 bg .put(y);
366 }
367
369
371
372 const Double_t y = bg.getTotal() * i->second.getCount() / bg.getCount();
373 const Double_t P = TMath::PoissonI(i->second.getTotal(), y);
374
375 DEBUG(
"Peak at " <<
setw(4) << i->first <<
" [frame time] "
376 << "S/N = "
377 <<
FIXED(7,1) << i->second.getTotal() <<
" / "
378 <<
FIXED(7,1) << y <<
' '
380
382 ++i;
383 else
385 }
386
387 if (!(
sn.size() == 1 &&
388 sn.begin()->first == 0)) {
389
391
393
394 const Double_t noise = bg.getTotal() * i->second.getCount() / bg.getCount();
395
396 WARNING(
"Peak at " <<
setw(4) << i->first <<
" [frame time] "
397 << "S/N = "
398 <<
FIXED(7,1) << i->second.getTotal() <<
" / "
400
403 peaksPerDoms[
module->getID()].push_back(i->second.getTotal());
405 }
406
407 status2[
module->getID()] = (sn.size() == 1 ? OUT_SYNC : ERROR);
408 }
409
410
411
412 if (!status) {
413
415
418 }
419 }
420 }
421
424
425
427 manager[
module->getID()]->Reset("ICESM");
428 }
430 }
431 else{
433 }
435
436
437 NOTICE(
"Managing non-working and OOS DOMs." <<
endl);
439
441
442 try {
444 }
446
448
450
451 NOTICE(
"Module " <<
setw(8) << i->first <<
" set QEs of all PMTs to zero." <<
endl);
452
455 }
456 }
457 }
458
460
462
463 out << parameters <<
endl;
464
465 out.close();
466 }
467
470 }
471
472
474 ofstream stream(
peaks);
475
476 stream << "#DOM NB_PEAKS TIMESLICE_SHIFT SIGNAL NOISE\n";
477
479 stream <<
dom->first <<
" ";
480 int i = 1;
481 for (map_type::mapped_type::const_iterator data =
dom->second.begin();
data !=
dom->second.end(); ++
data) {
483 ((i%4 == 0) ? stream << "\n" : stream << " ");
484 i++;
485 }
486 }
487 stream.close();
488 }
489
490
493
497 }
501 }
502 }
503
505
507
508 return 0;
509
510}
#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
Simple wrapper around JModuleRouter class for direct addressing of PMT data in detector data structur...
Auxiliary class for map of PMT parameters.
Template definition of a multi-dimensional oscillation probability interpolation table.
JReader & read(JReader &in) override final
Read from input.
Template definition for direct access of elements in ROOT TChain.
int getFrameIndex() const
Get frame index.
JTriggerCounter_t next()
Increment trigger counter.
void load(const std::string &file_name, JDetector &detector)
Load detector from input file.
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
const char * getTime()
Get current local time conform ISO-8601 standard.
KM3NeT DAQ data structures and auxiliaries.
double getFrameTime()
Get frame time duration.
double getMaximalTime(const double R_Hz)
Get maximal time for given rate.
static const int NUMBER_OF_PMTS
Total number of PMTs in module.
std::map< int, range_type > map_type
Auxiliary data structure for floating point format specification.
Auxiliary data structure to unify weights of acoustics data according to the number of pings per emit...
Transmission with position.
void load(const char *file_name)
Load from input file.
Auxiliary class to select ROOT class based on class name.
Auxiliary class for defining the range of iterations of objects.
static counter_type max()
Get maximum counter value.
Auxiliary data structure for L1 build parameters.
Auxiliary data structure for floating point format specification.