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
54{
55 B2DEBUG(10, "DQMHistAnalysisSVDEfficiency: initialize");
56
57
59
60 //collect the list of all SVD Modules in the geometry here
61 std::vector<VxdID> sensors = geo.getListOfSensors();
62 for (VxdID& aVxdID : sensors) {
63 VXD::SensorInfoBase info = geo.getSensorInfo(aVxdID);
64 // B2INFO("VXD " << aVxdID);
65 if (info.getType() != VXD::SensorInfoBase::SVD) continue;
66 m_SVDModules.push_back(aVxdID); // reorder, sort would be better
67 }
68 std::sort(m_SVDModules.begin(), m_SVDModules.end()); // back to natural order
69
70
71 gROOT->cd();
72 m_cEfficiencyU = new TCanvas("SVDAnalysis/c_SVDEfficiencyU");
73 m_cEfficiencyV = new TCanvas("SVDAnalysis/c_SVDEfficiencyV");
74 m_cEfficiencyErrU = new TCanvas("SVDAnalysis/c_SVDEfficiencyErrU");
75 m_cEfficiencyErrV = new TCanvas("SVDAnalysis/c_SVDEfficiencyErrV");
76
77 m_cEfficiencyRPhiViewU = new TCanvas("SVDAnalysis/c_SVDEfficiencyRPhiViewU", "", 800, 800);
78 m_cEfficiencyRPhiViewV = new TCanvas("SVDAnalysis/c_SVDEfficiencyRPhiViewV", "", 800, 800);
79 m_cEfficiencyErrRPhiViewU = new TCanvas("SVDAnalysis/c_SVDEfficiencyErrRPhiViewU", "", 800, 800);
80 m_cEfficiencyErrRPhiViewV = new TCanvas("SVDAnalysis/c_SVDEfficiencyErrRPhiViewV", "", 800, 800);
81
82 TString hName = getHistoNameFromCanvas(m_cEfficiencyU->GetName(), "@view");
83 m_hEfficiency = new SVDSummaryPlots(hName.Data(), "Summary of SVD efficiencies (%), @view/@side Side");
84 m_hEfficiency->setStats(0);
85 if (m_setColzRange) {
86 m_hEfficiency->setMaximum(m_colzMaximum);
87 m_hEfficiency->setMinimum(m_colzMinimum);
88 }
89 hName = getHistoNameFromCanvas(m_cEfficiencyErrU->GetName(), "@view");
90 m_hEfficiencyErr = new SVDSummaryPlots(hName.Data(), "Summary of SVD efficiencies errors (%), @view/@side Side");
91 m_hEfficiencyErr->setStats(0);
92
93 if (m_3Samples) {
94 m_cEfficiencyU3Samples = new TCanvas("SVDAnalysis/c_SVDEfficiency3SamplesU");
95 m_cEfficiencyV3Samples = new TCanvas("SVDAnalysis/c_SVDEfficiency3SamplesV");
96 m_cEfficiencyErrU3Samples = new TCanvas("SVDAnalysis/c_SVDEfficiencyErr3SamplesU");
97 m_cEfficiencyErrV3Samples = new TCanvas("SVDAnalysis/c_SVDEfficiencyErr3SamplesV");
98
99 m_cEfficiencyRPhiViewU3Samples = new TCanvas("SVDAnalysis/c_SVDEfficiencyRPhiView3SamplesU", "", 800, 800);
100 m_cEfficiencyRPhiViewV3Samples = new TCanvas("SVDAnalysis/c_SVDEfficiencyRPhiView3SamplesV", "", 800, 800);
101 m_cEfficiencyErrRPhiViewU3Samples = new TCanvas("SVDAnalysis/c_SVDEfficiencyErrRPhiView3SamplesU", "", 800, 800);
102 m_cEfficiencyErrRPhiViewV3Samples = new TCanvas("SVDAnalysis/c_SVDEfficiencyErrRPhiView3SamplesV", "", 800, 800);
103
104 hName = getHistoNameFromCanvas(m_cEfficiencyU3Samples->GetName(), "@view");
105 m_hEfficiency3Samples = new SVDSummaryPlots(hName.Data(), "Summary of SVD efficiencies (%), @view/@side Side for 3 samples");
106 m_hEfficiency3Samples->setStats(0);
107 if (m_setColzRange) {
110 }
111 hName = getHistoNameFromCanvas(m_cEfficiencyErrU3Samples->GetName(), "@view");
112 m_hEfficiencyErr3Samples = new SVDSummaryPlots(hName.Data(),
113 "Summary of SVD efficiencies errors (%), @view/@side Side for 3 samples");
114 m_hEfficiencyErr3Samples->setStats(0);
115 }
116
117 //register limits for EPICS
118 registerEpicsPV(m_pvPrefix + "efficiencyLimits", "effLimits");
119
120 //find nEvents testing if histograms are present
121 TH1* hnEvnts = findHist("SVDExpReco/SVDDQM_nEvents");
122 if (hnEvnts == NULL) {
123 B2INFO("no events, nothing to do here");
124 return;
125 }
126}
127
129{
130 B2DEBUG(10, "DQMHistAnalysisSVDEfficiency: beginRun called.");
131
132 if (m_cEfficiencyU)
133 m_cEfficiencyU->Clear();
134 if (m_cEfficiencyV)
135 m_cEfficiencyV->Clear();
137 m_cEfficiencyErrU->Clear();
139 m_cEfficiencyErrV->Clear();
140
142 m_cEfficiencyRPhiViewU->Clear();
144 m_cEfficiencyRPhiViewV->Clear();
149
150 if (m_3Samples) {
152 m_cEfficiencyU3Samples->Clear();
154 m_cEfficiencyV3Samples->Clear();
159
168 }
169
170 //Retrieve limits from EPICS
171 double effErrorLo = 0.;
172 double effWarnLo = 0.;
173
174 requestLimitsFromEpicsPVs("effLimits", effErrorLo, effWarnLo, m_effWarning, m_effError);
175
176 B2DEBUG(10, " SVD efficiency thresholds taken from EPICS configuration file:");
177 B2DEBUG(10, " EFFICIENCY: normal > " << m_effWarning << " > warning > " << m_effError << " > error with minimum statistics of " <<
179
180 //build the legend
181 m_legProblem->Clear();
182 m_legProblem->AddText("ERROR!");
183 m_legProblem->AddText("at least one sensor with:");
184 m_legProblem->AddText(Form("efficiency < %1.0f%%", m_effError * 100));
185
186 m_legWarning->Clear();
187 m_legWarning->AddText("WARNING!");
188 m_legWarning->AddText("at least one sensor with:");
189 m_legWarning->AddText(Form("%1.0f%% < efficiency < %1.0f%%", m_effError * 100, m_effWarning * 100));
190
191 m_legNormal->Clear();
192 m_legNormal->AddText("EFFICIENCY WITHIN LIMITS");
193 m_legNormal->AddText(Form("efficiency > %1.0f%%", m_effWarning * 100));
194
195 m_legLowStat->Clear();
196 m_legLowStat->AddText("Not enough statistics,");
197 m_legLowStat->AddText("check again in a few minutes");
198
199 m_legEmpty->Clear();
200 m_legEmpty->AddText("Track/clusters plots are emtpy");
201
204}
205
207{
208 B2DEBUG(10, "DQMHistAnalysisSVDEfficiency: event called.");
209
210 //find nEvents
211 TH1* hnEvnts = findHist("SVDExpReco/SVDDQM_nEvents", true);
212 if (hnEvnts == NULL) {
213 B2INFO("no events, nothing to do here");
214 return;
215 } else {
216 B2DEBUG(10, "SVDExpReco/SVDDQM_nEvents found");
217 }
218
219 TString tmp = hnEvnts->GetTitle();
220 Int_t pos = tmp.Last('~');
221 if (pos == -1) pos = 0;
222
223 TString runID = tmp(pos, tmp.Length() - pos);
224 B2INFO("DQMHistAnalysisSVDEfficiencyModule::runID = " << runID);
225
226 gStyle->SetOptStat(0);
227 gStyle->SetPaintTextFormat("2.1f");
228
229 // do it by nhand, the interface of the SVDSummaryPlots does not allow to change the title after cstr
230 if (m_hEfficiency) {
231 m_hEfficiency->reset();
232 m_hEfficiency->setRunID(runID);
233 }
234
235 if (m_hEfficiencyErr) {
236 m_hEfficiencyErr->reset();
237 m_hEfficiencyErr->setRunID(runID);
238 }
239
240 if (m_3Samples) {
242 m_hEfficiency3Samples->reset();
243 m_hEfficiency3Samples->setRunID(runID);
244 }
245
248 m_hEfficiencyErr3Samples->setRunID(runID);
249 }
250 }
251
252 Float_t effU = -1;
253 Float_t effV = -1;
254 Float_t effMinU = 9999;
255 Float_t effMinV = 9999;
256 Float_t erreffU = -1;
257 Float_t erreffV = -1;
258
259 // Efficiency for the U and V sides
260 TH2F* found_tracksU = (TH2F*)findHist("SVDEfficiency/TrackHitsU");
261 TH2F* matched_clusU = (TH2F*)findHist("SVDEfficiency/MatchedHitsU");
262
263 TH2F* found_tracksV = (TH2F*)findHist("SVDEfficiency/TrackHitsV");
264 TH2F* matched_clusV = (TH2F*)findHist("SVDEfficiency/MatchedHitsV");
265
266 if (matched_clusU != NULL && found_tracksU != NULL && matched_clusV != NULL && found_tracksV != NULL) {
267 B2DEBUG(10, "Before loop on sensors, size :" << m_SVDModules.size());
270 for (unsigned int i = 0; i < m_SVDModules.size(); i++) {
271 B2DEBUG(10, "module " << i << "," << m_SVDModules[i]);
272 int layer = m_SVDModules[i].getLayerNumber();
273 int ladder = m_SVDModules[i].getLadderNumber();
274 int sensor = m_SVDModules[i].getSensorNumber();
275 int bin = found_tracksU->FindBin(ladder, findBinY(layer, sensor));
276 // U-side
277 float numU = matched_clusU->GetBinContent(bin);
278 float denU = found_tracksU->GetBinContent(bin);
279 if (denU > 0) {
280 effU = numU / denU;
281 erreffU = std::sqrt(effU * (1 - effU) / denU);
282 }
283 if (effU < effMinU) effMinU = effU;
284 m_hEfficiency->fill(m_SVDModules[i], 1, effU * 100);
285 m_hEfficiencyErr->fill(m_SVDModules[i], 1, erreffU * 100);
286 B2DEBUG(10, "effU = " << numU << "/" << denU << " = " << effU << " +- " << erreffU);
287
288 // V-side
289 float numV = matched_clusV->GetBinContent(bin);
290 float denV = found_tracksV->GetBinContent(bin);
291 if (denV > 0) {
292 effV = numV / denV;
293 erreffV = std::sqrt(effV * (1 - effV) / denV);
294 }
295 if (effV < effMinV) effMinV = effV;
296 m_hEfficiency->fill(m_SVDModules[i], 0, effV * 100);
297 m_hEfficiencyErr->fill(m_SVDModules[i], 0, erreffV * 100);
298 B2DEBUG(10, "effV = " << numV << "/" << denV << " = " << effV << " +- " << erreffV);
299
300 // Efficiency is already computed, and histograms are already filled at this point
301 // Fooling the setEffStatus for 6.x.1 and 6.x.5 to avoid issue due to small statistics
302 // At this point the den value is used only for the check on statistics
303 if (layer == 6 && (sensor == 1 || sensor == 5)) {
304 if (denU < 100) denU = 100; // If everything works, U and V side have same number of tracks
305 if (denV < 100) denV = 100;
306 }
307
308 setEffStatus(denU, effU, erreffU, m_effUstatus);
309 setEffStatus(denV, effV, erreffV, m_effVstatus);
310
311 B2DEBUG(10, "Status U-side is " << m_effUstatus);
312 B2DEBUG(10, "Status V-side is " << m_effVstatus);
313 }
314 } else {
315 if (matched_clusU == NULL || found_tracksU == NULL) {
316 B2INFO("Histograms needed for U-side Efficiency computation are not found");
317 setEffStatus(-1, -1, 0, m_effUstatus);
318 }
319 if (matched_clusV == NULL || found_tracksV == NULL) {
320 B2INFO("Histograms needed for V-side Efficiency computation are not found");
321 setEffStatus(-1, -1, 0, m_effVstatus);
322 }
323 }
324
325 // update summary for U side
326 m_valueMinimum = effMinU;
328
329 // update summary for V side
330 m_valueMinimum = effMinV;
332
333 // update error summary for U side
335
336 // update error summary for V side
338
339 if (m_3Samples) {
340 effMinU = 9999;
341 effMinV = 9999;
343 m_hEfficiency3Samples->getHistogram(0)->Reset();
344 m_hEfficiency3Samples->getHistogram(1)->Reset();
345 m_hEfficiencyErr3Samples->getHistogram(0)->Reset();
346 m_hEfficiencyErr3Samples->getHistogram(1)->Reset();
347
348 // Efficiency for the U and V-side - 3 samples
349 TH2F* found3_tracksU = (TH2F*)findHist("SVDEfficiency/TrackHits3U");
350 TH2F* matched3_clusU = (TH2F*)findHist("SVDEfficiency/MatchedHits3U");
351
352 TH2F* found3_tracksV = (TH2F*)findHist("SVDEfficiency/TrackHits3V");
353 TH2F* matched3_clusV = (TH2F*)findHist("SVDEfficiency/MatchedHits3V");
354
355 if (matched3_clusU != NULL && found3_tracksU != NULL && matched3_clusV != NULL && found3_tracksV != NULL) {
356 B2DEBUG(10, "Before loop on sensors, size :" << m_SVDModules.size());
359 for (unsigned int i = 0; i < m_SVDModules.size(); i++) {
360 B2DEBUG(10, "module " << i << "," << m_SVDModules[i]);
361 int layer = m_SVDModules[i].getLayerNumber();
362 int ladder = m_SVDModules[i].getLadderNumber();
363 int sensor = m_SVDModules[i].getSensorNumber();
364 int bin = found3_tracksU->FindBin(ladder, findBinY(layer, sensor));
365 // U-side
366 float numU = matched3_clusU->GetBinContent(bin);
367 float denU = found3_tracksU->GetBinContent(bin);
368 if (denU > 0) {
369 effU = numU / denU;
370 erreffU = std::sqrt(effU * (1 - effU) / denU);
371 }
372 if (effU < effMinU) effMinU = effU;
373 m_hEfficiency3Samples->fill(m_SVDModules[i], 1, effU * 100);
374 m_hEfficiencyErr3Samples->fill(m_SVDModules[i], 1, erreffU * 100);
375 B2DEBUG(10, "effU = " << numU << "/" << denU << " = " << effU << " +- " << erreffU);
376
377 // V-side
378 float numV = matched3_clusV->GetBinContent(bin);
379 float denV = found3_tracksV->GetBinContent(bin);
380 if (denV > 0) {
381 effV = numV / denV;
382 erreffV = std::sqrt(effV * (1 - effV) / denV);
383 }
384 if (effV < effMinV) effMinV = effV;
385 m_hEfficiency3Samples->fill(m_SVDModules[i], 0, effV * 100);
386 m_hEfficiencyErr3Samples->fill(m_SVDModules[i], 0, erreffV * 100);
387 B2DEBUG(10, "effV = " << numV << "/" << denV << " = " << effV << " +- " << erreffV);
388
389 // Efficiency is already computed, and histograms are already filled at this point
390 // Fooling the setEffStatus for 6.x.1 and 6.x.5 to avoid issue due to small statistics
391 // At this point the den value is used only for the check on statistics
392 if (layer == 6 && (sensor == 1 || sensor == 5)) {
393 if (denU < 100) denU = 100; // If everything works, U and V side have the same number of tracks
394 if (denV < 100) denV = 100;
395 }
396
397 setEffStatus(denU, effU, erreffU, m_effUstatus);
398 setEffStatus(denV, effV, erreffV, m_effVstatus);
399
400 B2DEBUG(10, "Status U-side is " << m_effUstatus);
401 B2DEBUG(10, "Status V-side is " << m_effVstatus);
402 }
403 } else {
404 if (matched3_clusU == NULL || found3_tracksU == NULL) {
405 B2INFO("Histograms needed for Efficiency computation are not found");
406 setEffStatus(-1, -1, 0, m_effUstatus);
407 }
408 if (matched3_clusV == NULL || found3_tracksV == NULL) {
409 B2INFO("Histograms needed for Efficiency computation are not found");
410 setEffStatus(-1, -1, 0, m_effVstatus);
411 }
412 }
413
414 // update summary for U side for 3 samples
415 m_valueMinimum = effMinU;
417
418 // update summary for V side for 3 samples
419 m_valueMinimum = effMinV;
421
422 // update error summary for U side for 3 samples
424
425 // update error summary for V side for 3 samples
427 }
428}
429
431{
432 B2DEBUG(10, "DQMHistAnalysisSVDEfficiency: endRun called");
433}
434
436{
437 B2DEBUG(10, "DQMHistAnalysisSVDEfficiency: terminate called");
438
439 delete m_hEfficiency;
440 delete m_cEfficiencyU;
441 delete m_cEfficiencyV;
442 delete m_hEfficiencyErr;
443 delete m_cEfficiencyErrU;
444 delete m_cEfficiencyErrV;
445
450
451 for (int i = 0; i < (int)m_laddersText.size(); i++) delete m_laddersText[i];
452 for (int i = 0; i < (int)m_sensorsText.size(); i++) delete m_sensorsText[i];
453
454 delete m_ly;
455 delete m_lx;
456 delete m_arrowx;
457 delete m_arrowy;
458
459 if (m_3Samples) {
466
471 }
472}
473
474// return y coordinate in TH2F histogram for specified sensor
475Int_t DQMHistAnalysisSVDEfficiencyModule::findBinY(Int_t layer, Int_t sensor)
476{
477 if (layer == 3)
478 return sensor; //2 -> 1,2
479 if (layer == 4)
480 return 2 + 1 + sensor; //6 -> 4,5,6
481 if (layer == 5)
482 return 6 + 1 + sensor; // 11 -> 8, 9, 10, 11
483 if (layer == 6)
484 return 11 + 1 + sensor; // 17 -> 13, 14, 15, 16, 17
485 else
486 return -1;
487}
488
489
490void DQMHistAnalysisSVDEfficiencyModule::setEffStatus(float den, float eff, float err, svdStatus& efficiencyStatus)
491{
492 if (den < 0) {
493 efficiencyStatus = std::max(noStat, efficiencyStatus);
494 } else if (den < m_statThreshold) {
495 efficiencyStatus = std::max(lowStat, efficiencyStatus);
496 } else if (eff + m_nSigma * err > m_effWarning) {
497 efficiencyStatus = std::max(good, efficiencyStatus);
498 } else if ((eff + m_nSigma * err <= m_effWarning) && (eff + m_nSigma * err > m_effError)) {
499 efficiencyStatus = std::max(warning, efficiencyStatus);
500 } else if ((eff + m_nSigma * err <= m_effError)) {
501 efficiencyStatus = std::max(error, efficiencyStatus);
502 }
503}
504
int registerEpicsPV(const std::string &pvname, const std::string &keyname="")
EPICS related Functions.
static TH1 * findHist(const std::string &histname, bool onlyIfUpdated=false)
Get histogram from list (no other search).
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.
static 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.
void updateCanvases(SVDSummaryPlots *histo, TCanvas *canvas, TCanvas *canvasRPhi, svdStatus status, bool isU, int histoType=kOffline)
update canvases
TPaveText * m_legLowStat
plot legend, low stats
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
DQMHistAnalysisSVDModule(bool panelTop=false, bool online=false, bool groupIDs=false)
Constructor.
void updateErrCanvases(SVDSummaryPlots *histo, TCanvas *canvas, TCanvas *canvasRPhi, bool isU)
update error 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.