Belle II Software  release-05-02-19
CosmicsAlignmentValidation.cc
1 
2 #include <alignment/modules/CosmicsAlignmentValidation/CosmicsAlignmentValidation.h>
3 
4 #include <framework/datastore/StoreArray.h>
5 #include <framework/datastore/RelationIndex.h>
6 #include <mdst/dataobjects/MCParticle.h>
7 
8 #include <genfit/Track.h>
9 
10 #include <root/TFile.h>
11 #include <root/TTree.h>
12 
13 #include <boost/foreach.hpp>
14 
15 //avoid having to wrap everything in the namespace explicitly
16 //only permissible in .cc files!
17 using namespace Belle2;
18 
19 //this line registers the module with the framework and actually makes it available
20 //in steering files or the the module list (basf2 -m).
21 //Note that the 'Module' part of the class name is missing, this is also the way it
22 //will be called in the module list.
23 
24 REG_MODULE(CosmicsAlignmentValidation)
25 
27  Module(),
28  file(NULL),
29  tree(NULL)
30 {
31  setDescription("Alignment Validation with Cosmics");
32 
33  addParam("gfTrackColName", m_gfTrackColName,
34  "Name of genfit::Track collection.", std::string(""));
35  addParam("outputFileName", m_outputFileName, "Name of the output file.",
36  std::string("cosmics.root"));
37 }
38 
40 {
41 }
42 
44 {
45  B2INFO(
46  "[CosmicsAlignmentValidation Module]: Starting initialization of CosmicsAlignmentValidation Module. Give me Cosmics!");
47  file = new TFile(m_outputFileName.c_str(), "RECREATE");
48  tree = new TTree("cosmics", "cosmics");
49  tree->Branch("p1", &t_p1);
50  tree->Branch("p2", &t_p2);
51  tree->Branch("p1MC", &t_p1MC);
52  tree->Branch("p2MC", &t_p2MC);
53  tree->Branch("pt1", &t_pt1);
54  tree->Branch("dz", &t_dz);
55  tree->Branch("dR", &t_dR);
56 
57  tree->Branch("x1", &t_x1);
58  tree->Branch("x2", &t_x2);
59  tree->Branch("y1", &t_y1);
60  tree->Branch("y2", &t_y2);
61  tree->Branch("z1", &t_z1);
62  tree->Branch("z2", &t_z2);
63 
64  tree->Branch("px1", &t_px1);
65  tree->Branch("px2", &t_px2);
66  tree->Branch("py1", &t_py1);
67  tree->Branch("py2", &t_py2);
68  tree->Branch("pz1", &t_pz1);
69  tree->Branch("pz2", &t_pz2);
70 
71  tree->Branch("D01", &t_D01);
72  tree->Branch("Phi1", &t_Phi1);
73  tree->Branch("Omega1", &t_Omega1);
74  tree->Branch("Z01", &t_Z01);
75  tree->Branch("cotTheta1", &t_cotTheta1);
76 
77  tree->Branch("D02", &t_D02);
78  tree->Branch("Phi2", &t_Phi2);
79  tree->Branch("Omega2", &t_Omega2);
80  tree->Branch("Z02", &t_Z02);
81  tree->Branch("cotTheta2", &t_cotTheta2);
82 
83 }
84 
86 {
87 }
88 
90 {
91  B2DEBUG(99, "[CosmicsAlignmentValidationModule] begin event");
92 
93  //simulated truth information
95  StoreArray < MCParticle > mcParticles;
96  //genfit stuff
97  //StoreArray<genfit::Track> fittedTracks(""); // the results of the track fit
98  const int nFittedTracks = gfTracks.getEntries();
99 
100  //RelationArray gfTracksToMCPart(fittedTracks, mcParticles);
101 
102  t_p1 = t_p2 = t_pt1 = t_pt2 = t_p1MC = t_p2MC = -999;
103  t_x1 = t_x2 = t_y1 = t_y2 = t_z1 = t_z2 = -999;
104  t_px1 = t_px2 = t_py1 = t_py2 = t_pz1 = t_pz2 = -999;
105  t_D01 = t_Phi1 = t_Omega1 = t_Z01 = t_cotTheta1 - 999;
106  t_D02 = t_Phi2 = t_Omega2 = t_Z02 = t_cotTheta2 - 999;
107 
108  if (nFittedTracks != 2) {
109  B2INFO(
110  "[CosmicsAlignmentValidationModule] no two tracks reconstructed, but "
111  << nFittedTracks);
112  return;
113  }
114 
115  else {
116 
117  genfit::Track* tr1 = gfTracks[0];
118  genfit::Track* tr2 = gfTracks[1];
119 
120  const TrackFitResult* fitResult1 = findRelatedTrackFitResult(tr1);
121  const TrackFitResult* fitResult2 = findRelatedTrackFitResult(tr2);
122 
123  if (fitResult1 == fitResult2)
124  B2WARNING(
125  "[CosmicsAlignmentValidationModule] Fit Results are from the same track!");
126 
127  if (fitResult1 != NULL) { // valid TrackFitResult found
128  t_p1 = fitResult1->getMomentum().Mag();
129  t_pt1 = fitResult1->getMomentum().Pt();
130  t_x1 = fitResult1->getPosition().X();
131  t_y1 = fitResult1->getPosition().Y();
132  t_z1 = fitResult1->getPosition().Z();
133  t_px1 = fitResult1->getMomentum().X();
134  t_py1 = fitResult1->getMomentum().Y();
135  t_pz1 = fitResult1->getMomentum().Z();
136 
137  t_D01 = fitResult1->getD0();
138  t_Phi1 = fitResult1->getPhi();
139  t_Omega1 = fitResult1->getOmega();
140  t_Z01 = fitResult1->getZ0();
141  t_cotTheta1 = fitResult1->getCotTheta();
142  }
143  if (fitResult2 != NULL) { // valid TrackFitResult found
144  t_p2 = fitResult2->getMomentum().Mag();
145  t_pt2 = fitResult2->getMomentum().Pt();
146  t_x2 = fitResult2->getPosition().X();
147  t_y2 = fitResult2->getPosition().Y();
148  t_z2 = fitResult2->getPosition().Z();
149  t_px2 = fitResult2->getMomentum().X();
150  t_py2 = fitResult2->getMomentum().Y();
151  t_pz2 = fitResult2->getMomentum().Z();
152 
153  t_D02 = fitResult2->getD0();
154  t_Phi2 = fitResult2->getPhi();
155  t_Omega2 = fitResult2->getOmega();
156  t_Z02 = fitResult2->getZ0();
157  t_cotTheta2 = fitResult2->getCotTheta();
158  }
159 
160  t_p1MC = mcParticles[0]->getMomentum().Mag();
161 
162  if (fitResult2 != NULL && fitResult1 != NULL) {
163  t_dz = fitResult1->getPosition().Z()
164  - fitResult2->getPosition().Z();
165  t_dR = sqrt(
166  fitResult1->getPosition().X()
167  * fitResult1->getPosition().X()
168  + fitResult1->getPosition().Y()
169  * fitResult1->getPosition().Y())
170  - sqrt(
171  fitResult2->getPosition().X()
172  * fitResult2->getPosition().X()
173  + fitResult2->getPosition().Y()
174  * fitResult2->getPosition().Y());
175 
176  }
177  tree->Fill();
178  }
179 
180 }
181 
183 {
184 }
185 
187 {
188  B2INFO("[CosmicsAlignmentValidationModule] Saving tree.");
189  B2INFO(
190  "[CosmicsAlignmentValidationModule] Tree has " << tree->GetEntries()
191  << " entries");
192  file->cd();
193  tree->Write("cosmics");
194  file->Close();
195 }
196 
198  const genfit::Track* gfTrack)
199 {
200  // search for a related TrackFitResult
201  RelationIndex < genfit::Track, TrackFitResult > relGfTracksToTrackFitResults;
202 
204  std::vector<const TrackFitResult*> fitResults;
205 
206  BOOST_FOREACH(const relElement_t& relGfTrackToTrackFitResult, relGfTracksToTrackFitResults.getElementsFrom(gfTrack)) {
207  B2DEBUG(99, "----> Related TrackFitResult found!!!");
208  fitResults.push_back(relGfTrackToTrackFitResult.to);
209  }
210 
211  int numberTrackFitResults = fitResults.size();
212 
213  if (numberTrackFitResults == 1) {
214  return fitResults[0];
215  }
216  if (numberTrackFitResults == 0) {
217  return NULL;
218  }
219  if (numberTrackFitResults > 1) {
220  B2DEBUG(99,
221  "[CosmicsAlignmentValidationModule] genfit::Track has "
222  << numberTrackFitResults
223  << " related TrackFitResults. No TrackFitResult is returned.");
224  }
225 
226  return NULL;
227 }
Belle2::CosmicsAlignmentValidationModule::t_dz
float t_dz
member
Definition: CosmicsAlignmentValidation.h:78
Belle2::CosmicsAlignmentValidationModule::t_z1
float t_z1
member
Definition: CosmicsAlignmentValidation.h:85
Belle2::CosmicsAlignmentValidationModule::t_py2
float t_py2
member
Definition: CosmicsAlignmentValidation.h:91
Belle2::CosmicsAlignmentValidationModule::t_Phi1
float t_Phi1
member
Definition: CosmicsAlignmentValidation.h:96
Belle2::CosmicsAlignmentValidationModule::t_pz1
float t_pz1
member
Definition: CosmicsAlignmentValidation.h:92
Belle2::CosmicsAlignmentValidationModule::t_p1MC
float t_p1MC
momentum in MC
Definition: CosmicsAlignmentValidation.h:73
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::getOmega
double getOmega() const
Getter for omega.
Definition: TrackFitResult.h:194
Belle2::CosmicsAlignmentValidationModule::t_D01
float t_D01
member
Definition: CosmicsAlignmentValidation.h:95
Belle2::RelationIndex
Provides access to fast ( O(log n) ) bi-directional lookups on a specified relation.
Definition: RelationIndex.h:84
genfit::Track
Collection of TrackPoint objects, AbsTrackRep objects and FitStatus objects.
Definition: Track.h:71
Belle2::CosmicsAlignmentValidationModule::t_py1
float t_py1
member
Definition: CosmicsAlignmentValidation.h:90
Belle2::CosmicsAlignmentValidationModule::initialize
virtual void initialize() override
Use this to initialize resources or memory your module needs.
Definition: CosmicsAlignmentValidation.cc:43
Belle2::CosmicsAlignmentValidationModule::t_Z01
float t_Z01
member
Definition: CosmicsAlignmentValidation.h:98
Belle2::CosmicsAlignmentValidationModule::t_pt2
float t_pt2
momentum
Definition: CosmicsAlignmentValidation.h:77
Belle2::CosmicsAlignmentValidationModule::t_p1
float t_p1
momentum p1
Definition: CosmicsAlignmentValidation.h:72
Belle2::CosmicsAlignmentValidationModule::findRelatedTrackFitResult
const TrackFitResult * findRelatedTrackFitResult(const genfit::Track *gfTrack)
Find trackfit results in for the corresponding track.
Definition: CosmicsAlignmentValidation.cc:197
Belle2::CosmicsAlignmentValidationModule::file
TFile * file
data file
Definition: CosmicsAlignmentValidation.h:70
Belle2::CosmicsAlignmentValidationModule::t_p2
float t_p2
momentum
Definition: CosmicsAlignmentValidation.h:75
Belle2::TrackFitResult
Values of the result of a track fit with a given particle hypothesis.
Definition: TrackFitResult.h:59
Belle2::TrackFitResult::getPosition
TVector3 getPosition() const
Getter for vector of position at closest approach of track in r/phi projection.
Definition: TrackFitResult.h:109
Belle2::CosmicsAlignmentValidationModule::t_Phi2
float t_Phi2
member
Definition: CosmicsAlignmentValidation.h:102
Belle2::CosmicsAlignmentValidationModule::t_x1
float t_x1
member
Definition: CosmicsAlignmentValidation.h:81
Belle2::TrackFitResult::getZ0
double getZ0() const
Getter for z0.
Definition: TrackFitResult.h:200
Belle2::CosmicsAlignmentValidationModule::t_px2
float t_px2
member
Definition: CosmicsAlignmentValidation.h:89
Belle2::CosmicsAlignmentValidationModule::terminate
virtual void terminate() override
Clean up anything you created in initialize().
Definition: CosmicsAlignmentValidation.cc:186
Belle2::CosmicsAlignmentValidationModule
Module to find Track correlation in cosmic events.
Definition: CosmicsAlignmentValidation.h:26
Belle2::Module
Base class for Modules.
Definition: Module.h:74
Belle2::CosmicsAlignmentValidationModule::t_D02
float t_D02
member
Definition: CosmicsAlignmentValidation.h:101
Belle2::RelationIndexContainer::Element
Element type for the index.
Definition: RelationIndexContainer.h:62
Belle2::CosmicsAlignmentValidationModule::beginRun
virtual void beginRun() override
Called once before a new run begins.
Definition: CosmicsAlignmentValidation.cc:85
Belle2::CosmicsAlignmentValidationModule::t_cotTheta2
float t_cotTheta2
member
Definition: CosmicsAlignmentValidation.h:105
Belle2::TrackFitResult::getCotTheta
double getCotTheta() const
Getter for tanLambda with CDF naming convention.
Definition: TrackFitResult.h:209
Belle2::CosmicsAlignmentValidationModule::t_Z02
float t_Z02
member
Definition: CosmicsAlignmentValidation.h:104
Belle2::CosmicsAlignmentValidationModule::t_Omega2
float t_Omega2
member
Definition: CosmicsAlignmentValidation.h:103
Belle2::RelationIndex::getElementsFrom
range_from getElementsFrom(const FROM *from) const
Return a range of all elements pointing from the given object.
Definition: RelationIndex.h:157
Belle2::CosmicsAlignmentValidationModule::t_x2
float t_x2
member
Definition: CosmicsAlignmentValidation.h:82
Belle2
Abstract base class for different kinds of events.
Definition: MillepedeAlgorithm.h:19
Belle2::CosmicsAlignmentValidationModule::t_z2
float t_z2
member
Definition: CosmicsAlignmentValidation.h:86
Belle2::CosmicsAlignmentValidationModule::t_pt1
float t_pt1
momentum
Definition: CosmicsAlignmentValidation.h:76
Belle2::CosmicsAlignmentValidationModule::~CosmicsAlignmentValidationModule
virtual ~CosmicsAlignmentValidationModule()
Use to clean up anything you created in the constructor.
Definition: CosmicsAlignmentValidation.cc:39
Belle2::CosmicsAlignmentValidationModule::tree
TTree * tree
data tree
Definition: CosmicsAlignmentValidation.h:71
Belle2::CosmicsAlignmentValidationModule::m_gfTrackColName
std::string m_gfTrackColName
m_gfTrackColName
Definition: CosmicsAlignmentValidation.h:68
Belle2::CosmicsAlignmentValidationModule::m_outputFileName
std::string m_outputFileName
ouput filename string
Definition: CosmicsAlignmentValidation.h:69
Belle2::CosmicsAlignmentValidationModule::endRun
virtual void endRun() override
Called once when a run ends.
Definition: CosmicsAlignmentValidation.cc:182
Belle2::CosmicsAlignmentValidationModule::t_pz2
float t_pz2
member
Definition: CosmicsAlignmentValidation.h:93
Belle2::StoreArray
Accessor to arrays stored in the data store.
Definition: ECLMatchingPerformanceExpertModule.h:33
Belle2::CosmicsAlignmentValidationModule::t_cotTheta1
float t_cotTheta1
member
Definition: CosmicsAlignmentValidation.h:99
Belle2::CosmicsAlignmentValidationModule::event
virtual void event() override
Called once for each event.
Definition: CosmicsAlignmentValidation.cc:89
Belle2::CosmicsAlignmentValidationModule::t_y2
float t_y2
member
Definition: CosmicsAlignmentValidation.h:84
Belle2::CosmicsAlignmentValidationModule::t_Omega1
float t_Omega1
member
Definition: CosmicsAlignmentValidation.h:97
Belle2::StoreArray::getEntries
int getEntries() const
Get the number of objects in the array.
Definition: StoreArray.h:226
Belle2::CosmicsAlignmentValidationModule::t_y1
float t_y1
member
Definition: CosmicsAlignmentValidation.h:83
Belle2::CosmicsAlignmentValidationModule::t_p2MC
float t_p2MC
momentum in MC
Definition: CosmicsAlignmentValidation.h:74
Belle2::CosmicsAlignmentValidationModule::t_px1
float t_px1
member
Definition: CosmicsAlignmentValidation.h:88
Belle2::TrackFitResult::getPhi
double getPhi() const
Getter for phi0 with CDF naming convention.
Definition: TrackFitResult.h:187
Belle2::CosmicsAlignmentValidationModule::t_dR
float t_dR
member
Definition: CosmicsAlignmentValidation.h:79
Belle2::TrackFitResult::getD0
double getD0() const
Getter for d0.
Definition: TrackFitResult.h:178