Skip to content

Commit 434b91d

Browse files
authored
[PWGUD] UPC Cand Tabel producer GlobalMuon changed propagate method (#16549)
1 parent 44e5ef2 commit 434b91d

1 file changed

Lines changed: 48 additions & 3 deletions

File tree

PWGUD/TableProducer/upcCandProducerGlobalMuon.cxx

Lines changed: 48 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ struct UpcCandProducerGlobalMuon {
9090
Configurable<int> fBcWindowMCH{"fBcWindowMCH", 20, "Time window for MCH-MID to MCH-only matching for Muon candidates"};
9191
Configurable<float> fMaxFV0Amp{"fMaxFV0Amp", 100.f, "Max FV0 amplitude in the same BC"};
9292

93-
// NEW: MFT/Global track support configurables
93+
// MFT/Global track support configurables
9494
Configurable<bool> fEnableMFT{"fEnableMFT", true, "Enable MFT/global track processing"};
9595
Configurable<bool> fSaveMFTClusters{"fSaveMFTClusters", true, "Save MFT cluster information"};
9696

@@ -369,6 +369,7 @@ struct UpcCandProducerGlobalMuon {
369369
scrollBackForth(inGbc, maxDbc, mapBcs, fillAmps);
370370
}
371371

372+
// Propagate MCH track to z = 0
372373
auto propagateToZero(ForwardTracks::iterator const& muon)
373374
{
374375
using SMatrix55 = ROOT::Math::SMatrix<double, 5, 5, ROOT::Math::MatRepSym<double, 5>>;
@@ -392,6 +393,45 @@ struct UpcCandProducerGlobalMuon {
392393
return propmuon;
393394
}
394395

396+
// Propagate MCH track to target z point (set MFT z)
397+
auto propagateMCHtoZ(ForwardTracks::iterator const& muon, double targetZ)
398+
{
399+
using SMatrix55 = ROOT::Math::SMatrix<double, 5, 5, ROOT::Math::MatRepSym<double, 5>>;
400+
using SMatrix5 = ROOT::Math::SVector<double, 5>;
401+
SMatrix5 tpars(muon.x(), muon.y(), muon.phi(), muon.tgl(), muon.signed1Pt());
402+
std::vector<double> v1{muon.cXX(), muon.cXY(), muon.cYY(), muon.cPhiX(), muon.cPhiY(),
403+
muon.cPhiPhi(), muon.cTglX(), muon.cTglY(), muon.cTglPhi(), muon.cTglTgl(),
404+
muon.c1PtX(), muon.c1PtY(), muon.c1PtPhi(), muon.c1PtTgl(), muon.c1Pt21Pt2()};
405+
SMatrix55 tcovs(v1.begin(), v1.end());
406+
o2::dataformats::GlobalFwdTrack propmuon;
407+
o2::dataformats::GlobalFwdTrack track;
408+
track.setParameters(tpars);
409+
track.setZ(muon.z());
410+
track.setCovariances(tcovs);
411+
auto mchTrack = fMatching.FwdtoMCH(track);
412+
// Here is different point with propagateToZero
413+
o2::mch::TrackExtrap::extrapToVertex(mchTrack, 0., 0., targetZ, 0., 0.);
414+
auto proptrack = fMatching.MCHtoFwd(mchTrack);
415+
o2::dataformats::GlobalFwdTrack propMuonAtZ;
416+
propMuonAtZ.setParameters(proptrack.getParameters());
417+
propMuonAtZ.setZ(proptrack.getZ());
418+
propMuonAtZ.setCovariances(proptrack.getCovariances());
419+
return propMuonAtZ;
420+
}
421+
422+
// Propagate Global track to z = 0
423+
auto propagateGlobalFwdToZero(const o2::dataformats::GlobalFwdTrack& globalTrack)
424+
{
425+
auto mchTrack = fMatching.FwdtoMCH(globalTrack);
426+
o2::mch::TrackExtrap::extrapToZCov(mchTrack, 0.);
427+
auto proptrack = fMatching.MCHtoFwd(mchTrack);
428+
o2::dataformats::GlobalFwdTrack propMuonAtZero;
429+
propMuonAtZero.setParameters(proptrack.getParameters());
430+
propMuonAtZero.setZ(proptrack.getZ());
431+
propMuonAtZero.setCovariances(proptrack.getCovariances());
432+
return propMuonAtZero;
433+
}
434+
395435
bool addToFwdTable(int64_t candId, int64_t trackId, uint64_t gbc, float trackTime,
396436
ForwardTracks const& fwdTracks, o2::aod::MFTTracks const& /*mftTracks*/,
397437
const o2::aod::McFwdTrackLabels* mcFwdTrackLabels)
@@ -414,14 +454,19 @@ struct UpcCandProducerGlobalMuon {
414454
if (isGlobal && fEnableMFT) {
415455
// Refit global muon: propagate MCH component to vertex, combine with MFT spatial info
416456
auto mchTrack = track.matchMCHTrack_as<ForwardTracks>();
417-
auto propMuon = propagateToZero(mchTrack);
457+
// Propgate to Z of MFT -> z =0
418458
auto mfttrack = track.matchMFTTrack_as<o2::aod::MFTTracks>();
459+
double zMFT = mfttrack.z();
460+
461+
auto propMuonAtMFT = propagateMCHtoZ(mchTrack, zMFT);
419462
using SMatrix5 = ROOT::Math::SVector<double, 5>;
420463
using SMatrix55 = ROOT::Math::SMatrix<double, 5, 5, ROOT::Math::MatRepSym<double, 5>>;
421464
SMatrix5 tpars(mfttrack.x(), mfttrack.y(), mfttrack.phi(), mfttrack.tgl(), mfttrack.signed1Pt());
422465
SMatrix55 tcovs{};
423466
o2::track::TrackParCovFwd mft{mfttrack.z(), tpars, tcovs, mfttrack.chi2()};
424-
pft = o2::aod::fwdtrackutils::refitGlobalMuonCov(propMuon, mft);
467+
auto refitAtMFT = o2::aod::fwdtrackutils::refitGlobalMuonCov(propMuonAtMFT, mft);
468+
// To z = 0
469+
pft = propagateGlobalFwdToZero(refitAtMFT);
425470
} else {
426471
pft = propagateToZero(track);
427472
}

0 commit comments

Comments
 (0)