Belle II Software  release-08-00-10
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 
27 using namespace std;
28 using boost::format;
29 using namespace Belle2;
30 using namespace SoftwareTrigger;
31 
32 //-----------------------------------------------------------------
33 // Register the Module
34 //-----------------------------------------------------------------
35 REG_MODULE(SVDDQMExpressReco);
36 
37 
38 //-----------------------------------------------------------------
39 // Implementation
40 //-----------------------------------------------------------------
41 
42 SVDDQMExpressRecoModule::SVDDQMExpressRecoModule() : HistoModule()
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 
71 SVDDQMExpressRecoModule::~SVDDQMExpressRecoModule()
72 {
73 }
74 
75 //------------------------------------------------------------------
76 // Function to define histograms
77 //-----------------------------------------------------------------
78 
80 {
81  auto gTools = VXD::GeoCache::getInstance().getGeoTools();
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");
104  m_histoList->Add(m_nEvents);
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";
204  if (m_desynchSVDTime)
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 3-6 samples
401  //----------------------------------------------------------------
402  Name = "SVDDQM_Cluster3TimeGroupId";
403  Title = Form("SVD cluster Time GourpId %s vs cluster time for 3 samples", refFrame.Data());
404  m_cluster3TimeGroupId = new TH2F(Name.Data(), Title.Data(), TimeBins, TimeMin, TimeMax, GroupIdBins, GroupIdMin, GroupIdMax);
405  m_cluster3TimeGroupId->GetXaxis()->SetTitle("cluster time (ns)");
406  m_cluster3TimeGroupId->GetYaxis()->SetTitle("cluster group id");
408  Name = "SVDDQM_Cluster6TimeGroupId";
409  Title = Form("SVD cluster Time GourpId %s vs cluster time for 6 samples", refFrame.Data());
410  m_cluster6TimeGroupId = new TH2F(Name.Data(), Title.Data(), TimeBins, TimeMin, TimeMax, GroupIdBins, GroupIdMin, GroupIdMax);
411  m_cluster6TimeGroupId->GetXaxis()->SetTitle("cluster time (ns)");
412  m_cluster6TimeGroupId->GetYaxis()->SetTitle("cluster group id");
414 
415  //----------------------------------------------------------------
416  // MaxBin of strips for all sensors (offline ZS)
417  //----------------------------------------------------------------
418  name = str(format("SVDDQM_StripMaxBinUAll"));
419  title = str(format("SVD U-Strip MaxBin for all sensors"));
420  m_stripMaxBinUAll = new TH1F(name.c_str(), title.c_str(), MaxBinBins, 0, MaxBinMax);
421  m_stripMaxBinUAll->GetXaxis()->SetTitle("max bin");
422  m_stripMaxBinUAll->GetYaxis()->SetTitle("count");
424  name = str(format("SVDDQM_StripMaxBinVAll"));
425  title = str(format("SVD V-Strip MaxBin for all sensors"));
426  m_stripMaxBinVAll = new TH1F(name.c_str(), title.c_str(), MaxBinBins, 0, MaxBinMax);
427  m_stripMaxBinVAll->GetXaxis()->SetTitle("max bin");
428  m_stripMaxBinVAll->GetYaxis()->SetTitle("count");
430 
431  name = str(format("SVDDQM_StripMaxBinU3"));
432  title = str(format("SVD U-Strip MaxBin for layer 3 sensors"));
433  m_stripMaxBinU3 = new TH1F(name.c_str(), title.c_str(), MaxBinBins, 0, MaxBinMax);
434  m_stripMaxBinU3->GetXaxis()->SetTitle("max bin");
435  m_stripMaxBinU3->GetYaxis()->SetTitle("count");
437  name = str(format("SVDDQM_StripMaxBinV3"));
438  title = str(format("SVD V-Strip MaxBin for layer 3 sensors"));
439  m_stripMaxBinV3 = new TH1F(name.c_str(), title.c_str(), MaxBinBins, 0, MaxBinMax);
440  m_stripMaxBinV3->GetXaxis()->SetTitle("max bin");
441  m_stripMaxBinV3->GetYaxis()->SetTitle("count");
443 
444  name = str(format("SVDDQM_StripMaxBinU6"));
445  title = str(format("SVD U-Strip MaxBin for layer 6 sensors"));
446  m_stripMaxBinU6 = new TH1F(name.c_str(), title.c_str(), MaxBinBins, 0, MaxBinMax);
447  m_stripMaxBinU6->GetXaxis()->SetTitle("max bin");
448  m_stripMaxBinU6->GetYaxis()->SetTitle("count");
450  name = str(format("SVDDQM_StripMaxBinV6"));
451  title = str(format("SVD V-Strip MaxBin for layer 6 sensors"));
452  m_stripMaxBinV6 = new TH1F(name.c_str(), title.c_str(), MaxBinBins, 0, MaxBinMax);
453  m_stripMaxBinV6->GetXaxis()->SetTitle("max bin");
454  m_stripMaxBinV6->GetYaxis()->SetTitle("count");
456 
457  for (int i = 0; i < nSVDSensors; i++) {
458  VxdID id = gTools->getSensorIDFromSVDIndex(i);
459  int iLayer = id.getLayerNumber();
460  int iLadder = id.getLadderNumber();
461  int iSensor = id.getSensorNumber();
462  VxdID sensorID(iLayer, iLadder, iSensor);
463  SVD::SensorInfo SensorInfo = dynamic_cast<const SVD::SensorInfo&>(VXD::GeoCache::get(sensorID));
464  string sensorDescr = str(format("%1%_%2%_%3%") % iLayer % iLadder % iSensor);
465 
466  if (m_additionalPlots) {
467  //----------------------------------------------------------------
468  // Number of fired strips per sensor
469  //----------------------------------------------------------------
470  name = str(format("SVDDQM_%1%_FiredU") % sensorDescr);
471  title = str(format("SVD Sensor %1% Number of Fired U-Strips") % sensorDescr);
472  m_firedU[i] = new TH1F(name.c_str(), title.c_str(), 50, 0, 50);
473  m_firedU[i]->GetXaxis()->SetTitle("# fired strips");
474  m_firedU[i]->GetYaxis()->SetTitle("count");
475  m_histoList->Add(m_firedU[i]);
476  name = str(format("SVDDQM_%1%_FiredV") % sensorDescr);
477  title = str(format("SVD Sensor %1% Number of Fired V-Strips") % sensorDescr);
478  m_firedV[i] = new TH1F(name.c_str(), title.c_str(), 50, 0, 50);
479  m_firedV[i]->GetXaxis()->SetTitle("# fired strips");
480  m_firedV[i]->GetYaxis()->SetTitle("count");
481  m_histoList->Add(m_firedV[i]);
482  //----------------------------------------------------------------
483  // Number of clusters per sensor
484  //----------------------------------------------------------------
485  name = str(format("SVDDQM_%1%_ClustersU") % sensorDescr);
486  title = str(format("SVD Sensor %1% Number of U-Clusters") % sensorDescr);
487  m_clustersU[i] = new TH1F(name.c_str(), title.c_str(), 20, 0, 20);
488  m_clustersU[i]->GetXaxis()->SetTitle("# clusters");
489  m_clustersU[i]->GetYaxis()->SetTitle("count");
490  m_histoList->Add(m_clustersU[i]);
491  name = str(format("SVDDQM_%1%_ClustersV") % sensorDescr);
492  title = str(format("SVD Sensor %1% Number of V-Clusters") % sensorDescr);
493  m_clustersV[i] = new TH1F(name.c_str(), title.c_str(), 20, 0, 20);
494  m_clustersV[i]->GetXaxis()->SetTitle("# clusters");
495  m_clustersV[i]->GetYaxis()->SetTitle("count");
496  m_histoList->Add(m_clustersV[i]);
497  //----------------------------------------------------------------
498  // Charge of strips
499  //----------------------------------------------------------------
500  name = str(format("SVDDQM_%1%_ADCStripU") % sensorDescr);
501  title = str(format("SVD Sensor %1% U-Strip signal in ADC Counts, all 6 APV samples") % sensorDescr);
502  m_stripSignalU[i] = new TH1F(name.c_str(), title.c_str(), 256, -0.5, 255.5);
503  m_stripSignalU[i]->GetXaxis()->SetTitle("signal ADC");
504  m_stripSignalU[i]->GetYaxis()->SetTitle("count");
505  m_histoList->Add(m_stripSignalU[i]);
506  name = str(format("SVDDQM_%1%_ADCStripV") % sensorDescr);
507  title = str(format("SVD Sensor %1% V-Strip signal in ADC Counts, all 6 APV samples") % sensorDescr);
508  m_stripSignalV[i] = new TH1F(name.c_str(), title.c_str(), 256, -0.5, 255.5);
509  m_stripSignalV[i]->GetXaxis()->SetTitle("signal ADC");
510  m_stripSignalV[i]->GetYaxis()->SetTitle("count");
511  m_histoList->Add(m_stripSignalV[i]);
512  }
513 
514  //----------------------------------------------------------------
515  // Charge of clusters
516  //----------------------------------------------------------------
517  name = str(format("SVDDQM_%1%_ClusterChargeU") % sensorDescr);
518  title = str(format("SVD Sensor %1% U-Cluster Charge") % sensorDescr);
519  m_clusterChargeU[i] = new TH1F(name.c_str(), title.c_str(), ChargeBins, 0, ChargeMax);
520  m_clusterChargeU[i]->GetXaxis()->SetTitle("cluster charge [ke-]");
521  m_clusterChargeU[i]->GetYaxis()->SetTitle("count");
522  m_histoList->Add(m_clusterChargeU[i]);
523  name = str(format("SVDDQM_%1%_ClusterChargeV") % sensorDescr);
524  title = str(format("SVD Sensor %1% V-Cluster Charge") % sensorDescr);
525  m_clusterChargeV[i] = new TH1F(name.c_str(), title.c_str(), ChargeBins, 0, ChargeMax);
526  m_clusterChargeV[i]->GetXaxis()->SetTitle("cluster charge [ke-]");
527  m_clusterChargeV[i]->GetYaxis()->SetTitle("count");
528  m_histoList->Add(m_clusterChargeV[i]);
529  //----------------------------------------------------------------
530  // SNR of clusters
531  //----------------------------------------------------------------
532  name = str(format("SVDDQM_%1%_ClusterSNRU") % sensorDescr);
533  title = str(format("SVD Sensor %1% U-Cluster SNR") % sensorDescr);
534  m_clusterSNRU[i] = new TH1F(name.c_str(), title.c_str(), SNRBins, 0, SNRMax);
535  m_clusterSNRU[i]->GetXaxis()->SetTitle("cluster SNR");
536  m_clusterSNRU[i]->GetYaxis()->SetTitle("count");
537  m_histoList->Add(m_clusterSNRU[i]);
538  name = str(format("SVDDQM_%1%_ClusterSNRV") % sensorDescr);
539  title = str(format("SVD Sensor %1% V-Cluster SNR") % sensorDescr);
540  m_clusterSNRV[i] = new TH1F(name.c_str(), title.c_str(), SNRBins, 0, SNRMax);
541  m_clusterSNRV[i]->GetXaxis()->SetTitle("cluster SNR");
542  m_clusterSNRV[i]->GetYaxis()->SetTitle("count");
543  m_histoList->Add(m_clusterSNRV[i]);
544 
545  //----------------------------------------------------------------
546  // Strips Counts
547  //----------------------------------------------------------------
548  name = str(format("SVDDQM_%1%_StripCountU") % sensorDescr);
549  title = str(format("SVD Sensor %1% Integrated Number of ZS5 Fired U-Strip vs Strip Number") % sensorDescr);
550  m_stripCountU[i] = new TH1F(name.c_str(), title.c_str(), 768, -0.5, 767.5);
551  m_stripCountU[i]->GetXaxis()->SetTitle("cellID");
552  m_stripCountU[i]->GetYaxis()->SetTitle("count");
553  m_histoList->Add(m_stripCountU[i]);
554  name = str(format("SVDDQM_%1%_StripCountV") % sensorDescr);
555  title = str(format("SVD Sensor %1% Integrated Number of ZS5 Fired V-Strip vs Strip Number") % sensorDescr);
556  m_stripCountV[i] = new TH1F(name.c_str(), title.c_str(), 768, -0.5, 767.5);
557  m_stripCountV[i]->GetXaxis()->SetTitle("cellID");
558  m_stripCountV[i]->GetYaxis()->SetTitle("count");
559  m_histoList->Add(m_stripCountV[i]);
560  //----------------------------------------------------------------
561  // Strips Counts with online ZS
562  //----------------------------------------------------------------
563  name = str(format("SVDDQM_%1%_OnlineZSStripCountU") % sensorDescr);
564  title = str(format("SVD Sensor %1% Integrated Number of online-ZS Fired U-Strip vs Strip Number") % sensorDescr);
565  m_onlineZSstripCountU[i] = new TH1F(name.c_str(), title.c_str(), 768, -0.5, 767.5);
566  m_onlineZSstripCountU[i]->GetXaxis()->SetTitle("cellID");
567  m_onlineZSstripCountU[i]->GetYaxis()->SetTitle("count");
569  name = str(format("SVDDQM_%1%_OnlineZSStripCountV") % sensorDescr);
570  title = str(format("SVD Sensor %1% Integrated Number of online-ZS Fired V-Strip vs Strip Number") % sensorDescr);
571  m_onlineZSstripCountV[i] = new TH1F(name.c_str(), title.c_str(), 768, -0.5, 767.5);
572  m_onlineZSstripCountV[i]->GetXaxis()->SetTitle("cellID");
573  m_onlineZSstripCountV[i]->GetYaxis()->SetTitle("count");
575 
576  //----------------------------------------------------------------
577  // Strips Counts for 3 samples
578  //----------------------------------------------------------------
579  name = str(format("SVDDQM_%1%_Strip3CountU") % sensorDescr);
580  title = str(format("SVD Sensor %1% Integrated Number of ZS5 Fired U-Strip vs Strip Number for 3 samples") % sensorDescr);
581  m_strip3CountU[i] = new TH1F(name.c_str(), title.c_str(), 768, -0.5, 767.5);
582  m_strip3CountU[i]->GetXaxis()->SetTitle("cellID");
583  m_strip3CountU[i]->GetYaxis()->SetTitle("count");
584  m_histoList->Add(m_strip3CountU[i]);
585  name = str(format("SVDDQM_%1%_Strip3CountV") % sensorDescr);
586  title = str(format("SVD Sensor %1% Integrated Number of ZS5 Fired V-Strip vs Strip Number for 3 samples") % sensorDescr);
587  m_strip3CountV[i] = new TH1F(name.c_str(), title.c_str(), 768, -0.5, 767.5);
588  m_strip3CountV[i]->GetXaxis()->SetTitle("cellID");
589  m_strip3CountV[i]->GetYaxis()->SetTitle("count");
590  m_histoList->Add(m_strip3CountV[i]);
591  //----------------------------------------------------------------
592  // Strips Counts with online ZS for 3 samples
593  //----------------------------------------------------------------
594  name = str(format("SVDDQM_%1%_OnlineZSStrip3CountU") % sensorDescr);
595  title = str(format("SVD Sensor %1% Integrated Number of online-ZS Fired U-Strip vs Strip Number for 3 samples") % sensorDescr);
596  m_onlineZSstrip3CountU[i] = new TH1F(name.c_str(), title.c_str(), 768, -0.5, 767.5);
597  m_onlineZSstrip3CountU[i]->GetXaxis()->SetTitle("cellID");
598  m_onlineZSstrip3CountU[i]->GetYaxis()->SetTitle("count");
600  name = str(format("SVDDQM_%1%_OnlineZSStrip3CountV") % sensorDescr);
601  title = str(format("SVD Sensor %1% Integrated Number of online-ZS Fired V-Strip vs Strip Number for 3 samples") % sensorDescr);
602  m_onlineZSstrip3CountV[i] = new TH1F(name.c_str(), title.c_str(), 768, -0.5, 767.5);
603  m_onlineZSstrip3CountV[i]->GetXaxis()->SetTitle("cellID");
604  m_onlineZSstrip3CountV[i]->GetYaxis()->SetTitle("count");
606 
607 
608  //----------------------------------------------------------------
609  // Strips Counts for 6 samples
610  //----------------------------------------------------------------
611  name = str(format("SVDDQM_%1%_Strip6CountU") % sensorDescr);
612  title = str(format("SVD Sensor %1% Integrated Number of ZS5 Fired U-Strip vs Strip Number for 6 samples") % sensorDescr);
613  m_strip6CountU[i] = new TH1F(name.c_str(), title.c_str(), 768, -0.5, 767.5);
614  m_strip6CountU[i]->GetXaxis()->SetTitle("cellID");
615  m_strip6CountU[i]->GetYaxis()->SetTitle("count");
616  m_histoList->Add(m_strip6CountU[i]);
617  name = str(format("SVDDQM_%1%_Strip6CountV") % sensorDescr);
618  title = str(format("SVD Sensor %1% Integrated Number of ZS5 Fired V-Strip vs Strip Number for 6 samples") % sensorDescr);
619  m_strip6CountV[i] = new TH1F(name.c_str(), title.c_str(), 768, -0.5, 767.5);
620  m_strip6CountV[i]->GetXaxis()->SetTitle("cellID");
621  m_strip6CountV[i]->GetYaxis()->SetTitle("count");
622  m_histoList->Add(m_strip6CountV[i]);
623  //----------------------------------------------------------------
624  // Strips Counts with online ZS for 6 samples
625  //----------------------------------------------------------------
626  name = str(format("SVDDQM_%1%_OnlineZSStrip6CountU") % sensorDescr);
627  title = str(format("SVD Sensor %1% Integrated Number of online-ZS Fired U-Strip vs Strip Number for 6 samples") % sensorDescr);
628  m_onlineZSstrip6CountU[i] = new TH1F(name.c_str(), title.c_str(), 768, -0.5, 767.5);
629  m_onlineZSstrip6CountU[i]->GetXaxis()->SetTitle("cellID");
630  m_onlineZSstrip6CountU[i]->GetYaxis()->SetTitle("count");
632  name = str(format("SVDDQM_%1%_OnlineZSStrip6CountV") % sensorDescr);
633  title = str(format("SVD Sensor %1% Integrated Number of online-ZS Fired V-Strip vs Strip Number for 6 samples") % sensorDescr);
634  m_onlineZSstrip6CountV[i] = new TH1F(name.c_str(), title.c_str(), 768, -0.5, 767.5);
635  m_onlineZSstrip6CountV[i]->GetXaxis()->SetTitle("cellID");
636  m_onlineZSstrip6CountV[i]->GetYaxis()->SetTitle("count");
638 
639 
640  //----------------------------------------------------------------
641  // Strips Counts for cluster time group id = 0
642  //----------------------------------------------------------------
643  name = str(format("SVDDQM_%1%_StripCountGroupId0U") % sensorDescr);
644  title = str(format("SVD Sensor %1% Integrated NumberFired U-Strip for group Id = 0 vs Strip Number") % sensorDescr);
645  m_stripCountGroupId0U[i] = new TH1F(name.c_str(), title.c_str(), 768, -0.5, 767.5);
646  m_stripCountGroupId0U[i]->GetXaxis()->SetTitle("cellID");
647  m_stripCountGroupId0U[i]->GetYaxis()->SetTitle("count");
649  name = str(format("SVDDQM_%1%_StripCountGroupId0V") % sensorDescr);
650  title = str(format("SVD Sensor %1% Integrated Number of Fired V-Strip for group Id = 0 vs Strip Number") % sensorDescr);
651  m_stripCountGroupId0V[i] = new TH1F(name.c_str(), title.c_str(), 768, -0.5, 767.5);
652  m_stripCountGroupId0V[i]->GetXaxis()->SetTitle("cellID");
653  m_stripCountGroupId0V[i]->GetYaxis()->SetTitle("count");
655 
656  //----------------------------------------------------------------
657  // Cluster size distribution
658  //----------------------------------------------------------------
659  name = str(format("SVDDQM_%1%_ClusterSizeU") % sensorDescr);
660  title = str(format("SVD Sensor %1% U-Cluster Size") % sensorDescr);
661  m_clusterSizeU[i] = new TH1F(name.c_str(), title.c_str(), 9, 1, 10);
662  m_clusterSizeU[i]->GetXaxis()->SetTitle("cluster size");
663  m_clusterSizeU[i]->GetYaxis()->SetTitle("count");
664  m_histoList->Add(m_clusterSizeU[i]);
665  name = str(format("SVDDQM_%1%_ClusterSizeV") % sensorDescr);
666  title = str(format("SVD Sensor %1% V-Cluster Size") % sensorDescr);
667  m_clusterSizeV[i] = new TH1F(name.c_str(), title.c_str(), 9, 1, 10);
668  m_clusterSizeV[i]->GetXaxis()->SetTitle("cluster size");
669  m_clusterSizeV[i]->GetYaxis()->SetTitle("count");
670  m_histoList->Add(m_clusterSizeV[i]);
671  //----------------------------------------------------------------
672  // Cluster time distribution
673  //----------------------------------------------------------------
674  name = str(format("SVDDQM_%1%_ClusterTimeU") % sensorDescr);
675  Title = Form("SVD Sensor %s U-Cluster Time %s", sensorDescr.c_str(), refFrame.Data());
676  m_clusterTimeU[i] = new TH1F(name.c_str(), Title.Data(), TimeBins, TimeMin, TimeMax);
677  m_clusterTimeU[i]->GetXaxis()->SetTitle("cluster time (ns)");
678  m_clusterTimeU[i]->GetYaxis()->SetTitle("count");
679  m_histoList->Add(m_clusterTimeU[i]);
680  name = str(format("SVDDQM_%1%_ClusterTimeV") % sensorDescr);
681  Title = Form("SVD Sensor %s V-Cluster Time %s", sensorDescr.c_str(), refFrame.Data());
682  m_clusterTimeV[i] = new TH1F(name.c_str(), Title.Data(), TimeBins, TimeMin, TimeMax);
683  m_clusterTimeV[i]->GetXaxis()->SetTitle("cluster time (ns)");
684  m_clusterTimeV[i]->GetYaxis()->SetTitle("count");
685  m_histoList->Add(m_clusterTimeV[i]);
686  }
687 
688  for (int i = 0; i < nSVDChips; i++) {
689  VxdID id = gTools->getChipIDFromSVDIndex(i);
690  int iLayer = id.getLayerNumber();
691  int iLadder = id.getLadderNumber();
692  int iSensor = id.getSensorNumber();
693  int iChip = gTools->getSVDChipNumber(id);
694  int IsU = gTools->isSVDSideU(id);
695  TString AxisTicks = Form("%i_%i_%i_u%i", iLayer, iLadder, iSensor, iChip);
696  if (!IsU)
697  AxisTicks = Form("%i_%i_%i_v%i", iLayer, iLadder, iSensor, iChip);
698  m_hitMapCountsChip->GetXaxis()->SetBinLabel(i + 1, AxisTicks.Data());
699  m_hitMapClCountsChip->GetXaxis()->SetBinLabel(i + 1, AxisTicks.Data());
700  }
701 
702 
703 
704  //----------------------------------------------------------------
705  // Additional histograms for out of ExpressReco
706  //----------------------------------------------------------------
707 
708  if (m_ShowAllHistos == 1) {
709  TDirectory* dirShowAll = nullptr;
710  dirShowAll = oldDir->mkdir("SVDDQMAll");
711  dirShowAll->cd();
712 
713  m_hitMapU = new TH2F*[nSVDSensors];
714  m_hitMapV = new TH2F*[nSVDSensors];
715  m_hitMapUCl = new TH1F*[nSVDSensors];
716  m_hitMapVCl = new TH1F*[nSVDSensors];
717  for (int i = 0; i < nSVDSensors; i++) {
718  VxdID id = gTools->getSensorIDFromSVDIndex(i);
719  int iLayer = id.getLayerNumber();
720  int iLadder = id.getLadderNumber();
721  int iSensor = id.getSensorNumber();
722  VxdID sensorID(iLayer, iLadder, iSensor);
723  SVD::SensorInfo SensorInfo = dynamic_cast<const SVD::SensorInfo&>(VXD::GeoCache::get(sensorID));
724  string sensorDescr = str(format("%1%_%2%_%3%") % iLayer % iLadder % iSensor);
725  //----------------------------------------------------------------
726  // Hitmaps: Number of strips by coordinate
727  //----------------------------------------------------------------
728  name = str(format("SVD_%1%_StripHitmapU") % sensorDescr);
729  title = str(format("SVD Sensor %1% Strip Hitmap in U") % sensorDescr);
730  int nStrips = SensorInfo.getUCells();
731  m_hitMapU[i] = new TH2F(name.c_str(), title.c_str(), nStrips, 0, nStrips, SVDShaperDigit::c_nAPVSamples, 0,
733  m_hitMapU[i]->GetXaxis()->SetTitle("u position [pitch units]");
734  m_hitMapU[i]->GetYaxis()->SetTitle("timebin [time units]");
735  m_hitMapU[i]->GetZaxis()->SetTitle("hits");
736  m_histoList->Add(m_hitMapU[i]);
737  name = str(format("SVD_%1%_StripHitmapV") % sensorDescr);
738  title = str(format("SVD Sensor %1% Strip Hitmap in V") % sensorDescr);
739  nStrips = SensorInfo.getVCells();
740  m_hitMapV[i] = new TH2F(name.c_str(), title.c_str(), nStrips, 0, nStrips, SVDShaperDigit::c_nAPVSamples, 0,
742  m_hitMapV[i]->GetXaxis()->SetTitle("v position [pitch units]");
743  m_hitMapV[i]->GetYaxis()->SetTitle("timebin [time units]");
744  m_hitMapV[i]->GetZaxis()->SetTitle("hits");
745  m_histoList->Add(m_hitMapV[i]);
746  //----------------------------------------------------------------
747  // Hitmaps: Number of clusters by coordinate
748  //----------------------------------------------------------------
749  name = str(format("SVD_%1%_HitmapClstU") % sensorDescr);
750  title = str(format("SVD Sensor %1% Hitmap Clusters in U") % sensorDescr);
751  nStrips = SensorInfo.getUCells();
752  m_hitMapUCl[i] = new TH1F(name.c_str(), title.c_str(), nStrips, 0, nStrips);
753  m_hitMapUCl[i]->GetXaxis()->SetTitle("u position [pitch units]");
754  m_hitMapUCl[i]->GetYaxis()->SetTitle("hits");
755  m_histoList->Add(m_hitMapUCl[i]);
756  name = str(format("SVD_%1%_HitmapClstV") % sensorDescr);
757  title = str(format("SVD Sensor %1% Hitmap Clusters in V") % sensorDescr);
758  nStrips = SensorInfo.getVCells();
759  m_hitMapVCl[i] = new TH1F(name.c_str(), title.c_str(), nStrips, 0, nStrips);
760  m_hitMapVCl[i]->GetXaxis()->SetTitle("v position [pitch units]");
761  m_hitMapVCl[i]->GetYaxis()->SetTitle("hits");
762  m_histoList->Add(m_hitMapVCl[i]);
763  }
764  }
765 
766  oldDir->cd();
767 }
768 
769 
771 {
772  // Register histograms (calls back defineHisto)
773  REG_HISTOGRAM
774 
775  auto gTools = VXD::GeoCache::getInstance().getGeoTools();
776  if (gTools->getNumberOfSVDLayers() != 0) {
777  //Register collections
781 
782  storeSVDClusters.isOptional();
783  storeSVDShaperDigits.isOptional();
784  m_svdEventInfo.isOptional();
785  storeNoZSSVDShaperDigits.isOptional();
786 
787  //Store names to speed up creation later
788  m_storeSVDShaperDigitsName = storeSVDShaperDigits.getName();
789  }
790 }
791 
793 {
794  auto gTools = VXD::GeoCache::getInstance().getGeoTools();
795  if (gTools->getNumberOfSVDLayers() == 0) return;
796 
797 
798  StoreObjPtr<EventMetaData> evtMetaData;
799  m_expNumber = evtMetaData->getExperiment();
800  m_runNumber = evtMetaData->getRun();
801 
802  // Add experiment and run number to the title of selected histograms (CR shifter plots)
803  TString runID = TString::Format(" ~ Exp%d Run%d", m_expNumber, m_runNumber);
804  TObject* obj;
805  TIter nextH(m_histoList);
806  while ((obj = nextH()))
807  if (obj->InheritsFrom("TH1")) {
808  if (((TString)obj->GetTitle()).Contains(runID) == false) {
809  ((TH1F*)obj)->SetTitle(obj->GetTitle() + runID);
810  }
811  ((TH1F*)obj)->Reset();
812  }
813 }
814 
816 {
817 
818 
819  //check HLT decision and increase number of events only if the event has been accepted
820 
822  const bool eventAccepted = FinalTriggerDecisionCalculator::getFinalTriggerDecision(*m_resultStoreObjectPointer);
823  if (!eventAccepted) return;
824  }
825  m_nEvents->Fill(0);
826 
827  int nSamples = 0;
828  if (m_svdEventInfo.isValid())
829  nSamples = m_svdEventInfo->getNSamples();
830  else
831  return;
832 
833  auto gTools = VXD::GeoCache::getInstance().getGeoTools();
834  if (gTools->getNumberOfSVDLayers() == 0) return;
835 
836 
837  const StoreArray<SVDShaperDigit> storeNoZSSVDShaperDigits(m_storeNoZSSVDShaperDigitsName);
838  const StoreArray<SVDShaperDigit> storeSVDShaperDigits(m_storeSVDShaperDigitsName);
839  const StoreArray<SVDCluster> storeSVDClusters(m_storeSVDClustersName);
840 
841  if (!storeSVDShaperDigits.isValid() || !storeSVDShaperDigits.getEntries()) {
842  return;
843  }
844 
845  int firstSVDLayer = gTools->getFirstSVDLayer();
846  int lastSVDLayer = gTools->getLastSVDLayer();
847  int nSVDSensors = gTools->getNumberOfSVDSensors();
848 
849  // Fired strips offline ZS
850  vector< set<int> > uStrips(nSVDSensors); // sets to eliminate multiple samples per strip
851  vector< set<int> > vStrips(nSVDSensors);
852  for (const SVDShaperDigit& digitIn : storeSVDShaperDigits) {
853  int iLayer = digitIn.getSensorID().getLayerNumber();
854  if ((iLayer < firstSVDLayer) || (iLayer > lastSVDLayer)) continue;
855  int iLadder = digitIn.getSensorID().getLadderNumber();
856  int iSensor = digitIn.getSensorID().getSensorNumber();
857  VxdID sensorID(iLayer, iLadder, iSensor);
858  int index = gTools->getSVDSensorIndex(sensorID);
859  SVD::SensorInfo SensorInfo = dynamic_cast<const SVD::SensorInfo&>(VXD::GeoCache::get(sensorID));
860  if (digitIn.isUStrip()) {
861 
862  //fill strip count first
863  if (m_stripCountU[index] != nullptr) m_stripCountU[index]->Fill(digitIn.getCellID());
864 
865  if (nSamples == 3) {
866  if (m_strip3CountU[index] != nullptr) m_strip3CountU[index]->Fill(digitIn.getCellID());
867  } else {
868  if (m_strip6CountU[index] != nullptr) m_strip6CountU[index]->Fill(digitIn.getCellID());
869  }
870 
871  //fill max bin
872  if (m_stripMaxBinUAll != nullptr) m_stripMaxBinUAll->Fill(digitIn.getMaxTimeBin());
873  if (iLayer == 3)
874  if (m_stripMaxBinU3 != nullptr) m_stripMaxBinU3->Fill(digitIn.getMaxTimeBin());
875  if (iLayer == 6)
876  if (m_stripMaxBinU6 != nullptr) m_stripMaxBinU6->Fill(digitIn.getMaxTimeBin());
877 
878  uStrips.at(index).insert(digitIn.getCellID());
879  int Chip = (int)(digitIn.getCellID() / gTools->getSVDChannelsPerChip()) + 1;
880  int indexChip = gTools->getSVDChipIndex(sensorID, kTRUE, Chip);
881  // 6-to-1 relation weights are equal to digit signals, modulo rounding error
882  SVDShaperDigit::APVFloatSamples samples = digitIn.getSamples();
883  int isSample = 0;
884  for (size_t i = 0; i < SVDShaperDigit::c_nAPVSamples; ++i) {
885  if (m_additionalPlots)
886  if (m_stripSignalU[index] != nullptr) m_stripSignalU[index]->Fill(samples[i]);
887  if (samples[i] > m_CutSVDCharge) {
888  isSample = 1;
889  if (m_ShowAllHistos == 1) {
890  if (m_hitMapU[index] != nullptr) m_hitMapU[index]->Fill(digitIn.getCellID(), i);
891  }
892  }
893  }
894  if (isSample) {
895  if (m_hitMapCountsU != nullptr) m_hitMapCountsU->Fill(index);
896  if (m_hitMapCountsChip != nullptr) m_hitMapCountsChip->Fill(indexChip);
897  }
898  } else {
899  //fill strip count first
900  if (m_stripCountV[index] != nullptr) m_stripCountV[index]->Fill(digitIn.getCellID());
901 
902  if (nSamples == 3) {
903  if (m_strip3CountV[index] != nullptr) m_strip3CountV[index]->Fill(digitIn.getCellID());
904  } else {
905  if (m_strip6CountV[index] != nullptr) m_strip6CountV[index]->Fill(digitIn.getCellID());
906  }
907 
908  //fill max bin
909  if (m_stripMaxBinVAll != nullptr) m_stripMaxBinVAll->Fill(digitIn.getMaxTimeBin());
910 
911  if (iLayer == 3)
912  if (m_stripMaxBinV3 != nullptr) m_stripMaxBinV3->Fill(digitIn.getMaxTimeBin());
913  if (iLayer == 6)
914  if (m_stripMaxBinV6 != nullptr) m_stripMaxBinV6->Fill(digitIn.getMaxTimeBin());
915 
916  vStrips.at(index).insert(digitIn.getCellID());
917  int Chip = (int)(digitIn.getCellID() / gTools->getSVDChannelsPerChip()) + 1;
918  int indexChip = gTools->getSVDChipIndex(sensorID, kFALSE, Chip);
919  // 6-to-1 relation weights are equal to digit signals, modulo rounding error
920  SVDShaperDigit::APVFloatSamples samples = digitIn.getSamples();
921  int isSample = 0;
922  for (size_t i = 0; i < SVDShaperDigit::c_nAPVSamples; ++i) {
923  if (m_additionalPlots)
924  if (m_stripSignalV[index] != nullptr) m_stripSignalV[index]->Fill(samples[i]);
925  if (samples[i] > m_CutSVDCharge) {
926  isSample = 1;
927  if (m_ShowAllHistos == 1) {
928  if (m_hitMapV[index] != nullptr) m_hitMapV[index]->Fill(digitIn.getCellID(), i);
929  }
930  }
931  }
932  if (isSample) {
933  if (m_hitMapCountsV != nullptr) m_hitMapCountsV->Fill(index);
934  if (m_hitMapCountsChip != nullptr) m_hitMapCountsChip->Fill(indexChip);
935  }
936  }
937  }
938  if (m_additionalPlots) {
939  for (int i = 0; i < nSVDSensors; i++) {
940  if ((m_firedU[i] != nullptr) && (uStrips[i].size() > 0))
941  m_firedU[i]->Fill(uStrips[i].size());
942  if ((m_firedV[i] != nullptr) && (vStrips[i].size() > 0))
943  m_firedV[i]->Fill(vStrips[i].size());
944  }
945  }
946 
947  // Fired strips ONLINE ZS
948  if (storeNoZSSVDShaperDigits.isValid())
949  for (const SVDShaperDigit& digitIn : storeNoZSSVDShaperDigits) {
950  int iLayer = digitIn.getSensorID().getLayerNumber();
951  if ((iLayer < firstSVDLayer) || (iLayer > lastSVDLayer)) continue;
952  int iLadder = digitIn.getSensorID().getLadderNumber();
953  int iSensor = digitIn.getSensorID().getSensorNumber();
954  VxdID sensorID(iLayer, iLadder, iSensor);
955  int index = gTools->getSVDSensorIndex(sensorID);
956  SVD::SensorInfo SensorInfo = dynamic_cast<const SVD::SensorInfo&>(VXD::GeoCache::get(sensorID));
957  if (digitIn.isUStrip()) {
958  if (m_onlineZSstripCountU[index] != nullptr) m_onlineZSstripCountU[index]->Fill(digitIn.getCellID());
959  if (nSamples == 3) {
960  if (m_onlineZSstrip3CountU[index] != nullptr) m_onlineZSstrip3CountU[index]->Fill(digitIn.getCellID());
961  } else {
962  if (m_onlineZSstrip6CountU[index] != nullptr) m_onlineZSstrip6CountU[index]->Fill(digitIn.getCellID());
963  }
964  } else {
965  if (m_onlineZSstripCountV[index] != nullptr) m_onlineZSstripCountV[index]->Fill(digitIn.getCellID());
966  if (nSamples == 3) {
967  if (m_onlineZSstrip3CountV[index] != nullptr) m_onlineZSstrip3CountV[index]->Fill(digitIn.getCellID());
968  } else {
969  if (m_onlineZSstrip6CountV[index] != nullptr) m_onlineZSstrip6CountV[index]->Fill(digitIn.getCellID());
970  }
971  }
972  }
973 
974  vector< set<int> > countsU(nSVDSensors); // sets to eliminate multiple samples per strip
975  vector< set<int> > countsV(nSVDSensors);
976  // Hitmaps, Charge, Seed, Size, Time, ...
977  for (const SVDCluster& cluster : storeSVDClusters) {
978  if (cluster.getCharge() < m_CutSVDClusterCharge) continue;
979  int iLayer = cluster.getSensorID().getLayerNumber();
980  if ((iLayer < firstSVDLayer) || (iLayer > lastSVDLayer)) continue;
981  int iLadder = cluster.getSensorID().getLadderNumber();
982  int iSensor = cluster.getSensorID().getSensorNumber();
983  VxdID sensorID(iLayer, iLadder, iSensor);
984  int index = gTools->getSVDSensorIndex(sensorID);
985  SVD::SensorInfo SensorInfo = dynamic_cast<const SVD::SensorInfo&>(VXD::GeoCache::get(sensorID));
986 
987  float time = cluster.getClsTime();
988  if (m_desynchSVDTime && m_svdEventInfo.isValid())
989  time = time - m_svdEventInfo->getSVD2FTSWTimeShift(cluster.getFirstFrame());
990 
991  vector<int> vec = cluster.getTimeGroupId();
992  auto minElement = min_element(vec.begin(), vec.end());
993  int groupId = -1;
994  if (vec.size() > 0) {
995  groupId = *minElement;
996 
997  if (iLayer == 3) {
998  if (m_cluster3TimeGroupId != nullptr) m_cluster3TimeGroupId->Fill(time, groupId);
999  } else {
1000  if (m_cluster6TimeGroupId != nullptr) m_cluster6TimeGroupId->Fill(time, groupId);
1001  }
1002  }
1003 
1004  if (cluster.isUCluster()) {
1005  countsU.at(index).insert(SensorInfo.getUCellID(cluster.getPosition()));
1006  int indexChip = gTools->getSVDChipIndex(sensorID, kTRUE,
1007  (int)(SensorInfo.getUCellID(cluster.getPosition()) / gTools->getSVDChannelsPerChip()) + 1);
1008  if (m_hitMapClCountsU != nullptr) m_hitMapClCountsU->Fill(index);
1009  if (m_hitMapClCountsChip != nullptr) m_hitMapClCountsChip->Fill(indexChip);
1010  if (m_clusterChargeU[index] != nullptr) m_clusterChargeU[index]->Fill(cluster.getCharge() / 1000.0); // in kelectrons
1011  if (m_clusterSNRU[index] != nullptr) m_clusterSNRU[index]->Fill(cluster.getSNR());
1012  if (m_clusterChargeUAll != nullptr) m_clusterChargeUAll->Fill(cluster.getCharge() / 1000.0); // in kelectrons
1013  if (m_clusterSNRUAll != nullptr) m_clusterSNRUAll->Fill(cluster.getSNR());
1014  if (m_clusterSizeU[index] != nullptr) m_clusterSizeU[index]->Fill(cluster.getSize());
1015  if (m_clusterTimeU[index] != nullptr) m_clusterTimeU[index]->Fill(time);
1016  if (m_clusterTimeUAll != nullptr) m_clusterTimeUAll->Fill(time);
1017  if (iLayer == 3) {
1018  if (m_clusterChargeU3 != nullptr) m_clusterChargeU3->Fill(cluster.getCharge() / 1000.0); // in kelectrons
1019  if (m_clusterSNRU3 != nullptr) m_clusterSNRU3->Fill(cluster.getSNR());
1020  if (m_clusterTimeU3 != nullptr) m_clusterTimeU3->Fill(time);
1021  if (nSamples == 3) {
1022  if (m_cluster3TimeU3 != nullptr) m_cluster3TimeU3->Fill(time);
1023  } else {
1024  if (m_cluster6TimeU3 != nullptr) m_cluster6TimeU3->Fill(time);
1025  }
1026  } else {
1027  if (m_clusterChargeU456 != nullptr) m_clusterChargeU456->Fill(cluster.getCharge() / 1000.0); // in kelectrons
1028  if (m_clusterSNRU456 != nullptr) m_clusterSNRU456->Fill(cluster.getSNR());
1029  if (m_clusterTimeU456 != nullptr) m_clusterTimeU456->Fill(time);
1030  if (nSamples == 3) {
1031  if (m_cluster3TimeU456 != nullptr) m_cluster3TimeU456->Fill(time);
1032  } else {
1033  if (m_cluster6TimeU456 != nullptr) m_cluster6TimeU456->Fill(time);
1034  }
1035  }
1036 
1037  if (m_ShowAllHistos == 1)
1038  if (m_hitMapUCl[index] != nullptr) m_hitMapUCl[index]->Fill(SensorInfo.getUCellID(cluster.getPosition()));
1039 
1040  // groupId for U side
1041  if (groupId == 0) {
1042  for (const SVDShaperDigit& digitIn : cluster.getRelationsTo<SVDShaperDigit>(m_storeSVDShaperDigitsName)) {
1043  if (m_stripCountGroupId0U != nullptr) m_stripCountGroupId0U[index]->Fill(digitIn.getCellID());
1044  }
1045  }
1046  } else {
1047  countsV.at(index).insert(SensorInfo.getVCellID(cluster.getPosition()));
1048  int indexChip = gTools->getSVDChipIndex(sensorID, kFALSE,
1049  (int)(SensorInfo.getVCellID(cluster.getPosition()) / gTools->getSVDChannelsPerChip()) + 1);
1050  if (m_hitMapClCountsV != nullptr) m_hitMapClCountsV->Fill(index);
1051  if (m_hitMapClCountsChip != nullptr) m_hitMapClCountsChip->Fill(indexChip);
1052  if (m_clusterChargeV[index] != nullptr) m_clusterChargeV[index]->Fill(cluster.getCharge() / 1000.0); // in kelectrons
1053  if (m_clusterSNRV[index] != nullptr) m_clusterSNRV[index]->Fill(cluster.getSNR());
1054  if (m_clusterChargeVAll != nullptr) m_clusterChargeVAll->Fill(cluster.getCharge() / 1000.0); // in kelectrons
1055  if (m_clusterSNRVAll != nullptr) m_clusterSNRVAll->Fill(cluster.getSNR());
1056  if (m_clusterSizeV[index] != nullptr) m_clusterSizeV[index]->Fill(cluster.getSize());
1057  if (m_clusterTimeV[index] != nullptr) m_clusterTimeV[index]->Fill(time);
1058  if (m_clusterTimeVAll != nullptr) m_clusterTimeVAll->Fill(time);
1059  if (iLayer == 3) {
1060  if (m_clusterChargeV3 != nullptr) m_clusterChargeV3->Fill(cluster.getCharge() / 1000.0); // in kelectrons
1061  if (m_clusterSNRV3 != nullptr) m_clusterSNRV3->Fill(cluster.getSNR());
1062  if (m_clusterTimeV3 != nullptr) m_clusterTimeV3->Fill(time);
1063  if (nSamples == 3) {
1064  if (m_cluster3TimeV3 != nullptr) m_cluster3TimeV3->Fill(time);
1065  } else {
1066  if (m_cluster6TimeV3 != nullptr) m_cluster6TimeV3->Fill(time);
1067  }
1068  } else {
1069  if (m_clusterChargeV456 != nullptr) m_clusterChargeV456->Fill(cluster.getCharge() / 1000.0); // in kelectrons
1070  if (m_clusterSNRV456 != nullptr) m_clusterSNRV456->Fill(cluster.getSNR());
1071  if (m_clusterTimeV456 != nullptr) m_clusterTimeV456->Fill(time);
1072  if (nSamples == 3) {
1073  if (m_cluster3TimeV456 != nullptr) m_cluster3TimeV456->Fill(time);
1074  } else {
1075  if (m_cluster6TimeV456 != nullptr) m_cluster6TimeV456->Fill(time);
1076  }
1077  }
1078  if (m_ShowAllHistos == 1)
1079  if (m_hitMapVCl[index] != nullptr) m_hitMapVCl[index]->Fill(SensorInfo.getVCellID(cluster.getPosition()));
1080 
1081  // groupId for V side
1082  if (groupId == 0) {
1083  for (const SVDShaperDigit& digitIn : cluster.getRelationsTo<SVDShaperDigit>(m_storeSVDShaperDigitsName)) {
1084  if (m_stripCountGroupId0V != nullptr) m_stripCountGroupId0V[index]->Fill(digitIn.getCellID());
1085  }
1086  }
1087  }
1088  }
1089  if (m_additionalPlots) {
1090  for (int i = 0; i < nSVDSensors; i++) {
1091  if ((m_clustersU[i] != nullptr) && (countsU[i].size() > 0))
1092  m_clustersU[i]->Fill(countsU[i].size());
1093  if ((m_clustersV[i] != nullptr) && (countsV[i].size() > 0))
1094  m_clustersV[i]->Fill(countsV[i].size());
1095  }
1096  }
1097 }
1098 
1099 
1101 {
1102 
1103  // m_histoList->Delete();
1104  delete m_histoList;
1105 
1106 }
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.
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()....
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.
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
std::string m_storeSVDShaperDigitsName
SVDShaperDigits StoreArray name.
TH1F * m_cluster6TimeU3
u Time of clusters for layer 3 sensors for 6 samples
TH2F * m_cluster6TimeGroupId
time group id for 6 samples
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.
TH2F * m_cluster3TimeGroupId
time group id for 3 samples
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
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-
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
bool isOptional(const std::string &name="")
Tell the DataStore about an optional input.
const std::string & getName() const
Return name under which the object is saved in the DataStore.
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
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:147
static const SensorInfoBase & get(Belle2::VxdID id)
Return a reference to the SensorInfo of a given SensorID.
Definition: GeoCache.h:139
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.