Belle II Software development
DQMHistAnalysisSVDEfficiency.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 : DQMHistAnalysisSVDEfficiency.cc
10// Description : module for DQM histogram analysis of SVD sensors efficiencies
11//-
12
13
14#include <dqm/analysis/modules/DQMHistAnalysisSVDEfficiency.h>
15#include <vxd/geometry/GeoCache.h>
16
17#include <TROOT.h>
18#include <TStyle.h>
19#include <TString.h>
20#include <TMath.h>
21
22using namespace std;
23using namespace Belle2;
24
25//-----------------------------------------------------------------
26// Register the Module
27//-----------------------------------------------------------------
28REG_MODULE(DQMHistAnalysisSVDEfficiency);
29
30//-----------------------------------------------------------------
31// Implementation
32//-----------------------------------------------------------------
33
38{
39 //Parameter definition
40 B2DEBUG(10, "DQMHistAnalysisSVDEfficiency: Constructor done.");
41
42 setDescription("DQM Analysis Module that computes the average SVD sensor efficiency.");
43
44 addParam("effLevel_Error", m_effError, "Efficiency error (%) level (red)", double(0.9));
45 addParam("effLevel_Warning", m_effWarning, "Efficiency WARNING (%) level (orange)", double(0.94));
46 addParam("statThreshold", m_statThreshold, "minimal number of tracks per sensor to set green/red alert", double(100));
47 addParam("nSigma", m_nSigma, "Number of sigmas to set the DQM status, where sigma = efficiency uncertainty",
48 double(3.));
49 addParam("samples3", m_3Samples, "if True 3 samples histograms analysis is performed", bool(false));
50 addParam("PVPrefix", m_pvPrefix, "PV Prefix", std::string("SVD:"));
51}
52
57
59{
60 B2DEBUG(10, "DQMHistAnalysisSVDEfficiency: initialize");
61
62
64
65 //collect the list of all SVD Modules in the geometry here
66 std::vector<VxdID> sensors = geo.getListOfSensors();
67 for (VxdID& aVxdID : sensors) {
68 VXD::SensorInfoBase info = geo.getSensorInfo(aVxdID);
69 // B2INFO("VXD " << aVxdID);
70 if (info.getType() != VXD::SensorInfoBase::SVD) continue;
71 m_SVDModules.push_back(aVxdID); // reorder, sort would be better
72 }
73 std::sort(m_SVDModules.begin(), m_SVDModules.end()); // back to natural order
74
75
76 gROOT->cd();
77 m_cEfficiencyU = new TCanvas("SVDAnalysis/c_SVDEfficiencyU");
78 m_cEfficiencyV = new TCanvas("SVDAnalysis/c_SVDEfficiencyV");
79 m_cEfficiencyErrU = new TCanvas("SVDAnalysis/c_SVDEfficiencyErrU");
80 m_cEfficiencyErrV = new TCanvas("SVDAnalysis/c_SVDEfficiencyErrV");
81
82 m_cEfficiencyRPhiViewU = new TCanvas("SVDAnalysis/c_SVDEfficiencyRPhiViewU", "", 800, 800);
83 m_cEfficiencyRPhiViewV = new TCanvas("SVDAnalysis/c_SVDEfficiencyRPhiViewV", "", 800, 800);
84 m_cEfficiencyErrRPhiViewU = new TCanvas("SVDAnalysis/c_SVDEfficiencyErrRPhiViewU", "", 800, 800);
85 m_cEfficiencyErrRPhiViewV = new TCanvas("SVDAnalysis/c_SVDEfficiencyErrRPhiViewV", "", 800, 800);
86
87 TString hName = getHistoNameFromCanvas(m_cEfficiencyU->GetName(), "@view");
88 m_hEfficiency = new SVDSummaryPlots(hName.Data(), "Summary of SVD efficiencies (%), @view/@side Side");
89 m_hEfficiency->setStats(0);
90 if (m_setColzRange) {
91 m_hEfficiency->setMaximum(m_colzMaximum);
92 m_hEfficiency->setMinimum(m_colzMinimum);
93 }
94 hName = getHistoNameFromCanvas(m_cEfficiencyErrU->GetName(), "@view");
95 m_hEfficiencyErr = new SVDSummaryPlots(hName.Data(), "Summary of SVD efficiencies errors (%), @view/@side Side");
96 m_hEfficiencyErr->setStats(0);
97
98 if (m_3Samples) {
99 m_cEfficiencyU3Samples = new TCanvas("SVDAnalysis/c_SVDEfficiency3SamplesU");
100 m_cEfficiencyV3Samples = new TCanvas("SVDAnalysis/c_SVDEfficiency3SamplesV");
101 m_cEfficiencyErrU3Samples = new TCanvas("SVDAnalysis/c_SVDEfficiencyErr3SamplesU");
102 m_cEfficiencyErrV3Samples = new TCanvas("SVDAnalysis/c_SVDEfficiencyErr3SamplesV");
103
104 m_cEfficiencyRPhiViewU3Samples = new TCanvas("SVDAnalysis/c_SVDEfficiencyRPhiView3SamplesU", "", 800, 800);
105 m_cEfficiencyRPhiViewV3Samples = new TCanvas("SVDAnalysis/c_SVDEfficiencyRPhiView3SamplesV", "", 800, 800);
106 m_cEfficiencyErrRPhiViewU3Samples = new TCanvas("SVDAnalysis/c_SVDEfficiencyErrRPhiView3SamplesU", "", 800, 800);
107 m_cEfficiencyErrRPhiViewV3Samples = new TCanvas("SVDAnalysis/c_SVDEfficiencyErrRPhiView3SamplesV", "", 800, 800);
108
109 hName = getHistoNameFromCanvas(m_cEfficiencyU3Samples->GetName(), "@view");
110 m_hEfficiency3Samples = new SVDSummaryPlots(hName.Data(), "Summary of SVD efficiencies (%), @view/@side Side for 3 samples");
111 m_hEfficiency3Samples->setStats(0);
112 if (m_setColzRange) {
115 }
116 hName = getHistoNameFromCanvas(m_cEfficiencyErrU3Samples->GetName(), "@view");
117 m_hEfficiencyErr3Samples = new SVDSummaryPlots(hName.Data(),
118 "Summary of SVD efficiencies errors (%), @view/@side Side for 3 samples");
119 m_hEfficiencyErr3Samples->setStats(0);
120 }
121
122 //register limits for EPICS
123 registerEpicsPV(m_pvPrefix + "efficiencyLimits", "effLimits");
124
125 //find nEvents testing if histograms are present
126 TH1* hnEvnts = findHist("SVDExpReco/SVDDQM_nEvents");
127 if (hnEvnts == NULL) {
128 B2INFO("no events, nothing to do here");
129 return;
130 }
131}
132
134{
135 B2DEBUG(10, "DQMHistAnalysisSVDEfficiency: beginRun called.");
136
137 if (m_cEfficiencyU)
138 m_cEfficiencyU->Clear();
139 if (m_cEfficiencyV)
140 m_cEfficiencyV->Clear();
142 m_cEfficiencyErrU->Clear();
144 m_cEfficiencyErrV->Clear();
145
147 m_cEfficiencyRPhiViewU->Clear();
149 m_cEfficiencyRPhiViewV->Clear();
154
155 if (m_3Samples) {
157 m_cEfficiencyU3Samples->Clear();
159 m_cEfficiencyV3Samples->Clear();
164
173 }
174
175 //Retrieve limits from EPICS
176 double effErrorLo = 0.;
177 double effWarnLo = 0.;
178
179 requestLimitsFromEpicsPVs("effLimits", effErrorLo, effWarnLo, m_effWarning, m_effError);
180
181 B2DEBUG(10, " SVD efficiency thresholds taken from EPICS configuration file:");
182 B2DEBUG(10, " EFFICIENCY: normal > " << m_effWarning << " > warning > " << m_effError << " > error with minimum statistics of " <<
184
185 //build the legend
186 m_legProblem->Clear();
187 m_legProblem->AddText("ERROR!");
188 m_legProblem->AddText("at least one sensor with:");
189 m_legProblem->AddText(Form("efficiency < %1.0f%%", m_effError * 100));
190
191 m_legWarning->Clear();
192 m_legWarning->AddText("WARNING!");
193 m_legWarning->AddText("at least one sensor with:");
194 m_legWarning->AddText(Form("%1.0f%% < efficiency < %1.0f%%", m_effError * 100, m_effWarning * 100));
195
196 m_legNormal->Clear();
197 m_legNormal->AddText("EFFICIENCY WITHIN LIMITS");
198 m_legNormal->AddText(Form("efficiency > %1.0f%%", m_effWarning * 100));
199
200 m_legLowStat->Clear();
201 m_legLowStat->AddText("Not enough statistics,");
202 m_legLowStat->AddText("check again in a few minutes");
203
204 m_legEmpty->Clear();
205 m_legEmpty->AddText("Track/clusters plots are emtpy");
206
209}
210
212{
213 B2DEBUG(10, "DQMHistAnalysisSVDEfficiency: event called.");
214
215 //find nEvents
216 TH1* hnEvnts = findHist("SVDExpReco/SVDDQM_nEvents", true);
217 if (hnEvnts == NULL) {
218 B2INFO("no events, nothing to do here");
219 return;
220 } else {
221 B2DEBUG(10, "SVDExpReco/SVDDQM_nEvents found");
222 }
223
224 TString tmp = hnEvnts->GetTitle();
225 Int_t pos = tmp.Last('~');
226 if (pos == -1) pos = 0;
227
228 TString runID = tmp(pos, tmp.Length() - pos);
229 B2INFO("DQMHistAnalysisSVDEfficiencyModule::runID = " << runID);
230
231 gStyle->SetOptStat(0);
232 gStyle->SetPaintTextFormat("2.1f");
233
234 // do it by nhand, the interface of the SVDSummaryPlots does not allow to change the title after cstr
235 if (m_hEfficiency) {
236 m_hEfficiency->reset();
237 m_hEfficiency->setRunID(runID);
238 }
239
240 if (m_hEfficiencyErr) {
241 m_hEfficiencyErr->reset();
242 m_hEfficiencyErr->setRunID(runID);
243 }
244
245 if (m_3Samples) {
247 m_hEfficiency3Samples->reset();
248 m_hEfficiency3Samples->setRunID(runID);
249 }
250
253 m_hEfficiencyErr3Samples->setRunID(runID);
254 }
255 }
256
257 Float_t effU = -1;
258 Float_t effV = -1;
259 Float_t effMinU = 9999;
260 Float_t effMinV = 9999;
261 Float_t erreffU = -1;
262 Float_t erreffV = -1;
263
264 // Efficiency for the U and V sides
265 TH2F* found_tracksU = (TH2F*)findHist("SVDEfficiency/TrackHitsU");
266 TH2F* matched_clusU = (TH2F*)findHist("SVDEfficiency/MatchedHitsU");
267
268 TH2F* found_tracksV = (TH2F*)findHist("SVDEfficiency/TrackHitsV");
269 TH2F* matched_clusV = (TH2F*)findHist("SVDEfficiency/MatchedHitsV");
270
271 if (matched_clusU != NULL && found_tracksU != NULL && matched_clusV != NULL && found_tracksV != NULL) {
272 B2DEBUG(10, "Before loop on sensors, size :" << m_SVDModules.size());
275 for (unsigned int i = 0; i < m_SVDModules.size(); i++) {
276 B2DEBUG(10, "module " << i << "," << m_SVDModules[i]);
277 int layer = m_SVDModules[i].getLayerNumber();
278 int ladder = m_SVDModules[i].getLadderNumber();
279 int sensor = m_SVDModules[i].getSensorNumber();
280 int bin = found_tracksU->FindBin(ladder, findBinY(layer, sensor));
281 // U-side
282 float numU = matched_clusU->GetBinContent(bin);
283 float denU = found_tracksU->GetBinContent(bin);
284 if (denU > 0) {
285 effU = numU / denU;
286 erreffU = std::sqrt(effU * (1 - effU) / denU);
287 }
288 if (effU < effMinU) effMinU = effU;
289 m_hEfficiency->fill(m_SVDModules[i], 1, effU * 100);
290 m_hEfficiencyErr->fill(m_SVDModules[i], 1, erreffU * 100);
291 B2DEBUG(10, "effU = " << numU << "/" << denU << " = " << effU << " +- " << erreffU);
292
293 // V-side
294 float numV = matched_clusV->GetBinContent(bin);
295 float denV = found_tracksV->GetBinContent(bin);
296 if (denV > 0) {
297 effV = numV / denV;
298 erreffV = std::sqrt(effV * (1 - effV) / denV);
299 }
300 if (effV < effMinV) effMinV = effV;
301 m_hEfficiency->fill(m_SVDModules[i], 0, effV * 100);
302 m_hEfficiencyErr->fill(m_SVDModules[i], 0, erreffV * 100);
303 B2DEBUG(10, "effV = " << numV << "/" << denV << " = " << effV << " +- " << erreffV);
304
305 // Efficiency is already computed, and histograms are already filled at this point
306 // Fooling the setEffStatus for 6.x.1 and 6.x.5 to avoid issue due to small statistics
307 // At this point the den value is used only for the check on statistics
308 if (layer == 6 && (sensor == 1 || sensor == 5)) {
309 if (denU < 100) denU = 100; // If everything works, U and V side have same number of tracks
310 if (denV < 100) denV = 100;
311 }
312
313 setEffStatus(denU, effU, erreffU, m_effUstatus);
314 setEffStatus(denV, effV, erreffV, m_effVstatus);
315
316 B2DEBUG(10, "Status U-side is " << m_effUstatus);
317 B2DEBUG(10, "Status V-side is " << m_effVstatus);
318 }
319 } else {
320 if (matched_clusU == NULL || found_tracksU == NULL) {
321 B2INFO("Histograms needed for U-side Efficiency computation are not found");
322 setEffStatus(-1, -1, 0, m_effUstatus);
323 }
324 if (matched_clusV == NULL || found_tracksV == NULL) {
325 B2INFO("Histograms needed for V-side Efficiency computation are not found");
326 setEffStatus(-1, -1, 0, m_effVstatus);
327 }
328 }
329
330 // update summary for U side
331 m_valueMinimum = effMinU;
333
334 // update summary for V side
335 m_valueMinimum = effMinV;
337
338 // update error summary for U side
340
341 // update error summary for V side
343
344 if (m_3Samples) {
345 effMinU = 9999;
346 effMinV = 9999;
348 m_hEfficiency3Samples->getHistogram(0)->Reset();
349 m_hEfficiency3Samples->getHistogram(1)->Reset();
350 m_hEfficiencyErr3Samples->getHistogram(0)->Reset();
351 m_hEfficiencyErr3Samples->getHistogram(1)->Reset();
352
353 // Efficiency for the U and V-side - 3 samples
354 TH2F* found3_tracksU = (TH2F*)findHist("SVDEfficiency/TrackHits3U");
355 TH2F* matched3_clusU = (TH2F*)findHist("SVDEfficiency/MatchedHits3U");
356
357 TH2F* found3_tracksV = (TH2F*)findHist("SVDEfficiency/TrackHits3V");
358 TH2F* matched3_clusV = (TH2F*)findHist("SVDEfficiency/MatchedHits3V");
359
360 if (matched3_clusU != NULL && found3_tracksU != NULL && matched3_clusV != NULL && found3_tracksV != NULL) {
361 B2DEBUG(10, "Before loop on sensors, size :" << m_SVDModules.size());
364 for (unsigned int i = 0; i < m_SVDModules.size(); i++) {
365 B2DEBUG(10, "module " << i << "," << m_SVDModules[i]);
366 int layer = m_SVDModules[i].getLayerNumber();
367 int ladder = m_SVDModules[i].getLadderNumber();
368 int sensor = m_SVDModules[i].getSensorNumber();
369 int bin = found3_tracksU->FindBin(ladder, findBinY(layer, sensor));
370 // U-side
371 float numU = matched3_clusU->GetBinContent(bin);
372 float denU = found3_tracksU->GetBinContent(bin);
373 if (denU > 0) {
374 effU = numU / denU;
375 erreffU = std::sqrt(effU * (1 - effU) / denU);
376 }
377 if (effU < effMinU) effMinU = effU;
378 m_hEfficiency3Samples->fill(m_SVDModules[i], 1, effU * 100);
379 m_hEfficiencyErr3Samples->fill(m_SVDModules[i], 1, erreffU * 100);
380 B2DEBUG(10, "effU = " << numU << "/" << denU << " = " << effU << " +- " << erreffU);
381
382 // V-side
383 float numV = matched3_clusV->GetBinContent(bin);
384 float denV = found3_tracksV->GetBinContent(bin);
385 if (denV > 0) {
386 effV = numV / denV;
387 erreffV = std::sqrt(effV * (1 - effV) / denV);
388 }
389 if (effV < effMinV) effMinV = effV;
390 m_hEfficiency3Samples->fill(m_SVDModules[i], 0, effV * 100);
391 m_hEfficiencyErr3Samples->fill(m_SVDModules[i], 0, erreffV * 100);
392 B2DEBUG(10, "effV = " << numV << "/" << denV << " = " << effV << " +- " << erreffV);
393
394 // Efficiency is already computed, and histograms are already filled at this point
395 // Fooling the setEffStatus for 6.x.1 and 6.x.5 to avoid issue due to small statistics
396 // At this point the den value is used only for the check on statistics
397 if (layer == 6 && (sensor == 1 || sensor == 5)) {
398 if (denU < 100) denU = 100; // If everything works, U and V side have the same number of tracks
399 if (denV < 100) denV = 100;
400 }
401
402 setEffStatus(denU, effU, erreffU, m_effUstatus);
403 setEffStatus(denV, effV, erreffV, m_effVstatus);
404
405 B2DEBUG(10, "Status U-side is " << m_effUstatus);
406 B2DEBUG(10, "Status V-side is " << m_effVstatus);
407 }
408 } else {
409 if (matched3_clusU == NULL || found3_tracksU == NULL) {
410 B2INFO("Histograms needed for Efficiency computation are not found");
411 setEffStatus(-1, -1, 0, m_effUstatus);
412 }
413 if (matched3_clusV == NULL || found3_tracksV == NULL) {
414 B2INFO("Histograms needed for Efficiency computation are not found");
415 setEffStatus(-1, -1, 0, m_effVstatus);
416 }
417 }
418
419 // update summary for U side for 3 samples
420 m_valueMinimum = effMinU;
422
423 // update summary for V side for 3 samples
424 m_valueMinimum = effMinV;
426
427 // update error summary for U side for 3 samples
429
430 // update error summary for V side for 3 samples
432 }
433}
434
436{
437 B2DEBUG(10, "DQMHistAnalysisSVDEfficiency: endRun called");
438}
439
441{
442 B2DEBUG(10, "DQMHistAnalysisSVDEfficiency: terminate called");
443
444 delete m_hEfficiency;
445 delete m_cEfficiencyU;
446 delete m_cEfficiencyV;
447 delete m_hEfficiencyErr;
448 delete m_cEfficiencyErrU;
449 delete m_cEfficiencyErrV;
450
455
456 for (int i = 0; i < (int)m_laddersText.size(); i++) delete m_laddersText[i];
457 for (int i = 0; i < (int)m_sensorsText.size(); i++) delete m_sensorsText[i];
458
459 delete m_ly;
460 delete m_lx;
461 delete m_arrowx;
462 delete m_arrowy;
463
464 if (m_3Samples) {
471
476 }
477}
478
479// return y coordinate in TH2F histogram for specified sensor
480Int_t DQMHistAnalysisSVDEfficiencyModule::findBinY(Int_t layer, Int_t sensor)
481{
482 if (layer == 3)
483 return sensor; //2 -> 1,2
484 if (layer == 4)
485 return 2 + 1 + sensor; //6 -> 4,5,6
486 if (layer == 5)
487 return 6 + 1 + sensor; // 11 -> 8, 9, 10, 11
488 if (layer == 6)
489 return 11 + 1 + sensor; // 17 -> 13, 14, 15, 16, 17
490 else
491 return -1;
492}
493
494
495void DQMHistAnalysisSVDEfficiencyModule::setEffStatus(float den, float eff, float err, svdStatus& efficiencyStatus)
496{
497 if (den < 0) {
498 efficiencyStatus = std::max(noStat, efficiencyStatus);
499 } else if (den < m_statThreshold) {
500 efficiencyStatus = std::max(lowStat, efficiencyStatus);
501 } else if (eff + m_nSigma * err > m_effWarning) {
502 efficiencyStatus = std::max(good, efficiencyStatus);
503 } else if ((eff + m_nSigma * err <= m_effWarning) && (eff + m_nSigma * err > m_effError)) {
504 efficiencyStatus = std::max(warning, efficiencyStatus);
505 } else if ((eff + m_nSigma * err <= m_effError)) {
506 efficiencyStatus = std::max(error, efficiencyStatus);
507 }
508}
509
static TH1 * findHist(const std::string &histname, bool onlyIfUpdated=false)
Get histogram from list (no other search).
int registerEpicsPV(std::string pvname, std::string keyname="")
EPICS related Functions.
bool requestLimitsFromEpicsPVs(chid id, double &lowerAlarm, double &lowerWarn, double &upperWarn, double &upperAlarm)
Get Alarm Limits from EPICS PV.
TCanvas * m_cEfficiencyErrRPhiViewU
efficiency U error plot canvas
TCanvas * m_cEfficiencyErrRPhiViewV3Samples
efficiency V error plot canvas for 3 samples
SVDSummaryPlots * m_hEfficiency3Samples
efficiency histo for 3 samples
TCanvas * m_cEfficiencyErrV3Samples
efficiency V error plot canvas for 3 samples
double m_nSigma
number of sigmas to set the DQM status, where sigma = efficiency uncertainty
svdStatus m_effUstatus
number representing the status of the efficiency U side
TCanvas * m_cEfficiencyErrRPhiViewV
efficiency V error plot canvas
double m_statThreshold
minimal number of tracks per sensor to set green or red frame
TCanvas * m_cEfficiencyErrU
efficiency U error plot canvas
Int_t findBinY(Int_t layer, Int_t sensor)
find Y bin corresponding to sensor, efficiency plot
TCanvas * m_cEfficiencyRPhiViewV3Samples
efficiency V plot canvas for 3 samples
std::vector< VxdID > m_SVDModules
IDs of all SVD Modules to iterate over.
void setEffStatus(float den, float eff, float err, svdStatus &efficiencyStatus)
set efficiency status
svdStatus m_effVstatus
number representing the status of the efficiency V side
SVDSummaryPlots * m_hEfficiencyErr3Samples
efficiency error histo for 3 samples
std::string m_pvPrefix
string prefix for EPICS PVs
double m_effWarning
warning level of the efficiency
void terminate() override final
This method is called at the end of the event processing.
void event() override final
This method is called for each event.
bool m_3Samples
if true enable 3 samples histograms analysis
TCanvas * m_cEfficiencyU3Samples
efficiency U plot canvas for 3 samples
void endRun() override final
This method is called if the current run ends.
TCanvas * m_cEfficiencyErrU3Samples
efficiency U error plot canvas for 3 samples
void beginRun() override final
Called when entering a new run.
TCanvas * m_cEfficiencyRPhiViewU
efficiency U plot canvas
TCanvas * m_cEfficiencyV3Samples
efficiency V plot canvas for 3 samples
TCanvas * m_cEfficiencyErrV
efficiency V error plot canvas
TCanvas * m_cEfficiencyRPhiViewV
efficiency V plot canvas
TCanvas * m_cEfficiencyErrRPhiViewU3Samples
efficiency U error plot canvas for 3 samples
SVDSummaryPlots * m_hEfficiencyErr
efficiency error histo
TCanvas * m_cEfficiencyRPhiViewU3Samples
efficiency U plot canvas for 3 samples
int m_colzMaximum
Maximum of the histogram.
TString getHistoNameFromCanvas(TString cName, TString view="", TString cPrefix="c_", TString hPrefix="")
get histogram name from Canvas name
TPaveText * m_legEmpty
plot legend, empty
int m_colzMinimum
Minimum of the histogram.
TPaveText * m_legLowStat
plot legend, low stats
DQMHistAnalysisSVDModule(bool panelTop=false, bool online=false)
Constructor.
TPaveText * m_legWarning
plot legend, warning
TArrow * m_arrowx
x-axis direction
std::vector< TText * > m_sensorsText
list of sensors to write on the cancas
float m_valueMinimum
Minimum value of parameter.
TPaveText * m_legNormal
plot legend, normal
TArrow * m_arrowy
y-axis direction
std::vector< TText * > m_laddersText
list of ladders to write on the canvas
TPaveText * m_legProblem
plot legend, problem
void updateErrCanvases(SVDSummaryPlots *histo, TCanvas *canvas, TCanvas *canvasRPhi, bool isU)
update error canvases
void updateCanvases(SVDSummaryPlots *histo, TCanvas *canvas, TCanvas *canvasRPhi, svdStatus status, bool isU, bool online=false)
update canvases
bool m_setColzRange
set the range of the histogram in colz
void setDescription(const std::string &description)
Sets the description of the module.
Definition Module.cc:214
class to summarize SVD quantities per sensor and side
Class to facilitate easy access to sensor information of the VXD like coordinate transformations or p...
Definition GeoCache.h:38
const std::vector< VxdID > getListOfSensors() const
Get list of all sensors.
Definition GeoCache.cc:59
const SensorInfoBase & getSensorInfo(Belle2::VxdID id) const
Return a reference to the SensorInfo of a given SensorID.
Definition GeoCache.cc:67
static GeoCache & getInstance()
Return a reference to the singleton instance.
Definition GeoCache.cc:214
Base class to provide Sensor Information for PXD and SVD.
Class to uniquely identify a any structure of the PXD and SVD.
Definition VxdID.h:32
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.