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