Skip to content

Commit e458622

Browse files
committed
[PWGDQ] improved momentum rescaling for global forward tracks
The MCH tracks are extrapolated to the first measured MFT point using TrackExtrap::extrapToVertex() instead of TrackExtrap::extrapToVertexWithoutBranson(), which cures large inaccuracies in the MCH momentum estimation at the MFT front for some tracks. Those inaccuracies were contributing to high-mass tails in the di-muon invariant mass distribution reconstructed from global forward tracks with rescaled momentum.
1 parent 821f296 commit e458622

2 files changed

Lines changed: 28 additions & 36 deletions

File tree

PWGDQ/Tasks/muonGlobalAlignment.cxx

Lines changed: 13 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1301,8 +1301,8 @@ struct muonGlobalAlignment { // o2-linter: disable=name/workflow-file,name/struc
13011301
collision.posX(),
13021302
collision.posY(),
13031303
collision.posZ(),
1304-
collision.covXX(),
1305-
collision.covYY());
1304+
std::sqrt(collision.covXX()),
1305+
std::sqrt(collision.covYY()));
13061306
}
13071307

13081308
template <class TMFT>
@@ -1449,24 +1449,20 @@ struct muonGlobalAlignment { // o2-linter: disable=name/workflow-file,name/struc
14491449
{
14501450
// extrapolation with MCH tools
14511451
auto mchTrackAtMFT = FwdtoMCH(mchTrackPar);
1452-
o2::mch::TrackExtrap::extrapToVertexWithoutBranson(mchTrackAtMFT, mftTrackPar.getZ());
1453-
1454-
auto mftTrackProp = FwdtoMCH(mftTrackPar);
1452+
o2::mch::TrackExtrap::extrapToVertex(mchTrackAtMFT,
1453+
mftTrackPar.getX(),
1454+
mftTrackPar.getY(),
1455+
mftTrackPar.getZ(),
1456+
std::sqrt(mftTrackPar.getSigma2X()),
1457+
std::sqrt(mftTrackPar.getSigma2Y()));
14551458

1456-
// update global track momentum from the MCH track
1457-
double pRatio = mftTrackProp.p() / mchTrackAtMFT.p();
1458-
double newInvBendMom = mftTrackProp.getInverseBendingMomentum() * pRatio;
1459-
mftTrackProp.setInverseBendingMomentum(newInvBendMom);
1460-
mftTrackProp.setCharge(mchTrackAtMFT.getCharge());
1459+
auto fwdTrackProp = fwdtrackutils::refitGlobalMuonCov(MCHtoFwd(mchTrackAtMFT), mftTrackPar);
14611460

1462-
o2::mch::TrackExtrap::extrapToVertex(mftTrackProp,
1463-
collision.posX(),
1464-
collision.posY(),
1465-
collision.posZ(),
1466-
collision.covXX(),
1467-
collision.covYY());
1461+
auto geoMan = o2::base::GeometryManager::meanMaterialBudget(fwdTrackProp.getX(), fwdTrackProp.getY(), fwdTrackProp.getZ(), collision.posX(), collision.posY(), collision.posZ());
1462+
auto x2x0 = static_cast<float>(geoMan.meanX2X0);
1463+
fwdTrackProp.propagateToVtxhelixWithMCS(collision.posZ(), {collision.posX(), collision.posY()}, {collision.covXX(), collision.covYY()}, mBzAtMftCenter, x2x0);
14681464

1469-
return MCHtoFwd(mftTrackProp);
1465+
return fwdTrackProp;
14701466
}
14711467

14721468
void getMuonPairs(const CollisionInfo& collisionInfo,

PWGDQ/Tasks/qaMatching.cxx

Lines changed: 15 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
#include "PWGDQ/Core/VarManager.h"
1818

1919
#include "Common/CCDB/RCTSelectionFlags.h"
20+
#include "Common/Core/fwdtrackUtilities.h"
2021
#include "Common/DataModel/Centrality.h"
2122
#include "Common/DataModel/CollisionAssociationTables.h"
2223
#include "Common/DataModel/EventSelection.h"
@@ -1640,8 +1641,8 @@ struct QaMatching {
16401641
collision.posX(),
16411642
collision.posY(),
16421643
collision.posZ(),
1643-
collision.covXX(),
1644-
collision.covYY());
1644+
std::sqrt(collision.covXX()),
1645+
std::sqrt(collision.covYY()));
16451646
}
16461647

16471648
o2::dataformats::GlobalFwdTrack propagateToVertexMft(o2::dataformats::GlobalFwdTrack muon,
@@ -1667,8 +1668,8 @@ struct QaMatching {
16671668
collision.posX(),
16681669
collision.posY(),
16691670
collision.posZ(),
1670-
collision.covXX(),
1671-
collision.covYY());
1671+
std::sqrt(collision.covXX()),
1672+
std::sqrt(collision.covYY()));
16721673
}
16731674

16741675
template <typename TMCH, typename TMFT, class C>
@@ -1678,24 +1679,19 @@ struct QaMatching {
16781679
{
16791680
// extrapolation with MCH tools
16801681
auto mchTrackAtMFT = mExtrap.FwdtoMCH(fwdToTrackPar(mchTrack));
1681-
o2::mch::TrackExtrap::extrapToVertexWithoutBranson(mchTrackAtMFT, mftTrack.z());
1682+
o2::mch::TrackExtrap::extrapToVertex(mchTrackAtMFT,
1683+
mftTrack.x(),
1684+
mftTrack.y(),
1685+
mftTrack.z(),
1686+
0, 0);
16821687

1683-
auto mftTrackProp = mExtrap.FwdtoMCH(fwdToTrackPar(mftTrack));
1688+
auto fwdTrackProp = fwdtrackutils::refitGlobalMuonCov(mExtrap.MCHtoFwd(mchTrackAtMFT), fwdToTrackPar(mftTrack));
16841689

1685-
// update global track momentum from the MCH track
1686-
double pRatio = mftTrackProp.p() / mchTrackAtMFT.p();
1687-
double newInvBendMom = mftTrackProp.getInverseBendingMomentum() * pRatio;
1688-
mftTrackProp.setInverseBendingMomentum(newInvBendMom);
1689-
mftTrackProp.setCharge(mchTrackAtMFT.getCharge());
1690-
1691-
o2::mch::TrackExtrap::extrapToVertex(mftTrackProp,
1692-
collision.posX(),
1693-
collision.posY(),
1694-
collision.posZ(),
1695-
collision.covXX(),
1696-
collision.covYY());
1690+
auto geoMan = o2::base::GeometryManager::meanMaterialBudget(fwdTrackProp.getX(), fwdTrackProp.getY(), fwdTrackProp.getZ(), collision.posX(), collision.posY(), collision.posZ());
1691+
auto x2x0 = static_cast<float>(geoMan.meanX2X0);
1692+
fwdTrackProp.propagateToVtxhelixWithMCS(collision.posZ(), {collision.posX(), collision.posY()}, {collision.covXX(), collision.covYY()}, mBzAtMftCenter, x2x0);
16971693

1698-
return mExtrap.MCHtoFwd(mftTrackProp);
1694+
return fwdTrackProp;
16991695
}
17001696

17011697
template <class MCP>

0 commit comments

Comments
 (0)