88 {
89 float pdgID = 0;
90 float pdgIDMother = 0;
91 float isVzeroDaughter = -1;
92 float isPrimary = -1;
93 auto mcparticle = recoTrack.getRelated<MCParticle>();
94 if (mcparticle) {
95 pdgID = static_cast<float>(mcparticle->getPDG());
96 pdgIDMother = static_cast<float>(mcparticle->getMother()->getPDG());
97 isPrimary = static_cast<float>(mcparticle->isPrimaryParticle());
98 if (std::abs(pdgIDMother) == 310 || std::abs(pdgIDMother) == 3122) {
99 isVzeroDaughter = 1;
100 } else {
101 isVzeroDaughter = 0;
102 }
103 }
104 float z0 = -999;
105 float d0 = -999;
106 auto genfitTrack = recoTrack.getRelated<Track>("MDSTTracks");
107 if (genfitTrack) {
108 auto trackFitResult = genfitTrack->getTrackFitResultWithClosestMass(Const::pion);
109 if (trackFitResult) {
110 z0 = trackFitResult->getZ0();
111 d0 = trackFitResult->getD0();
112 }
113 }
114 m_variables.at(m_prefix + "pdg_ID") = pdgID;
115 m_variables.at(m_prefix + "pdg_ID_Mother") = pdgIDMother;
116 m_variables.at(m_prefix + "is_Vzero_Daughter") = isVzeroDaughter;
117 m_variables.at(m_prefix + "is_Primary") = isPrimary;
118
119 m_variables.at(m_prefix + "z0") = z0;
120 m_variables.at(m_prefix + "d0") = d0;
121
122 m_variables.at(m_prefix + "seed_Charge") = recoTrack.getChargeSeed();
123
124 m_variables.at(m_prefix + "seed_Pos_Pt") = recoTrack.getPositionSeed().Rho();
125 m_variables.at(m_prefix + "seed_Pos_Z") = recoTrack.getPositionSeed().Z();
126 m_variables.at(m_prefix + "seed_Pos_Mag") = recoTrack.getPositionSeed().R();
127 m_variables.at(m_prefix + "seed_Pos_Theta") = recoTrack.getPositionSeed().Theta();
128 m_variables.at(m_prefix + "seed_Pos_Phi") = recoTrack.getPositionSeed().Phi();
129
130 m_variables.at(m_prefix + "seed_Mom_Pt") = recoTrack.getMomentumSeed().Rho();
131 m_variables.at(m_prefix + "seed_Mom_Z") = recoTrack.getMomentumSeed().Z();
132 m_variables.at(m_prefix + "seed_Mom_Mag") = recoTrack.getMomentumSeed().R();
133 m_variables.at(m_prefix + "seed_Mom_Theta") = recoTrack.getMomentumSeed().Theta();
134 m_variables.at(m_prefix + "seed_Mom_Phi") = recoTrack.getMomentumSeed().Phi();
135
136 m_variables.at(m_prefix + "seed_Time") = recoTrack.getTimeSeed();
137
138 m_variables.at(m_prefix + "N_tracking_hits") = recoTrack.getNumberOfTrackingHits();
139 m_variables.at(m_prefix + "N_CDC_hits") = recoTrack.getNumberOfCDCHits();
140 m_variables.at(m_prefix + "N_SVD_hits") = recoTrack.getNumberOfSVDHits();
141 m_variables.at(m_prefix + "N_PXD_hits") = recoTrack.getNumberOfPXDHits();
142
143 const genfit::FitStatus* rt_TrackFitStatus = recoTrack.getTrackFitStatus();
144 if (rt_TrackFitStatus) {
145 m_variables.at(m_prefix + "Fit_Charge") = rt_TrackFitStatus->getCharge();
146 m_variables.at(m_prefix + "Fit_Chi2") = rt_TrackFitStatus->getChi2();
147 m_variables.at(m_prefix + "Fit_Ndf") = rt_TrackFitStatus->getNdf();
148 m_variables.at(m_prefix + "Fit_NFailedPoints") = rt_TrackFitStatus->getNFailedPoints();
149 m_variables.at(m_prefix + "Fit_PVal") = rt_TrackFitStatus->getPVal();
150 } else {
151 m_variables.at(m_prefix + "Fit_Charge") = -std::numeric_limits<float>::max();
152 m_variables.at(m_prefix + "Fit_Chi2") = -1.;
153 m_variables.at(m_prefix + "Fit_Ndf") = -1.;
154 m_variables.at(m_prefix + "Fit_NFailedPoints") = -1.;
155 m_variables.at(m_prefix + "Fit_PVal") = -1.;
156 }
157
158 m_variables.at(m_prefix + "Fit_Successful") = (float)recoTrack.wasFitSuccessful();
159
160 if (recoTrack.wasFitSuccessful()) {
163
164 genfit::MeasuredStateOnPlane reco_sop;
165 try {
166 reco_sop = recoTrack.getMeasuredStateOnPlaneFromFirstHit();
167 reco_sop.extrapolateToLine(linePoint, lineDirection);
168 m_variables.at(m_prefix + "POCA_Pos_Pt") = reco_sop.getPos().Pt();
169 m_variables.at(m_prefix + "POCA_Pos_Z") = reco_sop.getPos().Z();
170 m_variables.at(m_prefix + "POCA_Pos_Mag") = reco_sop.getPos().Mag();
171 m_variables.at(m_prefix + "POCA_Pos_Theta") = reco_sop.getPos().Theta();
172 m_variables.at(m_prefix + "POCA_Pos_Phi") = reco_sop.getPos().Phi();
173
174 m_variables.at(m_prefix + "POCA_Mom_Pt") = reco_sop.getMom().Pt();
175 m_variables.at(m_prefix + "POCA_Mom_Z") = reco_sop.getMom().Z();
176 m_variables.at(m_prefix + "POCA_Mom_Mag") = reco_sop.getMom().Mag();
177 m_variables.at(m_prefix + "POCA_Mom_Theta") = reco_sop.getMom().Theta();
178 m_variables.at(m_prefix + "POCA_Mom_Phi") = reco_sop.getMom().Phi();
179 } catch (genfit::Exception const& e) {
180
181 B2WARNING("RecoTrackExtractor: recoTrack BeamPipe POCA extrapolation failed!\n"
182 << "-->" << e.what());
183 m_variables.at(m_prefix + "POCA_Pos_Pt") = -1;
184 m_variables.at(m_prefix + "POCA_Pos_Z") = -std::numeric_limits<float>::max();
185 m_variables.at(m_prefix + "POCA_Pos_Mag") = -1;
186 m_variables.at(m_prefix + "POCA_Pos_Theta") = -10;
187 m_variables.at(m_prefix + "POCA_Pos_Phi") = -10;
188
189 m_variables.at(m_prefix + "POCA_Mom_Pt") = -1;
190 m_variables.at(m_prefix + "POCA_Mom_Z") = -std::numeric_limits<float>::max();
191 m_variables.at(m_prefix + "POCA_Mom_Mag") = -1;
192 m_variables.at(m_prefix + "POCA_Mom_Theta") = -10;
193 m_variables.at(m_prefix + "POCA_Mom_Phi") = -10;
194 }
195 } else {
196 m_variables.at(m_prefix + "POCA_Pos_Pt") = -1;
197 m_variables.at(m_prefix + "POCA_Pos_Z") = -std::numeric_limits<float>::max();
198 m_variables.at(m_prefix + "POCA_Pos_Mag") = -1;
199 m_variables.at(m_prefix + "POCA_Pos_Theta") = -10;
200 m_variables.at(m_prefix + "POCA_Pos_Phi") = -10;
201
202 m_variables.at(m_prefix + "POCA_Mom_Pt") = -1;
203 m_variables.at(m_prefix + "POCA_Mom_Z") = -std::numeric_limits<float>::max();
204 m_variables.at(m_prefix + "POCA_Mom_Mag") = -1;
205 m_variables.at(m_prefix + "POCA_Mom_Theta") = -10;
206 m_variables.at(m_prefix + "POCA_Mom_Phi") = -10;
207 }
208
209 }
B2Vector3< double > B2Vector3D
typedef for common usage with double