Belle II Software  release-05-01-25
SVDROIFinderAnalysisDataModule.cc
1 /**************************************************************************
2  * BASF2 (Belle Analysis Framework 2) *
3  * Copyright(C) 2011 - Belle II Collaboration *
4  * *
5  * Author: The Belle II Collaboration *
6  * Contributors: Giulia Casarosa *
7  * *
8  * This software is provided "as is" without any warranty. *
9  **************************************************************************/
10 
11 #include <tracking/modules/svdROIFinder/SVDROIFinderAnalysisDataModule.h>
12 #include <framework/datastore/StoreArray.h>
13 #include <framework/logging/Logger.h>
14 
15 #include <svd/dataobjects/SVDShaperDigit.h>
16 #include <iostream>
17 #include <TVector3.h>
18 
19 using namespace std;
20 using namespace Belle2;
21 
22 //-----------------------------------------------------------------
23 // Register the Module
24 //-----------------------------------------------------------------
25 REG_MODULE(SVDROIFinderAnalysisData)
26 
27 //-----------------------------------------------------------------
28 // Implementation
29 //-----------------------------------------------------------------
30 
32  , m_recoTrackListName()
33  , m_SVDInterceptListName()
34  , m_ROIListName()
35  , m_rootFilePtr(nullptr)
36  , m_rootFileName("")
37  , m_writeToRoot(false)
38  , m_rootEvent(0)
39  //all tracks
40  , m_h1Track(nullptr)
41  , m_h1Track_pt(nullptr)
42  , m_h1Track_phi(nullptr)
43  , m_h1Track_lambda(nullptr)
44  , m_h1Track_cosTheta(nullptr)
45  , m_h1Track_pVal(nullptr)
46  //tracks with an attached ROI
47  , m_h1ROItrack(nullptr)
48  , m_h1ROItrack_pt(nullptr)
49  , m_h1ROItrack_phi(nullptr)
50  , m_h1ROItrack_lambda(nullptr)
51  , m_h1ROItrack_cosTheta(nullptr)
52  , m_h1ROItrack_pVal(nullptr)
53  //tracks with an attached Good ROI
54  , m_h1GoodROItrack(nullptr)
55  , m_h1GoodROItrack_pt(nullptr)
56  , m_h1GoodROItrack_phi(nullptr)
57  , m_h1GoodROItrack_lambda(nullptr)
58  , m_h1GoodROItrack_cosTheta(nullptr)
59  , m_h1GoodROItrack_pVal(nullptr)
60  //tracks with an attached Good ROI contaning at least one SVDShaperDigit
61  , m_h1FullROItrack(nullptr)
62  , m_h1FullROItrack_pt(nullptr)
63  , m_h1FullROItrack_phi(nullptr)
64  , m_h1FullROItrack_lambda(nullptr)
65  , m_h1FullROItrack_cosTheta(nullptr)
66  , m_h1FullROItrack_pVal(nullptr)
67  //digits inside ROI
68  , m_h1PullU(nullptr)
69  , m_h1PullV(nullptr)
70  , m_h2sigmaUphi(nullptr)
71  , m_h2sigmaVphi(nullptr)
72  , m_h1ResidU(nullptr)
73  , m_h1ResidV(nullptr)
74  , m_h1SigmaU(nullptr)
75  , m_h1SigmaV(nullptr)
76  , m_h1GlobalTime(nullptr)
77  //ROI stuff
78  , m_h2ROIuMinMax(nullptr)
79  , m_h2ROIvMinMax(nullptr)
80  , m_h2ROIcenters(nullptr)
81  , m_h2GoodROIcenters(nullptr)
82  , m_h2FullROIcenters(nullptr)
83  , m_h1totROIs(nullptr)
84  , m_h1goodROIs(nullptr)
85  , m_h1okROIs(nullptr)
86  , m_h1effROIs(nullptr)
87  // , m_h1totUstrips(nullptr)
88  // , m_h1totVstrips(nullptr)
89  //variables
90  , n_rois(0)
91  , m_nGoodROIs(0)
92  , m_nOkROIs(0)
93  , n_intercepts(0)
94  , n_tracks(0)
95 {
96  //Set module properties
97  setDescription("This module performs the analysis of the SVDROIFinder module output ON DATA");
98 
99  addParam("writeToRoot", m_writeToRoot,
100  "set true if you want to save the informations in a root file named by parameter 'rootFileName'", bool(true));
101 
102  addParam("rootFileName", m_rootFileName,
103  "fileName used for . Will be ignored if parameter 'writeToRoot' is false (standard)",
104  string("svdDataRedAnalysisData"));
105 
106  addParam("recoTrackListName", m_recoTrackListName,
107  "name of the input collection of RecoTracks", std::string(""));
108 
109  addParam("shapers", m_shapersName,
110  "name of the input collection of SVDShaperDigits", std::string(""));
111 
112  addParam("SVDInterceptListName", m_SVDInterceptListName,
113  "name of the list of interceptions", std::string(""));
114 
115  addParam("ROIListName", m_ROIListName,
116  "name of the list of ROIs", std::string(""));
117 
118  addParam("edgeU", m_edgeU, "fiducial region: edge U [mm]", float(10));
119  addParam("edgeV", m_edgeV, "fiducial region: edge V [mm]", float(10));
120  addParam("minPVal", m_minPVal, "fiducial region: minimum track P-Value", float(0.001));
121 
122 }
123 
124 SVDROIFinderAnalysisDataModule::~SVDROIFinderAnalysisDataModule()
125 {
126 }
127 
128 
129 void SVDROIFinderAnalysisDataModule::initialize()
130 {
131 
132  m_shapers.isRequired(m_shapersName);
133  m_recoTracks.isRequired(m_recoTrackListName);
134  m_tracks.isRequired();
135  m_ROIs.isRequired(m_ROIListName);
136  m_SVDIntercepts.isRequired(m_SVDInterceptListName);
137 
138  n_rois = 0;
139  m_nGoodROIs = 0; //data
140  m_nOkROIs = 0; //data
141  n_intercepts = 0;
142  n_tracks = 0;
143 
144  if (m_writeToRoot == true) {
145  m_rootFileName += ".root";
146  m_rootFilePtr = new TFile(m_rootFileName.c_str(), "RECREATE");
147  } else
148  m_rootFilePtr = nullptr;
149 
150 
151  m_h1GlobalTime = new TH1F("hGlobalTime", "global time for SVDShaperDigits contained in ROI", 200, -100, 100);
152  m_h1PullU = new TH1F("hPullU", "U pulls for SVDShaperDigits contained in ROI", 100, -6, 6);
153  m_h1PullV = new TH1F("hPullV", "V pulls for SVDShaperDigits contained in ROI", 100, -6, 6);
154  m_h2sigmaUphi = new TH2F("hsigmaUvsPhi", "sigmaU vs phi digits in ROI", 100, -180, 180, 100, 0, 0.35);
155  m_h2sigmaVphi = new TH2F("hsigmaVvsPhi", "sigmaU vs phi digits in ROI", 100, -180, 180, 100, 0, 0.4);
156  m_h1ResidU = new TH1F("hResidU", "U resid for SVDShaperDigits contained in ROI", 100, -0.5, 0.5);
157  m_h1ResidV = new TH1F("hResidV", "V resid for SVDShaperDigits contained in ROI", 100, -0.5, 0.5);
158  m_h1SigmaU = new TH1F("hSigmaU", "sigmaU for SVDShaperDigits contained in ROI", 100, 0, 0.35);
159  m_h1SigmaV = new TH1F("hSigmaV", "sigmaV for SVDShaperDigits contained in ROI", 100, 0, 0.35);
160 
161  /*
162  m_h1GlobalTime_out = new TH1F("hGlobalTime_out", "global time for SVDShaperDigits not contained in ROI", 200, -100, 100);
163  m_h2sigmaUphi_out = new TH2F("hsigmaUvsPhi_out", "sigmaU vs phi digits not contained in ROI", 100, -180, 180, 100, 0, 0.35);
164  m_h2sigmaVphi_out = new TH2F("hsigmaVvsPhi_out", "sigmaU vs phi digits not contained in ROI", 100, -180, 180, 100, 0, 0.4);
165  m_h1ResidU_out = new TH1F("hResidU_out", "U resid for SVDShaperDigits not contained in ROI", 100, -2.5, 2.5);
166  m_h1ResidV_out = new TH1F("hResidV_out", "V resid for SVDShaperDigits not contained in ROI", 100, -2.5, 2.5);
167  m_h1SigmaU_out = new TH1F("hSigmaU_out", "sigmaU for SVDShaperDigits not contained in ROI", 100, 0, 0.35);
168  m_h1SigmaV_out = new TH1F("hSigmaV_out", "sigmaV for SVDShaperDigits not contained in ROI", 100, 0, 0.35);
169  */
170 
171  m_h1totROIs = new TH1F("h1TotNROIs", "number of all ROIs", 110, 0, 110);
172  m_h1goodROIs = new TH1F("h1GoodNROIs", "number of ROIs from Good Track", 110, 0, 110);
173  m_h1okROIs = new TH1F("h1OkNROIs", "number of Good ROIs containing a SVDShaperDigit", 110, 0, 110);
174  m_h1effROIs = new TH1F("h1EffSVD", "fraction of Good ROIs containing a SVDShaperDigit", 100, 0, 1.1);
175 
176  // m_h1totUstrips = new TH1F("h1TotUstrips", "number of U strips in ROIs", 100, 0, 250000);
177  // m_h1totVstrips = new TH1F("h1TotVstrips", "number of V strips in ROIs", 100, 0, 250000);
178 
179 
180  m_h2ROIuMinMax = new TH2F("h2ROIuMinMax", "u Min vs Max (all ROIs)", 960, -100, 860, 960, -100, 860);
181  m_h2ROIvMinMax = new TH2F("h2ROIvMinMax", "v Min vs Max (all ROIs)", 960, -100, 860, 960, -100, 860);
182  m_h2ROIcenters = new TH2F("h2ROIcenters", "ROI Centers", 768, 0, 768, 512, 0, 512);
183  m_h2GoodROIcenters = new TH2F("h2GoodROIcenters", "Good ROI Centers", 768, 0, 768, 512, 0, 512);
184  m_h2FullROIcenters = new TH2F("h2FullROIcenters", "Full ROI Centers", 768, 0, 768, 512, 0, 512);
185 
186  //analysis
187  /* Double_t lowBin[6 + 1];
188  for (int i = 0; i < 6; i++)
189  lowBin[i] = pt[i] - ptErr[i];
190  lowBin[6] = pt[5] + ptErr[5];
191  */
192 
193  m_h1ROItrack = new TH1F("hROITrack", "track with an attached Good ROI", 2, 0, 2);
194  m_h1ROItrack_pt = new TH1F("hROITrack_pT", "Track with an attached Good ROI, Transverse Momentum", 100, 0, 8);
195  m_h1ROItrack_phi = new TH1F("h1ROITrack_phi", "Track with an attached Good ROI, Momentum Phi", 200, -TMath::Pi() - 0.01,
196  TMath::Pi() + 0.01);
197  m_h1ROItrack_lambda = new TH1F("h1ROITrack_lambda", "Track with an attached Good ROI, Lambda", 100, -TMath::Pi() - 0.01,
198  TMath::Pi() + 0.01);
199  m_h1ROItrack_cosTheta = new TH1F("h1ROITrack_cosTheta", "Track with an attached Good ROI, Momentum CosTheta", 100, -1 - 0.01, 1.01);
200  m_h1ROItrack_pVal = new TH1F("h1ROITrack_pVal", "Track with an attached Good ROI, P-Value", 1000, 0, 1 + 0.01);
201 
202  m_h1FullROItrack = new TH1F("hFullROITrack", "track with an attached Full ROI", 20, 0, 20);
203  m_h1FullROItrack_pt = new TH1F("hFullROITrack_pT", "Track with an attached Full ROI, Transverse Momentum", 100, 0, 8);
204  m_h1FullROItrack_phi = new TH1F("h1FullROITrack_phi", "Track with an attached Full ROI, Momentum Phi", 200, -TMath::Pi() - 0.01,
205  TMath::Pi() + 0.01);
206  m_h1FullROItrack_lambda = new TH1F("h1FullROITrack_lambda", "Track with an attached Full ROI, Lambda", 100, -TMath::Pi() - 0.01,
207  TMath::Pi() + 0.01);
208  m_h1FullROItrack_cosTheta = new TH1F("h1FullROITrack_cosTheta", "Track with an attached Full ROI, Momentum CosTheta", 100,
209  -1 - 0.01, 1.01);
210  m_h1FullROItrack_pVal = new TH1F("h1FullROITrack_pVal", "Track with an attached Full ROI, P-Value", 1000, 0, 1 + 0.01);
211 
212  m_h1GoodROItrack = new TH1F("hGoodROITrack", "track with an attached Good ROI", 20, 0, 20);
213  m_h1GoodROItrack_pt = new TH1F("hGoodROITrack_pT", "Track with an attached Good ROI, Transverse Momentum", 100, 0, 8);
214  m_h1GoodROItrack_phi = new TH1F("h1GoodROITrack_phi", "Track with an attached Good ROI, Momentum Phi", 200, -TMath::Pi() - 0.01,
215  TMath::Pi() + 0.01);
216  m_h1GoodROItrack_lambda = new TH1F("h1GoodROITrack_lambda", "Track with an attached Good ROI, Lambda", 100, -TMath::Pi() - 0.01,
217  TMath::Pi() + 0.01);
218  m_h1GoodROItrack_cosTheta = new TH1F("h1GoodROITrack_cosTheta", "Track with an attached Good ROI, Momentum CosTheta", 100,
219  -1 - 0.01, 1.01);
220  m_h1GoodROItrack_pVal = new TH1F("h1GoodROITrack_pVal", "Track with an attached Good ROI, P-Value", 1000, 0, 1 + 0.01);
221 
222  m_h1Track = new TH1F("hTrack", "Number of Tracks per Event", 20, 0, 20);
223  m_h1Track_pt = new TH1F("hTrack_pT", "Track Transverse Momentum", 100, 0, 8);
224  m_h1Track_lambda = new TH1F("h1Track_lambda", "Track Momentum Lambda", 100, -TMath::Pi() + 0.01, TMath::Pi() + 0.01);
225  m_h1Track_phi = new TH1F("h1Track_phi", "Track momentum Phi", 200, -TMath::Pi() - 0.01, TMath::Pi() + 0.01);
226  m_h1Track_cosTheta = new TH1F("h1Track_cosTheta", "Track Momentum CosTheta", 100, -1 - 0.01, 1 + 0.01);
227  m_h1Track_pVal = new TH1F("h1Track_pVal", "Track P-Value", 1000, 0, 1 + 0.01);
228 
229  m_rootEvent = 0;
230 }
231 
232 void SVDROIFinderAnalysisDataModule::event()
233 {
234 
235  B2DEBUG(1, " ++++++++++++++ SVDROIFinderAnalysisDataModule");
236 
237  int nGoodROIs = 0;
238  int nOkROIs = 0;
239 
240 
241  //Tracks generals
242  for (int i = 0; i < (int)m_tracks.getEntries(); i++) { //loop on all Tracks
243 
244  const TrackFitResult* tfr = m_tracks[i]->getTrackFitResultWithClosestMass(Const::pion);
245 
246  TVector3 mom = tfr->getMomentum();
247  m_h1Track_pt->Fill(mom.Perp());
248  m_h1Track_phi->Fill(mom.Phi());
249  m_h1Track_cosTheta->Fill(mom.CosTheta());
250  m_h1Track_lambda->Fill(TMath::Pi() / 2 - mom.Theta());
251  m_h1Track_pVal->Fill(tfr->getPValue());
252 
253  }
254  m_h1Track->Fill(m_tracks.getEntries());
255 
256  //ROIs general
257  for (int i = 0; i < (int)m_ROIs.getEntries(); i++) { //loop on ROIlist
258 
259  float centerROIU = (m_ROIs[i]->getMaxUid() + m_ROIs[i]->getMinUid()) / 2;
260  float centerROIV = (m_ROIs[i]->getMaxVid() + m_ROIs[i]->getMinVid()) / 2;
261 
262  m_h2ROIuMinMax->Fill(m_ROIs[i]->getMinUid(), m_ROIs[i]->getMaxUid());
263  m_h2ROIvMinMax->Fill(m_ROIs[i]->getMinVid(), m_ROIs[i]->getMaxVid());
264  m_h2ROIcenters->Fill(centerROIU, centerROIV);
265 
266  RelationVector<SVDIntercept> theIntercept = DataStore::getRelationsWithObj<SVDIntercept>(m_ROIs[i]);
267  RelationVector<RecoTrack> theRC = DataStore::getRelationsWithObj<RecoTrack>(theIntercept[0]);
268 
269  if (!theRC[0]->wasFitSuccessful()) {
270  m_h1ROItrack->Fill(0);
271  continue;
272  }
273 
274  RelationVector<Track> theTrack = DataStore::getRelationsWithObj<Track>(theRC[0]);
275 
276  const TrackFitResult* tfr = theTrack[0]->getTrackFitResultWithClosestMass(Const::pion);
277 
278  if (tfr->getPValue() < m_minPVal) {
279  m_h1ROItrack->Fill(0);
280  continue;
281  }
282 
283  TVector3 mom = tfr->getMomentum();
284  m_h1ROItrack->Fill(1);
285  m_h1ROItrack_pt->Fill(mom.Perp());
286  m_h1ROItrack_phi->Fill(mom.Phi());
287  m_h1ROItrack_cosTheta->Fill(mom.CosTheta());
288  m_h1ROItrack_lambda->Fill(TMath::Pi() / 2 - mom.Theta());
289  m_h1ROItrack_pVal->Fill(tfr->getPValue());
290 
291 
292  VxdID sensorID = m_ROIs[i]->getSensorID();
293 
294  float nStripsU = 768;
295  float nStripsV = 512;
296  float centerSensorU = nStripsU / 2;
297  float centerSensorV = nStripsV / 2;
298  float pitchU = 0.075; //mm
299  float pitchV = 0.240; //mm
300 
301  if (sensorID.getLayerNumber() == 3) {
302  nStripsV = 768;
303  pitchU = 0.050;
304  pitchV = 0.160;
305  }
306 
307  float edgeStripsU = m_edgeU / pitchU;
308  float edgeStripsV = m_edgeV / pitchV;
309  B2DEBUG(10, "good U in range " << edgeStripsU << ", " << nStripsU - edgeStripsU);
310  B2DEBUG(10, "good V in range " << edgeStripsV << ", " << nStripsV - edgeStripsV);
311 
312  B2DEBUG(10, "U check: " << abs(centerROIU - centerSensorU) << " < (good) " << centerSensorU - edgeStripsU);
313  B2DEBUG(10, "V check: " << abs(centerROIV - centerSensorV) << " < (good) " << centerSensorV - edgeStripsV);
314 
315  if ((abs(centerROIU - centerSensorU) > centerSensorU - edgeStripsU)
316  || (abs(centerROIV - centerSensorV) > centerSensorV - edgeStripsV))
317  continue;
318 
319  nGoodROIs++;
320  m_h2GoodROIcenters->Fill(centerROIU, centerROIV);
321 
322  B2RESULT("");
323  B2RESULT("GOOD ROI " << sensorID.getLayerNumber() << "." << sensorID.getLadderNumber() << "." << sensorID.getSensorNumber() <<
324  ": U side " << m_ROIs[i]->getMinUid() << "->" << m_ROIs[i]->getMaxUid() << ", V side " << m_ROIs[i]->getMinVid() << "->" <<
325  m_ROIs[i]->getMaxVid());
326 
327  m_h1GoodROItrack_pt->Fill(mom.Perp());
328  m_h1GoodROItrack_phi->Fill(mom.Phi());
329  m_h1GoodROItrack_cosTheta->Fill(mom.CosTheta());
330  m_h1GoodROItrack_lambda->Fill(TMath::Pi() / 2 - mom.Theta());
331  m_h1GoodROItrack_pVal->Fill(tfr->getPValue());
332 
333  for (int s = 0; s < m_shapers.getEntries(); s++) {
334  if (m_ROIs[i]->Contains(*(m_shapers[s]))) {
335  nOkROIs++;
336 
337  m_h2FullROIcenters->Fill(centerROIU, centerROIV);
338  m_h1FullROItrack->Fill(1);
339  m_h1FullROItrack_pt->Fill(mom.Perp());
340  m_h1FullROItrack_phi->Fill(mom.Phi());
341  m_h1FullROItrack_cosTheta->Fill(mom.CosTheta());
342  m_h1FullROItrack_lambda->Fill(TMath::Pi() / 2 - mom.Theta());
343  m_h1FullROItrack_pVal->Fill(tfr->getPValue());
344 
345  B2RESULT(" --> is Full");
346  break;
347  }
348 
349  }
350  }
351 
352  m_nGoodROIs += nGoodROIs;
353  m_h1goodROIs->Fill(nGoodROIs);
354  m_nOkROIs += nOkROIs;
355  m_h1okROIs->Fill(nOkROIs);
356 
357  m_h1totROIs->Fill(m_ROIs.getEntries());
358  if (nGoodROIs > 0)
359  m_h1effROIs->Fill((float) nOkROIs / nGoodROIs);
360  n_rois += m_ROIs.getEntries();
361 
362  //RecoTrack general
363  n_tracks += m_tracks.getEntries();
364 
365  //SVDIntercepts general
366  n_intercepts += m_SVDIntercepts.getEntries();
367 
368  m_rootEvent++;
369 
370  if (nGoodROIs > 0)
371  B2RESULT(" o Good ROIs = " << nGoodROIs << ", of which Full = " << nOkROIs
372  << " --> efficiency = " << (float)nOkROIs / nGoodROIs);
373 
374  if (nGoodROIs > m_ROIs.getEntries()) B2RESULT(" HOUSTON WE HAVE A PROBLEM!");
375 
376 }
377 
378 
379 void SVDROIFinderAnalysisDataModule::terminate()
380 {
381 
382  B2RESULT(" ROI AnalysisData Summary ");
383  B2RESULT("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
384  B2RESULT("");
385  B2RESULT(" number of events = " << m_rootEvent);
386  B2RESULT(" number of tracks = " << n_tracks);
387  B2RESULT(" number of Intercepts = " << n_intercepts);
388  B2RESULT(" number of ROIs = " << n_rois);
389  B2RESULT(" number of Good ROIs = " << m_nGoodROIs);
390  if (m_nGoodROIs > 0) {
391  B2RESULT(" number of Good ROIs with SVDShaperDigit= " << m_nOkROIs);
392  B2RESULT(" SVD INefficiency = " << 1 - (float)m_nOkROIs / m_nGoodROIs);
393  B2RESULT(" average SVD INefficiency = " << 1 - m_h1effROIs->GetMean());
394  B2RESULT(" number of EMPTY ROIs = " << m_nGoodROIs - m_nOkROIs);
395  }
396 
397 
398 
399  if (m_rootFilePtr != nullptr) {
400  m_rootFilePtr->cd(); //important! without this the famework root I/O (SimpleOutput etc) could mix with the root I/O of this module
401 
402  TDirectory* oldDir = gDirectory;
403  // TDirectory* m_digiDir = oldDir->mkdir("digits");
404  TDirectory* m_alltracks = oldDir->mkdir("ALLtracks");
405  TDirectory* m_roitracks = oldDir->mkdir("ROItracks");
406  TDirectory* m_goodroitracks = oldDir->mkdir("GoodROItracks");
407  TDirectory* m_fullroitracks = oldDir->mkdir("FullROItracks");
408  // TDirectory* m_in = oldDir->mkdir("digi_in");
409  // TDirectory* m_out = oldDir->mkdir("digi_out");
410  TDirectory* m_ROIDir = oldDir->mkdir("roi");
411  /*
412  m_digiDir->cd();
413  m_h1digiIn->Write();
414  m_h1digiOut->Write();
415  */
416 
417  m_alltracks->cd();
418  m_h1Track->Write();
419  m_h1Track_pt->Write();
420  m_h1Track_phi->Write();
421  m_h1Track_lambda->Write();
422  m_h1Track_cosTheta->Write();
423  m_h1Track_pVal->Write();
424 
425  m_roitracks->cd();
426  m_h1ROItrack->Write();
427  m_h1ROItrack_pt->Write();
428  m_h1ROItrack_phi->Write();
429  m_h1ROItrack_lambda->Write();
430  m_h1ROItrack_cosTheta->Write();
431 
432  m_goodroitracks->cd();
433  m_h1GoodROItrack->Write();
434  m_h1GoodROItrack_pt->Write();
435  m_h1GoodROItrack_phi->Write();
436  m_h1GoodROItrack_lambda->Write();
437  m_h1GoodROItrack_cosTheta->Write();
438 
439  m_fullroitracks->cd();
440  m_h1FullROItrack->Write();
441  m_h1FullROItrack_pt->Write();
442  m_h1FullROItrack_phi->Write();
443  m_h1FullROItrack_lambda->Write();
444  m_h1FullROItrack_cosTheta->Write();
445 
446  m_ROIDir->cd();
447  m_h1effROIs->Write();
448  m_h1totROIs->Write();
449  m_h1goodROIs->Write();
450  m_h1okROIs->Write();
451  m_h2ROIuMinMax->Write();
452  m_h2ROIvMinMax->Write();
453  m_h2ROIcenters->Write();
454  m_h2GoodROIcenters->Write();
455  m_h2FullROIcenters->Write();
456 
457  m_rootFilePtr->Close();
458 
459  }
460 
461 }
462 
Belle2::VxdID
Class to uniquely identify a any structure of the PXD and SVD.
Definition: VxdID.h:43
Belle2::TrackFitResult::getMomentum
TVector3 getMomentum() const
Getter for vector of momentum at closest approach of track in r/phi projection.
Definition: TrackFitResult.h:116
REG_MODULE
#define REG_MODULE(moduleName)
Register the given module (without 'Module' suffix) with the framework.
Definition: Module.h:652
Belle2::TrackFitResult::getPValue
double getPValue() const
Getter for Chi2 Probability of the track fit.
Definition: TrackFitResult.h:163
Belle2::VxdID::getLadderNumber
baseType getLadderNumber() const
Get the ladder id.
Definition: VxdID.h:108
Belle2::TrackFitResult
Values of the result of a track fit with a given particle hypothesis.
Definition: TrackFitResult.h:59
Belle2::Module
Base class for Modules.
Definition: Module.h:74
Belle2::RelationVector
Class for type safe access to objects that are referred to in relations.
Definition: DataStore.h:38
Belle2
Abstract base class for different kinds of events.
Definition: MillepedeAlgorithm.h:19
Belle2::VxdID::getSensorNumber
baseType getSensorNumber() const
Get the sensor id.
Definition: VxdID.h:110
Belle2::SVDROIFinderAnalysisDataModule
The Module evaluates the efficiency on SVD based on the number of empty ROIs.
Definition: SVDROIFinderAnalysisDataModule.h:43
Belle2::VxdID::getLayerNumber
baseType getLayerNumber() const
Get the layer id.
Definition: VxdID.h:106