71 m_mc_truthTreeIndex{},
77 declareInterface<ITrackValidationNtupleTool>(
this);
78 declareProperty(
"ExtrapolatorTool", m_extrapolator,
"Extrapolator, eg for tracks without Perigee");
93 return StatusCode::SUCCESS;
102 return StatusCode::SUCCESS;
106 if (!
tree)
return StatusCode::FAILURE;
111 tree->Branch(
"RecD0", &m_Rec_d0 );
112 tree->Branch(
"RecZ0", &m_Rec_z0 );
113 tree->Branch(
"RecPhi0", &m_Rec_phi0 );
114 tree->Branch(
"RecTheta", &m_Rec_theta );
115 tree->Branch(
"RecEta", &m_Rec_eta );
116 tree->Branch(
"RecQoverP", &m_Rec_qOverP );
119 tree->Branch(
"RecErrD0", &m_errord0 );
120 tree->Branch(
"RecErrZ0", &m_errorz0 );
121 tree->Branch(
"RecErrPhi0", &m_errorphi0 );
122 tree->Branch(
"RecErrTheta", &m_errortheta0 );
123 tree->Branch(
"RecErrQoverP", &m_errorqoverp );
127 tree->Branch(
"trk_Mc_d0", &m_mc_d0 );
128 tree->Branch(
"trk_Mc_z0", &m_mc_z0 );
129 tree->Branch(
"trk_Mc_phi0", &m_mc_phi0 );
130 tree->Branch(
"trk_Mc_theta", &m_mc_theta );
131 tree->Branch(
"trk_Mc_qOverP", &m_mc_qOverP );
132 tree->Branch(
"trk_Mc_qOverPt", &m_mc_qOverPt );
133 tree->Branch(
"trk_Mc_eta", &m_mc_eta );
135 tree->Branch(
"trk_Mc_diff_d0", &m_mc_diff_d0 );
136 tree->Branch(
"trk_Mc_diff_z0", &m_mc_diff_z0 );
137 tree->Branch(
"trk_Mc_diff_phi0", &m_mc_diff_phi0 );
138 tree->Branch(
"trk_Mc_diff_theta", &m_mc_diff_theta );
139 tree->Branch(
"trk_Mc_diff_qOverP", &m_mc_diff_qOverP );
141 tree->Branch(
"trk_Mc_pull_d0", &m_mc_pull_d0 );
142 tree->Branch(
"trk_Mc_pull_z0", &m_mc_pull_z0 );
143 tree->Branch(
"trk_Mc_pull_phi0", &m_mc_pull_phi0 );
144 tree->Branch(
"trk_Mc_pull_theta", &m_mc_pull_theta );
145 tree->Branch(
"trk_Mc_pull_qOverP", &m_mc_pull_qOverP );
147 tree->Branch(
"trk_Mc_particleID", &m_mc_particleID );
148 tree->Branch(
"trk_Mc_barcode", &m_mc_barcode );
149 tree->Branch(
"trk_Mc_energy", &m_mc_energy );
150 tree->Branch(
"trk_Mc_prob", &m_mc_prob );
151 tree->Branch(
"trk_Mc_truthTreeIndex",&m_mc_truthTreeIndex );
158 return StatusCode::SUCCESS;
167 const unsigned int ) {
171 const EventContext& ctx = Gaudi::Hive::currentContext();
175 if (perpars !=
nullptr && fillTrackPerigee(perpars).isFailure()) {
176 msg(MSG::WARNING) <<
"Perigee parameters could not be written to ntuple" <<
endmsg;
178 if (perpars ==
nullptr) {
180 !m_extrapolator.empty() ) {
183 std::unique_ptr<const Trk::TrackParameters>
tmp = m_extrapolator->extrapolateTrack(
188 if (perpars !=
nullptr && fillTrackPerigee(perpars).isFailure()) {
189 msg(MSG::WARNING) <<
"Newly made perigee parameters could not be "
190 <<
"written to ntuple" <<
endmsg;
192 if (perpars !=
nullptr)
delete perpars;
194 msg(MSG::WARNING) <<
"No perigee parameters, but they are the main validation object!"
197 return StatusCode::SUCCESS;
210 if (perpars !=
nullptr && fillTrackPerigee(perpars).isFailure())
212 return StatusCode::SUCCESS;
225 if ( !m_doTruth )
return StatusCode::SUCCESS;
231 m_mc_barcode = particleLink.
barcode();
233 m_mc_truthTreeIndex = indexInTruthTree;
238 m_mc_particleID = genParticle->pdg_id();
239 m_mc_energy = genParticle->momentum().e();
242 if (truePerigee ==
nullptr)
return StatusCode::SUCCESS;
244 m_mc_d0 = truePerigee->parameters()[
Trk::d0];
245 m_mc_z0 = truePerigee->parameters()[
Trk::z0];
246 m_mc_phi0 = truePerigee->parameters()[
Trk::phi0];
247 m_mc_theta = truePerigee->parameters()[
Trk::theta];
248 m_mc_qOverP = truePerigee->parameters()[
Trk::qOverP];
250 if (
sin( m_mc_theta ) != 0. )
251 m_mc_qOverPt = m_mc_qOverP /
sin( m_mc_theta );
253 m_mc_eta = truePerigee->
eta();
255 m_mc_diff_d0 = m_Rec_d0 - m_mc_d0;
256 m_mc_diff_z0 = m_Rec_z0 - m_mc_z0;
257 m_mc_diff_phi0 = m_Rec_phi0 - m_mc_phi0;
258 m_mc_diff_theta = m_Rec_theta - m_mc_theta;
259 m_mc_diff_qOverP = m_Rec_qOverP - m_mc_qOverP;
261 m_mc_pull_d0 = m_errord0 ? m_mc_diff_d0 / m_errord0 : 0.;
262 m_mc_pull_z0 = m_errorz0 ? m_mc_diff_z0 / m_errorz0 : 0.;
263 m_mc_pull_phi0 = m_errorphi0 ? m_mc_diff_phi0 / m_errorphi0 : 0.;
264 m_mc_pull_theta = m_errortheta0 ? m_mc_diff_theta / m_errortheta0 : 0.;
265 m_mc_pull_qOverP = m_errorqoverp ? m_mc_diff_qOverP / m_errorqoverp : 0.;
267 return StatusCode::SUCCESS;
281 msg(MSG::WARNING) <<
"Something is wrong - track has no perigee at all!" <<
endmsg;
287 return StatusCode::FAILURE;
292 m_Rec_d0 = perigee->parameters()[
Trk::d0];
293 m_Rec_z0 = perigee->parameters()[
Trk::z0];
294 m_Rec_phi0 = perigee->parameters()[
Trk::phi0];
295 m_Rec_theta = perigee->parameters()[
Trk::theta];
296 m_Rec_eta = perigee->eta();
301 if (perigee->covariance()) {
315 ATH_MSG_DEBUG (
"Trackparameters: d0=" << m_Rec_d0 <<
", z0=" << m_Rec_z0 <<
", phi0=" << m_Rec_phi0 <<
", theta=" << m_Rec_theta);
317 return StatusCode::SUCCESS;