17 constexpr
float dummy_val = -1.;
20 RecordPars() =
default;
23 mom{std::move(mom_)}{}
24 RecordPars(
const CLHEP::Hep3Vector& pos_,
const CLHEP::Hep3Vector& mom_):
25 pos{pos_.x(), pos_.y(), pos_.z()},
26 mom{mom_.x(), mom_.y(), mom_.z()}{
31 std::string record_name{};
42 const std::string&
keyName)
const{
44 const std::string fullKey = recordKey.key() +
"_" +
keyName;
72 return StatusCode::SUCCESS;
102 return StatusCode::SUCCESS;
120 ATH_CHECK(trackRecordCollection.isPresent());
122 const std::string r_name = trackRecordCollection.key();
123 float&
x = (*myDecors.
xDecor[
idx])(truthParticle);
124 float&
y = (*myDecors.
yDecor[
idx])(truthParticle);
125 float&
z = (*myDecors.
zDecor[
idx])(truthParticle);
136 float& ex = (*myDecors.
exDecor[
idx])(truthParticle);
137 float& ey = (*myDecors.
eyDecor[
idx])(truthParticle);
138 float& ez = (*myDecors.
ezDecor[
idx])(truthParticle);
139 float& epx = (*myDecors.
epxDecor[
idx])(truthParticle);
140 float& epy = (*myDecors.
epyDecor[
idx])(truthParticle);
141 float& epz = (*myDecors.
epzDecor[
idx])(truthParticle);
143 ex = ey = ez = epx = epy = epz = dummy_val;
146 for (
const TrackRecord& trackRecord : *trackRecordCollection) {
148 CLHEP::Hep3Vector
pos = trackRecord.GetPosition();
149 CLHEP::Hep3Vector
mom = trackRecord.GetMomentum();
150 ATH_MSG_VERBOSE(
"Found associated " << r_name <<
" pt " <<
mom.perp() <<
" position: r " <<
pos.perp() <<
" z " <<
pos.z());
159 if (!found_truth) {
parameters.emplace_back();}
162 r_pars.record_name = r_name;
166 if (!found_truth)
continue;
168 if (r_name ==
"CaloEntryLayer")
169 volume = trackingGeometry->
trackingVolume(
"InDet::Containers::InnerDetector");
170 else if (r_name ==
"MuonEntryLayer")
172 else if (r_name ==
"MuonExitLayer")
173 volume = trackingGeometry->
trackingVolume(
"Muon::Containers::MuonSystem");
177 r_pars.volume = volume;
184 cov(4, 4) = 1
e-3 / truthParticle.
p4().P();
189 if ( (!start_pars.record_name.empty() && !start_pars.volume) || !end_pars.volume)
continue;
193 const std::string& r_name = end_pars.record_name;
195 float& ex = (*myDecors.
exDecor[end_pars.idx])(truthParticle);
196 float& ey = (*myDecors.
eyDecor[end_pars.idx])(truthParticle);
197 float& ez = (*myDecors.
ezDecor[end_pars.idx])(truthParticle);
198 float& epx = (*myDecors.
epxDecor[end_pars.idx])(truthParticle);
199 float& epy = (*myDecors.
epyDecor[end_pars.idx])(truthParticle);
200 float& epz = (*myDecors.
epzDecor[end_pars.idx])(truthParticle);
202 std::vector<float>& covMat = (*myDecors.
ecovDecor[end_pars.idx])(truthParticle);
204 std::unique_ptr<Trk::TrackParameters> exPars{
210 (*myDecors.
eisDecor[end_pars.idx])(truthParticle) =
true;
211 ex = exPars->position().x();
212 ey = exPars->position().y();
213 ez = exPars->position().z();
214 epx = exPars->momentum().x();
215 epy = exPars->momentum().y();
216 epz = exPars->momentum().z();
221 <<
" truth: r " << end_pars.pos.perp() <<
" z "
222 << end_pars.pos.z() <<
" p "
223 << end_pars.mom.mag() << std::endl
224 <<
" extrp: r " << exPars->position().perp() <<
" z "
225 << exPars->position().z() <<
" p "
226 << exPars->momentum().mag() <<
" res p "
227 << (end_pars.mom.mag() -
228 exPars->momentum().mag())
229 <<
" error " << errorp <<
" cov "
232 << (end_pars.mom.mag() -
233 exPars->momentum().mag()) /
236 return StatusCode::SUCCESS;