BmnRoot 26.10.0-18-g4e3414f9
Software framework of the BM@N experiment
Loading...
Searching...
No Matches
BmnHistStat.cxx
Go to the documentation of this file.
1#include "BmnHistStat.h"
2
3// #include <stdio.h>
4// #include <curl/curl.h>
5// BmnRoot
6#include "BmnRawDataDecoder.h"
7#include "BmnTrigWaveDigit.h"
8
9using namespace std::chrono;
10#ifdef HAVE_PROMCPP
11using namespace prometheus;
12#endif
13
15 : BmnHist()
16 , varsInitDone{false}
17 , fdPosition{-1}
18 , bdPosition{-1}
19 , bc1Position{-1}
20 , bit_filter{0}
21 , sum_fsd{0}
22 , sum_tof400{0}
23 , sum_tof700{0}
24 , sum_csc{0}
25 , sum_fhcal{0}
26 , sum_gem{0}
27 , sum_nbc1{0}
28 , nbc1{0}
29 , fsd2gem{0}
30 , tof4002gem{0}
31 , tof7002gem{0}
32 , csc2gem{0}
33 , fhcal2gem{0}
34 , gem2nbc1{0}
35 , nevents{0}
39#ifdef HAVE_PROMCPP
40 , gauge_family{nullptr}
41 , counter_family{nullptr}
42 , registry_init_done{false}
43 , metrics_available{false}
44#endif
45// , pushgateway{"http://localhost:9091"}
46{
47 fTitle = title;
48 fName = title + "_cl";
49 refPath = path;
50
52 initHistFD();
53 initHistBD();
55
56 bit_filter = BIT(11); // @TODO: replace with something unified (valid only for period 9)
57}
58
60{
61 delete canStatDet;
62 delete canStatFD;
63 delete canStatBD;
64 delete canStatCorr;
65
66 if (fDir)
67 return;
68
69 delete histGemStat;
70 delete histSiliconStat;
71 delete histTof400Stat;
72 delete histTof700Stat;
73 delete histCscStat;
74 delete histFHCalStat;
75
76 delete histFDGemStat;
77 delete histFDSiliconStat;
78 delete histFDTof400Stat;
79 delete histFDTof700Stat;
80 delete histFDCscStat;
81 delete histFDFHCalStat;
82
83 delete histBDGemStat;
84 delete histBDSiliconStat;
85 delete histBDTof400Stat;
86 delete histBDTof700Stat;
87 delete histBDCscStat;
88 delete histBDFHCalStat;
89
90 delete histGemSilicon;
91 delete histGemTof400;
92 delete histGemTof700;
93 delete histGemCsc;
94 delete histGemFHCal;
95 delete histCscFHCal;
96
97 for (auto padDet : canStatDetPads)
98 delete padDet;
99
100 for (auto padFD : canStatFDPads)
101 delete padFD;
102
103 for (auto padBD : canStatBDPads)
104 delete padBD;
105
106 for (auto padCorr : canStatCorrPads)
107 delete padCorr;
108}
109
110#ifdef HAVE_PROMCPP
112{
113 // LOGF(info, "Families %zu", registry->Collect().size());
114 if (!exposer) {
115 exposer = make_unique<Exposer>("127.0.0.1:9092");
116 registry = make_shared<Registry>();
117 }
118 registry->Remove(*gauge_family);
119 DBG("ResetRegistry")
120 // LOGF(info, "Families %zu after", registry->Collect().size());
121 registry_init_done = true;
122 metrics_available = false;
123 return;
124}
125
127{
128 auto& gf = BuildGauge().Name("Spill_events").Help("Number of digits in each detectors").Register(*registry);
129 gauge_family = &gf;
130 {
131 Gauge& worker_gauge = gauge_family->Add({{"Stage", "Digi"}, {"Level", "Spill"}, {"Var", "sum_nbc1"}});
132 gauges_by_name["sum_nbc1"] = &worker_gauge;
133 }
134 {
135 Gauge& worker_gauge = gauge_family->Add({{"Stage", "Digi"}, {"Level", "Spill"}, {"Var", "gem2nbc1"}});
136 gauges_by_name["gem2nbc1"] = &worker_gauge;
137 }
138 {
139 Gauge& worker_gauge = gauge_family->Add({{"Stage", "Digi"}, {"Level", "Spill"}, {"Var", "fsd2gem"}});
140 gauges_by_name["fsd2gem"] = &worker_gauge;
141 }
142 {
143 Gauge& worker_gauge = gauge_family->Add({{"Stage", "Digi"}, {"Level", "Spill"}, {"Var", "tof4002gem"}});
144 gauges_by_name["tof4002gem"] = &worker_gauge;
145 }
146 {
147 Gauge& worker_gauge = gauge_family->Add({{"Stage", "Digi"}, {"Level", "Spill"}, {"Var", "tof7002gem"}});
148 gauges_by_name["tof7002gem"] = &worker_gauge;
149 }
150 {
151 Gauge& worker_gauge = gauge_family->Add({{"Stage", "Digi"}, {"Level", "Spill"}, {"Var", "csc2gem"}});
152 gauges_by_name["csc2gem"] = &worker_gauge;
153 }
154 {
155 Gauge& worker_gauge = gauge_family->Add({{"Stage", "Digi"}, {"Level", "Spill"}, {"Var", "fhcal2gem"}});
156 gauges_by_name["fhcal2gem"] = &worker_gauge;
157 }
158 {
159 Gauge& worker_gauge = gauge_family->Add({{"Stage", "Digi"}, {"Level", "Spill"}, {"Var", "time_point"}});
160 gauges_by_name["time_point"] = &worker_gauge;
161 }
162 exposer->RegisterCollectable(registry);
163 metrics_available = true;
164 return;
165}
166
168{
169 return;
170}
171
173{
174 gauges_by_name["sum_nbc1"]->Set(sum_nbc1);
175 gauges_by_name["gem2nbc1"]->Set(gem2nbc1);
176 gauges_by_name["fsd2gem"]->Set(fsd2gem);
177 gauges_by_name["tof4002gem"]->Set(tof4002gem);
178 gauges_by_name["tof7002gem"]->Set(tof7002gem);
179 gauges_by_name["csc2gem"]->Set(csc2gem);
180 gauges_by_name["fhcal2gem"]->Set(fhcal2gem);
181 gauges_by_name["time_point"]->Set(duration_cast<milliseconds>(last_ev_time_show.time_since_epoch()).count());
182 return kBMNSUCCESS;
183}
184#endif
185
187{
188 fServer = serv;
189 fServer->Register("/", this);
190 TString path = "/" + fTitle + "/";
191 fServer->Register(path, canStatDet);
192 fServer->Register(path, canStatFD);
193 fServer->Register(path, canStatBD);
194 fServer->Register(path, canStatCorr);
195 // fServer->Register(path + "/spill_stat", MetricsHandler);
196 fServer->SetItemField(path, "_monitoring", "2000");
197 fServer->SetItemField(path, "_layout", "grid3x3");
198 TString cmd = "/" + fName + "/->Reset()";
199 TString cmdTitle = path + "Reset";
200 fServer->RegisterCommand(cmdTitle.Data(), cmd.Data(), "button;");
201 fServer->Restrict(cmdTitle.Data(), "visible=shift");
202 fServer->Restrict(cmdTitle.Data(), "allow=shift");
203 fServer->Restrict(cmdTitle.Data(), "deny=guest");
204 cmd = "/" + fName + "/->SetRefRun(%arg1%)";
205 cmdTitle = path + "SetRefRun";
206 fServer->RegisterCommand(cmdTitle.Data(), cmd.Data(), "button;");
207 // fServer->Restrict(cmdTitle.Data(), "deny=guest");
208}
209
210void BmnHistStat::SetDir(TFile* outFile, TTree* recoTree)
211{
212 frecoTree = recoTree;
213 fDir = NULL;
214 if (outFile != NULL)
215 fDir = outFile->mkdir(fTitle + "_hists");
216 histGemStat->SetDirectory(fDir);
217 histSiliconStat->SetDirectory(fDir);
218 histTof400Stat->SetDirectory(fDir);
219 histTof700Stat->SetDirectory(fDir);
220 histCscStat->SetDirectory(fDir);
221 histFHCalStat->SetDirectory(fDir);
222
223 histFDGemStat->SetDirectory(fDir);
224 histFDSiliconStat->SetDirectory(fDir);
225 histFDTof400Stat->SetDirectory(fDir);
226 histFDTof700Stat->SetDirectory(fDir);
227 histFDCscStat->SetDirectory(fDir);
228 histFDFHCalStat->SetDirectory(fDir);
229
230 histBDGemStat->SetDirectory(fDir);
231 histBDSiliconStat->SetDirectory(fDir);
232 histBDTof400Stat->SetDirectory(fDir);
233 histBDTof700Stat->SetDirectory(fDir);
234 histBDCscStat->SetDirectory(fDir);
235 histBDFHCalStat->SetDirectory(fDir);
236
237 histGemSilicon->SetDirectory(fDir);
238 histGemTof400->SetDirectory(fDir);
239 histGemTof700->SetDirectory(fDir);
240 histGemCsc->SetDirectory(fDir);
241 histGemFHCal->SetDirectory(fDir);
242 histCscFHCal->SetDirectory(fDir);
243#ifdef HAVE_PROMCPP
244 if (fDir) {
247 }
248#endif
249}
250
259
261{
262 const uint32_t timewin_begin = 312;
263 const uint32_t timewin_end = 362;
264 BmnEventHeader* header = fDigiArrays->header;
265 ev_type = header->GetEventType();
266#ifdef HAVE_PROMCPP
267 if (fDir) {
268 if (header->GetSpillStart()) {
269 printf("Spill start n ev %lu\n", nevents);
270 if ((sum_gem > 0) && (nbc1 > Min_NBC1)) {
275 sum_nbc1 = nbc1;
283 printf("sum_nbc1 %4.3f gem2nbc1 %4.3f fsd2gem %4.3f \n", sum_nbc1, gem2nbc1, fsd2gem);
285 // SendMetrics();
286 } else if (metrics_available)
289 }
290 nevents++;
291 }
292#endif
293 if (ev_type == kBMNPAYLOAD) {
294 TClonesArray* gemDigits = fDigiArrays->gem;
295 TClonesArray* siliconDigits = fDigiArrays->silicon;
296 TClonesArray* tof400Digits = fDigiArrays->tof400;
297 TClonesArray* tof700Digits = fDigiArrays->tof701;
298 if (tof700Digits == nullptr)
299 tof700Digits = fDigiArrays->tof700;
300 TClonesArray* cscDigits = fDigiArrays->csc;
301 TClonesArray* fhcalDigits = fDigiArrays->fhcal;
302
303 vector<TClonesArray*>* trigDigits = fDigiArrays->trigAr;
304
305 if (!varsInitDone) {
306 fdPosition = getPositionInArray(trigDigits, "TQDC_FD");
307 bdPosition = getPositionInArray(trigDigits, "BD");
308 bc1Position = getPositionInArray(trigDigits, "TQDC_BC1");
309 varsInitDone = true;
310 }
311
312 if (gemDigits)
313 histGemStat->Fill(gemDigits->GetEntriesFast());
314 if (siliconDigits)
315 histSiliconStat->Fill(siliconDigits->GetEntriesFast());
316 if (tof400Digits)
317 histTof400Stat->Fill(tof400Digits->GetEntriesFast());
318 if (tof700Digits)
319 histTof700Stat->Fill(tof700Digits->GetEntriesFast());
320 if (cscDigits)
321 histCscStat->Fill(cscDigits->GetEntriesFast());
322 if (fhcalDigits)
323 histFHCalStat->Fill(fhcalDigits->GetEntriesFast());
324 if (trigDigits) {
325 TClonesArray* TQDC_FD = trigDigits->at(fdPosition);
326 TClonesArray* TQDC_BD = trigDigits->at(bdPosition);
327 if (TQDC_FD->GetEntriesFast() != 0) {
328 BmnTrigWaveDigit* fdDigit = dynamic_cast<BmnTrigWaveDigit*>(TQDC_FD->At(0));
329 Double_t peakFD = fdDigit->GetPeak(timewin_begin, timewin_end);
330 if (gemDigits) {
331 histFDGemStat->Fill(peakFD, gemDigits->GetEntriesFast());
332 }
333 if (siliconDigits) {
334 histFDSiliconStat->Fill(peakFD, siliconDigits->GetEntriesFast());
335 }
336 if (tof400Digits) {
337 histFDTof400Stat->Fill(peakFD, tof400Digits->GetEntriesFast());
338 }
339 if (tof700Digits) {
340 histFDTof700Stat->Fill(peakFD, tof700Digits->GetEntriesFast());
341 }
342 if (cscDigits) {
343 histFDCscStat->Fill(peakFD, cscDigits->GetEntriesFast());
344 }
345 if (fhcalDigits) {
346 histFDFHCalStat->Fill(peakFD, fhcalDigits->GetEntriesFast());
347 }
348 }
349 if (TQDC_BD) {
350 Double_t numberMod = TQDC_BD->GetEntriesFast();
351 if (gemDigits) {
352 histBDGemStat->Fill(numberMod, gemDigits->GetEntriesFast());
353 }
354 if (siliconDigits) {
355 histBDSiliconStat->Fill(numberMod, siliconDigits->GetEntriesFast());
356 }
357 if (tof400Digits) {
358 histBDTof400Stat->Fill(numberMod, tof400Digits->GetEntriesFast());
359 }
360 if (tof700Digits) {
361 histBDTof700Stat->Fill(numberMod, tof700Digits->GetEntriesFast());
362 }
363 if (cscDigits) {
364 histBDCscStat->Fill(numberMod, cscDigits->GetEntriesFast());
365 }
366 if (fhcalDigits) {
367 histBDFHCalStat->Fill(numberMod, fhcalDigits->GetEntriesFast());
368 }
369 }
370 }
371
372 if (gemDigits && siliconDigits)
373 histGemSilicon->Fill(gemDigits->GetEntriesFast(), siliconDigits->GetEntriesFast());
374 if (gemDigits && tof400Digits)
375 histGemTof400->Fill(gemDigits->GetEntriesFast(), tof400Digits->GetEntriesFast());
376 if (gemDigits && tof700Digits)
377 histGemTof700->Fill(gemDigits->GetEntriesFast(), tof700Digits->GetEntriesFast());
378 if (gemDigits && cscDigits)
379 histGemCsc->Fill(gemDigits->GetEntriesFast(), cscDigits->GetEntriesFast());
380 if (gemDigits && fhcalDigits)
381 histGemFHCal->Fill(gemDigits->GetEntriesFast(), fhcalDigits->GetEntriesFast());
382 if (cscDigits && fhcalDigits)
383 histCscFHCal->Fill(cscDigits->GetEntriesFast(), fhcalDigits->GetEntriesFast());
384
385#ifdef HAVE_PROMCPP
386 // fDir means set of hists not for show (may be resetted)
387 // bc1Position if not found
388 if ((fDir) && (bc1Position >= 0)) {
389 if (header->GetInputSignalsAR() | bit_filter) {
390 if (siliconDigits)
391 sum_fsd += siliconDigits->GetEntriesFast();
392 if (tof400Digits)
393 sum_tof400 += tof400Digits->GetEntriesFast();
394 if (tof700Digits)
395 sum_tof700 += tof700Digits->GetEntriesFast();
396 if (cscDigits)
397 sum_csc += cscDigits->GetEntriesFast();
398 if (fhcalDigits)
399 sum_fhcal += fhcalDigits->GetEntriesFast();
400 if (gemDigits)
401 sum_gem += gemDigits->GetEntriesFast();
402 TClonesArray* TQDC_BC1 = trigDigits->at(bc1Position);
403 for (Int_t digIndex = 0; digIndex < TQDC_BC1->GetEntriesFast(); digIndex++) {
404 BmnTrigWaveDigit* td = static_cast<BmnTrigWaveDigit*>(TQDC_BC1->At(digIndex));
405 nbc1 += td->GetIntegral(timewin_begin, timewin_end);
406 }
407 last_ev_time = header->GetEventTimeTP();
408 // printf("sum_fsd %4.2f sum_gem %4.2f nbc1 %4.2f\n", sum_fsd, sum_gem, nbc1);
409 }
410 }
411#endif
412 } // else {
413 // if (ev_type_prev == kBMNPAYLOAD) { // spill ended on prev event
414 // }
415 // }
417}
418
420{
421 sum_fsd = 0;
422 sum_tof400 = 0;
423 sum_tof700 = 0;
424 sum_csc = 0;
425 sum_fhcal = 0;
426 sum_gem = 0;
427 nbc1 = 0;
428 fsd2gem = 0;
429 tof4002gem = 0;
430 tof7002gem = 0;
431 csc2gem = 0;
432 fhcal2gem = 0;
433 gem2nbc1 = 0;
434 nevents = 0;
435}
436
437// BmnStatus BmnHistStat::SendMetrics()
438// {
439// string job = "job1";
440// // string instance = "";
441// string url = pushgateway + "/metrics/job/" + curl_easy_escape(nullptr, job.c_str(), 0);
442// // + "/instance/" + curl_easy_escape(nullptr, instance.c_str(), 0);
443// string payload =
444// string("# HELP gem2nbc1 GEM/n(BC1) digits in a spill\n")
445// + "# TYPE gem2nbc1 gauge\n"
446// + Form("gem2nbc1 %3.3f\n", gem2nbc1)
447// + "# HELP fsd2gem FSD/GEM digits in a spill\n"
448// + "# TYPE fsd2gem gauge\n"
449// + Form("fsd2gem %3.3f\n", fsd2gem)
450// + "# HELP time_point Last event timestamp\n"
451// + "# TYPE time_point gauge\n"
452// + Form("time_point %zu\n", duration_cast<milliseconds>(last_ev_time_show.time_since_epoch()).count());
453
454// CURL* curl = curl_easy_init();
455// if (!curl) {
456// std::cerr << "curl init failed\n";
457// return kBMNERROR;
458// }
459// struct curl_slist* headers = nullptr;
460// headers = curl_slist_append(headers, "Content-Type: text/plain; version=0.0.4");
461// curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
462// curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PUT"); // PUT replaces metrics for that job/instance
463// curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
464// curl_easy_setopt(curl, CURLOPT_POSTFIELDS, payload.c_str());
465// curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, (long)payload.size());
466// curl_easy_setopt(curl, CURLOPT_TIMEOUT, 10L);
467// // SendText sets body and Content-Type
468// // arg->SetText(out.str().c_str(), "text/plain; version=0.0.4; charset=utf-8");
469// CURLcode res = curl_easy_perform(curl);
470// if (res != CURLE_OK) {
471// std::cerr << "curl failed: " << curl_easy_strerror(res) << "\n";
472// curl_slist_free_all(headers);
473// curl_easy_cleanup(curl);
474// return kBMNERROR;
475// }
476// long http_code = 0;
477// curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &http_code);
478// std::cout << "Pushgateway HTTP status: " << http_code << "\n";
479
480// curl_slist_free_all(headers);
481// curl_easy_cleanup(curl);
482// return kBMNSUCCESS;
483// }
484
486{
487 if (refID != id) {
488 TString FileName = Form("bmn_run%04d_hist.root", id);
489 printf("SetRefRun: %s\n", FileName.Data());
490 refRunName = FileName;
491 refID = id;
493 // BmnHist::LoadRefRun(refID, refPath + FileName, fTitle, canStatFDPads, NamesStatFD);
494 // BmnHist::LoadRefRun(refID, refPath + FileName, fTitle, canStatBDPads, NamesStatBD);
495 // BmnHist::LoadRefRun(refID, refPath + FileName, fTitle, canStatCorrPads, NamesStatCorr);
496 DrawBoth();
497 }
498
499 return kBMNSUCCESS;
500}
501
503{
504 for (auto pad : canStatDetPads) {
505 if (pad->ref)
506 delete pad->ref;
507 pad->ref = NULL;
508 }
509 refID = 0;
510}
511
513{
514 printf("ResetStat\n");
515 histGemStat->Reset();
516 histSiliconStat->Reset();
517 histTof400Stat->Reset();
518 histTof700Stat->Reset();
519 histCscStat->Reset();
520 histFHCalStat->Reset();
521
522 histFDGemStat->Reset();
523 histFDSiliconStat->Reset();
524 histFDTof400Stat->Reset();
525 histFDTof700Stat->Reset();
526 histFDCscStat->Reset();
527 histFDFHCalStat->Reset();
528
529 histBDGemStat->Reset();
530 histBDSiliconStat->Reset();
531 histBDTof400Stat->Reset();
532 histBDTof700Stat->Reset();
533 histBDCscStat->Reset();
534 histBDFHCalStat->Reset();
535
536 histGemSilicon->Reset();
537 histGemTof400->Reset();
538 histGemTof700->Reset();
539 histGemCsc->Reset();
540 histGemFHCal->Reset();
541 histCscFHCal->Reset();
542}
543
545{
546 TString name;
547 name = fTitle + "_GEM";
548 histGemStat = new TH1I(name, name, 250, 1, Max_GEM_Cnt);
549 histGemStat->GetXaxis()->SetTitle("Count in event");
550 histGemStat->GetYaxis()->SetTitle("Activations count");
551 name = fTitle + "_SILICON";
552 histSiliconStat = new TH1I(name, name, 250, 1, Max_FSD_Cnt);
553 histSiliconStat->GetXaxis()->SetTitle("Count in event");
554 histSiliconStat->GetYaxis()->SetTitle("Activations count");
555 name = fTitle + "_ToF400";
556 histTof400Stat = new TH1I(name, name, 100, 1, Max_ToF_Cnt);
557 histTof400Stat->GetXaxis()->SetTitle("Count in event");
558 histTof400Stat->GetYaxis()->SetTitle("Activations count");
559 name = fTitle + "_ToF700";
560 histTof700Stat = new TH1I(name, name, 100, 1, Max_ToF_Cnt);
561 histTof700Stat->GetXaxis()->SetTitle("Count in event");
562 histTof700Stat->GetYaxis()->SetTitle("Activations count");
563 name = fTitle + "_CSC";
564 histCscStat = new TH1I(name, name, 200, 1, Max_CSC_Cnt);
565 histCscStat->GetXaxis()->SetTitle("Count in event");
566 histCscStat->GetYaxis()->SetTitle("Activations count");
567 name = fTitle + "_FHCAL";
568 histFHCalStat = new TH1I(name, name, 250, 1, Max_FHC_Cnt);
569 histFHCalStat->GetXaxis()->SetTitle("Count in event");
570 histFHCalStat->GetYaxis()->SetTitle("Activations count");
571
572 name = fTitle + "Canvas";
573 canStatDet = new TCanvas(name, name, PAD_WIDTH * 2, PAD_HEIGHT * 3);
574 canStatDet->Divide(3, 2);
575 canStatDetPads.resize(3 * 2);
576 NamesStatDet.resize(3 * 2);
577 for (Int_t iPad = 0; iPad < 6; iPad++) {
578 PadInfo* p = new PadInfo();
579 canStatDetPads[iPad] = p;
580 canStatDet->GetPad(iPad + 1)->SetGrid();
581 }
582 canStatDetPads[0]->current = histGemStat;
583 canStatDetPads[1]->current = histSiliconStat;
584 canStatDetPads[2]->current = histTof400Stat;
585 canStatDetPads[3]->current = histTof700Stat;
586 canStatDetPads[4]->current = histCscStat;
587 canStatDetPads[5]->current = histFHCalStat;
588 for (size_t iPad = 0; iPad < canStatDetPads.size(); iPad++)
589 if (canStatDetPads[iPad]->current) {
590 NamesStatDet.push_back(canStatDetPads[iPad]->current->GetName());
592 }
593}
594
596{
597 TString name;
598 name = fTitle + "_FD_GEM";
599 histFDGemStat = new TH2F(name, name, 300, 0, Max_FD_Sig, 250, 1, Max_GEM_Cnt);
600 histFDGemStat->GetXaxis()->SetTitle("FD.GetPeak()");
601 histFDGemStat->GetYaxis()->SetTitle("Number of digits in event");
602
603 name = fTitle + "_FD_Silicon";
604 histFDSiliconStat = new TH2F(name, name, 300, 0, Max_FD_Sig, 250, 1, Max_FSD_Cnt);
605 histFDSiliconStat->GetXaxis()->SetTitle("FD.GetPeak()");
606 histFDSiliconStat->GetYaxis()->SetTitle("Number of digits in event");
607
608 name = fTitle + "_FD_Tof400";
609 histFDTof400Stat = new TH2F(name, name, 300, 0, Max_FD_Sig, 100, 1, Max_ToF_Cnt);
610 histFDTof400Stat->GetXaxis()->SetTitle("FD.GetPeak()");
611 histFDTof400Stat->GetYaxis()->SetTitle("Number of digits in event");
612
613 name = fTitle + "_FD_Tof700";
614 histFDTof700Stat = new TH2F(name, name, 300, 0, Max_FD_Sig, 100, 1, Max_ToF_Cnt);
615 histFDTof700Stat->GetXaxis()->SetTitle("FD.GetPeak()");
616 histFDTof700Stat->GetYaxis()->SetTitle("Number of digits in event");
617
618 name = fTitle + "_FD_CSC";
619 histFDCscStat = new TH2F(name, name, 300, 0, Max_FD_Sig, 150, 1, Max_CSC_Cnt);
620 histFDCscStat->GetXaxis()->SetTitle("FD.GetPeak()");
621 histFDCscStat->GetYaxis()->SetTitle("Number of digits in event");
622
623 name = fTitle + "_FD_FHCAL";
624 histFDFHCalStat = new TH2F(name, name, 300, 0, Max_FD_Sig, 250, 1, Max_FHC_Cnt);
625 histFDFHCalStat->GetXaxis()->SetTitle("FD.GetPeak()");
626 histFDFHCalStat->GetYaxis()->SetTitle("Number of digits in event");
627
628 name = fTitle + "FD_DetCanvas";
629 canStatFD = new TCanvas(name, name, PAD_WIDTH * 2, PAD_HEIGHT * 3);
630 canStatFD->Divide(3, 2);
631 canStatFDPads.resize(3 * 2);
632 NamesStatFD.resize(3 * 2);
633 for (Int_t iPad = 0; iPad < 6; iPad++) {
634 PadInfo* p = new PadInfo();
635 p->opt = "colz";
636 canStatFDPads[iPad] = p;
637 canStatFD->GetPad(iPad + 1)->SetGrid();
638 }
639 canStatFDPads[0]->current = histFDGemStat;
640 canStatFDPads[1]->current = histFDSiliconStat;
641 canStatFDPads[2]->current = histFDTof400Stat;
642 canStatFDPads[3]->current = histFDTof700Stat;
643 canStatFDPads[4]->current = histFDCscStat;
644 canStatFDPads[5]->current = histFDFHCalStat;
645 for (size_t iPad = 0; iPad < canStatFDPads.size(); iPad++)
646 if (canStatFDPads[iPad]->current) {
647 NamesStatFD.push_back(canStatFDPads[iPad]->current->GetName());
648 // BmnHist::SetHistStyleTH2(canStatFDPads[iPad]->current);
649 }
650}
651
653{
654 TString name;
655 name = fTitle + "_BD_GEM";
656 histBDGemStat = new TH2F(name, name, Max_BD_Cnt - 1, 1, Max_BD_Cnt, 250, 1, Max_GEM_Cnt);
657 histBDGemStat->GetXaxis()->SetTitle("Number of digits in BD");
658 histBDGemStat->GetYaxis()->SetTitle("Number of digits in event GEM");
659
660 name = fTitle + "_BD_Silicon";
661 histBDSiliconStat = new TH2F(name, name, Max_BD_Cnt - 1, 1, Max_BD_Cnt, 250, 1, Max_FSD_Cnt);
662 histBDSiliconStat->GetXaxis()->SetTitle("Number of digits in BD");
663 histBDSiliconStat->GetYaxis()->SetTitle("Number of digits in event Silicon");
664
665 name = fTitle + "_BD_Tof400";
666 histBDTof400Stat = new TH2F(name, name, Max_BD_Cnt - 1, 1, Max_BD_Cnt, 100, 1, Max_ToF_Cnt);
667 histBDTof400Stat->GetXaxis()->SetTitle("Number of digits in BD");
668 histBDTof400Stat->GetYaxis()->SetTitle("Number of digits in event Tof400");
669
670 name = fTitle + "_BD_Tof700";
671 histBDTof700Stat = new TH2F(name, name, Max_BD_Cnt - 1, 1, Max_BD_Cnt, 100, 1, Max_ToF_Cnt);
672 histBDTof700Stat->GetXaxis()->SetTitle("Number of digits in BD");
673 histBDTof700Stat->GetYaxis()->SetTitle("Number of digits in event Tof700");
674
675 name = fTitle + "_BD_CSC";
676 histBDCscStat = new TH2F(name, name, Max_BD_Cnt - 1, 1, Max_BD_Cnt, 150, 1, Max_CSC_Cnt);
677 histBDCscStat->GetXaxis()->SetTitle("Number of digits in BD");
678 histBDCscStat->GetYaxis()->SetTitle("Number of digits in event CSC");
679
680 name = fTitle + "_BD_FHCAL";
681 histBDFHCalStat = new TH2F(name, name, Max_BD_Cnt - 1, 1, Max_BD_Cnt, 250, 1, Max_FHC_Cnt);
682 histBDFHCalStat->GetXaxis()->SetTitle("Number of digits in BD");
683 histBDFHCalStat->GetYaxis()->SetTitle("Number of digits in event FHCAL");
684
685 name = fTitle + "BD_DetCanvas";
686 canStatBD = new TCanvas(name, name, PAD_WIDTH * 2, PAD_HEIGHT * 3);
687 canStatBD->Divide(3, 2);
688 canStatBDPads.resize(3 * 2);
689 NamesStatBD.resize(3 * 2);
690 for (Int_t iPad = 0; iPad < 6; iPad++) {
691 PadInfo* p = new PadInfo();
692 p->opt = "colz";
693 canStatBDPads[iPad] = p;
694 canStatBD->GetPad(iPad + 1)->SetGrid();
695 }
696 canStatBDPads[0]->current = histBDGemStat;
697 canStatBDPads[1]->current = histBDSiliconStat;
698 canStatBDPads[2]->current = histBDTof400Stat;
699 canStatBDPads[3]->current = histBDTof700Stat;
700 canStatBDPads[4]->current = histBDCscStat;
701 canStatBDPads[5]->current = histBDFHCalStat;
702 for (size_t iPad = 0; iPad < canStatBDPads.size(); iPad++)
703 if (canStatBDPads[iPad]->current) {
704 NamesStatBD.push_back(canStatBDPads[iPad]->current->GetName());
705 }
706}
707
709{
710 TString name;
711 name = fTitle + "_GEM_Silicon";
712 histGemSilicon = new TH2F(name, name, 250, 1, Max_GEM_Cnt, 250, 1, Max_FSD_Cnt);
713 histGemSilicon->GetXaxis()->SetTitle("Number of digits in event GEM");
714 histGemSilicon->GetYaxis()->SetTitle("Number of digits in event Silicon");
715
716 name = fTitle + "_GEM_Tof400";
717 histGemTof400 = new TH2F(name, name, 250, 1, Max_GEM_Cnt, 100, 1, Max_ToF_Cnt);
718 histGemTof400->GetXaxis()->SetTitle("Number of digits in event GEM");
719 histGemTof400->GetYaxis()->SetTitle("Number of digits in event Tof400");
720
721 name = fTitle + "_GEM_Tof700";
722 histGemTof700 = new TH2F(name, name, 250, 1, Max_GEM_Cnt, 100, 1, Max_ToF_Cnt);
723 histGemTof700->GetXaxis()->SetTitle("Number of digits in event GEM");
724 histGemTof700->GetYaxis()->SetTitle("Number of digits in event Tof700");
725
726 name = fTitle + "_GEM_CSC";
727 histGemCsc = new TH2F(name, name, 250, 1, Max_GEM_Cnt, 150, 1, Max_CSC_Cnt);
728 histGemCsc->GetXaxis()->SetTitle("Number of digits in event GEM");
729 histGemCsc->GetYaxis()->SetTitle("Number of digits in event CSC");
730
731 name = fTitle + "_GEM_FHCAL";
732 histGemFHCal = new TH2F(name, name, 250, 1, Max_GEM_Cnt, 250, 1, Max_FHC_Cnt);
733 histGemFHCal->GetXaxis()->SetTitle("Number of digits in event GEM");
734 histGemFHCal->GetYaxis()->SetTitle("Number of digits in event FHCAL");
735
736 name = fTitle + "_CSC_FHCAL";
737 histCscFHCal = new TH2F(name, name, 150, 1, Max_CSC_Cnt, 250, 1, Max_FHC_Cnt);
738 histCscFHCal->GetXaxis()->SetTitle("Number of digits in event CSC");
739 histCscFHCal->GetYaxis()->SetTitle("Number of digits in event FHCAL");
740
741 name = fTitle + "CorrCanvas";
742 canStatCorr = new TCanvas(name, name, PAD_WIDTH * 2, PAD_HEIGHT * 3);
743 canStatCorr->Divide(3, 2);
744 canStatCorrPads.resize(3 * 2);
745 NamesStatCorr.resize(3 * 2);
746 for (Int_t iPad = 0; iPad < 6; iPad++) {
747 PadInfo* p = new PadInfo();
748 p->opt = "colz";
749 canStatCorrPads[iPad] = p;
750 canStatCorr->GetPad(iPad + 1)->SetGrid();
751 }
752 canStatCorrPads[0]->current = histGemSilicon;
753 canStatCorrPads[1]->current = histGemTof400;
754 canStatCorrPads[2]->current = histGemTof700;
755 canStatCorrPads[3]->current = histGemCsc;
756 canStatCorrPads[4]->current = histGemFHCal;
757 canStatCorrPads[5]->current = histCscFHCal;
758 for (size_t iPad = 0; iPad < canStatCorrPads.size(); iPad++)
759 if (canStatCorrPads[iPad]->current) {
760 NamesStatCorr.push_back(canStatCorrPads[iPad]->current->GetName());
761 }
762}
763
764Int_t BmnHistStat::getPositionInArray(vector<TClonesArray*>* trigDigits, TString name)
765{
766 for (size_t iTrig = 0; iTrig < trigDigits->size(); ++iTrig) {
767 TClonesArray* array = trigDigits->at(iTrig);
768 TString nameArray = array->GetName();
769 if (nameArray.EqualTo(name))
770 return iTrig;
771 }
772
773 return -1;
774}
friend F32vec4 min(const F32vec4 &a, const F32vec4 &b)
Definition P4_F32vec4.h:30
int Int_t
double Double_t
#define BIT(n)
char * Form(const char *fmt,...)
BmnStatus
Define status code.
Definition BmnEnums.h:93
@ kBMNSUCCESS
Success.
Definition BmnEnums.h:94
@ kBMNPAYLOAD
spill event.
Definition BmnEnums.h:145
@ kBMNPEDESTAL
pedestal event.
Definition BmnEnums.h:144
std::chrono::time_point< SysClock > SysPoint
#define DBG(a)
Definition BmnMath.h:24
SysPoint GetEventTimeTP()
Bool_t GetSpillStart()
Get wether new spill is started.
UInt_t GetInputSignalsAR()
Get Input signal states, after reduction.
BmnEventType GetEventType()
Get the type of this event.
const int32_t Max_FHC_Cnt
Definition BmnHistStat.h:63
void initHistDet()
TH2F * histBDTof700Stat
Definition BmnHistStat.h:86
vector< TString > NamesStatFD
Definition BmnHistStat.h:55
bool varsInitDone
BmnStatus SetRefRun(Int_t id)
TH2F * histFDSiliconStat
Definition BmnHistStat.h:77
prometheus::Counter * counter_family
TCanvas * canStatDet
Definition BmnHistStat.h:98
void FillFromDigi(DigiArrays *fDigiArrays)
SysPoint last_ev_time
double tof4002gem
double gem2nbc1
SysPoint last_ev_time_show
TH1I * histSiliconStat
Definition BmnHistStat.h:70
int32_t fdPosition
uint16_t bit_filter
double tof7002gem
TH1I * histTof700Stat
Definition BmnHistStat.h:72
vector< PadInfo * > canStatCorrPads
TH1I * histFHCalStat
Definition BmnHistStat.h:74
vector< PadInfo * > canStatFDPads
const double Min_NBC1
Spill stat for DB.
void initHistCorr()
const int32_t Max_BD_Cnt
Definition BmnHistStat.h:65
void SetDir(TFile *outFile=NULL, TTree *recoTree=NULL)
const int32_t Max_CSC_Cnt
Definition BmnHistStat.h:62
unordered_map< string, prometheus::Gauge * > gauges_by_name
const int32_t Max_FD_Sig
Definition BmnHistStat.h:67
double fhcal2gem
void DestroyMetrics()
TH2F * histBDTof400Stat
Definition BmnHistStat.h:85
void ClearRefRun()
TH2F * histFDTof700Stat
Definition BmnHistStat.h:79
double sum_tof400
TH2F * histGemTof700
Definition BmnHistStat.h:93
TH2F * histBDGemStat
Definition BmnHistStat.h:83
vector< PadInfo * > canStatDetPads
TH1I * histGemStat
Definition BmnHistStat.h:69
TH2F * histBDCscStat
Definition BmnHistStat.h:87
void initHistFD()
Int_t getPositionInArray(vector< TClonesArray * > *trigDigits, TString name)
virtual ~BmnHistStat()
TCanvas * canStatCorr
unique_ptr< prometheus::Exposer > exposer
double sum_nbc1
const int32_t Max_ToF_Cnt
Definition BmnHistStat.h:59
TH2F * histGemTof400
Definition BmnHistStat.h:92
TH2F * histFDGemStat
Definition BmnHistStat.h:76
TH1I * histCscStat
Definition BmnHistStat.h:73
BmnStatus UpdateMetrics()
void ResetTimelineCounters()
vector< TString > NamesStatBD
Definition BmnHistStat.h:56
vector< PadInfo * > canStatBDPads
double fsd2gem
prometheus::Family< prometheus::Gauge > * gauge_family
BmnEventType ev_type
TH2F * histGemFHCal
Definition BmnHistStat.h:95
TH1I * histTof400Stat
Definition BmnHistStat.h:71
double sum_fhcal
vector< TString > NamesStatCorr
Definition BmnHistStat.h:57
BmnHistStat(TString title, TString path="")
TH2F * histGemCsc
Definition BmnHistStat.h:94
TCanvas * canStatFD
Definition BmnHistStat.h:99
int32_t bc1Position
const int32_t Max_GEM_Cnt
Definition BmnHistStat.h:60
int32_t bdPosition
double sum_tof700
void Register(THttpServer *serv)
shared_ptr< prometheus::Registry > registry
TH2F * histCscFHCal
Definition BmnHistStat.h:96
TH2F * histBDSiliconStat
Definition BmnHistStat.h:84
const int32_t Max_FSD_Cnt
Definition BmnHistStat.h:61
TH2F * histFDFHCalStat
Definition BmnHistStat.h:81
double sum_fsd
double sum_csc
BmnEventType ev_type_prev
bool metrics_available
double sum_gem
bool registry_init_done
vector< TString > NamesStatDet
Definition BmnHistStat.h:54
void initHistBD()
void CreateMetrics()
TH2F * histFDCscStat
Definition BmnHistStat.h:80
double csc2gem
TCanvas * canStatBD
uint64_t nevents
TH2F * histFDTof400Stat
Definition BmnHistStat.h:78
TH2F * histBDFHCalStat
Definition BmnHistStat.h:88
void ResetRegistry()
TH2F * histGemSilicon
Definition BmnHistStat.h:91
TTree * frecoTree
Definition BmnHist.h:88
Int_t refID
Definition BmnHist.h:92
TString refPath
Definition BmnHist.h:90
TDirectory * fDir
Definition BmnHist.h:89
static void DrawRef(unique_ptr< TCanvas > &canGemStrip, vector< PadInfo * > *canGemStripPads)
Definition BmnHist.cxx:15
static void SetHistStyleTH1(TH1 *h)
Definition BmnHist.cxx:195
TString refRunName
Definition BmnHist.h:91
static BmnStatus LoadRefRun(Int_t refID, TString FullName, TString fTitle, vector< PadInfo * > canPads, vector< TString > Names)
Definition BmnHist.cxx:100
THttpServer * fServer
Definition BmnHist.h:87
BmnHist(Int_t periodID=7, BmnSetup setup=kBMNSETUP)
Definition BmnHist.cxx:3
class for TQDC data including waveform can be initialized both from an std::vector and raw pointer to...
int32_t GetIntegral(size_t start=0, size_t stop=SIZE_MAX) const
int16_t GetPeak(size_t start=0, size_t stop=SIZE_MAX) const
TClonesArray * fhcal
Definition DigiArrays.h:134
std::vector< TClonesArray * > * trigAr
Definition DigiArrays.h:144
TClonesArray * gem
Definition DigiArrays.h:126
BmnEventHeader * header
Definition DigiArrays.h:146
TClonesArray * silicon
Definition DigiArrays.h:125
TClonesArray * tof400
Definition DigiArrays.h:129
TClonesArray * tof700
Definition DigiArrays.h:130
TClonesArray * tof701
Definition DigiArrays.h:131
TClonesArray * csc
Definition DigiArrays.h:127
Storage for pad content and it's options.
Definition PadInfo.h:20
string opt
Definition PadInfo.h:88
TDirectory * mkdir(const char *name, const char *title="", Bool_t returnExistingDirectory=kFALSE) override
TString fTitle
TString fName
Int_t GetEntriesFast() const
TObject * At(Int_t idx) const override
friend friend class TClonesArray
const char * Data() const
Bool_t EqualTo(const char *cs, ECaseCompare cmp=kExact) const