@@ -75,6 +75,45 @@ o2::track::TrackParCovFwd getTrackParCovFwd(TFwdTrack const& track, TFwdTrackCov
7575 return trackparCov;
7676}
7777
78+ // / Produce TrackParCovFwds for MFT and FwdTracks, w/ or w/o cov, with z shift
79+ template <typename TFwdTrack, typename ... TCovariance>
80+ o2::track::TrackParCovFwd getTrackParCovFwdShift (TFwdTrack const & track, float zshift, TCovariance const &... covOpt)
81+ {
82+ double chi2 = track.chi2 ();
83+ if constexpr (sizeof ...(covOpt) == 0 ) {
84+ // No covariance passed
85+ if constexpr (std::is_same_v<std::decay_t <TFwdTrack>, aod::FwdTracks::iterator>) {
86+ if (track.trackType () == o2::aod::fwdtrack::ForwardTrackTypeEnum::MuonStandaloneTrack) {
87+ chi2 = track.chi2 () * (2 .f * track.nClusters () - 5 .f );
88+ }
89+ }
90+ } else {
91+ // Covariance passed
92+ using TCov = std::decay_t <decltype ((covOpt, ...))>;
93+ if constexpr (std::is_same_v<TCov, aod::FwdTracksCov::iterator>) {
94+ if (track.trackType () == o2::aod::fwdtrack::ForwardTrackTypeEnum::MuonStandaloneTrack) {
95+ chi2 = track.chi2 () * (2 .f * track.nClusters () - 5 .f );
96+ }
97+ }
98+ }
99+
100+ SMatrix5 tpars (track.x (), track.y (), track.phi (), track.tgl (), track.signed1Pt ());
101+
102+ SMatrix55 tcovs;
103+ if constexpr (sizeof ...(covOpt) == 1 ) {
104+ auto const & cov = (covOpt, ...);
105+ std::vector<double > v1{
106+ cov.cXX (), cov.cXY (), cov.cYY (), cov.cPhiX (), cov.cPhiY (),
107+ cov.cPhiPhi (), cov.cTglX (), cov.cTglY (), cov.cTglPhi (), cov.cTglTgl (),
108+ cov.c1PtX (), cov.c1PtY (), cov.c1PtPhi (), cov.c1PtTgl (), cov.c1Pt21Pt2 ()};
109+ tcovs = SMatrix55 (v1.begin (), v1.end ());
110+ } else {
111+ tcovs = SMatrix55{};
112+ }
113+
114+ return o2::track::TrackParCovFwd (track.z () + zshift, tpars, tcovs, chi2);
115+ }
116+
78117// / propagate fwdtrack to a certain point.
79118template <typename TFwdTrack, typename TFwdTrackCov, typename TCollision>
80119o2::dataformats::GlobalFwdTrack propagateMuon (TFwdTrack const & muon, TFwdTrackCov const & cov, TCollision const & collision, const propagationPoint endPoint, const float matchingZ, const float bzkG)
0 commit comments