50 if(tracks->size() !=0) {
60 for (
const auto track : *tracks) {
64 std::unique_ptr<
AmgSymMatrix(5)> updateTrackCov =
nullptr;
65 float updatephi = -999;
66 float updatetheta = -999;
67 float updated0 = -999;
68 float updatez0 = -999;
69 float updateqOverP = -999;
70 float updateChi2 = -999;
71 bool usedPrimaryVertex =
false;
72 std::vector<float>
vec;
74 std::unique_ptr<const Trk::TrackParameters> trackParams =
nullptr;
85 auto vtxSurface = std::make_unique<Trk::PerigeeSurface>(vtxPos);
86 trackParams =
m_extrapolator->extrapolate(ctx,*tPerigee,*vtxSurface);
87 std::unique_ptr<const Trk::ImpactParametersAndSigma> iPandSigma =
nullptr;
89 if(sqrt(iPandSigma->IPd0*iPandSigma->IPd0+iPandSigma->IPz0*iPandSigma->IPz0) < minIP){
90 minIP = sqrt(iPandSigma->IPd0*iPandSigma->IPd0+iPandSigma->IPz0*iPandSigma->IPz0);
93 ATH_MSG_VERBOSE(
"n vtx pos(x, y, z) IPd0 IPz0 : " << nVtx <<
" " << vtx->position().x() <<
" "<< vtx->position().y() <<
" "<< vtx->position().z() <<
" " << iPandSigma->IPd0 <<
" " << iPandSigma->IPz0);
94 ATH_MSG_VERBOSE(
" d0,Delta_z0-TrackParticle:" << track->d0() <<
", "<< track->z0() - vtx->z() + track->vz());
100 return StatusCode::FAILURE;
111 auto recVtx = std::make_unique<xAOD::Vertex>();
112 recVtx->makePrivateStore(*closestVertex);
113 auto surface = std::make_unique<const Trk::PerigeeSurface>(globPos);
114 trackParams =
m_extrapolator->extrapolate(ctx,*tPerigee,*surface);
115 auto linearTrack = std::make_unique<Trk::VxTrackAtVertex>(0.,
nullptr,
nullptr, trackParams.get(),
nullptr);
119 ATH_MSG_VERBOSE(
"Updating linearized track parameters after vertex fit. Track weight = " << linearTrack->weight());
121 ATH_MSG_VERBOSE (
"track info after vertex track updator !"<<*linearTrack );
122 if(linearTrack->perigeeAtVertex()) {
124 updateqOverP = linearTrack->perigeeAtVertex()->parameters()[
Trk::qOverP];
125 updated0 = linearTrack->perigeeAtVertex()->parameters()[
Trk::d0];
126 updatez0 = linearTrack->perigeeAtVertex()->parameters()[
Trk::z0];
127 updatephi = linearTrack->perigeeAtVertex()->parameters()[
Trk::phi0];
128 updatetheta = linearTrack->perigeeAtVertex()->parameters()[
Trk::theta];
130 updateTrackCov = std::make_unique<AmgSymMatrix(5)>(*linearTrack->perigeeAtVertex()->covariance());
131 updateChi2 = linearTrack->trackQuality().chiSquared();
139 decoratorKVUqOverP(*track) = updateqOverP;
140 decoratorKVUd0(*track) = updated0;
141 decoratorKVUz0(*track) = updatez0;
142 decoratorKVUphi(*track) = updatephi;
143 decoratorKVUtheta(*track) = updatetheta;
144 decoratorKVUChi2(*track) = updateChi2;
145 decoratorKVUusedPV(*track) = usedPrimaryVertex;
151 decoratorKVUCovMat(*track) =
vec;
158 return StatusCode::SUCCESS;