From d47eb3ee7f2fb8b52636bddb1c915dc5f162cea2 Mon Sep 17 00:00:00 2001 From: Maurice Coquet Date: Thu, 23 Apr 2026 18:23:46 +0200 Subject: [PATCH 1/2] [PWGDQ] Using fwdUtilities tools for muon propagation --- PWGDQ/Core/VarManager.h | 29 ++++++++++++------- .../TableProducer/tableMakerMC_withAssoc.cxx | 4 ++- PWGDQ/TableProducer/tableMaker_withAssoc.cxx | 4 ++- PWGDQ/Tasks/mftMchMatcher.cxx | 11 ++++--- 4 files changed, 32 insertions(+), 16 deletions(-) diff --git a/PWGDQ/Core/VarManager.h b/PWGDQ/Core/VarManager.h index e39a7ae2aaf..6b42a762560 100644 --- a/PWGDQ/Core/VarManager.h +++ b/PWGDQ/Core/VarManager.h @@ -1178,6 +1178,11 @@ class VarManager : public TObject fgMagField = magField; } + static float GetMagneticField() + { + return fgMagField; + } + // Setup plane position for MFT-MCH matching static void SetMatchingPlane(float z) { @@ -1195,6 +1200,11 @@ class VarManager : public TObject fgzShiftFwd = z; } + static float GetZShift() + { + return fgzShiftFwd; + } + // Setup the 2 prong KFParticle static void SetupTwoProngKFParticle(float magField) { @@ -1734,8 +1744,7 @@ void VarManager::FillMuonPDca(const T& muon, const C& collision, float* values) if constexpr ((fillMap & MuonCov) > 0 || (fillMap & ReducedMuonCov) > 0) { - o2::dataformats::GlobalFwdTrack propmuon = PropagateMuon(muon, collision); - o2::dataformats::GlobalFwdTrack propmuonAtDCA = PropagateMuon(muon, collision, kToDCA); + o2::dataformats::GlobalFwdTrack propmuonAtDCA = o2::aod::fwdtrackutils::propagateMuon(muon, muon, collision, o2::aod::fwdtrackutils::propagationPoint::kToDCA, fgzShiftFwd, fgMagField); float dcaX = (propmuonAtDCA.getX() - collision.posX()); float dcaY = (propmuonAtDCA.getY() - collision.posY()); @@ -1758,7 +1767,7 @@ void VarManager::FillPropagateMuon(const T& muon, const C& collision, float* val } if constexpr ((fillMap & MuonCov) > 0 || (fillMap & ReducedMuonCov) > 0 || (fillMap & MuonCovRealign) > 0) { - o2::dataformats::GlobalFwdTrack propmuon = PropagateMuon(muon, collision); + o2::dataformats::GlobalFwdTrack propmuon = o2::aod::fwdtrackutils::propagateMuon(muon, muon, collision, o2::aod::fwdtrackutils::propagationPoint::kToVertex, fgzShiftFwd, fgMagField); values[kPt] = propmuon.getPt(); values[kX] = propmuon.getX(); values[kY] = propmuon.getY(); @@ -1770,8 +1779,8 @@ void VarManager::FillPropagateMuon(const T& muon, const C& collision, float* val // Redo propagation only for muon tracks // propagation of MFT tracks alredy done in fwdtrack-extention task if (static_cast(muon.trackType()) > 2) { - o2::dataformats::GlobalFwdTrack propmuonAtDCA = PropagateMuon(muon, collision, kToDCA); - o2::dataformats::GlobalFwdTrack propmuonAtRabs = PropagateMuon(muon, collision, kToRabs); + o2::dataformats::GlobalFwdTrack propmuonAtDCA = o2::aod::fwdtrackutils::propagateMuon(muon, muon, collision, o2::aod::fwdtrackutils::propagationPoint::kToDCA, fgzShiftFwd, fgMagField); + o2::dataformats::GlobalFwdTrack propmuonAtRabs = o2::aod::fwdtrackutils::propagateMuon(muon, muon, collision, o2::aod::fwdtrackutils::propagationPoint::kToRabs, 0, fgMagField); float dcaX = (propmuonAtDCA.getX() - collision.posX()); float dcaY = (propmuonAtDCA.getY() - collision.posY()); values[kMuonDCAx] = dcaX; @@ -1807,7 +1816,7 @@ void VarManager::FillGlobalMuonRefit(T1 const& muontrack, T2 const& mfttrack, co values = fgValues; } if constexpr ((fillMap & MuonCov) > 0 || (fillMap & ReducedMuonCov) > 0) { - o2::dataformats::GlobalFwdTrack propmuon = PropagateMuon(muontrack, collision); + o2::dataformats::GlobalFwdTrack propmuon = o2::aod::fwdtrackutils::propagateMuon(muontrack, muontrack, collision, o2::aod::fwdtrackutils::propagationPoint::kToVertex, fgzShiftFwd, fgMagField); double px = propmuon.getP() * sin(M_PI / 2 - atan(mfttrack.tgl())) * cos(mfttrack.phi()); double py = propmuon.getP() * sin(M_PI / 2 - atan(mfttrack.tgl())) * sin(mfttrack.phi()); double pz = propmuon.getP() * cos(M_PI / 2 - atan(mfttrack.tgl())); @@ -1832,7 +1841,7 @@ void VarManager::FillGlobalMuonRefitCov(T1 const& muontrack, T2 const& mfttrack, } if constexpr ((MuonfillMap & MuonCov) > 0) { if constexpr ((MFTfillMap & MFTCov) > 0) { - o2::dataformats::GlobalFwdTrack propmuon = PropagateMuon(muontrack, collision); + o2::dataformats::GlobalFwdTrack propmuon = o2::aod::fwdtrackutils::propagateMuon(muontrack, muontrack, collision, o2::aod::fwdtrackutils::propagationPoint::kToVertex, fgzShiftFwd, fgMagField); auto mft = o2::aod::fwdtrackutils::getTrackParCovFwdShift(mfttrack, fgzShiftFwd, mftcov); o2::dataformats::GlobalFwdTrack globalRefit = o2::aod::fwdtrackutils::refitGlobalMuonCov(propmuon, mft); @@ -3166,7 +3175,7 @@ void VarManager::FillTrackCollision(T const& track, C const& collision, float* v } if constexpr ((fillMap & MuonCov) > 0 || (fillMap & MuonCovRealign) > 0 || (fillMap & ReducedMuonCov) > 0) { - o2::dataformats::GlobalFwdTrack propmuonAtDCA = PropagateMuon(track, collision, kToDCA); + o2::dataformats::GlobalFwdTrack propmuonAtDCA = o2::aod::fwdtrackutils::propagateMuon(track, track, collision, o2::aod::fwdtrackutils::propagationPoint::kToDCA, fgzShiftFwd, fgMagField); float dcaX = (propmuonAtDCA.getX() - collision.posX()); float dcaY = (propmuonAtDCA.getY() - collision.posY()); @@ -3427,8 +3436,8 @@ void VarManager::FillPairPropagateMuon(T1 const& muon1, T2 const& muon2, const C if (!values) { values = fgValues; } - o2::dataformats::GlobalFwdTrack propmuon1 = PropagateMuon(muon1, collision); - o2::dataformats::GlobalFwdTrack propmuon2 = PropagateMuon(muon2, collision); + o2::dataformats::GlobalFwdTrack propmuon1 = o2::aod::fwdtrackutils::propagateMuon(muon1, muon1, collision, o2::aod::fwdtrackutils::propagationPoint::kToVertex, fgzShiftFwd, fgMagField); + o2::dataformats::GlobalFwdTrack propmuon2 = o2::aod::fwdtrackutils::propagateMuon(muon2, muon2, collision, o2::aod::fwdtrackutils::propagationPoint::kToVertex, fgzShiftFwd, fgMagField); float m = o2::constants::physics::MassMuon; diff --git a/PWGDQ/TableProducer/tableMakerMC_withAssoc.cxx b/PWGDQ/TableProducer/tableMakerMC_withAssoc.cxx index 39cee24788c..fad4c056035 100644 --- a/PWGDQ/TableProducer/tableMakerMC_withAssoc.cxx +++ b/PWGDQ/TableProducer/tableMakerMC_withAssoc.cxx @@ -29,6 +29,7 @@ #include "Common/CCDB/EventSelectionParams.h" #include "Common/CCDB/RCTSelectionFlags.h" +#include "Common/Core/fwdtrackUtilities.h" #include "Common/DataModel/Centrality.h" #include "Common/DataModel/CollisionAssociationTables.h" #include "Common/DataModel/EventSelection.h" @@ -1074,8 +1075,9 @@ struct TableMakerMC { o2::track::TrackParCovFwd mftprop = VarManager::FwdToTrackPar(mfttrack, mfttrackcov); o2::dataformats::GlobalFwdTrack muonprop = VarManager::FwdToTrackPar(muontrack, muontrack); if (fConfigVariousOptions.fzMatching.value < 0.) { + float bz = VarManager::GetMagneticField(); mftprop = VarManager::PropagateFwd(mfttrack, mfttrackcov, fConfigVariousOptions.fzMatching.value); - muonprop = VarManager::PropagateMuon(muontrack, collision, VarManager::kToMatching); + muonprop = o2::aod::fwdtrackutils::propagateMuon(muontrack, muontrack, collision, o2::aod::fwdtrackutils::propagationPoint::kToMatchingPlane, fConfigVariousOptions.fzMatching.value, bz); } std::vector output; std::vector inputML = matchingMlResponse.getInputFeaturesGlob(muon, muonprop, mftprop, collision); diff --git a/PWGDQ/TableProducer/tableMaker_withAssoc.cxx b/PWGDQ/TableProducer/tableMaker_withAssoc.cxx index adc962dc783..5331bd8838d 100644 --- a/PWGDQ/TableProducer/tableMaker_withAssoc.cxx +++ b/PWGDQ/TableProducer/tableMaker_withAssoc.cxx @@ -31,6 +31,7 @@ #include "Common/CCDB/RCTSelectionFlags.h" #include "Common/CCDB/ctpRateFetcher.h" #include "Common/Core/Zorro.h" +#include "Common/Core/fwdtrackUtilities.h" #include "Common/DataModel/Centrality.h" #include "Common/DataModel/CollisionAssociationTables.h" #include "Common/DataModel/EventSelection.h" @@ -1479,8 +1480,9 @@ struct TableMaker { o2::track::TrackParCovFwd mftprop = VarManager::FwdToTrackPar(mfttrack, mfttrackcov); o2::dataformats::GlobalFwdTrack muonprop = VarManager::FwdToTrackPar(muontrack, muontrack); if (fConfigVariousOptions.fzMatching.value < 0.) { + float bz = VarManager::GetMagneticField(); mftprop = VarManager::PropagateFwd(mfttrack, mfttrackcov, fConfigVariousOptions.fzMatching.value); - muonprop = VarManager::PropagateMuon(muontrack, collision, VarManager::kToMatching); + muonprop = o2::aod::fwdtrackutils::propagateMuon(muontrack, muontrack, collision, o2::aod::fwdtrackutils::propagationPoint::kToMatchingPlane, fConfigVariousOptions.fzMatching.value, bz); } std::vector output; std::vector inputML = matchingMlResponse.getInputFeaturesGlob(muon, muonprop, mftprop, collision); diff --git a/PWGDQ/Tasks/mftMchMatcher.cxx b/PWGDQ/Tasks/mftMchMatcher.cxx index 12381a9cde3..55a81151ad9 100644 --- a/PWGDQ/Tasks/mftMchMatcher.cxx +++ b/PWGDQ/Tasks/mftMchMatcher.cxx @@ -18,6 +18,7 @@ #include "Common/DataModel/EventSelection.h" #include "Common/DataModel/Multiplicity.h" #include "Common/DataModel/TrackSelectionTables.h" +#include "Common/Core/fwdtrackUtilities.h" #include #include @@ -650,10 +651,12 @@ struct mftMchMatcher { o2::track::TrackParCovFwd mftprop = VarManager::FwdToTrackPar(mfttrack, mfttrackcov); o2::track::TrackParCovFwd muonprop = VarManager::FwdToTrackPar(muontrack, muontrack); - if (fzMatching.value < 0.) { - mftprop = VarManager::PropagateFwd(mfttrack, mfttrackcov, fzMatching.value); - muonprop = VarManager::PropagateMuon(muontrack, collision, VarManager::kToMatching); - } + if (fzMatching.value < 0.) { + float bz = VarManager::GetMagneticField(); + mftprop = VarManager::PropagateFwd(mfttrack, mfttrackcov, fzMatching.value); + muonprop = o2::aod::fwdtrackutils::propagateMuon(muontrack, muontrack, collision, o2::aod::fwdtrackutils::propagationPoint::kToMatchingPlane, fzMatching.value, bz); + } + auto muonpropCov = muonprop.getCovariances(); auto mftpropCov = mftprop.getCovariances(); From fbd6412329cc82f1fa8226023afb807f9e8555fa Mon Sep 17 00:00:00 2001 From: Maurice Coquet Date: Thu, 23 Apr 2026 18:25:26 +0200 Subject: [PATCH 2/2] clang format --- PWGDQ/TableProducer/tableMakerMC_withAssoc.cxx | 4 ++-- PWGDQ/TableProducer/tableMaker_withAssoc.cxx | 4 ++-- PWGDQ/Tasks/mftMchMatcher.cxx | 12 ++++++------ 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/PWGDQ/TableProducer/tableMakerMC_withAssoc.cxx b/PWGDQ/TableProducer/tableMakerMC_withAssoc.cxx index fad4c056035..3cf0f3911ed 100644 --- a/PWGDQ/TableProducer/tableMakerMC_withAssoc.cxx +++ b/PWGDQ/TableProducer/tableMakerMC_withAssoc.cxx @@ -1075,9 +1075,9 @@ struct TableMakerMC { o2::track::TrackParCovFwd mftprop = VarManager::FwdToTrackPar(mfttrack, mfttrackcov); o2::dataformats::GlobalFwdTrack muonprop = VarManager::FwdToTrackPar(muontrack, muontrack); if (fConfigVariousOptions.fzMatching.value < 0.) { - float bz = VarManager::GetMagneticField(); + float bz = VarManager::GetMagneticField(); mftprop = VarManager::PropagateFwd(mfttrack, mfttrackcov, fConfigVariousOptions.fzMatching.value); - muonprop = o2::aod::fwdtrackutils::propagateMuon(muontrack, muontrack, collision, o2::aod::fwdtrackutils::propagationPoint::kToMatchingPlane, fConfigVariousOptions.fzMatching.value, bz); + muonprop = o2::aod::fwdtrackutils::propagateMuon(muontrack, muontrack, collision, o2::aod::fwdtrackutils::propagationPoint::kToMatchingPlane, fConfigVariousOptions.fzMatching.value, bz); } std::vector output; std::vector inputML = matchingMlResponse.getInputFeaturesGlob(muon, muonprop, mftprop, collision); diff --git a/PWGDQ/TableProducer/tableMaker_withAssoc.cxx b/PWGDQ/TableProducer/tableMaker_withAssoc.cxx index 5331bd8838d..4fe666b7510 100644 --- a/PWGDQ/TableProducer/tableMaker_withAssoc.cxx +++ b/PWGDQ/TableProducer/tableMaker_withAssoc.cxx @@ -1480,9 +1480,9 @@ struct TableMaker { o2::track::TrackParCovFwd mftprop = VarManager::FwdToTrackPar(mfttrack, mfttrackcov); o2::dataformats::GlobalFwdTrack muonprop = VarManager::FwdToTrackPar(muontrack, muontrack); if (fConfigVariousOptions.fzMatching.value < 0.) { - float bz = VarManager::GetMagneticField(); + float bz = VarManager::GetMagneticField(); mftprop = VarManager::PropagateFwd(mfttrack, mfttrackcov, fConfigVariousOptions.fzMatching.value); - muonprop = o2::aod::fwdtrackutils::propagateMuon(muontrack, muontrack, collision, o2::aod::fwdtrackutils::propagationPoint::kToMatchingPlane, fConfigVariousOptions.fzMatching.value, bz); + muonprop = o2::aod::fwdtrackutils::propagateMuon(muontrack, muontrack, collision, o2::aod::fwdtrackutils::propagationPoint::kToMatchingPlane, fConfigVariousOptions.fzMatching.value, bz); } std::vector output; std::vector inputML = matchingMlResponse.getInputFeaturesGlob(muon, muonprop, mftprop, collision); diff --git a/PWGDQ/Tasks/mftMchMatcher.cxx b/PWGDQ/Tasks/mftMchMatcher.cxx index 55a81151ad9..322a7a1d95e 100644 --- a/PWGDQ/Tasks/mftMchMatcher.cxx +++ b/PWGDQ/Tasks/mftMchMatcher.cxx @@ -14,11 +14,11 @@ #include "PWGDQ/Core/VarManager.h" +#include "Common/Core/fwdtrackUtilities.h" #include "Common/DataModel/CollisionAssociationTables.h" #include "Common/DataModel/EventSelection.h" #include "Common/DataModel/Multiplicity.h" #include "Common/DataModel/TrackSelectionTables.h" -#include "Common/Core/fwdtrackUtilities.h" #include #include @@ -651,11 +651,11 @@ struct mftMchMatcher { o2::track::TrackParCovFwd mftprop = VarManager::FwdToTrackPar(mfttrack, mfttrackcov); o2::track::TrackParCovFwd muonprop = VarManager::FwdToTrackPar(muontrack, muontrack); - if (fzMatching.value < 0.) { - float bz = VarManager::GetMagneticField(); - mftprop = VarManager::PropagateFwd(mfttrack, mfttrackcov, fzMatching.value); - muonprop = o2::aod::fwdtrackutils::propagateMuon(muontrack, muontrack, collision, o2::aod::fwdtrackutils::propagationPoint::kToMatchingPlane, fzMatching.value, bz); - } + if (fzMatching.value < 0.) { + float bz = VarManager::GetMagneticField(); + mftprop = VarManager::PropagateFwd(mfttrack, mfttrackcov, fzMatching.value); + muonprop = o2::aod::fwdtrackutils::propagateMuon(muontrack, muontrack, collision, o2::aod::fwdtrackutils::propagationPoint::kToMatchingPlane, fzMatching.value, bz); + } auto muonpropCov = muonprop.getCovariances(); auto mftpropCov = mftprop.getCovariances();