Skip to content

Commit 7ee93e3

Browse files
mcoquet642Maurice Coquet
andauthored
[Common] Adding fwdtrack utility to shift z of tracks (#14197)
Co-authored-by: Maurice Coquet <mcoquet@alicecerno2.cern.ch>
1 parent cdf39af commit 7ee93e3

File tree

1 file changed

+39
-0
lines changed

1 file changed

+39
-0
lines changed

Common/Core/fwdtrackUtilities.h

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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.
79118
template <typename TFwdTrack, typename TFwdTrackCov, typename TCollision>
80119
o2::dataformats::GlobalFwdTrack propagateMuon(TFwdTrack const& muon, TFwdTrackCov const& cov, TCollision const& collision, const propagationPoint endPoint, const float matchingZ, const float bzkG)

0 commit comments

Comments
 (0)