BmnRoot 26.10.0-210-gc52d34b0
Software framework of the BM@N experiment
Loading...
Searching...
No Matches
BmnQaMonitor.cxx
Go to the documentation of this file.
1#include "BmnQaMonitor.h"
2
3const Int_t nRuns = 2; // 6, 7
4
6 : fServer(nullptr)
7 , gem(nullptr)
8 , silicon(nullptr)
9 , csc(nullptr)
10 , tof400(nullptr)
11 , tof700(nullptr)
12 , dch(nullptr)
13 , mwpc(nullptr)
14 , ecal(nullptr)
15 , zdc(nullptr)
16 , dst(nullptr)
17 , triggers(nullptr)
18 , runs(nullptr)
19 , setups(nullptr)
20 , fRefHistosNames(nullptr)
21 , fCanvases(nullptr)
23 , fHistos(nullptr)
24 , fCurRunInfo(nullptr)
25 , fRefRunInfo(nullptr)
26{
27 nReleases = fSteering->GetNReleases();
28
29 nSetups = 2; // BM@N, SRC
30 runs = new Int_t[nRuns]{6, 7};
31 setups = new TString[nRuns]{"BM@N", "SRC"};
32
33 nCanvases = fSteering->GetNCanvases();
34 nDims = 2; // 1d, 2d
35
36 // Default parameters if release, period, setup are not being initialized in future
37 fRelease = -1;
38 fPeriod = -1;
39 fSetup = -1;
40 if (!dir.IsNull())
41 fHistoDir = dir;
42 else
43 Fatal("BmnQaMonitor::BmnQaMonitor(TString dir)", "Histogram directory is empty or does no exist!!!");
45
46 // 1. Create lists with information on ...
48
49 // 2. Start web-server ...
50 InitServer();
51
52 // 3. Register canvases to be shown ...
54
55 // 4. Register user's commands to be used for ...
57}
58
60{
61 delete gem;
62 delete silicon;
63 delete csc;
64
65 delete tof400;
66 delete tof700;
67 delete dch;
68 delete mwpc;
69
70 delete ecal;
71 delete zdc;
72
73 delete dst;
74
75 delete triggers;
76
77 delete fServer;
78}
79
81{
82 // Create run and reference lists for all periods and setups ...
83 vector<TString> listOfReleases = fSteering->GetListOfReleases();
84
85 fRefList = new TList();
86 fRefList->SetName("refList");
87
88 BmnRunInfo***** bri = new BmnRunInfo****[nReleases];
89
90 for (Int_t iRelease = 0; iRelease < nReleases; iRelease++) {
91 bri[iRelease] = new BmnRunInfo***[nRuns];
92 TList* listForRel = new TList();
93 listForRel->SetName(listOfReleases[iRelease].Data());
94 fRefList->Add(listForRel);
95
96 for (Int_t iRun = 0; iRun < nRuns; iRun++) {
97 bri[iRelease][iRun] = new BmnRunInfo**[nSetups];
98 TList* listForPeriod = new TList();
99 listForPeriod->SetName(Form("%d", runs[iRun]));
100 listForRel->Add(listForPeriod);
101
102 for (Int_t iSetup = 0; iSetup < nSetups; iSetup++) {
103 TString prefix = TString::Format("RELEASE%s_RUN%d_SETUP_%s_", listOfReleases[iRelease].Data(),
104 runs[iRun], setups[iSetup].Data());
105
106 pair<Int_t, Int_t> borderFiles = fSteering->GetBorderRuns(runs[iRun], setups[iSetup]);
107 const Int_t nFiles = borderFiles.second - borderFiles.first + 1;
108
109 TList* listForSetup = new TList();
110 listForSetup->SetName(Form("%s", setups[iSetup].Data()));
111 listForPeriod->Add(listForSetup);
112
113 bri[iRelease][iRun][iSetup] = new BmnRunInfo*[nFiles];
114
115 for (Int_t iFile = borderFiles.first; iFile < borderFiles.second + 1; iFile++) {
116 TFile* f =
117 new TFile(Form("%s/%s/run%d/%s/qa_%d.root", fHistoDir.Data(), listOfReleases[iRelease].Data(),
118 runs[iRun], setups[iSetup].Data(), iFile),
119 "r");
120 if (!f->IsOpen()) {
121 delete f;
122 continue;
123 }
124
125 UniRun* run = UniRun::GetRun(runs[iRun], iFile);
126 if (run) {
127 bri[iRelease][iRun][iSetup][iFile - borderFiles.first] = new BmnRunInfo(run);
128 listForSetup->Add((TObject*)bri[iRelease][iRun][iSetup][iFile - borderFiles.first]);
129 }
130 delete f;
131 }
132 }
133 }
134 }
135
136 // Create info canvas ...
137 TString name = "infoCanvas";
138 infoCanvas = new TCanvas(name, name, 3 * 320, 1 * 240 * 2 / 3);
139 infoCanvas->Divide(3, 1);
140}
141
143{
144 for (Int_t iDim = 0; iDim < nDims; iDim++)
145 for (Int_t iCanvas = 0; iCanvas < nCanvases; iCanvas++) {
146 TString name = TString(fCanvases[iDim][iCanvas]->GetName());
147 TString prefix = name.Contains("1d") ? "1d" : "2d";
148 Int_t nRows = fSteering->GetCanvasSizes(runs[fPeriod], setups[fSetup].Data(), name, prefix).first;
149 Int_t nColumns = fSteering->GetCanvasSizes(runs[fPeriod], setups[fSetup].Data(), name, prefix).second;
150
151 if (nRows == -1 && nColumns == -1)
152 continue;
153 else {
154 fCanvases[iDim][iCanvas]->Divide(nColumns, nRows);
155 }
156 }
157}
158
160{
161 AllHistos* currHistos = GetCurrentRun(fCurrentRun);
162 vector<TH1F*> h1Curr = currHistos->Get1D();
163 vector<TH2F*> h2Curr = currHistos->Get2D();
164
165 AllHistos* refHistos = GetReferenceRun(run);
166 vector<TH1F*> h1Ref = refHistos->Get1D();
167 vector<TH2F*> h2Ref = refHistos->Get2D();
168
169 vector<TNamed*> hCurr;
170 vector<TNamed*> hRef;
171
172 if (!isOneRefDrawn)
173 fRefHistosNames = new vector<TString>;
174
175 for (auto it : h1Curr)
176 hCurr.push_back((TNamed*)it);
177 for (auto it : h2Curr)
178 hCurr.push_back((TNamed*)it);
179 for (auto it : h1Ref)
180 hRef.push_back((TNamed*)it);
181 for (auto it : h2Ref)
182 hRef.push_back((TNamed*)it);
183
184 Int_t period = fSteering->GetRunAndSetupByRunId(run).first;
185 TString setup = fSteering->GetRunAndSetupByRunId(run).second;
186 vector<TString> detectors = fSteering->GetDetectors(period, setup);
187 detectors.push_back("TRIGGERS");
188 detectors.push_back("DST");
189
190 for (Int_t iDim = 0; iDim < nDims; iDim++)
191 for (Int_t iCanvas = 0; iCanvas < nCanvases; iCanvas++) {
192 TCanvas* c = fCanvases[iDim][iCanvas];
193 Int_t padCounter = 1;
194 TString nameCanvas = (TString)c->GetName();
195
196 for (auto det : detectors) {
197 if (!nameCanvas.Contains(det.Data()))
198 continue;
199
200 for (auto itCurr : hCurr)
201 for (auto itRef : hRef) {
202 TString currName = (TString)itCurr->GetName();
203 TString refName = (TString)itRef->GetName();
204
205 if (currName != refName)
206 continue;
207
208 TString nameHisto = (TString)itRef->GetName();
209 if (!nameHisto.Contains(det.Data()) || !nameHisto.Contains(nameCanvas.Data()))
210 continue;
211 TVirtualPad* pad = c->cd(padCounter);
212
213 // Remove a reference histo if drawn ...
214 if (isOneRefDrawn) {
215 vector<TString>& vec = *fRefHistosNames;
216 for (auto it : vec) {
217 TObject* obj = pad->GetPrimitive(it.Data());
218 if (!obj)
219 continue;
220
221 pad->GetListOfPrimitives()->Remove(obj);
222 }
223 } else {
224 TString baseName = TString(itRef->GetName());
225 baseName += ", Ref";
226 itRef->SetName(baseName.Data());
227 fRefHistosNames->push_back(itRef->GetName());
228 }
229
230 // 1d histos for triggers are drawn in logarithmic scale !!!
231 // if (nameCanvas.Contains("TRIGGERS_1d"))
232 // pad->SetLogy();
233
234 // We do not draw reference for a 2d-histo !!!
235 if (!currName.Contains("vs.") && !refName.Contains("vs.")) {
236 TH1F* cur = (TH1F*)itCurr;
237
238 if (!refName.Contains(", Ref")) {
239 refName += ", Ref";
240 itRef->SetName(refName.Data());
241 }
242
243 TH1F* ref = (TH1F*)itRef;
244
245 Double_t maxCurr = cur->GetMaximum();
246 Double_t maxRef = ref->GetMaximum();
247
248 if (maxRef > maxCurr) {
249 TH1F* h = (TH1F*)pad->GetPrimitive(cur->GetName());
250 pad->GetListOfPrimitives()->Remove(h);
251
252 ref->Draw();
253 ref->SetLineColor(kRed);
254 cur->GetYaxis()->SetRangeUser(0., maxRef * 1.3);
255
256 if (ref->GetSumOfWeights() > FLT_EPSILON)
257 cur->DrawNormalized("same", ref->Integral());
258 } else {
259 if (ref->GetSumOfWeights() > FLT_EPSILON)
260 ref->DrawNormalized("same", cur->Integral())->SetLineColor(kRed);
261 }
262 }
263
264 pad->Update();
265 pad->Modified();
266
267 padCounter++;
268 }
269 }
270 c->Update();
271 c->Modified();
272 }
274
275 TList* periodList = (TList*)fRefList->At(fRelease);
276 TList* setupList = (TList*)periodList->At(fPeriod);
277 TList* runList = (TList*)setupList->At(fSetup);
278 TIter it(runList);
279 while (BmnRunInfo* tmp = (BmnRunInfo*)it.Next()) {
280 if (tmp->GetRunNumber() == run) {
281 fRefRunInfo = tmp;
282 break;
283 }
284 }
285 DrawInfoC();
286}
287
289{
290 AllHistos* allHistos = GetCurrentRun(run);
291 vector<TH1F*> h1 = allHistos->Get1D();
292 vector<TH2F*> h2 = allHistos->Get2D();
293
294 if (isOneRefDrawn)
295 delete fRefHistosNames;
296
298
299 // Put all histograms together
300 vector<TNamed*> h;
301 for (auto it : h1)
302 h.push_back((TNamed*)it);
303 for (auto it : h2)
304 h.push_back((TNamed*)it);
305
306 Int_t period = fSteering->GetRunAndSetupByRunId(run).first;
307 TString setup = fSteering->GetRunAndSetupByRunId(run).second;
308 vector<TString> detectors = fSteering->GetDetectors(period, setup);
309 detectors.push_back("TRIGGERS");
310 detectors.push_back("DST");
311 // Divide canvases according to number of divisions assumed ...
314
315 for (Int_t iDim = 0; iDim < nDims; iDim++)
316 for (Int_t iCanvas = 0; iCanvas < nCanvases; iCanvas++) {
317 TCanvas* c = fCanvases[iDim][iCanvas];
318 Int_t padCounter = 1;
319 TString nameCanvas = (TString)c->GetName();
320
321 for (auto det : detectors) {
322 if (!nameCanvas.Contains(det.Data()))
323 continue;
324
325 for (auto it : h) {
326 TString nameHisto = (TString)it->GetName();
327 if (!nameHisto.Contains(det.Data()) || !nameHisto.Contains(nameCanvas.Data()))
328 continue;
329
330 /*TVirtualPad* pad = */ c->cd(padCounter);
331 // 1d-histograms for triggers are drawn in logarithmic scale !!!
332 // if (nameCanvas.Contains("TRIGGERS_1d"))
333 // pad->SetLogy();
334 Bool_t isColz = nameHisto.Contains("vs.") ? kTRUE : kFALSE;
335 if (isColz) {
336 TH2F* tmp = (TH2F*)it;
337 tmp->Draw("colz");
338 } else {
339 TH1F* tmp = (TH1F*)it;
340 it->Draw();
341 tmp->GetYaxis()->UnZoom();
342 }
343 padCounter++;
344 }
345 }
346 }
347 fCurrentRun = run;
348
349 TList* periodList = (TList*)fRefList->At(fRelease);
350 TList* setupList = (TList*)periodList->At(fPeriod);
351 TList* runList = (TList*)setupList->At(fSetup);
352 TIter it(runList);
353 while (BmnRunInfo* tmp = (BmnRunInfo*)it.Next()) {
354 if (tmp->GetRunNumber() == run) {
355 fCurRunInfo = tmp;
356 break;
357 }
358 }
359 DrawInfoC();
360}
361
363{
364 const Char_t* cgiStr = Form("fastcgi:%d", 9000);
365 const Char_t* httpStr = Form("http:%d;noglobal", 8080);
366
367 // Start http-server ...
368 fServer = new THttpServer(httpStr);
369
370 // Start fast-cgi engine to the server ...
371 fServer->CreateEngine(cgiStr);
372 fServer->SetTimer(100, kFALSE);
373}
374
376{
377 fCanvases = new TCanvas**[nDims];
378 for (Int_t iDim = 0; iDim < nDims; iDim++) {
379 fCanvases[iDim] = new TCanvas*[nCanvases];
380 for (Int_t iCanvas = 0; iCanvas < nCanvases; iCanvas++) {
381 TString prefix = (iDim == 0) ? "1d" : "2d";
382
383 fCanvases[iDim][iCanvas] =
384 new TCanvas(Form("%s_%s", fSteering->GetListOfCanvases()[iCanvas].Data(), prefix.Data()),
385 Form("%s_%s", fSteering->GetListOfCanvases()[iCanvas].Data(), prefix.Data()), 800, 800);
386 }
387 }
388
389 // Create all possible sets with detectors and triggers to be shown for all possible runs, setups ...
393
394 tof400 = new BmnTimeDetQa**[nRuns];
395 tof700 = new BmnTimeDetQa**[nRuns];
396 mwpc = new BmnTimeDetQa**[nRuns];
397 dch = new BmnTimeDetQa**[nRuns];
398
401
402 triggers = new BmnTrigDetQa**[nRuns];
403
404 dst = new BmnDstQa**[nRuns];
405
406 for (Int_t iRun = 0; iRun < nRuns; iRun++) {
407 gem[iRun] = new BmnCoordinateDetQa*[nSetups];
408 silicon[iRun] = new BmnCoordinateDetQa*[nSetups];
409 if (iRun != 0)
410 csc[iRun] = new BmnCoordinateDetQa*[nSetups];
411
412 tof400[iRun] = new BmnTimeDetQa*[nSetups];
413 tof700[iRun] = new BmnTimeDetQa*[nSetups];
414 mwpc[iRun] = new BmnTimeDetQa*[nSetups];
415 dch[iRun] = new BmnTimeDetQa*[nSetups];
416
417 ecal[iRun] = new BmnCalorimeterDetQa*[nSetups];
418 zdc[iRun] = new BmnCalorimeterDetQa*[nSetups];
419
420 triggers[iRun] = new BmnTrigDetQa*[nSetups];
421
422 dst[iRun] = new BmnDstQa*[nSetups];
423
424 for (Int_t iSetup = 0; iSetup < nSetups; iSetup++) {
425 if (iRun == 0 && iSetup == 1) // Configuration does not exist!!!
426 continue;
427 vector<TString> detectors = fSteering->GetDetectors(runs[iRun], setups[iSetup]);
428 vector<TString> triggs = fSteering->GetTriggers(runs[iRun], setups[iSetup]);
429
430 if (detectors.size() == 0 && triggs.size() == 0)
431 continue;
432
433 UInt_t id = fSteering->GetBorderRuns(runs[iRun], setups[iSetup]).first;
434 for (auto det : detectors) {
435 if (det == "GEM")
436 gem[iRun][iSetup] = new BmnCoordinateDetQa(det, id);
437 else if (det == "SILICON")
438 silicon[iRun][iSetup] = new BmnCoordinateDetQa(det, id);
439 else if (det == "CSC" && iRun != 0)
440 csc[iRun][iSetup] = new BmnCoordinateDetQa(det, id);
441 else if (det == "TOF400")
442 tof400[iRun][iSetup] = new BmnTimeDetQa(det, id);
443 else if (det == "TOF700")
444 tof700[iRun][iSetup] = new BmnTimeDetQa(det, id);
445 else if (det == "MWPC")
446 mwpc[iRun][iSetup] = new BmnTimeDetQa(det, id);
447 else if (det == "DCH")
448 dch[iRun][iSetup] = new BmnTimeDetQa(det, id);
449 else if (det == "ECAL")
450 ecal[iRun][iSetup] = new BmnCalorimeterDetQa(det, id);
451 else if (det == "ZDC")
452 zdc[iRun][iSetup] = new BmnCalorimeterDetQa(det, id);
453 }
454
455 triggers[iRun][iSetup] = new BmnTrigDetQa(triggs, id);
456 dst[iRun][iSetup] = new BmnDstQa(id);
457 }
458 }
459
460 for (Int_t iRun = 0; iRun < nRuns; iRun++)
461 for (Int_t iSetup = 0; iSetup < nSetups; iSetup++) {
462
463 if (iRun == 0 && iSetup == 1) // Configuration does not exist!!!
464 continue;
465
466 // Filling vector histogram names ...
468
471 if (iRun != 0)
473
474 GetHistoNames<BmnTimeDetQa>(tof400[iRun][iSetup]);
475 GetHistoNames<BmnTimeDetQa>(tof700[iRun][iSetup]);
476 GetHistoNames<BmnTimeDetQa>(dch[iRun][iSetup]);
477 GetHistoNames<BmnTimeDetQa>(mwpc[iRun][iSetup]);
478
481
482 GetHistoNames<BmnDstQa>(dst[iRun][iSetup]);
483
484 // Get histograms by names ...
486
489 if (iRun != 0)
491
496
499
501 }
502
503 for (Int_t iDim = 0; iDim < nDims; iDim++) {
504 for (Int_t iCanvas = 0; iCanvas < nCanvases; iCanvas++)
505 fServer->Register("/Objects", fCanvases[iDim][iCanvas]);
506 }
507
508 fServer->Register("/Objects", fRefList);
509 fServer->Register("/Objects", infoCanvas);
510}
511
513{
514 TString cmdTitle0 = "SelectRelease";
515 TString cmdTitle1 = "SelectPeriod";
516 TString cmdTitle2 = "SelectSetup";
517 TString cmdTitle3 = "SelectRun";
518 TString cmdTitle4 = "SelectReference";
519 TString cmdTitle5 = "Clear";
520 //
521 // Displaying current histograms ...
522 fServer->Register("/", this);
523 fName += "_";
524
525 // Release
526 TString cmd0 = "/" + fName + "/->SetRelease(%arg1%)";
527 fServer->RegisterCommand(cmdTitle0.Data(), cmd0.Data(), "button;");
528
529 // Period
530 TString cmd1 = "/" + fName + "/->SetPeriod(%arg1%)";
531 fServer->RegisterCommand(cmdTitle1.Data(), cmd1.Data(), "button;");
532
533 // Setup
534 TString cmd2 = "/" + fName + "/->SetSetup(%arg1%)";
535 fServer->RegisterCommand(cmdTitle2.Data(), cmd2.Data(), "button;");
536
537 // Run
538 TString cmd3 = "/" + fName + "/->ShowCurrentHistos(%arg1%)";
539 fServer->RegisterCommand(cmdTitle3.Data(), cmd3.Data(), "button;");
540
541 // Reference
542 TString cmd4 = "/" + fName + "/->ShowReferenceHistos(%arg1%)";
543 fServer->RegisterCommand(cmdTitle4.Data(), cmd4.Data(), "button;");
544
545 // Clear canvas
546 TString cmd5 = "/" + fName + "/->ClearCanvases()";
547 fServer->RegisterCommand(cmdTitle5.Data(), cmd5.Data(), "button;");
548}
549
551{
552 for (Int_t iDim = 0; iDim < nDims; iDim++)
553 for (Int_t iCanvas = 0; iCanvas < nCanvases; iCanvas++)
554 fCanvases[iDim][iCanvas]->Clear("C");
555}
556
558{
559 Int_t period = fSteering->GetRunAndSetupByRunId(run).first;
560 TString setup = fSteering->GetRunAndSetupByRunId(run).second;
561
562 if (fHistos)
563 delete fHistos;
564
565 fHistos = new AllHistos();
566 if (run == 0) {
568 return fHistos;
569 }
570
571 if (fHistoNames.size() == 0) {
572 cout << "BmnQaMonitor::GetHistosFromFile(), No histos to be displayed" << endl;
573 return fHistos;
574 }
575
576 TString path = fHistoDir + "/" + fSteering->GetListOfReleases()[fRelease] + "/"
577 + TString::Format("run%d", runs[fPeriod]) + "/" + setups[fSetup]
578 + TString::Format("/qa_%d.root", run);
579
580 TFile* file = new TFile(path.Data(), "read");
581 if (!file->IsOpen()) {
582 cout << "File does not exist! Exiting ... " << endl;
583 return fHistos;
584 }
585
586 for (auto it : fHistoNames) {
587 if (!it.Contains(TString::Format("RUN%d_SETUP_%s", period, setup.Data()).Data()))
588 continue;
589
590 TNamed* h = nullptr;
591 h = (TNamed*)file->Get(TString("TRIGGERS/" + it).Data()); // FIXME!! Not elegant representation
592
593 if (!h)
594 h = (TNamed*)file->Get(TString("GEM/" + it).Data());
595 if (!h)
596 h = (TNamed*)file->Get(TString("SILICON/" + it).Data());
597 if (!h)
598 h = (TNamed*)file->Get(TString("CSC/" + it).Data());
599 if (!h)
600 h = (TNamed*)file->Get(TString("TOF400/" + it).Data());
601 if (!h)
602 h = (TNamed*)file->Get(TString("TOF700/" + it).Data());
603 if (!h)
604 h = (TNamed*)file->Get(TString("DCH/" + it).Data());
605 if (!h)
606 h = (TNamed*)file->Get(TString("MWPC/" + it).Data());
607 if (!h)
608 h = (TNamed*)file->Get(TString("ECAL/" + it).Data());
609 if (!h)
610 h = (TNamed*)file->Get(TString("ZDC/" + it).Data());
611 if (!h)
612 h = (TNamed*)file->Get(TString("DST/" + it).Data());
613
614 if (h) {
615 TString hName = TString::Format("%s", h->GetName());
616
617 if (hName.Contains(".vs")) // .vs in histogram name must be present if 2d-histogram assumed
618 fHistos->Set2D((TH2F*)h);
619 else
620 fHistos->Set1D((TH1F*)h);
621 }
622 }
623 cout << "Run #" << run << " processed " << endl;
624 return fHistos;
625}
626
628{
629 TLatex Tl;
630 TVirtualPad* pad = infoCanvas->cd(1);
631 pad->Clear();
632 Tl.SetTextAlign(12);
633 Tl.SetTextSize(0.10);
635 if (fCurRunInfo) {
636 Tl.DrawLatex(0.1, 0.9, Form("Current Run: %i", fCurRunInfo->GetRunNumber()));
637 Tl.DrawLatex(0.1, 0.75, Form("Energy: %1.2f", fCurRunInfo->GetEnergy()));
638 Tl.DrawLatex(0.1, 0.6, Form("Beam: %s", fCurRunInfo->GetBeamParticle().Data()));
639 Tl.DrawLatex(0.1, 0.45, Form("Target: %s", fCurRunInfo->GetTargetParticle().Data()));
640 Tl.Draw();
641 }
642 pad->Modified();
643 pad->Update();
644
645 pad = infoCanvas->cd(2);
646 pad->Clear();
647 Tl.SetTextAlign(12);
648 Tl.SetTextSize(0.10);
649 Tl.SetTextColor(kRed);
650 if (fRefRunInfo) {
651 Tl.DrawLatex(0.1, 0.9, Form("Ref. Run: %i", fRefRunInfo->GetRunNumber()));
652 Tl.DrawLatex(0.1, 0.75, Form("Energy: %1.2f", fRefRunInfo->GetEnergy()));
653 Tl.DrawLatex(0.1, 0.6, Form("Beam: %s", fRefRunInfo->GetBeamParticle().Data()));
654 Tl.DrawLatex(0.1, 0.45, Form("Target: %s", fRefRunInfo->GetTargetParticle().Data()));
655 Tl.Draw();
656 }
657 pad->Update();
658 pad->Modified();
659
660 pad = infoCanvas->cd(3);
661 pad->Clear();
662 Tl.SetTextAlign(12);
663 Tl.SetTextSize(0.10);
665 Tl.DrawLatex(0.1, 0.9, Form("Release: %s", fSteering->GetListOfReleases()[fRelease].Data()));
666 Tl.DrawLatex(0.1, 0.75, Form("Period: %d", runs[fPeriod]));
667 Tl.DrawLatex(0.1, 0.6, Form("Setup: %s", setups[fSetup].Data()));
668
669 pad->Update();
670 pad->Modified();
671}
const Int_t nRuns
bool Bool_t
int Int_t
char Char_t
constexpr Bool_t kFALSE
double Double_t
constexpr Bool_t kTRUE
kRed
kBlack
kBlue
char * Form(const char *fmt,...)
vector< TH1F * > Get1D()
vector< TH2F * > Get2D()
BmnRunInfo * fRefRunInfo
BmnOfflineQaSteering * fSteering
BmnRunInfo * fCurRunInfo
AllHistos * GetReferenceRun(UInt_t run)
AllHistos * fHistos
void ShowReferenceHistos(Int_t)
BmnCalorimeterDetQa *** zdc
BmnTrigDetQa *** triggers
TString * setups
BmnCoordinateDetQa *** csc
void GetHistoNames(T *man)
void CreateInfoLists()
TString fHistoDir
TList * fRefList
void RegisterCanvases()
AllHistos * GetCurrentRun(UInt_t run)
void RegisterUserCommands()
void ShowCurrentHistos(Int_t)
void GetHistosToBeRegistered(T *man)
Bool_t isOneRefDrawn
BmnTimeDetQa *** tof400
BmnCalorimeterDetQa *** ecal
BmnTimeDetQa *** mwpc
void DivideCanvases()
BmnCoordinateDetQa *** silicon
THttpServer * fServer
BmnTimeDetQa *** tof700
vector< TString > * fRefHistosNames
TCanvas *** fCanvases
BmnDstQa *** dst
TCanvas * infoCanvas
BmnTimeDetQa *** dch
AllHistos * GetRun(UInt_t)
vector< TString > fHistoNames
BmnCoordinateDetQa *** gem
virtual ~BmnQaMonitor()
virtual void SetLineColor(Color_t lcolor)
virtual void SetTextAlign(Short_t align=11)
virtual void SetTextColor(Color_t tcolor=1)
virtual void SetTextSize(Float_t tsize=1)
virtual void UnZoom()
virtual void SetRangeUser(Double_t ufirst, Double_t ulast)
TVirtualPad * cd(Int_t subpadnumber=0) override
void Update() override
void SetName(const char *name)
T * Get(const char *namecycle)
virtual Bool_t IsOpen() const
virtual TH1 * DrawNormalized(Option_t *option="", Double_t norm=1) const
virtual Double_t GetSumOfWeights() const
virtual Double_t GetMaximum(Double_t maxval=FLT_MAX) const
TAxis * GetYaxis()
void Draw(Option_t *option="") override
virtual Double_t Integral(Int_t binx1, Int_t binx2, Option_t *option="") const
TLatex * DrawLatex(Double_t x, Double_t y, const char *text)
void Add(TObject *obj) override
TObject * Remove(const TObjLinkPtr_t &lnk)
TObject * At(Int_t idx) const override
const char * GetName() const override
TString fName
void Clear(Option_t *option="") override
virtual void Fatal(const char *method, const char *msgfmt,...) const
virtual void Draw(Option_t *option="")
void Modified(Bool_t flag=true) override
const char * GetName() const override
const char * Data() const
Bool_t IsNull() const
static TString Format(const char *fmt,...)
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
virtual void Modified(Bool_t flag=1)=0
virtual TList * GetListOfPrimitives() const=0
virtual void Update()=0
virtual TObject * GetPrimitive(const char *name) const=0
void Clear(Option_t *option="") override=0
UniRun.h Class for the table: run_.
Definition UniRun.h:21
static UniRun * GetRun(int period_number, int run_number)
get run from the database
Definition UniRun.cxx:161