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 <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 ---------------------------------------------- *
27If you have more complex parameter types in your class then simple int,
28double or std::vector of those you might need to uncomment the following
29include directive to avoid an undefined reference on compilation.
30* ---------------------------------------------------------------------- */
31// #include <framework/core/ModuleParam.templateDetails.h>
32
33
34
35using namespace Belle2;
36
37//-----------------------------------------------------------------
38// Register the Module
39//-----------------------------------------------------------------
40REG_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;
92 m_histoList_clSizeVsSNR[i] = new TList;
93
94 m_histoList_clSNR[i] = new TList;
95 m_histoList_clSNRVsMomentum[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",
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;
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
331TH1F* 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
344TH2F* 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
362TCanvas* 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: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.
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
const SensorInfoBase & getSensorInfo(Belle2::VxdID id) const
Return a referecne to the SensorInfo of a given SensorID.
Definition: GeoCache.cc:67
static GeoCache & getInstance()
Return a reference to the singleton instance.
Definition: GeoCache.cc:214
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: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.