Belle II Software development
DQMHistAnalysisEventT0TriggerJitter.cc
1/**************************************************************************
2 * basf2 (Belle II Analysis Software Framework) *
3 * Author: The Belle II Collaboration *
4 * *
5 * See git log for contributors and copyright holders. *
6 * This file is licensed under LGPL-3.0, see LICENSE.md. *
7 **************************************************************************/
8//+
9// File : DQMHistAnalysisEventT0TriggerJitter.cc
10// Description : module for trigger jitter/EventT0 DQM histogram analysis
11//-
12
13
14#include <dqm/analysis/modules/DQMHistAnalysisEventT0TriggerJitter.h>
15
16#include <TROOT.h>
17#include <TStyle.h>
18#include <TF1.h>
19#include <TMath.h>
20
21using namespace Belle2;
22
23//-----------------------------------------------------------------
24// Register the Module
25//-----------------------------------------------------------------
26REG_MODULE(DQMHistAnalysisEventT0TriggerJitter);
27
28//-----------------------------------------------------------------
29// Implementation
30//-----------------------------------------------------------------
31
34{
35 setDescription("Determining and processing EventT0s from different subdetectors (ECL, CDC, TOP, SVD) for different L1 trigger sources (ECL, CDC, and TOP) to estimate trigger jitter information for different HLT event types (hadron, BhaBha, ยตยต).");
36
37 //Parameter definition
38 addParam("min_nEntries", m_nEntriesMin, "Minimum number of entries to process the histogram.", m_nEntriesMin);
39 addParam("prefixCanvas", m_prefixCanvas, "Prefix to be added to canvas filename when saved as pdf.", std::string("c"));
40 addParam("printCanvas", m_printCanvas, "If true, prints pdf of the analysis canvas.", bool(false));
41}
42
44{
45 gROOT->cd();
46
48
49 m_monObj = getMonitoringObject("eventT0");
50
51 registerEpicsPV("EventT0:ECLTRG_Hadron_Delta_CDCEventT0_SVDEventT0", "ECLTRG_Hadron_Delta_CDCEventT0_SVDEventT0");
52 registerEpicsPV("EventT0:ECLTRG_Hadron_Delta_ECLEventT0_SVDEventT0", "ECLTRG_Hadron_Delta_ECLEventT0_SVDEventT0");
53 registerEpicsPV("EventT0:ECLTRG_Hadron_Delta_TOPEventT0_SVDEventT0", "ECLTRG_Hadron_Delta_TOPEventT0_SVDEventT0");
54}
55
56
66
80
82{
83 // final calculation of the mean values for MiraBelle
87
88 if (m_printCanvas) {
90 }
91}
92
97
98// cppcheck-suppress constParameterCallback ; the signature is fixed by TF1
100{
101 double N = par[0];
102 double frac = par[1];
103 double mean = par[2];
104 double sigma = par[3];
105 double mean2 = par[4];
106 double sigma2 = par[5];
107
108 return N * frac * TMath::Gaus(x[0], mean, sigma) + N * (1 - frac) * TMath::Gaus(x[0], mean2, sigma2);
109}
110
111std::tuple<bool, std::optional<double>> DQMHistAnalysisEventT0TriggerJitterModule::processHistogram(TH1* h, TString tag,
112 bool retrieveMeanT0)
113{
114
115 if (h == nullptr) {
116 B2DEBUG(20, "h == nullptr");
117 m_monObj->setVariable(Form("fit_%s", tag.Data()), 0);
118 return {false, {}};
119 }
120
121 // The default value for the EventT0 value is -1000, but bins start at -100, so we might mostly fill the underflow bin if
122 // EventT0 for a detector is not present. And also the nominal EventT0 might be too big or too small. Only use the content
123 // of the actually useful bins to decide whether or not to fit the histogram.
124 auto nValidEntries = h->GetEntries() - h->GetBinContent(0) - h->GetBinContent(h->GetNbinsX() + 1);
125 if (static_cast<uint>(nValidEntries) < m_nEntriesMin) {
126 B2DEBUG(20, "not enough entries");
127 m_monObj->setVariable(Form("fit_%s", tag.Data()), 0);
128 return {false, {}};
129 }
130
131
132 //scale the histogram only with content of valid bins, ignore over and underflow bins
133 h->Scale(1. / nValidEntries);
134 h->GetXaxis()->SetRangeUser(-50, 50);
135
136 //define the fitting function
138 fitf.SetParNames("N", "f_{1}", "#mu_{1}", "#sigma_{1}", "#mu_{2}", "#sigma_{2}");
139 fitf.SetParameters(0.1, 0.8, 0, 5, 0, 15);
140 fitf.SetParLimits(1, 0, 1); //fraction
141 fitf.SetParLimits(3, 0, 100); //sigma1
142 fitf.SetParLimits(5, 0, 100); //sigma2
143
144 if (h->Fit(&fitf, "SR+") != 0) {
145 B2DEBUG(20, "failed fit");
146 m_monObj->setVariable(Form("fit_%s", tag.Data()), 0);
147 return {false, {}};
148 }
149
150 Double_t par[6];
151 fitf.GetParameters(&par[0]);
152 Double_t parErr[6];
153 for (int i = 0; i < 6; i++)
154 parErr[i] = fitf.GetParError(i) ;
155
156
157 //define gaussian components
158 TF1 gauss1("gauss1", "gaus", -100, 100);
159 TF1 gauss2("gauss2", "gaus", -100, 100);
160
161 // Sometimes the first Gaussian isn't the main one, messing up the DQM plots
162 // Thus, chose the Gaussian with the larger relative contribution to be the main one
163 const double mainFrac = par[1] > 0.5 ? par[1] : (1 - par[1]);
164 const double mainMean = par[1] > 0.5 ? par[2] : par[4];
165 const double mainSigma = par[1] > 0.5 ? par[3] : par[5];
166 const double miniMean = par[1] > 0.5 ? par[4] : par[2];
167 const double miniSigma = par[1] > 0.5 ? par[5] : par[3];
168 const double mainMeanErr = par[1] > 0.5 ? parErr[2] : parErr[4];
169 const double mainSigmaErr = par[1] > 0.5 ? parErr[3] : parErr[5];
170 const double miniMeanErr = par[1] > 0.5 ? parErr[4] : parErr[2];
171 const double miniSigmaErr = par[1] > 0.5 ? parErr[5] : parErr[3];
172
173 gauss1.SetLineColor(kBlue);
174 gauss1.SetLineStyle(kDashed);
175 gauss1.SetParameters(par[0]*mainFrac, mainMean, mainSigma);
176
177 gauss2.SetLineColor(kRed);
178 gauss2.SetLineStyle(kDashed);
179 gauss2.SetParameters(par[0] * (1 - mainFrac), miniMean, miniSigma);
180
181 m_monObj->setVariable(Form("fit_%s", tag.Data()), 1);
182 m_monObj->setVariable(Form("N_%s", tag.Data()), nValidEntries, TMath::Sqrt(nValidEntries));
183 m_monObj->setVariable(Form("f_%s", tag.Data()), mainFrac, parErr[1]);
184 m_monObj->setVariable(Form("mean1_%s", tag.Data()), mainMean, mainMeanErr);
185 m_monObj->setVariable(Form("sigma1_%s", tag.Data()), mainSigma, mainSigmaErr);
186 m_monObj->setVariable(Form("mean2_%s", tag.Data()), miniMean, miniMeanErr);
187 m_monObj->setVariable(Form("sigma2_%s", tag.Data()), miniSigma, miniSigmaErr);
188
189 //SETUP gSTYLE - all plots
190 gStyle->SetOptFit(1111);
191
192 gPad->Clear();// better clear before to get rid of all fit lines drawn before
193 h->Draw();
194 fitf.DrawCopy("same");// Do not use DrawClone, it result in meory leak (even so unclear why)
195 gauss1.DrawCopy("same");
196 gauss2.DrawCopy("same");
197
198 if (retrieveMeanT0) {
199 // return mean of the core Gaussian
200 return {true, mainMean};
201 }
202 return {true, {}};
203
204
205}
206
208{
209
210 const bool retrieveMeanT0 = retrieveDeltas;
211 bool processingSuccessful = false;
212 std::optional<double> currentT0;
213
214 // --- ECL EventT0 plots for ECLTRG ---
215
216 // find ECL EventT0 Hadrons ECLTRG histogram and process it
217 TH1* h = findHist("EventT0/m_histEventT0_ECL_hadron_L1_ECLTRG");
218 TString tag = "hadronECLTRG_ECLT0";
220 std::tie(processingSuccessful, currentT0) = processHistogram(h, tag, retrieveMeanT0);
221 if (processingSuccessful) {
222 m_cECLTimeHadronsECLTRG->SetFillColor(0);
223 m_cECLTimeHadronsECLTRG->Modified();
224 m_cECLTimeHadronsECLTRG->Update();
225 if (*currentT0) {
226 m_ECLTRGHLThadronECLT0 = *currentT0;
227 }
228 } else {
229 B2DEBUG(29, Form("Histogram ECL EventT0 for %s from EventT0 DQM not processed!", tag.Data()));
230 if (h) h->Draw();
231 m_cECLTimeHadronsECLTRG->SetFillColor(kGray);
233 }
234
235 // find ECL EventT0 Bhabhas ECLTRG histogram and process it
236 h = findHist("EventT0/m_histEventT0_ECL_bhabha_L1_ECLTRG");
237 tag = "bhabhaECLTRG_ECLT0";
239 if (std::get<0>(processHistogram(h, tag))) {
240 m_cECLTimeBhaBhaECLTRG->SetFillColor(0);
241 m_cECLTimeBhaBhaECLTRG->Modified();
242 m_cECLTimeBhaBhaECLTRG->Update();
243 } else {
244 B2DEBUG(29, Form("Histogram ECL EventT0 for %s from EventT0 DQM not processed!", tag.Data()));
245 if (h) h->Draw();
246 m_cECLTimeBhaBhaECLTRG->SetFillColor(kGray);
248 }
249
250 // find ECL EventT0 Mumus ECLTRG histogram and process it
251 h = findHist("EventT0/m_histEventT0_ECL_mumu_L1_ECLTRG");
252 tag = "mumuECLTRG_ECLT0";
254 if (std::get<0>(processHistogram(h, tag))) {
255 m_cECLTimeMuMuECLTRG->SetFillColor(0);
256 m_cECLTimeMuMuECLTRG->Modified();
257 m_cECLTimeMuMuECLTRG->Update();
258 } else {
259 B2DEBUG(29, Form("Histogram ECL EventT0 for %s from EventT0 DQM not processed!", tag.Data()));
260 if (h) h->Draw();
261 m_cECLTimeMuMuECLTRG->SetFillColor(kGray);
262 m_cECLTimeMuMuECLTRG->Draw();
263 }
264
265
266 // --- CDC EventT0 plots for ECLTRG ---
267
268 // find CDC EventT0 Hadrons ECLTRG histogram and process it
269 h = findHist("EventT0/m_histEventT0_CDC_hadron_L1_ECLTRG");
270 tag = "hadronECLTRG_CDCT0";
272 std::tie(processingSuccessful, currentT0) = processHistogram(h, tag, retrieveMeanT0);
273 if (processingSuccessful) {
274 m_cCDCTimeHadronsECLTRG->SetFillColor(0);
275 m_cCDCTimeHadronsECLTRG->Modified();
276 m_cCDCTimeHadronsECLTRG->Update();
277 if (*currentT0) {
278 m_ECLTRGHLThadronCDCT0 = *currentT0;
279 }
280 } else {
281 B2DEBUG(29, Form("Histogram CDC EventT0 for %s from EventT0 DQM not processed!", tag.Data()));
282 if (h) h->Draw();
283 m_cCDCTimeHadronsECLTRG->SetFillColor(kGray);
285 }
286
287 // find CDC EventT0 Bhabhas ECLTRG histogram and process it
288 h = findHist("EventT0/m_histEventT0_CDC_bhabha_L1_ECLTRG");
289 tag = "bhabhaECLTRG_CDCT0";
291 if (std::get<0>(processHistogram(h, tag))) {
292 m_cCDCTimeBhaBhaECLTRG->SetFillColor(0);
293 m_cCDCTimeBhaBhaECLTRG->Modified();
294 m_cCDCTimeBhaBhaECLTRG->Update();
295 } else {
296 B2DEBUG(29, Form("Histogram CDC EventT0 for %s from EventT0 DQM not processed!", tag.Data()));
297 if (h) h->Draw();
298 m_cCDCTimeBhaBhaECLTRG->SetFillColor(kGray);
300 }
301
302 // find CDC EventT0 Mumus ECLTRG histogram and process it
303 h = findHist("EventT0/m_histEventT0_CDC_mumu_L1_ECLTRG");
304 tag = "mumuECLTRG_CDCT0";
306 if (std::get<0>(processHistogram(h, tag))) {
307 m_cCDCTimeMuMuECLTRG->SetFillColor(0);
308 m_cCDCTimeMuMuECLTRG->Modified();
309 m_cCDCTimeMuMuECLTRG->Update();
310 } else {
311 B2DEBUG(29, Form("Histogram CDC EventT0 for %s from EventT0 DQM not processed!", tag.Data()));
312 if (h) h->Draw();
313 m_cCDCTimeMuMuECLTRG->SetFillColor(kGray);
314 m_cCDCTimeMuMuECLTRG->Draw();
315 }
316
317
318 // --- TOP EventT0 plots for ECLTRG ---
319
320 // find TOP EventT0 Hadrons ECLTRG histogram and process it
321 h = findHist("EventT0/m_histEventT0_TOP_hadron_L1_ECLTRG");
322 tag = "hadronECLTRG_TOPT0";
324 std::tie(processingSuccessful, currentT0) = processHistogram(h, tag, retrieveMeanT0);
325 if (processingSuccessful) {
326 m_cTOPTimeHadronsECLTRG->SetFillColor(0);
327 m_cTOPTimeHadronsECLTRG->Modified();
328 m_cTOPTimeHadronsECLTRG->Update();
329 if (*currentT0) {
330 m_ECLTRGHLThadronTOPT0 = *currentT0;
331 }
332 } else {
333 B2DEBUG(29, Form("Histogram TOP EventT0 for %s from EventT0 DQM not processed!", tag.Data()));
334 if (h) h->Draw();
335 m_cTOPTimeHadronsECLTRG->SetFillColor(kGray);
337 }
338
339 // find TOP EventT0 Bhabhas ECLTRG histogram and process it
340 h = findHist("EventT0/m_histEventT0_TOP_bhabha_L1_ECLTRG");
341 tag = "bhabhaECLTRG_TOPT0";
343 if (std::get<0>(processHistogram(h, tag))) {
344 m_cTOPTimeBhaBhaECLTRG->SetFillColor(0);
345 m_cTOPTimeBhaBhaECLTRG->Modified();
346 m_cTOPTimeBhaBhaECLTRG->Update();
347 } else {
348 B2DEBUG(29, Form("Histogram TOP EventT0 for %s from EventT0 DQM not processed!", tag.Data()));
349 if (h) h->Draw();
350 m_cTOPTimeBhaBhaECLTRG->SetFillColor(kGray);
352 }
353
354 // find TOP EventT0 Mumus ECLTRG histogram and process it
355 h = findHist("EventT0/m_histEventT0_TOP_mumu_L1_ECLTRG");
356 tag = "mumuECLTRG_TOPT0";
358 if (std::get<0>(processHistogram(h, tag))) {
359 m_cTOPTimeMuMuECLTRG->SetFillColor(0);
360 m_cTOPTimeMuMuECLTRG->Modified();
361 m_cTOPTimeMuMuECLTRG->Update();
362 } else {
363 B2DEBUG(29, Form("Histogram TOP EventT0 for %s from EventT0 DQM not processed!", tag.Data()));
364 if (h) h->Draw();
365 m_cTOPTimeMuMuECLTRG->SetFillColor(kGray);
366 m_cTOPTimeMuMuECLTRG->Draw();
367 }
368
369
370 // --- SVD EventT0 plots for ECLTRG ---
371
372 // find SVD EventT0 Hadrons ECLTRG histogram and process it
373 h = findHist("EventT0/m_histEventT0_SVD_hadron_L1_ECLTRG");
374 tag = "hadronECLTRG_SVDT0";
376 std::tie(processingSuccessful, currentT0) = processHistogram(h, tag, retrieveMeanT0);
377 if (processingSuccessful) {
378 m_cSVDTimeHadronsECLTRG->SetFillColor(0);
379 m_cSVDTimeHadronsECLTRG->Modified();
380 m_cSVDTimeHadronsECLTRG->Update();
381 if (*currentT0) {
382 m_ECLTRGHLThadronSVDT0 = *currentT0;
383 }
384 } else {
385 B2DEBUG(29, Form("Histogram SVD EventT0 for %s from EventT0 DQM not processed!", tag.Data()));
386 if (h) h->Draw();
387 m_cSVDTimeHadronsECLTRG->SetFillColor(kGray);
389 }
390
391 // find SVD EventT0 Bhabhas ECLTRG histogram and process it
392 h = findHist("EventT0/m_histEventT0_SVD_bhabha_L1_ECLTRG");
393 tag = "bhabhaECLTRG_SVDT0";
395 if (std::get<0>(processHistogram(h, tag))) {
396 m_cSVDTimeBhaBhaECLTRG->SetFillColor(0);
397 m_cSVDTimeBhaBhaECLTRG->Modified();
398 m_cSVDTimeBhaBhaECLTRG->Update();
399 } else {
400 B2DEBUG(29, Form("Histogram SVD EventT0 for %s from EventT0 DQM not processed!", tag.Data()));
401 if (h) h->Draw();
402 m_cSVDTimeBhaBhaECLTRG->SetFillColor(kGray);
404 }
405
406 // find SVD EventT0 Mumus ECLTRG histogram and process it
407 h = findHist("EventT0/m_histEventT0_SVD_mumu_L1_ECLTRG");
408 tag = "mumuECLTRG_SVDT0";
410 if (std::get<0>(processHistogram(h, tag))) {
411 m_cSVDTimeMuMuECLTRG->SetFillColor(0);
412 m_cSVDTimeMuMuECLTRG->Modified();
413 m_cSVDTimeMuMuECLTRG->Update();
414 } else {
415 B2DEBUG(29, Form("Histogram SVD EventT0 for %s from EventT0 DQM not processed!", tag.Data()));
416 if (h) h->Draw();
417 m_cSVDTimeMuMuECLTRG->SetFillColor(kGray);
418 m_cSVDTimeMuMuECLTRG->Draw();
419 }
420
421
422}
423
425{
426 // --- ECL EventT0 plots for CDCTRG ---
427
428 // find ECL EventT0 Hadrons CDCTRG histogram and process it
429 TH1* h = findHist("EventT0/m_histEventT0_ECL_hadron_L1_CDCTRG");
430 TString tag = "hadronCDCTRG_ECLT0";
432 if (std::get<0>(processHistogram(h, tag))) {
433 m_cECLTimeHadronsCDCTRG->SetFillColor(0);
434 m_cECLTimeHadronsCDCTRG->Modified();
435 m_cECLTimeHadronsCDCTRG->Update();
437 } else {
438 B2DEBUG(29, Form("Histogram ECL EventT0 for %s from EventT0 DQM not processed!", tag.Data()));
439 if (h) h->Draw();
440 m_cECLTimeHadronsCDCTRG->SetFillColor(kGray);
442 }
443
444 // find ECL EventT0 Bhabhas CDCTRG histogram and process it
445 h = findHist("EventT0/m_histEventT0_ECL_bhabha_L1_CDCTRG");
446 tag = "bhabhaCDCTRG_ECLT0";
448 if (std::get<0>(processHistogram(h, tag))) {
449 m_cECLTimeBhaBhaCDCTRG->SetFillColor(0);
450 m_cECLTimeBhaBhaCDCTRG->Modified();
451 m_cECLTimeBhaBhaCDCTRG->Update();
453 } else {
454 B2DEBUG(29, Form("Histogram ECL EventT0 for %s from EventT0 DQM not processed!", tag.Data()));
455 if (h) h->Draw();
456 m_cECLTimeBhaBhaCDCTRG->SetFillColor(kGray);
458 }
459
460 // find ECL EventT0 Mumus CDCTRG histogram and process it
461 h = findHist("EventT0/m_histEventT0_ECL_mumu_L1_CDCTRG");
462 tag = "mumuCDCTRG_ECLT0";
464 if (std::get<0>(processHistogram(h, tag))) {
465 m_cECLTimeMuMuCDCTRG->SetFillColor(0);
466 m_cECLTimeMuMuCDCTRG->Modified();
467 m_cECLTimeMuMuCDCTRG->Update();
468 } else {
469 B2DEBUG(29, Form("Histogram ECL EventT0 for %s from EventT0 DQM not processed!", tag.Data()));
470 if (h) h->Draw();
471 m_cECLTimeMuMuCDCTRG->SetFillColor(kGray);
472 m_cECLTimeMuMuCDCTRG->Draw();
473 }
474
475
476 // --- CDC EventT0 plots for CDCTRG ---
477
478 // find CDC EventT0 Hadrons CDCTRG histogram and process it
479 h = findHist("EventT0/m_histEventT0_CDC_hadron_L1_CDCTRG");
480 tag = "hadronCDCTRG_CDCT0";
482 if (std::get<0>(processHistogram(h, tag))) {
483 m_cCDCTimeHadronsCDCTRG->SetFillColor(0);
484 m_cCDCTimeHadronsCDCTRG->Modified();
485 m_cCDCTimeHadronsCDCTRG->Update();
487 } else {
488 B2DEBUG(29, Form("Histogram CDC EventT0 for %s from EventT0 DQM not processed!", tag.Data()));
489 if (h) h->Draw();
490 m_cCDCTimeHadronsCDCTRG->SetFillColor(kGray);
492 }
493
494 // find CDC EventT0 Bhabhas CDCTRG histogram and process it
495 h = findHist("EventT0/m_histEventT0_CDC_bhabha_L1_CDCTRG");
496 tag = "bhabhaCDCTRG_CDCT0";
498 if (std::get<0>(processHistogram(h, tag))) {
499 m_cCDCTimeBhaBhaCDCTRG->SetFillColor(0);
500 m_cCDCTimeBhaBhaCDCTRG->Modified();
501 m_cCDCTimeBhaBhaCDCTRG->Update();
503 } else {
504 B2DEBUG(29, Form("Histogram CDC EventT0 for %s from EventT0 DQM not processed!", tag.Data()));
505 if (h) h->Draw();
506 m_cCDCTimeBhaBhaCDCTRG->SetFillColor(kGray);
508 }
509
510 // find CDC EventT0 Mumus CDCTRG histogram and process it
511 h = findHist("EventT0/m_histEventT0_CDC_mumu_L1_CDCTRG");
512 tag = "mumuCDCTRG_CDCT0";
514 if (std::get<0>(processHistogram(h, tag))) {
515 m_cCDCTimeMuMuCDCTRG->SetFillColor(0);
516 m_cCDCTimeMuMuCDCTRG->Modified();
517 m_cCDCTimeMuMuCDCTRG->Update();
518 } else {
519 B2DEBUG(29, Form("Histogram CDC EventT0 for %s from EventT0 DQM not processed!", tag.Data()));
520 if (h) h->Draw();
521 m_cCDCTimeMuMuCDCTRG->SetFillColor(kGray);
522 m_cCDCTimeMuMuCDCTRG->Draw();
523 }
524
525
526 // --- TOP EventT0 plots for CDCTRG ---
527
528 // find TOP EventT0 Hadrons CDCTRG histogram and process it
529 h = findHist("EventT0/m_histEventT0_TOP_hadron_L1_CDCTRG");
530 tag = "hadronCDCTRG_TOPT0";
532 if (std::get<0>(processHistogram(h, tag))) {
533 m_cTOPTimeHadronsCDCTRG->SetFillColor(0);
534 m_cTOPTimeHadronsCDCTRG->Modified();
535 m_cTOPTimeHadronsCDCTRG->Update();
537 } else {
538 B2DEBUG(29, Form("Histogram TOP EventT0 for %s from EventT0 DQM not processed!", tag.Data()));
539 if (h) h->Draw();
540 m_cTOPTimeHadronsCDCTRG->SetFillColor(kGray);
542 }
543
544 // find TOP EventT0 Bhabhas CDCTRG histogram and process it
545 h = findHist("EventT0/m_histEventT0_TOP_bhabha_L1_CDCTRG");
546 tag = "bhabhaCDCTRG_TOPT0";
548 if (std::get<0>(processHistogram(h, tag))) {
549 m_cTOPTimeBhaBhaCDCTRG->SetFillColor(0);
550 m_cTOPTimeBhaBhaCDCTRG->Modified();
551 m_cTOPTimeBhaBhaCDCTRG->Update();
553 } else {
554 B2DEBUG(29, Form("Histogram TOP EventT0 for %s from EventT0 DQM not processed!", tag.Data()));
555 if (h) h->Draw();
556 m_cTOPTimeBhaBhaCDCTRG->SetFillColor(kGray);
558 }
559
560 // find TOP EventT0 Mumus CDCTRG histogram and process it
561 h = findHist("EventT0/m_histEventT0_TOP_mumu_L1_CDCTRG");
562 tag = "mumuCDCTRG_TOPT0";
564 if (std::get<0>(processHistogram(h, tag))) {
565 m_cTOPTimeMuMuCDCTRG->SetFillColor(0);
566 m_cTOPTimeMuMuCDCTRG->Modified();
567 m_cTOPTimeMuMuCDCTRG->Update();
568 } else {
569 B2DEBUG(29, Form("Histogram TOP EventT0 for %s from EventT0 DQM not processed!", tag.Data()));
570 if (h) h->Draw();
571 m_cTOPTimeMuMuCDCTRG->SetFillColor(kGray);
572 m_cTOPTimeMuMuCDCTRG->Draw();
573 }
574
575
576 // --- SVD EventT0 plots for CDCTRG ---
577
578 // find SVD EventT0 Hadrons CDCTRG histogram and process it
579 h = findHist("EventT0/m_histEventT0_SVD_hadron_L1_CDCTRG");
580 tag = "hadronCDCTRG_SVDT0";
582 if (std::get<0>(processHistogram(h, tag))) {
583 m_cSVDTimeHadronsCDCTRG->SetFillColor(0);
584 m_cSVDTimeHadronsCDCTRG->Modified();
585 m_cSVDTimeHadronsCDCTRG->Update();
587 } else {
588 B2DEBUG(29, Form("Histogram SVD EventT0 for %s from EventT0 DQM not processed!", tag.Data()));
589 if (h) h->Draw();
590 m_cSVDTimeHadronsCDCTRG->SetFillColor(kGray);
592 }
593
594 // find SVD EventT0 Bhabhas CDCTRG histogram and process it
595 h = findHist("EventT0/m_histEventT0_SVD_bhabha_L1_CDCTRG");
596 tag = "bhabhaCDCTRG_SVDT0";
598 if (std::get<0>(processHistogram(h, tag))) {
599 m_cSVDTimeBhaBhaCDCTRG->SetFillColor(0);
600 m_cSVDTimeBhaBhaCDCTRG->Modified();
601 m_cSVDTimeBhaBhaCDCTRG->Update();
603 } else {
604 B2DEBUG(29, Form("Histogram SVD EventT0 for %s from EventT0 DQM not processed!", tag.Data()));
605 if (h) h->Draw();
606 m_cSVDTimeBhaBhaCDCTRG->SetFillColor(kGray);
608 }
609
610 // find SVD EventT0 Mumus CDCTRG histogram and process it
611 h = findHist("EventT0/m_histEventT0_SVD_mumu_L1_CDCTRG");
612 tag = "mumuCDCTRG_SVDT0";
614 if (std::get<0>(processHistogram(h, tag))) {
615 m_cSVDTimeMuMuCDCTRG->SetFillColor(0);
616 m_cSVDTimeMuMuCDCTRG->Modified();
617 m_cSVDTimeMuMuCDCTRG->Update();
618 } else {
619 B2DEBUG(29, Form("Histogram SVD EventT0 for %s from EventT0 DQM not processed!", tag.Data()));
620 if (h) h->Draw();
621 m_cSVDTimeMuMuCDCTRG->SetFillColor(kGray);
622 m_cSVDTimeMuMuCDCTRG->Draw();
623 }
624}
625
627{
628 // --- ECL EventT0 plots for TOPTRG ---
629
630 // find ECL EventT0 Hadrons TOPTRG histogram and process it
631 TH1* h = findHist("EventT0/m_histEventT0_ECL_hadron_L1_TOPTRG");
632 TString tag = "hadronTOPTRG_ECLT0";
634 if (std::get<0>(processHistogram(h, tag))) {
635 m_cECLTimeHadronsTOPTRG->SetFillColor(0);
636 m_cECLTimeHadronsTOPTRG->Modified();
637 m_cECLTimeHadronsTOPTRG->Update();
639 } else {
640 B2DEBUG(29, Form("Histogram ECL EventT0 for %s from EventT0 DQM not processed!", tag.Data()));
641 if (h) h->Draw();
642 m_cECLTimeHadronsTOPTRG->SetFillColor(kGray);
644 }
645
646 // find ECL EventT0 Bhabhas TOPTRG histogram and process it
647 h = findHist("EventT0/m_histEventT0_ECL_bhabha_L1_TOPTRG");
648 tag = "bhabhaTOPTRG_ECLT0";
650 if (std::get<0>(processHistogram(h, tag))) {
651 m_cECLTimeBhaBhaTOPTRG->SetFillColor(0);
652 m_cECLTimeBhaBhaTOPTRG->Modified();
653 m_cECLTimeBhaBhaTOPTRG->Update();
655 } else {
656 B2DEBUG(29, Form("Histogram ECL EventT0 for %s from EventT0 DQM not processed!", tag.Data()));
657 if (h) h->Draw();
658 m_cECLTimeBhaBhaTOPTRG->SetFillColor(kGray);
660 }
661
662 // find ECL EventT0 Mumus TOPTRG histogram and process it
663 h = findHist("EventT0/m_histEventT0_ECL_mumu_L1_TOPTRG");
664 tag = "mumuTOPTRG_ECLT0";
666 if (std::get<0>(processHistogram(h, tag))) {
667 m_cECLTimeMuMuTOPTRG->SetFillColor(0);
668 m_cECLTimeMuMuTOPTRG->Modified();
669 m_cECLTimeMuMuTOPTRG->Update();
670 } else {
671 B2DEBUG(29, Form("Histogram ECL EventT0 for %s from EventT0 DQM not processed!", tag.Data()));
672 if (h) h->Draw();
673 m_cECLTimeMuMuTOPTRG->SetFillColor(kGray);
674 m_cECLTimeMuMuTOPTRG->Draw();
675 }
676
677
678 // --- CDC EventT0 plots for TOPTRG ---
679
680 // find CDC EventT0 Hadrons TOPTRG histogram and process it
681 h = findHist("EventT0/m_histEventT0_CDC_hadron_L1_TOPTRG");
682 tag = "hadronTOPTRG_CDCT0";
684 if (std::get<0>(processHistogram(h, tag))) {
685 m_cCDCTimeHadronsTOPTRG->SetFillColor(0);
686 m_cCDCTimeHadronsTOPTRG->Modified();
687 m_cCDCTimeHadronsTOPTRG->Update();
689 } else {
690 B2DEBUG(29, Form("Histogram CDC EventT0 for %s from EventT0 DQM not processed!", tag.Data()));
691 if (h) h->Draw();
692 m_cCDCTimeHadronsTOPTRG->SetFillColor(kGray);
694 }
695
696 // find CDC EventT0 Bhabhas TOPTRG histogram and process it
697 h = findHist("EventT0/m_histEventT0_CDC_bhabha_L1_TOPTRG");
698 tag = "bhabhaTOPTRG_CDCT0";
700 if (std::get<0>(processHistogram(h, tag))) {
701 m_cCDCTimeBhaBhaTOPTRG->SetFillColor(0);
702 m_cCDCTimeBhaBhaTOPTRG->Modified();
703 m_cCDCTimeBhaBhaTOPTRG->Update();
705 } else {
706 B2DEBUG(29, Form("Histogram CDC EventT0 for %s from EventT0 DQM not processed!", tag.Data()));
707 if (h) h->Draw();
708 m_cCDCTimeBhaBhaTOPTRG->SetFillColor(kGray);
710 }
711
712 // find CDC EventT0 Mumus TOPTRG histogram and process it
713 h = findHist("EventT0/m_histEventT0_CDC_mumu_L1_TOPTRG");
714 tag = "mumuTOPTRG_CDCT0";
716 if (std::get<0>(processHistogram(h, tag))) {
717 m_cCDCTimeMuMuTOPTRG->SetFillColor(0);
718 m_cCDCTimeMuMuTOPTRG->Modified();
719 m_cCDCTimeMuMuTOPTRG->Update();
720 } else {
721 B2DEBUG(29, Form("Histogram CDC EventT0 for %s from EventT0 DQM not processed!", tag.Data()));
722 if (h) h->Draw();
723 m_cCDCTimeMuMuTOPTRG->SetFillColor(kGray);
724 m_cCDCTimeMuMuTOPTRG->Draw();
725 }
726
727
728 // --- TOP EventT0 plots for TOPTRG ---
729
730 // find TOP EventT0 Hadrons TOPTRG histogram and process it
731 h = findHist("EventT0/m_histEventT0_TOP_hadron_L1_TOPTRG");
732 tag = "hadronTOPTRG_TOPT0";
734 if (std::get<0>(processHistogram(h, tag))) {
735 m_cTOPTimeHadronsTOPTRG->SetFillColor(0);
736 m_cTOPTimeHadronsTOPTRG->Modified();
737 m_cTOPTimeHadronsTOPTRG->Update();
739 } else {
740 B2DEBUG(29, Form("Histogram TOP EventT0 for %s from EventT0 DQM not processed!", tag.Data()));
741 if (h) h->Draw();
742 m_cTOPTimeHadronsTOPTRG->SetFillColor(kGray);
744 }
745
746 // find TOP EventT0 Bhabhas TOPTRG histogram and process it
747 h = findHist("EventT0/m_histEventT0_TOP_bhabha_L1_TOPTRG");
748 tag = "bhabhaTOPTRG_TOPT0";
750 if (std::get<0>(processHistogram(h, tag))) {
751 m_cTOPTimeBhaBhaTOPTRG->SetFillColor(0);
752 m_cTOPTimeBhaBhaTOPTRG->Modified();
753 m_cTOPTimeBhaBhaTOPTRG->Update();
755 } else {
756 B2DEBUG(29, Form("Histogram TOP EventT0 for %s from EventT0 DQM not processed!", tag.Data()));
757 if (h) h->Draw();
758 m_cTOPTimeBhaBhaTOPTRG->SetFillColor(kGray);
760 }
761
762 // find TOP EventT0 Mumus TOPTRG histogram and process it
763 h = findHist("EventT0/m_histEventT0_TOP_mumu_L1_TOPTRG");
764 tag = "mumuTOPTRG_TOPT0";
766 if (std::get<0>(processHistogram(h, tag))) {
767 m_cTOPTimeMuMuTOPTRG->SetFillColor(0);
768 m_cTOPTimeMuMuTOPTRG->Modified();
769 m_cTOPTimeMuMuTOPTRG->Update();
770 } else {
771 B2DEBUG(29, Form("Histogram TOP EventT0 for %s from EventT0 DQM not processed!", tag.Data()));
772 if (h) h->Draw();
773 m_cTOPTimeMuMuTOPTRG->SetFillColor(kGray);
774 m_cTOPTimeMuMuTOPTRG->Draw();
775 }
776
777
778 // --- SVD EventT0 plots for TOPTRG ---
779
780 // find SVD EventT0 Hadrons TOPTRG histogram and process it
781 h = findHist("EventT0/m_histEventT0_SVD_hadron_L1_TOPTRG");
782 tag = "hadronTOPTRG_SVDT0";
784 if (std::get<0>(processHistogram(h, tag))) {
785 m_cSVDTimeHadronsTOPTRG->SetFillColor(0);
786 m_cSVDTimeHadronsTOPTRG->Modified();
787 m_cSVDTimeHadronsTOPTRG->Update();
789 } else {
790 B2DEBUG(29, Form("Histogram SVD EventT0 for %s from EventT0 DQM not processed!", tag.Data()));
791 if (h) h->Draw();
792 m_cSVDTimeHadronsTOPTRG->SetFillColor(kGray);
794 }
795
796 // find SVD EventT0 Bhabhas TOPTRG histogram and process it
797 h = findHist("EventT0/m_histEventT0_SVD_bhabha_L1_TOPTRG");
798 tag = "bhabhaTOPTRG_SVDT0";
800 if (std::get<0>(processHistogram(h, tag))) {
801 m_cSVDTimeBhaBhaTOPTRG->SetFillColor(0);
802 m_cSVDTimeBhaBhaTOPTRG->Modified();
803 m_cSVDTimeBhaBhaTOPTRG->Update();
805 } else {
806 B2DEBUG(29, Form("Histogram SVD EventT0 for %s from EventT0 DQM not processed!", tag.Data()));
807 if (h) h->Draw();
808 m_cSVDTimeBhaBhaTOPTRG->SetFillColor(kGray);
810 }
811
812 // find SVD EventT0 Mumus TOPTRG histogram and process it
813 h = findHist("EventT0/m_histEventT0_SVD_mumu_L1_TOPTRG");
814 tag = "mumuTOPTRG_SVDT0";
816 if (std::get<0>(processHistogram(h, tag))) {
817 m_cSVDTimeMuMuTOPTRG->SetFillColor(0);
818 m_cSVDTimeMuMuTOPTRG->Modified();
819 m_cSVDTimeMuMuTOPTRG->Update();
820 } else {
821 B2DEBUG(29, Form("Histogram SVD EventT0 for %s from EventT0 DQM not processed!", tag.Data()));
822 if (h) h->Draw();
823 m_cSVDTimeMuMuTOPTRG->SetFillColor(kGray);
824 m_cSVDTimeMuMuTOPTRG->Draw();
825 }
826}
827
829{
830 //ECLTRG canvas
831 m_cECLTimeHadronsECLTRG = new TCanvas("ECLTimeHadronsECLTRG", "ECL time hadrons ECLTRG jitter");
832 m_cECLTimeBhaBhaECLTRG = new TCanvas("ECLTimeBhaBhaECLTRG", "ECL time BhaBha ECLTRG jitter");
833 m_cECLTimeMuMuECLTRG = new TCanvas("ECLTimeMuMuECLTRG", "ECL time #mu#mu ECLTRG jitter");
834 m_cCDCTimeHadronsECLTRG = new TCanvas("CDCTimeHadronsECLTRG", "CDC time hadrons ECLTRG jitter");
835 m_cCDCTimeBhaBhaECLTRG = new TCanvas("CDCTimeBhaBhaECLTRG", "CDC time BhaBha ECLTRG jitter");
836 m_cCDCTimeMuMuECLTRG = new TCanvas("CDCTimeMuMuECLTRG", "CDC time #mu#mu ECLTRG jitter");
837 m_cTOPTimeHadronsECLTRG = new TCanvas("TOPTimeHadronsECLTRG", "TOP time hadrons ECLTRG jitter");
838 m_cTOPTimeBhaBhaECLTRG = new TCanvas("TOPTimeBhaBhaECLTRG", "TOP time BhaBha ECLTRG jitter");
839 m_cTOPTimeMuMuECLTRG = new TCanvas("TOPTimeMuMuECLTRG", "TOP time #mu#mu ECLTRG jitter");
840 m_cSVDTimeHadronsECLTRG = new TCanvas("SVDTimeHadronsECLTRG", "SVD time hadrons ECLTRG jitter");
841 m_cSVDTimeBhaBhaECLTRG = new TCanvas("SVDTimeBhaBhaECLTRG", "SVD time BhaBha ECLTRG jitter");
842 m_cSVDTimeMuMuECLTRG = new TCanvas("SVDTimeMuMuECLTRG", "SVD time #mu#mu ECLTRG jitter");
843
844 //CDCTRG canvas
845 m_cECLTimeHadronsCDCTRG = new TCanvas("ECLTimeHadronsCDCTRG", "ECL time hadrons CDCTRG jitter");
846 m_cECLTimeBhaBhaCDCTRG = new TCanvas("ECLTimeBhaBhaCDCTRG", "ECL time BhaBha CDCTRG jitter");
847 m_cECLTimeMuMuCDCTRG = new TCanvas("ECLTimeMuMuCDCTRG", "ECL time #mu#mu CDCTRG jitter");
848 m_cCDCTimeHadronsCDCTRG = new TCanvas("CDCTimeHadronsCDCTRG", "CDC time hadrons CDCTRG jitter");
849 m_cCDCTimeBhaBhaCDCTRG = new TCanvas("CDCTimeBhaBhaCDCTRG", "CDC time BhaBha CDCTRG jitter");
850 m_cCDCTimeMuMuCDCTRG = new TCanvas("CDCTimeMuMuCDCTRG", "CDC time #mu#mu CDCTRG jitter");
851 m_cTOPTimeHadronsCDCTRG = new TCanvas("TOPTimeHadronsCDCTRG", "TOP time hadrons CDCTRG jitter");
852 m_cTOPTimeBhaBhaCDCTRG = new TCanvas("TOPTimeBhaBhaCDCTRG", "TOP time BhaBha CDCTRG jitter");
853 m_cTOPTimeMuMuCDCTRG = new TCanvas("TOPTimeMuMuCDCTRG", "TOP time #mu#mu CDCTRG jitter");
854 m_cSVDTimeHadronsCDCTRG = new TCanvas("SVDTimeHadronsCDCTRG", "SVD time hadrons CDCTRG jitter");
855 m_cSVDTimeBhaBhaCDCTRG = new TCanvas("SVDTimeBhaBhaCDCTRG", "SVD time BhaBha CDCTRG jitter");
856 m_cSVDTimeMuMuCDCTRG = new TCanvas("SVDTimeMuMuCDCTRG", "SVD time #mu#mu CDCTRG jitter");
857
858 //TOPTRG canvas
859 m_cECLTimeHadronsTOPTRG = new TCanvas("ECLTimeHadronsTOPTRG", "ECL time hadrons TOPTRG jitter");
860 m_cECLTimeBhaBhaTOPTRG = new TCanvas("ECLTimeBhaBhaTOPTRG", "ECL time BhaBha TOPTRG jitter");
861 m_cECLTimeMuMuTOPTRG = new TCanvas("ECLTimeMuMuTOPTRG", "ECL time #mu#mu TOPTRG jitter");
862 m_cCDCTimeHadronsTOPTRG = new TCanvas("CDCTimeHadronsTOPTRG", "CDC time hadrons TOPTRG jitter");
863 m_cCDCTimeBhaBhaTOPTRG = new TCanvas("CDCTimeBhaBhaTOPTRG", "CDC time BhaBha TOPTRG jitter");
864 m_cCDCTimeMuMuTOPTRG = new TCanvas("CDCTimeMuMuTOPTRG", "CDC time #mu#mu TOPTRG jitter");
865 m_cTOPTimeHadronsTOPTRG = new TCanvas("TOPTimeHadronsTOPTRG", "TOP time hadrons TOPTRG jitter");
866 m_cTOPTimeBhaBhaTOPTRG = new TCanvas("TOPTimeBhaBhaTOPTRG", "TOP time BhaBha TOPTRG jitter");
867 m_cTOPTimeMuMuTOPTRG = new TCanvas("TOPTimeMuMuTOPTRG", "TOP time #mu#mu TOPTRG jitter");
868 m_cSVDTimeHadronsTOPTRG = new TCanvas("SVDTimeHadronsTOPTRG", "SVD time hadrons TOPTRG jitter");
869 m_cSVDTimeBhaBhaTOPTRG = new TCanvas("SVDTimeBhaBhaTOPTRG", "SVD time BhaBha TOPTRG jitter");
870 m_cSVDTimeMuMuTOPTRG = new TCanvas("SVDTimeMuMuTOPTRG", "SVD time #mu#mu TOPTRG jitter");
871}
872
874{
876 m_cECLTimeBhaBhaECLTRG->Clear();
877 m_cECLTimeMuMuECLTRG->Clear();
879 m_cCDCTimeBhaBhaECLTRG->Clear();
880 m_cCDCTimeMuMuECLTRG->Clear();
882 m_cTOPTimeBhaBhaECLTRG->Clear();
883 m_cTOPTimeMuMuECLTRG->Clear();
885 m_cSVDTimeBhaBhaECLTRG->Clear();
886 m_cSVDTimeMuMuECLTRG->Clear();
887
889 m_cECLTimeBhaBhaCDCTRG->Clear();
890 m_cECLTimeMuMuCDCTRG->Clear();
892 m_cCDCTimeBhaBhaCDCTRG->Clear();
893 m_cCDCTimeMuMuCDCTRG->Clear();
895 m_cTOPTimeBhaBhaCDCTRG->Clear();
896 m_cTOPTimeMuMuCDCTRG->Clear();
898 m_cSVDTimeBhaBhaCDCTRG->Clear();
899 m_cSVDTimeMuMuCDCTRG->Clear();
900
902 m_cECLTimeBhaBhaTOPTRG->Clear();
903 m_cECLTimeMuMuTOPTRG->Clear();
905 m_cCDCTimeBhaBhaTOPTRG->Clear();
906 m_cCDCTimeMuMuTOPTRG->Clear();
908 m_cTOPTimeBhaBhaTOPTRG->Clear();
909 m_cTOPTimeMuMuTOPTRG->Clear();
911 m_cSVDTimeBhaBhaTOPTRG->Clear();
912 m_cSVDTimeMuMuTOPTRG->Clear();
913}
914
916{
917 m_cECLTimeHadronsECLTRG->Print("EventT0_TriggerJitter.pdf(");
918 m_cECLTimeBhaBhaECLTRG->Print("EventT0_TriggerJitter.pdf");
919 m_cECLTimeMuMuECLTRG->Print("EventT0_TriggerJitter.pdf");
920 m_cCDCTimeHadronsECLTRG->Print("EventT0_TriggerJitter.pdf");
921 m_cCDCTimeBhaBhaECLTRG->Print("EventT0_TriggerJitter.pdf");
922 m_cCDCTimeMuMuECLTRG->Print("EventT0_TriggerJitter.pdf");
923 m_cTOPTimeHadronsECLTRG->Print("EventT0_TriggerJitter.pdf");
924 m_cTOPTimeBhaBhaECLTRG->Print("EventT0_TriggerJitter.pdf");
925 m_cTOPTimeMuMuECLTRG->Print("EventT0_TriggerJitter.pdf");
926 m_cSVDTimeHadronsECLTRG->Print("EventT0_TriggerJitter.pdf");
927 m_cSVDTimeBhaBhaECLTRG->Print("EventT0_TriggerJitter.pdf");
928 m_cSVDTimeMuMuECLTRG->Print("EventT0_TriggerJitter.pdf");
929
930 m_cECLTimeHadronsCDCTRG->Print("EventT0_TriggerJitter.pdf");
931 m_cECLTimeBhaBhaCDCTRG->Print("EventT0_TriggerJitter.pdf");
932 m_cECLTimeMuMuCDCTRG->Print("EventT0_TriggerJitter.pdf");
933 m_cCDCTimeHadronsCDCTRG->Print("EventT0_TriggerJitter.pdf");
934 m_cCDCTimeBhaBhaCDCTRG->Print("EventT0_TriggerJitter.pdf");
935 m_cCDCTimeMuMuCDCTRG->Print("EventT0_TriggerJitter.pdf");
936 m_cTOPTimeHadronsCDCTRG->Print("EventT0_TriggerJitter.pdf");
937 m_cTOPTimeBhaBhaCDCTRG->Print("EventT0_TriggerJitter.pdf");
938 m_cTOPTimeMuMuCDCTRG->Print("EventT0_TriggerJitter.pdf");
939 m_cSVDTimeHadronsCDCTRG->Print("EventT0_TriggerJitter.pdf");
940 m_cSVDTimeBhaBhaCDCTRG->Print("EventT0_TriggerJitter.pdf");
941 m_cSVDTimeMuMuCDCTRG->Print("EventT0_TriggerJitter.pdf");
942
943 m_cECLTimeHadronsTOPTRG->Print("EventT0_TriggerJitter.pdf");
944 m_cECLTimeBhaBhaTOPTRG->Print("EventT0_TriggerJitter.pdf");
945 m_cECLTimeMuMuTOPTRG->Print("EventT0_TriggerJitter.pdf");
946 m_cCDCTimeHadronsTOPTRG->Print("EventT0_TriggerJitter.pdf");
947 m_cCDCTimeBhaBhaTOPTRG->Print("EventT0_TriggerJitter.pdf");
948 m_cCDCTimeMuMuTOPTRG->Print("EventT0_TriggerJitter.pdf");
949 m_cTOPTimeHadronsTOPTRG->Print("EventT0_TriggerJitter.pdf");
950 m_cTOPTimeBhaBhaTOPTRG->Print("EventT0_TriggerJitter.pdf");
951 m_cTOPTimeMuMuTOPTRG->Print("EventT0_TriggerJitter.pdf");
952 m_cSVDTimeHadronsTOPTRG->Print("EventT0_TriggerJitter.pdf");
953 m_cSVDTimeBhaBhaTOPTRG->Print("EventT0_TriggerJitter.pdf");
954 m_cSVDTimeMuMuTOPTRG->Print("EventT0_TriggerJitter.pdf)");
955}
956
957
959{
972
985
998}
999
1000
1002{
1003 // Set the deltaT0 values to be accissble on the DQM web page for the shifters, with SVD EventT0 being the reference
1004 // As we are only interested in trends, just the raw difference is used, no (error) weighted values
1005 // However, not all values might exist, so make the algorithm fault tolerant
1006 if (m_ECLTRGHLThadronSVDT0 > -998) {
1007 if (m_ECLTRGHLThadronCDCT0 > -998) {
1008 setEpicsPV("ECLTRG_Hadron_Delta_CDCEventT0_SVDEventT0", m_ECLTRGHLThadronCDCT0 - m_ECLTRGHLThadronSVDT0);
1009 }
1010 if (m_ECLTRGHLThadronECLT0 > -998) {
1011 setEpicsPV("ECLTRG_Hadron_Delta_ECLEventT0_SVDEventT0", m_ECLTRGHLThadronECLT0 - m_ECLTRGHLThadronSVDT0);
1012 }
1013 if (m_ECLTRGHLThadronTOPT0 > -998) {
1014 setEpicsPV("ECLTRG_Hadron_Delta_TOPEventT0_SVDEventT0", m_ECLTRGHLThadronTOPT0 - m_ECLTRGHLThadronSVDT0);
1015 }
1016 }
1017}
TCanvas * m_cCDCTimeMuMuECLTRG
Canvas for CDC time ECLTRG jitter mumu.
TCanvas * m_cECLTimeHadronsECLTRG
Canvas for ECL time ECLTRG jitter hadrons.
void initialize() override final
create TCanvas and MonitoringObject
void clearOwnCanvases()
Clear the canvases owned by this module.
TCanvas * m_cTOPTimeHadronsECLTRG
Canvas for TOP time ECLTRG jitter hadrons.
TCanvas * m_cECLTimeHadronsCDCTRG
Canvas for ECL time CDCTRG jitter hadrons.
TCanvas * m_cECLTimeMuMuECLTRG
Canvas for ECL time ECLTRG jitter mumu.
TCanvas * m_cCDCTimeHadronsECLTRG
Canvas for CDC time ECLTRG jitter hadrons.
static double fDoubleGaus(double *x, double *par)
double gaussian fitting function for the jitter distribution
double m_ECLTRGHLThadronCDCT0
CDC T0 for ECLTRG jitter for HLT hadron events.
double m_ECLTRGHLThadronTOPT0
TOP T0 for ECLTRG jitter for HLT hadron events.
TCanvas * m_cCDCTimeBhaBhaECLTRG
Canvas for CDC time ECLTRG jitter bhabhas.
TCanvas * m_cSVDTimeMuMuTOPTRG
Canvas for SVD time TOPTRG jitter mumu.
double m_ECLTRGHLThadronSVDT0
SVD T0 for ECLTRG jitter for HLT hadron events.
TCanvas * m_cCDCTimeHadronsTOPTRG
Canvas for CDC time TOPTRG jitter hadrons.
TCanvas * m_cECLTimeBhaBhaECLTRG
Canvas for ECL time ECLTRG jitter bhabhas.
TCanvas * m_cCDCTimeBhaBhaCDCTRG
Canvas for CDC time CDCTRG jitter bhabhas.
std::tuple< bool, std::optional< double > > processHistogram(TH1 *h, TString tag, bool retrieveMeanT0=false)
process the EventT0 distribution fitting with two gaussians filling the MonitoringObject
std::string m_prefixCanvas
prefix to be added to canvas name when saved as pdf
void analyseECLTRGEventT0Distributions(bool retrieveDeltas=true)
Analyse the ECLTRG EventT0 distributions The only function to retrieve deltaT values ECL-SVD,...
double m_ECLTRGHLThadronECLT0
ECL T0 for ECLTRG jitter for HLT hadron events.
TCanvas * m_cCDCTimeMuMuCDCTRG
Canvas for CDC time CDCTRG jitter mumu.
MonitoringObject * m_monObj
MonitoringObject to be produced by this module.
TCanvas * m_cCDCTimeMuMuTOPTRG
Canvas for CDC time TOPTRG jitter mumu.
TCanvas * m_cCDCTimeHadronsCDCTRG
Canvas for CDC time CDCTRG jitter hadrons.
TCanvas * m_cTOPTimeHadronsTOPTRG
Canvas for TOP time TOPTRG jitter hadrons.
void analyseTOPTRGEventT0Distributions()
Analyse the TOPTRG EventT0 distributions.
void event() override final
fit the histograms in the event
TCanvas * m_cECLTimeBhaBhaTOPTRG
Canvas for ECL time TOPTRG jitter bhabhas.
TCanvas * m_cTOPTimeBhaBhaECLTRG
Canvas for TOP time ECLTRG jitter bhabhas.
TCanvas * m_cSVDTimeHadronsTOPTRG
Canvas for SVD time TOPTRG jitter hadrons.
TCanvas * m_cTOPTimeBhaBhaTOPTRG
Canvas for TOP time TOPTRG jitter bhabhas.
TCanvas * m_cSVDTimeBhaBhaECLTRG
Canvas for SVD time ECLTRG jitter bhabhas.
TCanvas * m_cTOPTimeBhaBhaCDCTRG
Canvas for TOP time CDCTRG jitter bhabhas.
uint m_nEntriesMin
minimum number of entries to process the histogram
TCanvas * m_cECLTimeMuMuCDCTRG
Canvas for ECL time CDCTRG jitter mumu.
TCanvas * m_cSVDTimeMuMuCDCTRG
Canvas for SVD time CDCTRG jitter mumu.
TCanvas * m_cTOPTimeMuMuTOPTRG
Canvas for TOP time TOPTRG jitter mumu.
TCanvas * m_cECLTimeBhaBhaCDCTRG
Canvas for ECL time CDCTRG jitter bhabhas.
void endRun() override final
final fit of T0 distributions
TCanvas * m_cTOPTimeHadronsCDCTRG
Canvas for TOP time CDCTRG jitter hadrons.
TCanvas * m_cECLTimeHadronsTOPTRG
Canvas for ECL time TOPTRG jitter hadrons.
TCanvas * m_cCDCTimeBhaBhaTOPTRG
Canvas for CDC time TOPTRG jitter bhabhas.
TCanvas * m_cSVDTimeHadronsECLTRG
Canvas for SVD time ECLTRG jitter hadrons.
TCanvas * m_cECLTimeMuMuTOPTRG
Canvas for ECL time TOPTRG jitter mumu.
TCanvas * m_cTOPTimeMuMuCDCTRG
Canvas for TOP time CDCTRG jitter mumu.
TCanvas * m_cSVDTimeMuMuECLTRG
Canvas for SVD time ECLTRG jitter mumu.
TCanvas * m_cSVDTimeHadronsCDCTRG
Canvas for SVD time CDCTRG jitter hadrons.
TCanvas * m_cTOPTimeMuMuECLTRG
Canvas for TOP time ECLTRG jitter mumu.
TCanvas * m_cSVDTimeBhaBhaCDCTRG
Canvas for SVD time CDCTRG jitter bhabhas.
TCanvas * m_cSVDTimeBhaBhaTOPTRG
Canvas for SVD time TOPTRG jitter bhabhas.
void analyseCDCTRGEventT0Distributions()
Analyse the CDCTRG EventT0 distributions.
int registerEpicsPV(const std::string &pvname, const std::string &keyname="")
EPICS related Functions.
static MonitoringObject * getMonitoringObject(const std::string &name)
Get MonitoringObject with given name (new object is created if non-existing)
DQMHistAnalysisModule()
Constructor / Destructor.
void setEpicsPV(const std::string &keyname, double value)
Write value to a EPICS PV.
static TH1 * findHist(const std::string &dirname, const std::string &histname="", bool onlyIfUpdated=false)
Find histogram.
void setDescription(const std::string &description)
Sets the description of the module.
Definition Module.cc:214
void addParam(const std::string &name, T &paramVariable, const std::string &description, const T &defaultValue)
Adds a new parameter to the module.
Definition Module.h:559
#define REG_MODULE(moduleName)
Register the given module (without 'Module' suffix) with the framework.
Definition Module.h:649
Abstract base class for different kinds of events.