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
67 m_histoList = new TList();
68}
69
70
71SVDDQMExpressRecoModule::~SVDDQMExpressRecoModule()
72{
73}
74
75//------------------------------------------------------------------
76// Function to define histograms
77//-----------------------------------------------------------------
78
80{
82 if (gTools->getNumberOfLayers() == 0) {
83 B2FATAL("Missing geometry for VXD, check steering file.");
84 }
85 if (gTools->getNumberOfSVDLayers() == 0) {
86 B2WARNING("Missing geometry for SVD, SVD-DQM is skipped.");
87 return;
88 }
89
90 // Create a separate histogram directories and cd into it.
91 TDirectory* oldDir = gDirectory;
92 if (m_histogramDirectoryName != "") {
93 oldDir->mkdir(m_histogramDirectoryName.c_str());// do not use return value with ->cd(), its ZERO if dir already exists
94 oldDir->cd(m_histogramDirectoryName.c_str());
95 }
96
97 // basic constants presets:
98 int nSVDSensors = gTools->getNumberOfSVDSensors();
99 int nSVDChips = gTools->getTotalSVDChips();
100
101 // number of events counter
102 m_nEvents = new TH1F("SVDDQM_nEvents", "SVD Number of Events", 1, -0.5, 0.5);
103 m_nEvents->GetYaxis()->SetTitle("N events");
105
106 // Create basic histograms:
107 // basic counters per sensor:
108 m_hitMapCountsU = new TH1F("SVDDQM_StripCountsU", "SVD Integrated Number of ZS5 Fired U-Strips per sensor",
109 nSVDSensors, 0, nSVDSensors);
110 m_hitMapCountsU->GetXaxis()->SetTitle("Sensor ID");
111 m_hitMapCountsU->GetYaxis()->SetTitle("counts");
113 m_hitMapCountsV = new TH1F("SVDDQM_StripCountsV", "SVD Integrated Number of ZS5 Fired V-Strips per sensor",
114 nSVDSensors, 0, nSVDSensors);
115 m_hitMapCountsV->GetXaxis()->SetTitle("Sensor ID");
116 m_hitMapCountsV->GetYaxis()->SetTitle("counts");
118 m_hitMapClCountsU = new TH1F("SVDDQM_ClusterCountsU", "SVD Integrated Number of U-Clusters per sensor",
119 nSVDSensors, 0, nSVDSensors);
120 m_hitMapClCountsU->GetXaxis()->SetTitle("Sensor ID");
121 m_hitMapClCountsU->GetYaxis()->SetTitle("counts");
123 m_hitMapClCountsV = new TH1F("SVDDQM_ClusterCountsV", "SVD Integrated Number of V-Clusters per sensor",
124 nSVDSensors, 0, nSVDSensors);
125 m_hitMapClCountsV->GetXaxis()->SetTitle("Sensor ID");
126 m_hitMapClCountsV->GetYaxis()->SetTitle("counts");
128 for (int i = 0; i < nSVDSensors; i++) {
129 VxdID id = gTools->getSensorIDFromSVDIndex(i);
130 int iLayer = id.getLayerNumber();
131 int iLadder = id.getLadderNumber();
132 int iSensor = id.getSensorNumber();
133 TString AxisTicks = Form("%i_%i_%i", iLayer, iLadder, iSensor);
134 m_hitMapCountsU->GetXaxis()->SetBinLabel(i + 1, AxisTicks.Data());
135 m_hitMapCountsV->GetXaxis()->SetBinLabel(i + 1, AxisTicks.Data());
136 m_hitMapClCountsU->GetXaxis()->SetBinLabel(i + 1, AxisTicks.Data());
137 m_hitMapClCountsV->GetXaxis()->SetBinLabel(i + 1, AxisTicks.Data());
138 }
139
140 // basic counters per chip:
141 m_hitMapCountsChip = new TH1F("SVDDQM_StripCountsChip", "SVD Integrated Number of ZS5 Fired Strips per chip",
142 nSVDChips, 0, nSVDChips);
143 m_hitMapCountsChip->GetXaxis()->SetTitle("Chip ID");
144 m_hitMapCountsChip->GetYaxis()->SetTitle("counts");
146 m_hitMapClCountsChip = new TH1F("SVDDQM_ClusterCountsChip", "SVD Integrated Number of Clusters per chip",
147 nSVDChips, 0, nSVDChips);
148 m_hitMapClCountsChip->GetXaxis()->SetTitle("Chip ID");
149 m_hitMapClCountsChip->GetYaxis()->SetTitle("counts");
151
152 if (m_additionalPlots) {
153 m_firedU = new TH1F*[nSVDSensors];
154 m_firedV = new TH1F*[nSVDSensors];
155 m_clustersU = new TH1F*[nSVDSensors];
156 m_clustersV = new TH1F*[nSVDSensors];
157 m_stripSignalU = new TH1F*[nSVDSensors];
158 m_stripSignalV = new TH1F*[nSVDSensors];
159 }
160
161 m_clusterChargeU = new TH1F*[nSVDSensors];
162 m_clusterChargeV = new TH1F*[nSVDSensors];
163 m_clusterSNRU = new TH1F*[nSVDSensors];
164 m_clusterSNRV = new TH1F*[nSVDSensors];
165
166 m_stripCountU = new TH1F*[nSVDSensors];
167 m_stripCountV = new TH1F*[nSVDSensors];
168 m_strip3CountU = new TH1F*[nSVDSensors];
169 m_strip3CountV = new TH1F*[nSVDSensors];
170 m_strip6CountU = new TH1F*[nSVDSensors];
171 m_strip6CountV = new TH1F*[nSVDSensors];
172
173 m_stripCountGroupId0U = new TH1F*[nSVDSensors];
174 m_stripCountGroupId0V = new TH1F*[nSVDSensors];
175
176 m_onlineZSstripCountU = new TH1F*[nSVDSensors];
177 m_onlineZSstripCountV = new TH1F*[nSVDSensors];
178 m_onlineZSstrip3CountU = new TH1F*[nSVDSensors];
179 m_onlineZSstrip3CountV = new TH1F*[nSVDSensors];
180 m_onlineZSstrip6CountU = new TH1F*[nSVDSensors];
181 m_onlineZSstrip6CountV = new TH1F*[nSVDSensors];
182
183 m_clusterSizeU = new TH1F*[nSVDSensors];
184 m_clusterSizeV = new TH1F*[nSVDSensors];
185 m_clusterTimeU = new TH1F*[nSVDSensors];
186 m_clusterTimeV = new TH1F*[nSVDSensors];
187
188 int ChargeBins = 80;
189 float ChargeMax = 80;
190 int SNRBins = 50;
191 float SNRMax = 100;
192 int TimeBins = 300;
193 float TimeMin = -150;
194 float TimeMax = 150;
195
196 int GroupIdBins = 21;
197 float GroupIdMin = -1.5;
198 float GroupIdMax = 19.5;
199
200 int MaxBinBins = 6;
201 int MaxBinMax = 6;
202
203 TString refFrame = "in FTSW reference";
205 refFrame = "in SVD reference";
206
207
208 //----------------------------------------------------------------
209 // Charge of clusters for all sensors
210 //----------------------------------------------------------------
211 string name = str(format("SVDDQM_ClusterChargeUAll"));
212 string title = str(format("SVD U-Cluster Charge for all sensors"));
213 m_clusterChargeUAll = new TH1F(name.c_str(), title.c_str(), ChargeBins, 0, ChargeMax);
214 m_clusterChargeUAll->GetXaxis()->SetTitle("cluster charge [ke-]");
215 m_clusterChargeUAll->GetYaxis()->SetTitle("count");
217 name = str(format("SVDDQM_ClusterChargeVAll"));
218 title = str(format("SVD V-Cluster Charge for all sensors"));
219 m_clusterChargeVAll = new TH1F(name.c_str(), title.c_str(), ChargeBins, 0, ChargeMax);
220 m_clusterChargeVAll->GetXaxis()->SetTitle("cluster charge [ke-]");
221 m_clusterChargeVAll->GetYaxis()->SetTitle("count");
223 //----------------------------------------------------------------
224 // Charge of clusters for L3/L456 sensors
225 //----------------------------------------------------------------
226 name = str(format("SVDDQM_ClusterChargeU3"));
227 title = str(format("SVD U-Cluster Charge for layer 3 sensors"));
228 m_clusterChargeU3 = new TH1F(name.c_str(), title.c_str(), ChargeBins, 0, ChargeMax);
229 m_clusterChargeU3->GetXaxis()->SetTitle("cluster charge [ke-]");
230 m_clusterChargeU3->GetYaxis()->SetTitle("count");
232 name = str(format("SVDDQM_ClusterChargeV3"));
233 title = str(format("SVD V-Cluster Charge for layer 3 sensors"));
234 m_clusterChargeV3 = new TH1F(name.c_str(), title.c_str(), ChargeBins, 0, ChargeMax);
235 m_clusterChargeV3->GetXaxis()->SetTitle("cluster charge [ke-]");
236 m_clusterChargeV3->GetYaxis()->SetTitle("count");
238
239 name = str(format("SVDDQM_ClusterChargeU456"));
240 title = str(format("SVD U-Cluster Charge for layers 4,5,6 sensors"));
241 m_clusterChargeU456 = new TH1F(name.c_str(), title.c_str(), ChargeBins, 0, ChargeMax);
242 m_clusterChargeU456->GetXaxis()->SetTitle("cluster charge [ke-]");
243 m_clusterChargeU456->GetYaxis()->SetTitle("count");
245
246 name = str(format("SVDDQM_ClusterChargeV456"));
247 title = str(format("SVD V-Cluster Charge for layers 4,5,6 sensors"));
248 m_clusterChargeV456 = new TH1F(name.c_str(), title.c_str(), ChargeBins, 0, ChargeMax);
249 m_clusterChargeV456->GetXaxis()->SetTitle("cluster charge [ke-]");
250 m_clusterChargeV456->GetYaxis()->SetTitle("count");
252
253 //----------------------------------------------------------------
254 // SNR of clusters for all sensors
255 //----------------------------------------------------------------
256 name = str(format("SVDDQM_ClusterSNRUAll"));
257 title = str(format("SVD U-Cluster SNR for all sensors"));
258 m_clusterSNRUAll = new TH1F(name.c_str(), title.c_str(), SNRBins, 0, SNRMax); // max = ~ 60
259 m_clusterSNRUAll->GetXaxis()->SetTitle("cluster SNR");
260 m_clusterSNRUAll->GetYaxis()->SetTitle("count");
262 name = str(format("SVDDQM_ClusterSNRVAll"));
263 title = str(format("SVD V-Cluster SNR for all sensors"));
264 m_clusterSNRVAll = new TH1F(name.c_str(), title.c_str(), SNRBins, 0, SNRMax);
265 m_clusterSNRVAll->GetXaxis()->SetTitle("cluster SNR");
266 m_clusterSNRVAll->GetYaxis()->SetTitle("count");
268 //----------------------------------------------------------------
269 // SNR of clusters for L3/L456 sensors
270 //----------------------------------------------------------------
271 name = str(format("SVDDQM_ClusterSNRU3"));
272 title = str(format("SVD U-Cluster SNR for layer 3 sensors"));
273 m_clusterSNRU3 = new TH1F(name.c_str(), title.c_str(), SNRBins, 0, SNRMax);
274 m_clusterSNRU3->GetXaxis()->SetTitle("cluster SNR");
275 m_clusterSNRU3->GetYaxis()->SetTitle("count");
277 name = str(format("SVDDQM_ClusterSNRV3"));
278 title = str(format("SVD V-Cluster SNR for layer 3 sensors"));
279 m_clusterSNRV3 = new TH1F(name.c_str(), title.c_str(), SNRBins, 0, SNRMax);
280 m_clusterSNRV3->GetXaxis()->SetTitle("cluster SNR");
281 m_clusterSNRV3->GetYaxis()->SetTitle("count");
283
284 name = str(format("SVDDQM_ClusterSNRU456"));
285 title = str(format("SVD U-Cluster SNR for layers 4,5,6 sensors"));
286 m_clusterSNRU456 = new TH1F(name.c_str(), title.c_str(), SNRBins, 0, SNRMax);
287 m_clusterSNRU456->GetXaxis()->SetTitle("cluster SNR");
288 m_clusterSNRU456->GetYaxis()->SetTitle("count");
290 name = str(format("SVDDQM_ClusterSNRV456"));
291 title = str(format("SVD V-Cluster SNR for layers 4,5,6 sensors"));
292 m_clusterSNRV456 = new TH1F(name.c_str(), title.c_str(), SNRBins, 0, SNRMax);
293 m_clusterSNRV456->GetXaxis()->SetTitle("cluster SNR");
294 m_clusterSNRV456->GetYaxis()->SetTitle("count");
296 //----------------------------------------------------------------
297 // Cluster time distribution for all sensors
298 //----------------------------------------------------------------
299 TString Name = "SVDDQM_ClusterTimeUAll";
300 TString Title = Form("SVD U-Cluster Time %s for all sensors", refFrame.Data());
301 m_clusterTimeUAll = new TH1F(Name.Data(), Title.Data(), TimeBins, TimeMin, TimeMax);
302 m_clusterTimeUAll->GetXaxis()->SetTitle("cluster time (ns)");
303 m_clusterTimeUAll->GetYaxis()->SetTitle("count");
305 Name = "SVDDQM_ClusterTimeVAll";
306 Title = Form("SVD V-Cluster Time %s for all sensors", refFrame.Data());
307 m_clusterTimeVAll = new TH1F(Name.Data(), Title.Data(), TimeBins, TimeMin, TimeMax);
308 m_clusterTimeVAll->GetXaxis()->SetTitle("cluster time (ns)");
309 m_clusterTimeVAll->GetYaxis()->SetTitle("count");
311 //----------------------------------------------------------------
312 // Time of clusters for L3/L456 sensors
313 //----------------------------------------------------------------
314 Name = "SVDDQM_ClusterTimeU3";
315 Title = Form("SVD U-Cluster Time %s for layer 3 sensors", refFrame.Data());
316 m_clusterTimeU3 = new TH1F(Name.Data(), Title.Data(), TimeBins, TimeMin, TimeMax);
317 m_clusterTimeU3->GetXaxis()->SetTitle("cluster time (ns)");
318 m_clusterTimeU3->GetYaxis()->SetTitle("count");
320 name = str(format("SVDDQM_ClusterTimeV3"));
321 Title = Form("SVD V-Cluster Time %s for layer 3 sensors", refFrame.Data());
322 m_clusterTimeV3 = new TH1F(name.c_str(), Title.Data(), TimeBins, TimeMin, TimeMax);
323 m_clusterTimeV3->GetXaxis()->SetTitle("cluster time (ns)");
324 m_clusterTimeV3->GetYaxis()->SetTitle("count");
326
327 name = str(format("SVDDQM_ClusterTimeU456"));
328 Title = Form("SVD U-Cluster Time %s for layers 4,5,6 sensors", refFrame.Data());
329 m_clusterTimeU456 = new TH1F(name.c_str(), Title.Data(), TimeBins, TimeMin, TimeMax);
330 m_clusterTimeU456->GetXaxis()->SetTitle("cluster time (ns)");
331 m_clusterTimeU456->GetYaxis()->SetTitle("count");
333 name = str(format("SVDDQM_ClusterTimeV456"));
334 Title = Form("SVD V-Cluster Time %s for layers 4,5,6 sensors", refFrame.Data());
335 m_clusterTimeV456 = new TH1F(name.c_str(), Title.Data(), TimeBins, TimeMin, TimeMax);
336 m_clusterTimeV456->GetXaxis()->SetTitle("cluster time (ns)");
337 m_clusterTimeV456->GetYaxis()->SetTitle("count");
339
340 //----------------------------------------------------------------
341 // Time of clusters for L3/L456 sensors for 3 samples
342 //----------------------------------------------------------------
343 Name = "SVDDQM_Cluster3TimeU3";
344 Title = Form("SVD U-Cluster Time %s for layer 3 sensors for 3 samples", refFrame.Data());
345 m_cluster3TimeU3 = new TH1F(Name.Data(), Title.Data(), TimeBins, TimeMin, TimeMax);
346 m_cluster3TimeU3->GetXaxis()->SetTitle("cluster time (ns)");
347 m_cluster3TimeU3->GetYaxis()->SetTitle("count");
349 name = str(format("SVDDQM_Cluster3TimeV3"));
350 Title = Form("SVD V-Cluster Time %s for layer 3 sensors for 3 samples", refFrame.Data());
351 m_cluster3TimeV3 = new TH1F(name.c_str(), Title.Data(), TimeBins, TimeMin, TimeMax);
352 m_cluster3TimeV3->GetXaxis()->SetTitle("cluster time (ns)");
353 m_cluster3TimeV3->GetYaxis()->SetTitle("count");
355
356 name = str(format("SVDDQM_Cluster3TimeU456"));
357 Title = Form("SVD U-Cluster Time %s for layers 4,5,6 sensors for 3 samples", refFrame.Data());
358 m_cluster3TimeU456 = new TH1F(name.c_str(), Title.Data(), TimeBins, TimeMin, TimeMax);
359 m_cluster3TimeU456->GetXaxis()->SetTitle("cluster time (ns)");
360 m_cluster3TimeU456->GetYaxis()->SetTitle("count");
362 name = str(format("SVDDQM_Cluster3TimeV456"));
363 Title = Form("SVD V-Cluster Time %s for layers 4,5,6 sensors for 3 samples", refFrame.Data());
364 m_cluster3TimeV456 = new TH1F(name.c_str(), Title.Data(), TimeBins, TimeMin, TimeMax);
365 m_cluster3TimeV456->GetXaxis()->SetTitle("cluster time (ns)");
366 m_cluster3TimeV456->GetYaxis()->SetTitle("count");
368
369 //----------------------------------------------------------------
370 // Time of clusters for L3/L456 sensors for 6 samples
371 //----------------------------------------------------------------
372 Name = "SVDDQM_Cluster6TimeU3";
373 Title = Form("SVD U-Cluster Time %s for layer 3 sensors for 6 samples", refFrame.Data());
374 m_cluster6TimeU3 = new TH1F(Name.Data(), Title.Data(), TimeBins, TimeMin, TimeMax);
375 m_cluster6TimeU3->GetXaxis()->SetTitle("cluster time (ns)");
376 m_cluster6TimeU3->GetYaxis()->SetTitle("count");
378 name = str(format("SVDDQM_Cluster6TimeV3"));
379 Title = Form("SVD V-Cluster Time %s for layer 3 sensors for 6 samples", refFrame.Data());
380 m_cluster6TimeV3 = new TH1F(name.c_str(), Title.Data(), TimeBins, TimeMin, TimeMax);
381 m_cluster6TimeV3->GetXaxis()->SetTitle("cluster time (ns)");
382 m_cluster6TimeV3->GetYaxis()->SetTitle("count");
384
385 name = str(format("SVDDQM_Cluster6TimeU456"));
386 Title = Form("SVD U-Cluster Time %s for layers 4,5,6 sensors for 6 samples", refFrame.Data());
387 m_cluster6TimeU456 = new TH1F(name.c_str(), Title.Data(), TimeBins, TimeMin, TimeMax);
388 m_cluster6TimeU456->GetXaxis()->SetTitle("cluster time (ns)");
389 m_cluster6TimeU456->GetYaxis()->SetTitle("count");
391 name = str(format("SVDDQM_Cluster6TimeV456"));
392 Title = Form("SVD V-Cluster Time %s for layers 4,5,6 sensors for 6 samples", refFrame.Data());
393 m_cluster6TimeV456 = new TH1F(name.c_str(), Title.Data(), TimeBins, TimeMin, TimeMax);
394 m_cluster6TimeV456->GetXaxis()->SetTitle("cluster time (ns)");
395 m_cluster6TimeV456->GetYaxis()->SetTitle("count");
397
398
399 //----------------------------------------------------------------
400 // Cluster time group Id vs cluster time for U/V sensors
401 //----------------------------------------------------------------
402 Name = "SVDDQM_ClusterTimeGroupIdU";
403 Title = Form("SVD cluster Time Group Id %s vs cluster time for U/P Side", refFrame.Data());
404 m_clusterTimeGroupIdU = new TH2F(Name.Data(), Title.Data(), TimeBins / 2, TimeMin, TimeMax, GroupIdBins, GroupIdMin, GroupIdMax);
405 m_clusterTimeGroupIdU->GetXaxis()->SetTitle("cluster time (ns)");
406 m_clusterTimeGroupIdU->GetYaxis()->SetTitle("cluster group id");
408 Name = "SVDDQM_ClusterTimeGroupIdV";
409 Title = Form("SVD cluster Time Group Id %s vs cluster time for V/N Side", refFrame.Data());
410 m_clusterTimeGroupIdV = new TH2F(Name.Data(), Title.Data(), TimeBins / 2, TimeMin, TimeMax, GroupIdBins, GroupIdMin, GroupIdMax);
411 m_clusterTimeGroupIdV->GetXaxis()->SetTitle("cluster time (ns)");
412 m_clusterTimeGroupIdV->GetYaxis()->SetTitle("cluster group id");
414
415 //----------------------------------------------------------------
416 // Cluster time group Id vs cluster time for U/V sensors for coarse and fine trigger
417 //----------------------------------------------------------------
418 Name = "SVDDQM_cluster6TimeGroupIdU";
419 Title = Form("SVD cluster Time Group Id %s vs cluster time for U/P Side for coarse trigger", refFrame.Data());
420 m_clusterTime6GroupIdU = new TH2F(Name.Data(), Title.Data(), TimeBins / 2, TimeMin, TimeMax, GroupIdBins, GroupIdMin, GroupIdMax);
421 m_clusterTime6GroupIdU->GetXaxis()->SetTitle("cluster time (ns)");
422 m_clusterTime6GroupIdU->GetYaxis()->SetTitle("cluster group id");
424 Name = "SVDDQM_cluster6TimeGroupIdV";
425 Title = Form("SVD cluster Time Group Id %s vs cluster time for V/N Side for coarse trigger", refFrame.Data());
426 m_clusterTime6GroupIdV = new TH2F(Name.Data(), Title.Data(), TimeBins / 2, TimeMin, TimeMax, GroupIdBins, GroupIdMin, GroupIdMax);
427 m_clusterTime6GroupIdV->GetXaxis()->SetTitle("cluster time (ns)");
428 m_clusterTime6GroupIdV->GetYaxis()->SetTitle("cluster group id");
430
431 Name = "SVDDQM_cluster3TimeGroupIdU";
432 Title = Form("SVD cluster Time Group Id %s vs cluster time for U/P Side for fine trigger", refFrame.Data());
433 m_clusterTime3GroupIdU = new TH2F(Name.Data(), Title.Data(), TimeBins / 2, TimeMin, TimeMax, GroupIdBins, GroupIdMin, GroupIdMax);
434 m_clusterTime3GroupIdU->GetXaxis()->SetTitle("cluster time (ns)");
435 m_clusterTime3GroupIdU->GetYaxis()->SetTitle("cluster group id");
437 Name = "SVDDQM_cluster3TimeGroupIdV";
438 Title = Form("SVD cluster Time Group Id %s vs cluster time for V/N Side for fine trigger", refFrame.Data());
439 m_clusterTime3GroupIdV = new TH2F(Name.Data(), Title.Data(), TimeBins / 2, TimeMin, TimeMax, GroupIdBins, GroupIdMin, GroupIdMax);
440 m_clusterTime3GroupIdV->GetXaxis()->SetTitle("cluster time (ns)");
441 m_clusterTime3GroupIdV->GetYaxis()->SetTitle("cluster group id");
443
444 //----------------------------------------------------------------
445 // MaxBin of strips for all sensors (offline ZS)
446 //----------------------------------------------------------------
447 name = str(format("SVDDQM_StripMaxBinUAll"));
448 title = str(format("SVD U-Strip MaxBin for all sensors"));
449 m_stripMaxBinUAll = new TH1F(name.c_str(), title.c_str(), MaxBinBins, 0, MaxBinMax);
450 m_stripMaxBinUAll->GetXaxis()->SetTitle("max bin");
451 m_stripMaxBinUAll->GetYaxis()->SetTitle("count");
453 name = str(format("SVDDQM_StripMaxBinVAll"));
454 title = str(format("SVD V-Strip MaxBin for all sensors"));
455 m_stripMaxBinVAll = new TH1F(name.c_str(), title.c_str(), MaxBinBins, 0, MaxBinMax);
456 m_stripMaxBinVAll->GetXaxis()->SetTitle("max bin");
457 m_stripMaxBinVAll->GetYaxis()->SetTitle("count");
459
460 name = str(format("SVDDQM_StripMaxBinU3"));
461 title = str(format("SVD U-Strip MaxBin for layer 3 sensors"));
462 m_stripMaxBinU3 = new TH1F(name.c_str(), title.c_str(), MaxBinBins, 0, MaxBinMax);
463 m_stripMaxBinU3->GetXaxis()->SetTitle("max bin");
464 m_stripMaxBinU3->GetYaxis()->SetTitle("count");
466 name = str(format("SVDDQM_StripMaxBinV3"));
467 title = str(format("SVD V-Strip MaxBin for layer 3 sensors"));
468 m_stripMaxBinV3 = new TH1F(name.c_str(), title.c_str(), MaxBinBins, 0, MaxBinMax);
469 m_stripMaxBinV3->GetXaxis()->SetTitle("max bin");
470 m_stripMaxBinV3->GetYaxis()->SetTitle("count");
472
473 name = str(format("SVDDQM_StripMaxBinU6"));
474 title = str(format("SVD U-Strip MaxBin for layer 6 sensors"));
475 m_stripMaxBinU6 = new TH1F(name.c_str(), title.c_str(), MaxBinBins, 0, MaxBinMax);
476 m_stripMaxBinU6->GetXaxis()->SetTitle("max bin");
477 m_stripMaxBinU6->GetYaxis()->SetTitle("count");
479 name = str(format("SVDDQM_StripMaxBinV6"));
480 title = str(format("SVD V-Strip MaxBin for layer 6 sensors"));
481 m_stripMaxBinV6 = new TH1F(name.c_str(), title.c_str(), MaxBinBins, 0, MaxBinMax);
482 m_stripMaxBinV6->GetXaxis()->SetTitle("max bin");
483 m_stripMaxBinV6->GetYaxis()->SetTitle("count");
485
486 for (int i = 0; i < nSVDSensors; i++) {
487 VxdID id = gTools->getSensorIDFromSVDIndex(i);
488 int iLayer = id.getLayerNumber();
489 int iLadder = id.getLadderNumber();
490 int iSensor = id.getSensorNumber();
491 VxdID sensorID(iLayer, iLadder, iSensor);
492 SVD::SensorInfo SensorInfo = dynamic_cast<const SVD::SensorInfo&>(VXD::GeoCache::getInstance().getSensorInfo(sensorID));
493 string sensorDescr = str(format("%1%_%2%_%3%") % iLayer % iLadder % iSensor);
494
495 if (m_additionalPlots) {
496 //----------------------------------------------------------------
497 // Number of fired strips per sensor
498 //----------------------------------------------------------------
499 name = str(format("SVDDQM_%1%_FiredU") % sensorDescr);
500 title = str(format("SVD Sensor %1% Number of Fired U-Strips") % sensorDescr);
501 m_firedU[i] = new TH1F(name.c_str(), title.c_str(), 50, 0, 50);
502 m_firedU[i]->GetXaxis()->SetTitle("# fired strips");
503 m_firedU[i]->GetYaxis()->SetTitle("count");
504 m_histoList->Add(m_firedU[i]);
505 name = str(format("SVDDQM_%1%_FiredV") % sensorDescr);
506 title = str(format("SVD Sensor %1% Number of Fired V-Strips") % sensorDescr);
507 m_firedV[i] = new TH1F(name.c_str(), title.c_str(), 50, 0, 50);
508 m_firedV[i]->GetXaxis()->SetTitle("# fired strips");
509 m_firedV[i]->GetYaxis()->SetTitle("count");
510 m_histoList->Add(m_firedV[i]);
511 //----------------------------------------------------------------
512 // Number of clusters per sensor
513 //----------------------------------------------------------------
514 name = str(format("SVDDQM_%1%_ClustersU") % sensorDescr);
515 title = str(format("SVD Sensor %1% Number of U-Clusters") % sensorDescr);
516 m_clustersU[i] = new TH1F(name.c_str(), title.c_str(), 20, 0, 20);
517 m_clustersU[i]->GetXaxis()->SetTitle("# clusters");
518 m_clustersU[i]->GetYaxis()->SetTitle("count");
519 m_histoList->Add(m_clustersU[i]);
520 name = str(format("SVDDQM_%1%_ClustersV") % sensorDescr);
521 title = str(format("SVD Sensor %1% Number of V-Clusters") % sensorDescr);
522 m_clustersV[i] = new TH1F(name.c_str(), title.c_str(), 20, 0, 20);
523 m_clustersV[i]->GetXaxis()->SetTitle("# clusters");
524 m_clustersV[i]->GetYaxis()->SetTitle("count");
525 m_histoList->Add(m_clustersV[i]);
526 //----------------------------------------------------------------
527 // Charge of strips
528 //----------------------------------------------------------------
529 name = str(format("SVDDQM_%1%_ADCStripU") % sensorDescr);
530 title = str(format("SVD Sensor %1% U-Strip signal in ADC Counts, all 6 APV samples") % sensorDescr);
531 m_stripSignalU[i] = new TH1F(name.c_str(), title.c_str(), 256, -0.5, 255.5);
532 m_stripSignalU[i]->GetXaxis()->SetTitle("signal ADC");
533 m_stripSignalU[i]->GetYaxis()->SetTitle("count");
535 name = str(format("SVDDQM_%1%_ADCStripV") % sensorDescr);
536 title = str(format("SVD Sensor %1% V-Strip signal in ADC Counts, all 6 APV samples") % sensorDescr);
537 m_stripSignalV[i] = new TH1F(name.c_str(), title.c_str(), 256, -0.5, 255.5);
538 m_stripSignalV[i]->GetXaxis()->SetTitle("signal ADC");
539 m_stripSignalV[i]->GetYaxis()->SetTitle("count");
541 }
542
543 //----------------------------------------------------------------
544 // Charge of clusters
545 //----------------------------------------------------------------
546 name = str(format("SVDDQM_%1%_ClusterChargeU") % sensorDescr);
547 title = str(format("SVD Sensor %1% U-Cluster Charge") % sensorDescr);
548 m_clusterChargeU[i] = new TH1F(name.c_str(), title.c_str(), ChargeBins, 0, ChargeMax);
549 m_clusterChargeU[i]->GetXaxis()->SetTitle("cluster charge [ke-]");
550 m_clusterChargeU[i]->GetYaxis()->SetTitle("count");
552 name = str(format("SVDDQM_%1%_ClusterChargeV") % sensorDescr);
553 title = str(format("SVD Sensor %1% V-Cluster Charge") % sensorDescr);
554 m_clusterChargeV[i] = new TH1F(name.c_str(), title.c_str(), ChargeBins, 0, ChargeMax);
555 m_clusterChargeV[i]->GetXaxis()->SetTitle("cluster charge [ke-]");
556 m_clusterChargeV[i]->GetYaxis()->SetTitle("count");
558 //----------------------------------------------------------------
559 // SNR of clusters
560 //----------------------------------------------------------------
561 name = str(format("SVDDQM_%1%_ClusterSNRU") % sensorDescr);
562 title = str(format("SVD Sensor %1% U-Cluster SNR") % sensorDescr);
563 m_clusterSNRU[i] = new TH1F(name.c_str(), title.c_str(), SNRBins, 0, SNRMax);
564 m_clusterSNRU[i]->GetXaxis()->SetTitle("cluster SNR");
565 m_clusterSNRU[i]->GetYaxis()->SetTitle("count");
566 m_histoList->Add(m_clusterSNRU[i]);
567 name = str(format("SVDDQM_%1%_ClusterSNRV") % sensorDescr);
568 title = str(format("SVD Sensor %1% V-Cluster SNR") % sensorDescr);
569 m_clusterSNRV[i] = new TH1F(name.c_str(), title.c_str(), SNRBins, 0, SNRMax);
570 m_clusterSNRV[i]->GetXaxis()->SetTitle("cluster SNR");
571 m_clusterSNRV[i]->GetYaxis()->SetTitle("count");
572 m_histoList->Add(m_clusterSNRV[i]);
573
574 //----------------------------------------------------------------
575 // Strips Counts
576 //----------------------------------------------------------------
577 name = str(format("SVDDQM_%1%_StripCountU") % sensorDescr);
578 title = str(format("SVD Sensor %1% Integrated Number of ZS5 Fired U-Strip vs Strip Number") % sensorDescr);
579 m_stripCountU[i] = new TH1F(name.c_str(), title.c_str(), 768, -0.5, 767.5);
580 m_stripCountU[i]->GetXaxis()->SetTitle("cellID");
581 m_stripCountU[i]->GetYaxis()->SetTitle("count");
582 m_histoList->Add(m_stripCountU[i]);
583 name = str(format("SVDDQM_%1%_StripCountV") % sensorDescr);
584 title = str(format("SVD Sensor %1% Integrated Number of ZS5 Fired V-Strip vs Strip Number") % sensorDescr);
585 m_stripCountV[i] = new TH1F(name.c_str(), title.c_str(), 768, -0.5, 767.5);
586 m_stripCountV[i]->GetXaxis()->SetTitle("cellID");
587 m_stripCountV[i]->GetYaxis()->SetTitle("count");
588 m_histoList->Add(m_stripCountV[i]);
589 //----------------------------------------------------------------
590 // Strips Counts with online ZS
591 //----------------------------------------------------------------
592 name = str(format("SVDDQM_%1%_OnlineZSStripCountU") % sensorDescr);
593 title = str(format("SVD Sensor %1% Integrated Number of online-ZS Fired U-Strip vs Strip Number") % sensorDescr);
594 m_onlineZSstripCountU[i] = new TH1F(name.c_str(), title.c_str(), 768, -0.5, 767.5);
595 m_onlineZSstripCountU[i]->GetXaxis()->SetTitle("cellID");
596 m_onlineZSstripCountU[i]->GetYaxis()->SetTitle("count");
598 name = str(format("SVDDQM_%1%_OnlineZSStripCountV") % sensorDescr);
599 title = str(format("SVD Sensor %1% Integrated Number of online-ZS Fired V-Strip vs Strip Number") % sensorDescr);
600 m_onlineZSstripCountV[i] = new TH1F(name.c_str(), title.c_str(), 768, -0.5, 767.5);
601 m_onlineZSstripCountV[i]->GetXaxis()->SetTitle("cellID");
602 m_onlineZSstripCountV[i]->GetYaxis()->SetTitle("count");
604
605 //----------------------------------------------------------------
606 // Strips Counts for 3 samples
607 //----------------------------------------------------------------
608 name = str(format("SVDDQM_%1%_Strip3CountU") % sensorDescr);
609 title = str(format("SVD Sensor %1% Integrated Number of ZS5 Fired U-Strip vs Strip Number for 3 samples") % sensorDescr);
610 m_strip3CountU[i] = new TH1F(name.c_str(), title.c_str(), 768, -0.5, 767.5);
611 m_strip3CountU[i]->GetXaxis()->SetTitle("cellID");
612 m_strip3CountU[i]->GetYaxis()->SetTitle("count");
614 name = str(format("SVDDQM_%1%_Strip3CountV") % sensorDescr);
615 title = str(format("SVD Sensor %1% Integrated Number of ZS5 Fired V-Strip vs Strip Number for 3 samples") % sensorDescr);
616 m_strip3CountV[i] = new TH1F(name.c_str(), title.c_str(), 768, -0.5, 767.5);
617 m_strip3CountV[i]->GetXaxis()->SetTitle("cellID");
618 m_strip3CountV[i]->GetYaxis()->SetTitle("count");
620 //----------------------------------------------------------------
621 // Strips Counts with online ZS for 3 samples
622 //----------------------------------------------------------------
623 name = str(format("SVDDQM_%1%_OnlineZSStrip3CountU") % sensorDescr);
624 title = str(format("SVD Sensor %1% Integrated Number of online-ZS Fired U-Strip vs Strip Number for 3 samples") % sensorDescr);
625 m_onlineZSstrip3CountU[i] = new TH1F(name.c_str(), title.c_str(), 768, -0.5, 767.5);
626 m_onlineZSstrip3CountU[i]->GetXaxis()->SetTitle("cellID");
627 m_onlineZSstrip3CountU[i]->GetYaxis()->SetTitle("count");
629 name = str(format("SVDDQM_%1%_OnlineZSStrip3CountV") % sensorDescr);
630 title = str(format("SVD Sensor %1% Integrated Number of online-ZS Fired V-Strip vs Strip Number for 3 samples") % sensorDescr);
631 m_onlineZSstrip3CountV[i] = new TH1F(name.c_str(), title.c_str(), 768, -0.5, 767.5);
632 m_onlineZSstrip3CountV[i]->GetXaxis()->SetTitle("cellID");
633 m_onlineZSstrip3CountV[i]->GetYaxis()->SetTitle("count");
635
636
637 //----------------------------------------------------------------
638 // Strips Counts for 6 samples
639 //----------------------------------------------------------------
640 name = str(format("SVDDQM_%1%_Strip6CountU") % sensorDescr);
641 title = str(format("SVD Sensor %1% Integrated Number of ZS5 Fired U-Strip vs Strip Number for 6 samples") % sensorDescr);
642 m_strip6CountU[i] = new TH1F(name.c_str(), title.c_str(), 768, -0.5, 767.5);
643 m_strip6CountU[i]->GetXaxis()->SetTitle("cellID");
644 m_strip6CountU[i]->GetYaxis()->SetTitle("count");
646 name = str(format("SVDDQM_%1%_Strip6CountV") % sensorDescr);
647 title = str(format("SVD Sensor %1% Integrated Number of ZS5 Fired V-Strip vs Strip Number for 6 samples") % sensorDescr);
648 m_strip6CountV[i] = new TH1F(name.c_str(), title.c_str(), 768, -0.5, 767.5);
649 m_strip6CountV[i]->GetXaxis()->SetTitle("cellID");
650 m_strip6CountV[i]->GetYaxis()->SetTitle("count");
652 //----------------------------------------------------------------
653 // Strips Counts with online ZS for 6 samples
654 //----------------------------------------------------------------
655 name = str(format("SVDDQM_%1%_OnlineZSStrip6CountU") % sensorDescr);
656 title = str(format("SVD Sensor %1% Integrated Number of online-ZS Fired U-Strip vs Strip Number for 6 samples") % sensorDescr);
657 m_onlineZSstrip6CountU[i] = new TH1F(name.c_str(), title.c_str(), 768, -0.5, 767.5);
658 m_onlineZSstrip6CountU[i]->GetXaxis()->SetTitle("cellID");
659 m_onlineZSstrip6CountU[i]->GetYaxis()->SetTitle("count");
661 name = str(format("SVDDQM_%1%_OnlineZSStrip6CountV") % sensorDescr);
662 title = str(format("SVD Sensor %1% Integrated Number of online-ZS Fired V-Strip vs Strip Number for 6 samples") % sensorDescr);
663 m_onlineZSstrip6CountV[i] = new TH1F(name.c_str(), title.c_str(), 768, -0.5, 767.5);
664 m_onlineZSstrip6CountV[i]->GetXaxis()->SetTitle("cellID");
665 m_onlineZSstrip6CountV[i]->GetYaxis()->SetTitle("count");
667
668
669 //----------------------------------------------------------------
670 // Strips Counts for cluster time group id = 0
671 //----------------------------------------------------------------
672 name = str(format("SVDDQM_%1%_StripCountGroupId0U") % sensorDescr);
673 title = str(format("SVD Sensor %1% Integrated NumberFired U-Strip for group Id = 0 vs Strip Number") % sensorDescr);
674 m_stripCountGroupId0U[i] = new TH1F(name.c_str(), title.c_str(), 768, -0.5, 767.5);
675 m_stripCountGroupId0U[i]->GetXaxis()->SetTitle("cellID");
676 m_stripCountGroupId0U[i]->GetYaxis()->SetTitle("count");
678 name = str(format("SVDDQM_%1%_StripCountGroupId0V") % sensorDescr);
679 title = str(format("SVD Sensor %1% Integrated Number of Fired V-Strip for group Id = 0 vs Strip Number") % sensorDescr);
680 m_stripCountGroupId0V[i] = new TH1F(name.c_str(), title.c_str(), 768, -0.5, 767.5);
681 m_stripCountGroupId0V[i]->GetXaxis()->SetTitle("cellID");
682 m_stripCountGroupId0V[i]->GetYaxis()->SetTitle("count");
684
685 //----------------------------------------------------------------
686 // Cluster size distribution
687 //----------------------------------------------------------------
688 name = str(format("SVDDQM_%1%_ClusterSizeU") % sensorDescr);
689 title = str(format("SVD Sensor %1% U-Cluster Size") % sensorDescr);
690 m_clusterSizeU[i] = new TH1F(name.c_str(), title.c_str(), 9, 1, 10);
691 m_clusterSizeU[i]->GetXaxis()->SetTitle("cluster size");
692 m_clusterSizeU[i]->GetYaxis()->SetTitle("count");
694 name = str(format("SVDDQM_%1%_ClusterSizeV") % sensorDescr);
695 title = str(format("SVD Sensor %1% V-Cluster Size") % sensorDescr);
696 m_clusterSizeV[i] = new TH1F(name.c_str(), title.c_str(), 9, 1, 10);
697 m_clusterSizeV[i]->GetXaxis()->SetTitle("cluster size");
698 m_clusterSizeV[i]->GetYaxis()->SetTitle("count");
700 //----------------------------------------------------------------
701 // Cluster time distribution
702 //----------------------------------------------------------------
703 name = str(format("SVDDQM_%1%_ClusterTimeU") % sensorDescr);
704 Title = Form("SVD Sensor %s U-Cluster Time %s", sensorDescr.c_str(), refFrame.Data());
705 m_clusterTimeU[i] = new TH1F(name.c_str(), Title.Data(), TimeBins, TimeMin, TimeMax);
706 m_clusterTimeU[i]->GetXaxis()->SetTitle("cluster time (ns)");
707 m_clusterTimeU[i]->GetYaxis()->SetTitle("count");
709 name = str(format("SVDDQM_%1%_ClusterTimeV") % sensorDescr);
710 Title = Form("SVD Sensor %s V-Cluster Time %s", sensorDescr.c_str(), refFrame.Data());
711 m_clusterTimeV[i] = new TH1F(name.c_str(), Title.Data(), TimeBins, TimeMin, TimeMax);
712 m_clusterTimeV[i]->GetXaxis()->SetTitle("cluster time (ns)");
713 m_clusterTimeV[i]->GetYaxis()->SetTitle("count");
715 }
716
717 for (int i = 0; i < nSVDChips; i++) {
718 VxdID id = gTools->getChipIDFromSVDIndex(i);
719 int iLayer = id.getLayerNumber();
720 int iLadder = id.getLadderNumber();
721 int iSensor = id.getSensorNumber();
722 int iChip = gTools->getSVDChipNumber(id);
723 int IsU = gTools->isSVDSideU(id);
724 TString AxisTicks = Form("%i_%i_%i_u%i", iLayer, iLadder, iSensor, iChip);
725 if (!IsU)
726 AxisTicks = Form("%i_%i_%i_v%i", iLayer, iLadder, iSensor, iChip);
727 m_hitMapCountsChip->GetXaxis()->SetBinLabel(i + 1, AxisTicks.Data());
728 m_hitMapClCountsChip->GetXaxis()->SetBinLabel(i + 1, AxisTicks.Data());
729 }
730
731
732
733 //----------------------------------------------------------------
734 // Additional histograms for out of ExpressReco
735 //----------------------------------------------------------------
736
737 if (m_ShowAllHistos == 1) {
738 TDirectory* dirShowAll = nullptr;
739 dirShowAll = oldDir->mkdir("SVDDQMAll");
740 dirShowAll->cd();
741
742 m_hitMapU = new TH2F*[nSVDSensors];
743 m_hitMapV = new TH2F*[nSVDSensors];
744 m_hitMapUCl = new TH1F*[nSVDSensors];
745 m_hitMapVCl = new TH1F*[nSVDSensors];
746 for (int i = 0; i < nSVDSensors; i++) {
747 VxdID id = gTools->getSensorIDFromSVDIndex(i);
748 int iLayer = id.getLayerNumber();
749 int iLadder = id.getLadderNumber();
750 int iSensor = id.getSensorNumber();
751 VxdID sensorID(iLayer, iLadder, iSensor);
752 SVD::SensorInfo SensorInfo = dynamic_cast<const SVD::SensorInfo&>(VXD::GeoCache::getInstance().getSensorInfo(sensorID));
753 string sensorDescr = str(format("%1%_%2%_%3%") % iLayer % iLadder % iSensor);
754 //----------------------------------------------------------------
755 // Hitmaps: Number of strips by coordinate
756 //----------------------------------------------------------------
757 name = str(format("SVD_%1%_StripHitmapU") % sensorDescr);
758 title = str(format("SVD Sensor %1% Strip Hitmap in U") % sensorDescr);
759 int nStrips = SensorInfo.getUCells();
760 m_hitMapU[i] = new TH2F(name.c_str(), title.c_str(), nStrips, 0, nStrips, SVDShaperDigit::c_nAPVSamples, 0,
762 m_hitMapU[i]->GetXaxis()->SetTitle("u position [pitch units]");
763 m_hitMapU[i]->GetYaxis()->SetTitle("timebin [time units]");
764 m_hitMapU[i]->GetZaxis()->SetTitle("hits");
765 m_histoList->Add(m_hitMapU[i]);
766 name = str(format("SVD_%1%_StripHitmapV") % sensorDescr);
767 title = str(format("SVD Sensor %1% Strip Hitmap in V") % sensorDescr);
768 nStrips = SensorInfo.getVCells();
769 m_hitMapV[i] = new TH2F(name.c_str(), title.c_str(), nStrips, 0, nStrips, SVDShaperDigit::c_nAPVSamples, 0,
771 m_hitMapV[i]->GetXaxis()->SetTitle("v position [pitch units]");
772 m_hitMapV[i]->GetYaxis()->SetTitle("timebin [time units]");
773 m_hitMapV[i]->GetZaxis()->SetTitle("hits");
774 m_histoList->Add(m_hitMapV[i]);
775 //----------------------------------------------------------------
776 // Hitmaps: Number of clusters by coordinate
777 //----------------------------------------------------------------
778 name = str(format("SVD_%1%_HitmapClstU") % sensorDescr);
779 title = str(format("SVD Sensor %1% Hitmap Clusters in U") % sensorDescr);
780 nStrips = SensorInfo.getUCells();
781 m_hitMapUCl[i] = new TH1F(name.c_str(), title.c_str(), nStrips, 0, nStrips);
782 m_hitMapUCl[i]->GetXaxis()->SetTitle("u position [pitch units]");
783 m_hitMapUCl[i]->GetYaxis()->SetTitle("hits");
784 m_histoList->Add(m_hitMapUCl[i]);
785 name = str(format("SVD_%1%_HitmapClstV") % sensorDescr);
786 title = str(format("SVD Sensor %1% Hitmap Clusters in V") % sensorDescr);
787 nStrips = SensorInfo.getVCells();
788 m_hitMapVCl[i] = new TH1F(name.c_str(), title.c_str(), nStrips, 0, nStrips);
789 m_hitMapVCl[i]->GetXaxis()->SetTitle("v position [pitch units]");
790 m_hitMapVCl[i]->GetYaxis()->SetTitle("hits");
791 m_histoList->Add(m_hitMapVCl[i]);
792 }
793 }
794
795 oldDir->cd();
796}
797
798
800{
801 // Register histograms (calls back defineHisto)
802 REG_HISTOGRAM
803
804 auto gTools = VXD::GeoCache::getInstance().getGeoTools();
805 if (gTools->getNumberOfSVDLayers() != 0) {
806 //Register collections
810
811 storeSVDClusters.isOptional();
812 storeSVDShaperDigits.isOptional();
813 m_svdEventInfo.isOptional();
814 storeNoZSSVDShaperDigits.isOptional();
815
816 //Store names to speed up creation later
817 m_storeSVDShaperDigitsName = storeSVDShaperDigits.getName();
818 }
819
820 m_objTrgSummary.isOptional();
821}
822
824{
825 auto gTools = VXD::GeoCache::getInstance().getGeoTools();
826 if (gTools->getNumberOfSVDLayers() == 0) return;
827
828
829 StoreObjPtr<EventMetaData> evtMetaData;
830 m_expNumber = evtMetaData->getExperiment();
831 m_runNumber = evtMetaData->getRun();
832
833 // Add experiment and run number to the title of selected histograms (CR shifter plots)
834 TString runID = TString::Format(" ~ Exp%d Run%d", m_expNumber, m_runNumber);
835 TObject* obj;
836 TIter nextH(m_histoList);
837 while ((obj = nextH()))
838 if (obj->InheritsFrom("TH1")) {
839
840 TString tmp = (TString)obj->GetTitle();
841 Int_t pos = tmp.Last('~');
842 if (pos == -1) pos = tmp.Length() + 2;
843
844 TString title = tmp(0, pos - 2);
845 ((TH1F*)obj)->SetTitle(title + runID);
846 ((TH1F*)obj)->Reset();
847 }
848}
849
851{
852
853
854 //check HLT decision and increase number of events only if the event has been accepted
855
858 if (!eventAccepted) return;
859 }
860 m_nEvents->Fill(0);
861
862 int nSamples = 0;
863 if (m_svdEventInfo.isValid())
864 nSamples = m_svdEventInfo->getNSamples();
865 else
866 return;
867
868 auto gTools = VXD::GeoCache::getInstance().getGeoTools();
869 if (gTools->getNumberOfSVDLayers() == 0) return;
870
871
872 const StoreArray<SVDShaperDigit> storeNoZSSVDShaperDigits(m_storeNoZSSVDShaperDigitsName);
873 const StoreArray<SVDShaperDigit> storeSVDShaperDigits(m_storeSVDShaperDigitsName);
874 const StoreArray<SVDCluster> storeSVDClusters(m_storeSVDClustersName);
875
876 if (!storeSVDShaperDigits.isValid() || !storeSVDShaperDigits.getEntries()) {
877 return;
878 }
879
880 int firstSVDLayer = gTools->getFirstSVDLayer();
881 int lastSVDLayer = gTools->getLastSVDLayer();
882 int nSVDSensors = gTools->getNumberOfSVDSensors();
883
884 // Fired strips offline ZS
885 vector< set<int> > uStrips(nSVDSensors); // sets to eliminate multiple samples per strip
886 vector< set<int> > vStrips(nSVDSensors);
887 for (const SVDShaperDigit& digitIn : storeSVDShaperDigits) {
888 int iLayer = digitIn.getSensorID().getLayerNumber();
889 if ((iLayer < firstSVDLayer) || (iLayer > lastSVDLayer)) continue;
890 int iLadder = digitIn.getSensorID().getLadderNumber();
891 int iSensor = digitIn.getSensorID().getSensorNumber();
892 VxdID sensorID(iLayer, iLadder, iSensor);
893 int index = gTools->getSVDSensorIndex(sensorID);
894 SVD::SensorInfo SensorInfo = dynamic_cast<const SVD::SensorInfo&>(VXD::GeoCache::getInstance().getSensorInfo(sensorID));
895 if (digitIn.isUStrip()) {
896
897 //fill strip count first
898 if (m_stripCountU[index] != nullptr) m_stripCountU[index]->Fill(digitIn.getCellID());
899
900 if (nSamples == 3) {
901 if (m_strip3CountU[index] != nullptr) m_strip3CountU[index]->Fill(digitIn.getCellID());
902 } else {
903 if (m_strip6CountU[index] != nullptr) m_strip6CountU[index]->Fill(digitIn.getCellID());
904 }
905
906 //fill max bin
907 if (m_stripMaxBinUAll != nullptr) m_stripMaxBinUAll->Fill(digitIn.getMaxTimeBin());
908 if (iLayer == 3)
909 if (m_stripMaxBinU3 != nullptr) m_stripMaxBinU3->Fill(digitIn.getMaxTimeBin());
910 if (iLayer == 6)
911 if (m_stripMaxBinU6 != nullptr) m_stripMaxBinU6->Fill(digitIn.getMaxTimeBin());
912
913 uStrips.at(index).insert(digitIn.getCellID());
914 int Chip = (int)(digitIn.getCellID() / gTools->getSVDChannelsPerChip()) + 1;
915 int indexChip = gTools->getSVDChipIndex(sensorID, kTRUE, Chip);
916 // 6-to-1 relation weights are equal to digit signals, modulo rounding error
917 SVDShaperDigit::APVFloatSamples samples = digitIn.getSamples();
918 int isSample = 0;
919 for (size_t i = 0; i < SVDShaperDigit::c_nAPVSamples; ++i) {
921 if (m_stripSignalU[index] != nullptr) m_stripSignalU[index]->Fill(samples[i]);
922 if (samples[i] > m_CutSVDCharge) {
923 isSample = 1;
924 if (m_ShowAllHistos == 1) {
925 if (m_hitMapU[index] != nullptr) m_hitMapU[index]->Fill(digitIn.getCellID(), i);
926 }
927 }
928 }
929 if (isSample) {
930 if (m_hitMapCountsU != nullptr) m_hitMapCountsU->Fill(index);
931 if (m_hitMapCountsChip != nullptr) m_hitMapCountsChip->Fill(indexChip);
932 }
933 } else {
934 //fill strip count first
935 if (m_stripCountV[index] != nullptr) m_stripCountV[index]->Fill(digitIn.getCellID());
936
937 if (nSamples == 3) {
938 if (m_strip3CountV[index] != nullptr) m_strip3CountV[index]->Fill(digitIn.getCellID());
939 } else {
940 if (m_strip6CountV[index] != nullptr) m_strip6CountV[index]->Fill(digitIn.getCellID());
941 }
942
943 //fill max bin
944 if (m_stripMaxBinVAll != nullptr) m_stripMaxBinVAll->Fill(digitIn.getMaxTimeBin());
945
946 if (iLayer == 3)
947 if (m_stripMaxBinV3 != nullptr) m_stripMaxBinV3->Fill(digitIn.getMaxTimeBin());
948 if (iLayer == 6)
949 if (m_stripMaxBinV6 != nullptr) m_stripMaxBinV6->Fill(digitIn.getMaxTimeBin());
950
951 vStrips.at(index).insert(digitIn.getCellID());
952 int Chip = (int)(digitIn.getCellID() / gTools->getSVDChannelsPerChip()) + 1;
953 int indexChip = gTools->getSVDChipIndex(sensorID, kFALSE, Chip);
954 // 6-to-1 relation weights are equal to digit signals, modulo rounding error
955 SVDShaperDigit::APVFloatSamples samples = digitIn.getSamples();
956 int isSample = 0;
957 for (size_t i = 0; i < SVDShaperDigit::c_nAPVSamples; ++i) {
959 if (m_stripSignalV[index] != nullptr) m_stripSignalV[index]->Fill(samples[i]);
960 if (samples[i] > m_CutSVDCharge) {
961 isSample = 1;
962 if (m_ShowAllHistos == 1) {
963 if (m_hitMapV[index] != nullptr) m_hitMapV[index]->Fill(digitIn.getCellID(), i);
964 }
965 }
966 }
967 if (isSample) {
968 if (m_hitMapCountsV != nullptr) m_hitMapCountsV->Fill(index);
969 if (m_hitMapCountsChip != nullptr) m_hitMapCountsChip->Fill(indexChip);
970 }
971 }
972 }
973 if (m_additionalPlots) {
974 for (int i = 0; i < nSVDSensors; i++) {
975 if ((m_firedU[i] != nullptr) && (uStrips[i].size() > 0))
976 m_firedU[i]->Fill(uStrips[i].size());
977 if ((m_firedV[i] != nullptr) && (vStrips[i].size() > 0))
978 m_firedV[i]->Fill(vStrips[i].size());
979 }
980 }
981
982 // Fired strips ONLINE ZS
983 if (storeNoZSSVDShaperDigits.isValid())
984 for (const SVDShaperDigit& digitIn : storeNoZSSVDShaperDigits) {
985 int iLayer = digitIn.getSensorID().getLayerNumber();
986 if ((iLayer < firstSVDLayer) || (iLayer > lastSVDLayer)) continue;
987 int iLadder = digitIn.getSensorID().getLadderNumber();
988 int iSensor = digitIn.getSensorID().getSensorNumber();
989 VxdID sensorID(iLayer, iLadder, iSensor);
990 int index = gTools->getSVDSensorIndex(sensorID);
991 SVD::SensorInfo SensorInfo = dynamic_cast<const SVD::SensorInfo&>(VXD::GeoCache::getInstance().getSensorInfo(sensorID));
992 if (digitIn.isUStrip()) {
993 if (m_onlineZSstripCountU[index] != nullptr) m_onlineZSstripCountU[index]->Fill(digitIn.getCellID());
994 if (nSamples == 3) {
995 if (m_onlineZSstrip3CountU[index] != nullptr) m_onlineZSstrip3CountU[index]->Fill(digitIn.getCellID());
996 } else {
997 if (m_onlineZSstrip6CountU[index] != nullptr) m_onlineZSstrip6CountU[index]->Fill(digitIn.getCellID());
998 }
999 } else {
1000 if (m_onlineZSstripCountV[index] != nullptr) m_onlineZSstripCountV[index]->Fill(digitIn.getCellID());
1001 if (nSamples == 3) {
1002 if (m_onlineZSstrip3CountV[index] != nullptr) m_onlineZSstrip3CountV[index]->Fill(digitIn.getCellID());
1003 } else {
1004 if (m_onlineZSstrip6CountV[index] != nullptr) m_onlineZSstrip6CountV[index]->Fill(digitIn.getCellID());
1005 }
1006 }
1007 }
1008
1009 vector< set<int> > countsU(nSVDSensors); // sets to eliminate multiple samples per strip
1010 vector< set<int> > countsV(nSVDSensors);
1011 // Hitmaps, Charge, Seed, Size, Time, ...
1012 for (const SVDCluster& cluster : storeSVDClusters) {
1013 if (cluster.getCharge() < m_CutSVDClusterCharge) continue;
1014 int iLayer = cluster.getSensorID().getLayerNumber();
1015 if ((iLayer < firstSVDLayer) || (iLayer > lastSVDLayer)) continue;
1016 int iLadder = cluster.getSensorID().getLadderNumber();
1017 int iSensor = cluster.getSensorID().getSensorNumber();
1018 VxdID sensorID(iLayer, iLadder, iSensor);
1019 int index = gTools->getSVDSensorIndex(sensorID);
1020 SVD::SensorInfo SensorInfo = dynamic_cast<const SVD::SensorInfo&>(VXD::GeoCache::getInstance().getSensorInfo(sensorID));
1021
1022 float time = cluster.getClsTime();
1023 if (m_desynchSVDTime && m_svdEventInfo.isValid())
1024 time = time - m_svdEventInfo->getSVD2FTSWTimeShift(cluster.getFirstFrame());
1025
1026 vector<int> vec = cluster.getTimeGroupId();
1027 auto minElement = min_element(vec.begin(), vec.end());
1028 int groupId = -1;
1029 if (vec.size() > 0) {
1030 groupId = *minElement;
1031
1032
1033 if (cluster.isUCluster()) {
1034 if (m_clusterTimeGroupIdU != nullptr) m_clusterTimeGroupIdU->Fill(time, groupId);
1035 if (m_objTrgSummary.isValid()) {
1036 int trgQuality = m_objTrgSummary->getTimQuality();
1037 if (trgQuality == 1)
1038 if (m_clusterTime6GroupIdU != nullptr) m_clusterTime6GroupIdU->Fill(time, groupId);
1039 if (trgQuality == 2)
1040 if (m_clusterTime3GroupIdU != nullptr) m_clusterTime3GroupIdU->Fill(time, groupId);
1041 }
1042
1043
1044 } else {
1045 if (m_clusterTimeGroupIdV != nullptr) m_clusterTimeGroupIdV->Fill(time, groupId);
1046 if (m_objTrgSummary.isValid()) {
1047 int trgQuality = m_objTrgSummary->getTimQuality();
1048 if (trgQuality == 1)
1049 if (m_clusterTime6GroupIdV != nullptr) m_clusterTime6GroupIdV->Fill(time, groupId);
1050 if (trgQuality == 2)
1051 if (m_clusterTime3GroupIdV != nullptr) m_clusterTime3GroupIdV->Fill(time, groupId);
1052 }
1053 }
1054 }
1055
1056 if (cluster.isUCluster()) {
1057 countsU.at(index).insert(SensorInfo.getUCellID(cluster.getPosition()));
1058 int indexChip = gTools->getSVDChipIndex(sensorID, kTRUE,
1059 (int)(SensorInfo.getUCellID(cluster.getPosition()) / gTools->getSVDChannelsPerChip()) + 1);
1060 if (m_hitMapClCountsU != nullptr) m_hitMapClCountsU->Fill(index);
1061 if (m_hitMapClCountsChip != nullptr) m_hitMapClCountsChip->Fill(indexChip);
1062 if (m_clusterChargeU[index] != nullptr) m_clusterChargeU[index]->Fill(cluster.getCharge() / 1000.0); // in kelectrons
1063 if (m_clusterSNRU[index] != nullptr) m_clusterSNRU[index]->Fill(cluster.getSNR());
1064 if (m_clusterChargeUAll != nullptr) m_clusterChargeUAll->Fill(cluster.getCharge() / 1000.0); // in kelectrons
1065 if (m_clusterSNRUAll != nullptr) m_clusterSNRUAll->Fill(cluster.getSNR());
1066 if (m_clusterSizeU[index] != nullptr) m_clusterSizeU[index]->Fill(cluster.getSize());
1067 if (m_clusterTimeU[index] != nullptr) m_clusterTimeU[index]->Fill(time);
1068 if (m_clusterTimeUAll != nullptr) m_clusterTimeUAll->Fill(time);
1069 if (iLayer == 3) {
1070 if (m_clusterChargeU3 != nullptr) m_clusterChargeU3->Fill(cluster.getCharge() / 1000.0); // in kelectrons
1071 if (m_clusterSNRU3 != nullptr) m_clusterSNRU3->Fill(cluster.getSNR());
1072 if (m_clusterTimeU3 != nullptr) m_clusterTimeU3->Fill(time);
1073 if (nSamples == 3) {
1074 if (m_cluster3TimeU3 != nullptr) m_cluster3TimeU3->Fill(time);
1075 } else {
1076 if (m_cluster6TimeU3 != nullptr) m_cluster6TimeU3->Fill(time);
1077 }
1078 } else {
1079 if (m_clusterChargeU456 != nullptr) m_clusterChargeU456->Fill(cluster.getCharge() / 1000.0); // in kelectrons
1080 if (m_clusterSNRU456 != nullptr) m_clusterSNRU456->Fill(cluster.getSNR());
1081 if (m_clusterTimeU456 != nullptr) m_clusterTimeU456->Fill(time);
1082 if (nSamples == 3) {
1083 if (m_cluster3TimeU456 != nullptr) m_cluster3TimeU456->Fill(time);
1084 } else {
1085 if (m_cluster6TimeU456 != nullptr) m_cluster6TimeU456->Fill(time);
1086 }
1087 }
1088
1089 if (m_ShowAllHistos == 1)
1090 if (m_hitMapUCl[index] != nullptr) m_hitMapUCl[index]->Fill(SensorInfo.getUCellID(cluster.getPosition()));
1091
1092 // groupId for U side
1093 if (groupId == 0) {
1094 for (const SVDShaperDigit& digitIn : cluster.getRelationsTo<SVDShaperDigit>(m_storeSVDShaperDigitsName)) {
1095 if (m_stripCountGroupId0U != nullptr) m_stripCountGroupId0U[index]->Fill(digitIn.getCellID());
1096 }
1097 }
1098 } else {
1099 countsV.at(index).insert(SensorInfo.getVCellID(cluster.getPosition()));
1100 int indexChip = gTools->getSVDChipIndex(sensorID, kFALSE,
1101 (int)(SensorInfo.getVCellID(cluster.getPosition()) / gTools->getSVDChannelsPerChip()) + 1);
1102 if (m_hitMapClCountsV != nullptr) m_hitMapClCountsV->Fill(index);
1103 if (m_hitMapClCountsChip != nullptr) m_hitMapClCountsChip->Fill(indexChip);
1104 if (m_clusterChargeV[index] != nullptr) m_clusterChargeV[index]->Fill(cluster.getCharge() / 1000.0); // in kelectrons
1105 if (m_clusterSNRV[index] != nullptr) m_clusterSNRV[index]->Fill(cluster.getSNR());
1106 if (m_clusterChargeVAll != nullptr) m_clusterChargeVAll->Fill(cluster.getCharge() / 1000.0); // in kelectrons
1107 if (m_clusterSNRVAll != nullptr) m_clusterSNRVAll->Fill(cluster.getSNR());
1108 if (m_clusterSizeV[index] != nullptr) m_clusterSizeV[index]->Fill(cluster.getSize());
1109 if (m_clusterTimeV[index] != nullptr) m_clusterTimeV[index]->Fill(time);
1110 if (m_clusterTimeVAll != nullptr) m_clusterTimeVAll->Fill(time);
1111 if (iLayer == 3) {
1112 if (m_clusterChargeV3 != nullptr) m_clusterChargeV3->Fill(cluster.getCharge() / 1000.0); // in kelectrons
1113 if (m_clusterSNRV3 != nullptr) m_clusterSNRV3->Fill(cluster.getSNR());
1114 if (m_clusterTimeV3 != nullptr) m_clusterTimeV3->Fill(time);
1115 if (nSamples == 3) {
1116 if (m_cluster3TimeV3 != nullptr) m_cluster3TimeV3->Fill(time);
1117 } else {
1118 if (m_cluster6TimeV3 != nullptr) m_cluster6TimeV3->Fill(time);
1119 }
1120 } else {
1121 if (m_clusterChargeV456 != nullptr) m_clusterChargeV456->Fill(cluster.getCharge() / 1000.0); // in kelectrons
1122 if (m_clusterSNRV456 != nullptr) m_clusterSNRV456->Fill(cluster.getSNR());
1123 if (m_clusterTimeV456 != nullptr) m_clusterTimeV456->Fill(time);
1124 if (nSamples == 3) {
1125 if (m_cluster3TimeV456 != nullptr) m_cluster3TimeV456->Fill(time);
1126 } else {
1127 if (m_cluster6TimeV456 != nullptr) m_cluster6TimeV456->Fill(time);
1128 }
1129 }
1130 if (m_ShowAllHistos == 1)
1131 if (m_hitMapVCl[index] != nullptr) m_hitMapVCl[index]->Fill(SensorInfo.getVCellID(cluster.getPosition()));
1132
1133 // groupId for V side
1134 if (groupId == 0) {
1135 for (const SVDShaperDigit& digitIn : cluster.getRelationsTo<SVDShaperDigit>(m_storeSVDShaperDigitsName)) {
1136 if (m_stripCountGroupId0V != nullptr) m_stripCountGroupId0V[index]->Fill(digitIn.getCellID());
1137 }
1138 }
1139 }
1140 }
1141 if (m_additionalPlots) {
1142 for (int i = 0; i < nSVDSensors; i++) {
1143 if ((m_clustersU[i] != nullptr) && (countsU[i].size() > 0))
1144 m_clustersU[i]->Fill(countsU[i].size());
1145 if ((m_clustersV[i] != nullptr) && (countsV[i].size() > 0))
1146 m_clustersV[i]->Fill(countsV[i].size());
1147 }
1148 }
1149}
1150
1151
1153{
1154
1155 // m_histoList->Delete();
1156 delete m_histoList;
1157
1158}
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_onlineZSstrip6CountV
v strip count (online Zero Suppression for 6 samples
TH1F * m_clusterSNRVAll
v SNR of clusters for all sensors
TH1F * m_cluster3TimeV3
v Time of clusters for layer 3 sensors 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.
std::string m_storeNoZSSVDShaperDigitsName
not zero-suppressed SVDShaperDigits StoreArray name
bool m_skipRejectedEvents
if true skip events rejected by HLT (default)
TH1F * m_cluster3TimeU3
u Time of clusters for layer 3 sensors for 3 samples
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_hitMapClCountsU
Hitmaps u of Clusters.
float m_CutSVDCharge
cut for accepting strips to hitmap histogram default = 0 ADU
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_stripSignalU
u charge of strips
TH1F * m_clusterChargeUAll
u charge of clusters for all sensors
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()....
TH2F * m_clusterTime6GroupIdU
time group id for U side for coarse trigger
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.
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
void event() override final
Module function event.
TH2F * m_clusterTime6GroupIdV
time group id for V side for coarse trigger
TH1F ** m_onlineZSstripCountV
v strip count (online Zero Suppression
TH1F ** m_stripSignalV
v charge of strips
TH1F ** m_strip6CountU
u strip count for 6 samples
StoreObjPtr< TRGSummary > m_objTrgSummary
Trigger Summary data object.
std::string m_storeSVDShaperDigitsName
SVDShaperDigits StoreArray name.
TH1F * m_cluster6TimeU3
u Time of clusters for layer 3 sensors for 6 samples
TH2F * m_clusterTime3GroupIdU
time group id for U side for fine trigger
std::string m_histogramDirectoryName
Name of the histogram directory in ROOT file.
TH1F * m_clusterChargeVAll
v charge of clusters for all sensors
TH1F ** m_onlineZSstrip6CountU
u strip count (online Zero Suppression) for 6 samples
TH1F * m_clusterSNRU3
u SNR of clusters for layer 3 sensors
TH1F * m_cluster6TimeU456
u Time of clusters for layer 4,5,6 sensors for 6 samples
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)
TList * m_histoList
list of cumulative histograms
TH1F ** m_clusterChargeU
u charge of clusters
TH1F * m_hitMapCountsChip
Hitmaps of digits on chips.
TH1F * m_clusterChargeV3
v charge of clusters for layer 3 sensors
TH2F ** m_hitMapV
Hitmaps pixels for v.
TH1F ** m_strip3CountV
v strip count for 3 samples
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_cluster6TimeV456
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
TH2F * m_clusterTime3GroupIdV
time group id for V side for fine trigger
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_cluster3TimeV456
v Time of clusters for layer 4,5,6 sensors for 3 samples
TH1F * m_cluster6TimeV3
v Time of clusters for layer 3 sensors for 6 samples
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_cluster3TimeU456
u Time of clusters for layer 4,5,6 sensors for 3 samples
TH1F ** m_onlineZSstrip3CountU
u strip count (online Zero Suppression) for 3 samples
TH1F ** m_onlineZSstrip3CountV
v strip count (online Zero Suppression for 3 samples
TH1F * m_stripMaxBinVAll
v MaxBin of strips for all sensors (offline Zero Suppression)
TH1F * m_hitMapClCountsChip
Hitmaps of clusters on chips.
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
TH1F ** m_firedV
Fired v strips per event.
TH1F * m_clusterChargeV456
v charge of clusters for layer 4,5,6 sensors
TH1F ** m_strip6CountV
v strip count for 3 samples
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
TH1F ** m_strip3CountU
u strip count for 3 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.