Belle II Software  release-06-02-00
SVDChargeSharingAnalysisModule.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/svdChargeSharing/SVDChargeSharingAnalysisModule.h>
10 
11 #include <TDirectory.h>
12 #include <TCollection.h>
13 #include <reconstruction/dataobjects/VXDDedxTrack.h>
14 #include <vxd/geometry/GeoCache.h>
15 #include <mdst/dataobjects/HitPatternVXD.h>
16 
17 #include <boost/foreach.hpp>
18 
19 #include <TCanvas.h>
20 #include <TSystem.h>
21 #include <TLegend.h>
22 #include <TROOT.h>
23 #include <TStyle.h>
24 
25 
26 /* --------------- WARNING ---------------------------------------------- *
27 If you have more complex parameter types in your class then simple int,
28 double or std::vector of those you might need to uncomment the following
29 include directive to avoid an undefined reference on compilation.
30 * ---------------------------------------------------------------------- */
31 // #include <framework/core/ModuleParam.templateDetails.h>
32 
33 
34 
35 using namespace Belle2;
36 
37 //-----------------------------------------------------------------
38 // Register the Module
39 //-----------------------------------------------------------------
40 REG_MODULE(SVDChargeSharingAnalysis)
41 
42 //-----------------------------------------------------------------
43 // Implementation
44 //-----------------------------------------------------------------
45 
47  : Module()
48 {
49  // Set module properties
50  setDescription("Module for monitoring DSSD cluster charge deposition");
51 
52  // Parameter definitions
53  addParam("outputDirName", m_outputDirName, "Name of the output directory.");
54  addParam("outputRootFileName", m_outputRootFileName, "Name of output rootfile.");
55  addParam("useTrackInfo", m_useTrackInfo, "True if using clusters related to tracks in the analysis", bool(true));
56 }
57 
59 {
60 }
61 
63 {
64  // cppcheck-suppress publicAllocationError
65  m_outputRootFile = new TFile((m_outputDirName + "/" + m_outputRootFileName).c_str(), "RECREATE");
66 
67  //StoreArrays
69  m_Tracks.isOptional();
70 
71  // Tracks
72  m_histoList_Tracks = new TList;
73  h_nTracks = createHistogram1D("N_tracks", "Number of tracks", 10, 0., 10., "N tracks", "Entries", m_histoList_Tracks);
74  h_TracksPvalue = createHistogram1D("Tracks_Pvalue", "P value of tracks", 10, 0., 1., "PValue", "Entries",
76  h_TracksMomentum = createHistogram1D("Tracks_momentum", "Tracks momentum", 500, 0., 5., "Momentum[GeV/c]", "Entries",
78  h_TracksnSVDhits = createHistogram1D("SVD_hits", "SVD hits", 20, 0., 20., "# SVD hits", "Entries", m_histoList_Tracks);
79 
80  // clCharge, clSize, clSNR etc.
81  TString NameOfHisto;
82  TString TitleOfHisto;
83 
84  for (int i = 0; i < m_nSensorTypes; i++) {
85  m_histoList_clCharge[i] = new TList;
86  m_histoList_clChargeVsMomentum[i] = new TList;
88  m_histoList_clChargeVsSNR[i] = new TList;
89 
90  m_histoList_clSize[i] = new TList;
91  m_histoList_clSizeVsMomentum[i] = new TList;
92  m_histoList_clSizeVsIncidentAngle[i] = new TList;
93  m_histoList_clSizeVsSNR[i] = new TList;
94 
95  m_histoList_clSNR[i] = new TList;
96  m_histoList_clSNRVsMomentum[i] = new TList;
97  m_histoList_clSNRVsIncidentAngle[i] = new TList;
98 
99  TString nameSensorType = "";
100  nameSensorType += m_nameSensorTypes[i];
101 
102  for (int j = 0; j < m_nSides; j++) {
103  TString nameSide = "";
104  nameSide = (j > 0 ? "U" : "V");
105 
106  // Cluster size
107  NameOfHisto = "DSSDClusterSize_" + nameSensorType + "Side_" + nameSide;
108  TitleOfHisto = "DSSD Cluster Size: " + nameSensorType + ", Side " + nameSide;
109  h_clSize[i][j] = createHistogram1D(NameOfHisto, TitleOfHisto, 4, 1, 5, "Cluster Size", "Entries", m_histoList_clSize[i]);
110 
111  NameOfHisto = "DSSDClusterSizeVsMomentum_" + nameSensorType + "Side_" + nameSide;
112  TitleOfHisto = "DSSD Cluster Size vs. Track Momentum: " + nameSensorType + ", Side " + nameSide;
113  h_clSizeVsMomentum[i][j] = createHistogram2D(NameOfHisto, TitleOfHisto, 500, 0., 5., "Track Momentum [GeV/c]", 4, 1, 5,
114  "Cluster Size", m_histoList_clSizeVsMomentum[i]);
115 
116  NameOfHisto = "DSSDClusterSizeVsIncidentAngle_" + nameSensorType + "Side_" + nameSide;
117  TitleOfHisto = "DSSD Cluster Size vs. Incident Angle: " + nameSensorType + ", Side " + nameSide;
118  h_clSizeVsIncidentAngle[i][j] = createHistogram2D(NameOfHisto, TitleOfHisto, 0, 90., 90., "Incident Angle [deg]", 4, 1, 5,
119  "Cluster Size", m_histoList_clSizeVsIncidentAngle[i]);
120 
121  NameOfHisto = "DSSDClusterSizeVsSNR_" + nameSensorType + "Side_" + nameSide;
122  TitleOfHisto = "DSSD Cluster Size vs. SNR: " + nameSensorType + ", Side " + nameSide;
123  h_clSizeVsSNR[i][j] = createHistogram2D(NameOfHisto, TitleOfHisto, 100, 0., 100., "Cluster SNR", 4, 1, 5,
124  "Cluster Size", m_histoList_clSizeVsSNR[i]);
125 
126  for (int k = 0; k < m_nClSizes; k++) {
127  TString nameclSize = "";
128  if (k < 2) nameclSize += k + 1;
129  else nameclSize += ">= 3";
130 
131  // Cluster charge
132  NameOfHisto = "DSSDClusterCharge_" + nameSensorType + "Side_" + nameSide + "clSize_" + nameclSize;
133  TitleOfHisto = "DSSD Cluster Charge: " + nameSensorType + ", Side " + nameSide + ", clSize " + nameclSize;
134  h_clCharge[i][j][k] = createHistogram1D(NameOfHisto, TitleOfHisto, m_nBins, m_minCharge, m_maxCharge,
135  "Cluster Charge [e]", "Entries / (375 e)", m_histoList_clCharge[i]);
136 
137  NameOfHisto = "DSSDClusterChargeVsMomentum_" + nameSensorType + "Side_" + nameSide + "clSize_" + nameclSize;
138  TitleOfHisto = "DSSD Cluster Charge vs. Track Momentum: " + nameSensorType + ", Side " + nameSide + ", clSize " + nameclSize;
139  h_clChargeVsMomentum[i][j][k] = createHistogram2D(NameOfHisto, TitleOfHisto, 500, 0, 5., "Track Momentum[GeV/c]", m_nBins,
140  m_minCharge, m_maxCharge, "Cluster Charge [e]",
142 
143  NameOfHisto = "DSSDClusterChargeVsIncidentAngle_" + nameSensorType + "Side_" + nameSide + "clSize_" + nameclSize;
144  TitleOfHisto = "DSSD Cluster Charge vs. Incident Angle: " + nameSensorType + ", Side " + nameSide + ", clSize " + nameclSize;
145  h_clChargeVsIncidentAngle[i][j][k] = createHistogram2D(NameOfHisto, TitleOfHisto, 90, 0., 90., "Incident Angle [deg]", m_nBins,
146  m_minCharge, m_maxCharge, "Cluster Charge [e]",
148 
149  NameOfHisto = "DSSDClusterChargeVsSNR_" + nameSensorType + "Side_" + nameSide + "clSize_" + nameclSize;
150  TitleOfHisto = "DSSD Cluster Charge vs. SNR: " + nameSensorType + ", Side " + nameSide + ", clSize " + nameclSize;
151  h_clChargeVsSNR[i][j][k] = createHistogram2D(NameOfHisto, TitleOfHisto, 100, 0., 100., "Cluster SNR", m_nBins, m_minCharge,
152  m_maxCharge, "Cluster Charge [e]", m_histoList_clChargeVsSNR[i]);
153 
154  // cluster SNR
155  NameOfHisto = "DSSDClusterSNR_" + nameSensorType + "Side_" + nameSide + "clSize_" + nameclSize;
156  TitleOfHisto = "DSSD Cluster SNR: " + nameSensorType + ", Side " + nameSide + ", clSize " + nameclSize;
157  h_clSNR[i][j][k] = createHistogram1D(NameOfHisto, TitleOfHisto, 100, 0., 100., "Cluster SNR", "Entries",
158  m_histoList_clSNR[i]);
159 
160  NameOfHisto = "DSSDClusterSNRVsMomentum_" + nameSensorType + "Side_" + nameSide + "clSize_" + nameclSize;
161  TitleOfHisto = "DSSD Cluster SNR vs. Track Momentum: " + nameSensorType + ", Side " + nameSide + ", clSize " + nameclSize;
162  h_clSNRVsMomentum[i][j][k] = createHistogram2D(NameOfHisto, TitleOfHisto, 500, 0, 5., "Track Momentum[GeV/c]",
163  100, 0., 100., "Cluster SNR", m_histoList_clSNRVsMomentum[i]);
164 
165  NameOfHisto = "DSSDClusterSNRVsIncAngle_" + nameSensorType + "Side_" + nameSide + "clSize_" + nameclSize;
166  TitleOfHisto = "DSSD Cluster SNR vs. Incident Angle: " + nameSensorType + ", Side " + nameSide + ", clSize " + nameclSize;
167  h_clSNRVsIncidentAngle[i][j][k] = createHistogram2D(NameOfHisto, TitleOfHisto, 90, 0., 90., "Incident Angle [deg]",
168  100, 0., 100., "Cluster SNR", m_histoList_clSNRVsIncidentAngle[i]);
169  } //cl sizes
170  } //sides
171  } //sensor types
172 } // initialize
173 
175 {
176  if (m_useTrackInfo == false) {
177  B2ERROR(" you must use track information! change the module parameter to TRUE");
178  return;
179  }
180 
181  BOOST_FOREACH(Track & track, m_Tracks) {
182 
183  h_nTracks->Fill(m_Tracks.getEntries());
184  // Obtaining track momentum, P value & SVD hits, track hypothesis made for pions(or electrons in case of TB)
185  const TrackFitResult* tfr = nullptr;
186  tfr = track.getTrackFitResultWithClosestMass(Const::pion);
187 
188  if (tfr) {
189  h_TracksPvalue->Fill(tfr->getPValue());
190  h_TracksMomentum->Fill(tfr->getMomentum().Mag());
191  h_TracksnSVDhits->Fill((tfr->getHitPatternVXD()).getNSVDHits());
192  } // trf
193 
194  RelationVector<RecoTrack> theRC = DataStore::getRelationsWithObj<RecoTrack>(&track);
195  RelationVector<SVDCluster> svdClustersTrack = DataStore::getRelationsWithObj<SVDCluster>(theRC[0]);
196  RelationVector<VXDDedxTrack> VXDdedxTr = DataStore::getRelationsWithObj<VXDDedxTrack>(&track);
197  // if (theRC.size() == 0 || svdClustersTrack.size() == 0 || VXDdedxTr.size() == 0) continue;
198 
199  // double trkMom = VXDdedxTr[0]->getMomentum();
200 
201  for (int cl = 0; cl < static_cast<int>(svdClustersTrack.size()); cl++) {
202  VxdID cl_VxdID = svdClustersTrack[cl]->getSensorID();
203  int layer = cl_VxdID.getLayerNumber() - 3;
204  // int ladder = cl_VxdID.getLadderNumber() - 1;
205  int sensor = cl_VxdID.getSensorNumber() - 1;
206  int side = static_cast<int>(svdClustersTrack[cl]->isUCluster());
207  float clCharge = svdClustersTrack[cl]->getCharge();
208  float clSNR = svdClustersTrack[cl]->getSNR();
209  unsigned short clSize = svdClustersTrack[cl]->getSize();
210  unsigned short clSizeIndex;
211  unsigned short sensTypeIndex;
212  VXD::SensorInfoBase info = VXD::GeoCache::get(cl_VxdID);
213  // double sensThickness = info.getThickness();
214  // double pathLength = VXDdedxTr[0]->getDx(cl); // path length in the silicon, for a given sensor
215  // double incAngle = 180. / M_PI * acos(sensThickness / pathLength);
216 
217  // clSizeIndex = 0,1 for clSize 1,2 respectively and =2 for clSize >=3
218  clSizeIndex = clSize >= 3 ? 2 : clSize - 1;
219 
220  if (layer == 0) { // L3 small rectangular
221  sensTypeIndex = 0;
222  } else if ((sensor != 0) && (sensor != (m_nSensorsOnLayer[layer] - 1))) { // L456 large rectangular (origami)
223  sensTypeIndex = 1;
224  } else if (sensor == m_nSensorsOnLayer[layer] - 1) { // L456 large rectangular (BWD)
225  sensTypeIndex = 2;
226  } else { // L456 trapezoidal (FWD)
227  sensTypeIndex = 3;
228  }
229 
230  // cl charge histograms
231  h_clCharge[sensTypeIndex][side][clSizeIndex]->Fill(clCharge);
232  // h_clChargeVsMomentum[sensTypeIndex][side][clSizeIndex]->Fill(trkMom, clCharge);
233  // h_clChargeVsIncidentAngle[sensTypeIndex][side][clSizeIndex]->Fill(incAngle, clCharge);
234  h_clChargeVsSNR[sensTypeIndex][side][clSizeIndex]->Fill(clSNR, clCharge);
235 
236  //cl size
237  h_clSize[sensTypeIndex][side]->Fill(clSize);
238  // h_clSizeVsMomentum[sensTypeIndex][side]->Fill(trkMom, clSize);
239  // h_clSizeVsIncidentAngle[sensTypeIndex][side]->Fill(incAngle, clSize);
240  h_clSizeVsSNR[sensTypeIndex][side]->Fill(clSNR, clSize);
241 
242  //cl SNR
243  h_clSNR[sensTypeIndex][side][clSizeIndex]->Fill(clSNR);
244  // h_clSNRVsMomentum[sensTypeIndex][side][clSizeIndex]->Fill(trkMom, clSize);
245  // h_clSNRVsIncidentAngle[sensTypeIndex][side][clSizeIndex]->Fill(incAngle, clSize);
246 
247  } //clusters
248  } //tracks
249 
250 } //event()
251 
252 
254 {
255  gROOT->SetBatch(1);
256  // comparison plots
257  TCanvas* c;
258  for (int i = 0; i < m_nSensorTypes; i++) {
259  for (int j = 0; j < m_nSides; j++) {
260  std::string nameSensorType = "";
261  nameSensorType += m_nameSensorTypes[i];
262  std::string nameSide = "";
263  nameSide = (j > 0 ? "U" : "V");
264 
265  c = comparisonPlot(h_clCharge[i][j][0], h_clCharge[i][j][1], h_clCharge[i][j][2]);
266  c->SaveAs((m_outputDirName + "/clChargeComparison_" + nameSensorType + nameSide + ".png").c_str());
267  c->Close();
268  gSystem->ProcessEvents();
269 
270  c = comparisonPlot(h_clSNR[i][j][0], h_clSNR[i][j][1], h_clSNR[i][j][2]);
271  c->SaveAs((m_outputDirName + "/clSNRComparison_" + nameSensorType + nameSide + ".png").c_str());
272  c->Close();
273  gSystem->ProcessEvents();
274  }
275  }
276  // save to .root file
277  if (m_outputRootFile != nullptr) {
278  m_outputRootFile->cd();
279  TDirectory* oldDir = gDirectory;
280 
281  TDirectory* dir_clCharge = oldDir->mkdir("clCharge");
282  TDirectory* dir_clChargeVsSNR = oldDir->mkdir("clChargeVsSNR");
283  TDirectory* dir_clSize = oldDir->mkdir("clSize");
284  TDirectory* dir_clSNR = oldDir->mkdir("clSNR");
285 
286  for (int i = 0; i < m_nSensorTypes; i++) {
287  // cluster charge
288  dir_clCharge->cd();
289  TDirectory* dir_clChargeSt = dir_clCharge->mkdir(m_nameSensorTypes[i].c_str());
290  dir_clChargeSt->cd();
291  TIter nextH_clCharge(m_histoList_clCharge[i]);
292  TObject* obj;
293 
294  while ((obj = dynamic_cast<TH1F*>(nextH_clCharge()))) {
295  obj->Write();
296  }
297 
298  // cluster charge vs. SNR
299  dir_clChargeVsSNR->cd();
300  TDirectory* dir_clChargeVsSNRSt = dir_clChargeVsSNR->mkdir(m_nameSensorTypes[i].c_str());
301  dir_clChargeVsSNRSt->cd();
302  TIter nextH_clChargeVsSNR(m_histoList_clChargeVsSNR[i]);
303  while ((obj = dynamic_cast<TH2F*>(nextH_clChargeVsSNR()))) {
304  obj->Write();
305  }
306 
307  // cluster size
308  dir_clSize->cd();
309  TDirectory* dir_clSizeSt = dir_clSize->mkdir(m_nameSensorTypes[i].c_str());
310  dir_clSizeSt->cd();
311  TIter nextH_clSize(m_histoList_clSize[i]);
312  while ((obj = dynamic_cast<TH1F*>(nextH_clSize()))) {
313  obj->Write();
314  }
315 
316  // cluster SNR
317  dir_clSNR->cd();
318  TDirectory* dir_clSNRSt = dir_clSNR->mkdir(m_nameSensorTypes[i].c_str());
319  dir_clSNRSt->cd();
320  TIter nextH_clSNR(m_histoList_clSNR[i]);
321  while ((obj = dynamic_cast<TH1F*>(nextH_clSNR()))) {
322  obj->Write();
323  }
324  }
325  m_outputRootFile->Close();
326  }
327 
328  delete m_outputRootFile;
329 
330 } //terminate
331 
332 TH1F* SVDChargeSharingAnalysisModule::createHistogram1D(const char* name, const char* title,
333  Int_t nbins, Double_t min, Double_t max,
334  const char* xtitle, const char* ytitle, TList* histoList)
335 {
336  TH1F* h = new TH1F(name, title, nbins, min, max);
337  h->GetXaxis()->SetTitle(xtitle);
338  h->GetYaxis()->SetTitle(ytitle);
339  if (histoList) {
340  histoList->Add(h);
341  }
342  return h;
343 }
344 
345 TH2F* SVDChargeSharingAnalysisModule::createHistogram2D(const char* name, const char* title,
346  Int_t nbinsX, Double_t minX, Double_t maxX,
347  const char* titleX,
348  Int_t nbinsY, Double_t minY, Double_t maxY,
349  const char* titleY, TList* histoList)
350 {
351 
352  TH2F* h = new TH2F(name, title, nbinsX, minX, maxX, nbinsY, minY, maxY);
353 
354  h->GetXaxis()->SetTitle(titleX);
355  h->GetYaxis()->SetTitle(titleY);
356 
357  if (histoList)
358  histoList->Add(h);
359 
360  return h;
361 }
362 
363 TCanvas* SVDChargeSharingAnalysisModule::comparisonPlot(TH1F* h1, TH1F* h2, TH1F* h3)
364 {
365  TCanvas* c = new TCanvas("c", "c");
366  c->cd();
367 
368  gStyle->SetOptStat(0);
369  gStyle->SetOptTitle(0);
370  gStyle->SetCanvasPreferGL(1);
371 
372  h1->SetLineColor(kRed);
373  h1->SetFillColorAlpha(kRed, 0.35);
374 
375  h2->SetLineColor(kBlue);
376  h2->SetFillColorAlpha(kBlue, 0.35);
377 
378  h3->SetLineColor(kGreen);
379  h3->SetFillColorAlpha(kGreen, 0.35);
380 
381  h2->GetYaxis()->SetTitleOffset(1.4);
382  h2->Draw();
383  h1->Draw("][sames");
384  h3->Draw("][sames");
385 
386  auto legend = new TLegend(0.7, 0.7, 0.9, 0.9);
387  legend->SetTextAlign(22);
388  legend->AddEntry(h1, "clSize 1", "f");
389  legend->AddEntry(h2, "clSize 2", "f");
390  legend->AddEntry(h3, "clSize >= 3", "f");
391  legend->Draw();
392 
393  return c;
394 }
static const ChargedStable pion
charged pion particle
Definition: Const.h:542
Base class for Modules.
Definition: Module.h:72
Class for type safe access to objects that are referred to in relations.
size_t size() const
Get number of relations.
Module for monitoring DSSD cluster charge deposition in regard of capacitive charge sharing between a...
TList * m_histoList_clSize[m_nSensorTypes]
SVDCluster size histogram list.
TH2F * h_clSNRVsIncidentAngle[m_nSensorTypes][m_nSides][m_nClSizes]
SVDCluster SNR vs.
TH2F * h_clChargeVsIncidentAngle[m_nSensorTypes][m_nSides][m_nClSizes]
SVDCluster charge vs.
TList * m_histoList_clSizeVsIncidentAngle[m_nSensorTypes]
SVDCluster size vs.
TList * m_histoList_clSNRVsMomentum[m_nSensorTypes]
SVDCluster SNR vs.
TH2F * h_clSizeVsIncidentAngle[m_nSensorTypes][m_nSides]
SVDCluster size vs.
TList * m_histoList_clSNR[m_nSensorTypes]
SVDCluster SNR histogram list.
TH1F * h_clSNR[m_nSensorTypes][m_nSides][m_nClSizes]
SVDCluster SNR.
virtual void initialize() override
Initialize the SVDChargeSharingAnalysi module.
TH1F * h_TracksnSVDhits
Number of SVDhits for a track.
std::string m_outputRootFileName
root output file name.
StoreArray< SVDCluster > m_svdClusters
SVD clusters store array.
virtual void event() override
Core method, called for each processed event.
TH2F * createHistogram2D(const char *name, const char *title, Int_t nbinsX, Double_t minX, Double_t maxX, const char *titleX, Int_t nbinsY, Double_t minY, Double_t maxY, const char *titleY, TList *histoList)
2D histogram creator.
TList * m_histoList_clSNRVsIncidentAngle[m_nSensorTypes]
SVDCluster SNR vs.
TList * m_histoList_clChargeVsMomentum[m_nSensorTypes]
SVDCluster charge vs.
TH2F * h_clSizeVsMomentum[m_nSensorTypes][m_nSides]
SVDCluster size vs.
bool m_useTrackInfo
True if using clusters related to tracks.
TH2F * h_clSizeVsSNR[m_nSensorTypes][m_nSides]
SVDCluster size vs.
virtual void terminate() override
Summary method, called after processing of all events.
int m_nSensorsOnLayer[m_nLayers]
Total number of DSSDs on L3,4,5,6.
TH2F * h_clChargeVsSNR[m_nSensorTypes][m_nSides][m_nClSizes]
SVDCluster charge vs.
TList * m_histoList_clSizeVsSNR[m_nSensorTypes]
SVDCluster size vs.
TH1F * h_clCharge[m_nSensorTypes][m_nSides][m_nClSizes]
SVDCluster charge.
virtual ~SVDChargeSharingAnalysisModule() override
Default destructor.
const Double_t m_minCharge
Minimum charge in histogram.
TList * m_histoList_clCharge[m_nSensorTypes]
SVDCluster charge histogram list.
TList * m_histoList_clChargeVsIncidentAngle[m_nSensorTypes]
SVDCluster charge vs.
std::string m_nameSensorTypes[m_nSensorTypes]
Sensor type names.
static const int m_nClSizes
Distinction between clSize=1, clSize=2 & clSize>=3.
TH1F * h_clSize[m_nSensorTypes][m_nSides]
SVDCluster size.
TCanvas * comparisonPlot(TH1F *h1, TH1F *h2, TH1F *h3)
Used to compare charge histograms for different cluster sizes.
TList * m_histoList_clChargeVsSNR[m_nSensorTypes]
SVDCluster charge vs.
TH2F * h_clSNRVsMomentum[m_nSensorTypes][m_nSides][m_nClSizes]
SVDCluster SNR vs.
TH1F * createHistogram1D(const char *name, const char *title, Int_t nbins, Double_t min, Double_t max, const char *xtitle, const char *ytitle, TList *histoList=nullptr)
1D histogram creator.
StoreArray< Track > m_Tracks
SVD Tracks strore array.
TList * m_histoList_clSizeVsMomentum[m_nSensorTypes]
SVDCluster size vs.
TH2F * h_clChargeVsMomentum[m_nSensorTypes][m_nSides][m_nClSizes]
SVDCluster charge vs.
TList * m_histoList_Tracks
List of all histograms concerning track information: nTracks, Track P Value, momentum and SVD hits.
bool isRequired(const std::string &name="")
Ensure this array/object has been registered previously.
Values of the result of a track fit with a given particle hypothesis.
double getPValue() const
Getter for Chi2 Probability of the track fit.
TVector3 getMomentum() const
Getter for vector of momentum at closest approach of track in r/phi projection.
HitPatternVXD getHitPatternVXD() const
Getter for the hit pattern in the VXD;.
Class that bundles various TrackFitResults.
Definition: Track.h:25
static const SensorInfoBase & get(Belle2::VxdID id)
Return a reference to the SensorInfo of a given SensorID.
Definition: GeoCache.h:139
Base class to provide Sensor Information for PXD and SVD.
Class to uniquely identify a any structure of the PXD and SVD.
Definition: VxdID.h:33
baseType getSensorNumber() const
Get the sensor id.
Definition: VxdID.h:100
baseType getLayerNumber() const
Get the layer id.
Definition: VxdID.h:96
#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.