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