Belle II Software development
DQMHistAnalysisTRG.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 : DQMHistAnalysisTRGModule.cc
10// Description : Module for TRG
11//-
12
13
14#include <dqm/analysis/modules/DQMHistAnalysisTRG.h>
15#include <TROOT.h>
16#include <iostream>
17
18using namespace std;
19using namespace Belle2;
20
21//-----------------------------------------------------------------
22// Register the Module
23//-----------------------------------------------------------------
24REG_MODULE(DQMHistAnalysisTRG);
25
26//-----------------------------------------------------------------
27// Implementation
28//-----------------------------------------------------------------
29
32{
33 // This module CAN NOT be run in parallel!
34
35 // Parameter definition
36 addParam("PVPrefix", m_pvPrefix, "PV Prefix", std::string("TRG:"));
37 B2DEBUG(1, "DQMHistAnalysisTRGModule: Constructor done.");
38
39}
40
42{
43 // destructor not needed
44 // EPICS singleton deletion not urgent -> can be done by framework
45}
46
48{
49 B2DEBUG(1, "DQMHistAnalysisTRGModule: initialized.");
50
51 gROOT->cd();
52 m_canvas = new TCanvas("TRG/c_Test");
53 //comL1-GDLL1
54 addDeltaPar("TRGGDL", "hGDL_gdlL1TocomL1_all", HistDelta::c_Entries, 1000, 1); // update each 1000 entries
55 registerEpicsPV(m_pvPrefix + "comL1_GDLL1_mean", "comL1_GDLL1_mean");
56
57 //ECLTRG timing
58 addDeltaPar("EventT0DQMdir", "m_histEventT0_TOP_hadron_L1_ECLTRG", HistDelta::c_Entries, 1000, 1); // update each 1000 entries
59 registerEpicsPV(m_pvPrefix + "ECLTRG_timing_mean", "ECLTRG_timing_mean");
60
61 //CDCTRG event timing
62 addDeltaPar("EventT0DQMdir", "m_histEventT0_TOP_hadron_L1_CDCTRG", HistDelta::c_Entries, 1000, 1); // update each 1000 entries
63 registerEpicsPV(m_pvPrefix + "CDCTRG_timing_mean", "CDCTRG_timing_mean");
64
65 //TOPTRG event timing
66 addDeltaPar("EventT0DQMdir", "m_histEventT0_TOP_hadron_L1_TOPTRG", HistDelta::c_Entries, 1000, 1); // update each 1000 entries
67 registerEpicsPV(m_pvPrefix + "TOPTRG_timing_mean", "TOPTRG_timing_mean");
68
69 //ECLTRG_peak
70 addDeltaPar("TRGGRL", "h_ECLL1", HistDelta::c_Entries, 1000, 1); // update each 1000 entries
71 registerEpicsPV(m_pvPrefix + "ECLTRG_peak", "ECLTRG_peak");
72
73
74 //CDCTRG_2D_peak
75 addDeltaPar("TRGGRL", "h_CDCL1", HistDelta::c_Entries, 1000, 1); // update each 1000 entries
76 registerEpicsPV(m_pvPrefix + "CDCTRG_2D_peak", "CDCTRG_2D_peak");
77
78
79 //NN_peak
80 addDeltaPar("TRGGRL", "h_CDCNNL1", HistDelta::c_Entries, 1000, 1); // update each 1000 entries
81 registerEpicsPV(m_pvPrefix + "NN_peak", "NN_peak");
82
83 //CDCTRG_TSF_peak
84 addDeltaPar("TRGGRL", "h_TSFL1", HistDelta::c_Entries, 1000, 1); // update each 1000 entries
85 registerEpicsPV(m_pvPrefix + "CDCTRG_TSF_peak", "CDCTRG_TSF_peak");
86
87 //KLMTRG_peak
88 addDeltaPar("TRGGRL", "h_KLML1", HistDelta::c_Entries, 1000, 1); // update each 1000 entries
89 registerEpicsPV(m_pvPrefix + "KLMTRG_peak", "KLMTRG_peak");
90
91 //TOPTRG_peak
92 addDeltaPar("TRGGRL", "h_TOPL1", HistDelta::c_Entries, 1000, 1); // update each 1000 entries
93 registerEpicsPV(m_pvPrefix + "TOPTRG_peak", "TOPTRG_peak");
94
95 //CDCTRG nTSFHits total
96 addDeltaPar("TRGGRL", "h_wirecnt_sum", HistDelta::c_Entries, 1000, 1);
97 registerEpicsPV(m_pvPrefix + "CDCTRG_meanTSFHits_total", "CDCTRG_meanTSFHits_total");
98
99 //CDCTRG nTSFHits Injection BG Clean region
100 addDeltaPar("TRGGRL", "h_wirecnt_sum_clean", HistDelta::c_Entries, 1000, 1);
101 registerEpicsPV(m_pvPrefix + "CDCTRG_meanTSFHits_clean", "CDCTRG_meanTSFHits_clean"); // Mean value for the distribution of N(TSF)
102 registerEpicsPV(m_pvPrefix + "CDCTRG_tailTSFHits_clean",
103 "CDCTRG_tailTSFHits_clean"); // Tail position for the distribution of N(TSF)
104
105 //CDCTRG nTSFHits HER Injection region
106 addDeltaPar("TRGGRL", "h_wirecnt_sum_injHER", HistDelta::c_Entries, 1000, 1);
107 registerEpicsPV(m_pvPrefix + "CDCTRG_meanTSFHits_injHER", "CDCTRG_meanTSFHits_injHER");
108
109 //CDCTRG nTSFHits LER Injection region
110 addDeltaPar("TRGGRL", "h_wirecnt_sum_injLER", HistDelta::c_Entries, 1000, 1);
111 registerEpicsPV(m_pvPrefix + "CDCTRG_meanTSFHits_injLER", "CDCTRG_meanTSFHits_injLER");
112
113 //ecl timing –cdc timing
114 addDeltaPar("TRGGDL", "hGDL_ns_cdcToecl_all", HistDelta::c_Entries, 1000, 1); // update each 1000 entries
115 registerEpicsPV(m_pvPrefix + "ecltiming_cdctiming", "ecltiming_cdctiming");
116
117 //top timing – ecl timing
118 addDeltaPar("TRGGDL", "hGDL_ns_topToecl_all", HistDelta::c_Entries, 1000, 1); // update each 1000 entries
119 registerEpicsPV(m_pvPrefix + "toptiming_ecltiming", "toptiming_ecltiming");
120
121 // top timing – cdc timing
122 addDeltaPar("TRGGDL", "hGDL_ns_topTocdc_all", HistDelta::c_Entries, 1000, 1); // update each 1000 entries
123 registerEpicsPV(m_pvPrefix + "toptiming_cdctiming", "toptiming_cdctiming");
124
125 // gdll1-ecl timing
126 addDeltaPar("TRGGDL", "hGDL_eclTogdlL1_all", HistDelta::c_Entries, 1000, 1); // update each 1000 entries
127 registerEpicsPV(m_pvPrefix + "gdll1_ecltiming", "gdll1_ecltiming");
128
129 //gdll1-cdctiming
130 addDeltaPar("TRGGDL", "hGDL_cdcTogdlL1_all", HistDelta::c_Entries, 1000, 1); // update each 1000 entries
131 registerEpicsPV(m_pvPrefix + "gdll1_cdctiming", "gdll1_cdctiming");
132
133 //gdll1-toptiming
134 addDeltaPar("TRGGDL", "hGDL_topTogdlL1_all", HistDelta::c_Entries, 1000, 1); // update each 1000 entries
135 registerEpicsPV(m_pvPrefix + "gdll1_toptiming", "gdll1_toptiming");
136
137 //barrel klm latency
138 addDeltaPar("TRGGDL", "hGDL_itd_klm_hit_rise_all", HistDelta::c_Entries, 1000, 1); // update each 1000 entries
139 registerEpicsPV(m_pvPrefix + "barrel_klm_latency", "barrel_klm_latency");
140
141 //endcap klm latency
142 addDeltaPar("TRGGDL", "hGDL_itd_eklm_hit_rise_all", HistDelta::c_Entries, 1000, 1); // update each 1000 entries
143 registerEpicsPV(m_pvPrefix + "endcap_klm_latency", "endcap_klm_latency");
144
145 //hadronb2_over_bhabha_all
146 addDeltaPar("softwaretrigger", "skim", HistDelta::c_Entries, 1000000, 1); // update each 1000000 entries
147 registerEpicsPV(m_pvPrefix + "hadronb2_over_bhabha_all", "hadronb2_over_bhabha_all");
148
149 //mumu2trk_over_bhabha_all
150 addDeltaPar("softwaretrigger", "skim", HistDelta::c_Entries, 1000000, 1); // update each 1000000 entries
151 registerEpicsPV(m_pvPrefix + "mumu2trk_over_bhabha_all", "mumu2trk_over_bhabha_all");
152
153 //hadronb2_over_mumu2trk
154 addDeltaPar("softwaretrigger", "skim", HistDelta::c_Entries, 1000000, 1); // update each 1000000 entries
155 registerEpicsPV(m_pvPrefix + "hadronb2_over_mumu2trk", "hadronb2_over_mumu2trk");
156
157 //ECLTRG_deadch
158 addDeltaPar("TRG", "h_TCId", HistDelta::c_Entries, 10000, 1); // update each 10000 entries
159 registerEpicsPV(m_pvPrefix + "ECLTRG_deadch", "ECLTRG_deadch");
160
161 //ECLTRG N(TC) total
162 addDeltaPar("TRG", "h_n_TChit_event", HistDelta::c_Entries, 10000, 1); // update each 10000 entries
163 registerEpicsPV(m_pvPrefix + "ECLTRG_meanTC_total", "ECLTRG_meanTC_total");
164
165 //ECLTRG N(TC) clean
166 addDeltaPar("TRG", "h_n_TChit_clean", HistDelta::c_Entries, 10000, 1); // update each 10000 entries
167 registerEpicsPV(m_pvPrefix + "ECLTRG_meanTC_clean", "ECLTRG_meanTC_clean"); // Mean value for the distribution of N(TC)
168 registerEpicsPV(m_pvPrefix + "ECLTRG_tailTC_clean", "ECLTRG_tailTC_clean"); // Tail position for the distribution of N(TC)
169
170 //ECLTRG N(TC) HER Injection region
171 addDeltaPar("TRG", "h_n_TChit_injHER", HistDelta::c_Entries, 10000, 1); // update each 10000 entries
172 registerEpicsPV(m_pvPrefix + "ECLTRG_meanTC_injHER", "ECLTRG_meanTC_injHER");
173
174 //ECLTRG N(TC) LER Injection region
175 addDeltaPar("TRG", "h_n_TChit_injLER", HistDelta::c_Entries, 10000, 1); // update each 10000 entries
176 registerEpicsPV(m_pvPrefix + "ECLTRG_meanTC_injLER", "ECLTRG_meanTC_injLER");
177
178 //CDCTRG_deadch
179// m_canvas_CDCTRG_deadch = new TCanvas("CDCTRG_deadch");
180 addDeltaPar("TRGCDCTNN", "NeuroHWInTSID", HistDelta::c_Entries, 100000, 1); // update each 100000 entries
181 registerEpicsPV(m_pvPrefix + "CDCTRG_deadch", "CDCTRG_deadch");
182
183}
184
186{
187 B2DEBUG(1, "DQMHistAnalysisTRGModule: beginRun called.");
188}
189
191{
192 B2DEBUG(1, "DQMHistAnalysisTRGModule: endRun called.");
193}
194
196{
197 B2DEBUG(1, "DQMHistAnalysisTRGModule: event called.");
199}
200
202{
203 m_canvas->Clear();
204 m_canvas->cd(0);
205
206 bool m_IsPhysicsRun = (getRunType() == "physics") || (getRunType() == "cosmic") || (getRunType() == "debug");
207 if (m_IsPhysicsRun == true) {
208
209 //update comL1-GDLL1
210 auto hist_comL1_GDLL1 = getDelta("TRGGDL", "hGDL_gdlL1TocomL1_all", 0, true);// only if updated
211 if (hist_comL1_GDLL1) {
212 double comL1_GDLL1_mean = 0.0;
213 hist_comL1_GDLL1->Draw();
214 comL1_GDLL1_mean = hist_comL1_GDLL1->GetMean();
215 B2DEBUG(1, "comL1_GDLL1_mean:" << comL1_GDLL1_mean);
216 setEpicsPV("comL1_GDLL1_mean", comL1_GDLL1_mean);
217 }
218
219 //update ECLTRG timing
220 auto hist = getDelta("EventT0DQMdir", "m_histEventT0_TOP_hadron_L1_ECLTRG", 0, true);// only if updated
221 if (hist) {
222 double ECLTRG_timing_mean = 0.0;
223 hist->Draw();
224 ECLTRG_timing_mean = hist->GetMean();
225 B2DEBUG(1, "ECLTRG_timing_mean:" << ECLTRG_timing_mean);
226 setEpicsPV("ECLTRG_timing_mean", ECLTRG_timing_mean);
227 }
228
229
230 //update CDCTRG timing
231 auto histCDCTRG = getDelta("EventT0DQMdir", "m_histEventT0_TOP_hadron_L1_CDCTRG", 0, true);// only if updated
232 if (histCDCTRG) {
233 double CDCTRG_timing_mean = 0.0;
234 histCDCTRG->Draw();
235 CDCTRG_timing_mean = histCDCTRG->GetMean();
236 B2DEBUG(1, "CDCTRG_timing_mean:" << CDCTRG_timing_mean);
237 setEpicsPV("CDCTRG_timing_mean", CDCTRG_timing_mean);
238 }
239
240 //update TOPTRG timing
241 auto histTOPTRG = getDelta("EventT0DQMdir", "m_histEventT0_TOP_hadron_L1_TOPTRG", 0, true);// only if updated
242 if (histTOPTRG) {
243 double TOPTRG_timing_mean = 0.0;
244 histTOPTRG->Draw();
245 TOPTRG_timing_mean = histTOPTRG->GetMean();
246 B2DEBUG(1, "TOPTRG_timing_mean:" << TOPTRG_timing_mean);
247 setEpicsPV("TOPTRG_timing_mean", TOPTRG_timing_mean);
248 }
249
250// update ECLTRG peak
251 auto hist_ECLTRG_peak = getDelta("TRGGRL", "h_ECLL1", 0, true);// only if updated
252 if (hist_ECLTRG_peak) {
253// TH1F* hist_ECLTRG_clone = (TH1F*)hist_ECLTRG_peak->Clone();//Clone the histogram.
254 double ECLTRG_peak = 0.0;
255 hist_ECLTRG_peak->Draw();
256// int bin_ECLTRG_peak = hist_ECLTRG_peak->GetMaximumBin();
257// ECLTRG_peak = hist_ECLTRG_peak->GetXaxis()->GetBinCenter(bin_ECLTRG_peak);
258 ECLTRG_peak = hist_ECLTRG_peak->GetMean();
259
260 /*
261 while(ECLTRG_peak<-1310){
262 hist_ECLTRG_clone->SetBinContent(bin_ECLTRG_peak, 0);
263 bin_ECLTRG_peak = hist_ECLTRG_clone->GetMaximumBin();
264 ECLTRG_peak = hist_ECLTRG_clone->GetXaxis()->GetBinCenter(bin_ECLTRG_peak);
265 }
266 */
267
268 B2DEBUG(1, "ECLTRG_peak:" << ECLTRG_peak);
269 setEpicsPV("ECLTRG_peak", ECLTRG_peak);
270// delete hist_ECLTRG_clone;
271 }
272
273// update ECLTRG deadch
274 auto hist_ECLTRG_deadch = getDelta("TRG", "h_TCId", 0, true);// only if updated
275 if (hist_ECLTRG_deadch) {
276 hist_ECLTRG_deadch->Draw();
277 int numberOfBins = hist_ECLTRG_deadch->GetNbinsX();
278 double average = 0;
279 for (int i = 80; i < 512; i++) {
280 average += hist_ECLTRG_deadch->GetBinContent(i);
281 }
282 average = 1.0 * average / (512 - 80);
283 int ECLTRG_deadch = 0;
284// for (int i = 2; i <= numberOfBins - 1; i++) {
285// if (hist_ECLTRG_deadch->GetBinContent(i) <= 0.01 * hist_ECLTRG_deadch->GetMaximum()) { ECLTRG_deadch += 1; }
286// }
287 for (int i = 2; i <= numberOfBins - 1; i++) {
288 if (hist_ECLTRG_deadch->GetBinContent(i) <= 0.01 * average) { ECLTRG_deadch += 1; }
289 }
290 B2DEBUG(1, "ECLTRG_deadch:" << ECLTRG_deadch);
291 setEpicsPV("ECLTRG_deadch", ECLTRG_deadch);
292 }
293
294// update TOPTRG deadch
295 auto hist_TOPTRG_deadch = getDelta("TRGGRL", "h_slot_TOP", 0, true);// only if updated
296 if (hist_TOPTRG_deadch) {
297 hist_TOPTRG_deadch->Draw();
298 int numberOfBins = hist_TOPTRG_deadch->GetNbinsX();
299 int TOPTRG_deadch = 0;
300 for (int i = 2; i <= numberOfBins - 1; i++) {
301 if (hist_TOPTRG_deadch->GetBinContent(i) <= 0.01 * hist_TOPTRG_deadch->GetMaximum()) { TOPTRG_deadch += 1; }
302 }
303 B2DEBUG(1, "TOPTRG_deadch:" << TOPTRG_deadch);
304 setEpicsPV("TOPTRG_deadch", TOPTRG_deadch);
305 }
306
307// m_canvas_CDCTRG_2D_peak->Clear();
308// m_canvas_CDCTRG_2D_peak->cd(0);
309// update CDCTRG 2D peak
310 auto hist_CDCTRG_2D_peak = getDelta("TRGGRL", "h_CDCL1", 0, true);// only if updated
311 if (hist_CDCTRG_2D_peak) {
312 double CDCTRG_2D_peak = 0.0;
313 hist_CDCTRG_2D_peak->Draw();
314 int bin_CDCTRG_2D_peak = hist_CDCTRG_2D_peak->GetMaximumBin();
315 CDCTRG_2D_peak = hist_CDCTRG_2D_peak->GetXaxis()->GetBinCenter(bin_CDCTRG_2D_peak);
316 B2DEBUG(1, "CDCTRG_2D_peak:" << CDCTRG_2D_peak);
317 setEpicsPV("CDCTRG_2D_peak", CDCTRG_2D_peak);
318
319 }
320
321// update CDCTRG NN peak
322 auto hist_NN_peak = getDelta("TRGGRL", "h_CDCNNL1", 0, true);// only if updated
323 if (hist_NN_peak) {
324 double NN_peak = 0.0;
325 hist_NN_peak->Draw();
326 int bin_NN_peak = hist_NN_peak->GetMaximumBin();
327 NN_peak = hist_NN_peak->GetXaxis()->GetBinCenter(bin_NN_peak);
328 B2DEBUG(1, "NN_peak:" << NN_peak);
329 setEpicsPV("NN_peak", NN_peak);
330
331 }
332
333// update CDCTRG TSF
334 auto hist_CDCTRG_TSF_peak = getDelta("TRGGRL", "h_TSFL1", 0, true);// only if updated
335 if (hist_CDCTRG_TSF_peak) {
336 double CDCTRG_TSF_peak = 0.0;
337 hist_CDCTRG_TSF_peak->Draw();
338 int bin_CDCTRG_TSF_peak = hist_CDCTRG_TSF_peak->GetMaximumBin();
339 CDCTRG_TSF_peak = hist_CDCTRG_TSF_peak->GetXaxis()->GetBinCenter(bin_CDCTRG_TSF_peak);
340 B2DEBUG(1, "CDCTRG_TSF_peak:" << CDCTRG_TSF_peak);
341 setEpicsPV("CDCTRG_TSF_peak", CDCTRG_TSF_peak);
342
343 }
344
345// update CDCTRG deadch
346 auto hist_CDCTRG_deadch = getDelta("TRGCDCTNN", "NeuroHWInTSID", 0, true);// only if updated
347 if (hist_CDCTRG_deadch) {
348 hist_CDCTRG_deadch->Draw();
349 int numberOfBins = hist_CDCTRG_deadch->GetNbinsX();
350// int YMax = hist_CDCTRG_deadch->GetBinContent(hist_CDCTRG_deadch->GetMaximumBin());
351 int CDCTRG_deadch = 0;
352 for (int i = 3; i <= numberOfBins; i++) {
353 if (hist_CDCTRG_deadch->GetBinContent(i) <= 0.01 * hist_CDCTRG_deadch->GetMaximum()) {CDCTRG_deadch += 1;}
354// if (hist_CDCTRG_deadch->GetBinContent(i) <= 0) {CDCTRG_deadch += 1;}
355 }
356 B2DEBUG(1, "CDCTRG_deadch:" << CDCTRG_deadch);
357 setEpicsPV("CDCTRG_deadch", CDCTRG_deadch);
358 }
359
360// update KLMTRG
361 auto hist_KLMTRG_peak = getDelta("TRGGRL", "h_KLML1", 0, true);// only if updated
362 if (hist_KLMTRG_peak) {
363 double KLMTRG_peak = 0.0;
364 hist_KLMTRG_peak->Draw();
365 int bin_KLMTRG_peak = hist_KLMTRG_peak->GetMaximumBin();
366 KLMTRG_peak = hist_KLMTRG_peak->GetXaxis()->GetBinCenter(bin_KLMTRG_peak);
367 B2DEBUG(1, "KLMTRG_peak:" << KLMTRG_peak);
368 setEpicsPV("KLMTRG_peak", KLMTRG_peak);
369
370 }
371
372// update TOPTRG
373 auto hist_TOPTRG_peak = getDelta("TRGGRL", "h_TOPL1", 0, true);// only if updated
374 if (hist_TOPTRG_peak) {
375 double TOPTRG_peak = 0.0;
376 hist_TOPTRG_peak->Draw();
377 int bin_TOPTRG_peak = hist_TOPTRG_peak->GetMaximumBin();
378 TOPTRG_peak = hist_TOPTRG_peak->GetXaxis()->GetBinCenter(bin_TOPTRG_peak);
379 B2DEBUG(1, "TOPTRG_peak:" << TOPTRG_peak);
380 setEpicsPV("TOPTRG_peak", TOPTRG_peak);
381
382 }
383
384// update ecltiming_cdctiming
385 auto hist_ecltiming_cdctiming = getDelta("TRGGDL", "hGDL_ns_cdcToecl_all", 0, true);// only if updated
386 if (hist_ecltiming_cdctiming) {
387 double ecltiming_cdctiming = 0.0;
388 hist_ecltiming_cdctiming->Draw();
389 int bin_ecltiming_cdctiming = hist_ecltiming_cdctiming->GetMaximumBin();
390 ecltiming_cdctiming = hist_ecltiming_cdctiming->GetXaxis()->GetBinCenter(bin_ecltiming_cdctiming);
391 B2DEBUG(1, "ecltiming_cdctiming:" << ecltiming_cdctiming);
392 setEpicsPV("ecltiming_cdctiming", ecltiming_cdctiming);//Peak
393 }
394
395// update toptiming_ecltiming
396 auto hist_toptiming_ecltiming = getDelta("TRGGDL", "hGDL_ns_topToecl_all", 0, true);// only if updated
397 if (hist_toptiming_ecltiming) {
398 double toptiming_ecltiming = 0.0;
399 hist_toptiming_ecltiming->Draw();
400 int bin_toptiming_ecltiming = hist_toptiming_ecltiming->GetMaximumBin();
401 toptiming_ecltiming = hist_toptiming_ecltiming->GetXaxis()->GetBinCenter(bin_toptiming_ecltiming);
402 B2DEBUG(1, "toptiming_ecltiming:" << toptiming_ecltiming);
403 setEpicsPV("toptiming_ecltiming", toptiming_ecltiming);//Peak
404 }
405
406// update toptiming_cdctiming
407 auto hist_toptiming_cdctiming = getDelta("TRGGDL", "hGDL_ns_topTocdc_all", 0, true);// only if updated
408 if (hist_toptiming_cdctiming) {
409 double toptiming_cdctiming = 0.0;
410 hist_toptiming_cdctiming->Draw();
411 int bin_toptiming_cdctiming = hist_toptiming_cdctiming->GetMaximumBin();
412 toptiming_cdctiming = hist_toptiming_cdctiming->GetXaxis()->GetBinCenter(bin_toptiming_cdctiming);
413 B2DEBUG(1, "toptiming_cdctiming:" << toptiming_cdctiming);
414 setEpicsPV("toptiming_cdctiming", toptiming_cdctiming);//Peak
415 }
416
417// update gdll1_ecltiming
418 auto hist_gdll1_ecltiming = getDelta("TRGGDL", "hGDL_eclTogdlL1_all", 0, true);// only if updated
419 if (hist_gdll1_ecltiming) {
420 double gdll1_ecltiming = 0.0;
421 hist_gdll1_ecltiming->Draw();
422 int bin_gdll1_ecltiming = hist_gdll1_ecltiming->GetMaximumBin();
423 gdll1_ecltiming = hist_gdll1_ecltiming->GetXaxis()->GetBinCenter(bin_gdll1_ecltiming);
424 B2DEBUG(1, "gdll1_ecltiming:" << gdll1_ecltiming);
425 setEpicsPV("gdll1_ecltiming", gdll1_ecltiming);//Peak
426 }
427
428// update gdll1_cdctiming
429 auto hist_gdll1_cdctiming = getDelta("TRGGDL", "hGDL_cdcTogdlL1_all", 0, true);// only if updated
430 if (hist_gdll1_cdctiming) {
431 double gdll1_cdctiming = 0.0;
432 hist_gdll1_cdctiming->Draw();
433 int bin_gdll1_cdctiming = hist_gdll1_cdctiming->GetMaximumBin();
434 gdll1_cdctiming = hist_gdll1_cdctiming->GetXaxis()->GetBinCenter(bin_gdll1_cdctiming);
435 B2DEBUG(1, "gdll1_cdctiming:" << gdll1_cdctiming);
436 setEpicsPV("gdll1_cdctiming", gdll1_cdctiming);//Peak
437 }
438
439// update gdll1_toptiming
440 auto hist_gdll1_toptiming = getDelta("TRGGDL", "hGDL_topTogdlL1_all", 0, true);// only if updated
441 if (hist_gdll1_toptiming) {
442 double gdll1_toptiming = 0.0;
443 hist_gdll1_toptiming->Draw();
444 int bin_gdll1_toptiming = hist_gdll1_toptiming->GetMaximumBin();
445 gdll1_toptiming = hist_gdll1_toptiming->GetXaxis()->GetBinCenter(bin_gdll1_toptiming);
446 B2DEBUG(1, "gdll1_toptiming:" << gdll1_toptiming);
447 setEpicsPV("gdll1_toptiming", gdll1_toptiming);//Peak
448 }
449
450// update barrel_klm_latency
451 auto hist_barrel_klm_latency = getDelta("TRGGDL", "hGDL_itd_klm_hit_rise_all", 0, true);// only if updated
452 if (hist_barrel_klm_latency) {
453 double barrel_klm_latency = 0.0;
454 hist_barrel_klm_latency->Draw();
455 int bin_barrel_klm_latency = hist_barrel_klm_latency->GetMaximumBin();
456 barrel_klm_latency = hist_barrel_klm_latency->GetXaxis()->GetBinCenter(bin_barrel_klm_latency);
457 B2DEBUG(1, "barrel_klm_latency:" << barrel_klm_latency);
458 setEpicsPV("barrel_klm_latency", barrel_klm_latency);//Peak
459 }
460
461// update endcap_klm_latency
462 auto hist_endcap_klm_latency = getDelta("TRGGDL", "hGDL_itd_eklm_hit_rise_all", 0, true);// only if updated
463 if (hist_endcap_klm_latency) {
464 double endcap_klm_latency = 0.0;
465 hist_endcap_klm_latency->Draw();
466 int bin_endcap_klm_latency = hist_endcap_klm_latency->GetMaximumBin();
467 endcap_klm_latency = hist_endcap_klm_latency->GetXaxis()->GetBinCenter(bin_endcap_klm_latency);
468 B2DEBUG(1, "endcap_klm_latency:" << endcap_klm_latency);
469 setEpicsPV("endcap_klm_latency", endcap_klm_latency);//Peak
470 }
471
472 bool m_IsPhysicsRun_ratio = (getRunType() == "physics");
473 if (m_IsPhysicsRun_ratio == true) {
474
475
476// update #hadronb2/#bhabha_all
477 auto hist_hadronb2_over_bhabha_all = getDelta("softwaretrigger", "skim", 0, true);// only if updated
478 if (hist_hadronb2_over_bhabha_all) {
479 hist_hadronb2_over_bhabha_all->Draw();
480 if (hist_hadronb2_over_bhabha_all->GetBinContent(hist_hadronb2_over_bhabha_all->GetXaxis()->FindBin("accept_bhabha_all")) != 0) {
481 double hadronb2_over_bhabha_all = 0.0;
482 hadronb2_over_bhabha_all = hist_hadronb2_over_bhabha_all->GetBinContent(
483 hist_hadronb2_over_bhabha_all->GetXaxis()->FindBin("accept_hadronb2")) / hist_hadronb2_over_bhabha_all->GetBinContent(
484 hist_hadronb2_over_bhabha_all->GetXaxis()->FindBin("accept_bhabha_all"));
485
486 B2DEBUG(1, "hadronb2_over_bhabha_all:" << hadronb2_over_bhabha_all);
487 setEpicsPV("hadronb2_over_bhabha_all", hadronb2_over_bhabha_all);
488 }
489 }
490
491// update #mumu2trk/#bhabha_all
492 auto hist_mumu2trk_over_bhabha_all = getDelta("softwaretrigger", "skim", 0, true);// only if updated
493 if (hist_mumu2trk_over_bhabha_all) {
494 hist_mumu2trk_over_bhabha_all->Draw();
495 if (hist_mumu2trk_over_bhabha_all->GetBinContent(hist_mumu2trk_over_bhabha_all->GetXaxis()->FindBin("accept_bhabha_all")) != 0) {
496 double mumu2trk_over_bhabha_all = 0.0;
497 mumu2trk_over_bhabha_all = hist_mumu2trk_over_bhabha_all->GetBinContent(
498 hist_mumu2trk_over_bhabha_all->GetXaxis()->FindBin("accept_mumu_2trk")) / hist_mumu2trk_over_bhabha_all->GetBinContent(
499 hist_mumu2trk_over_bhabha_all->GetXaxis()->FindBin("accept_bhabha_all"));
500 B2DEBUG(1, "mumu2trk_over_bhabha_all:" << mumu2trk_over_bhabha_all);
501 setEpicsPV("mumu2trk_over_bhabha_all", mumu2trk_over_bhabha_all);
502 }
503
504 }
505
506// update #hadronb2/#mumu2trk
507 auto hist_hadronb2_over_mumu2trk = getDelta("softwaretrigger", "skim", 0, true);// only if updated
508 if (hist_hadronb2_over_mumu2trk) {
509 hist_hadronb2_over_mumu2trk->Draw();
510 if (hist_hadronb2_over_mumu2trk->GetBinContent(
511 hist_hadronb2_over_mumu2trk->GetXaxis()->FindBin("accept_mumu_2trk")) != 0) {
512 double hadronb2_over_mumu2trk = 0.0;
513 hadronb2_over_mumu2trk = hist_hadronb2_over_mumu2trk->GetBinContent(
514 hist_hadronb2_over_mumu2trk->GetXaxis()->FindBin("accept_hadronb2")) / hist_hadronb2_over_mumu2trk->GetBinContent(
515 hist_hadronb2_over_mumu2trk->GetXaxis()->FindBin("accept_mumu_2trk"));
516 B2DEBUG(1, "hadronb2_over_mumu2trk:" << hadronb2_over_mumu2trk);
517 setEpicsPV("hadronb2_over_mumu2trk", hadronb2_over_mumu2trk);
518 }
519
520 }
521
522
523
524// update #mumu_tight/#bhabha_all
525 auto hist_mumu_tight_over_bhabha_all = getDelta("softwaretrigger", "skim", 0, true);// only if updated
526 if (hist_mumu_tight_over_bhabha_all) {
527 hist_mumu_tight_over_bhabha_all->Draw();
528 if (hist_mumu_tight_over_bhabha_all->GetBinContent(
529 hist_mumu_tight_over_bhabha_all->GetXaxis()->FindBin("accept_bhabha_all")) != 0) {
530 double mumu_tight_over_bhabha_all = 0.0;
531 mumu_tight_over_bhabha_all = hist_mumu_tight_over_bhabha_all->GetBinContent(
532 hist_mumu_tight_over_bhabha_all->GetXaxis()->FindBin("accept_mumutight")) / hist_mumu_tight_over_bhabha_all->GetBinContent(
533 hist_mumu_tight_over_bhabha_all->GetXaxis()->FindBin("accept_bhabha_all"));
534 B2DEBUG(1, "mumu_tight_over_bhabha_all:" << mumu_tight_over_bhabha_all);
535 setEpicsPV("mumu_tight_over_bhabha_all", mumu_tight_over_bhabha_all);
536 }
537
538 }
539
540// update #gammagamma/#bhabha_all
541 auto hist_gammagamma_over_bhabha_all = getDelta("softwaretrigger", "skim", 0, true);// only if updated
542 if (hist_gammagamma_over_bhabha_all) {
543 hist_gammagamma_over_bhabha_all->Draw();
544 if (hist_gammagamma_over_bhabha_all->GetBinContent(
545 hist_gammagamma_over_bhabha_all->GetXaxis()->FindBin("accept_bhabha_all")) != 0) {
546 double gammagamma_over_bhabha_all = 0.0;
547 gammagamma_over_bhabha_all = hist_gammagamma_over_bhabha_all->GetBinContent(
548 hist_gammagamma_over_bhabha_all->GetXaxis()->FindBin("accept_gamma_gamma")) / hist_gammagamma_over_bhabha_all->GetBinContent(
549 hist_gammagamma_over_bhabha_all->GetXaxis()->FindBin("accept_bhabha_all"));
550 B2DEBUG(1, "gammagamma_over_bhabha_all:" << gammagamma_over_bhabha_all);
551 setEpicsPV("gammagamma_over_bhabha_all", gammagamma_over_bhabha_all);
552 }
553
554 }
555
556// update #tautau2trk/#bhabha_all
557 auto hist_tautau2trk_over_bhabha_all = getDelta("softwaretrigger", "skim", 0, true);// only if updated
558 if (hist_tautau2trk_over_bhabha_all) {
559 hist_tautau2trk_over_bhabha_all->Draw();
560 if (hist_tautau2trk_over_bhabha_all->GetBinContent(
561 hist_tautau2trk_over_bhabha_all->GetXaxis()->FindBin("accept_bhabha_all")) != 0) {
562 double tautau2trk_over_bhabha_all = 0.0;
563 tautau2trk_over_bhabha_all = hist_tautau2trk_over_bhabha_all->GetBinContent(
564 hist_tautau2trk_over_bhabha_all->GetXaxis()->FindBin("accept_tau_2trk")) / hist_tautau2trk_over_bhabha_all->GetBinContent(
565 hist_tautau2trk_over_bhabha_all->GetXaxis()->FindBin("accept_bhabha_all"));
566 B2DEBUG(1, "tautau2trk_over_bhabha_all:" << tautau2trk_over_bhabha_all);
567 setEpicsPV("tautau2trk_over_bhabha_all", tautau2trk_over_bhabha_all);
568 }
569
570 }
571
572// update #hadron/#bhabha_all
573 auto hist_hadron_over_bhabha_all = getDelta("softwaretrigger", "skim", 0, true);// only if updated
574 if (hist_hadron_over_bhabha_all) {
575 hist_hadron_over_bhabha_all->Draw();
576 if (hist_hadron_over_bhabha_all->GetBinContent(
577 hist_hadron_over_bhabha_all->GetXaxis()->FindBin("accept_bhabha_all")) != 0) {
578 double hadron_over_bhabha_all = 0.0;
579 hadron_over_bhabha_all = hist_hadron_over_bhabha_all->GetBinContent(
580 hist_hadron_over_bhabha_all->GetXaxis()->FindBin("accept_hadron")) / hist_hadron_over_bhabha_all->GetBinContent(
581 hist_hadron_over_bhabha_all->GetXaxis()->FindBin("accept_bhabha_all"));
582 B2DEBUG(1, "hadron_over_bhabha_all:" << hadron_over_bhabha_all);
583 setEpicsPV("hadron_over_bhabha_all", hadron_over_bhabha_all);
584 }
585
586 }
587
588 }
589
590 auto hist_nTSFHits_total = getDelta("TRGGRL", "h_wirecnt_sum", 0, true);
591 if (hist_nTSFHits_total) {
592 double mean = hist_nTSFHits_total->GetMean();
593 B2DEBUG(1, "CDCTRG_meanTSFHits_total:" << mean);
594 setEpicsPV("CDCTRG_meanTSFHits_total", mean);
595 }
596
597 auto hist_nTSFHits_clean = getDelta("TRGGRL", "h_wirecnt_sum_clean", 0, true);
598 if (hist_nTSFHits_clean) {
599 double mean = hist_nTSFHits_clean->GetMean();
600 B2DEBUG(1, "CDCTRG_meanTSFHits_clean:" << mean);
601 setEpicsPV("CDCTRG_meanTSFHits_clean", mean);
602
603 double tail = getThreshold(hist_nTSFHits_clean, 0.5, 0.02);
604 B2DEBUG(1, "CDCTRG_tailTSFHits_clean:" << tail);
605 setEpicsPV("CDCTRG_tailTSFHits_clean", tail);
606 }
607
608 auto hist_nTSFHits_injHER = getDelta("TRGGRL", "h_wirecnt_sum_injHER", 0, true);
609 if (hist_nTSFHits_injHER) {
610 double mean = hist_nTSFHits_injHER->GetMean();
611 B2DEBUG(1, "CDCTRG_meanTSFHits_injHER:" << mean);
612 setEpicsPV("CDCTRG_meanTSFHits_injHER", mean);
613 }
614
615 auto hist_nTSFHits_injLER = getDelta("TRGGRL", "h_wirecnt_sum_injLER", 0, true);
616 if (hist_nTSFHits_injLER) {
617 double mean = hist_nTSFHits_injLER->GetMean();
618 B2DEBUG(1, "CDCTRG_meanTSFHits_injLER:" << mean);
619 setEpicsPV("CDCTRG_meanTSFHits_injLER", mean);
620 }
621
622 auto hist_nTC_total = getDelta("TRG", "h_n_TChit_event", 0, true);
623 if (hist_nTC_total) {
624 double mean = hist_nTC_total->GetMean();
625 B2DEBUG(1, "ECLTRG_meanTC_total:" << mean);
626 setEpicsPV("ECLTRG_meanTC_total", mean);
627 }
628
629 auto hist_nTC_clean = getDelta("TRG", "h_n_TChit_clean", 0, true);
630 if (hist_nTC_clean) {
631 double mean = hist_nTC_clean->GetMean();
632 B2DEBUG(1, "ECLTRG_meanTC_clean:" << mean);
633 setEpicsPV("ECLTRG_meanTC_clean", mean);
634
635 double tail = getThreshold(hist_nTC_clean, 0.5);
636 B2DEBUG(1, "ECLTRG_tailTC_clean:" << tail);
637 setEpicsPV("ECLTRG_tailTC_clean", tail);
638 }
639
640 auto hist_nTC_injHER = getDelta("TRG", "h_n_TChit_injHER", 0, true);
641 if (hist_nTC_injHER) {
642 double mean = hist_nTC_injHER->GetMean();
643 B2DEBUG(1, "ECLTRG_meanTC_injHER:" << mean);
644 setEpicsPV("ECLTRG_meanTC_injHER", mean);
645 }
646
647 auto hist_nTC_injLER = getDelta("TRG", "h_n_TChit_injLER", 0, true);
648 if (hist_nTC_injLER) {
649 double mean = hist_nTC_injLER->GetMean();
650 B2DEBUG(1, "ECLTRG_meanTC_injLER:" << mean);
651 setEpicsPV("ECLTRG_meanTC_injLER", mean);
652 }
653
654
655 // Tag canvas as updated ONLY if things have changed.
656 UpdateCanvas(m_canvas->GetName(), hist != nullptr);
657
658 // this if left over from jsroot, may not be needed anymore (to check)
659 m_canvas->Update();
660 }
661
662}
663
665{
666 B2DEBUG(1, "DQMHistAnalysisTRGModule: terminate called");
667}
668
669
670double DQMHistAnalysisTRGModule::getThreshold(const TH1* hist, const double lower_bound, const double widthFraction)
671{
672 if (hist == nullptr) return 0.;
673
674 double movsum = 0;
675 int nbins = hist->GetNbinsX();
676 int width = nbins * widthFraction;
677 int num = 0;
678
679 if (width <= 1) width = 2;
680
681 int meanbin = hist->GetXaxis()->FindBin(hist->GetMean());
682
683 for (int i = meanbin - 1; 1 <= i && i <= meanbin - width; i--) {
684 num++;
685 movsum += hist->GetBinContent(i);
686 }
687
688 for (int i = meanbin; i < nbins; i++) {
689 int binIdx = i + 1;
690
691 if (num < width) {
692 movsum += hist->GetBinContent(binIdx);
693 num++;
694 } else {
695 movsum += hist->GetBinContent(binIdx);
696 movsum -= hist->GetBinContent(binIdx - width);
697 }
698
699 if (movsum / num < lower_bound) {
700 return hist->GetBinCenter(binIdx);
701 }
702 }
703 return hist->GetXaxis()->GetBinCenter(nbins);
704}
The base class for the histogram analysis module.
void addDeltaPar(const std::string &dirname, const std::string &histname, HistDelta::EDeltaType t, int p, unsigned int a=1)
Add Delta histogram parameters.
static const std::string & getRunType(void)
Get the Run Type.
TH1 * getDelta(const std::string &fullname, int n=0, bool onlyIfUpdated=true)
Get Delta histogram.
void setEpicsPV(std::string keyname, double value)
Write value to a EPICS PV.
int registerEpicsPV(std::string pvname, std::string keyname="")
EPICS related Functions.
void UpdateCanvas(std::string name, bool updated=true)
Mark canvas as updated (or not)
void terminate(void) override final
This method is called at the end of the event processing.
static double getThreshold(const TH1 *hist, const double lower_bound, const double widthFraction=0.01)
A utility function to find the location of the tail of histograms.
void initialize(void) override final
Initializer.
void endRun(void) override final
Called when run ends.
std::string m_pvPrefix
prefix for EPICS PVs
void doHistAnalysis()
Do the actual processing.
void beginRun(void) override final
Called when entering a new run.
void event(void) override final
This method is called for each event.
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:560
#define REG_MODULE(moduleName)
Register the given module (without 'Module' suffix) with the framework.
Definition: Module.h:650
Abstract base class for different kinds of events.
STL namespace.