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