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 B2DEBUG(1, "DQMHistAnalysisTRGModule: initialized.");
44
45 gROOT->cd();
46 m_canvas = new TCanvas("TRG/c_Test");
47 //comL1-GDLL1
48 addDeltaPar("TRGGDL", "hGDL_gdlL1TocomL1_all", HistDelta::c_Entries, 1000, 1); // update each 1000 entries
49 registerEpicsPV(m_pvPrefix + "comL1_GDLL1_mean", "comL1_GDLL1_mean");
50
51 //ECLTRG timing
52 addDeltaPar("EventT0DQMdir", "m_histEventT0_TOP_hadron_L1_ECLTRG", HistDelta::c_Entries, 1000, 1); // update each 1000 entries
53 registerEpicsPV(m_pvPrefix + "ECLTRG_timing_mean", "ECLTRG_timing_mean");
54
55 //CDCTRG event timing
56 addDeltaPar("EventT0DQMdir", "m_histEventT0_TOP_hadron_L1_CDCTRG", HistDelta::c_Entries, 1000, 1); // update each 1000 entries
57 registerEpicsPV(m_pvPrefix + "CDCTRG_timing_mean", "CDCTRG_timing_mean");
58
59 //TOPTRG event timing
60 addDeltaPar("EventT0DQMdir", "m_histEventT0_TOP_hadron_L1_TOPTRG", HistDelta::c_Entries, 1000, 1); // update each 1000 entries
61 registerEpicsPV(m_pvPrefix + "TOPTRG_timing_mean", "TOPTRG_timing_mean");
62
63 //ECLTRG_peak
64 addDeltaPar("TRGGRL", "h_ECLL1", HistDelta::c_Entries, 1000, 1); // update each 1000 entries
65 registerEpicsPV(m_pvPrefix + "ECLTRG_peak", "ECLTRG_peak");
66
67
68 //CDCTRG_2D_peak
69 addDeltaPar("TRGGRL", "h_CDCL1", HistDelta::c_Entries, 1000, 1); // update each 1000 entries
70 registerEpicsPV(m_pvPrefix + "CDCTRG_2D_peak", "CDCTRG_2D_peak");
71
72
73 //NN_peak
74 addDeltaPar("TRGGRL", "h_CDCNNL1", HistDelta::c_Entries, 1000, 1); // update each 1000 entries
75 registerEpicsPV(m_pvPrefix + "NN_peak", "NN_peak");
76
77 //CDCTRG_TSF_peak
78 addDeltaPar("TRGGRL", "h_TSFL1", HistDelta::c_Entries, 1000, 1); // update each 1000 entries
79 registerEpicsPV(m_pvPrefix + "CDCTRG_TSF_peak", "CDCTRG_TSF_peak");
80
81 //KLMTRG_peak
82 addDeltaPar("TRGGRL", "h_KLML1", HistDelta::c_Entries, 1000, 1); // update each 1000 entries
83 registerEpicsPV(m_pvPrefix + "KLMTRG_peak", "KLMTRG_peak");
84
85 //TOPTRG_peak
86 addDeltaPar("TRGGRL", "h_TOPL1", HistDelta::c_Entries, 1000, 1); // update each 1000 entries
87 registerEpicsPV(m_pvPrefix + "TOPTRG_peak", "TOPTRG_peak");
88
89 //CDCTRG nTSFHits total
90 addDeltaPar("TRGGRL", "h_wirecnt_sum", HistDelta::c_Entries, 1000, 1);
91 registerEpicsPV(m_pvPrefix + "CDCTRG_meanTSFHits_total", "CDCTRG_meanTSFHits_total");
92
93 //CDCTRG nTSFHits Injection BG Clean region
94 addDeltaPar("TRGGRL", "h_wirecnt_sum_clean", HistDelta::c_Entries, 1000, 1);
95 registerEpicsPV(m_pvPrefix + "CDCTRG_meanTSFHits_clean", "CDCTRG_meanTSFHits_clean"); // Mean value for the distribution of N(TSF)
96 registerEpicsPV(m_pvPrefix + "CDCTRG_tailTSFHits_clean",
97 "CDCTRG_tailTSFHits_clean"); // Tail position for the distribution of N(TSF)
98
99 //CDCTRG nTSFHits HER Injection region
100 addDeltaPar("TRGGRL", "h_wirecnt_sum_injHER", HistDelta::c_Entries, 1000, 1);
101 registerEpicsPV(m_pvPrefix + "CDCTRG_meanTSFHits_injHER", "CDCTRG_meanTSFHits_injHER");
102
103 //CDCTRG nTSFHits LER Injection region
104 addDeltaPar("TRGGRL", "h_wirecnt_sum_injLER", HistDelta::c_Entries, 1000, 1);
105 registerEpicsPV(m_pvPrefix + "CDCTRG_meanTSFHits_injLER", "CDCTRG_meanTSFHits_injLER");
106
107 //ecl timing –cdc timing
108 addDeltaPar("TRGGDL", "hGDL_ns_cdcToecl_all", HistDelta::c_Entries, 1000, 1); // update each 1000 entries
109 registerEpicsPV(m_pvPrefix + "ecltiming_cdctiming", "ecltiming_cdctiming");
110
111 //top timing – ecl timing
112 addDeltaPar("TRGGDL", "hGDL_ns_topToecl_all", HistDelta::c_Entries, 1000, 1); // update each 1000 entries
113 registerEpicsPV(m_pvPrefix + "toptiming_ecltiming", "toptiming_ecltiming");
114
115 // top timing – cdc timing
116 addDeltaPar("TRGGDL", "hGDL_ns_topTocdc_all", HistDelta::c_Entries, 1000, 1); // update each 1000 entries
117 registerEpicsPV(m_pvPrefix + "toptiming_cdctiming", "toptiming_cdctiming");
118
119 // gdll1-ecl timing
120 addDeltaPar("TRGGDL", "hGDL_eclTogdlL1_all", HistDelta::c_Entries, 1000, 1); // update each 1000 entries
121 registerEpicsPV(m_pvPrefix + "gdll1_ecltiming", "gdll1_ecltiming");
122
123 //gdll1-cdctiming
124 addDeltaPar("TRGGDL", "hGDL_cdcTogdlL1_all", HistDelta::c_Entries, 1000, 1); // update each 1000 entries
125 registerEpicsPV(m_pvPrefix + "gdll1_cdctiming", "gdll1_cdctiming");
126
127 //gdll1-toptiming
128 addDeltaPar("TRGGDL", "hGDL_topTogdlL1_all", HistDelta::c_Entries, 1000, 1); // update each 1000 entries
129 registerEpicsPV(m_pvPrefix + "gdll1_toptiming", "gdll1_toptiming");
130
131 //barrel klm latency
132 addDeltaPar("TRGGDL", "hGDL_itd_klm_hit_rise_all", HistDelta::c_Entries, 1000, 1); // update each 1000 entries
133 registerEpicsPV(m_pvPrefix + "barrel_klm_latency", "barrel_klm_latency");
134
135 //endcap klm latency
136 addDeltaPar("TRGGDL", "hGDL_itd_eklm_hit_rise_all", HistDelta::c_Entries, 1000, 1); // update each 1000 entries
137 registerEpicsPV(m_pvPrefix + "endcap_klm_latency", "endcap_klm_latency");
138
139 //hadronb2_over_bhabha_all
140 addDeltaPar("softwaretrigger", "skim", HistDelta::c_Entries, 1000000, 1); // update each 1000000 entries
141 registerEpicsPV(m_pvPrefix + "hadronb2_over_bhabha_all", "hadronb2_over_bhabha_all");
142
143 //mumu2trk_over_bhabha_all
144 registerEpicsPV(m_pvPrefix + "mumu2trk_over_bhabha_all", "mumu2trk_over_bhabha_all");
145
146 //hadronb2_over_mumu2trk
147 registerEpicsPV(m_pvPrefix + "hadronb2_over_mumu2trk", "hadronb2_over_mumu2trk");
148
149 //ECLTRG_deadch
150 addDeltaPar("TRG", "h_TCId", HistDelta::c_Entries, 10000, 1); // update each 10000 entries
151 registerEpicsPV(m_pvPrefix + "ECLTRG_deadch", "ECLTRG_deadch");
152
153 //ECLTRG N(TC) total
154 addDeltaPar("TRG", "h_n_TChit_event_clkgrp", HistDelta::c_Entries, 10000, 1); // update each 10000 entries
155 registerEpicsPV(m_pvPrefix + "ECLTRG_meanTC_total", "ECLTRG_meanTC_total");
156
157 //ECLTRG N(TC) clean
158 addDeltaPar("TRG", "h_n_TChit_clean_clkgrp", HistDelta::c_Entries, 10000, 1); // update each 10000 entries
159 registerEpicsPV(m_pvPrefix + "ECLTRG_meanTC_clean", "ECLTRG_meanTC_clean"); // Mean value for the distribution of N(TC)
160 registerEpicsPV(m_pvPrefix + "ECLTRG_tailTC_clean", "ECLTRG_tailTC_clean"); // Tail position for the distribution of N(TC)
161
162 //ECLTRG N(TC) HER Injection region
163 addDeltaPar("TRG", "h_n_TChit_injHER_clkgrp", HistDelta::c_Entries, 10000, 1); // update each 10000 entries
164 registerEpicsPV(m_pvPrefix + "ECLTRG_meanTC_injHER", "ECLTRG_meanTC_injHER");
165
166 //ECLTRG N(TC) LER Injection region
167 addDeltaPar("TRG", "h_n_TChit_injLER_clkgrp", HistDelta::c_Entries, 10000, 1); // update each 10000 entries
168 registerEpicsPV(m_pvPrefix + "ECLTRG_meanTC_injLER", "ECLTRG_meanTC_injLER");
169
170 //ECLTRG N(TC) total from the forward endcap
171 addDeltaPar("TRG", "h_n_TChit_FWD_event_clkgrp", HistDelta::c_Entries, 10000, 1); // update each 10000 entries
172 registerEpicsPV(m_pvPrefix + "ECLTRG_meanTC_FWD_total", "ECLTRG_meanTC_FWD_total");
173
174 //ECLTRG N(TC) clean from the forward endcap
175 addDeltaPar("TRG", "h_n_TChit_FWD_clean_clkgrp", HistDelta::c_Entries, 10000, 1); // update each 10000 entries
176 registerEpicsPV(m_pvPrefix + "ECLTRG_meanTC_FWD_clean",
177 "ECLTRG_meanTC_FWD_clean"); // Mean value for the distribution of N(TC) from the forward
178 registerEpicsPV(m_pvPrefix + "ECLTRG_tailTC_FWD_clean",
179 "ECLTRG_tailTC_FWD_clean"); // Tail position for the distribution of N(TC) from the forward
180
181 //ECLTRG N(TC) HER Injection region from the forward endcap
182 addDeltaPar("TRG", "h_n_TChit_FWD_injHER_clkgrp", HistDelta::c_Entries, 10000, 1); // update each 10000 entries
183 registerEpicsPV(m_pvPrefix + "ECLTRG_meanTC_FWD_injHER", "ECLTRG_meanTC_FWD_injHER");
184
185 //ECLTRG N(TC) LER Injection region from the forward endcap
186 addDeltaPar("TRG", "h_n_TChit_FWD_injLER_clkgrp", HistDelta::c_Entries, 10000, 1); // update each 10000 entries
187 registerEpicsPV(m_pvPrefix + "ECLTRG_meanTC_FWD_injLER", "ECLTRG_meanTC_FWD_injLER");
188
189 //ECLTRG N(TC) total from the barrel
190 addDeltaPar("TRG", "h_n_TChit_BRL_event_clkgrp", HistDelta::c_Entries, 10000, 1); // update each 10000 entries
191 registerEpicsPV(m_pvPrefix + "ECLTRG_meanTC_BRL_total", "ECLTRG_meanTC_BRL_total");
192
193 //ECLTRG N(TC) clean from the barrel
194 addDeltaPar("TRG", "h_n_TChit_BRL_clean_clkgrp", HistDelta::c_Entries, 10000, 1); // update each 10000 entries
195 registerEpicsPV(m_pvPrefix + "ECLTRG_meanTC_BRL_clean",
196 "ECLTRG_meanTC_BRL_clean"); // Mean value for the distribution of N(TC) from the barrel
197 registerEpicsPV(m_pvPrefix + "ECLTRG_tailTC_BRL_clean",
198 "ECLTRG_tailTC_BRL_clean"); // Tail position for the distribution of N(TC) from the barrel
199
200 //ECLTRG N(TC) HER Injection region from the barrel
201 addDeltaPar("TRG", "h_n_TChit_BRL_injHER_clkgrp", HistDelta::c_Entries, 10000, 1); // update each 10000 entries
202 registerEpicsPV(m_pvPrefix + "ECLTRG_meanTC_BRL_injHER", "ECLTRG_meanTC_BRL_injHER");
203
204 //ECLTRG N(TC) LER Injection region from the barrel
205 addDeltaPar("TRG", "h_n_TChit_BRL_injLER_clkgrp", HistDelta::c_Entries, 10000, 1); // update each 10000 entries
206 registerEpicsPV(m_pvPrefix + "ECLTRG_meanTC_BRL_injLER", "ECLTRG_meanTC_BRL_injLER");
207
208 //ECLTRG N(TC) total from the backward endcap
209 addDeltaPar("TRG", "h_n_TChit_BWD_event_clkgrp", HistDelta::c_Entries, 10000, 1); // update each 10000 entries
210 registerEpicsPV(m_pvPrefix + "ECLTRG_meanTC_BWD_total", "ECLTRG_meanTC_BWD_total");
211
212 //ECLTRG N(TC) clean from the backward endcap
213 addDeltaPar("TRG", "h_n_TChit_BWD_clean_clkgrp", HistDelta::c_Entries, 10000, 1); // update each 10000 entries
214 registerEpicsPV(m_pvPrefix + "ECLTRG_meanTC_BWD_clean",
215 "ECLTRG_meanTC_BWD_clean"); // Mean value for the distribution of N(TC) from the backward
216 registerEpicsPV(m_pvPrefix + "ECLTRG_tailTC_BWD_clean",
217 "ECLTRG_tailTC_BWD_clean"); // Tail position for the distribution of N(TC) from the backward
218
219 //ECLTRG N(TC) HER Injection region from the backward endcap
220 addDeltaPar("TRG", "h_n_TChit_BWD_injHER_clkgrp", HistDelta::c_Entries, 10000, 1); // update each 10000 entries
221 registerEpicsPV(m_pvPrefix + "ECLTRG_meanTC_BWD_injHER", "ECLTRG_meanTC_BWD_injHER");
222
223 //ECLTRG N(TC) LER Injection region from the backward endcap
224 addDeltaPar("TRG", "h_n_TChit_BWD_injLER_clkgrp", HistDelta::c_Entries, 10000, 1); // update each 10000 entries
225 registerEpicsPV(m_pvPrefix + "ECLTRG_meanTC_BWD_injLER", "ECLTRG_meanTC_BWD_injLER");
226
227 //CDCTRG_deadch
228// m_canvas_CDCTRG_deadch = new TCanvas("CDCTRG_deadch");
229 addDeltaPar("TRGCDCTNN", "NeuroHWInTSID", HistDelta::c_Entries, 100000, 1); // update each 100000 entries
230 registerEpicsPV(m_pvPrefix + "CDCTRG_deadch", "CDCTRG_deadch");
231
232 //hadronb2_over_bhabha_trk_ecl
233 registerEpicsPV(m_pvPrefix + "hadronb2_over_bhabha_trk_ecl", "hadronb2_over_bhabha_trk_ecl");
234
235 //mumu2trk_over_bhabha_trk_ecl
236 registerEpicsPV(m_pvPrefix + "mumu2trk_over_bhabha_trk_ecl", "mumu2trk_over_bhabha_trk_ecl");
237
238 //mumu_tight_over_bhabha_all
239 registerEpicsPV(m_pvPrefix + "mumu_tight_over_bhabha_all", "mumu_tight_over_bhabha_all");
240
241 //gammagamma_over_bhabha_all
242 registerEpicsPV(m_pvPrefix + "gammagamma_over_bhabha_all", "gammagamma_over_bhabha_all");
243
244 //tautau2trk_over_bhabha_all
245 registerEpicsPV(m_pvPrefix + "tautau2trk_over_bhabha_all", "tautau2trk_over_bhabha_all");
246
247 //hadron_over_bhabha_all
248 registerEpicsPV(m_pvPrefix + "hadron_over_bhabha_all", "hadron_over_bhabha_all");
249
250 //mumu_tight_over_bhabha_trk_ecl
251 registerEpicsPV(m_pvPrefix + "mumu_tight_over_bhabha_trk_ecl", "mumu_tight_over_bhabha_trk_ecl");
252
253 //gammagamma_over_bhabha_trk_ecl
254 registerEpicsPV(m_pvPrefix + "gammagamma_over_bhabha_trk_ecl", "gammagamma_over_bhabha_trk_ecl");
255
256 //tautau2trk_over_bhabha_trk_ecl
257 registerEpicsPV(m_pvPrefix + "tautau2trk_over_bhabha_trk_ecl", "tautau2trk_over_bhabha_trk_ecl");
258
259 //hadron_over_bhabha_trk_ecl
260 registerEpicsPV(m_pvPrefix + "hadron_over_bhabha_trk_ecl", "hadron_over_bhabha_trk_ecl");
261}
262
264{
265 B2DEBUG(1, "DQMHistAnalysisTRGModule: beginRun called.");
266}
267
269{
270 B2DEBUG(1, "DQMHistAnalysisTRGModule: endRun called.");
271}
272
274{
275 B2DEBUG(1, "DQMHistAnalysisTRGModule: event called.");
277}
278
280{
281 m_canvas->Clear();
282 m_canvas->cd(0);
283
284 bool m_IsPhysicsRun = (getRunType() == "physics") || (getRunType() == "cosmic") || (getRunType() == "debug");
285 if (m_IsPhysicsRun == true) {
286
287 //update comL1-GDLL1
288 auto hist_comL1_GDLL1 = getDelta("TRGGDL", "hGDL_gdlL1TocomL1_all", 0, true);// only if updated
289 if (hist_comL1_GDLL1) {
290 double comL1_GDLL1_mean = 0.0;
291 hist_comL1_GDLL1->Draw();
292 comL1_GDLL1_mean = hist_comL1_GDLL1->GetMean();
293 B2DEBUG(1, "comL1_GDLL1_mean:" << comL1_GDLL1_mean);
294 setEpicsPV("comL1_GDLL1_mean", comL1_GDLL1_mean);
295 }
296
297 //update ECLTRG timing
298 auto hist = getDelta("EventT0DQMdir", "m_histEventT0_TOP_hadron_L1_ECLTRG", 0, true);// only if updated
299 if (hist) {
300 double ECLTRG_timing_mean = 0.0;
301 hist->Draw();
302 ECLTRG_timing_mean = hist->GetMean();
303 B2DEBUG(1, "ECLTRG_timing_mean:" << ECLTRG_timing_mean);
304 setEpicsPV("ECLTRG_timing_mean", ECLTRG_timing_mean);
305 }
306
307
308 //update CDCTRG timing
309 auto histCDCTRG = getDelta("EventT0DQMdir", "m_histEventT0_TOP_hadron_L1_CDCTRG", 0, true);// only if updated
310 if (histCDCTRG) {
311 double CDCTRG_timing_mean = 0.0;
312 histCDCTRG->Draw();
313 CDCTRG_timing_mean = histCDCTRG->GetMean();
314 B2DEBUG(1, "CDCTRG_timing_mean:" << CDCTRG_timing_mean);
315 setEpicsPV("CDCTRG_timing_mean", CDCTRG_timing_mean);
316 }
317
318 //update TOPTRG timing
319 auto histTOPTRG = getDelta("EventT0DQMdir", "m_histEventT0_TOP_hadron_L1_TOPTRG", 0, true);// only if updated
320 if (histTOPTRG) {
321 double TOPTRG_timing_mean = 0.0;
322 histTOPTRG->Draw();
323 TOPTRG_timing_mean = histTOPTRG->GetMean();
324 B2DEBUG(1, "TOPTRG_timing_mean:" << TOPTRG_timing_mean);
325 setEpicsPV("TOPTRG_timing_mean", TOPTRG_timing_mean);
326 }
327
328// update ECLTRG peak
329 auto hist_ECLTRG_peak = getDelta("TRGGRL", "h_ECLL1", 0, true);// only if updated
330 if (hist_ECLTRG_peak) {
331// TH1F* hist_ECLTRG_clone = (TH1F*)hist_ECLTRG_peak->Clone();//Clone the histogram.
332 double ECLTRG_peak = 0.0;
333 hist_ECLTRG_peak->Draw();
334// int bin_ECLTRG_peak = hist_ECLTRG_peak->GetMaximumBin();
335// ECLTRG_peak = hist_ECLTRG_peak->GetXaxis()->GetBinCenter(bin_ECLTRG_peak);
336 ECLTRG_peak = hist_ECLTRG_peak->GetMean();
337
338 /*
339 while(ECLTRG_peak<-1310){
340 hist_ECLTRG_clone->SetBinContent(bin_ECLTRG_peak, 0);
341 bin_ECLTRG_peak = hist_ECLTRG_clone->GetMaximumBin();
342 ECLTRG_peak = hist_ECLTRG_clone->GetXaxis()->GetBinCenter(bin_ECLTRG_peak);
343 }
344 */
345
346 B2DEBUG(1, "ECLTRG_peak:" << ECLTRG_peak);
347 setEpicsPV("ECLTRG_peak", ECLTRG_peak);
348// delete hist_ECLTRG_clone;
349 }
350
351// update ECLTRG deadch
352 auto hist_ECLTRG_deadch = getDelta("TRG", "h_TCId", 0, true);// only if updated
353 if (hist_ECLTRG_deadch) {
354 hist_ECLTRG_deadch->Draw();
355 int numberOfBins = hist_ECLTRG_deadch->GetNbinsX();
356 double average = 0;
357 for (int i = 80; i < 512; i++) {
358 average += hist_ECLTRG_deadch->GetBinContent(i);
359 }
360 average = 1.0 * average / (512 - 80);
361 int ECLTRG_deadch = 0;
362// for (int i = 2; i <= numberOfBins - 1; i++) {
363// if (hist_ECLTRG_deadch->GetBinContent(i) <= 0.01 * hist_ECLTRG_deadch->GetMaximum()) { ECLTRG_deadch += 1; }
364// }
365 for (int i = 2; i <= numberOfBins - 1; i++) {
366 if (hist_ECLTRG_deadch->GetBinContent(i) <= 0.01 * average) { ECLTRG_deadch += 1; }
367 }
368 B2DEBUG(1, "ECLTRG_deadch:" << ECLTRG_deadch);
369 setEpicsPV("ECLTRG_deadch", ECLTRG_deadch);
370 }
371
372// update TOPTRG deadch
373 auto hist_TOPTRG_deadch = getDelta("TRGGRL", "h_slot_TOP", 0, true);// only if updated
374 if (hist_TOPTRG_deadch) {
375 hist_TOPTRG_deadch->Draw();
376 int numberOfBins = hist_TOPTRG_deadch->GetNbinsX();
377 int TOPTRG_deadch = 0;
378 for (int i = 2; i <= numberOfBins - 1; i++) {
379 if (hist_TOPTRG_deadch->GetBinContent(i) <= 0.01 * hist_TOPTRG_deadch->GetMaximum()) { TOPTRG_deadch += 1; }
380 }
381 B2DEBUG(1, "TOPTRG_deadch:" << TOPTRG_deadch);
382 setEpicsPV("TOPTRG_deadch", TOPTRG_deadch);
383 }
384
385// m_canvas_CDCTRG_2D_peak->Clear();
386// m_canvas_CDCTRG_2D_peak->cd(0);
387// update CDCTRG 2D peak
388 auto hist_CDCTRG_2D_peak = getDelta("TRGGRL", "h_CDCL1", 0, true);// only if updated
389 if (hist_CDCTRG_2D_peak) {
390 double CDCTRG_2D_peak = 0.0;
391 hist_CDCTRG_2D_peak->Draw();
392 int bin_CDCTRG_2D_peak = hist_CDCTRG_2D_peak->GetMaximumBin();
393 CDCTRG_2D_peak = hist_CDCTRG_2D_peak->GetXaxis()->GetBinCenter(bin_CDCTRG_2D_peak);
394 B2DEBUG(1, "CDCTRG_2D_peak:" << CDCTRG_2D_peak);
395 setEpicsPV("CDCTRG_2D_peak", CDCTRG_2D_peak);
396
397 }
398
399// update CDCTRG NN peak
400 auto hist_NN_peak = getDelta("TRGGRL", "h_CDCNNL1", 0, true);// only if updated
401 if (hist_NN_peak) {
402 double NN_peak = 0.0;
403 hist_NN_peak->Draw();
404 int bin_NN_peak = hist_NN_peak->GetMaximumBin();
405 NN_peak = hist_NN_peak->GetXaxis()->GetBinCenter(bin_NN_peak);
406 B2DEBUG(1, "NN_peak:" << NN_peak);
407 setEpicsPV("NN_peak", NN_peak);
408
409 }
410
411// update CDCTRG TSF
412 auto hist_CDCTRG_TSF_peak = getDelta("TRGGRL", "h_TSFL1", 0, true);// only if updated
413 if (hist_CDCTRG_TSF_peak) {
414 double CDCTRG_TSF_peak = 0.0;
415 hist_CDCTRG_TSF_peak->Draw();
416 int bin_CDCTRG_TSF_peak = hist_CDCTRG_TSF_peak->GetMaximumBin();
417 CDCTRG_TSF_peak = hist_CDCTRG_TSF_peak->GetXaxis()->GetBinCenter(bin_CDCTRG_TSF_peak);
418 B2DEBUG(1, "CDCTRG_TSF_peak:" << CDCTRG_TSF_peak);
419 setEpicsPV("CDCTRG_TSF_peak", CDCTRG_TSF_peak);
420
421 }
422
423// update CDCTRG deadch
424 auto hist_CDCTRG_deadch = getDelta("TRGCDCTNN", "NeuroHWInTSID", 0, true);// only if updated
425 if (hist_CDCTRG_deadch) {
426 hist_CDCTRG_deadch->Draw();
427 int numberOfBins = hist_CDCTRG_deadch->GetNbinsX();
428// int YMax = hist_CDCTRG_deadch->GetBinContent(hist_CDCTRG_deadch->GetMaximumBin());
429 int CDCTRG_deadch = 0;
430 for (int i = 3; i <= numberOfBins; i++) {
431 if (hist_CDCTRG_deadch->GetBinContent(i) <= 0.01 * hist_CDCTRG_deadch->GetMaximum()) {CDCTRG_deadch += 1;}
432// if (hist_CDCTRG_deadch->GetBinContent(i) <= 0) {CDCTRG_deadch += 1;}
433 }
434 B2DEBUG(1, "CDCTRG_deadch:" << CDCTRG_deadch);
435 setEpicsPV("CDCTRG_deadch", CDCTRG_deadch);
436 }
437
438// update KLMTRG
439 auto hist_KLMTRG_peak = getDelta("TRGGRL", "h_KLML1", 0, true);// only if updated
440 if (hist_KLMTRG_peak) {
441 double KLMTRG_peak = 0.0;
442 hist_KLMTRG_peak->Draw();
443 int bin_KLMTRG_peak = hist_KLMTRG_peak->GetMaximumBin();
444 KLMTRG_peak = hist_KLMTRG_peak->GetXaxis()->GetBinCenter(bin_KLMTRG_peak);
445 B2DEBUG(1, "KLMTRG_peak:" << KLMTRG_peak);
446 setEpicsPV("KLMTRG_peak", KLMTRG_peak);
447
448 }
449
450// update TOPTRG
451 auto hist_TOPTRG_peak = getDelta("TRGGRL", "h_TOPL1", 0, true);// only if updated
452 if (hist_TOPTRG_peak) {
453 double TOPTRG_peak = 0.0;
454 hist_TOPTRG_peak->Draw();
455 int bin_TOPTRG_peak = hist_TOPTRG_peak->GetMaximumBin();
456 TOPTRG_peak = hist_TOPTRG_peak->GetXaxis()->GetBinCenter(bin_TOPTRG_peak);
457 B2DEBUG(1, "TOPTRG_peak:" << TOPTRG_peak);
458 setEpicsPV("TOPTRG_peak", TOPTRG_peak);
459
460 }
461
462// update ecltiming_cdctiming
463 auto hist_ecltiming_cdctiming = getDelta("TRGGDL", "hGDL_ns_cdcToecl_all", 0, true);// only if updated
464 if (hist_ecltiming_cdctiming) {
465 double ecltiming_cdctiming = 0.0;
466 hist_ecltiming_cdctiming->Draw();
467 int bin_ecltiming_cdctiming = hist_ecltiming_cdctiming->GetMaximumBin();
468 ecltiming_cdctiming = hist_ecltiming_cdctiming->GetXaxis()->GetBinCenter(bin_ecltiming_cdctiming);
469 B2DEBUG(1, "ecltiming_cdctiming:" << ecltiming_cdctiming);
470 setEpicsPV("ecltiming_cdctiming", ecltiming_cdctiming);//Peak
471 }
472
473// update toptiming_ecltiming
474 auto hist_toptiming_ecltiming = getDelta("TRGGDL", "hGDL_ns_topToecl_all", 0, true);// only if updated
475 if (hist_toptiming_ecltiming) {
476 double toptiming_ecltiming = 0.0;
477 hist_toptiming_ecltiming->Draw();
478 int bin_toptiming_ecltiming = hist_toptiming_ecltiming->GetMaximumBin();
479 toptiming_ecltiming = hist_toptiming_ecltiming->GetXaxis()->GetBinCenter(bin_toptiming_ecltiming);
480 B2DEBUG(1, "toptiming_ecltiming:" << toptiming_ecltiming);
481 setEpicsPV("toptiming_ecltiming", toptiming_ecltiming);//Peak
482 }
483
484// update toptiming_cdctiming
485 auto hist_toptiming_cdctiming = getDelta("TRGGDL", "hGDL_ns_topTocdc_all", 0, true);// only if updated
486 if (hist_toptiming_cdctiming) {
487 double toptiming_cdctiming = 0.0;
488 hist_toptiming_cdctiming->Draw();
489 int bin_toptiming_cdctiming = hist_toptiming_cdctiming->GetMaximumBin();
490 toptiming_cdctiming = hist_toptiming_cdctiming->GetXaxis()->GetBinCenter(bin_toptiming_cdctiming);
491 B2DEBUG(1, "toptiming_cdctiming:" << toptiming_cdctiming);
492 setEpicsPV("toptiming_cdctiming", toptiming_cdctiming);//Peak
493 }
494
495// update gdll1_ecltiming
496 auto hist_gdll1_ecltiming = getDelta("TRGGDL", "hGDL_eclTogdlL1_all", 0, true);// only if updated
497 if (hist_gdll1_ecltiming) {
498 double gdll1_ecltiming = 0.0;
499 hist_gdll1_ecltiming->Draw();
500 int bin_gdll1_ecltiming = hist_gdll1_ecltiming->GetMaximumBin();
501 gdll1_ecltiming = hist_gdll1_ecltiming->GetXaxis()->GetBinCenter(bin_gdll1_ecltiming);
502 B2DEBUG(1, "gdll1_ecltiming:" << gdll1_ecltiming);
503 setEpicsPV("gdll1_ecltiming", gdll1_ecltiming);//Peak
504 }
505
506// update gdll1_cdctiming
507 auto hist_gdll1_cdctiming = getDelta("TRGGDL", "hGDL_cdcTogdlL1_all", 0, true);// only if updated
508 if (hist_gdll1_cdctiming) {
509 double gdll1_cdctiming = 0.0;
510 hist_gdll1_cdctiming->Draw();
511 int bin_gdll1_cdctiming = hist_gdll1_cdctiming->GetMaximumBin();
512 gdll1_cdctiming = hist_gdll1_cdctiming->GetXaxis()->GetBinCenter(bin_gdll1_cdctiming);
513 B2DEBUG(1, "gdll1_cdctiming:" << gdll1_cdctiming);
514 setEpicsPV("gdll1_cdctiming", gdll1_cdctiming);//Peak
515 }
516
517// update gdll1_toptiming
518 auto hist_gdll1_toptiming = getDelta("TRGGDL", "hGDL_topTogdlL1_all", 0, true);// only if updated
519 if (hist_gdll1_toptiming) {
520 double gdll1_toptiming = 0.0;
521 hist_gdll1_toptiming->Draw();
522 int bin_gdll1_toptiming = hist_gdll1_toptiming->GetMaximumBin();
523 gdll1_toptiming = hist_gdll1_toptiming->GetXaxis()->GetBinCenter(bin_gdll1_toptiming);
524 B2DEBUG(1, "gdll1_toptiming:" << gdll1_toptiming);
525 setEpicsPV("gdll1_toptiming", gdll1_toptiming);//Peak
526 }
527
528// update barrel_klm_latency
529 auto hist_barrel_klm_latency = getDelta("TRGGDL", "hGDL_itd_klm_hit_rise_all", 0, true);// only if updated
530 if (hist_barrel_klm_latency) {
531 double barrel_klm_latency = 0.0;
532 hist_barrel_klm_latency->Draw();
533 int bin_barrel_klm_latency = hist_barrel_klm_latency->GetMaximumBin();
534 barrel_klm_latency = hist_barrel_klm_latency->GetXaxis()->GetBinCenter(bin_barrel_klm_latency);
535 B2DEBUG(1, "barrel_klm_latency:" << barrel_klm_latency);
536 setEpicsPV("barrel_klm_latency", barrel_klm_latency);//Peak
537 }
538
539// update endcap_klm_latency
540 auto hist_endcap_klm_latency = getDelta("TRGGDL", "hGDL_itd_eklm_hit_rise_all", 0, true);// only if updated
541 if (hist_endcap_klm_latency) {
542 double endcap_klm_latency = 0.0;
543 hist_endcap_klm_latency->Draw();
544 int bin_endcap_klm_latency = hist_endcap_klm_latency->GetMaximumBin();
545 endcap_klm_latency = hist_endcap_klm_latency->GetXaxis()->GetBinCenter(bin_endcap_klm_latency);
546 B2DEBUG(1, "endcap_klm_latency:" << endcap_klm_latency);
547 setEpicsPV("endcap_klm_latency", endcap_klm_latency);//Peak
548 }
549
550 bool m_IsPhysicsRun_ratio = (getRunType() == "physics");
551 if (m_IsPhysicsRun_ratio == true) {
552
553 //Ratios
554 auto hist_software_trigger = getDelta("softwaretrigger", "skim", 0, true);// only if updated
555
556 if (hist_software_trigger) {
557 hist_software_trigger->Draw();
558 // update #hadronb2/#bhabha_all
559 if (hist_software_trigger->GetBinContent(
560 hist_software_trigger->GetXaxis()->FindBin("accept_bhabha_all")) != 0) {
561 double hadronb2_over_bhabha_all = 0.0;
562 hadronb2_over_bhabha_all = hist_software_trigger->GetBinContent(
563 hist_software_trigger->GetXaxis()->FindBin("accept_hadronb2")) / hist_software_trigger->GetBinContent(
564 hist_software_trigger->GetXaxis()->FindBin("accept_bhabha_all"));
565
566 B2DEBUG(1, "hadronb2_over_bhabha_all:" << hadronb2_over_bhabha_all);
567 setEpicsPV("hadronb2_over_bhabha_all", hadronb2_over_bhabha_all);
568 }
569 // update #mumu2trk/#bhabha_all
570 if (hist_software_trigger->GetBinContent(
571 hist_software_trigger->GetXaxis()->FindBin("accept_bhabha_all")) != 0) {
572 double mumu2trk_over_bhabha_all = 0.0;
573 mumu2trk_over_bhabha_all = hist_software_trigger->GetBinContent(
574 hist_software_trigger->GetXaxis()->FindBin("accept_mumu_2trk")) / hist_software_trigger->GetBinContent(
575 hist_software_trigger->GetXaxis()->FindBin("accept_bhabha_all"));
576 B2DEBUG(1, "mumu2trk_over_bhabha_all:" << mumu2trk_over_bhabha_all);
577 setEpicsPV("mumu2trk_over_bhabha_all", mumu2trk_over_bhabha_all);
578 }
579 // update #hadronb2/#bhabha_trk_ecl
580 if (hist_software_trigger->GetBinContent(
581 hist_software_trigger->GetXaxis()->FindBin("accept_bhabha_trk_ecl")) != 0) {
582 double hadronb2_over_bhabha_trk_ecl = 0.0;
583 hadronb2_over_bhabha_trk_ecl = hist_software_trigger->GetBinContent(
584 hist_software_trigger->GetXaxis()->FindBin("accept_hadronb2")) / hist_software_trigger->GetBinContent(
585 hist_software_trigger->GetXaxis()->FindBin("accept_bhabha_trk_ecl"));
586
587 B2DEBUG(1, "hadronb2_over_bhabha_trk_ecl:" << hadronb2_over_bhabha_trk_ecl);
588 setEpicsPV("hadronb2_over_bhabha_trk_ecl", hadronb2_over_bhabha_trk_ecl);
589 }
590 // update #mumu2trk/#bhabha_trk_ecl
591 if (hist_software_trigger->GetBinContent(
592 hist_software_trigger->GetXaxis()->FindBin("accept_bhabha_trk_ecl")) != 0) {
593 double mumu2trk_over_bhabha_trk_ecl = 0.0;
594 mumu2trk_over_bhabha_trk_ecl = hist_software_trigger->GetBinContent(
595 hist_software_trigger->GetXaxis()->FindBin("accept_mumu_2trk")) / hist_software_trigger->GetBinContent(
596 hist_software_trigger->GetXaxis()->FindBin("accept_bhabha_trk_ecl"));
597 B2DEBUG(1, "mumu2trk_over_bhabha_trk_ecl:" << mumu2trk_over_bhabha_trk_ecl);
598 setEpicsPV("mumu2trk_over_bhabha_trk_ecl", mumu2trk_over_bhabha_trk_ecl);
599 }
600 // update #hadronb2/#mumu2trk
601 if (hist_software_trigger->GetBinContent(
602 hist_software_trigger->GetXaxis()->FindBin("accept_mumu_2trk")) != 0) {
603 double hadronb2_over_mumu2trk = 0.0;
604 hadronb2_over_mumu2trk = hist_software_trigger->GetBinContent(
605 hist_software_trigger->GetXaxis()->FindBin("accept_hadronb2")) / hist_software_trigger->GetBinContent(
606 hist_software_trigger->GetXaxis()->FindBin("accept_mumu_2trk"));
607 B2DEBUG(1, "hadronb2_over_mumu2trk:" << hadronb2_over_mumu2trk);
608 setEpicsPV("hadronb2_over_mumu2trk", hadronb2_over_mumu2trk);
609 }
610 // update #mumu_tight/#bhabha_all
611 if (hist_software_trigger->GetBinContent(
612 hist_software_trigger->GetXaxis()->FindBin("accept_bhabha_all")) != 0) {
613 double mumu_tight_over_bhabha_all = 0.0;
614 mumu_tight_over_bhabha_all = hist_software_trigger->GetBinContent(
615 hist_software_trigger->GetXaxis()->FindBin("accept_mumutight")) / hist_software_trigger->GetBinContent(
616 hist_software_trigger->GetXaxis()->FindBin("accept_bhabha_all"));
617 B2DEBUG(1, "mumu_tight_over_bhabha_all:" << mumu_tight_over_bhabha_all);
618 setEpicsPV("mumu_tight_over_bhabha_all", mumu_tight_over_bhabha_all);
619 }
620 // update #gammagamma/#bhabha_all
621
622 if (hist_software_trigger->GetBinContent(
623 hist_software_trigger->GetXaxis()->FindBin("accept_bhabha_all")) != 0) {
624 double gammagamma_over_bhabha_all = 0.0;
625 gammagamma_over_bhabha_all = hist_software_trigger->GetBinContent(
626 hist_software_trigger->GetXaxis()->FindBin("accept_gamma_gamma")) /
627 hist_software_trigger->GetBinContent(
628 hist_software_trigger->GetXaxis()->FindBin("accept_bhabha_all"));
629 B2DEBUG(1, "gammagamma_over_bhabha_all:" << gammagamma_over_bhabha_all);
630 setEpicsPV("gammagamma_over_bhabha_all", gammagamma_over_bhabha_all);
631 }
632 // update #tautau2trk/#bhabha_all
633
634 if (hist_software_trigger->GetBinContent(
635 hist_software_trigger->GetXaxis()->FindBin("accept_bhabha_all")) != 0) {
636 double tautau2trk_over_bhabha_all = 0.0;
637 tautau2trk_over_bhabha_all = hist_software_trigger->GetBinContent(
638 hist_software_trigger->GetXaxis()->FindBin("accept_tau_2trk")) / hist_software_trigger->GetBinContent(
639 hist_software_trigger->GetXaxis()->FindBin("accept_bhabha_all"));
640 B2DEBUG(1, "tautau2trk_over_bhabha_all:" << tautau2trk_over_bhabha_all);
641 setEpicsPV("tautau2trk_over_bhabha_all", tautau2trk_over_bhabha_all);
642 }
643 // update #hadron/#bhabha_all
644 if (hist_software_trigger->GetBinContent(
645 hist_software_trigger->GetXaxis()->FindBin("accept_bhabha_all")) != 0) {
646 double hadron_over_bhabha_all = 0.0;
647 hadron_over_bhabha_all = hist_software_trigger->GetBinContent(
648 hist_software_trigger->GetXaxis()->FindBin("accept_hadron")) / hist_software_trigger->GetBinContent(
649 hist_software_trigger->GetXaxis()->FindBin("accept_bhabha_all"));
650 B2DEBUG(1, "hadron_over_bhabha_all:" << hadron_over_bhabha_all);
651 setEpicsPV("hadron_over_bhabha_all", hadron_over_bhabha_all);
652 }
653 // update #mumu_tight/#bhabha_trk_ecl
654 if (hist_software_trigger->GetBinContent(
655 hist_software_trigger->GetXaxis()->FindBin("accept_bhabha_trk_ecl")) != 0) {
656 double mumu_tight_over_bhabha_trk_ecl = 0.0;
657 mumu_tight_over_bhabha_trk_ecl = hist_software_trigger->GetBinContent(
658 hist_software_trigger->GetXaxis()->FindBin("accept_mumutight")) / hist_software_trigger->GetBinContent(
659 hist_software_trigger->GetXaxis()->FindBin("accept_bhabha_trk_ecl"));
660 B2DEBUG(1, "mumu_tight_over_bhabha_trk_ecl:" << mumu_tight_over_bhabha_trk_ecl);
661 setEpicsPV("mumu_tight_over_bhabha_trk_ecl", mumu_tight_over_bhabha_trk_ecl);
662 }
663 // update #gammagamma/#bhabha_trk_ecl
664 if (hist_software_trigger->GetBinContent(
665 hist_software_trigger->GetXaxis()->FindBin("accept_bhabha_trk_ecl")) != 0) {
666 double gammagamma_over_bhabha_trk_ecl = 0.0;
667 gammagamma_over_bhabha_trk_ecl = hist_software_trigger->GetBinContent(
668 hist_software_trigger->GetXaxis()->FindBin("accept_gamma_gamma")) /
669 hist_software_trigger->GetBinContent(
670 hist_software_trigger->GetXaxis()->FindBin("accept_bhabha_trk_ecl"));
671 B2DEBUG(1, "gammagamma_over_bhabha_trk_ecl:" << gammagamma_over_bhabha_trk_ecl);
672 setEpicsPV("gammagamma_over_bhabha_trk_ecl", gammagamma_over_bhabha_trk_ecl);
673 }
674 // update #tautau2trk/#bhabha_trk_ecl
675
676 if (hist_software_trigger->GetBinContent(
677 hist_software_trigger->GetXaxis()->FindBin("accept_bhabha_trk_ecl")) != 0) {
678 double tautau2trk_over_bhabha_trk_ecl = 0.0;
679 tautau2trk_over_bhabha_trk_ecl = hist_software_trigger->GetBinContent(
680 hist_software_trigger->GetXaxis()->FindBin("accept_tau_2trk")) / hist_software_trigger->GetBinContent(
681 hist_software_trigger->GetXaxis()->FindBin("accept_bhabha_trk_ecl"));
682 B2DEBUG(1, "tautau2trk_over_bhabha_trk_ecl:" << tautau2trk_over_bhabha_trk_ecl);
683 setEpicsPV("tautau2trk_over_bhabha_trk_ecl", tautau2trk_over_bhabha_trk_ecl);
684 }
685 // update #hadron/#bhabha_trk_ecl
686
687 if (hist_software_trigger->GetBinContent(
688 hist_software_trigger->GetXaxis()->FindBin("accept_bhabha_trk_ecl")) != 0) {
689 double hadron_over_bhabha_trk_ecl = 0.0;
690 hadron_over_bhabha_trk_ecl = hist_software_trigger->GetBinContent(
691 hist_software_trigger->GetXaxis()->FindBin("accept_hadron")) / hist_software_trigger->GetBinContent(
692 hist_software_trigger->GetXaxis()->FindBin("accept_bhabha_trk_ecl"));
693 B2DEBUG(1, "hadron_over_bhabha_trk_ecl:" << hadron_over_bhabha_trk_ecl);
694 setEpicsPV("hadron_over_bhabha_trk_ecl", hadron_over_bhabha_trk_ecl);
695 }
696
697 }
698
699 }
700
701 auto hist_nTSFHits_total = getDelta("TRGGRL", "h_wirecnt_sum", 0, true);
702 if (hist_nTSFHits_total) {
703 double mean = hist_nTSFHits_total->GetMean();
704 B2DEBUG(1, "CDCTRG_meanTSFHits_total:" << mean);
705 setEpicsPV("CDCTRG_meanTSFHits_total", mean);
706 }
707
708 auto hist_nTSFHits_clean = getDelta("TRGGRL", "h_wirecnt_sum_clean", 0, true);
709 if (hist_nTSFHits_clean) {
710 double mean = hist_nTSFHits_clean->GetMean();
711 B2DEBUG(1, "CDCTRG_meanTSFHits_clean:" << mean);
712 setEpicsPV("CDCTRG_meanTSFHits_clean", mean);
713
714 double tail = getThreshold(hist_nTSFHits_clean, 0.5, 0.02);
715 B2DEBUG(1, "CDCTRG_tailTSFHits_clean:" << tail);
716 setEpicsPV("CDCTRG_tailTSFHits_clean", tail);
717 }
718
719 auto hist_nTSFHits_injHER = getDelta("TRGGRL", "h_wirecnt_sum_injHER", 0, true);
720 if (hist_nTSFHits_injHER) {
721 double mean = hist_nTSFHits_injHER->GetMean();
722 B2DEBUG(1, "CDCTRG_meanTSFHits_injHER:" << mean);
723 setEpicsPV("CDCTRG_meanTSFHits_injHER", mean);
724 }
725
726 auto hist_nTSFHits_injLER = getDelta("TRGGRL", "h_wirecnt_sum_injLER", 0, true);
727 if (hist_nTSFHits_injLER) {
728 double mean = hist_nTSFHits_injLER->GetMean();
729 B2DEBUG(1, "CDCTRG_meanTSFHits_injLER:" << mean);
730 setEpicsPV("CDCTRG_meanTSFHits_injLER", mean);
731 }
732
733 auto hist_nTC_total = getDelta("TRG", "h_n_TChit_event_clkgrp", 0, true);
734 if (hist_nTC_total) {
735 double mean = hist_nTC_total->GetMean();
736 B2DEBUG(1, "ECLTRG_meanTC_total:" << mean);
737 setEpicsPV("ECLTRG_meanTC_total", mean);
738 }
739
740 auto hist_nTC_clean = getDelta("TRG", "h_n_TChit_clean_clkgrp", 0, true);
741 if (hist_nTC_clean) {
742 double mean = hist_nTC_clean->GetMean();
743 B2DEBUG(1, "ECLTRG_meanTC_clean:" << mean);
744 setEpicsPV("ECLTRG_meanTC_clean", mean);
745
746 double tail = getThreshold(hist_nTC_clean, 0.5);
747 B2DEBUG(1, "ECLTRG_tailTC_clean:" << tail);
748 setEpicsPV("ECLTRG_tailTC_clean", tail);
749 }
750
751 auto hist_nTC_injHER = getDelta("TRG", "h_n_TChit_injHER_clkgrp", 0, true);
752 if (hist_nTC_injHER) {
753 double mean = hist_nTC_injHER->GetMean();
754 B2DEBUG(1, "ECLTRG_meanTC_injHER:" << mean);
755 setEpicsPV("ECLTRG_meanTC_injHER", mean);
756 }
757
758 auto hist_nTC_injLER = getDelta("TRG", "h_n_TChit_injLER_clkgrp", 0, true);
759 if (hist_nTC_injLER) {
760 double mean = hist_nTC_injLER->GetMean();
761 B2DEBUG(1, "ECLTRG_meanTC_injLER:" << mean);
762 setEpicsPV("ECLTRG_meanTC_injLER", mean);
763 }
764
765 auto hist_nTC_FWD_total = getDelta("TRG", "h_n_TChit_FWD_event_clkgrp", 0, true);
766 if (hist_nTC_FWD_total) {
767 double mean = hist_nTC_FWD_total->GetMean();
768 B2DEBUG(1, "ECLTRG_meanTC_FWD_total:" << mean);
769 setEpicsPV("ECLTRG_meanTC_FWD_total", mean);
770 }
771
772 auto hist_nTC_FWD_clean = getDelta("TRG", "h_n_TChit_FWD_clean_clkgrp", 0, true);
773 if (hist_nTC_FWD_clean) {
774 double mean = hist_nTC_FWD_clean->GetMean();
775 B2DEBUG(1, "ECLTRG_meanTC_FWD_clean:" << mean);
776 setEpicsPV("ECLTRG_meanTC_FWD_clean", mean);
777
778 double tail = getThreshold(hist_nTC_FWD_clean, 0.5);
779 B2DEBUG(1, "ECLTRG_tailTC_FWD_clean:" << tail);
780 setEpicsPV("ECLTRG_tailTC_FWD_clean", tail);
781 }
782
783 auto hist_nTC_FWD_injHER = getDelta("TRG", "h_n_TChit_FWD_injHER_clkgrp", 0, true);
784 if (hist_nTC_FWD_injHER) {
785 double mean = hist_nTC_FWD_injHER->GetMean();
786 B2DEBUG(1, "ECLTRG_meanTC_FWD_injHER:" << mean);
787 setEpicsPV("ECLTRG_meanTC_FWD_injHER", mean);
788 }
789
790 auto hist_nTC_FWD_injLER = getDelta("TRG", "h_n_TChit_FWD_injLER_clkgrp", 0, true);
791 if (hist_nTC_FWD_injLER) {
792 double mean = hist_nTC_FWD_injLER->GetMean();
793 B2DEBUG(1, "ECLTRG_meanTC_FWD_injLER:" << mean);
794 setEpicsPV("ECLTRG_meanTC_FWD_injLER", mean);
795 }
796
797 auto hist_nTC_BRL_total = getDelta("TRG", "h_n_TChit_BRL_event_clkgrp", 0, true);
798 if (hist_nTC_BRL_total) {
799 double mean = hist_nTC_BRL_total->GetMean();
800 B2DEBUG(1, "ECLTRG_meanTC_BRL_total:" << mean);
801 setEpicsPV("ECLTRG_meanTC_BRL_total", mean);
802 }
803
804 auto hist_nTC_BRL_clean = getDelta("TRG", "h_n_TChit_BRL_clean_clkgrp", 0, true);
805 if (hist_nTC_BRL_clean) {
806 double mean = hist_nTC_BRL_clean->GetMean();
807 B2DEBUG(1, "ECLTRG_meanTC_BRL_clean:" << mean);
808 setEpicsPV("ECLTRG_meanTC_BRL_clean", mean);
809
810 double tail = getThreshold(hist_nTC_BRL_clean, 0.5);
811 B2DEBUG(1, "ECLTRG_tailTC_BRL_clean:" << tail);
812 setEpicsPV("ECLTRG_tailTC_BRL_clean", tail);
813 }
814
815 auto hist_nTC_BRL_injHER = getDelta("TRG", "h_n_TChit_BRL_injHER_clkgrp", 0, true);
816 if (hist_nTC_BRL_injHER) {
817 double mean = hist_nTC_BRL_injHER->GetMean();
818 B2DEBUG(1, "ECLTRG_meanTC_BRL_injHER:" << mean);
819 setEpicsPV("ECLTRG_meanTC_BRL_injHER", mean);
820 }
821
822 auto hist_nTC_BRL_injLER = getDelta("TRG", "h_n_TChit_BRL_injLER_clkgrp", 0, true);
823 if (hist_nTC_BRL_injLER) {
824 double mean = hist_nTC_BRL_injLER->GetMean();
825 B2DEBUG(1, "ECLTRG_meanTC_BRL_injLER:" << mean);
826 setEpicsPV("ECLTRG_meanTC_BRL_injLER", mean);
827 }
828
829 auto hist_nTC_BWD_total = getDelta("TRG", "h_n_TChit_BWD_event_clkgrp", 0, true);
830 if (hist_nTC_BWD_total) {
831 double mean = hist_nTC_BWD_total->GetMean();
832 B2DEBUG(1, "ECLTRG_meanTC_BWD_total:" << mean);
833 setEpicsPV("ECLTRG_meanTC_BWD_total", mean);
834 }
835
836 auto hist_nTC_BWD_clean = getDelta("TRG", "h_n_TChit_BWD_clean_clkgrp", 0, true);
837 if (hist_nTC_BWD_clean) {
838 double mean = hist_nTC_BWD_clean->GetMean();
839 B2DEBUG(1, "ECLTRG_meanTC_BWD_clean:" << mean);
840 setEpicsPV("ECLTRG_meanTC_BWD_clean", mean);
841
842 double tail = getThreshold(hist_nTC_BWD_clean, 0.5);
843 B2DEBUG(1, "ECLTRG_tailTC_BWD_clean:" << tail);
844 setEpicsPV("ECLTRG_tailTC_BWD_clean", tail);
845 }
846
847 auto hist_nTC_BWD_injHER = getDelta("TRG", "h_n_TChit_BWD_injHER_clkgrp", 0, true);
848 if (hist_nTC_BWD_injHER) {
849 double mean = hist_nTC_BWD_injHER->GetMean();
850 B2DEBUG(1, "ECLTRG_meanTC_BWD_injHER:" << mean);
851 setEpicsPV("ECLTRG_meanTC_BWD_injHER", mean);
852 }
853
854 auto hist_nTC_BWD_injLER = getDelta("TRG", "h_n_TChit_BWD_injLER_clkgrp", 0, true);
855 if (hist_nTC_BWD_injLER) {
856 double mean = hist_nTC_BWD_injLER->GetMean();
857 B2DEBUG(1, "ECLTRG_meanTC_BWD_injLER:" << mean);
858 setEpicsPV("ECLTRG_meanTC_BWD_injLER", mean);
859 }
860
861
862 // Tag canvas as updated ONLY if things have changed.
863 UpdateCanvas(m_canvas->GetName(), hist != nullptr);
864
865 // this if left over from jsroot, may not be needed anymore (to check)
866 m_canvas->Update();
867 }
868
869}
870
872{
873 B2DEBUG(1, "DQMHistAnalysisTRGModule: terminate called");
874}
875
876
877double DQMHistAnalysisTRGModule::getThreshold(const TH1* hist, const double lower_bound, const double widthFraction)
878{
879 if (hist == nullptr) return 0.;
880
881 double movsum = 0;
882 int nbins = hist->GetNbinsX();
883 int width = nbins * widthFraction;
884 int num = 0;
885
886 if (width <= 1) width = 2;
887
888 int meanbin = hist->GetXaxis()->FindBin(hist->GetMean());
889
890 for (int i = meanbin - 1; 1 <= i && i <= meanbin - width; i--) {
891 num++;
892 movsum += hist->GetBinContent(i);
893 }
894
895 for (int i = meanbin; i < nbins; i++) {
896 int binIdx = i + 1;
897
898 if (num < width) {
899 movsum += hist->GetBinContent(binIdx);
900 num++;
901 } else {
902 movsum += hist->GetBinContent(binIdx);
903 movsum -= hist->GetBinContent(binIdx - width);
904 }
905
906 if (movsum / num < lower_bound) {
907 return hist->GetBinCenter(binIdx);
908 }
909 }
910 return hist->GetXaxis()->GetBinCenter(nbins);
911}
int registerEpicsPV(const std::string &pvname, const std::string &keyname="")
EPICS related Functions.
static void addDeltaPar(const std::string &dirname, const std::string &histname, HistDelta::EDeltaType t, int p, unsigned int a=1)
Add Delta histogram parameters.
static void UpdateCanvas(const std::string &name, bool updated=true)
Mark canvas as updated (or not)
static const std::string & getRunType(void)
Get the list of the reference histograms.
TH1 * getDelta(const std::string &fullname, int n=0, bool onlyIfUpdated=true)
Get Delta histogram.
DQMHistAnalysisModule()
Constructor / Destructor.
void setEpicsPV(const std::string &keyname, double value)
Write value to a EPICS PV.
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: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.
STL namespace.