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
43
45
47{
48 gROOT->cd();
49
51
52 m_monObj = getMonitoringObject("eventT0");
53
54 registerEpicsPV("EventT0:ECLTRG_Hadron_Delta_CDCEventT0_SVDEventT0", "ECLTRG_Hadron_Delta_CDCEventT0_SVDEventT0");
55 registerEpicsPV("EventT0:ECLTRG_Hadron_Delta_ECLEventT0_SVDEventT0", "ECLTRG_Hadron_Delta_ECLEventT0_SVDEventT0");
56 registerEpicsPV("EventT0:ECLTRG_Hadron_Delta_TOPEventT0_SVDEventT0", "ECLTRG_Hadron_Delta_TOPEventT0_SVDEventT0");
57}
58
59
69
83
85{
86 // final calculation of the mean values for MiraBelle
90
91 if (m_printCanvas) {
93 }
94}
95
100
102{
103 double N = par[0];
104 double frac = par[1];
105 double mean = par[2];
106 double sigma = par[3];
107 double mean2 = par[4];
108 double sigma2 = par[5];
109
110 return N * frac * TMath::Gaus(x[0], mean, sigma) + N * (1 - frac) * TMath::Gaus(x[0], mean2, sigma2);
111}
112
113std::tuple<bool, std::optional<double>> DQMHistAnalysisEventT0TriggerJitterModule::processHistogram(TH1* h, TString tag,
114 bool retrieveMeanT0)
115{
116
117 if (h == nullptr) {
118 B2DEBUG(20, "h == nullptr");
119 m_monObj->setVariable(Form("fit_%s", tag.Data()), 0);
120 return {false, {}};
121 }
122
123 // The default value for the EventT0 value is -1000, but bins start at -100, so we might mostly fill the underflow bin if
124 // EventT0 for a detector is not present. And also the nominal EventT0 might be too big or too small. Only use the content
125 // of the actually useful bins to decide whether or not to fit the histogram.
126 auto nValidEntries = h->GetEntries() - h->GetBinContent(0) - h->GetBinContent(h->GetNbinsX() + 1);
127 if (static_cast<uint>(nValidEntries) < m_nEntriesMin) {
128 B2DEBUG(20, "not enough entries");
129 m_monObj->setVariable(Form("fit_%s", tag.Data()), 0);
130 return {false, {}};
131 }
132
133
134 //scale the histogram only with content of valid bins, ignore over and underflow bins
135 h->Scale(1. / nValidEntries);
136 h->GetXaxis()->SetRangeUser(-50, 50);
137
138 //define the fitting function
140 fitf.SetParNames("N", "f_{1}", "#mu_{1}", "#sigma_{1}", "#mu_{2}", "#sigma_{2}");
141 fitf.SetParameters(0.1, 0.8, 0, 5, 0, 15);
142 fitf.SetParLimits(1, 0, 1); //fraction
143 fitf.SetParLimits(3, 0, 100); //sigma1
144 fitf.SetParLimits(5, 0, 100); //sigma2
145
146 if (h->Fit(&fitf, "SR+") != 0) {
147 B2DEBUG(20, "failed fit");
148 m_monObj->setVariable(Form("fit_%s", tag.Data()), 0);
149 return {false, {}};
150 }
151
152 Double_t par[6];
153 fitf.GetParameters(&par[0]);
154 Double_t parErr[6];
155 for (int i = 0; i < 6; i++)
156 parErr[i] = fitf.GetParError(i) ;
157
158
159 //define gaussian components
160 TF1 gauss1("gauss1", "gaus", -100, 100);
161 TF1 gauss2("gauss2", "gaus", -100, 100);
162
163 // Sometimes the first Gaussian isn't the main one, messing up the DQM plots
164 // Thus, chose the Gaussian with the larger relative contribution to be the main one
165 const double mainFrac = par[1] > 0.5 ? par[1] : (1 - par[1]);
166 const double mainMean = par[1] > 0.5 ? par[2] : par[4];
167 const double mainSigma = par[1] > 0.5 ? par[3] : par[5];
168 const double miniMean = par[1] > 0.5 ? par[4] : par[2];
169 const double miniSigma = par[1] > 0.5 ? par[5] : par[3];
170 const double mainMeanErr = par[1] > 0.5 ? parErr[2] : parErr[4];
171 const double mainSigmaErr = par[1] > 0.5 ? parErr[3] : parErr[5];
172 const double miniMeanErr = par[1] > 0.5 ? parErr[4] : parErr[2];
173 const double miniSigmaErr = par[1] > 0.5 ? parErr[5] : parErr[3];
174
175 gauss1.SetLineColor(kBlue);
176 gauss1.SetLineStyle(kDashed);
177 gauss1.SetParameters(par[0]*mainFrac, mainMean, mainSigma);
178
179 gauss2.SetLineColor(kRed);
180 gauss2.SetLineStyle(kDashed);
181 gauss2.SetParameters(par[0] * (1 - mainFrac), miniMean, miniSigma);
182
183 m_monObj->setVariable(Form("fit_%s", tag.Data()), 1);
184 m_monObj->setVariable(Form("N_%s", tag.Data()), nValidEntries, TMath::Sqrt(nValidEntries));
185 m_monObj->setVariable(Form("f_%s", tag.Data()), mainFrac, parErr[1]);
186 m_monObj->setVariable(Form("mean1_%s", tag.Data()), mainMean, mainMeanErr);
187 m_monObj->setVariable(Form("sigma1_%s", tag.Data()), mainSigma, mainSigmaErr);
188 m_monObj->setVariable(Form("mean2_%s", tag.Data()), miniMean, miniMeanErr);
189 m_monObj->setVariable(Form("sigma2_%s", tag.Data()), miniSigma, miniSigmaErr);
190
191 //SETUP gSTYLE - all plots
192 gStyle->SetOptFit(1111);
193
194 gPad->Clear();// better clear before to get rid of all fit lines drawn before
195 h->Draw();
196 fitf.DrawCopy("same");// Do not use DrawClone, it result in meory leak (even so unclear why)
197 gauss1.DrawCopy("same");
198 gauss2.DrawCopy("same");
199
200 if (retrieveMeanT0) {
201 // return mean of the core Gaussian
202 return {true, mainMean};
203 }
204 return {true, {}};
205
206
207}
208
210{
211
212 const bool retrieveMeanT0 = retrieveDeltas;
213 bool processingSuccessful = false;
214 std::optional<double> currentT0;
215
216 // --- ECL EventT0 plots for ECLTRG ---
217
218 // find ECL EventT0 Hadrons ECLTRG histogram and process it
219 TH1* h = findHist("EventT0/m_histEventT0_ECL_hadron_L1_ECLTRG");
220 TString tag = "hadronECLTRG_ECLT0";
222 std::tie(processingSuccessful, currentT0) = processHistogram(h, tag, retrieveMeanT0);
223 if (processingSuccessful) {
224 m_cECLTimeHadronsECLTRG->SetFillColor(0);
225 m_cECLTimeHadronsECLTRG->Modified();
226 m_cECLTimeHadronsECLTRG->Update();
227 if (*currentT0) {
228 m_ECLTRGHLThadronECLT0 = *currentT0;
229 }
230 } else {
231 B2DEBUG(29, Form("Histogram ECL EventT0 for %s from EventT0 DQM not processed!", tag.Data()));
232 if (h) h->Draw();
233 m_cECLTimeHadronsECLTRG->SetFillColor(kGray);
235 }
236
237 // find ECL EventT0 Bhabhas ECLTRG histogram and process it
238 h = findHist("EventT0/m_histEventT0_ECL_bhabha_L1_ECLTRG");
239 tag = "bhabhaECLTRG_ECLT0";
241 if (std::get<0>(processHistogram(h, tag))) {
242 m_cECLTimeBhaBhaECLTRG->SetFillColor(0);
243 m_cECLTimeBhaBhaECLTRG->Modified();
244 m_cECLTimeBhaBhaECLTRG->Update();
245 } else {
246 B2DEBUG(29, Form("Histogram ECL EventT0 for %s from EventT0 DQM not processed!", tag.Data()));
247 if (h) h->Draw();
248 m_cECLTimeBhaBhaECLTRG->SetFillColor(kGray);
250 }
251
252 // find ECL EventT0 Mumus ECLTRG histogram and process it
253 h = findHist("EventT0/m_histEventT0_ECL_mumu_L1_ECLTRG");
254 tag = "mumuECLTRG_ECLT0";
256 if (std::get<0>(processHistogram(h, tag))) {
257 m_cECLTimeMuMuECLTRG->SetFillColor(0);
258 m_cECLTimeMuMuECLTRG->Modified();
259 m_cECLTimeMuMuECLTRG->Update();
260 } else {
261 B2DEBUG(29, Form("Histogram ECL EventT0 for %s from EventT0 DQM not processed!", tag.Data()));
262 if (h) h->Draw();
263 m_cECLTimeMuMuECLTRG->SetFillColor(kGray);
264 m_cECLTimeMuMuECLTRG->Draw();
265 }
266
267
268 // --- CDC EventT0 plots for ECLTRG ---
269
270 // find CDC EventT0 Hadrons ECLTRG histogram and process it
271 h = findHist("EventT0/m_histEventT0_CDC_hadron_L1_ECLTRG");
272 tag = "hadronECLTRG_CDCT0";
274 std::tie(processingSuccessful, currentT0) = processHistogram(h, tag, retrieveMeanT0);
275 if (processingSuccessful) {
276 m_cCDCTimeHadronsECLTRG->SetFillColor(0);
277 m_cCDCTimeHadronsECLTRG->Modified();
278 m_cCDCTimeHadronsECLTRG->Update();
279 if (*currentT0) {
280 m_ECLTRGHLThadronCDCT0 = *currentT0;
281 }
282 } else {
283 B2DEBUG(29, Form("Histogram CDC EventT0 for %s from EventT0 DQM not processed!", tag.Data()));
284 if (h) h->Draw();
285 m_cCDCTimeHadronsECLTRG->SetFillColor(kGray);
287 }
288
289 // find CDC EventT0 Bhabhas ECLTRG histogram and process it
290 h = findHist("EventT0/m_histEventT0_CDC_bhabha_L1_ECLTRG");
291 tag = "bhabhaECLTRG_CDCT0";
293 if (std::get<0>(processHistogram(h, tag))) {
294 m_cCDCTimeBhaBhaECLTRG->SetFillColor(0);
295 m_cCDCTimeBhaBhaECLTRG->Modified();
296 m_cCDCTimeBhaBhaECLTRG->Update();
297 } else {
298 B2DEBUG(29, Form("Histogram CDC EventT0 for %s from EventT0 DQM not processed!", tag.Data()));
299 if (h) h->Draw();
300 m_cCDCTimeBhaBhaECLTRG->SetFillColor(kGray);
302 }
303
304 // find CDC EventT0 Mumus ECLTRG histogram and process it
305 h = findHist("EventT0/m_histEventT0_CDC_mumu_L1_ECLTRG");
306 tag = "mumuECLTRG_CDCT0";
308 if (std::get<0>(processHistogram(h, tag))) {
309 m_cCDCTimeMuMuECLTRG->SetFillColor(0);
310 m_cCDCTimeMuMuECLTRG->Modified();
311 m_cCDCTimeMuMuECLTRG->Update();
312 } else {
313 B2DEBUG(29, Form("Histogram CDC EventT0 for %s from EventT0 DQM not processed!", tag.Data()));
314 if (h) h->Draw();
315 m_cCDCTimeMuMuECLTRG->SetFillColor(kGray);
316 m_cCDCTimeMuMuECLTRG->Draw();
317 }
318
319
320 // --- TOP EventT0 plots for ECLTRG ---
321
322 // find TOP EventT0 Hadrons ECLTRG histogram and process it
323 h = findHist("EventT0/m_histEventT0_TOP_hadron_L1_ECLTRG");
324 tag = "hadronECLTRG_TOPT0";
326 std::tie(processingSuccessful, currentT0) = processHistogram(h, tag, retrieveMeanT0);
327 if (processingSuccessful) {
328 m_cTOPTimeHadronsECLTRG->SetFillColor(0);
329 m_cTOPTimeHadronsECLTRG->Modified();
330 m_cTOPTimeHadronsECLTRG->Update();
331 if (*currentT0) {
332 m_ECLTRGHLThadronTOPT0 = *currentT0;
333 }
334 } else {
335 B2DEBUG(29, Form("Histogram TOP EventT0 for %s from EventT0 DQM not processed!", tag.Data()));
336 if (h) h->Draw();
337 m_cTOPTimeHadronsECLTRG->SetFillColor(kGray);
339 }
340
341 // find TOP EventT0 Bhabhas ECLTRG histogram and process it
342 h = findHist("EventT0/m_histEventT0_TOP_bhabha_L1_ECLTRG");
343 tag = "bhabhaECLTRG_TOPT0";
345 if (std::get<0>(processHistogram(h, tag))) {
346 m_cTOPTimeBhaBhaECLTRG->SetFillColor(0);
347 m_cTOPTimeBhaBhaECLTRG->Modified();
348 m_cTOPTimeBhaBhaECLTRG->Update();
349 } else {
350 B2DEBUG(29, Form("Histogram TOP EventT0 for %s from EventT0 DQM not processed!", tag.Data()));
351 if (h) h->Draw();
352 m_cTOPTimeBhaBhaECLTRG->SetFillColor(kGray);
354 }
355
356 // find TOP EventT0 Mumus ECLTRG histogram and process it
357 h = findHist("EventT0/m_histEventT0_TOP_mumu_L1_ECLTRG");
358 tag = "mumuECLTRG_TOPT0";
360 if (std::get<0>(processHistogram(h, tag))) {
361 m_cTOPTimeMuMuECLTRG->SetFillColor(0);
362 m_cTOPTimeMuMuECLTRG->Modified();
363 m_cTOPTimeMuMuECLTRG->Update();
364 } else {
365 B2DEBUG(29, Form("Histogram TOP EventT0 for %s from EventT0 DQM not processed!", tag.Data()));
366 if (h) h->Draw();
367 m_cTOPTimeMuMuECLTRG->SetFillColor(kGray);
368 m_cTOPTimeMuMuECLTRG->Draw();
369 }
370
371
372 // --- SVD EventT0 plots for ECLTRG ---
373
374 // find SVD EventT0 Hadrons ECLTRG histogram and process it
375 h = findHist("EventT0/m_histEventT0_SVD_hadron_L1_ECLTRG");
376 tag = "hadronECLTRG_SVDT0";
378 std::tie(processingSuccessful, currentT0) = processHistogram(h, tag, retrieveMeanT0);
379 if (processingSuccessful) {
380 m_cSVDTimeHadronsECLTRG->SetFillColor(0);
381 m_cSVDTimeHadronsECLTRG->Modified();
382 m_cSVDTimeHadronsECLTRG->Update();
383 if (*currentT0) {
384 m_ECLTRGHLThadronSVDT0 = *currentT0;
385 }
386 } else {
387 B2DEBUG(29, Form("Histogram SVD EventT0 for %s from EventT0 DQM not processed!", tag.Data()));
388 if (h) h->Draw();
389 m_cSVDTimeHadronsECLTRG->SetFillColor(kGray);
391 }
392
393 // find SVD EventT0 Bhabhas ECLTRG histogram and process it
394 h = findHist("EventT0/m_histEventT0_SVD_bhabha_L1_ECLTRG");
395 tag = "bhabhaECLTRG_SVDT0";
397 if (std::get<0>(processHistogram(h, tag))) {
398 m_cSVDTimeBhaBhaECLTRG->SetFillColor(0);
399 m_cSVDTimeBhaBhaECLTRG->Modified();
400 m_cSVDTimeBhaBhaECLTRG->Update();
401 } else {
402 B2DEBUG(29, Form("Histogram SVD EventT0 for %s from EventT0 DQM not processed!", tag.Data()));
403 if (h) h->Draw();
404 m_cSVDTimeBhaBhaECLTRG->SetFillColor(kGray);
406 }
407
408 // find SVD EventT0 Mumus ECLTRG histogram and process it
409 h = findHist("EventT0/m_histEventT0_SVD_mumu_L1_ECLTRG");
410 tag = "mumuECLTRG_SVDT0";
412 if (std::get<0>(processHistogram(h, tag))) {
413 m_cSVDTimeMuMuECLTRG->SetFillColor(0);
414 m_cSVDTimeMuMuECLTRG->Modified();
415 m_cSVDTimeMuMuECLTRG->Update();
416 } else {
417 B2DEBUG(29, Form("Histogram SVD EventT0 for %s from EventT0 DQM not processed!", tag.Data()));
418 if (h) h->Draw();
419 m_cSVDTimeMuMuECLTRG->SetFillColor(kGray);
420 m_cSVDTimeMuMuECLTRG->Draw();
421 }
422
423
424}
425
427{
428 // --- ECL EventT0 plots for CDCTRG ---
429
430 // find ECL EventT0 Hadrons CDCTRG histogram and process it
431 TH1* h = findHist("EventT0/m_histEventT0_ECL_hadron_L1_CDCTRG");
432 TString tag = "hadronCDCTRG_ECLT0";
434 if (std::get<0>(processHistogram(h, tag))) {
435 m_cECLTimeHadronsCDCTRG->SetFillColor(0);
436 m_cECLTimeHadronsCDCTRG->Modified();
437 m_cECLTimeHadronsCDCTRG->Update();
439 } else {
440 B2DEBUG(29, Form("Histogram ECL EventT0 for %s from EventT0 DQM not processed!", tag.Data()));
441 if (h) h->Draw();
442 m_cECLTimeHadronsCDCTRG->SetFillColor(kGray);
444 }
445
446 // find ECL EventT0 Bhabhas CDCTRG histogram and process it
447 h = findHist("EventT0/m_histEventT0_ECL_bhabha_L1_CDCTRG");
448 tag = "bhabhaCDCTRG_ECLT0";
450 if (std::get<0>(processHistogram(h, tag))) {
451 m_cECLTimeBhaBhaCDCTRG->SetFillColor(0);
452 m_cECLTimeBhaBhaCDCTRG->Modified();
453 m_cECLTimeBhaBhaCDCTRG->Update();
455 } else {
456 B2DEBUG(29, Form("Histogram ECL EventT0 for %s from EventT0 DQM not processed!", tag.Data()));
457 if (h) h->Draw();
458 m_cECLTimeBhaBhaCDCTRG->SetFillColor(kGray);
460 }
461
462 // find ECL EventT0 Mumus CDCTRG histogram and process it
463 h = findHist("EventT0/m_histEventT0_ECL_mumu_L1_CDCTRG");
464 tag = "mumuCDCTRG_ECLT0";
466 if (std::get<0>(processHistogram(h, tag))) {
467 m_cECLTimeMuMuCDCTRG->SetFillColor(0);
468 m_cECLTimeMuMuCDCTRG->Modified();
469 m_cECLTimeMuMuCDCTRG->Update();
470 } else {
471 B2DEBUG(29, Form("Histogram ECL EventT0 for %s from EventT0 DQM not processed!", tag.Data()));
472 if (h) h->Draw();
473 m_cECLTimeMuMuCDCTRG->SetFillColor(kGray);
474 m_cECLTimeMuMuCDCTRG->Draw();
475 }
476
477
478 // --- CDC EventT0 plots for CDCTRG ---
479
480 // find CDC EventT0 Hadrons CDCTRG histogram and process it
481 h = findHist("EventT0/m_histEventT0_CDC_hadron_L1_CDCTRG");
482 tag = "hadronCDCTRG_CDCT0";
484 if (std::get<0>(processHistogram(h, tag))) {
485 m_cCDCTimeHadronsCDCTRG->SetFillColor(0);
486 m_cCDCTimeHadronsCDCTRG->Modified();
487 m_cCDCTimeHadronsCDCTRG->Update();
489 } else {
490 B2DEBUG(29, Form("Histogram CDC EventT0 for %s from EventT0 DQM not processed!", tag.Data()));
491 if (h) h->Draw();
492 m_cCDCTimeHadronsCDCTRG->SetFillColor(kGray);
494 }
495
496 // find CDC EventT0 Bhabhas CDCTRG histogram and process it
497 h = findHist("EventT0/m_histEventT0_CDC_bhabha_L1_CDCTRG");
498 tag = "bhabhaCDCTRG_CDCT0";
500 if (std::get<0>(processHistogram(h, tag))) {
501 m_cCDCTimeBhaBhaCDCTRG->SetFillColor(0);
502 m_cCDCTimeBhaBhaCDCTRG->Modified();
503 m_cCDCTimeBhaBhaCDCTRG->Update();
505 } else {
506 B2DEBUG(29, Form("Histogram CDC EventT0 for %s from EventT0 DQM not processed!", tag.Data()));
507 if (h) h->Draw();
508 m_cCDCTimeBhaBhaCDCTRG->SetFillColor(kGray);
510 }
511
512 // find CDC EventT0 Mumus CDCTRG histogram and process it
513 h = findHist("EventT0/m_histEventT0_CDC_mumu_L1_CDCTRG");
514 tag = "mumuCDCTRG_CDCT0";
516 if (std::get<0>(processHistogram(h, tag))) {
517 m_cCDCTimeMuMuCDCTRG->SetFillColor(0);
518 m_cCDCTimeMuMuCDCTRG->Modified();
519 m_cCDCTimeMuMuCDCTRG->Update();
520 } else {
521 B2DEBUG(29, Form("Histogram CDC EventT0 for %s from EventT0 DQM not processed!", tag.Data()));
522 if (h) h->Draw();
523 m_cCDCTimeMuMuCDCTRG->SetFillColor(kGray);
524 m_cCDCTimeMuMuCDCTRG->Draw();
525 }
526
527
528 // --- TOP EventT0 plots for CDCTRG ---
529
530 // find TOP EventT0 Hadrons CDCTRG histogram and process it
531 h = findHist("EventT0/m_histEventT0_TOP_hadron_L1_CDCTRG");
532 tag = "hadronCDCTRG_TOPT0";
534 if (std::get<0>(processHistogram(h, tag))) {
535 m_cTOPTimeHadronsCDCTRG->SetFillColor(0);
536 m_cTOPTimeHadronsCDCTRG->Modified();
537 m_cTOPTimeHadronsCDCTRG->Update();
539 } else {
540 B2DEBUG(29, Form("Histogram TOP EventT0 for %s from EventT0 DQM not processed!", tag.Data()));
541 if (h) h->Draw();
542 m_cTOPTimeHadronsCDCTRG->SetFillColor(kGray);
544 }
545
546 // find TOP EventT0 Bhabhas CDCTRG histogram and process it
547 h = findHist("EventT0/m_histEventT0_TOP_bhabha_L1_CDCTRG");
548 tag = "bhabhaCDCTRG_TOPT0";
550 if (std::get<0>(processHistogram(h, tag))) {
551 m_cTOPTimeBhaBhaCDCTRG->SetFillColor(0);
552 m_cTOPTimeBhaBhaCDCTRG->Modified();
553 m_cTOPTimeBhaBhaCDCTRG->Update();
555 } else {
556 B2DEBUG(29, Form("Histogram TOP EventT0 for %s from EventT0 DQM not processed!", tag.Data()));
557 if (h) h->Draw();
558 m_cTOPTimeBhaBhaCDCTRG->SetFillColor(kGray);
560 }
561
562 // find TOP EventT0 Mumus CDCTRG histogram and process it
563 h = findHist("EventT0/m_histEventT0_TOP_mumu_L1_CDCTRG");
564 tag = "mumuCDCTRG_TOPT0";
566 if (std::get<0>(processHistogram(h, tag))) {
567 m_cTOPTimeMuMuCDCTRG->SetFillColor(0);
568 m_cTOPTimeMuMuCDCTRG->Modified();
569 m_cTOPTimeMuMuCDCTRG->Update();
570 } else {
571 B2DEBUG(29, Form("Histogram TOP EventT0 for %s from EventT0 DQM not processed!", tag.Data()));
572 if (h) h->Draw();
573 m_cTOPTimeMuMuCDCTRG->SetFillColor(kGray);
574 m_cTOPTimeMuMuCDCTRG->Draw();
575 }
576
577
578 // --- SVD EventT0 plots for CDCTRG ---
579
580 // find SVD EventT0 Hadrons CDCTRG histogram and process it
581 h = findHist("EventT0/m_histEventT0_SVD_hadron_L1_CDCTRG");
582 tag = "hadronCDCTRG_SVDT0";
584 if (std::get<0>(processHistogram(h, tag))) {
585 m_cSVDTimeHadronsCDCTRG->SetFillColor(0);
586 m_cSVDTimeHadronsCDCTRG->Modified();
587 m_cSVDTimeHadronsCDCTRG->Update();
589 } else {
590 B2DEBUG(29, Form("Histogram SVD EventT0 for %s from EventT0 DQM not processed!", tag.Data()));
591 if (h) h->Draw();
592 m_cSVDTimeHadronsCDCTRG->SetFillColor(kGray);
594 }
595
596 // find SVD EventT0 Bhabhas CDCTRG histogram and process it
597 h = findHist("EventT0/m_histEventT0_SVD_bhabha_L1_CDCTRG");
598 tag = "bhabhaCDCTRG_SVDT0";
600 if (std::get<0>(processHistogram(h, tag))) {
601 m_cSVDTimeBhaBhaCDCTRG->SetFillColor(0);
602 m_cSVDTimeBhaBhaCDCTRG->Modified();
603 m_cSVDTimeBhaBhaCDCTRG->Update();
605 } else {
606 B2DEBUG(29, Form("Histogram SVD EventT0 for %s from EventT0 DQM not processed!", tag.Data()));
607 if (h) h->Draw();
608 m_cSVDTimeBhaBhaCDCTRG->SetFillColor(kGray);
610 }
611
612 // find SVD EventT0 Mumus CDCTRG histogram and process it
613 h = findHist("EventT0/m_histEventT0_SVD_mumu_L1_CDCTRG");
614 tag = "mumuCDCTRG_SVDT0";
616 if (std::get<0>(processHistogram(h, tag))) {
617 m_cSVDTimeMuMuCDCTRG->SetFillColor(0);
618 m_cSVDTimeMuMuCDCTRG->Modified();
619 m_cSVDTimeMuMuCDCTRG->Update();
620 } else {
621 B2DEBUG(29, Form("Histogram SVD EventT0 for %s from EventT0 DQM not processed!", tag.Data()));
622 if (h) h->Draw();
623 m_cSVDTimeMuMuCDCTRG->SetFillColor(kGray);
624 m_cSVDTimeMuMuCDCTRG->Draw();
625 }
626}
627
629{
630 // --- ECL EventT0 plots for TOPTRG ---
631
632 // find ECL EventT0 Hadrons TOPTRG histogram and process it
633 TH1* h = findHist("EventT0/m_histEventT0_ECL_hadron_L1_TOPTRG");
634 TString tag = "hadronTOPTRG_ECLT0";
636 if (std::get<0>(processHistogram(h, tag))) {
637 m_cECLTimeHadronsTOPTRG->SetFillColor(0);
638 m_cECLTimeHadronsTOPTRG->Modified();
639 m_cECLTimeHadronsTOPTRG->Update();
641 } else {
642 B2DEBUG(29, Form("Histogram ECL EventT0 for %s from EventT0 DQM not processed!", tag.Data()));
643 if (h) h->Draw();
644 m_cECLTimeHadronsTOPTRG->SetFillColor(kGray);
646 }
647
648 // find ECL EventT0 Bhabhas TOPTRG histogram and process it
649 h = findHist("EventT0/m_histEventT0_ECL_bhabha_L1_TOPTRG");
650 tag = "bhabhaTOPTRG_ECLT0";
652 if (std::get<0>(processHistogram(h, tag))) {
653 m_cECLTimeBhaBhaTOPTRG->SetFillColor(0);
654 m_cECLTimeBhaBhaTOPTRG->Modified();
655 m_cECLTimeBhaBhaTOPTRG->Update();
657 } else {
658 B2DEBUG(29, Form("Histogram ECL EventT0 for %s from EventT0 DQM not processed!", tag.Data()));
659 if (h) h->Draw();
660 m_cECLTimeBhaBhaTOPTRG->SetFillColor(kGray);
662 }
663
664 // find ECL EventT0 Mumus TOPTRG histogram and process it
665 h = findHist("EventT0/m_histEventT0_ECL_mumu_L1_TOPTRG");
666 tag = "mumuTOPTRG_ECLT0";
668 if (std::get<0>(processHistogram(h, tag))) {
669 m_cECLTimeMuMuTOPTRG->SetFillColor(0);
670 m_cECLTimeMuMuTOPTRG->Modified();
671 m_cECLTimeMuMuTOPTRG->Update();
672 } else {
673 B2DEBUG(29, Form("Histogram ECL EventT0 for %s from EventT0 DQM not processed!", tag.Data()));
674 if (h) h->Draw();
675 m_cECLTimeMuMuTOPTRG->SetFillColor(kGray);
676 m_cECLTimeMuMuTOPTRG->Draw();
677 }
678
679
680 // --- CDC EventT0 plots for TOPTRG ---
681
682 // find CDC EventT0 Hadrons TOPTRG histogram and process it
683 h = findHist("EventT0/m_histEventT0_CDC_hadron_L1_TOPTRG");
684 tag = "hadronTOPTRG_CDCT0";
686 if (std::get<0>(processHistogram(h, tag))) {
687 m_cCDCTimeHadronsTOPTRG->SetFillColor(0);
688 m_cCDCTimeHadronsTOPTRG->Modified();
689 m_cCDCTimeHadronsTOPTRG->Update();
691 } else {
692 B2DEBUG(29, Form("Histogram CDC EventT0 for %s from EventT0 DQM not processed!", tag.Data()));
693 if (h) h->Draw();
694 m_cCDCTimeHadronsTOPTRG->SetFillColor(kGray);
696 }
697
698 // find CDC EventT0 Bhabhas TOPTRG histogram and process it
699 h = findHist("EventT0/m_histEventT0_CDC_bhabha_L1_TOPTRG");
700 tag = "bhabhaTOPTRG_CDCT0";
702 if (std::get<0>(processHistogram(h, tag))) {
703 m_cCDCTimeBhaBhaTOPTRG->SetFillColor(0);
704 m_cCDCTimeBhaBhaTOPTRG->Modified();
705 m_cCDCTimeBhaBhaTOPTRG->Update();
707 } else {
708 B2DEBUG(29, Form("Histogram CDC EventT0 for %s from EventT0 DQM not processed!", tag.Data()));
709 if (h) h->Draw();
710 m_cCDCTimeBhaBhaTOPTRG->SetFillColor(kGray);
712 }
713
714 // find CDC EventT0 Mumus TOPTRG histogram and process it
715 h = findHist("EventT0/m_histEventT0_CDC_mumu_L1_TOPTRG");
716 tag = "mumuTOPTRG_CDCT0";
718 if (std::get<0>(processHistogram(h, tag))) {
719 m_cCDCTimeMuMuTOPTRG->SetFillColor(0);
720 m_cCDCTimeMuMuTOPTRG->Modified();
721 m_cCDCTimeMuMuTOPTRG->Update();
722 } else {
723 B2DEBUG(29, Form("Histogram CDC EventT0 for %s from EventT0 DQM not processed!", tag.Data()));
724 if (h) h->Draw();
725 m_cCDCTimeMuMuTOPTRG->SetFillColor(kGray);
726 m_cCDCTimeMuMuTOPTRG->Draw();
727 }
728
729
730 // --- TOP EventT0 plots for TOPTRG ---
731
732 // find TOP EventT0 Hadrons TOPTRG histogram and process it
733 h = findHist("EventT0/m_histEventT0_TOP_hadron_L1_TOPTRG");
734 tag = "hadronTOPTRG_TOPT0";
736 if (std::get<0>(processHistogram(h, tag))) {
737 m_cTOPTimeHadronsTOPTRG->SetFillColor(0);
738 m_cTOPTimeHadronsTOPTRG->Modified();
739 m_cTOPTimeHadronsTOPTRG->Update();
741 } else {
742 B2DEBUG(29, Form("Histogram TOP EventT0 for %s from EventT0 DQM not processed!", tag.Data()));
743 if (h) h->Draw();
744 m_cTOPTimeHadronsTOPTRG->SetFillColor(kGray);
746 }
747
748 // find TOP EventT0 Bhabhas TOPTRG histogram and process it
749 h = findHist("EventT0/m_histEventT0_TOP_bhabha_L1_TOPTRG");
750 tag = "bhabhaTOPTRG_TOPT0";
752 if (std::get<0>(processHistogram(h, tag))) {
753 m_cTOPTimeBhaBhaTOPTRG->SetFillColor(0);
754 m_cTOPTimeBhaBhaTOPTRG->Modified();
755 m_cTOPTimeBhaBhaTOPTRG->Update();
757 } else {
758 B2DEBUG(29, Form("Histogram TOP EventT0 for %s from EventT0 DQM not processed!", tag.Data()));
759 if (h) h->Draw();
760 m_cTOPTimeBhaBhaTOPTRG->SetFillColor(kGray);
762 }
763
764 // find TOP EventT0 Mumus TOPTRG histogram and process it
765 h = findHist("EventT0/m_histEventT0_TOP_mumu_L1_TOPTRG");
766 tag = "mumuTOPTRG_TOPT0";
768 if (std::get<0>(processHistogram(h, tag))) {
769 m_cTOPTimeMuMuTOPTRG->SetFillColor(0);
770 m_cTOPTimeMuMuTOPTRG->Modified();
771 m_cTOPTimeMuMuTOPTRG->Update();
772 } else {
773 B2DEBUG(29, Form("Histogram TOP EventT0 for %s from EventT0 DQM not processed!", tag.Data()));
774 if (h) h->Draw();
775 m_cTOPTimeMuMuTOPTRG->SetFillColor(kGray);
776 m_cTOPTimeMuMuTOPTRG->Draw();
777 }
778
779
780 // --- SVD EventT0 plots for TOPTRG ---
781
782 // find SVD EventT0 Hadrons TOPTRG histogram and process it
783 h = findHist("EventT0/m_histEventT0_SVD_hadron_L1_TOPTRG");
784 tag = "hadronTOPTRG_SVDT0";
786 if (std::get<0>(processHistogram(h, tag))) {
787 m_cSVDTimeHadronsTOPTRG->SetFillColor(0);
788 m_cSVDTimeHadronsTOPTRG->Modified();
789 m_cSVDTimeHadronsTOPTRG->Update();
791 } else {
792 B2DEBUG(29, Form("Histogram SVD EventT0 for %s from EventT0 DQM not processed!", tag.Data()));
793 if (h) h->Draw();
794 m_cSVDTimeHadronsTOPTRG->SetFillColor(kGray);
796 }
797
798 // find SVD EventT0 Bhabhas TOPTRG histogram and process it
799 h = findHist("EventT0/m_histEventT0_SVD_bhabha_L1_TOPTRG");
800 tag = "bhabhaTOPTRG_SVDT0";
802 if (std::get<0>(processHistogram(h, tag))) {
803 m_cSVDTimeBhaBhaTOPTRG->SetFillColor(0);
804 m_cSVDTimeBhaBhaTOPTRG->Modified();
805 m_cSVDTimeBhaBhaTOPTRG->Update();
807 } else {
808 B2DEBUG(29, Form("Histogram SVD EventT0 for %s from EventT0 DQM not processed!", tag.Data()));
809 if (h) h->Draw();
810 m_cSVDTimeBhaBhaTOPTRG->SetFillColor(kGray);
812 }
813
814 // find SVD EventT0 Mumus TOPTRG histogram and process it
815 h = findHist("EventT0/m_histEventT0_SVD_mumu_L1_TOPTRG");
816 tag = "mumuTOPTRG_SVDT0";
818 if (std::get<0>(processHistogram(h, tag))) {
819 m_cSVDTimeMuMuTOPTRG->SetFillColor(0);
820 m_cSVDTimeMuMuTOPTRG->Modified();
821 m_cSVDTimeMuMuTOPTRG->Update();
822 } else {
823 B2DEBUG(29, Form("Histogram SVD EventT0 for %s from EventT0 DQM not processed!", tag.Data()));
824 if (h) h->Draw();
825 m_cSVDTimeMuMuTOPTRG->SetFillColor(kGray);
826 m_cSVDTimeMuMuTOPTRG->Draw();
827 }
828}
829
831{
832 //ECLTRG canvas
833 m_cECLTimeHadronsECLTRG = new TCanvas("ECLTimeHadronsECLTRG", "ECL time hadrons ECLTRG jitter");
834 m_cECLTimeBhaBhaECLTRG = new TCanvas("ECLTimeBhaBhaECLTRG", "ECL time BhaBha ECLTRG jitter");
835 m_cECLTimeMuMuECLTRG = new TCanvas("ECLTimeMuMuECLTRG", "ECL time #mu#mu ECLTRG jitter");
836 m_cCDCTimeHadronsECLTRG = new TCanvas("CDCTimeHadronsECLTRG", "CDC time hadrons ECLTRG jitter");
837 m_cCDCTimeBhaBhaECLTRG = new TCanvas("CDCTimeBhaBhaECLTRG", "CDC time BhaBha ECLTRG jitter");
838 m_cCDCTimeMuMuECLTRG = new TCanvas("CDCTimeMuMuECLTRG", "CDC time #mu#mu ECLTRG jitter");
839 m_cTOPTimeHadronsECLTRG = new TCanvas("TOPTimeHadronsECLTRG", "TOP time hadrons ECLTRG jitter");
840 m_cTOPTimeBhaBhaECLTRG = new TCanvas("TOPTimeBhaBhaECLTRG", "TOP time BhaBha ECLTRG jitter");
841 m_cTOPTimeMuMuECLTRG = new TCanvas("TOPTimeMuMuECLTRG", "TOP time #mu#mu ECLTRG jitter");
842 m_cSVDTimeHadronsECLTRG = new TCanvas("SVDTimeHadronsECLTRG", "SVD time hadrons ECLTRG jitter");
843 m_cSVDTimeBhaBhaECLTRG = new TCanvas("SVDTimeBhaBhaECLTRG", "SVD time BhaBha ECLTRG jitter");
844 m_cSVDTimeMuMuECLTRG = new TCanvas("SVDTimeMuMuECLTRG", "SVD time #mu#mu ECLTRG jitter");
845
846 //CDCTRG canvas
847 m_cECLTimeHadronsCDCTRG = new TCanvas("ECLTimeHadronsCDCTRG", "ECL time hadrons CDCTRG jitter");
848 m_cECLTimeBhaBhaCDCTRG = new TCanvas("ECLTimeBhaBhaCDCTRG", "ECL time BhaBha CDCTRG jitter");
849 m_cECLTimeMuMuCDCTRG = new TCanvas("ECLTimeMuMuCDCTRG", "ECL time #mu#mu CDCTRG jitter");
850 m_cCDCTimeHadronsCDCTRG = new TCanvas("CDCTimeHadronsCDCTRG", "CDC time hadrons CDCTRG jitter");
851 m_cCDCTimeBhaBhaCDCTRG = new TCanvas("CDCTimeBhaBhaCDCTRG", "CDC time BhaBha CDCTRG jitter");
852 m_cCDCTimeMuMuCDCTRG = new TCanvas("CDCTimeMuMuCDCTRG", "CDC time #mu#mu CDCTRG jitter");
853 m_cTOPTimeHadronsCDCTRG = new TCanvas("TOPTimeHadronsCDCTRG", "TOP time hadrons CDCTRG jitter");
854 m_cTOPTimeBhaBhaCDCTRG = new TCanvas("TOPTimeBhaBhaCDCTRG", "TOP time BhaBha CDCTRG jitter");
855 m_cTOPTimeMuMuCDCTRG = new TCanvas("TOPTimeMuMuCDCTRG", "TOP time #mu#mu CDCTRG jitter");
856 m_cSVDTimeHadronsCDCTRG = new TCanvas("SVDTimeHadronsCDCTRG", "SVD time hadrons CDCTRG jitter");
857 m_cSVDTimeBhaBhaCDCTRG = new TCanvas("SVDTimeBhaBhaCDCTRG", "SVD time BhaBha CDCTRG jitter");
858 m_cSVDTimeMuMuCDCTRG = new TCanvas("SVDTimeMuMuCDCTRG", "SVD time #mu#mu CDCTRG jitter");
859
860 //TOPTRG canvas
861 m_cECLTimeHadronsTOPTRG = new TCanvas("ECLTimeHadronsTOPTRG", "ECL time hadrons TOPTRG jitter");
862 m_cECLTimeBhaBhaTOPTRG = new TCanvas("ECLTimeBhaBhaTOPTRG", "ECL time BhaBha TOPTRG jitter");
863 m_cECLTimeMuMuTOPTRG = new TCanvas("ECLTimeMuMuTOPTRG", "ECL time #mu#mu TOPTRG jitter");
864 m_cCDCTimeHadronsTOPTRG = new TCanvas("CDCTimeHadronsTOPTRG", "CDC time hadrons TOPTRG jitter");
865 m_cCDCTimeBhaBhaTOPTRG = new TCanvas("CDCTimeBhaBhaTOPTRG", "CDC time BhaBha TOPTRG jitter");
866 m_cCDCTimeMuMuTOPTRG = new TCanvas("CDCTimeMuMuTOPTRG", "CDC time #mu#mu TOPTRG jitter");
867 m_cTOPTimeHadronsTOPTRG = new TCanvas("TOPTimeHadronsTOPTRG", "TOP time hadrons TOPTRG jitter");
868 m_cTOPTimeBhaBhaTOPTRG = new TCanvas("TOPTimeBhaBhaTOPTRG", "TOP time BhaBha TOPTRG jitter");
869 m_cTOPTimeMuMuTOPTRG = new TCanvas("TOPTimeMuMuTOPTRG", "TOP time #mu#mu TOPTRG jitter");
870 m_cSVDTimeHadronsTOPTRG = new TCanvas("SVDTimeHadronsTOPTRG", "SVD time hadrons TOPTRG jitter");
871 m_cSVDTimeBhaBhaTOPTRG = new TCanvas("SVDTimeBhaBhaTOPTRG", "SVD time BhaBha TOPTRG jitter");
872 m_cSVDTimeMuMuTOPTRG = new TCanvas("SVDTimeMuMuTOPTRG", "SVD time #mu#mu TOPTRG jitter");
873}
874
876{
878 m_cECLTimeBhaBhaECLTRG->Clear();
879 m_cECLTimeMuMuECLTRG->Clear();
881 m_cCDCTimeBhaBhaECLTRG->Clear();
882 m_cCDCTimeMuMuECLTRG->Clear();
884 m_cTOPTimeBhaBhaECLTRG->Clear();
885 m_cTOPTimeMuMuECLTRG->Clear();
887 m_cSVDTimeBhaBhaECLTRG->Clear();
888 m_cSVDTimeMuMuECLTRG->Clear();
889
891 m_cECLTimeBhaBhaCDCTRG->Clear();
892 m_cECLTimeMuMuCDCTRG->Clear();
894 m_cCDCTimeBhaBhaCDCTRG->Clear();
895 m_cCDCTimeMuMuCDCTRG->Clear();
897 m_cTOPTimeBhaBhaCDCTRG->Clear();
898 m_cTOPTimeMuMuCDCTRG->Clear();
900 m_cSVDTimeBhaBhaCDCTRG->Clear();
901 m_cSVDTimeMuMuCDCTRG->Clear();
902
904 m_cECLTimeBhaBhaTOPTRG->Clear();
905 m_cECLTimeMuMuTOPTRG->Clear();
907 m_cCDCTimeBhaBhaTOPTRG->Clear();
908 m_cCDCTimeMuMuTOPTRG->Clear();
910 m_cTOPTimeBhaBhaTOPTRG->Clear();
911 m_cTOPTimeMuMuTOPTRG->Clear();
913 m_cSVDTimeBhaBhaTOPTRG->Clear();
914 m_cSVDTimeMuMuTOPTRG->Clear();
915}
916
918{
919 m_cECLTimeHadronsECLTRG->Print("EventT0_TriggerJitter.pdf(");
920 m_cECLTimeBhaBhaECLTRG->Print("EventT0_TriggerJitter.pdf");
921 m_cECLTimeMuMuECLTRG->Print("EventT0_TriggerJitter.pdf");
922 m_cCDCTimeHadronsECLTRG->Print("EventT0_TriggerJitter.pdf");
923 m_cCDCTimeBhaBhaECLTRG->Print("EventT0_TriggerJitter.pdf");
924 m_cCDCTimeMuMuECLTRG->Print("EventT0_TriggerJitter.pdf");
925 m_cTOPTimeHadronsECLTRG->Print("EventT0_TriggerJitter.pdf");
926 m_cTOPTimeBhaBhaECLTRG->Print("EventT0_TriggerJitter.pdf");
927 m_cTOPTimeMuMuECLTRG->Print("EventT0_TriggerJitter.pdf");
928 m_cSVDTimeHadronsECLTRG->Print("EventT0_TriggerJitter.pdf");
929 m_cSVDTimeBhaBhaECLTRG->Print("EventT0_TriggerJitter.pdf");
930 m_cSVDTimeMuMuECLTRG->Print("EventT0_TriggerJitter.pdf");
931
932 m_cECLTimeHadronsCDCTRG->Print("EventT0_TriggerJitter.pdf");
933 m_cECLTimeBhaBhaCDCTRG->Print("EventT0_TriggerJitter.pdf");
934 m_cECLTimeMuMuCDCTRG->Print("EventT0_TriggerJitter.pdf");
935 m_cCDCTimeHadronsCDCTRG->Print("EventT0_TriggerJitter.pdf");
936 m_cCDCTimeBhaBhaCDCTRG->Print("EventT0_TriggerJitter.pdf");
937 m_cCDCTimeMuMuCDCTRG->Print("EventT0_TriggerJitter.pdf");
938 m_cTOPTimeHadronsCDCTRG->Print("EventT0_TriggerJitter.pdf");
939 m_cTOPTimeBhaBhaCDCTRG->Print("EventT0_TriggerJitter.pdf");
940 m_cTOPTimeMuMuCDCTRG->Print("EventT0_TriggerJitter.pdf");
941 m_cSVDTimeHadronsCDCTRG->Print("EventT0_TriggerJitter.pdf");
942 m_cSVDTimeBhaBhaCDCTRG->Print("EventT0_TriggerJitter.pdf");
943 m_cSVDTimeMuMuCDCTRG->Print("EventT0_TriggerJitter.pdf");
944
945 m_cECLTimeHadronsTOPTRG->Print("EventT0_TriggerJitter.pdf");
946 m_cECLTimeBhaBhaTOPTRG->Print("EventT0_TriggerJitter.pdf");
947 m_cECLTimeMuMuTOPTRG->Print("EventT0_TriggerJitter.pdf");
948 m_cCDCTimeHadronsTOPTRG->Print("EventT0_TriggerJitter.pdf");
949 m_cCDCTimeBhaBhaTOPTRG->Print("EventT0_TriggerJitter.pdf");
950 m_cCDCTimeMuMuTOPTRG->Print("EventT0_TriggerJitter.pdf");
951 m_cTOPTimeHadronsTOPTRG->Print("EventT0_TriggerJitter.pdf");
952 m_cTOPTimeBhaBhaTOPTRG->Print("EventT0_TriggerJitter.pdf");
953 m_cTOPTimeMuMuTOPTRG->Print("EventT0_TriggerJitter.pdf");
954 m_cSVDTimeHadronsTOPTRG->Print("EventT0_TriggerJitter.pdf");
955 m_cSVDTimeBhaBhaTOPTRG->Print("EventT0_TriggerJitter.pdf");
956 m_cSVDTimeMuMuTOPTRG->Print("EventT0_TriggerJitter.pdf)");
957}
958
959
961{
974
987
1000}
1001
1002
1004{
1005 // Set the deltaT0 values to be accissble on the DQM web page for the shifters, with SVD EventT0 being the reference
1006 // As we are only interested in trends, just the raw difference is used, no (error) weighted values
1007 // However, not all values might exist, so make the algorithm fault tolerant
1008 if (m_ECLTRGHLThadronSVDT0 > -998) {
1009 if (m_ECLTRGHLThadronCDCT0 > -998) {
1010 setEpicsPV("ECLTRG_Hadron_Delta_CDCEventT0_SVDEventT0", m_ECLTRGHLThadronCDCT0 - m_ECLTRGHLThadronSVDT0);
1011 }
1012 if (m_ECLTRGHLThadronECLT0 > -998) {
1013 setEpicsPV("ECLTRG_Hadron_Delta_ECLEventT0_SVDEventT0", m_ECLTRGHLThadronECLT0 - m_ECLTRGHLThadronSVDT0);
1014 }
1015 if (m_ECLTRGHLThadronTOPT0 > -998) {
1016 setEpicsPV("ECLTRG_Hadron_Delta_TOPEventT0_SVDEventT0", m_ECLTRGHLThadronTOPT0 - m_ECLTRGHLThadronSVDT0);
1017 }
1018 }
1019}
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
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.
static MonitoringObject * getMonitoringObject(const std::string &name)
Get MonitoringObject with given name (new object is created if non-existing)
static TH1 * findHist(const std::string &histname, bool onlyIfUpdated=false)
Get histogram from list (no other search).
void setEpicsPV(std::string keyname, double value)
Write value to a EPICS PV.
DQMHistAnalysisModule()
Constructor / Destructor.
int registerEpicsPV(std::string pvname, std::string keyname="")
EPICS related Functions.
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.