Belle II Software  release-08-01-10
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  m_outputRootFile = new TFile((m_outputDirName + "/" + m_outputRootFileName).c_str(), "RECREATE");
65 
66  //StoreArrays
68  m_Tracks.isOptional();
69 
70  // Tracks
71  m_histoList_Tracks = new TList;
72  h_nTracks = createHistogram1D("N_tracks", "Number of tracks", 10, 0., 10., "N tracks", "Entries", m_histoList_Tracks);
73  h_TracksPvalue = createHistogram1D("Tracks_Pvalue", "P value of tracks", 10, 0., 1., "PValue", "Entries",
75  h_TracksMomentum = createHistogram1D("Tracks_momentum", "Tracks momentum", 500, 0., 5., "Momentum[GeV/c]", "Entries",
77  h_TracksnSVDhits = createHistogram1D("SVD_hits", "SVD hits", 20, 0., 20., "# SVD hits", "Entries", m_histoList_Tracks);
78 
79  // clCharge, clSize, clSNR etc.
80  TString NameOfHisto;
81  TString TitleOfHisto;
82 
83  for (int i = 0; i < m_nSensorTypes; i++) {
84  m_histoList_clCharge[i] = new TList;
85  m_histoList_clChargeVsMomentum[i] = new TList;
87  m_histoList_clChargeVsSNR[i] = new TList;
88 
89  m_histoList_clSize[i] = new TList;
90  m_histoList_clSizeVsMomentum[i] = new TList;
91  m_histoList_clSizeVsIncidentAngle[i] = new TList;
92  m_histoList_clSizeVsSNR[i] = new TList;
93 
94  m_histoList_clSNR[i] = new TList;
95  m_histoList_clSNRVsMomentum[i] = new TList;
96  m_histoList_clSNRVsIncidentAngle[i] = new TList;
97 
98  TString nameSensorType = "";
99  nameSensorType += m_nameSensorTypes[i];
100 
101  for (int j = 0; j < m_nSides; j++) {
102  TString nameSide = "";
103  nameSide = (j > 0 ? "U" : "V");
104 
105  // Cluster size
106  NameOfHisto = "DSSDClusterSize_" + nameSensorType + "Side_" + nameSide;
107  TitleOfHisto = "DSSD Cluster Size: " + nameSensorType + ", Side " + nameSide;
108  h_clSize[i][j] = createHistogram1D(NameOfHisto, TitleOfHisto, 4, 1, 5, "Cluster Size", "Entries", m_histoList_clSize[i]);
109 
110  NameOfHisto = "DSSDClusterSizeVsMomentum_" + nameSensorType + "Side_" + nameSide;
111  TitleOfHisto = "DSSD Cluster Size vs. Track Momentum: " + nameSensorType + ", Side " + nameSide;
112  h_clSizeVsMomentum[i][j] = createHistogram2D(NameOfHisto, TitleOfHisto, 500, 0., 5., "Track Momentum [GeV/c]", 4, 1, 5,
113  "Cluster Size", m_histoList_clSizeVsMomentum[i]);
114 
115  NameOfHisto = "DSSDClusterSizeVsIncidentAngle_" + nameSensorType + "Side_" + nameSide;
116  TitleOfHisto = "DSSD Cluster Size vs. Incident Angle: " + nameSensorType + ", Side " + nameSide;
117  h_clSizeVsIncidentAngle[i][j] = createHistogram2D(NameOfHisto, TitleOfHisto, 0, 90., 90., "Incident Angle [deg]", 4, 1, 5,
118  "Cluster Size", m_histoList_clSizeVsIncidentAngle[i]);
119 
120  NameOfHisto = "DSSDClusterSizeVsSNR_" + nameSensorType + "Side_" + nameSide;
121  TitleOfHisto = "DSSD Cluster Size vs. SNR: " + nameSensorType + ", Side " + nameSide;
122  h_clSizeVsSNR[i][j] = createHistogram2D(NameOfHisto, TitleOfHisto, 100, 0., 100., "Cluster SNR", 4, 1, 5,
123  "Cluster Size", m_histoList_clSizeVsSNR[i]);
124 
125  for (int k = 0; k < m_nClSizes; k++) {
126  TString nameclSize = "";
127  if (k < 2) nameclSize += k + 1;
128  else nameclSize += ">= 3";
129 
130  // Cluster charge
131  NameOfHisto = "DSSDClusterCharge_" + nameSensorType + "Side_" + nameSide + "clSize_" + nameclSize;
132  TitleOfHisto = "DSSD Cluster Charge: " + nameSensorType + ", Side " + nameSide + ", clSize " + nameclSize;
133  h_clCharge[i][j][k] = createHistogram1D(NameOfHisto, TitleOfHisto, m_nBins, m_minCharge, m_maxCharge,
134  "Cluster Charge [e]", "Entries / (375 e)", m_histoList_clCharge[i]);
135 
136  NameOfHisto = "DSSDClusterChargeVsMomentum_" + nameSensorType + "Side_" + nameSide + "clSize_" + nameclSize;
137  TitleOfHisto = "DSSD Cluster Charge vs. Track Momentum: " + nameSensorType + ", Side " + nameSide + ", clSize " + nameclSize;
138  h_clChargeVsMomentum[i][j][k] = createHistogram2D(NameOfHisto, TitleOfHisto, 500, 0, 5., "Track Momentum[GeV/c]", m_nBins,
139  m_minCharge, m_maxCharge, "Cluster Charge [e]",
141 
142  NameOfHisto = "DSSDClusterChargeVsIncidentAngle_" + nameSensorType + "Side_" + nameSide + "clSize_" + nameclSize;
143  TitleOfHisto = "DSSD Cluster Charge vs. Incident Angle: " + nameSensorType + ", Side " + nameSide + ", clSize " + nameclSize;
144  h_clChargeVsIncidentAngle[i][j][k] = createHistogram2D(NameOfHisto, TitleOfHisto, 90, 0., 90., "Incident Angle [deg]", m_nBins,
145  m_minCharge, m_maxCharge, "Cluster Charge [e]",
147 
148  NameOfHisto = "DSSDClusterChargeVsSNR_" + nameSensorType + "Side_" + nameSide + "clSize_" + nameclSize;
149  TitleOfHisto = "DSSD Cluster Charge vs. SNR: " + nameSensorType + ", Side " + nameSide + ", clSize " + nameclSize;
150  h_clChargeVsSNR[i][j][k] = createHistogram2D(NameOfHisto, TitleOfHisto, 100, 0., 100., "Cluster SNR", m_nBins, m_minCharge,
151  m_maxCharge, "Cluster Charge [e]", m_histoList_clChargeVsSNR[i]);
152 
153  // cluster SNR
154  NameOfHisto = "DSSDClusterSNR_" + nameSensorType + "Side_" + nameSide + "clSize_" + nameclSize;
155  TitleOfHisto = "DSSD Cluster SNR: " + nameSensorType + ", Side " + nameSide + ", clSize " + nameclSize;
156  h_clSNR[i][j][k] = createHistogram1D(NameOfHisto, TitleOfHisto, 100, 0., 100., "Cluster SNR", "Entries",
157  m_histoList_clSNR[i]);
158 
159  NameOfHisto = "DSSDClusterSNRVsMomentum_" + nameSensorType + "Side_" + nameSide + "clSize_" + nameclSize;
160  TitleOfHisto = "DSSD Cluster SNR vs. Track Momentum: " + nameSensorType + ", Side " + nameSide + ", clSize " + nameclSize;
161  h_clSNRVsMomentum[i][j][k] = createHistogram2D(NameOfHisto, TitleOfHisto, 500, 0, 5., "Track Momentum[GeV/c]",
162  100, 0., 100., "Cluster SNR", m_histoList_clSNRVsMomentum[i]);
163 
164  NameOfHisto = "DSSDClusterSNRVsIncAngle_" + nameSensorType + "Side_" + nameSide + "clSize_" + nameclSize;
165  TitleOfHisto = "DSSD Cluster SNR vs. Incident Angle: " + nameSensorType + ", Side " + nameSide + ", clSize " + nameclSize;
166  h_clSNRVsIncidentAngle[i][j][k] = createHistogram2D(NameOfHisto, TitleOfHisto, 90, 0., 90., "Incident Angle [deg]",
167  100, 0., 100., "Cluster SNR", m_histoList_clSNRVsIncidentAngle[i]);
168  } //cl sizes
169  } //sides
170  } //sensor types
171 } // initialize
172 
174 {
175  if (m_useTrackInfo == false) {
176  B2ERROR(" you must use track information! change the module parameter to TRUE");
177  return;
178  }
179 
180  BOOST_FOREACH(Track & track, m_Tracks) {
181 
182  h_nTracks->Fill(m_Tracks.getEntries());
183  // Obtaining track momentum, P value & SVD hits, track hypothesis made for pions(or electrons in case of TB)
184  const TrackFitResult* tfr = nullptr;
185  tfr = track.getTrackFitResultWithClosestMass(Const::pion);
186 
187  if (tfr) {
188  h_TracksPvalue->Fill(tfr->getPValue());
189  h_TracksMomentum->Fill(tfr->getMomentum().R());
190  h_TracksnSVDhits->Fill((tfr->getHitPatternVXD()).getNSVDHits());
191  } // trf
192 
193  RelationVector<RecoTrack> theRC = DataStore::getRelationsWithObj<RecoTrack>(&track);
194  RelationVector<SVDCluster> svdClustersTrack = DataStore::getRelationsWithObj<SVDCluster>(theRC[0]);
195  RelationVector<VXDDedxTrack> VXDdedxTr = DataStore::getRelationsWithObj<VXDDedxTrack>(&track);
196  // if (theRC.size() == 0 || svdClustersTrack.size() == 0 || VXDdedxTr.size() == 0) continue;
197 
198  // double trkMom = VXDdedxTr[0]->getMomentum();
199 
200  for (int cl = 0; cl < static_cast<int>(svdClustersTrack.size()); cl++) {
201  VxdID cl_VxdID = svdClustersTrack[cl]->getSensorID();
202  int layer = cl_VxdID.getLayerNumber() - 3;
203  // int ladder = cl_VxdID.getLadderNumber() - 1;
204  int sensor = cl_VxdID.getSensorNumber() - 1;
205  int side = static_cast<int>(svdClustersTrack[cl]->isUCluster());
206  float clCharge = svdClustersTrack[cl]->getCharge();
207  float clSNR = svdClustersTrack[cl]->getSNR();
208  unsigned short clSize = svdClustersTrack[cl]->getSize();
209  unsigned short clSizeIndex;
210  unsigned short sensTypeIndex;
211  VXD::SensorInfoBase info = VXD::GeoCache::get(cl_VxdID);
212  // double sensThickness = info.getThickness();
213  // double pathLength = VXDdedxTr[0]->getDx(cl); // path length in the silicon, for a given sensor
214  // double incAngle = 180. / M_PI * acos(sensThickness / pathLength);
215 
216  // clSizeIndex = 0,1 for clSize 1,2 respectively and =2 for clSize >=3
217  clSizeIndex = clSize >= 3 ? 2 : clSize - 1;
218 
219  if (layer == 0) { // L3 small rectangular
220  sensTypeIndex = 0;
221  } else if ((sensor != 0) && (sensor != (m_nSensorsOnLayer[layer] - 1))) { // L456 large rectangular (origami)
222  sensTypeIndex = 1;
223  } else if (sensor == m_nSensorsOnLayer[layer] - 1) { // L456 large rectangular (BWD)
224  sensTypeIndex = 2;
225  } else { // L456 trapezoidal (FWD)
226  sensTypeIndex = 3;
227  }
228 
229  // cl charge histograms
230  h_clCharge[sensTypeIndex][side][clSizeIndex]->Fill(clCharge);
231  // h_clChargeVsMomentum[sensTypeIndex][side][clSizeIndex]->Fill(trkMom, clCharge);
232  // h_clChargeVsIncidentAngle[sensTypeIndex][side][clSizeIndex]->Fill(incAngle, clCharge);
233  h_clChargeVsSNR[sensTypeIndex][side][clSizeIndex]->Fill(clSNR, clCharge);
234 
235  //cl size
236  h_clSize[sensTypeIndex][side]->Fill(clSize);
237  // h_clSizeVsMomentum[sensTypeIndex][side]->Fill(trkMom, clSize);
238  // h_clSizeVsIncidentAngle[sensTypeIndex][side]->Fill(incAngle, clSize);
239  h_clSizeVsSNR[sensTypeIndex][side]->Fill(clSNR, clSize);
240 
241  //cl SNR
242  h_clSNR[sensTypeIndex][side][clSizeIndex]->Fill(clSNR);
243  // h_clSNRVsMomentum[sensTypeIndex][side][clSizeIndex]->Fill(trkMom, clSize);
244  // h_clSNRVsIncidentAngle[sensTypeIndex][side][clSizeIndex]->Fill(incAngle, clSize);
245 
246  } //clusters
247  } //tracks
248 
249 } //event()
250 
251 
253 {
254  gROOT->SetBatch(1);
255  // comparison plots
256  TCanvas* c;
257  for (int i = 0; i < m_nSensorTypes; i++) {
258  for (int j = 0; j < m_nSides; j++) {
259  std::string nameSensorType = "";
260  nameSensorType += m_nameSensorTypes[i];
261  std::string nameSide = "";
262  nameSide = (j > 0 ? "U" : "V");
263 
264  c = comparisonPlot(h_clCharge[i][j][0], h_clCharge[i][j][1], h_clCharge[i][j][2]);
265  c->SaveAs((m_outputDirName + "/clChargeComparison_" + nameSensorType + nameSide + ".png").c_str());
266  c->Close();
267  gSystem->ProcessEvents();
268 
269  c = comparisonPlot(h_clSNR[i][j][0], h_clSNR[i][j][1], h_clSNR[i][j][2]);
270  c->SaveAs((m_outputDirName + "/clSNRComparison_" + nameSensorType + nameSide + ".png").c_str());
271  c->Close();
272  gSystem->ProcessEvents();
273  }
274  }
275  // save to .root file
276  if (m_outputRootFile != nullptr) {
277  m_outputRootFile->cd();
278  TDirectory* oldDir = gDirectory;
279 
280  TDirectory* dir_clCharge = oldDir->mkdir("clCharge");
281  TDirectory* dir_clChargeVsSNR = oldDir->mkdir("clChargeVsSNR");
282  TDirectory* dir_clSize = oldDir->mkdir("clSize");
283  TDirectory* dir_clSNR = oldDir->mkdir("clSNR");
284 
285  for (int i = 0; i < m_nSensorTypes; i++) {
286  // cluster charge
287  dir_clCharge->cd();
288  TDirectory* dir_clChargeSt = dir_clCharge->mkdir(m_nameSensorTypes[i].c_str());
289  dir_clChargeSt->cd();
290  TIter nextH_clCharge(m_histoList_clCharge[i]);
291  TObject* obj;
292 
293  while ((obj = dynamic_cast<TH1F*>(nextH_clCharge()))) {
294  obj->Write();
295  }
296 
297  // cluster charge vs. SNR
298  dir_clChargeVsSNR->cd();
299  TDirectory* dir_clChargeVsSNRSt = dir_clChargeVsSNR->mkdir(m_nameSensorTypes[i].c_str());
300  dir_clChargeVsSNRSt->cd();
301  TIter nextH_clChargeVsSNR(m_histoList_clChargeVsSNR[i]);
302  while ((obj = dynamic_cast<TH2F*>(nextH_clChargeVsSNR()))) {
303  obj->Write();
304  }
305 
306  // cluster size
307  dir_clSize->cd();
308  TDirectory* dir_clSizeSt = dir_clSize->mkdir(m_nameSensorTypes[i].c_str());
309  dir_clSizeSt->cd();
310  TIter nextH_clSize(m_histoList_clSize[i]);
311  while ((obj = dynamic_cast<TH1F*>(nextH_clSize()))) {
312  obj->Write();
313  }
314 
315  // cluster SNR
316  dir_clSNR->cd();
317  TDirectory* dir_clSNRSt = dir_clSNR->mkdir(m_nameSensorTypes[i].c_str());
318  dir_clSNRSt->cd();
319  TIter nextH_clSNR(m_histoList_clSNR[i]);
320  while ((obj = dynamic_cast<TH1F*>(nextH_clSNR()))) {
321  obj->Write();
322  }
323  }
324  m_outputRootFile->Close();
325  }
326 
327  delete m_outputRootFile;
328 
329 } //terminate
330 
331 TH1F* SVDChargeSharingAnalysisModule::createHistogram1D(const char* name, const char* title,
332  Int_t nbins, Double_t min, Double_t max,
333  const char* xtitle, const char* ytitle, TList* histoList)
334 {
335  TH1F* h = new TH1F(name, title, nbins, min, max);
336  h->GetXaxis()->SetTitle(xtitle);
337  h->GetYaxis()->SetTitle(ytitle);
338  if (histoList) {
339  histoList->Add(h);
340  }
341  return h;
342 }
343 
344 TH2F* SVDChargeSharingAnalysisModule::createHistogram2D(const char* name, const char* title,
345  Int_t nbinsX, Double_t minX, Double_t maxX,
346  const char* titleX,
347  Int_t nbinsY, Double_t minY, Double_t maxY,
348  const char* titleY, TList* histoList)
349 {
350 
351  TH2F* h = new TH2F(name, title, nbinsX, minX, maxX, nbinsY, minY, maxY);
352 
353  h->GetXaxis()->SetTitle(titleX);
354  h->GetYaxis()->SetTitle(titleY);
355 
356  if (histoList)
357  histoList->Add(h);
358 
359  return h;
360 }
361 
362 TCanvas* SVDChargeSharingAnalysisModule::comparisonPlot(TH1F* h1, TH1F* h2, TH1F* h3)
363 {
364  TCanvas* c = new TCanvas("c", "c");
365  c->cd();
366 
367  gStyle->SetOptStat(0);
368  gStyle->SetOptTitle(0);
369  gStyle->SetCanvasPreferGL(1);
370 
371  h1->SetLineColor(kRed);
372  h1->SetFillColorAlpha(kRed, 0.35);
373 
374  h2->SetLineColor(kBlue);
375  h2->SetFillColorAlpha(kBlue, 0.35);
376 
377  h3->SetLineColor(kGreen);
378  h3->SetFillColorAlpha(kGreen, 0.35);
379 
380  h2->GetYaxis()->SetTitleOffset(1.4);
381  h2->Draw();
382  h1->Draw("][sames");
383  h3->Draw("][sames");
384 
385  auto legend = new TLegend(0.7, 0.7, 0.9, 0.9);
386  legend->SetTextAlign(22);
387  legend->AddEntry(h1, "clSize 1", "f");
388  legend->AddEntry(h2, "clSize 2", "f");
389  legend->AddEntry(h3, "clSize >= 3", "f");
390  legend->Draw();
391 
392  return c;
393 }
static const ChargedStable pion
charged pion particle
Definition: Const.h:652
Base class for Modules.
Definition: Module.h:72
void setDescription(const std::string &description)
Sets the description of the module.
Definition: Module.cc:214
Class for type safe access to objects that are referred to in relations.
size_t size() const
Get number of relations.
TList * m_histoList_clSize[m_nSensorTypes]
SVDCluster size histogram list.
TH2F * h_clSNRVsIncidentAngle[m_nSensorTypes][m_nSides][m_nClSizes]
SVDCluster SNR vs.
SVDChargeSharingAnalysisModule()
Constructor: Sets the description, the properties and the parameters of the module.
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.
ROOT::Math::XYZVector 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
REG_MODULE(arichBtest)
Register the Module.
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
Abstract base class for different kinds of events.