Belle II Software development
SVDDQMExpressRecoModule.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#include "svd/modules/svdDQM/SVDDQMExpressRecoModule.h"
10
11#include <hlt/softwaretrigger/core/FinalTriggerDecisionCalculator.h>
12#include <framework/datastore/StoreObjPtr.h>
13#include <framework/datastore/StoreArray.h>
14#include <framework/dataobjects/EventMetaData.h>
15
16#include <svd/dataobjects/SVDShaperDigit.h>
17#include <svd/dataobjects/SVDRecoDigit.h>
18#include <svd/dataobjects/SVDCluster.h>
19
20#include <vxd/geometry/SensorInfoBase.h>
21#include <vxd/geometry/GeoTools.h>
22
23#include <boost/format.hpp>
24
25#include "TDirectory.h"
26
27using namespace std;
28using boost::format;
29using namespace Belle2;
30using namespace SoftwareTrigger;
31
32//-----------------------------------------------------------------
33// Register the Module
34//-----------------------------------------------------------------
35REG_MODULE(SVDDQMExpressReco);
36
37
38//-----------------------------------------------------------------
39// Implementation
40//-----------------------------------------------------------------
41
43{
44 //Set module properties
45 setDescription("Original SVD DQM module for ExpressReco.");
46
47 setPropertyFlags(c_ParallelProcessingCertified); // specify this flag if you need parallel processing
48 addParam("offlineZSShaperDigits", m_storeSVDShaperDigitsName, "ShaperDigits StoreArray name - usually ZS5 strips.",
49 std::string("SVDShaperDigitsZS5"));
50 addParam("ShaperDigits", m_storeNoZSSVDShaperDigitsName, "not zero-suppressed ShaperDigits StoreArray name.",
51 std::string("SVDShaperDigits"));
52 addParam("Clusters", m_storeSVDClustersName, "Cluster StoreArray name.",
53 std::string("SVDClusters"));
54 addParam("skipHLTRejectedEvents", m_skipRejectedEvents, "If True, skip events rejected by HLT.", bool(true));
55 addParam("ShowAllHistos", m_ShowAllHistos, "Flag to show all histos in DQM, default = 0.", int(0));
56 addParam("desynchronizeSVDTime", m_desynchSVDTime,
57 "if True, svd time back in SVD time reference.", bool(false));
58 addParam("CutSVDCharge", m_CutSVDCharge,
59 "minimum charge (ADC) to fill the strip-hitmap histogram.", float(0));
60 addParam("CutSVDClusterCharge", m_CutSVDClusterCharge,
61 "minimum charge (in e-) to fill the cluster-hitmap histogram.", float(0));
62 addParam("histogramDirectoryName", m_histogramDirectoryName, "Name of the directory where histograms will be placed.",
63 std::string("SVDExpReco"));
64 addParam("additionalPlots", m_additionalPlots, "Flag to produce additional plots",
65 bool(false));
66 addParam("samples3", m_3Samples, "if True 3 samples histograms analysis is performed", bool(false));
67
68 m_histoList = new TList();
69}
70
71
72SVDDQMExpressRecoModule::~SVDDQMExpressRecoModule()
73{
74}
75
76//------------------------------------------------------------------
77// Function to define histograms
78//-----------------------------------------------------------------
79
81{
83 if (gTools->getNumberOfLayers() == 0) {
84 B2FATAL("Missing geometry for VXD, check steering file.");
85 }
86 if (gTools->getNumberOfSVDLayers() == 0) {
87 B2WARNING("Missing geometry for SVD, SVD-DQM is skipped.");
88 return;
89 }
90
91 // Create a separate histogram directories and cd into it.
92 TDirectory* oldDir = gDirectory;
93 if (m_histogramDirectoryName != "") {
94 oldDir->mkdir(m_histogramDirectoryName.c_str());// do not use return value with ->cd(), its ZERO if dir already exists
95 oldDir->cd(m_histogramDirectoryName.c_str());
96 }
97
98 // basic constants presets:
99 int nSVDSensors = gTools->getNumberOfSVDSensors();
100 int nSVDChips = gTools->getTotalSVDChips();
101
102 // number of events counter
103 m_nEvents = new TH1F("SVDDQM_nEvents", "SVD Number of Events", 1, -0.5, 0.5);
104 m_nEvents->GetYaxis()->SetTitle("N events");
106
107 // Create basic histograms:
108 // basic counters per sensor:
109 m_hitMapCountsU = new TH1F("SVDDQM_StripCountsU", "SVD Integrated Number of ZS5 Fired U-Strips per sensor",
110 nSVDSensors, 0, nSVDSensors);
111 m_hitMapCountsU->GetXaxis()->SetTitle("Sensor ID");
112 m_hitMapCountsU->GetYaxis()->SetTitle("counts");
114 m_hitMapCountsV = new TH1F("SVDDQM_StripCountsV", "SVD Integrated Number of ZS5 Fired V-Strips per sensor",
115 nSVDSensors, 0, nSVDSensors);
116 m_hitMapCountsV->GetXaxis()->SetTitle("Sensor ID");
117 m_hitMapCountsV->GetYaxis()->SetTitle("counts");
119 m_hitMapClCountsU = new TH1F("SVDDQM_ClusterCountsU", "SVD Integrated Number of U-Clusters per sensor",
120 nSVDSensors, 0, nSVDSensors);
121 m_hitMapClCountsU->GetXaxis()->SetTitle("Sensor ID");
122 m_hitMapClCountsU->GetYaxis()->SetTitle("counts");
124 m_hitMapClCountsV = new TH1F("SVDDQM_ClusterCountsV", "SVD Integrated Number of V-Clusters per sensor",
125 nSVDSensors, 0, nSVDSensors);
126 m_hitMapClCountsV->GetXaxis()->SetTitle("Sensor ID");
127 m_hitMapClCountsV->GetYaxis()->SetTitle("counts");
129 for (int i = 0; i < nSVDSensors; i++) {
130 VxdID id = gTools->getSensorIDFromSVDIndex(i);
131 int iLayer = id.getLayerNumber();
132 int iLadder = id.getLadderNumber();
133 int iSensor = id.getSensorNumber();
134 TString AxisTicks = Form("%i_%i_%i", iLayer, iLadder, iSensor);
135 m_hitMapCountsU->GetXaxis()->SetBinLabel(i + 1, AxisTicks.Data());
136 m_hitMapCountsV->GetXaxis()->SetBinLabel(i + 1, AxisTicks.Data());
137 m_hitMapClCountsU->GetXaxis()->SetBinLabel(i + 1, AxisTicks.Data());
138 m_hitMapClCountsV->GetXaxis()->SetBinLabel(i + 1, AxisTicks.Data());
139 }
140
141 // basic counters per chip:
142 m_hitMapCountsChip = new TH1F("SVDDQM_StripCountsChip", "SVD Integrated Number of ZS5 Fired Strips per chip",
143 nSVDChips, 0, nSVDChips);
144 m_hitMapCountsChip->GetXaxis()->SetTitle("Chip ID");
145 m_hitMapCountsChip->GetYaxis()->SetTitle("counts");
147 m_hitMapClCountsChip = new TH1F("SVDDQM_ClusterCountsChip", "SVD Integrated Number of Clusters per chip",
148 nSVDChips, 0, nSVDChips);
149 m_hitMapClCountsChip->GetXaxis()->SetTitle("Chip ID");
150 m_hitMapClCountsChip->GetYaxis()->SetTitle("counts");
152
153 if (m_additionalPlots) {
154 m_firedU = new TH1F*[nSVDSensors];
155 m_firedV = new TH1F*[nSVDSensors];
156 m_clustersU = new TH1F*[nSVDSensors];
157 m_clustersV = new TH1F*[nSVDSensors];
158 m_stripSignalU = new TH1F*[nSVDSensors];
159 m_stripSignalV = new TH1F*[nSVDSensors];
160 }
161
162 m_clusterChargeU = new TH1F*[nSVDSensors];
163 m_clusterChargeV = new TH1F*[nSVDSensors];
164 m_clusterSNRU = new TH1F*[nSVDSensors];
165 m_clusterSNRV = new TH1F*[nSVDSensors];
166
167 m_stripCountU = new TH1F*[nSVDSensors];
168 m_stripCountV = new TH1F*[nSVDSensors];
169 m_strip3SampleCountU = new TH1F*[nSVDSensors];
170 m_strip3SampleCountV = new TH1F*[nSVDSensors];
171 m_strip6SampleCountU = new TH1F*[nSVDSensors];
172 m_strip6SampleCountV = new TH1F*[nSVDSensors];
173
174 m_stripCountGroupId0U = new TH1F*[nSVDSensors];
175 m_stripCountGroupId0V = new TH1F*[nSVDSensors];
176
177 m_onlineZSstripCountU = new TH1F*[nSVDSensors];
178 m_onlineZSstripCountV = new TH1F*[nSVDSensors];
179
180 if (m_3Samples) {
181 m_onlineZSstrip3SampleCountU = new TH1F*[nSVDSensors];
182 m_onlineZSstrip3SampleCountV = new TH1F*[nSVDSensors];
183 m_onlineZSstrip6sampleCountU = new TH1F*[nSVDSensors];
184 m_onlineZSstrip6sampleCountV = new TH1F*[nSVDSensors];
185 }
186
187 m_clusterSizeU = new TH1F*[nSVDSensors];
188 m_clusterSizeV = new TH1F*[nSVDSensors];
189 m_clusterTimeU = new TH1F*[nSVDSensors];
190 m_clusterTimeV = new TH1F*[nSVDSensors];
191
192 int ChargeBins = 80;
193 float ChargeMax = 80;
194 int SNRBins = 50;
195 float SNRMax = 100;
196 int TimeBins = 300;
197 float TimeMin = -150;
198 float TimeMax = 150;
199
200 int GroupIdBins = 21;
201 float GroupIdMin = -1.5;
202 float GroupIdMax = 19.5;
203
204 int MaxBinBins = 6;
205 int MaxBinMax = 6;
206
207 TString refFrame = "in FTSW reference";
209 refFrame = "in SVD reference";
210
211
212 //----------------------------------------------------------------
213 // Charge of clusters for all sensors
214 //----------------------------------------------------------------
215 string name = str(format("SVDDQM_ClusterChargeUAll"));
216 string title = str(format("SVD U-Cluster Charge for all sensors"));
217 m_clusterChargeUAll = new TH1F(name.c_str(), title.c_str(), ChargeBins, 0, ChargeMax);
218 m_clusterChargeUAll->GetXaxis()->SetTitle("cluster charge [ke-]");
219 m_clusterChargeUAll->GetYaxis()->SetTitle("count");
221 name = str(format("SVDDQM_ClusterChargeVAll"));
222 title = str(format("SVD V-Cluster Charge for all sensors"));
223 m_clusterChargeVAll = new TH1F(name.c_str(), title.c_str(), ChargeBins, 0, ChargeMax);
224 m_clusterChargeVAll->GetXaxis()->SetTitle("cluster charge [ke-]");
225 m_clusterChargeVAll->GetYaxis()->SetTitle("count");
227 //----------------------------------------------------------------
228 // Charge of clusters for L3/L456 sensors
229 //----------------------------------------------------------------
230 name = str(format("SVDDQM_ClusterChargeU3"));
231 title = str(format("SVD U-Cluster Charge for layer 3 sensors"));
232 m_clusterChargeU3 = new TH1F(name.c_str(), title.c_str(), ChargeBins, 0, ChargeMax);
233 m_clusterChargeU3->GetXaxis()->SetTitle("cluster charge [ke-]");
234 m_clusterChargeU3->GetYaxis()->SetTitle("count");
236 name = str(format("SVDDQM_ClusterChargeV3"));
237 title = str(format("SVD V-Cluster Charge for layer 3 sensors"));
238 m_clusterChargeV3 = new TH1F(name.c_str(), title.c_str(), ChargeBins, 0, ChargeMax);
239 m_clusterChargeV3->GetXaxis()->SetTitle("cluster charge [ke-]");
240 m_clusterChargeV3->GetYaxis()->SetTitle("count");
242
243 name = str(format("SVDDQM_ClusterChargeU456"));
244 title = str(format("SVD U-Cluster Charge for layers 4,5,6 sensors"));
245 m_clusterChargeU456 = new TH1F(name.c_str(), title.c_str(), ChargeBins, 0, ChargeMax);
246 m_clusterChargeU456->GetXaxis()->SetTitle("cluster charge [ke-]");
247 m_clusterChargeU456->GetYaxis()->SetTitle("count");
249
250 name = str(format("SVDDQM_ClusterChargeV456"));
251 title = str(format("SVD V-Cluster Charge for layers 4,5,6 sensors"));
252 m_clusterChargeV456 = new TH1F(name.c_str(), title.c_str(), ChargeBins, 0, ChargeMax);
253 m_clusterChargeV456->GetXaxis()->SetTitle("cluster charge [ke-]");
254 m_clusterChargeV456->GetYaxis()->SetTitle("count");
256
257 //----------------------------------------------------------------
258 // SNR of clusters for all sensors
259 //----------------------------------------------------------------
260 name = str(format("SVDDQM_ClusterSNRUAll"));
261 title = str(format("SVD U-Cluster SNR for all sensors"));
262 m_clusterSNRUAll = new TH1F(name.c_str(), title.c_str(), SNRBins, 0, SNRMax); // max = ~ 60
263 m_clusterSNRUAll->GetXaxis()->SetTitle("cluster SNR");
264 m_clusterSNRUAll->GetYaxis()->SetTitle("count");
266 name = str(format("SVDDQM_ClusterSNRVAll"));
267 title = str(format("SVD V-Cluster SNR for all sensors"));
268 m_clusterSNRVAll = new TH1F(name.c_str(), title.c_str(), SNRBins, 0, SNRMax);
269 m_clusterSNRVAll->GetXaxis()->SetTitle("cluster SNR");
270 m_clusterSNRVAll->GetYaxis()->SetTitle("count");
272 //----------------------------------------------------------------
273 // SNR of clusters for L3/L456 sensors
274 //----------------------------------------------------------------
275 name = str(format("SVDDQM_ClusterSNRU3"));
276 title = str(format("SVD U-Cluster SNR for layer 3 sensors"));
277 m_clusterSNRU3 = new TH1F(name.c_str(), title.c_str(), SNRBins, 0, SNRMax);
278 m_clusterSNRU3->GetXaxis()->SetTitle("cluster SNR");
279 m_clusterSNRU3->GetYaxis()->SetTitle("count");
281 name = str(format("SVDDQM_ClusterSNRV3"));
282 title = str(format("SVD V-Cluster SNR for layer 3 sensors"));
283 m_clusterSNRV3 = new TH1F(name.c_str(), title.c_str(), SNRBins, 0, SNRMax);
284 m_clusterSNRV3->GetXaxis()->SetTitle("cluster SNR");
285 m_clusterSNRV3->GetYaxis()->SetTitle("count");
287
288 name = str(format("SVDDQM_ClusterSNRU456"));
289 title = str(format("SVD U-Cluster SNR for layers 4,5,6 sensors"));
290 m_clusterSNRU456 = new TH1F(name.c_str(), title.c_str(), SNRBins, 0, SNRMax);
291 m_clusterSNRU456->GetXaxis()->SetTitle("cluster SNR");
292 m_clusterSNRU456->GetYaxis()->SetTitle("count");
294 name = str(format("SVDDQM_ClusterSNRV456"));
295 title = str(format("SVD V-Cluster SNR for layers 4,5,6 sensors"));
296 m_clusterSNRV456 = new TH1F(name.c_str(), title.c_str(), SNRBins, 0, SNRMax);
297 m_clusterSNRV456->GetXaxis()->SetTitle("cluster SNR");
298 m_clusterSNRV456->GetYaxis()->SetTitle("count");
300 //----------------------------------------------------------------
301 // Cluster time distribution for all sensors
302 //----------------------------------------------------------------
303 TString Name = "SVDDQM_ClusterTimeUAll";
304 TString Title = Form("SVD U-Cluster Time %s for all sensors", refFrame.Data());
305 m_clusterTimeUAll = new TH1F(Name.Data(), Title.Data(), TimeBins, TimeMin, TimeMax);
306 m_clusterTimeUAll->GetXaxis()->SetTitle("cluster time (ns)");
307 m_clusterTimeUAll->GetYaxis()->SetTitle("count");
309 Name = "SVDDQM_ClusterTimeVAll";
310 Title = Form("SVD V-Cluster Time %s for all sensors", refFrame.Data());
311 m_clusterTimeVAll = new TH1F(Name.Data(), Title.Data(), TimeBins, TimeMin, TimeMax);
312 m_clusterTimeVAll->GetXaxis()->SetTitle("cluster time (ns)");
313 m_clusterTimeVAll->GetYaxis()->SetTitle("count");
315 //----------------------------------------------------------------
316 // Time of clusters for L3/L456 sensors
317 //----------------------------------------------------------------
318 Name = "SVDDQM_ClusterTimeU3";
319 Title = Form("SVD U-Cluster Time %s for layer 3 sensors", refFrame.Data());
320 m_clusterTimeU3 = new TH1F(Name.Data(), Title.Data(), TimeBins, TimeMin, TimeMax);
321 m_clusterTimeU3->GetXaxis()->SetTitle("cluster time (ns)");
322 m_clusterTimeU3->GetYaxis()->SetTitle("count");
324 name = str(format("SVDDQM_ClusterTimeV3"));
325 Title = Form("SVD V-Cluster Time %s for layer 3 sensors", refFrame.Data());
326 m_clusterTimeV3 = new TH1F(name.c_str(), Title.Data(), TimeBins, TimeMin, TimeMax);
327 m_clusterTimeV3->GetXaxis()->SetTitle("cluster time (ns)");
328 m_clusterTimeV3->GetYaxis()->SetTitle("count");
330
331 name = str(format("SVDDQM_ClusterTimeU456"));
332 Title = Form("SVD U-Cluster Time %s for layers 4,5,6 sensors", refFrame.Data());
333 m_clusterTimeU456 = new TH1F(name.c_str(), Title.Data(), TimeBins, TimeMin, TimeMax);
334 m_clusterTimeU456->GetXaxis()->SetTitle("cluster time (ns)");
335 m_clusterTimeU456->GetYaxis()->SetTitle("count");
337 name = str(format("SVDDQM_ClusterTimeV456"));
338 Title = Form("SVD V-Cluster Time %s for layers 4,5,6 sensors", refFrame.Data());
339 m_clusterTimeV456 = new TH1F(name.c_str(), Title.Data(), TimeBins, TimeMin, TimeMax);
340 m_clusterTimeV456->GetXaxis()->SetTitle("cluster time (ns)");
341 m_clusterTimeV456->GetYaxis()->SetTitle("count");
343
344 //----------------------------------------------------------------
345 // Time of clusters for L3/L456 sensors for 3 samples
346 //----------------------------------------------------------------
347 if (m_3Samples) {
348 Name = "SVDDQM_Cluster3TimeU3";
349 Title = Form("SVD U-Cluster Time %s for layer 3 sensors for 3 samples", refFrame.Data());
350 m_cluster3SampleTimeU3 = new TH1F(Name.Data(), Title.Data(), TimeBins, TimeMin, TimeMax);
351 m_cluster3SampleTimeU3->GetXaxis()->SetTitle("cluster time (ns)");
352 m_cluster3SampleTimeU3->GetYaxis()->SetTitle("count");
354 name = str(format("SVDDQM_Cluster3TimeV3"));
355 Title = Form("SVD V-Cluster Time %s for layer 3 sensors for 3 samples", refFrame.Data());
356 m_cluster3SampleTimeV3 = new TH1F(name.c_str(), Title.Data(), TimeBins, TimeMin, TimeMax);
357 m_cluster3SampleTimeV3->GetXaxis()->SetTitle("cluster time (ns)");
358 m_cluster3SampleTimeV3->GetYaxis()->SetTitle("count");
360 name = str(format("SVDDQM_Cluster3TimeU456"));
361 Title = Form("SVD U-Cluster Time %s for layers 4,5,6 sensors for 3 samples", refFrame.Data());
362 m_cluster3SampleTimeU456 = new TH1F(name.c_str(), Title.Data(), TimeBins, TimeMin, TimeMax);
363 m_cluster3SampleTimeU456->GetXaxis()->SetTitle("cluster time (ns)");
364 m_cluster3SampleTimeU456->GetYaxis()->SetTitle("count");
366 name = str(format("SVDDQM_Cluster3TimeV456"));
367 Title = Form("SVD V-Cluster Time %s for layers 4,5,6 sensors for 3 samples", refFrame.Data());
368 m_cluster3SampleTimeV456 = new TH1F(name.c_str(), Title.Data(), TimeBins, TimeMin, TimeMax);
369 m_cluster3SampleTimeV456->GetXaxis()->SetTitle("cluster time (ns)");
370 m_cluster3SampleTimeV456->GetYaxis()->SetTitle("count");
372
373 //----------------------------------------------------------------
374 // Time of clusters for L3/L456 sensors for 6 samples
375 //----------------------------------------------------------------
376 Name = "SVDDQM_Cluster6TimeU3";
377 Title = Form("SVD U-Cluster Time %s for layer 3 sensors for 6 samples", refFrame.Data());
378 m_cluster6SampleTimeU3 = new TH1F(Name.Data(), Title.Data(), TimeBins, TimeMin, TimeMax);
379 m_cluster6SampleTimeU3->GetXaxis()->SetTitle("cluster time (ns)");
380 m_cluster6SampleTimeU3->GetYaxis()->SetTitle("count");
382 name = str(format("SVDDQM_Cluster6TimeV3"));
383 Title = Form("SVD V-Cluster Time %s for layer 3 sensors for 6 samples", refFrame.Data());
384 m_cluster6SampleTimeV3 = new TH1F(name.c_str(), Title.Data(), TimeBins, TimeMin, TimeMax);
385 m_cluster6SampleTimeV3->GetXaxis()->SetTitle("cluster time (ns)");
386 m_cluster6SampleTimeV3->GetYaxis()->SetTitle("count");
388
389 name = str(format("SVDDQM_Cluster6TimeU456"));
390 Title = Form("SVD U-Cluster Time %s for layers 4,5,6 sensors for 6 samples", refFrame.Data());
391 m_cluster6SampleTimeU456 = new TH1F(name.c_str(), Title.Data(), TimeBins, TimeMin, TimeMax);
392 m_cluster6SampleTimeU456->GetXaxis()->SetTitle("cluster time (ns)");
393 m_cluster6SampleTimeU456->GetYaxis()->SetTitle("count");
395 name = str(format("SVDDQM_Cluster6TimeV456"));
396 Title = Form("SVD V-Cluster Time %s for layers 4,5,6 sensors for 6 samples", refFrame.Data());
397 m_cluster6SampleTimeV456 = new TH1F(name.c_str(), Title.Data(), TimeBins, TimeMin, TimeMax);
398 m_cluster6SampleTimeV456->GetXaxis()->SetTitle("cluster time (ns)");
399 m_cluster6SampleTimeV456->GetYaxis()->SetTitle("count");
401 }
402
403 //----------------------------------------------------------------
404 // Cluster time group Id vs cluster time for U/V sensors
405 //----------------------------------------------------------------
406 Name = "SVDDQM_ClusterTimeGroupIdU";
407 Title = Form("SVD cluster Time Group Id %s vs cluster time for U/P Side", refFrame.Data());
408 m_clusterTimeGroupIdU = new TH2F(Name.Data(), Title.Data(), TimeBins / 2, TimeMin, TimeMax, GroupIdBins, GroupIdMin, GroupIdMax);
409 m_clusterTimeGroupIdU->GetXaxis()->SetTitle("cluster time (ns)");
410 m_clusterTimeGroupIdU->GetYaxis()->SetTitle("cluster group id");
412 Name = "SVDDQM_ClusterTimeGroupIdV";
413 Title = Form("SVD cluster Time Group Id %s vs cluster time for V/N Side", refFrame.Data());
414 m_clusterTimeGroupIdV = new TH2F(Name.Data(), Title.Data(), TimeBins / 2, TimeMin, TimeMax, GroupIdBins, GroupIdMin, GroupIdMax);
415 m_clusterTimeGroupIdV->GetXaxis()->SetTitle("cluster time (ns)");
416 m_clusterTimeGroupIdV->GetYaxis()->SetTitle("cluster group id");
418
419 //----------------------------------------------------------------
420 // Cluster time group Id vs cluster time for U/V sensors for coarse and fine trigger
421 //----------------------------------------------------------------
422 Name = "SVDDQM_cluster6TimeGroupIdU";
423 Title = Form("SVD cluster Time Group Id %s vs cluster time for U/P Side for coarse trigger", refFrame.Data());
424 m_clusterTimeCoarseGroupIdU = new TH2F(Name.Data(), Title.Data(), TimeBins / 2, TimeMin, TimeMax, GroupIdBins, GroupIdMin,
425 GroupIdMax);
426 m_clusterTimeCoarseGroupIdU->GetXaxis()->SetTitle("cluster time (ns)");
427 m_clusterTimeCoarseGroupIdU->GetYaxis()->SetTitle("cluster group id");
429 Name = "SVDDQM_cluster6TimeGroupIdV";
430 Title = Form("SVD cluster Time Group Id %s vs cluster time for V/N Side for coarse trigger", refFrame.Data());
431 m_clusterTimeCoarseGroupIdV = new TH2F(Name.Data(), Title.Data(), TimeBins / 2, TimeMin, TimeMax, GroupIdBins, GroupIdMin,
432 GroupIdMax);
433 m_clusterTimeCoarseGroupIdV->GetXaxis()->SetTitle("cluster time (ns)");
434 m_clusterTimeCoarseGroupIdV->GetYaxis()->SetTitle("cluster group id");
436
437 Name = "SVDDQM_cluster3TimeGroupIdU";
438 Title = Form("SVD cluster Time Group Id %s vs cluster time for U/P Side for fine trigger", refFrame.Data());
439 m_clusterTimeFineGroupIdU = new TH2F(Name.Data(), Title.Data(), TimeBins / 2, TimeMin, TimeMax, GroupIdBins, GroupIdMin,
440 GroupIdMax);
441 m_clusterTimeFineGroupIdU->GetXaxis()->SetTitle("cluster time (ns)");
442 m_clusterTimeFineGroupIdU->GetYaxis()->SetTitle("cluster group id");
444 Name = "SVDDQM_cluster3TimeGroupIdV";
445 Title = Form("SVD cluster Time Group Id %s vs cluster time for V/N Side for fine trigger", refFrame.Data());
446 m_clusterTimeFineGroupIdV = new TH2F(Name.Data(), Title.Data(), TimeBins / 2, TimeMin, TimeMax, GroupIdBins, GroupIdMin,
447 GroupIdMax);
448 m_clusterTimeFineGroupIdV->GetXaxis()->SetTitle("cluster time (ns)");
449 m_clusterTimeFineGroupIdV->GetYaxis()->SetTitle("cluster group id");
451
452 //----------------------------------------------------------------
453 // MaxBin of strips for all sensors (offline ZS)
454 //----------------------------------------------------------------
455 name = str(format("SVDDQM_StripMaxBinUAll"));
456 title = str(format("SVD U-Strip MaxBin for all sensors"));
457 m_stripMaxBinUAll = new TH1F(name.c_str(), title.c_str(), MaxBinBins, 0, MaxBinMax);
458 m_stripMaxBinUAll->GetXaxis()->SetTitle("max bin");
459 m_stripMaxBinUAll->GetYaxis()->SetTitle("count");
461 name = str(format("SVDDQM_StripMaxBinVAll"));
462 title = str(format("SVD V-Strip MaxBin for all sensors"));
463 m_stripMaxBinVAll = new TH1F(name.c_str(), title.c_str(), MaxBinBins, 0, MaxBinMax);
464 m_stripMaxBinVAll->GetXaxis()->SetTitle("max bin");
465 m_stripMaxBinVAll->GetYaxis()->SetTitle("count");
467
468 name = str(format("SVDDQM_StripMaxBinU3"));
469 title = str(format("SVD U-Strip MaxBin for layer 3 sensors"));
470 m_stripMaxBinU3 = new TH1F(name.c_str(), title.c_str(), MaxBinBins, 0, MaxBinMax);
471 m_stripMaxBinU3->GetXaxis()->SetTitle("max bin");
472 m_stripMaxBinU3->GetYaxis()->SetTitle("count");
474 name = str(format("SVDDQM_StripMaxBinV3"));
475 title = str(format("SVD V-Strip MaxBin for layer 3 sensors"));
476 m_stripMaxBinV3 = new TH1F(name.c_str(), title.c_str(), MaxBinBins, 0, MaxBinMax);
477 m_stripMaxBinV3->GetXaxis()->SetTitle("max bin");
478 m_stripMaxBinV3->GetYaxis()->SetTitle("count");
480
481 name = str(format("SVDDQM_StripMaxBinU6"));
482 title = str(format("SVD U-Strip MaxBin for layer 6 sensors"));
483 m_stripMaxBinU6 = new TH1F(name.c_str(), title.c_str(), MaxBinBins, 0, MaxBinMax);
484 m_stripMaxBinU6->GetXaxis()->SetTitle("max bin");
485 m_stripMaxBinU6->GetYaxis()->SetTitle("count");
487 name = str(format("SVDDQM_StripMaxBinV6"));
488 title = str(format("SVD V-Strip MaxBin for layer 6 sensors"));
489 m_stripMaxBinV6 = new TH1F(name.c_str(), title.c_str(), MaxBinBins, 0, MaxBinMax);
490 m_stripMaxBinV6->GetXaxis()->SetTitle("max bin");
491 m_stripMaxBinV6->GetYaxis()->SetTitle("count");
493
494 for (int i = 0; i < nSVDSensors; i++) {
495 VxdID id = gTools->getSensorIDFromSVDIndex(i);
496 int iLayer = id.getLayerNumber();
497 int iLadder = id.getLadderNumber();
498 int iSensor = id.getSensorNumber();
499 VxdID sensorID(iLayer, iLadder, iSensor);
500 SVD::SensorInfo SensorInfo = dynamic_cast<const SVD::SensorInfo&>(VXD::GeoCache::getInstance().getSensorInfo(sensorID));
501 string sensorDescr = str(format("%1%_%2%_%3%") % iLayer % iLadder % iSensor);
502
503 if (m_additionalPlots) {
504 //----------------------------------------------------------------
505 // Number of fired strips per sensor
506 //----------------------------------------------------------------
507 name = str(format("SVDDQM_%1%_FiredU") % sensorDescr);
508 title = str(format("SVD Sensor %1% Number of Fired U-Strips") % sensorDescr);
509 m_firedU[i] = new TH1F(name.c_str(), title.c_str(), 50, 0, 50);
510 m_firedU[i]->GetXaxis()->SetTitle("# fired strips");
511 m_firedU[i]->GetYaxis()->SetTitle("count");
512 m_histoList->Add(m_firedU[i]);
513 name = str(format("SVDDQM_%1%_FiredV") % sensorDescr);
514 title = str(format("SVD Sensor %1% Number of Fired V-Strips") % sensorDescr);
515 m_firedV[i] = new TH1F(name.c_str(), title.c_str(), 50, 0, 50);
516 m_firedV[i]->GetXaxis()->SetTitle("# fired strips");
517 m_firedV[i]->GetYaxis()->SetTitle("count");
518 m_histoList->Add(m_firedV[i]);
519 //----------------------------------------------------------------
520 // Number of clusters per sensor
521 //----------------------------------------------------------------
522 name = str(format("SVDDQM_%1%_ClustersU") % sensorDescr);
523 title = str(format("SVD Sensor %1% Number of U-Clusters") % sensorDescr);
524 m_clustersU[i] = new TH1F(name.c_str(), title.c_str(), 20, 0, 20);
525 m_clustersU[i]->GetXaxis()->SetTitle("# clusters");
526 m_clustersU[i]->GetYaxis()->SetTitle("count");
527 m_histoList->Add(m_clustersU[i]);
528 name = str(format("SVDDQM_%1%_ClustersV") % sensorDescr);
529 title = str(format("SVD Sensor %1% Number of V-Clusters") % sensorDescr);
530 m_clustersV[i] = new TH1F(name.c_str(), title.c_str(), 20, 0, 20);
531 m_clustersV[i]->GetXaxis()->SetTitle("# clusters");
532 m_clustersV[i]->GetYaxis()->SetTitle("count");
533 m_histoList->Add(m_clustersV[i]);
534 //----------------------------------------------------------------
535 // Charge of strips
536 //----------------------------------------------------------------
537 name = str(format("SVDDQM_%1%_ADCStripU") % sensorDescr);
538 title = str(format("SVD Sensor %1% U-Strip signal in ADC Counts, all 6 APV samples") % sensorDescr);
539 m_stripSignalU[i] = new TH1F(name.c_str(), title.c_str(), 256, -0.5, 255.5);
540 m_stripSignalU[i]->GetXaxis()->SetTitle("signal ADC");
541 m_stripSignalU[i]->GetYaxis()->SetTitle("count");
543 name = str(format("SVDDQM_%1%_ADCStripV") % sensorDescr);
544 title = str(format("SVD Sensor %1% V-Strip signal in ADC Counts, all 6 APV samples") % sensorDescr);
545 m_stripSignalV[i] = new TH1F(name.c_str(), title.c_str(), 256, -0.5, 255.5);
546 m_stripSignalV[i]->GetXaxis()->SetTitle("signal ADC");
547 m_stripSignalV[i]->GetYaxis()->SetTitle("count");
549 }
550
551 //----------------------------------------------------------------
552 // Charge of clusters
553 //----------------------------------------------------------------
554 name = str(format("SVDDQM_%1%_ClusterChargeU") % sensorDescr);
555 title = str(format("SVD Sensor %1% U-Cluster Charge") % sensorDescr);
556 m_clusterChargeU[i] = new TH1F(name.c_str(), title.c_str(), ChargeBins, 0, ChargeMax);
557 m_clusterChargeU[i]->GetXaxis()->SetTitle("cluster charge [ke-]");
558 m_clusterChargeU[i]->GetYaxis()->SetTitle("count");
560 name = str(format("SVDDQM_%1%_ClusterChargeV") % sensorDescr);
561 title = str(format("SVD Sensor %1% V-Cluster Charge") % sensorDescr);
562 m_clusterChargeV[i] = new TH1F(name.c_str(), title.c_str(), ChargeBins, 0, ChargeMax);
563 m_clusterChargeV[i]->GetXaxis()->SetTitle("cluster charge [ke-]");
564 m_clusterChargeV[i]->GetYaxis()->SetTitle("count");
566 //----------------------------------------------------------------
567 // SNR of clusters
568 //----------------------------------------------------------------
569 name = str(format("SVDDQM_%1%_ClusterSNRU") % sensorDescr);
570 title = str(format("SVD Sensor %1% U-Cluster SNR") % sensorDescr);
571 m_clusterSNRU[i] = new TH1F(name.c_str(), title.c_str(), SNRBins, 0, SNRMax);
572 m_clusterSNRU[i]->GetXaxis()->SetTitle("cluster SNR");
573 m_clusterSNRU[i]->GetYaxis()->SetTitle("count");
574 m_histoList->Add(m_clusterSNRU[i]);
575 name = str(format("SVDDQM_%1%_ClusterSNRV") % sensorDescr);
576 title = str(format("SVD Sensor %1% V-Cluster SNR") % sensorDescr);
577 m_clusterSNRV[i] = new TH1F(name.c_str(), title.c_str(), SNRBins, 0, SNRMax);
578 m_clusterSNRV[i]->GetXaxis()->SetTitle("cluster SNR");
579 m_clusterSNRV[i]->GetYaxis()->SetTitle("count");
580 m_histoList->Add(m_clusterSNRV[i]);
581
582 //----------------------------------------------------------------
583 // Strips Counts
584 //----------------------------------------------------------------
585 name = str(format("SVDDQM_%1%_StripCountU") % sensorDescr);
586 title = str(format("SVD Sensor %1% Integrated Number of ZS5 Fired U-Strip vs Strip Number") % sensorDescr);
587 m_stripCountU[i] = new TH1F(name.c_str(), title.c_str(), 768, -0.5, 767.5);
588 m_stripCountU[i]->GetXaxis()->SetTitle("cellID");
589 m_stripCountU[i]->GetYaxis()->SetTitle("count");
590 m_histoList->Add(m_stripCountU[i]);
591 name = str(format("SVDDQM_%1%_StripCountV") % sensorDescr);
592 title = str(format("SVD Sensor %1% Integrated Number of ZS5 Fired V-Strip vs Strip Number") % sensorDescr);
593 m_stripCountV[i] = new TH1F(name.c_str(), title.c_str(), 768, -0.5, 767.5);
594 m_stripCountV[i]->GetXaxis()->SetTitle("cellID");
595 m_stripCountV[i]->GetYaxis()->SetTitle("count");
596 m_histoList->Add(m_stripCountV[i]);
597 //----------------------------------------------------------------
598 // Strips Counts with online ZS
599 //----------------------------------------------------------------
600 name = str(format("SVDDQM_%1%_OnlineZSStripCountU") % sensorDescr);
601 title = str(format("SVD Sensor %1% Integrated Number of online-ZS Fired U-Strip vs Strip Number") % sensorDescr);
602 m_onlineZSstripCountU[i] = new TH1F(name.c_str(), title.c_str(), 768, -0.5, 767.5);
603 m_onlineZSstripCountU[i]->GetXaxis()->SetTitle("cellID");
604 m_onlineZSstripCountU[i]->GetYaxis()->SetTitle("count");
606 name = str(format("SVDDQM_%1%_OnlineZSStripCountV") % sensorDescr);
607 title = str(format("SVD Sensor %1% Integrated Number of online-ZS Fired V-Strip vs Strip Number") % sensorDescr);
608 m_onlineZSstripCountV[i] = new TH1F(name.c_str(), title.c_str(), 768, -0.5, 767.5);
609 m_onlineZSstripCountV[i]->GetXaxis()->SetTitle("cellID");
610 m_onlineZSstripCountV[i]->GetYaxis()->SetTitle("count");
612
613 //----------------------------------------------------------------
614 // Strips Counts for 3 samples
615 //----------------------------------------------------------------
616 if (m_3Samples) {
617 name = str(format("SVDDQM_%1%_Strip3CountU") % sensorDescr);
618 title = str(format("SVD Sensor %1% Integrated Number of ZS5 Fired U-Strip vs Strip Number for 3 samples") % sensorDescr);
619 m_strip3SampleCountU[i] = new TH1F(name.c_str(), title.c_str(), 768, -0.5, 767.5);
620 m_strip3SampleCountU[i]->GetXaxis()->SetTitle("cellID");
621 m_strip3SampleCountU[i]->GetYaxis()->SetTitle("count");
623 name = str(format("SVDDQM_%1%_Strip3CountV") % sensorDescr);
624 title = str(format("SVD Sensor %1% Integrated Number of ZS5 Fired V-Strip vs Strip Number for 3 samples") % sensorDescr);
625 m_strip3SampleCountV[i] = new TH1F(name.c_str(), title.c_str(), 768, -0.5, 767.5);
626 m_strip3SampleCountV[i]->GetXaxis()->SetTitle("cellID");
627 m_strip3SampleCountV[i]->GetYaxis()->SetTitle("count");
629
630 //----------------------------------------------------------------
631 // Strips Counts with online ZS for 3 samples
632 //----------------------------------------------------------------
633 name = str(format("SVDDQM_%1%_OnlineZSStrip3CountU") % sensorDescr);
634 title = str(format("SVD Sensor %1% Integrated Number of online-ZS Fired U-Strip vs Strip Number for 3 samples") % sensorDescr);
635 m_onlineZSstrip3SampleCountU[i] = new TH1F(name.c_str(), title.c_str(), 768, -0.5, 767.5);
636 m_onlineZSstrip3SampleCountU[i]->GetXaxis()->SetTitle("cellID");
637 m_onlineZSstrip3SampleCountU[i]->GetYaxis()->SetTitle("count");
639 name = str(format("SVDDQM_%1%_OnlineZSStrip3CountV") % sensorDescr);
640 title = str(format("SVD Sensor %1% Integrated Number of online-ZS Fired V-Strip vs Strip Number for 3 samples") % sensorDescr);
641 m_onlineZSstrip3SampleCountV[i] = new TH1F(name.c_str(), title.c_str(), 768, -0.5, 767.5);
642 m_onlineZSstrip3SampleCountV[i]->GetXaxis()->SetTitle("cellID");
643 m_onlineZSstrip3SampleCountV[i]->GetYaxis()->SetTitle("count");
645
646 //----------------------------------------------------------------
647 // Strips Counts for 6 samples
648 //----------------------------------------------------------------
649 name = str(format("SVDDQM_%1%_Strip6CountU") % sensorDescr);
650 title = str(format("SVD Sensor %1% Integrated Number of ZS5 Fired U-Strip vs Strip Number for 6 samples") % sensorDescr);
651 m_strip6SampleCountU[i] = new TH1F(name.c_str(), title.c_str(), 768, -0.5, 767.5);
652 m_strip6SampleCountU[i]->GetXaxis()->SetTitle("cellID");
653 m_strip6SampleCountU[i]->GetYaxis()->SetTitle("count");
655 name = str(format("SVDDQM_%1%_strip6CountV") % sensorDescr);
656 title = str(format("SVD Sensor %1% Integrated Number of ZS5 Fired V-Strip vs Strip Number for 6 samples") % sensorDescr);
657 m_strip6SampleCountV[i] = new TH1F(name.c_str(), title.c_str(), 768, -0.5, 767.5);
658 m_strip6SampleCountV[i]->GetXaxis()->SetTitle("cellID");
659 m_strip6SampleCountV[i]->GetYaxis()->SetTitle("count");
661 //----------------------------------------------------------------
662 // Strips Counts with online ZS for 6 samples
663 //----------------------------------------------------------------
664 name = str(format("SVDDQM_%1%_OnlineZSStrip6CountU") % sensorDescr);
665 title = str(format("SVD Sensor %1% Integrated Number of online-ZS Fired U-Strip vs Strip Number for 6 samples") % sensorDescr);
666 m_onlineZSstrip6sampleCountU[i] = new TH1F(name.c_str(), title.c_str(), 768, -0.5, 767.5);
667 m_onlineZSstrip6sampleCountU[i]->GetXaxis()->SetTitle("cellID");
668 m_onlineZSstrip6sampleCountU[i]->GetYaxis()->SetTitle("count");
670 name = str(format("SVDDQM_%1%_OnlineZSStrip6CountV") % sensorDescr);
671 title = str(format("SVD Sensor %1% Integrated Number of online-ZS Fired V-Strip vs Strip Number for 6 samples") % sensorDescr);
672 m_onlineZSstrip6sampleCountV[i] = new TH1F(name.c_str(), title.c_str(), 768, -0.5, 767.5);
673 m_onlineZSstrip6sampleCountV[i]->GetXaxis()->SetTitle("cellID");
674 m_onlineZSstrip6sampleCountV[i]->GetYaxis()->SetTitle("count");
676 }
677
678 //----------------------------------------------------------------
679 // Strips Counts for cluster time group id = 0
680 //----------------------------------------------------------------
681 name = str(format("SVDDQM_%1%_StripCountGroupId0U") % sensorDescr);
682 title = str(format("SVD Sensor %1% Integrated NumberFired U-Strip for group Id = 0 vs Strip Number") % sensorDescr);
683 m_stripCountGroupId0U[i] = new TH1F(name.c_str(), title.c_str(), 768, -0.5, 767.5);
684 m_stripCountGroupId0U[i]->GetXaxis()->SetTitle("cellID");
685 m_stripCountGroupId0U[i]->GetYaxis()->SetTitle("count");
687 name = str(format("SVDDQM_%1%_StripCountGroupId0V") % sensorDescr);
688 title = str(format("SVD Sensor %1% Integrated Number of Fired V-Strip for group Id = 0 vs Strip Number") % sensorDescr);
689 m_stripCountGroupId0V[i] = new TH1F(name.c_str(), title.c_str(), 768, -0.5, 767.5);
690 m_stripCountGroupId0V[i]->GetXaxis()->SetTitle("cellID");
691 m_stripCountGroupId0V[i]->GetYaxis()->SetTitle("count");
693
694 //----------------------------------------------------------------
695 // Cluster size distribution
696 //----------------------------------------------------------------
697 name = str(format("SVDDQM_%1%_ClusterSizeU") % sensorDescr);
698 title = str(format("SVD Sensor %1% U-Cluster Size") % sensorDescr);
699 m_clusterSizeU[i] = new TH1F(name.c_str(), title.c_str(), 9, 1, 10);
700 m_clusterSizeU[i]->GetXaxis()->SetTitle("cluster size");
701 m_clusterSizeU[i]->GetYaxis()->SetTitle("count");
703 name = str(format("SVDDQM_%1%_ClusterSizeV") % sensorDescr);
704 title = str(format("SVD Sensor %1% V-Cluster Size") % sensorDescr);
705 m_clusterSizeV[i] = new TH1F(name.c_str(), title.c_str(), 9, 1, 10);
706 m_clusterSizeV[i]->GetXaxis()->SetTitle("cluster size");
707 m_clusterSizeV[i]->GetYaxis()->SetTitle("count");
709 //----------------------------------------------------------------
710 // Cluster time distribution
711 //----------------------------------------------------------------
712 name = str(format("SVDDQM_%1%_ClusterTimeU") % sensorDescr);
713 Title = Form("SVD Sensor %s U-Cluster Time %s", sensorDescr.c_str(), refFrame.Data());
714 m_clusterTimeU[i] = new TH1F(name.c_str(), Title.Data(), TimeBins, TimeMin, TimeMax);
715 m_clusterTimeU[i]->GetXaxis()->SetTitle("cluster time (ns)");
716 m_clusterTimeU[i]->GetYaxis()->SetTitle("count");
718 name = str(format("SVDDQM_%1%_ClusterTimeV") % sensorDescr);
719 Title = Form("SVD Sensor %s V-Cluster Time %s", sensorDescr.c_str(), refFrame.Data());
720 m_clusterTimeV[i] = new TH1F(name.c_str(), Title.Data(), TimeBins, TimeMin, TimeMax);
721 m_clusterTimeV[i]->GetXaxis()->SetTitle("cluster time (ns)");
722 m_clusterTimeV[i]->GetYaxis()->SetTitle("count");
724 }
725
726 for (int i = 0; i < nSVDChips; i++) {
727 VxdID id = gTools->getChipIDFromSVDIndex(i);
728 int iLayer = id.getLayerNumber();
729 int iLadder = id.getLadderNumber();
730 int iSensor = id.getSensorNumber();
731 int iChip = gTools->getSVDChipNumber(id);
732 int IsU = gTools->isSVDSideU(id);
733 TString AxisTicks = Form("%i_%i_%i_u%i", iLayer, iLadder, iSensor, iChip);
734 if (!IsU)
735 AxisTicks = Form("%i_%i_%i_v%i", iLayer, iLadder, iSensor, iChip);
736 m_hitMapCountsChip->GetXaxis()->SetBinLabel(i + 1, AxisTicks.Data());
737 m_hitMapClCountsChip->GetXaxis()->SetBinLabel(i + 1, AxisTicks.Data());
738 }
739
740
741
742 //----------------------------------------------------------------
743 // Additional histograms for out of ExpressReco
744 //----------------------------------------------------------------
745
746 if (m_ShowAllHistos == 1) {
747 TDirectory* dirShowAll = nullptr;
748 dirShowAll = oldDir->mkdir("SVDDQMAll");
749 dirShowAll->cd();
750
751 m_hitMapU = new TH2F*[nSVDSensors];
752 m_hitMapV = new TH2F*[nSVDSensors];
753 m_hitMapUCl = new TH1F*[nSVDSensors];
754 m_hitMapVCl = new TH1F*[nSVDSensors];
755 for (int i = 0; i < nSVDSensors; i++) {
756 VxdID id = gTools->getSensorIDFromSVDIndex(i);
757 int iLayer = id.getLayerNumber();
758 int iLadder = id.getLadderNumber();
759 int iSensor = id.getSensorNumber();
760 VxdID sensorID(iLayer, iLadder, iSensor);
761 SVD::SensorInfo SensorInfo = dynamic_cast<const SVD::SensorInfo&>(VXD::GeoCache::getInstance().getSensorInfo(sensorID));
762 string sensorDescr = str(format("%1%_%2%_%3%") % iLayer % iLadder % iSensor);
763 //----------------------------------------------------------------
764 // Hitmaps: Number of strips by coordinate
765 //----------------------------------------------------------------
766 name = str(format("SVD_%1%_StripHitmapU") % sensorDescr);
767 title = str(format("SVD Sensor %1% Strip Hitmap in U") % sensorDescr);
768 int nStrips = SensorInfo.getUCells();
769 m_hitMapU[i] = new TH2F(name.c_str(), title.c_str(), nStrips, 0, nStrips, SVDShaperDigit::c_nAPVSamples, 0,
771 m_hitMapU[i]->GetXaxis()->SetTitle("u position [pitch units]");
772 m_hitMapU[i]->GetYaxis()->SetTitle("timebin [time units]");
773 m_hitMapU[i]->GetZaxis()->SetTitle("hits");
774 m_histoList->Add(m_hitMapU[i]);
775 name = str(format("SVD_%1%_StripHitmapV") % sensorDescr);
776 title = str(format("SVD Sensor %1% Strip Hitmap in V") % sensorDescr);
777 nStrips = SensorInfo.getVCells();
778 m_hitMapV[i] = new TH2F(name.c_str(), title.c_str(), nStrips, 0, nStrips, SVDShaperDigit::c_nAPVSamples, 0,
780 m_hitMapV[i]->GetXaxis()->SetTitle("v position [pitch units]");
781 m_hitMapV[i]->GetYaxis()->SetTitle("timebin [time units]");
782 m_hitMapV[i]->GetZaxis()->SetTitle("hits");
783 m_histoList->Add(m_hitMapV[i]);
784 //----------------------------------------------------------------
785 // Hitmaps: Number of clusters by coordinate
786 //----------------------------------------------------------------
787 name = str(format("SVD_%1%_HitmapClstU") % sensorDescr);
788 title = str(format("SVD Sensor %1% Hitmap Clusters in U") % sensorDescr);
789 nStrips = SensorInfo.getUCells();
790 m_hitMapUCl[i] = new TH1F(name.c_str(), title.c_str(), nStrips, 0, nStrips);
791 m_hitMapUCl[i]->GetXaxis()->SetTitle("u position [pitch units]");
792 m_hitMapUCl[i]->GetYaxis()->SetTitle("hits");
793 m_histoList->Add(m_hitMapUCl[i]);
794 name = str(format("SVD_%1%_HitmapClstV") % sensorDescr);
795 title = str(format("SVD Sensor %1% Hitmap Clusters in V") % sensorDescr);
796 nStrips = SensorInfo.getVCells();
797 m_hitMapVCl[i] = new TH1F(name.c_str(), title.c_str(), nStrips, 0, nStrips);
798 m_hitMapVCl[i]->GetXaxis()->SetTitle("v position [pitch units]");
799 m_hitMapVCl[i]->GetYaxis()->SetTitle("hits");
800 m_histoList->Add(m_hitMapVCl[i]);
801 }
802 }
803
804 oldDir->cd();
805}
806
807
809{
810 // Register histograms (calls back defineHisto)
811 REG_HISTOGRAM
812
813 auto gTools = VXD::GeoCache::getInstance().getGeoTools();
814 if (gTools->getNumberOfSVDLayers() != 0) {
815 //Register collections
819
820 storeSVDClusters.isOptional();
821 storeSVDShaperDigits.isOptional();
822 m_svdEventInfo.isOptional();
823 storeNoZSSVDShaperDigits.isOptional();
824
825 //Store names to speed up creation later
826 m_storeSVDShaperDigitsName = storeSVDShaperDigits.getName();
827 }
828
829 m_objTrgSummary.isOptional();
830}
831
833{
834 auto gTools = VXD::GeoCache::getInstance().getGeoTools();
835 if (gTools->getNumberOfSVDLayers() == 0) return;
836
837
838 StoreObjPtr<EventMetaData> evtMetaData;
839 m_expNumber = evtMetaData->getExperiment();
840 m_runNumber = evtMetaData->getRun();
841
842 // Add experiment and run number to the title of selected histograms (CR shifter plots)
843 TString runID = TString::Format(" ~ Exp%d Run%d", m_expNumber, m_runNumber);
844 TObject* obj;
845 TIter nextH(m_histoList);
846 while ((obj = nextH()))
847 if (obj->InheritsFrom("TH1")) {
848
849 TString tmp = (TString)obj->GetTitle();
850 Int_t pos = tmp.Last('~');
851 if (pos == -1) pos = tmp.Length() + 2;
852
853 TString title = tmp(0, pos - 2);
854 ((TH1F*)obj)->SetTitle(title + runID);
855 ((TH1F*)obj)->Reset();
856 }
857}
858
860{
861
862
863 //check HLT decision and increase number of events only if the event has been accepted
864
867 if (!eventAccepted) return;
868 }
869 m_nEvents->Fill(0);
870
871 int nSamples = 0;
872 if (m_svdEventInfo.isValid())
873 nSamples = m_svdEventInfo->getNSamples();
874 else
875 return;
876
877 auto gTools = VXD::GeoCache::getInstance().getGeoTools();
878 if (gTools->getNumberOfSVDLayers() == 0) return;
879
880
881 const StoreArray<SVDShaperDigit> storeNoZSSVDShaperDigits(m_storeNoZSSVDShaperDigitsName);
882 const StoreArray<SVDShaperDigit> storeSVDShaperDigits(m_storeSVDShaperDigitsName);
883 const StoreArray<SVDCluster> storeSVDClusters(m_storeSVDClustersName);
884
885 if (!storeSVDShaperDigits.isValid() || !storeSVDShaperDigits.getEntries()) {
886 return;
887 }
888
889 int firstSVDLayer = gTools->getFirstSVDLayer();
890 int lastSVDLayer = gTools->getLastSVDLayer();
891 int nSVDSensors = gTools->getNumberOfSVDSensors();
892
893 // Fired strips offline ZS
894 vector< set<int> > uStrips(nSVDSensors); // sets to eliminate multiple samples per strip
895 vector< set<int> > vStrips(nSVDSensors);
896 for (const SVDShaperDigit& digitIn : storeSVDShaperDigits) {
897 int iLayer = digitIn.getSensorID().getLayerNumber();
898 if ((iLayer < firstSVDLayer) || (iLayer > lastSVDLayer)) continue;
899 int iLadder = digitIn.getSensorID().getLadderNumber();
900 int iSensor = digitIn.getSensorID().getSensorNumber();
901 VxdID sensorID(iLayer, iLadder, iSensor);
902 int index = gTools->getSVDSensorIndex(sensorID);
903 SVD::SensorInfo SensorInfo = dynamic_cast<const SVD::SensorInfo&>(VXD::GeoCache::getInstance().getSensorInfo(sensorID));
904 if (digitIn.isUStrip()) {
905
906 //fill strip count first
907 if (m_stripCountU[index] != nullptr) m_stripCountU[index]->Fill(digitIn.getCellID());
908
909 if (m_3Samples) {
910 if (nSamples == 3) {
911 if (m_strip3SampleCountU[index] != nullptr) m_strip3SampleCountU[index]->Fill(digitIn.getCellID());
912 } else {
913 if (m_strip6SampleCountU[index] != nullptr) m_strip6SampleCountU[index]->Fill(digitIn.getCellID());
914 }
915 }
916 //fill max bin
917 if (m_stripMaxBinUAll != nullptr) m_stripMaxBinUAll->Fill(digitIn.getMaxTimeBin());
918 if (iLayer == 3)
919 if (m_stripMaxBinU3 != nullptr) m_stripMaxBinU3->Fill(digitIn.getMaxTimeBin());
920 if (iLayer == 6)
921 if (m_stripMaxBinU6 != nullptr) m_stripMaxBinU6->Fill(digitIn.getMaxTimeBin());
922
923 uStrips.at(index).insert(digitIn.getCellID());
924 int Chip = (int)(digitIn.getCellID() / gTools->getSVDChannelsPerChip()) + 1;
925 int indexChip = gTools->getSVDChipIndex(sensorID, kTRUE, Chip);
926 // 6-to-1 relation weights are equal to digit signals, modulo rounding error
927 SVDShaperDigit::APVFloatSamples samples = digitIn.getSamples();
928 int isSample = 0;
929 for (size_t i = 0; i < SVDShaperDigit::c_nAPVSamples; ++i) {
931 if (m_stripSignalU[index] != nullptr) m_stripSignalU[index]->Fill(samples[i]);
932 if (samples[i] > m_CutSVDCharge) {
933 isSample = 1;
934 if (m_ShowAllHistos == 1) {
935 if (m_hitMapU[index] != nullptr) m_hitMapU[index]->Fill(digitIn.getCellID(), i);
936 }
937 }
938 }
939 if (isSample) {
940 if (m_hitMapCountsU != nullptr) m_hitMapCountsU->Fill(index);
941 if (m_hitMapCountsChip != nullptr) m_hitMapCountsChip->Fill(indexChip);
942 }
943 } else {
944 //fill strip count first
945 if (m_stripCountV[index] != nullptr) m_stripCountV[index]->Fill(digitIn.getCellID());
946
947 if (m_3Samples) {
948 if (nSamples == 3) {
949 if (m_strip3SampleCountV[index] != nullptr) m_strip3SampleCountV[index]->Fill(digitIn.getCellID());
950 } else {
951 if (m_strip6SampleCountV[index] != nullptr) m_strip6SampleCountV[index]->Fill(digitIn.getCellID());
952 }
953 }
954
955 //fill max bin
956 if (m_stripMaxBinVAll != nullptr) m_stripMaxBinVAll->Fill(digitIn.getMaxTimeBin());
957
958 if (iLayer == 3)
959 if (m_stripMaxBinV3 != nullptr) m_stripMaxBinV3->Fill(digitIn.getMaxTimeBin());
960 if (iLayer == 6)
961 if (m_stripMaxBinV6 != nullptr) m_stripMaxBinV6->Fill(digitIn.getMaxTimeBin());
962
963 vStrips.at(index).insert(digitIn.getCellID());
964 int Chip = (int)(digitIn.getCellID() / gTools->getSVDChannelsPerChip()) + 1;
965 int indexChip = gTools->getSVDChipIndex(sensorID, kFALSE, Chip);
966 // 6-to-1 relation weights are equal to digit signals, modulo rounding error
967 SVDShaperDigit::APVFloatSamples samples = digitIn.getSamples();
968 int isSample = 0;
969 for (size_t i = 0; i < SVDShaperDigit::c_nAPVSamples; ++i) {
971 if (m_stripSignalV[index] != nullptr) m_stripSignalV[index]->Fill(samples[i]);
972 if (samples[i] > m_CutSVDCharge) {
973 isSample = 1;
974 if (m_ShowAllHistos == 1) {
975 if (m_hitMapV[index] != nullptr) m_hitMapV[index]->Fill(digitIn.getCellID(), i);
976 }
977 }
978 }
979 if (isSample) {
980 if (m_hitMapCountsV != nullptr) m_hitMapCountsV->Fill(index);
981 if (m_hitMapCountsChip != nullptr) m_hitMapCountsChip->Fill(indexChip);
982 }
983 }
984 }
985 if (m_additionalPlots) {
986 for (int i = 0; i < nSVDSensors; i++) {
987 if ((m_firedU[i] != nullptr) && (uStrips[i].size() > 0))
988 m_firedU[i]->Fill(uStrips[i].size());
989 if ((m_firedV[i] != nullptr) && (vStrips[i].size() > 0))
990 m_firedV[i]->Fill(vStrips[i].size());
991 }
992 }
993
994 // Fired strips ONLINE ZS
995 if (storeNoZSSVDShaperDigits.isValid())
996 for (const SVDShaperDigit& digitIn : storeNoZSSVDShaperDigits) {
997 int iLayer = digitIn.getSensorID().getLayerNumber();
998 if ((iLayer < firstSVDLayer) || (iLayer > lastSVDLayer)) continue;
999 int iLadder = digitIn.getSensorID().getLadderNumber();
1000 int iSensor = digitIn.getSensorID().getSensorNumber();
1001 VxdID sensorID(iLayer, iLadder, iSensor);
1002 int index = gTools->getSVDSensorIndex(sensorID);
1003 SVD::SensorInfo SensorInfo = dynamic_cast<const SVD::SensorInfo&>(VXD::GeoCache::getInstance().getSensorInfo(sensorID));
1004 if (digitIn.isUStrip()) {
1005 if (m_onlineZSstripCountU[index] != nullptr) m_onlineZSstripCountU[index]->Fill(digitIn.getCellID());
1006 if (m_3Samples) {
1007 if (nSamples == 3) {
1008 if (m_onlineZSstrip3SampleCountU[index] != nullptr) m_onlineZSstrip3SampleCountU[index]->Fill(digitIn.getCellID());
1009 } else {
1010 if (m_onlineZSstrip6sampleCountU[index] != nullptr) m_onlineZSstrip6sampleCountU[index]->Fill(digitIn.getCellID());
1011 }
1012 }
1013 } else {
1014 if (m_onlineZSstripCountV[index] != nullptr) m_onlineZSstripCountV[index]->Fill(digitIn.getCellID());
1015 if (m_3Samples) {
1016 if (nSamples == 3) {
1017 if (m_onlineZSstrip3SampleCountV[index] != nullptr) m_onlineZSstrip3SampleCountV[index]->Fill(digitIn.getCellID());
1018 } else {
1019 if (m_onlineZSstrip6sampleCountV[index] != nullptr) m_onlineZSstrip6sampleCountV[index]->Fill(digitIn.getCellID());
1020 }
1021 }
1022 }
1023 }
1024
1025 vector< set<int> > countsU(nSVDSensors); // sets to eliminate multiple samples per strip
1026 vector< set<int> > countsV(nSVDSensors);
1027 // Hitmaps, Charge, Seed, Size, Time, ...
1028 for (const SVDCluster& cluster : storeSVDClusters) {
1029 if (cluster.getCharge() < m_CutSVDClusterCharge) continue;
1030 int iLayer = cluster.getSensorID().getLayerNumber();
1031 if ((iLayer < firstSVDLayer) || (iLayer > lastSVDLayer)) continue;
1032 int iLadder = cluster.getSensorID().getLadderNumber();
1033 int iSensor = cluster.getSensorID().getSensorNumber();
1034 VxdID sensorID(iLayer, iLadder, iSensor);
1035 int index = gTools->getSVDSensorIndex(sensorID);
1036 SVD::SensorInfo SensorInfo = dynamic_cast<const SVD::SensorInfo&>(VXD::GeoCache::getInstance().getSensorInfo(sensorID));
1037
1038 float time = cluster.getClsTime();
1039 if (m_desynchSVDTime && m_svdEventInfo.isValid())
1040 time = time - m_svdEventInfo->getSVD2FTSWTimeShift(cluster.getFirstFrame());
1041
1042 vector<int> vec = cluster.getTimeGroupId();
1043 auto minElement = min_element(vec.begin(), vec.end());
1044 int groupId = -1;
1045 if (vec.size() > 0) {
1046 groupId = *minElement;
1047
1048 if (cluster.isUCluster()) {
1049 if (m_clusterTimeGroupIdU != nullptr) m_clusterTimeGroupIdU->Fill(time, groupId);
1050 if (m_objTrgSummary.isValid()) {
1051 int trgQuality = m_objTrgSummary->getTimQuality();
1052 if (trgQuality == 1)
1053 if (m_clusterTimeCoarseGroupIdU != nullptr) m_clusterTimeCoarseGroupIdU->Fill(time, groupId);
1054 if (trgQuality == 2)
1055 if (m_clusterTimeFineGroupIdU != nullptr) m_clusterTimeFineGroupIdU->Fill(time, groupId);
1056 }
1057
1058 } else {
1059 if (m_clusterTimeGroupIdV != nullptr) m_clusterTimeGroupIdV->Fill(time, groupId);
1060 if (m_objTrgSummary.isValid()) {
1061 int trgQuality = m_objTrgSummary->getTimQuality();
1062 if (trgQuality == 1)
1063 if (m_clusterTimeCoarseGroupIdV != nullptr) m_clusterTimeCoarseGroupIdV->Fill(time, groupId);
1064 if (trgQuality == 2)
1065 if (m_clusterTimeFineGroupIdV != nullptr) m_clusterTimeFineGroupIdV->Fill(time, groupId);
1066 }
1067 }
1068 }
1069
1070 if (cluster.isUCluster()) {
1071 countsU.at(index).insert(SensorInfo.getUCellID(cluster.getPosition()));
1072 int indexChip = gTools->getSVDChipIndex(sensorID, kTRUE,
1073 (int)(SensorInfo.getUCellID(cluster.getPosition()) / gTools->getSVDChannelsPerChip()) + 1);
1074 if (m_hitMapClCountsU != nullptr) m_hitMapClCountsU->Fill(index);
1075 if (m_hitMapClCountsChip != nullptr) m_hitMapClCountsChip->Fill(indexChip);
1076 if (m_clusterChargeU[index] != nullptr) m_clusterChargeU[index]->Fill(cluster.getCharge() / 1000.0); // in kelectrons
1077 if (m_clusterSNRU[index] != nullptr) m_clusterSNRU[index]->Fill(cluster.getSNR());
1078 if (m_clusterChargeUAll != nullptr) m_clusterChargeUAll->Fill(cluster.getCharge() / 1000.0); // in kelectrons
1079 if (m_clusterSNRUAll != nullptr) m_clusterSNRUAll->Fill(cluster.getSNR());
1080 if (m_clusterSizeU[index] != nullptr) m_clusterSizeU[index]->Fill(cluster.getSize());
1081 if (m_clusterTimeU[index] != nullptr) m_clusterTimeU[index]->Fill(time);
1082 if (m_clusterTimeUAll != nullptr) m_clusterTimeUAll->Fill(time);
1083 if (iLayer == 3) {
1084 if (m_clusterChargeU3 != nullptr) m_clusterChargeU3->Fill(cluster.getCharge() / 1000.0); // in kelectrons
1085 if (m_clusterSNRU3 != nullptr) m_clusterSNRU3->Fill(cluster.getSNR());
1086 if (m_clusterTimeU3 != nullptr) m_clusterTimeU3->Fill(time);
1087 if (m_3Samples) {
1088 if (nSamples == 3) {
1089 if (m_cluster3SampleTimeU3 != nullptr) m_cluster3SampleTimeU3->Fill(time);
1090 } else {
1091 if (m_cluster6SampleTimeU3 != nullptr) m_cluster6SampleTimeU3->Fill(time);
1092 }
1093 }
1094 } else {
1095 if (m_clusterChargeU456 != nullptr) m_clusterChargeU456->Fill(cluster.getCharge() / 1000.0); // in kelectrons
1096 if (m_clusterSNRU456 != nullptr) m_clusterSNRU456->Fill(cluster.getSNR());
1097 if (m_clusterTimeU456 != nullptr) m_clusterTimeU456->Fill(time);
1098 if (m_3Samples) {
1099 if (nSamples == 3) {
1100 if (m_cluster3SampleTimeU456 != nullptr) m_cluster3SampleTimeU456->Fill(time);
1101 } else {
1102 if (m_cluster6SampleTimeU456 != nullptr) m_cluster6SampleTimeU456->Fill(time);
1103 }
1104 }
1105 }
1106
1107 if (m_ShowAllHistos == 1)
1108 if (m_hitMapUCl[index] != nullptr) m_hitMapUCl[index]->Fill(SensorInfo.getUCellID(cluster.getPosition()));
1109
1110 // groupId for U side
1111 if (groupId == 0) {
1112 for (const SVDShaperDigit& digitIn : cluster.getRelationsTo<SVDShaperDigit>(m_storeSVDShaperDigitsName)) {
1113 if (m_stripCountGroupId0U != nullptr) m_stripCountGroupId0U[index]->Fill(digitIn.getCellID());
1114 }
1115 }
1116 } else {
1117 countsV.at(index).insert(SensorInfo.getVCellID(cluster.getPosition()));
1118 int indexChip = gTools->getSVDChipIndex(sensorID, kFALSE,
1119 (int)(SensorInfo.getVCellID(cluster.getPosition()) / gTools->getSVDChannelsPerChip()) + 1);
1120 if (m_hitMapClCountsV != nullptr) m_hitMapClCountsV->Fill(index);
1121 if (m_hitMapClCountsChip != nullptr) m_hitMapClCountsChip->Fill(indexChip);
1122 if (m_clusterChargeV[index] != nullptr) m_clusterChargeV[index]->Fill(cluster.getCharge() / 1000.0); // in kelectrons
1123 if (m_clusterSNRV[index] != nullptr) m_clusterSNRV[index]->Fill(cluster.getSNR());
1124 if (m_clusterChargeVAll != nullptr) m_clusterChargeVAll->Fill(cluster.getCharge() / 1000.0); // in kelectrons
1125 if (m_clusterSNRVAll != nullptr) m_clusterSNRVAll->Fill(cluster.getSNR());
1126 if (m_clusterSizeV[index] != nullptr) m_clusterSizeV[index]->Fill(cluster.getSize());
1127 if (m_clusterTimeV[index] != nullptr) m_clusterTimeV[index]->Fill(time);
1128 if (m_clusterTimeVAll != nullptr) m_clusterTimeVAll->Fill(time);
1129 if (iLayer == 3) {
1130 if (m_clusterChargeV3 != nullptr) m_clusterChargeV3->Fill(cluster.getCharge() / 1000.0); // in kelectrons
1131 if (m_clusterSNRV3 != nullptr) m_clusterSNRV3->Fill(cluster.getSNR());
1132 if (m_clusterTimeV3 != nullptr) m_clusterTimeV3->Fill(time);
1133 if (m_3Samples) {
1134 if (nSamples == 3) {
1135 if (m_cluster3SampleTimeV3 != nullptr) m_cluster3SampleTimeV3->Fill(time);
1136 } else {
1137 if (m_cluster6SampleTimeV3 != nullptr) m_cluster6SampleTimeV3->Fill(time);
1138 }
1139 }
1140 } else {
1141 if (m_clusterChargeV456 != nullptr) m_clusterChargeV456->Fill(cluster.getCharge() / 1000.0); // in kelectrons
1142 if (m_clusterSNRV456 != nullptr) m_clusterSNRV456->Fill(cluster.getSNR());
1143 if (m_clusterTimeV456 != nullptr) m_clusterTimeV456->Fill(time);
1144 if (m_3Samples) {
1145 if (nSamples == 3) {
1146 if (m_cluster3SampleTimeV456 != nullptr) m_cluster3SampleTimeV456->Fill(time);
1147 } else {
1148 if (m_cluster6SampleTimeV456 != nullptr) m_cluster6SampleTimeV456->Fill(time);
1149 }
1150 }
1151 }
1152 if (m_ShowAllHistos == 1)
1153 if (m_hitMapVCl[index] != nullptr) m_hitMapVCl[index]->Fill(SensorInfo.getVCellID(cluster.getPosition()));
1154
1155 // groupId for V side
1156 if (groupId == 0) {
1157 for (const SVDShaperDigit& digitIn : cluster.getRelationsTo<SVDShaperDigit>(m_storeSVDShaperDigitsName)) {
1158 if (m_stripCountGroupId0V != nullptr) m_stripCountGroupId0V[index]->Fill(digitIn.getCellID());
1159 }
1160 }
1161 }
1162 }
1163 if (m_additionalPlots) {
1164 for (int i = 0; i < nSVDSensors; i++) {
1165 if ((m_clustersU[i] != nullptr) && (countsU[i].size() > 0))
1166 m_clustersU[i]->Fill(countsU[i].size());
1167 if ((m_clustersV[i] != nullptr) && (countsV[i].size() > 0))
1168 m_clustersV[i]->Fill(countsV[i].size());
1169 }
1170 }
1171}
1172
1173
1175{
1176 // m_histoList->Delete();
1177 delete m_histoList;
1178
1179}
HistoModule.h is supposed to be used instead of Module.h for the modules with histogram definitions t...
Definition: HistoModule.h:29
void setDescription(const std::string &description)
Sets the description of the module.
Definition: Module.cc:214
void setPropertyFlags(unsigned int propertyFlags)
Sets the flags for the module properties.
Definition: Module.cc:208
@ c_ParallelProcessingCertified
This module can be run in parallel processing mode safely (All I/O must be done through the data stor...
Definition: Module.h:80
The SVD Cluster class This class stores all information about reconstructed SVD clusters.
Definition: SVDCluster.h:29
TH1F ** m_hitMapUCl
Hitmaps clusters for u.
TH1F ** m_clustersV
number of v clusters per event
TH1F * m_clusterSNRVAll
v SNR of clusters for all sensors
TH1F ** m_strip3SampleCountV
v strip count for 3 samples
TH1F * m_clusterTimeV456
v Time of clusters for layer 4,5,6 sensors
TH1F * m_clusterSNRUAll
u SNR of clusters for all sensors
TH1F * m_clusterChargeU3
u charge of clusters for layer 3 sensors
void initialize() override final
Module function initialize.
TH2F * m_clusterTimeGroupIdV
time group id for V side
TH1F * m_clusterSNRV3
v SNR of clusters for layer 3 sensors
TH1F * m_hitMapCountsV
Hitmaps v of Digits.
TH2F ** m_hitMapU
Hitmaps pixels for u.
TH1F ** m_onlineZSstrip6sampleCountU
u strip count (online Zero Suppression) for 6 samples
std::string m_storeNoZSSVDShaperDigitsName
not zero-suppressed SVDShaperDigits StoreArray name
bool m_skipRejectedEvents
if true skip events rejected by HLT (default)
TH1F * m_stripMaxBinU6
u MaxBin of strips for layer 6 sensors (offline Zero Suppression)
TH1F * m_clusterTimeUAll
u time of clusters for all sensors
TH1F ** m_onlineZSstrip3SampleCountV
v strip count (online Zero Suppression for 3 samples
TH1F * m_hitMapClCountsU
Hitmaps u of Clusters.
TH2F * m_clusterTimeFineGroupIdV
time group id for V side for fine trigger
float m_CutSVDCharge
cut for accepting strips to hitmap histogram default = 0 ADU
TH1F * m_cluster6SampleTimeU3
u Time of clusters for layer 3 sensors for 6 samples
StoreObjPtr< SVDEventInfo > m_svdEventInfo
SVDEventInfo data object.
TH1F * m_hitMapCountsU
Hitmaps u of Digits.
TH1F ** m_clusterSNRV
v SNR of clusters per sensor
TH1F ** m_clusterChargeV
v charge of clusters
TH1F * m_cluster3SampleTimeU3
u Time of clusters for layer 3 sensors for 3 samples
TH1F ** m_stripSignalU
u charge of strips
TH1F * m_clusterChargeUAll
u charge of clusters for all sensors
TH1F * m_cluster3SampleTimeU456
u Time of clusters for layer 4,5,6 sensors for 3 samples
TH1F * m_clusterChargeU456
u charge of clusters for layer 4,5,6 sensors
void defineHisto() override final
Histogram definitions such as TH1(), TH2(), TNtuple(), TTree()....
TH1F * m_cluster3SampleTimeV456
v Time of clusters for layer 4,5,6 sensors for 3 samples
TH1F * m_clusterTimeV3
v Time of clusters for layer 3 sensors
TH1F ** m_clusterSNRU
u SNR of clusters per sensor
TH1F ** m_hitMapVCl
Hitmaps clusters for v.
TH1F ** m_strip3SampleCountU
u strip count for 3 samples
void terminate() override final
Module function terminate.
TH1F * m_stripMaxBinV3
v MaxBin of strips for layer 3 sensors (offline Zero Suppression)
TH1F * m_clusterTimeVAll
v time of clusters for all sensors
TH2F * m_clusterTimeCoarseGroupIdU
time group id for U side for coarse trigger
void event() override final
Module function event.
TH1F ** m_onlineZSstripCountV
v strip count (online Zero Suppression
TH1F ** m_stripSignalV
v charge of strips
StoreObjPtr< TRGSummary > m_objTrgSummary
Trigger Summary data object.
std::string m_storeSVDShaperDigitsName
SVDShaperDigits StoreArray name.
std::string m_histogramDirectoryName
Name of the histogram directory in ROOT file.
TH1F * m_clusterChargeVAll
v charge of clusters for all sensors
TH1F * m_clusterSNRU3
u SNR of clusters for layer 3 sensors
TH1F * m_clusterSNRV456
v SNR of clusters for layer 4,5,6 sensors
TH1F * m_stripMaxBinUAll
u MaxBin of strips for all sensors (offline Zero Suppression)
bool m_3Samples
if true enable 3 samples histograms analysis
TList * m_histoList
list of cumulative histograms
TH1F ** m_clusterChargeU
u charge of clusters
TH1F * m_hitMapCountsChip
Hitmaps of digits on chips.
TH1F * m_cluster3SampleTimeV3
v Time of clusters for layer 3 sensors for 3 samples
TH1F * m_clusterChargeV3
v charge of clusters for layer 3 sensors
TH2F ** m_hitMapV
Hitmaps pixels for v.
TH1F * m_stripMaxBinV6
v MaxBin of strips for layer 6 sensors (offline Zero Suppression)
TH1F ** m_stripCountGroupId0V
V strip count for cluster time group Id = 0.
TH1F ** m_strip6SampleCountV
v strip count for 3 samples
TH1F * m_cluster6SampleTimeV456
v Time of clusters for layer 4,5,6 sensors for 6 samples
TH1F ** m_firedU
Fired u strips per event.
TH1F * m_clusterTimeU3
u Time of clusters for layer 3 sensors
TH1F * m_cluster6SampleTimeV3
v Time of clusters for layer 3 sensors for 6 samples
TH1F * m_clusterSNRU456
u SNR of clusters for layer 4,5,6 sensors
void beginRun() override final
Module function beginRun.
TH1F ** m_onlineZSstripCountU
u strip count (online Zero Suppression)
int m_ShowAllHistos
Flag to show all histos in DQM, default = 0 (do not show)
bool m_additionalPlots
additional plots flag
TH1F * m_stripMaxBinU3
u MaxBin of strips for layer 3 sensors (offline Zero Suppression)
bool m_desynchSVDTime
if TRUE: svdTime back in SVD time reference
TH1F * m_stripMaxBinVAll
v MaxBin of strips for all sensors (offline Zero Suppression)
TH1F * m_hitMapClCountsChip
Hitmaps of clusters on chips.
TH1F ** m_strip6SampleCountU
u strip count for 6 samples
TH1F ** m_onlineZSstrip3SampleCountU
u strip count (online Zero Suppression) for 3 samples
TH1F ** m_onlineZSstrip6sampleCountV
v strip count (online Zero Suppression for 6 samples
StoreObjPtr< SoftwareTriggerResult > m_resultStoreObjectPointer
Store Object for reading the trigger decision.
float m_CutSVDClusterCharge
cut for accepting clusters to hitmap histogram, default = 0 ke-
TH2F * m_clusterTimeGroupIdU
time group id for U side
std::string m_storeSVDClustersName
SVDClusters StoreArray name.
TH1F * m_clusterTimeU456
u Time of clusters for layer 4,5,6 sensors
TH2F * m_clusterTimeCoarseGroupIdV
time group id for V side for coarse trigger
TH1F ** m_firedV
Fired v strips per event.
TH1F * m_clusterChargeV456
v charge of clusters for layer 4,5,6 sensors
TH1F ** m_stripCountGroupId0U
U strip count for cluster time group Id = 0.
TH1F * m_hitMapClCountsV
Hitmaps v of Clusters.
TH1F ** m_clustersU
number of u clusters per event
TH2F * m_clusterTimeFineGroupIdU
time group id for U side for fine trigger
TH1F * m_cluster6SampleTimeU456
u Time of clusters for layer 4,5,6 sensors for 6 samples
The SVD ShaperDigit class.
static const std::size_t c_nAPVSamples
Number of APV samples stored.
std::array< APVFloatSampleType, c_nAPVSamples > APVFloatSamples
array of APVFloatSampleType objects
Specific implementation of SensorInfo for SVD Sensors which provides additional sensor specific infor...
Definition: SensorInfo.h:25
static bool getFinalTriggerDecision(const SoftwareTriggerResult &result, bool forgetTotalResult=false)
Calculate the final cut decision using all "total_results" of all sub triggers in the software trigge...
const std::string & getName() const
Return name under which the object is saved in the DataStore.
bool isOptional(const std::string &name="")
Tell the DataStore about an optional input.
Accessor to arrays stored in the data store.
Definition: StoreArray.h:113
bool isValid() const
Check wether the array was registered.
Definition: StoreArray.h:288
int getEntries() const
Get the number of objects in the array.
Definition: StoreArray.h:216
Type-safe access to single objects in the data store.
Definition: StoreObjPtr.h:96
const SensorInfoBase & getSensorInfo(Belle2::VxdID id) const
Return a referecne 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
const GeoTools * getGeoTools()
Return a raw pointer to a GeoTools object.
Definition: GeoCache.h:142
int getVCells() const
Return number of pixel/strips in v direction.
int getUCells() const
Return number of pixel/strips in u direction.
int getVCellID(double v, bool clamp=false) const
Return the corresponding pixel/strip ID of a given v coordinate.
int getUCellID(double u, double v=0, bool clamp=false) const
Return the corresponding pixel/strip ID of a given u coordinate.
Class to uniquely identify a any structure of the PXD and SVD.
Definition: VxdID.h:33
baseType getLayerNumber() const
Get the layer id.
Definition: VxdID.h:96
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:560
#define REG_MODULE(moduleName)
Register the given module (without 'Module' suffix) with the framework.
Definition: Module.h:650
Abstract base class for different kinds of events.
STL namespace.