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