Belle II Software  release-08-01-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 U/V sensors
401  //----------------------------------------------------------------
402  Name = "SVDDQM_ClusterTimeGroupIdU";
403  Title = Form("SVD cluster Time Group Id %s vs cluster time for U/P Side", refFrame.Data());
404  m_clusterTimeGroupIdU = new TH2F(Name.Data(), Title.Data(), TimeBins / 2, TimeMin, TimeMax, GroupIdBins, GroupIdMin, GroupIdMax);
405  m_clusterTimeGroupIdU->GetXaxis()->SetTitle("cluster time (ns)");
406  m_clusterTimeGroupIdU->GetYaxis()->SetTitle("cluster group id");
408  Name = "SVDDQM_ClusterTimeGroupIdV";
409  Title = Form("SVD cluster Time Group Id %s vs cluster time for V/N Side", refFrame.Data());
410  m_clusterTimeGroupIdV = new TH2F(Name.Data(), Title.Data(), TimeBins / 2, TimeMin, TimeMax, GroupIdBins, GroupIdMin, GroupIdMax);
411  m_clusterTimeGroupIdV->GetXaxis()->SetTitle("cluster time (ns)");
412  m_clusterTimeGroupIdV->GetYaxis()->SetTitle("cluster group id");
414 
415  //----------------------------------------------------------------
416  // Cluster time group Id vs cluster time for U/V sensors for coarse and fine trigger
417  //----------------------------------------------------------------
418  Name = "SVDDQM_cluster6TimeGroupIdU";
419  Title = Form("SVD cluster Time Group Id %s vs cluster time for U/P Side for coarse trigger", refFrame.Data());
420  m_clusterTime6GroupIdU = new TH2F(Name.Data(), Title.Data(), TimeBins / 2, TimeMin, TimeMax, GroupIdBins, GroupIdMin, GroupIdMax);
421  m_clusterTime6GroupIdU->GetXaxis()->SetTitle("cluster time (ns)");
422  m_clusterTime6GroupIdU->GetYaxis()->SetTitle("cluster group id");
424  Name = "SVDDQM_cluster6TimeGroupIdV";
425  Title = Form("SVD cluster Time Group Id %s vs cluster time for V/N Side for coarse trigger", refFrame.Data());
426  m_clusterTime6GroupIdV = new TH2F(Name.Data(), Title.Data(), TimeBins / 2, TimeMin, TimeMax, GroupIdBins, GroupIdMin, GroupIdMax);
427  m_clusterTime6GroupIdV->GetXaxis()->SetTitle("cluster time (ns)");
428  m_clusterTime6GroupIdV->GetYaxis()->SetTitle("cluster group id");
430 
431  Name = "SVDDQM_cluster3TimeGroupIdU";
432  Title = Form("SVD cluster Time Group Id %s vs cluster time for U/P Side for fine trigger", refFrame.Data());
433  m_clusterTime3GroupIdU = new TH2F(Name.Data(), Title.Data(), TimeBins / 2, TimeMin, TimeMax, GroupIdBins, GroupIdMin, GroupIdMax);
434  m_clusterTime3GroupIdU->GetXaxis()->SetTitle("cluster time (ns)");
435  m_clusterTime3GroupIdU->GetYaxis()->SetTitle("cluster group id");
437  Name = "SVDDQM_cluster3TimeGroupIdV";
438  Title = Form("SVD cluster Time Group Id %s vs cluster time for V/N Side for fine trigger", refFrame.Data());
439  m_clusterTime3GroupIdV = new TH2F(Name.Data(), Title.Data(), TimeBins / 2, TimeMin, TimeMax, GroupIdBins, GroupIdMin, GroupIdMax);
440  m_clusterTime3GroupIdV->GetXaxis()->SetTitle("cluster time (ns)");
441  m_clusterTime3GroupIdV->GetYaxis()->SetTitle("cluster group id");
443 
444  //----------------------------------------------------------------
445  // MaxBin of strips for all sensors (offline ZS)
446  //----------------------------------------------------------------
447  name = str(format("SVDDQM_StripMaxBinUAll"));
448  title = str(format("SVD U-Strip MaxBin for all sensors"));
449  m_stripMaxBinUAll = new TH1F(name.c_str(), title.c_str(), MaxBinBins, 0, MaxBinMax);
450  m_stripMaxBinUAll->GetXaxis()->SetTitle("max bin");
451  m_stripMaxBinUAll->GetYaxis()->SetTitle("count");
453  name = str(format("SVDDQM_StripMaxBinVAll"));
454  title = str(format("SVD V-Strip MaxBin for all sensors"));
455  m_stripMaxBinVAll = new TH1F(name.c_str(), title.c_str(), MaxBinBins, 0, MaxBinMax);
456  m_stripMaxBinVAll->GetXaxis()->SetTitle("max bin");
457  m_stripMaxBinVAll->GetYaxis()->SetTitle("count");
459 
460  name = str(format("SVDDQM_StripMaxBinU3"));
461  title = str(format("SVD U-Strip MaxBin for layer 3 sensors"));
462  m_stripMaxBinU3 = new TH1F(name.c_str(), title.c_str(), MaxBinBins, 0, MaxBinMax);
463  m_stripMaxBinU3->GetXaxis()->SetTitle("max bin");
464  m_stripMaxBinU3->GetYaxis()->SetTitle("count");
466  name = str(format("SVDDQM_StripMaxBinV3"));
467  title = str(format("SVD V-Strip MaxBin for layer 3 sensors"));
468  m_stripMaxBinV3 = new TH1F(name.c_str(), title.c_str(), MaxBinBins, 0, MaxBinMax);
469  m_stripMaxBinV3->GetXaxis()->SetTitle("max bin");
470  m_stripMaxBinV3->GetYaxis()->SetTitle("count");
472 
473  name = str(format("SVDDQM_StripMaxBinU6"));
474  title = str(format("SVD U-Strip MaxBin for layer 6 sensors"));
475  m_stripMaxBinU6 = new TH1F(name.c_str(), title.c_str(), MaxBinBins, 0, MaxBinMax);
476  m_stripMaxBinU6->GetXaxis()->SetTitle("max bin");
477  m_stripMaxBinU6->GetYaxis()->SetTitle("count");
479  name = str(format("SVDDQM_StripMaxBinV6"));
480  title = str(format("SVD V-Strip MaxBin for layer 6 sensors"));
481  m_stripMaxBinV6 = new TH1F(name.c_str(), title.c_str(), MaxBinBins, 0, MaxBinMax);
482  m_stripMaxBinV6->GetXaxis()->SetTitle("max bin");
483  m_stripMaxBinV6->GetYaxis()->SetTitle("count");
485 
486  for (int i = 0; i < nSVDSensors; i++) {
487  VxdID id = gTools->getSensorIDFromSVDIndex(i);
488  int iLayer = id.getLayerNumber();
489  int iLadder = id.getLadderNumber();
490  int iSensor = id.getSensorNumber();
491  VxdID sensorID(iLayer, iLadder, iSensor);
492  SVD::SensorInfo SensorInfo = dynamic_cast<const SVD::SensorInfo&>(VXD::GeoCache::get(sensorID));
493  string sensorDescr = str(format("%1%_%2%_%3%") % iLayer % iLadder % iSensor);
494 
495  if (m_additionalPlots) {
496  //----------------------------------------------------------------
497  // Number of fired strips per sensor
498  //----------------------------------------------------------------
499  name = str(format("SVDDQM_%1%_FiredU") % sensorDescr);
500  title = str(format("SVD Sensor %1% Number of Fired U-Strips") % sensorDescr);
501  m_firedU[i] = new TH1F(name.c_str(), title.c_str(), 50, 0, 50);
502  m_firedU[i]->GetXaxis()->SetTitle("# fired strips");
503  m_firedU[i]->GetYaxis()->SetTitle("count");
504  m_histoList->Add(m_firedU[i]);
505  name = str(format("SVDDQM_%1%_FiredV") % sensorDescr);
506  title = str(format("SVD Sensor %1% Number of Fired V-Strips") % sensorDescr);
507  m_firedV[i] = new TH1F(name.c_str(), title.c_str(), 50, 0, 50);
508  m_firedV[i]->GetXaxis()->SetTitle("# fired strips");
509  m_firedV[i]->GetYaxis()->SetTitle("count");
510  m_histoList->Add(m_firedV[i]);
511  //----------------------------------------------------------------
512  // Number of clusters per sensor
513  //----------------------------------------------------------------
514  name = str(format("SVDDQM_%1%_ClustersU") % sensorDescr);
515  title = str(format("SVD Sensor %1% Number of U-Clusters") % sensorDescr);
516  m_clustersU[i] = new TH1F(name.c_str(), title.c_str(), 20, 0, 20);
517  m_clustersU[i]->GetXaxis()->SetTitle("# clusters");
518  m_clustersU[i]->GetYaxis()->SetTitle("count");
519  m_histoList->Add(m_clustersU[i]);
520  name = str(format("SVDDQM_%1%_ClustersV") % sensorDescr);
521  title = str(format("SVD Sensor %1% Number of V-Clusters") % sensorDescr);
522  m_clustersV[i] = new TH1F(name.c_str(), title.c_str(), 20, 0, 20);
523  m_clustersV[i]->GetXaxis()->SetTitle("# clusters");
524  m_clustersV[i]->GetYaxis()->SetTitle("count");
525  m_histoList->Add(m_clustersV[i]);
526  //----------------------------------------------------------------
527  // Charge of strips
528  //----------------------------------------------------------------
529  name = str(format("SVDDQM_%1%_ADCStripU") % sensorDescr);
530  title = str(format("SVD Sensor %1% U-Strip signal in ADC Counts, all 6 APV samples") % sensorDescr);
531  m_stripSignalU[i] = new TH1F(name.c_str(), title.c_str(), 256, -0.5, 255.5);
532  m_stripSignalU[i]->GetXaxis()->SetTitle("signal ADC");
533  m_stripSignalU[i]->GetYaxis()->SetTitle("count");
534  m_histoList->Add(m_stripSignalU[i]);
535  name = str(format("SVDDQM_%1%_ADCStripV") % sensorDescr);
536  title = str(format("SVD Sensor %1% V-Strip signal in ADC Counts, all 6 APV samples") % sensorDescr);
537  m_stripSignalV[i] = new TH1F(name.c_str(), title.c_str(), 256, -0.5, 255.5);
538  m_stripSignalV[i]->GetXaxis()->SetTitle("signal ADC");
539  m_stripSignalV[i]->GetYaxis()->SetTitle("count");
540  m_histoList->Add(m_stripSignalV[i]);
541  }
542 
543  //----------------------------------------------------------------
544  // Charge of clusters
545  //----------------------------------------------------------------
546  name = str(format("SVDDQM_%1%_ClusterChargeU") % sensorDescr);
547  title = str(format("SVD Sensor %1% U-Cluster Charge") % sensorDescr);
548  m_clusterChargeU[i] = new TH1F(name.c_str(), title.c_str(), ChargeBins, 0, ChargeMax);
549  m_clusterChargeU[i]->GetXaxis()->SetTitle("cluster charge [ke-]");
550  m_clusterChargeU[i]->GetYaxis()->SetTitle("count");
551  m_histoList->Add(m_clusterChargeU[i]);
552  name = str(format("SVDDQM_%1%_ClusterChargeV") % sensorDescr);
553  title = str(format("SVD Sensor %1% V-Cluster Charge") % sensorDescr);
554  m_clusterChargeV[i] = new TH1F(name.c_str(), title.c_str(), ChargeBins, 0, ChargeMax);
555  m_clusterChargeV[i]->GetXaxis()->SetTitle("cluster charge [ke-]");
556  m_clusterChargeV[i]->GetYaxis()->SetTitle("count");
557  m_histoList->Add(m_clusterChargeV[i]);
558  //----------------------------------------------------------------
559  // SNR of clusters
560  //----------------------------------------------------------------
561  name = str(format("SVDDQM_%1%_ClusterSNRU") % sensorDescr);
562  title = str(format("SVD Sensor %1% U-Cluster SNR") % sensorDescr);
563  m_clusterSNRU[i] = new TH1F(name.c_str(), title.c_str(), SNRBins, 0, SNRMax);
564  m_clusterSNRU[i]->GetXaxis()->SetTitle("cluster SNR");
565  m_clusterSNRU[i]->GetYaxis()->SetTitle("count");
566  m_histoList->Add(m_clusterSNRU[i]);
567  name = str(format("SVDDQM_%1%_ClusterSNRV") % sensorDescr);
568  title = str(format("SVD Sensor %1% V-Cluster SNR") % sensorDescr);
569  m_clusterSNRV[i] = new TH1F(name.c_str(), title.c_str(), SNRBins, 0, SNRMax);
570  m_clusterSNRV[i]->GetXaxis()->SetTitle("cluster SNR");
571  m_clusterSNRV[i]->GetYaxis()->SetTitle("count");
572  m_histoList->Add(m_clusterSNRV[i]);
573 
574  //----------------------------------------------------------------
575  // Strips Counts
576  //----------------------------------------------------------------
577  name = str(format("SVDDQM_%1%_StripCountU") % sensorDescr);
578  title = str(format("SVD Sensor %1% Integrated Number of ZS5 Fired U-Strip vs Strip Number") % sensorDescr);
579  m_stripCountU[i] = new TH1F(name.c_str(), title.c_str(), 768, -0.5, 767.5);
580  m_stripCountU[i]->GetXaxis()->SetTitle("cellID");
581  m_stripCountU[i]->GetYaxis()->SetTitle("count");
582  m_histoList->Add(m_stripCountU[i]);
583  name = str(format("SVDDQM_%1%_StripCountV") % sensorDescr);
584  title = str(format("SVD Sensor %1% Integrated Number of ZS5 Fired V-Strip vs Strip Number") % sensorDescr);
585  m_stripCountV[i] = new TH1F(name.c_str(), title.c_str(), 768, -0.5, 767.5);
586  m_stripCountV[i]->GetXaxis()->SetTitle("cellID");
587  m_stripCountV[i]->GetYaxis()->SetTitle("count");
588  m_histoList->Add(m_stripCountV[i]);
589  //----------------------------------------------------------------
590  // Strips Counts with online ZS
591  //----------------------------------------------------------------
592  name = str(format("SVDDQM_%1%_OnlineZSStripCountU") % sensorDescr);
593  title = str(format("SVD Sensor %1% Integrated Number of online-ZS Fired U-Strip vs Strip Number") % sensorDescr);
594  m_onlineZSstripCountU[i] = new TH1F(name.c_str(), title.c_str(), 768, -0.5, 767.5);
595  m_onlineZSstripCountU[i]->GetXaxis()->SetTitle("cellID");
596  m_onlineZSstripCountU[i]->GetYaxis()->SetTitle("count");
598  name = str(format("SVDDQM_%1%_OnlineZSStripCountV") % sensorDescr);
599  title = str(format("SVD Sensor %1% Integrated Number of online-ZS Fired V-Strip vs Strip Number") % sensorDescr);
600  m_onlineZSstripCountV[i] = new TH1F(name.c_str(), title.c_str(), 768, -0.5, 767.5);
601  m_onlineZSstripCountV[i]->GetXaxis()->SetTitle("cellID");
602  m_onlineZSstripCountV[i]->GetYaxis()->SetTitle("count");
604 
605  //----------------------------------------------------------------
606  // Strips Counts for 3 samples
607  //----------------------------------------------------------------
608  name = str(format("SVDDQM_%1%_Strip3CountU") % sensorDescr);
609  title = str(format("SVD Sensor %1% Integrated Number of ZS5 Fired U-Strip vs Strip Number for 3 samples") % sensorDescr);
610  m_strip3CountU[i] = new TH1F(name.c_str(), title.c_str(), 768, -0.5, 767.5);
611  m_strip3CountU[i]->GetXaxis()->SetTitle("cellID");
612  m_strip3CountU[i]->GetYaxis()->SetTitle("count");
613  m_histoList->Add(m_strip3CountU[i]);
614  name = str(format("SVDDQM_%1%_Strip3CountV") % sensorDescr);
615  title = str(format("SVD Sensor %1% Integrated Number of ZS5 Fired V-Strip vs Strip Number for 3 samples") % sensorDescr);
616  m_strip3CountV[i] = new TH1F(name.c_str(), title.c_str(), 768, -0.5, 767.5);
617  m_strip3CountV[i]->GetXaxis()->SetTitle("cellID");
618  m_strip3CountV[i]->GetYaxis()->SetTitle("count");
619  m_histoList->Add(m_strip3CountV[i]);
620  //----------------------------------------------------------------
621  // Strips Counts with online ZS for 3 samples
622  //----------------------------------------------------------------
623  name = str(format("SVDDQM_%1%_OnlineZSStrip3CountU") % sensorDescr);
624  title = str(format("SVD Sensor %1% Integrated Number of online-ZS Fired U-Strip vs Strip Number for 3 samples") % sensorDescr);
625  m_onlineZSstrip3CountU[i] = new TH1F(name.c_str(), title.c_str(), 768, -0.5, 767.5);
626  m_onlineZSstrip3CountU[i]->GetXaxis()->SetTitle("cellID");
627  m_onlineZSstrip3CountU[i]->GetYaxis()->SetTitle("count");
629  name = str(format("SVDDQM_%1%_OnlineZSStrip3CountV") % sensorDescr);
630  title = str(format("SVD Sensor %1% Integrated Number of online-ZS Fired V-Strip vs Strip Number for 3 samples") % sensorDescr);
631  m_onlineZSstrip3CountV[i] = new TH1F(name.c_str(), title.c_str(), 768, -0.5, 767.5);
632  m_onlineZSstrip3CountV[i]->GetXaxis()->SetTitle("cellID");
633  m_onlineZSstrip3CountV[i]->GetYaxis()->SetTitle("count");
635 
636 
637  //----------------------------------------------------------------
638  // Strips Counts for 6 samples
639  //----------------------------------------------------------------
640  name = str(format("SVDDQM_%1%_Strip6CountU") % sensorDescr);
641  title = str(format("SVD Sensor %1% Integrated Number of ZS5 Fired U-Strip vs Strip Number for 6 samples") % sensorDescr);
642  m_strip6CountU[i] = new TH1F(name.c_str(), title.c_str(), 768, -0.5, 767.5);
643  m_strip6CountU[i]->GetXaxis()->SetTitle("cellID");
644  m_strip6CountU[i]->GetYaxis()->SetTitle("count");
645  m_histoList->Add(m_strip6CountU[i]);
646  name = str(format("SVDDQM_%1%_Strip6CountV") % sensorDescr);
647  title = str(format("SVD Sensor %1% Integrated Number of ZS5 Fired V-Strip vs Strip Number for 6 samples") % sensorDescr);
648  m_strip6CountV[i] = new TH1F(name.c_str(), title.c_str(), 768, -0.5, 767.5);
649  m_strip6CountV[i]->GetXaxis()->SetTitle("cellID");
650  m_strip6CountV[i]->GetYaxis()->SetTitle("count");
651  m_histoList->Add(m_strip6CountV[i]);
652  //----------------------------------------------------------------
653  // Strips Counts with online ZS for 6 samples
654  //----------------------------------------------------------------
655  name = str(format("SVDDQM_%1%_OnlineZSStrip6CountU") % sensorDescr);
656  title = str(format("SVD Sensor %1% Integrated Number of online-ZS Fired U-Strip vs Strip Number for 6 samples") % sensorDescr);
657  m_onlineZSstrip6CountU[i] = new TH1F(name.c_str(), title.c_str(), 768, -0.5, 767.5);
658  m_onlineZSstrip6CountU[i]->GetXaxis()->SetTitle("cellID");
659  m_onlineZSstrip6CountU[i]->GetYaxis()->SetTitle("count");
661  name = str(format("SVDDQM_%1%_OnlineZSStrip6CountV") % sensorDescr);
662  title = str(format("SVD Sensor %1% Integrated Number of online-ZS Fired V-Strip vs Strip Number for 6 samples") % sensorDescr);
663  m_onlineZSstrip6CountV[i] = new TH1F(name.c_str(), title.c_str(), 768, -0.5, 767.5);
664  m_onlineZSstrip6CountV[i]->GetXaxis()->SetTitle("cellID");
665  m_onlineZSstrip6CountV[i]->GetYaxis()->SetTitle("count");
667 
668 
669  //----------------------------------------------------------------
670  // Strips Counts for cluster time group id = 0
671  //----------------------------------------------------------------
672  name = str(format("SVDDQM_%1%_StripCountGroupId0U") % sensorDescr);
673  title = str(format("SVD Sensor %1% Integrated NumberFired U-Strip for group Id = 0 vs Strip Number") % sensorDescr);
674  m_stripCountGroupId0U[i] = new TH1F(name.c_str(), title.c_str(), 768, -0.5, 767.5);
675  m_stripCountGroupId0U[i]->GetXaxis()->SetTitle("cellID");
676  m_stripCountGroupId0U[i]->GetYaxis()->SetTitle("count");
678  name = str(format("SVDDQM_%1%_StripCountGroupId0V") % sensorDescr);
679  title = str(format("SVD Sensor %1% Integrated Number of Fired V-Strip for group Id = 0 vs Strip Number") % sensorDescr);
680  m_stripCountGroupId0V[i] = new TH1F(name.c_str(), title.c_str(), 768, -0.5, 767.5);
681  m_stripCountGroupId0V[i]->GetXaxis()->SetTitle("cellID");
682  m_stripCountGroupId0V[i]->GetYaxis()->SetTitle("count");
684 
685  //----------------------------------------------------------------
686  // Cluster size distribution
687  //----------------------------------------------------------------
688  name = str(format("SVDDQM_%1%_ClusterSizeU") % sensorDescr);
689  title = str(format("SVD Sensor %1% U-Cluster Size") % sensorDescr);
690  m_clusterSizeU[i] = new TH1F(name.c_str(), title.c_str(), 9, 1, 10);
691  m_clusterSizeU[i]->GetXaxis()->SetTitle("cluster size");
692  m_clusterSizeU[i]->GetYaxis()->SetTitle("count");
693  m_histoList->Add(m_clusterSizeU[i]);
694  name = str(format("SVDDQM_%1%_ClusterSizeV") % sensorDescr);
695  title = str(format("SVD Sensor %1% V-Cluster Size") % sensorDescr);
696  m_clusterSizeV[i] = new TH1F(name.c_str(), title.c_str(), 9, 1, 10);
697  m_clusterSizeV[i]->GetXaxis()->SetTitle("cluster size");
698  m_clusterSizeV[i]->GetYaxis()->SetTitle("count");
699  m_histoList->Add(m_clusterSizeV[i]);
700  //----------------------------------------------------------------
701  // Cluster time distribution
702  //----------------------------------------------------------------
703  name = str(format("SVDDQM_%1%_ClusterTimeU") % sensorDescr);
704  Title = Form("SVD Sensor %s U-Cluster Time %s", sensorDescr.c_str(), refFrame.Data());
705  m_clusterTimeU[i] = new TH1F(name.c_str(), Title.Data(), TimeBins, TimeMin, TimeMax);
706  m_clusterTimeU[i]->GetXaxis()->SetTitle("cluster time (ns)");
707  m_clusterTimeU[i]->GetYaxis()->SetTitle("count");
708  m_histoList->Add(m_clusterTimeU[i]);
709  name = str(format("SVDDQM_%1%_ClusterTimeV") % sensorDescr);
710  Title = Form("SVD Sensor %s V-Cluster Time %s", sensorDescr.c_str(), refFrame.Data());
711  m_clusterTimeV[i] = new TH1F(name.c_str(), Title.Data(), TimeBins, TimeMin, TimeMax);
712  m_clusterTimeV[i]->GetXaxis()->SetTitle("cluster time (ns)");
713  m_clusterTimeV[i]->GetYaxis()->SetTitle("count");
714  m_histoList->Add(m_clusterTimeV[i]);
715  }
716 
717  for (int i = 0; i < nSVDChips; i++) {
718  VxdID id = gTools->getChipIDFromSVDIndex(i);
719  int iLayer = id.getLayerNumber();
720  int iLadder = id.getLadderNumber();
721  int iSensor = id.getSensorNumber();
722  int iChip = gTools->getSVDChipNumber(id);
723  int IsU = gTools->isSVDSideU(id);
724  TString AxisTicks = Form("%i_%i_%i_u%i", iLayer, iLadder, iSensor, iChip);
725  if (!IsU)
726  AxisTicks = Form("%i_%i_%i_v%i", iLayer, iLadder, iSensor, iChip);
727  m_hitMapCountsChip->GetXaxis()->SetBinLabel(i + 1, AxisTicks.Data());
728  m_hitMapClCountsChip->GetXaxis()->SetBinLabel(i + 1, AxisTicks.Data());
729  }
730 
731 
732 
733  //----------------------------------------------------------------
734  // Additional histograms for out of ExpressReco
735  //----------------------------------------------------------------
736 
737  if (m_ShowAllHistos == 1) {
738  TDirectory* dirShowAll = nullptr;
739  dirShowAll = oldDir->mkdir("SVDDQMAll");
740  dirShowAll->cd();
741 
742  m_hitMapU = new TH2F*[nSVDSensors];
743  m_hitMapV = new TH2F*[nSVDSensors];
744  m_hitMapUCl = new TH1F*[nSVDSensors];
745  m_hitMapVCl = new TH1F*[nSVDSensors];
746  for (int i = 0; i < nSVDSensors; i++) {
747  VxdID id = gTools->getSensorIDFromSVDIndex(i);
748  int iLayer = id.getLayerNumber();
749  int iLadder = id.getLadderNumber();
750  int iSensor = id.getSensorNumber();
751  VxdID sensorID(iLayer, iLadder, iSensor);
752  SVD::SensorInfo SensorInfo = dynamic_cast<const SVD::SensorInfo&>(VXD::GeoCache::get(sensorID));
753  string sensorDescr = str(format("%1%_%2%_%3%") % iLayer % iLadder % iSensor);
754  //----------------------------------------------------------------
755  // Hitmaps: Number of strips by coordinate
756  //----------------------------------------------------------------
757  name = str(format("SVD_%1%_StripHitmapU") % sensorDescr);
758  title = str(format("SVD Sensor %1% Strip Hitmap in U") % sensorDescr);
759  int nStrips = SensorInfo.getUCells();
760  m_hitMapU[i] = new TH2F(name.c_str(), title.c_str(), nStrips, 0, nStrips, SVDShaperDigit::c_nAPVSamples, 0,
762  m_hitMapU[i]->GetXaxis()->SetTitle("u position [pitch units]");
763  m_hitMapU[i]->GetYaxis()->SetTitle("timebin [time units]");
764  m_hitMapU[i]->GetZaxis()->SetTitle("hits");
765  m_histoList->Add(m_hitMapU[i]);
766  name = str(format("SVD_%1%_StripHitmapV") % sensorDescr);
767  title = str(format("SVD Sensor %1% Strip Hitmap in V") % sensorDescr);
768  nStrips = SensorInfo.getVCells();
769  m_hitMapV[i] = new TH2F(name.c_str(), title.c_str(), nStrips, 0, nStrips, SVDShaperDigit::c_nAPVSamples, 0,
771  m_hitMapV[i]->GetXaxis()->SetTitle("v position [pitch units]");
772  m_hitMapV[i]->GetYaxis()->SetTitle("timebin [time units]");
773  m_hitMapV[i]->GetZaxis()->SetTitle("hits");
774  m_histoList->Add(m_hitMapV[i]);
775  //----------------------------------------------------------------
776  // Hitmaps: Number of clusters by coordinate
777  //----------------------------------------------------------------
778  name = str(format("SVD_%1%_HitmapClstU") % sensorDescr);
779  title = str(format("SVD Sensor %1% Hitmap Clusters in U") % sensorDescr);
780  nStrips = SensorInfo.getUCells();
781  m_hitMapUCl[i] = new TH1F(name.c_str(), title.c_str(), nStrips, 0, nStrips);
782  m_hitMapUCl[i]->GetXaxis()->SetTitle("u position [pitch units]");
783  m_hitMapUCl[i]->GetYaxis()->SetTitle("hits");
784  m_histoList->Add(m_hitMapUCl[i]);
785  name = str(format("SVD_%1%_HitmapClstV") % sensorDescr);
786  title = str(format("SVD Sensor %1% Hitmap Clusters in V") % sensorDescr);
787  nStrips = SensorInfo.getVCells();
788  m_hitMapVCl[i] = new TH1F(name.c_str(), title.c_str(), nStrips, 0, nStrips);
789  m_hitMapVCl[i]->GetXaxis()->SetTitle("v position [pitch units]");
790  m_hitMapVCl[i]->GetYaxis()->SetTitle("hits");
791  m_histoList->Add(m_hitMapVCl[i]);
792  }
793  }
794 
795  oldDir->cd();
796 }
797 
798 
800 {
801  // Register histograms (calls back defineHisto)
802  REG_HISTOGRAM
803 
804  auto gTools = VXD::GeoCache::getInstance().getGeoTools();
805  if (gTools->getNumberOfSVDLayers() != 0) {
806  //Register collections
810 
811  storeSVDClusters.isOptional();
812  storeSVDShaperDigits.isOptional();
813  m_svdEventInfo.isOptional();
814  storeNoZSSVDShaperDigits.isOptional();
815 
816  //Store names to speed up creation later
817  m_storeSVDShaperDigitsName = storeSVDShaperDigits.getName();
818  }
819 
820  m_objTrgSummary.isOptional();
821 }
822 
824 {
825  auto gTools = VXD::GeoCache::getInstance().getGeoTools();
826  if (gTools->getNumberOfSVDLayers() == 0) return;
827 
828 
829  StoreObjPtr<EventMetaData> evtMetaData;
830  m_expNumber = evtMetaData->getExperiment();
831  m_runNumber = evtMetaData->getRun();
832 
833  // Add experiment and run number to the title of selected histograms (CR shifter plots)
834  TString runID = TString::Format(" ~ Exp%d Run%d", m_expNumber, m_runNumber);
835  TObject* obj;
836  TIter nextH(m_histoList);
837  while ((obj = nextH()))
838  if (obj->InheritsFrom("TH1")) {
839 
840  TString tmp = (TString)obj->GetTitle();
841  Int_t pos = tmp.Last('~');
842  if (pos == -1) pos = tmp.Length() + 2;
843 
844  TString title = tmp(0, pos - 2);
845  ((TH1F*)obj)->SetTitle(title + runID);
846  ((TH1F*)obj)->Reset();
847  }
848 }
849 
851 {
852 
853 
854  //check HLT decision and increase number of events only if the event has been accepted
855 
857  const bool eventAccepted = FinalTriggerDecisionCalculator::getFinalTriggerDecision(*m_resultStoreObjectPointer);
858  if (!eventAccepted) return;
859  }
860  m_nEvents->Fill(0);
861 
862  int nSamples = 0;
863  if (m_svdEventInfo.isValid())
864  nSamples = m_svdEventInfo->getNSamples();
865  else
866  return;
867 
868  auto gTools = VXD::GeoCache::getInstance().getGeoTools();
869  if (gTools->getNumberOfSVDLayers() == 0) return;
870 
871 
872  const StoreArray<SVDShaperDigit> storeNoZSSVDShaperDigits(m_storeNoZSSVDShaperDigitsName);
873  const StoreArray<SVDShaperDigit> storeSVDShaperDigits(m_storeSVDShaperDigitsName);
874  const StoreArray<SVDCluster> storeSVDClusters(m_storeSVDClustersName);
875 
876  if (!storeSVDShaperDigits.isValid() || !storeSVDShaperDigits.getEntries()) {
877  return;
878  }
879 
880  int firstSVDLayer = gTools->getFirstSVDLayer();
881  int lastSVDLayer = gTools->getLastSVDLayer();
882  int nSVDSensors = gTools->getNumberOfSVDSensors();
883 
884  // Fired strips offline ZS
885  vector< set<int> > uStrips(nSVDSensors); // sets to eliminate multiple samples per strip
886  vector< set<int> > vStrips(nSVDSensors);
887  for (const SVDShaperDigit& digitIn : storeSVDShaperDigits) {
888  int iLayer = digitIn.getSensorID().getLayerNumber();
889  if ((iLayer < firstSVDLayer) || (iLayer > lastSVDLayer)) continue;
890  int iLadder = digitIn.getSensorID().getLadderNumber();
891  int iSensor = digitIn.getSensorID().getSensorNumber();
892  VxdID sensorID(iLayer, iLadder, iSensor);
893  int index = gTools->getSVDSensorIndex(sensorID);
894  SVD::SensorInfo SensorInfo = dynamic_cast<const SVD::SensorInfo&>(VXD::GeoCache::get(sensorID));
895  if (digitIn.isUStrip()) {
896 
897  //fill strip count first
898  if (m_stripCountU[index] != nullptr) m_stripCountU[index]->Fill(digitIn.getCellID());
899 
900  if (nSamples == 3) {
901  if (m_strip3CountU[index] != nullptr) m_strip3CountU[index]->Fill(digitIn.getCellID());
902  } else {
903  if (m_strip6CountU[index] != nullptr) m_strip6CountU[index]->Fill(digitIn.getCellID());
904  }
905 
906  //fill max bin
907  if (m_stripMaxBinUAll != nullptr) m_stripMaxBinUAll->Fill(digitIn.getMaxTimeBin());
908  if (iLayer == 3)
909  if (m_stripMaxBinU3 != nullptr) m_stripMaxBinU3->Fill(digitIn.getMaxTimeBin());
910  if (iLayer == 6)
911  if (m_stripMaxBinU6 != nullptr) m_stripMaxBinU6->Fill(digitIn.getMaxTimeBin());
912 
913  uStrips.at(index).insert(digitIn.getCellID());
914  int Chip = (int)(digitIn.getCellID() / gTools->getSVDChannelsPerChip()) + 1;
915  int indexChip = gTools->getSVDChipIndex(sensorID, kTRUE, Chip);
916  // 6-to-1 relation weights are equal to digit signals, modulo rounding error
917  SVDShaperDigit::APVFloatSamples samples = digitIn.getSamples();
918  int isSample = 0;
919  for (size_t i = 0; i < SVDShaperDigit::c_nAPVSamples; ++i) {
920  if (m_additionalPlots)
921  if (m_stripSignalU[index] != nullptr) m_stripSignalU[index]->Fill(samples[i]);
922  if (samples[i] > m_CutSVDCharge) {
923  isSample = 1;
924  if (m_ShowAllHistos == 1) {
925  if (m_hitMapU[index] != nullptr) m_hitMapU[index]->Fill(digitIn.getCellID(), i);
926  }
927  }
928  }
929  if (isSample) {
930  if (m_hitMapCountsU != nullptr) m_hitMapCountsU->Fill(index);
931  if (m_hitMapCountsChip != nullptr) m_hitMapCountsChip->Fill(indexChip);
932  }
933  } else {
934  //fill strip count first
935  if (m_stripCountV[index] != nullptr) m_stripCountV[index]->Fill(digitIn.getCellID());
936 
937  if (nSamples == 3) {
938  if (m_strip3CountV[index] != nullptr) m_strip3CountV[index]->Fill(digitIn.getCellID());
939  } else {
940  if (m_strip6CountV[index] != nullptr) m_strip6CountV[index]->Fill(digitIn.getCellID());
941  }
942 
943  //fill max bin
944  if (m_stripMaxBinVAll != nullptr) m_stripMaxBinVAll->Fill(digitIn.getMaxTimeBin());
945 
946  if (iLayer == 3)
947  if (m_stripMaxBinV3 != nullptr) m_stripMaxBinV3->Fill(digitIn.getMaxTimeBin());
948  if (iLayer == 6)
949  if (m_stripMaxBinV6 != nullptr) m_stripMaxBinV6->Fill(digitIn.getMaxTimeBin());
950 
951  vStrips.at(index).insert(digitIn.getCellID());
952  int Chip = (int)(digitIn.getCellID() / gTools->getSVDChannelsPerChip()) + 1;
953  int indexChip = gTools->getSVDChipIndex(sensorID, kFALSE, Chip);
954  // 6-to-1 relation weights are equal to digit signals, modulo rounding error
955  SVDShaperDigit::APVFloatSamples samples = digitIn.getSamples();
956  int isSample = 0;
957  for (size_t i = 0; i < SVDShaperDigit::c_nAPVSamples; ++i) {
958  if (m_additionalPlots)
959  if (m_stripSignalV[index] != nullptr) m_stripSignalV[index]->Fill(samples[i]);
960  if (samples[i] > m_CutSVDCharge) {
961  isSample = 1;
962  if (m_ShowAllHistos == 1) {
963  if (m_hitMapV[index] != nullptr) m_hitMapV[index]->Fill(digitIn.getCellID(), i);
964  }
965  }
966  }
967  if (isSample) {
968  if (m_hitMapCountsV != nullptr) m_hitMapCountsV->Fill(index);
969  if (m_hitMapCountsChip != nullptr) m_hitMapCountsChip->Fill(indexChip);
970  }
971  }
972  }
973  if (m_additionalPlots) {
974  for (int i = 0; i < nSVDSensors; i++) {
975  if ((m_firedU[i] != nullptr) && (uStrips[i].size() > 0))
976  m_firedU[i]->Fill(uStrips[i].size());
977  if ((m_firedV[i] != nullptr) && (vStrips[i].size() > 0))
978  m_firedV[i]->Fill(vStrips[i].size());
979  }
980  }
981 
982  // Fired strips ONLINE ZS
983  if (storeNoZSSVDShaperDigits.isValid())
984  for (const SVDShaperDigit& digitIn : storeNoZSSVDShaperDigits) {
985  int iLayer = digitIn.getSensorID().getLayerNumber();
986  if ((iLayer < firstSVDLayer) || (iLayer > lastSVDLayer)) continue;
987  int iLadder = digitIn.getSensorID().getLadderNumber();
988  int iSensor = digitIn.getSensorID().getSensorNumber();
989  VxdID sensorID(iLayer, iLadder, iSensor);
990  int index = gTools->getSVDSensorIndex(sensorID);
991  SVD::SensorInfo SensorInfo = dynamic_cast<const SVD::SensorInfo&>(VXD::GeoCache::get(sensorID));
992  if (digitIn.isUStrip()) {
993  if (m_onlineZSstripCountU[index] != nullptr) m_onlineZSstripCountU[index]->Fill(digitIn.getCellID());
994  if (nSamples == 3) {
995  if (m_onlineZSstrip3CountU[index] != nullptr) m_onlineZSstrip3CountU[index]->Fill(digitIn.getCellID());
996  } else {
997  if (m_onlineZSstrip6CountU[index] != nullptr) m_onlineZSstrip6CountU[index]->Fill(digitIn.getCellID());
998  }
999  } else {
1000  if (m_onlineZSstripCountV[index] != nullptr) m_onlineZSstripCountV[index]->Fill(digitIn.getCellID());
1001  if (nSamples == 3) {
1002  if (m_onlineZSstrip3CountV[index] != nullptr) m_onlineZSstrip3CountV[index]->Fill(digitIn.getCellID());
1003  } else {
1004  if (m_onlineZSstrip6CountV[index] != nullptr) m_onlineZSstrip6CountV[index]->Fill(digitIn.getCellID());
1005  }
1006  }
1007  }
1008 
1009  vector< set<int> > countsU(nSVDSensors); // sets to eliminate multiple samples per strip
1010  vector< set<int> > countsV(nSVDSensors);
1011  // Hitmaps, Charge, Seed, Size, Time, ...
1012  for (const SVDCluster& cluster : storeSVDClusters) {
1013  if (cluster.getCharge() < m_CutSVDClusterCharge) continue;
1014  int iLayer = cluster.getSensorID().getLayerNumber();
1015  if ((iLayer < firstSVDLayer) || (iLayer > lastSVDLayer)) continue;
1016  int iLadder = cluster.getSensorID().getLadderNumber();
1017  int iSensor = cluster.getSensorID().getSensorNumber();
1018  VxdID sensorID(iLayer, iLadder, iSensor);
1019  int index = gTools->getSVDSensorIndex(sensorID);
1020  SVD::SensorInfo SensorInfo = dynamic_cast<const SVD::SensorInfo&>(VXD::GeoCache::get(sensorID));
1021 
1022  float time = cluster.getClsTime();
1023  if (m_desynchSVDTime && m_svdEventInfo.isValid())
1024  time = time - m_svdEventInfo->getSVD2FTSWTimeShift(cluster.getFirstFrame());
1025 
1026  vector<int> vec = cluster.getTimeGroupId();
1027  auto minElement = min_element(vec.begin(), vec.end());
1028  int groupId = -1;
1029  if (vec.size() > 0) {
1030  groupId = *minElement;
1031 
1032 
1033  if (cluster.isUCluster()) {
1034  if (m_clusterTimeGroupIdU != nullptr) m_clusterTimeGroupIdU->Fill(time, groupId);
1035  if (m_objTrgSummary.isValid()) {
1036  int trgQuality = m_objTrgSummary->getTimQuality();
1037  if (trgQuality == 1)
1038  if (m_clusterTime6GroupIdU != nullptr) m_clusterTime6GroupIdU->Fill(time, groupId);
1039  if (trgQuality == 2)
1040  if (m_clusterTime3GroupIdU != nullptr) m_clusterTime3GroupIdU->Fill(time, groupId);
1041  }
1042 
1043 
1044  } else {
1045  if (m_clusterTimeGroupIdV != nullptr) m_clusterTimeGroupIdV->Fill(time, groupId);
1046  if (m_objTrgSummary.isValid()) {
1047  int trgQuality = m_objTrgSummary->getTimQuality();
1048  if (trgQuality == 1)
1049  if (m_clusterTime6GroupIdV != nullptr) m_clusterTime6GroupIdV->Fill(time, groupId);
1050  if (trgQuality == 2)
1051  if (m_clusterTime3GroupIdV != nullptr) m_clusterTime3GroupIdV->Fill(time, groupId);
1052  }
1053  }
1054  }
1055 
1056  if (cluster.isUCluster()) {
1057  countsU.at(index).insert(SensorInfo.getUCellID(cluster.getPosition()));
1058  int indexChip = gTools->getSVDChipIndex(sensorID, kTRUE,
1059  (int)(SensorInfo.getUCellID(cluster.getPosition()) / gTools->getSVDChannelsPerChip()) + 1);
1060  if (m_hitMapClCountsU != nullptr) m_hitMapClCountsU->Fill(index);
1061  if (m_hitMapClCountsChip != nullptr) m_hitMapClCountsChip->Fill(indexChip);
1062  if (m_clusterChargeU[index] != nullptr) m_clusterChargeU[index]->Fill(cluster.getCharge() / 1000.0); // in kelectrons
1063  if (m_clusterSNRU[index] != nullptr) m_clusterSNRU[index]->Fill(cluster.getSNR());
1064  if (m_clusterChargeUAll != nullptr) m_clusterChargeUAll->Fill(cluster.getCharge() / 1000.0); // in kelectrons
1065  if (m_clusterSNRUAll != nullptr) m_clusterSNRUAll->Fill(cluster.getSNR());
1066  if (m_clusterSizeU[index] != nullptr) m_clusterSizeU[index]->Fill(cluster.getSize());
1067  if (m_clusterTimeU[index] != nullptr) m_clusterTimeU[index]->Fill(time);
1068  if (m_clusterTimeUAll != nullptr) m_clusterTimeUAll->Fill(time);
1069  if (iLayer == 3) {
1070  if (m_clusterChargeU3 != nullptr) m_clusterChargeU3->Fill(cluster.getCharge() / 1000.0); // in kelectrons
1071  if (m_clusterSNRU3 != nullptr) m_clusterSNRU3->Fill(cluster.getSNR());
1072  if (m_clusterTimeU3 != nullptr) m_clusterTimeU3->Fill(time);
1073  if (nSamples == 3) {
1074  if (m_cluster3TimeU3 != nullptr) m_cluster3TimeU3->Fill(time);
1075  } else {
1076  if (m_cluster6TimeU3 != nullptr) m_cluster6TimeU3->Fill(time);
1077  }
1078  } else {
1079  if (m_clusterChargeU456 != nullptr) m_clusterChargeU456->Fill(cluster.getCharge() / 1000.0); // in kelectrons
1080  if (m_clusterSNRU456 != nullptr) m_clusterSNRU456->Fill(cluster.getSNR());
1081  if (m_clusterTimeU456 != nullptr) m_clusterTimeU456->Fill(time);
1082  if (nSamples == 3) {
1083  if (m_cluster3TimeU456 != nullptr) m_cluster3TimeU456->Fill(time);
1084  } else {
1085  if (m_cluster6TimeU456 != nullptr) m_cluster6TimeU456->Fill(time);
1086  }
1087  }
1088 
1089  if (m_ShowAllHistos == 1)
1090  if (m_hitMapUCl[index] != nullptr) m_hitMapUCl[index]->Fill(SensorInfo.getUCellID(cluster.getPosition()));
1091 
1092  // groupId for U side
1093  if (groupId == 0) {
1094  for (const SVDShaperDigit& digitIn : cluster.getRelationsTo<SVDShaperDigit>(m_storeSVDShaperDigitsName)) {
1095  if (m_stripCountGroupId0U != nullptr) m_stripCountGroupId0U[index]->Fill(digitIn.getCellID());
1096  }
1097  }
1098  } else {
1099  countsV.at(index).insert(SensorInfo.getVCellID(cluster.getPosition()));
1100  int indexChip = gTools->getSVDChipIndex(sensorID, kFALSE,
1101  (int)(SensorInfo.getVCellID(cluster.getPosition()) / gTools->getSVDChannelsPerChip()) + 1);
1102  if (m_hitMapClCountsV != nullptr) m_hitMapClCountsV->Fill(index);
1103  if (m_hitMapClCountsChip != nullptr) m_hitMapClCountsChip->Fill(indexChip);
1104  if (m_clusterChargeV[index] != nullptr) m_clusterChargeV[index]->Fill(cluster.getCharge() / 1000.0); // in kelectrons
1105  if (m_clusterSNRV[index] != nullptr) m_clusterSNRV[index]->Fill(cluster.getSNR());
1106  if (m_clusterChargeVAll != nullptr) m_clusterChargeVAll->Fill(cluster.getCharge() / 1000.0); // in kelectrons
1107  if (m_clusterSNRVAll != nullptr) m_clusterSNRVAll->Fill(cluster.getSNR());
1108  if (m_clusterSizeV[index] != nullptr) m_clusterSizeV[index]->Fill(cluster.getSize());
1109  if (m_clusterTimeV[index] != nullptr) m_clusterTimeV[index]->Fill(time);
1110  if (m_clusterTimeVAll != nullptr) m_clusterTimeVAll->Fill(time);
1111  if (iLayer == 3) {
1112  if (m_clusterChargeV3 != nullptr) m_clusterChargeV3->Fill(cluster.getCharge() / 1000.0); // in kelectrons
1113  if (m_clusterSNRV3 != nullptr) m_clusterSNRV3->Fill(cluster.getSNR());
1114  if (m_clusterTimeV3 != nullptr) m_clusterTimeV3->Fill(time);
1115  if (nSamples == 3) {
1116  if (m_cluster3TimeV3 != nullptr) m_cluster3TimeV3->Fill(time);
1117  } else {
1118  if (m_cluster6TimeV3 != nullptr) m_cluster6TimeV3->Fill(time);
1119  }
1120  } else {
1121  if (m_clusterChargeV456 != nullptr) m_clusterChargeV456->Fill(cluster.getCharge() / 1000.0); // in kelectrons
1122  if (m_clusterSNRV456 != nullptr) m_clusterSNRV456->Fill(cluster.getSNR());
1123  if (m_clusterTimeV456 != nullptr) m_clusterTimeV456->Fill(time);
1124  if (nSamples == 3) {
1125  if (m_cluster3TimeV456 != nullptr) m_cluster3TimeV456->Fill(time);
1126  } else {
1127  if (m_cluster6TimeV456 != nullptr) m_cluster6TimeV456->Fill(time);
1128  }
1129  }
1130  if (m_ShowAllHistos == 1)
1131  if (m_hitMapVCl[index] != nullptr) m_hitMapVCl[index]->Fill(SensorInfo.getVCellID(cluster.getPosition()));
1132 
1133  // groupId for V side
1134  if (groupId == 0) {
1135  for (const SVDShaperDigit& digitIn : cluster.getRelationsTo<SVDShaperDigit>(m_storeSVDShaperDigitsName)) {
1136  if (m_stripCountGroupId0V != nullptr) m_stripCountGroupId0V[index]->Fill(digitIn.getCellID());
1137  }
1138  }
1139  }
1140  }
1141  if (m_additionalPlots) {
1142  for (int i = 0; i < nSVDSensors; i++) {
1143  if ((m_clustersU[i] != nullptr) && (countsU[i].size() > 0))
1144  m_clustersU[i]->Fill(countsU[i].size());
1145  if ((m_clustersV[i] != nullptr) && (countsV[i].size() > 0))
1146  m_clustersV[i]->Fill(countsV[i].size());
1147  }
1148  }
1149 }
1150 
1151 
1153 {
1154 
1155  // m_histoList->Delete();
1156  delete m_histoList;
1157 
1158 }
HistoModule.h is supposed to be used instead of Module.h for the modules with histogram definitions t...
Definition: HistoModule.h:29
void setDescription(const std::string &description)
Sets the description of the module.
Definition: Module.cc:214
void setPropertyFlags(unsigned int propertyFlags)
Sets the flags for the module properties.
Definition: Module.cc:208
@ c_ParallelProcessingCertified
This module can be run in parallel processing mode safely (All I/O must be done through the data stor...
Definition: Module.h:80
The SVD Cluster class This class stores all information about reconstructed SVD clusters.
Definition: SVDCluster.h:29
TH1F ** m_hitMapUCl
Hitmaps clusters for u.
TH1F ** m_clustersV
number of v clusters per event
TH1F ** m_onlineZSstrip6CountV
v strip count (online Zero Suppression for 6 samples
TH1F * m_clusterSNRVAll
v SNR of clusters for all sensors
TH1F * m_cluster3TimeV3
v Time of clusters for layer 3 sensors for 3 samples
TH1F * m_clusterTimeV456
v Time of clusters for layer 4,5,6 sensors
TH1F * m_clusterSNRUAll
u SNR of clusters for all sensors
TH1F * m_clusterChargeU3
u charge of clusters for layer 3 sensors
void initialize() override final
Module function initialize.
TH2F * m_clusterTimeGroupIdV
time group id for V side
TH1F * m_clusterSNRV3
v SNR of clusters for layer 3 sensors
TH1F * m_hitMapCountsV
Hitmaps v of Digits.
TH2F ** m_hitMapU
Hitmaps pixels for u.
std::string m_storeNoZSSVDShaperDigitsName
not zero-suppressed SVDShaperDigits StoreArray name
bool m_skipRejectedEvents
if true skip events rejected by HLT (default)
TH1F * m_cluster3TimeU3
u Time of clusters for layer 3 sensors for 3 samples
TH1F * m_stripMaxBinU6
u MaxBin of strips for layer 6 sensors (offline Zero Suppression)
TH1F * m_clusterTimeUAll
u time of clusters for all sensors
TH1F * m_hitMapClCountsU
Hitmaps u of Clusters.
float m_CutSVDCharge
cut for accepting strips to hitmap histogram default = 0 ADU
StoreObjPtr< SVDEventInfo > m_svdEventInfo
SVDEventInfo data object.
TH1F * m_hitMapCountsU
Hitmaps u of Digits.
TH1F ** m_clusterSNRV
v SNR of clusters per sensor
TH1F ** m_clusterChargeV
v charge of clusters
TH1F ** m_stripSignalU
u charge of strips
TH1F * m_clusterChargeUAll
u charge of clusters for all sensors
TH1F * m_clusterChargeU456
u charge of clusters for layer 4,5,6 sensors
void defineHisto() override final
Histogram definitions such as TH1(), TH2(), TNtuple(), TTree()....
TH2F * m_clusterTime6GroupIdU
time group id for U side for coarse trigger
TH1F * m_clusterTimeV3
v Time of clusters for layer 3 sensors
TH1F ** m_clusterSNRU
u SNR of clusters per sensor
TH1F ** m_hitMapVCl
Hitmaps clusters for v.
void terminate() override final
Module function terminate.
TH1F * m_stripMaxBinV3
v MaxBin of strips for layer 3 sensors (offline Zero Suppression)
TH1F * m_clusterTimeVAll
v time of clusters for all sensors
void event() override final
Module function event.
TH2F * m_clusterTime6GroupIdV
time group id for V side for coarse trigger
TH1F ** m_onlineZSstripCountV
v strip count (online Zero Suppression
TH1F ** m_stripSignalV
v charge of strips
TH1F ** m_strip6CountU
u strip count for 6 samples
StoreObjPtr< TRGSummary > m_objTrgSummary
Trigger Summary data object.
std::string m_storeSVDShaperDigitsName
SVDShaperDigits StoreArray name.
TH1F * m_cluster6TimeU3
u Time of clusters for layer 3 sensors for 6 samples
TH2F * m_clusterTime3GroupIdU
time group id for U side for fine trigger
std::string m_histogramDirectoryName
Name of the histogram directory in ROOT file.
TH1F * m_clusterChargeVAll
v charge of clusters for all sensors
TH1F ** m_onlineZSstrip6CountU
u strip count (online Zero Suppression) for 6 samples
TH1F * m_clusterSNRU3
u SNR of clusters for layer 3 sensors
TH1F * m_cluster6TimeU456
u Time of clusters for layer 4,5,6 sensors for 6 samples
TH1F * m_clusterSNRV456
v SNR of clusters for layer 4,5,6 sensors
TH1F * m_stripMaxBinUAll
u MaxBin of strips for all sensors (offline Zero Suppression)
TList * m_histoList
list of cumulative histograms
TH1F ** m_clusterChargeU
u charge of clusters
TH1F * m_hitMapCountsChip
Hitmaps of digits on chips.
TH1F * m_clusterChargeV3
v charge of clusters for layer 3 sensors
TH2F ** m_hitMapV
Hitmaps pixels for v.
TH1F ** m_strip3CountV
v strip count for 3 samples
TH1F * m_stripMaxBinV6
v MaxBin of strips for layer 6 sensors (offline Zero Suppression)
TH1F ** m_stripCountGroupId0V
V strip count for cluster time group Id = 0.
TH1F * m_cluster6TimeV456
v Time of clusters for layer 4,5,6 sensors for 6 samples
TH1F ** m_firedU
Fired u strips per event.
TH1F * m_clusterTimeU3
u Time of clusters for layer 3 sensors
TH2F * m_clusterTime3GroupIdV
time group id for V side for fine trigger
TH1F * m_clusterSNRU456
u SNR of clusters for layer 4,5,6 sensors
void beginRun() override final
Module function beginRun.
TH1F ** m_onlineZSstripCountU
u strip count (online Zero Suppression)
int m_ShowAllHistos
Flag to show all histos in DQM, default = 0 (do not show)
bool m_additionalPlots
additional plots flag
TH1F * m_cluster3TimeV456
v Time of clusters for layer 4,5,6 sensors for 3 samples
TH1F * m_cluster6TimeV3
v Time of clusters for layer 3 sensors for 6 samples
TH1F * m_stripMaxBinU3
u MaxBin of strips for layer 3 sensors (offline Zero Suppression)
bool m_desynchSVDTime
if TRUE: svdTime back in SVD time reference
TH1F * m_cluster3TimeU456
u Time of clusters for layer 4,5,6 sensors for 3 samples
TH1F ** m_onlineZSstrip3CountU
u strip count (online Zero Suppression) for 3 samples
TH1F ** m_onlineZSstrip3CountV
v strip count (online Zero Suppression for 3 samples
TH1F * m_stripMaxBinVAll
v MaxBin of strips for all sensors (offline Zero Suppression)
TH1F * m_hitMapClCountsChip
Hitmaps of clusters on chips.
StoreObjPtr< SoftwareTriggerResult > m_resultStoreObjectPointer
Store Object for reading the trigger decision.
float m_CutSVDClusterCharge
cut for accepting clusters to hitmap histogram, default = 0 ke-
TH2F * m_clusterTimeGroupIdU
time group id for U side
std::string m_storeSVDClustersName
SVDClusters StoreArray name.
TH1F * m_clusterTimeU456
u Time of clusters for layer 4,5,6 sensors
TH1F ** m_firedV
Fired v strips per event.
TH1F * m_clusterChargeV456
v charge of clusters for layer 4,5,6 sensors
TH1F ** m_strip6CountV
v strip count for 3 samples
TH1F ** m_stripCountGroupId0U
U strip count for cluster time group Id = 0.
TH1F * m_hitMapClCountsV
Hitmaps v of Clusters.
TH1F ** m_clustersU
number of u clusters per event
TH1F ** m_strip3CountU
u strip count for 3 samples
The SVD ShaperDigit class.
static const std::size_t c_nAPVSamples
Number of APV samples stored.
std::array< APVFloatSampleType, c_nAPVSamples > APVFloatSamples
array of APVFloatSampleType objects
Specific implementation of SensorInfo for SVD Sensors which provides additional sensor specific infor...
Definition: SensorInfo.h:25
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.