diff --git a/PWGDQ/Tasks/muonGlobalAlignment.cxx b/PWGDQ/Tasks/muonGlobalAlignment.cxx index e9af7a782fa..c99a7548e7c 100644 --- a/PWGDQ/Tasks/muonGlobalAlignment.cxx +++ b/PWGDQ/Tasks/muonGlobalAlignment.cxx @@ -1301,8 +1301,8 @@ struct muonGlobalAlignment { // o2-linter: disable=name/workflow-file,name/struc collision.posX(), collision.posY(), collision.posZ(), - collision.covXX(), - collision.covYY()); + std::sqrt(collision.covXX()), + std::sqrt(collision.covYY())); } template @@ -1449,24 +1449,20 @@ struct muonGlobalAlignment { // o2-linter: disable=name/workflow-file,name/struc { // extrapolation with MCH tools auto mchTrackAtMFT = FwdtoMCH(mchTrackPar); - o2::mch::TrackExtrap::extrapToVertexWithoutBranson(mchTrackAtMFT, mftTrackPar.getZ()); - - auto mftTrackProp = FwdtoMCH(mftTrackPar); + o2::mch::TrackExtrap::extrapToVertex(mchTrackAtMFT, + mftTrackPar.getX(), + mftTrackPar.getY(), + mftTrackPar.getZ(), + std::sqrt(mftTrackPar.getSigma2X()), + std::sqrt(mftTrackPar.getSigma2Y())); - // update global track momentum from the MCH track - double pRatio = mftTrackProp.p() / mchTrackAtMFT.p(); - double newInvBendMom = mftTrackProp.getInverseBendingMomentum() * pRatio; - mftTrackProp.setInverseBendingMomentum(newInvBendMom); - mftTrackProp.setCharge(mchTrackAtMFT.getCharge()); + auto fwdTrackProp = fwdtrackutils::refitGlobalMuonCov(MCHtoFwd(mchTrackAtMFT), mftTrackPar); - o2::mch::TrackExtrap::extrapToVertex(mftTrackProp, - collision.posX(), - collision.posY(), - collision.posZ(), - collision.covXX(), - collision.covYY()); + auto geoMan = o2::base::GeometryManager::meanMaterialBudget(fwdTrackProp.getX(), fwdTrackProp.getY(), fwdTrackProp.getZ(), collision.posX(), collision.posY(), collision.posZ()); + auto x2x0 = static_cast(geoMan.meanX2X0); + fwdTrackProp.propagateToVtxhelixWithMCS(collision.posZ(), {collision.posX(), collision.posY()}, {collision.covXX(), collision.covYY()}, mBzAtMftCenter, x2x0); - return MCHtoFwd(mftTrackProp); + return fwdTrackProp; } void getMuonPairs(const CollisionInfo& collisionInfo, diff --git a/PWGDQ/Tasks/qaMatching.cxx b/PWGDQ/Tasks/qaMatching.cxx index 217d8d73278..e2e37dab82d 100644 --- a/PWGDQ/Tasks/qaMatching.cxx +++ b/PWGDQ/Tasks/qaMatching.cxx @@ -17,6 +17,7 @@ #include "PWGDQ/Core/VarManager.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" @@ -1640,8 +1641,8 @@ struct QaMatching { collision.posX(), collision.posY(), collision.posZ(), - collision.covXX(), - collision.covYY()); + std::sqrt(collision.covXX()), + std::sqrt(collision.covYY())); } o2::dataformats::GlobalFwdTrack propagateToVertexMft(o2::dataformats::GlobalFwdTrack muon, @@ -1667,8 +1668,8 @@ struct QaMatching { collision.posX(), collision.posY(), collision.posZ(), - collision.covXX(), - collision.covYY()); + std::sqrt(collision.covXX()), + std::sqrt(collision.covYY())); } template @@ -1678,24 +1679,19 @@ struct QaMatching { { // extrapolation with MCH tools auto mchTrackAtMFT = mExtrap.FwdtoMCH(fwdToTrackPar(mchTrack)); - o2::mch::TrackExtrap::extrapToVertexWithoutBranson(mchTrackAtMFT, mftTrack.z()); + o2::mch::TrackExtrap::extrapToVertex(mchTrackAtMFT, + mftTrack.x(), + mftTrack.y(), + mftTrack.z(), + 0, 0); - auto mftTrackProp = mExtrap.FwdtoMCH(fwdToTrackPar(mftTrack)); + auto fwdTrackProp = fwdtrackutils::refitGlobalMuonCov(mExtrap.MCHtoFwd(mchTrackAtMFT), fwdToTrackPar(mftTrack)); - // update global track momentum from the MCH track - double pRatio = mftTrackProp.p() / mchTrackAtMFT.p(); - double newInvBendMom = mftTrackProp.getInverseBendingMomentum() * pRatio; - mftTrackProp.setInverseBendingMomentum(newInvBendMom); - mftTrackProp.setCharge(mchTrackAtMFT.getCharge()); - - o2::mch::TrackExtrap::extrapToVertex(mftTrackProp, - collision.posX(), - collision.posY(), - collision.posZ(), - collision.covXX(), - collision.covYY()); + auto geoMan = o2::base::GeometryManager::meanMaterialBudget(fwdTrackProp.getX(), fwdTrackProp.getY(), fwdTrackProp.getZ(), collision.posX(), collision.posY(), collision.posZ()); + auto x2x0 = static_cast(geoMan.meanX2X0); + fwdTrackProp.propagateToVtxhelixWithMCS(collision.posZ(), {collision.posX(), collision.posY()}, {collision.covXX(), collision.covYY()}, mBzAtMftCenter, x2x0); - return mExtrap.MCHtoFwd(mftTrackProp); + return fwdTrackProp; } template