@@ -1688,24 +1688,30 @@ struct TableMaker {
16881688 // So if a muon is associated to multiple collisions, depending on the selections,
16891689 // it may be accepted for some associations and rejected for other
16901690 if (static_cast <int >(muon.trackType ()) > 2 && fConfigVariousOptions .fPropMuon ) {
1691- VarManager::FillPropagateMuon<TMuonFillMap>(muon, collision);
1691+ VarManager::FillPropagateMuon<TMuonFillMap>(muon, collision);
16921692 }
16931693 // recalculate pDca / DCA and global muon kinematics
1694- if (static_cast <int >(muon.trackType ()) < 2 && fConfigVariousOptions .fRefitGlobalMuon ) {
1694+ // kMuonPDca is always taken from MCH (standalone or the MCH matched to a global)
1695+ if (static_cast <int >(muon.trackType ()) < 2 ) {
16951696 auto muontrack = muon.template matchMCHTrack_as <TMuons>();
1696- if (muontrack.eta () < fConfigVariousOptions .fMuonMatchEtaMin || muontrack.eta () > fConfigVariousOptions .fMuonMatchEtaMax ) {
1697- continue ;
1698- }
1699- auto mfttrack = muon.template matchMFTTrack_as <MFTTracks>();
17001697 VarManager::FillTrackCollision<TMuonFillMap>(muontrack, collision);
1701- // NOTE: the MFT track originally associated to the MUON track is currently used in the global muon refit
1702- // Should MUON - MFT time ambiguities be taken into account ?
1703- // Helix DCA is filled from the refitted parameters inside FillGlobalMuonRefit(Cov)
1704- if constexpr (static_cast <bool >(TMFTFillMap & VarManager::ObjTypes::MFTCov)) {
1705- auto const & mfttrackcov = mfCovs.rawIteratorAt (map_mfttrackcovs[mfttrack.globalIndex ()]);
1706- VarManager::FillGlobalMuonRefitCov<TMuonFillMap, TMFTFillMap>(muontrack, mfttrack, collision, mfttrackcov);
1698+ if (fConfigVariousOptions .fRefitGlobalMuon ) {
1699+ if (muontrack.eta () < fConfigVariousOptions .fMuonMatchEtaMin || muontrack.eta () > fConfigVariousOptions .fMuonMatchEtaMax ) {
1700+ continue ;
1701+ }
1702+ auto mfttrack = muon.template matchMFTTrack_as <MFTTracks>();
1703+ // NOTE: the MFT track originally associated to the MUON track is currently used in the global muon refit
1704+ // Should MUON - MFT time ambiguities be taken into account ?
1705+ // Helix DCA (kMuonDCAx/y) is filled from the refitted parameters inside FillGlobalMuonRefit(Cov)
1706+ if constexpr (static_cast <bool >(TMFTFillMap & VarManager::ObjTypes::MFTCov)) {
1707+ auto const & mfttrackcov = mfCovs.rawIteratorAt (map_mfttrackcovs[mfttrack.globalIndex ()]);
1708+ VarManager::FillGlobalMuonRefitCov<TMuonFillMap, TMFTFillMap>(muontrack, mfttrack, collision, mfttrackcov);
1709+ } else {
1710+ VarManager::FillGlobalMuonRefit<TMuonFillMap>(muontrack, mfttrack, collision);
1711+ }
17071712 } else {
1708- VarManager::FillGlobalMuonRefit<TMuonFillMap>(muontrack, mfttrack, collision);
1713+ // Helix DCA of the global track; leaves kMuonPDca from the matched MCH above
1714+ VarManager::FillTrackCollision<TMuonFillMap>(muon, collision);
17091715 }
17101716 } else {
17111717 VarManager::FillTrackCollision<TMuonFillMap>(muon, collision);
@@ -1784,20 +1790,27 @@ struct TableMaker {
17841790
17851791 VarManager::FillTrack<TMuonFillMap>(muon);
17861792 if (static_cast <int >(muon.trackType ()) > 2 && fConfigVariousOptions .fPropMuon ) {
1787- VarManager::FillPropagateMuon<TMuonFillMap>(muon, collision);
1793+ VarManager::FillPropagateMuon<TMuonFillMap>(muon, collision);
17881794 }
17891795 // recalculate pDca / DCA and global muon kinematics
1796+ // kMuonPDca is always taken from MCH (standalone or the MCH matched to a global)
17901797 int globalClusters = muon.nClusters ();
1791- if (static_cast <int >(muon.trackType ()) < 2 && fConfigVariousOptions . fRefitGlobalMuon ) {
1798+ if (static_cast <int >(muon.trackType ()) < 2 ) {
17921799 auto muontrack = muon.template matchMCHTrack_as <TMuons>();
1793- auto mfttrack = muon.template matchMFTTrack_as <MFTTracks>();
1794- globalClusters += mfttrack.nClusters ();
17951800 VarManager::FillTrackCollision<TMuonFillMap>(muontrack, collision);
1796- if constexpr (static_cast <bool >(TMFTFillMap & VarManager::ObjTypes::MFTCov)) {
1797- auto const & mfttrackcov = mfCovs.rawIteratorAt (map_mfttrackcovs[mfttrack.globalIndex ()]);
1798- VarManager::FillGlobalMuonRefitCov<TMuonFillMap, TMFTFillMap>(muontrack, mfttrack, collision, mfttrackcov);
1801+ if (fConfigVariousOptions .fRefitGlobalMuon ) {
1802+ auto mfttrack = muon.template matchMFTTrack_as <MFTTracks>();
1803+ globalClusters += mfttrack.nClusters ();
1804+ // Helix DCA (kMuonDCAx/y) is filled from the refitted parameters inside FillGlobalMuonRefit(Cov)
1805+ if constexpr (static_cast <bool >(TMFTFillMap & VarManager::ObjTypes::MFTCov)) {
1806+ auto const & mfttrackcov = mfCovs.rawIteratorAt (map_mfttrackcovs[mfttrack.globalIndex ()]);
1807+ VarManager::FillGlobalMuonRefitCov<TMuonFillMap, TMFTFillMap>(muontrack, mfttrack, collision, mfttrackcov);
1808+ } else {
1809+ VarManager::FillGlobalMuonRefit<TMuonFillMap>(muontrack, mfttrack, collision);
1810+ }
17991811 } else {
1800- VarManager::FillGlobalMuonRefit<TMuonFillMap>(muontrack, mfttrack, collision);
1812+ // Helix DCA of the global track; leaves kMuonPDca from the matched MCH above
1813+ VarManager::FillTrackCollision<TMuonFillMap>(muon, collision);
18011814 }
18021815 } else {
18031816 VarManager::FillTrackCollision<TMuonFillMap>(muon, collision);
0 commit comments