Skip to content

Commit 5dcad1e

Browse files
committed
logic fix
1 parent 67773a6 commit 5dcad1e

3 files changed

Lines changed: 68 additions & 42 deletions

File tree

PWGDQ/Core/VarManager.h

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3449,7 +3449,7 @@ void VarManager::FillTrackCollision(T const& track, C const& collision, float* v
34493449
float dcaX = 999.f;
34503450
float dcaY = 999.f;
34513451
if (static_cast<int>(track.trackType()) <= 2) {
3452-
// Global muons: helix DCA w.r.t. the associated collision
3452+
// Global / MCH-MID: helix DCA only (for globals, kMuonPDca is filled from the matched MCH in skimMuons)
34533453
float xShift = 0.f;
34543454
float yShift = 0.f;
34553455
float zShift = 0.f;
@@ -3460,17 +3460,16 @@ void VarManager::FillTrackCollision(T const& track, C const& collision, float* v
34603460
dcaX = static_cast<float>(dca[0]);
34613461
dcaY = static_cast<float>(dca[1]);
34623462
} else {
3463-
// MCH / standalone: DCA from MCH extrapolation
3463+
// MCH standalone: DCA and pDCA from MCH extrapolation
34643464
o2::dataformats::GlobalFwdTrack propmuonAtDCA = PropagateMuon(track, collision, kToDCA);
34653465
dcaX = propmuonAtDCA.getX() - collision.posX();
34663466
dcaY = propmuonAtDCA.getY() - collision.posY();
34673467
float dcaXY = std::sqrt(dcaX * dcaX + dcaY * dcaY);
34683468
values[kMuonPDca] = track.p() * dcaXY;
34693469
}
3470-
3470+
34713471
values[kMuonDCAx] = dcaX;
34723472
values[kMuonDCAy] = dcaY;
3473-
34743473
}
34753474
}
34763475

PWGDQ/TableProducer/tableMakerMC_withAssoc.cxx

