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