From 678aac3ba77c25480e73c9990bdeeb91caede583 Mon Sep 17 00:00:00 2001 From: aferrero2707 Date: Tue, 15 Sep 2026 11:24:24 +0200 Subject: [PATCH] [MUON] fix computation of delta phi in MFT-MCH matching The value of delta phi between the MFT and MCH tracks at the matching plane is restricted to the [-pi, pi] range, to fix the cases of large angular differences when the MFT and MCH tracks are at the opposite side of the horizontal plane at negative X values. --- Detectors/GlobalTracking/src/MatchGlobalFwd.cxx | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/Detectors/GlobalTracking/src/MatchGlobalFwd.cxx b/Detectors/GlobalTracking/src/MatchGlobalFwd.cxx index 7ed50ce7400ae..9b2690ae34597 100644 --- a/Detectors/GlobalTracking/src/MatchGlobalFwd.cxx +++ b/Detectors/GlobalTracking/src/MatchGlobalFwd.cxx @@ -889,6 +889,17 @@ o2::mch::TrackParam MatchGlobalFwd::FwdtoMCH(const o2::dataformats::GlobalFwdTra return o2::mch::TrackParam(convertedTrack); } +/// Constrains angle to be within the [-pi, pi] range. +/// \note Inspired by TVector2::Phi_mpi_pi in ROOT. +/// \param angle angle +/// \return value of angle within [-pi, pi]. +static double constrainAngle(double angle) +{ + while (angle >= o2::constants::math::PI) angle -= o2::constants::math::TwoPI; + while (angle < -o2::constants::math::PI) angle += o2::constants::math::TwoPI; + return angle; +} + //_________________________________________________________________________________________________ MatchGlobalFwd::MatchGlobalFwd() { @@ -926,6 +937,9 @@ MatchGlobalFwd::MatchGlobalFwd() // Update Parameters r_k_kminus1 = m_k - H_k * GlobalMuonTrackParameters; // Residuals of prediction + // Restrict the phi residual to the [-pi, pi] range + r_k_kminus1[2] = constrainAngle(r_k_kminus1[2]); + auto matchChi2Track = ROOT::Math::Similarity(r_k_kminus1, invResCov); return matchChi2Track; @@ -963,6 +977,9 @@ MatchGlobalFwd::MatchGlobalFwd() // Residuals of prediction r_k_kminus1 = m_k - H_k * GlobalMuonTrackParameters; + // Restrict the phi residual to the [-pi, pi] range + r_k_kminus1[2] = constrainAngle(r_k_kminus1[2]); + auto matchChi2Track = ROOT::Math::Similarity(r_k_kminus1, invResCov); return matchChi2Track; };