Lines changed: 31 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1134,21 +1134,28 @@ struct TableMakerMC {
11341134
// NOTE: If a muon is associated to multiple collisions, depending on the selections,
11351135
// it may be accepted for some associations and rejected for other
11361136
if (static_cast<int>(muon.trackType()) > 2 && fConfigVariousOptions.fPropMuon) {
1137-
VarManager::FillPropagateMuon<TMuonFillMap>(muon, collision);
1137+
VarManager::FillPropagateMuon<TMuonFillMap>(muon, collision);
11381138
}
11391139
// recalculate pDca / DCA and global muon kinematics
1140-
if (static_cast<int>(muon.trackType()) < 2 && fConfigVariousOptions.fRefitGlobalMuon) {
1140+
// kMuonPDca is always taken from MCH (standalone or the MCH matched to a global)
1141+
if (static_cast<int>(muon.trackType()) < 2) {
11411142
auto muontrack = muon.template matchMCHTrack_as<TMuons>();
1142-
if (muontrack.eta() < fConfigVariousOptions.fMuonMatchEtaMin || muontrack.eta() > fConfigVariousOptions.fMuonMatchEtaMax) {
1143-
continue;
1144-
}
1145-
auto mfttrack = muon.template matchMFTTrack_as<TMFTTracks>();
11461143
VarManager::FillTrackCollision<TMuonFillMap>(muontrack, collision);
1147-
if constexpr (static_cast<bool>(TMFTFillMap & VarManager::ObjTypes::MFTCov)) {
1148-
auto const& mfttrackcov = mfCovs.rawIteratorAt(map_mfttrackcovs[mfttrack.globalIndex()]);
1149-
VarManager::FillGlobalMuonRefitCov<TMuonFillMap, TMFTFillMap>(muontrack, mfttrack, collision, mfttrackcov);
1144+
if (fConfigVariousOptions.fRefitGlobalMuon) {
1145+
if (muontrack.eta() < fConfigVariousOptions.fMuonMatchEtaMin || muontrack.eta() > fConfigVariousOptions.fMuonMatchEtaMax) {
1146+
continue;
1147+
}
1148+
auto mfttrack = muon.template matchMFTTrack_as<TMFTTracks>();
1149+
// Helix DCA (kMuonDCAx/y) is filled from the refitted parameters inside FillGlobalMuonRefit(Cov)
1150+
if constexpr (static_cast<bool>(TMFTFillMap & VarManager::ObjTypes::MFTCov)) {
1151+
auto const& mfttrackcov = mfCovs.rawIteratorAt(map_mfttrackcovs[mfttrack.globalIndex()]);
1152+
VarManager::FillGlobalMuonRefitCov<TMuonFillMap, TMFTFillMap>(muontrack, mfttrack, collision, mfttrackcov);
1153+
} else {
1154+
VarManager::FillGlobalMuonRefit<TMuonFillMap>(muontrack, mfttrack, collision);
1155+
}
11501156
} else {
1151-
VarManager::FillGlobalMuonRefit<TMuonFillMap>(muontrack, mfttrack, collision);
1157+
// Helix DCA of the global track; leaves kMuonPDca from the matched MCH above
1158+
VarManager::FillTrackCollision<TMuonFillMap>(muon, collision);
11521159
}
11531160
} else {
11541161
VarManager::FillTrackCollision<TMuonFillMap>(muon, collision);
@@ -1266,17 +1273,24 @@ struct TableMakerMC {
12661273
VarManager::FillPropagateMuon<TMuonFillMap>(muon, collision);
12671274
}
12681275
// recalculate pDca / DCA and global muon kinematics
1276+
// kMuonPDca is always taken from MCH (standalone or the MCH matched to a global)
12691277
int globalClusters = muon.nClusters();
1270-
if (static_cast<int>(muon.trackType()) < 2 && fConfigVariousOptions.fRefitGlobalMuon) {
1278+
if (static_cast<int>(muon.trackType()) < 2) {
12711279
auto muontrack = muon.template matchMCHTrack_as<TMuons>();
1272-
auto mfttrack = muon.template matchMFTTrack_as<TMFTTracks>();
1273-
globalClusters += mfttrack.nClusters();
12741280
VarManager::FillTrackCollision<TMuonFillMap>(muontrack, collision);
1275-
if constexpr (static_cast<bool>(TMFTFillMap & VarManager::ObjTypes::MFTCov)) {
1276-
auto const& mfttrackcov = mfCovs.rawIteratorAt(map_mfttrackcovs[mfttrack.globalIndex()]);
1277-
VarManager::FillGlobalMuonRefitCov<TMuonFillMap, TMFTFillMap>(muontrack, mfttrack, collision, mfttrackcov);
1281+
if (fConfigVariousOptions.fRefitGlobalMuon) {
1282+
auto mfttrack = muon.template matchMFTTrack_as<TMFTTracks>();
1283+
globalClusters += mfttrack.nClusters();
1284+
// Helix DCA (kMuonDCAx/y) is filled from the refitted parameters inside FillGlobalMuonRefit(Cov)
1285+
if constexpr (static_cast<bool>(TMFTFillMap & VarManager::ObjTypes::MFTCov)) {
1286+
auto const& mfttrackcov = mfCovs.rawIteratorAt(map_mfttrackcovs[mfttrack.globalIndex()]);
1287+
VarManager::FillGlobalMuonRefitCov<TMuonFillMap, TMFTFillMap>(muontrack, mfttrack, collision, mfttrackcov);
1288+
} else {
1289+
VarManager::FillGlobalMuonRefit<TMuonFillMap>(muontrack, mfttrack, collision);
1290+
}
12781291
} else {
1279-
VarManager::FillGlobalMuonRefit<TMuonFillMap>(muontrack, mfttrack, collision);
1292+
// Helix DCA of the global track; leaves kMuonPDca from the matched MCH above
1293+
VarManager::FillTrackCollision<TMuonFillMap>(muon, collision);
12801294
}
12811295
} else {
12821296
VarManager::FillTrackCollision<TMuonFillMap>(muon, collision);

PWGDQ/TableProducer/tableMaker_withAssoc.cxx

Lines changed: 34 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)