Skip to content

Commit c438352

Browse files
committed
Make matching with all compatible MFT tracks optional
By default the matching is done using the candidates stored at production time.
1 parent 0ba4dbc commit c438352

1 file changed

Lines changed: 36 additions & 8 deletions

File tree

PWGDQ/Tasks/global-muon-matcher.cxx

Lines changed: 36 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,7 @@ struct GlobalMuonMatching {
190190
Configurable<bool> cfgProduceCandidateFwdTracks{"cfgProduceCandidateFwdTracks", false, "Produce GMMCANDTRK/GMMCANDTRKCOV tables (all FwdTracks + match candidates)"};
191191
Configurable<bool> cfgIncludeGlobalMuonsInFwdTracks{"cfgIncludeGlobalMuonsInFwdTracks", false, "Include MFT-MCH-MID global muons in GMMCANDTRK table"};
192192
Configurable<int> cfgMaxCandidatesPerMchTrack{"cfgMaxCandidatesPerMchTrack", -1, "Maximum number of match candidates stored per MCH track (-1: no limit)"};
193+
Configurable<bool> cfgMatchAllTracks{"cfgMatchAllTracks", false, "If true the matching is performed considering all the MFT tracks for which the covariances are available; if false the matching is performed considering only the global forward tracks stored at production"};
193194

194195
double mBzAtMftCenter{0};
195196

@@ -1073,20 +1074,47 @@ struct GlobalMuonMatching {
10731074
}
10741075
}
10751076

1076-
// build matching candidates from all time-compatible MFT-MCH pairs
1077-
for (int64_t mchTrackIndex : collisionInfo.mchTracks) {
1078-
const auto& mchTrack = muonTracks.rawIteratorAt(mchTrackIndex);
1079-
for (const auto& mftTrack : mftTracks) {
1080-
if (!isMftMchTimeCompatible(collisions, bcs, mchTrack, mftTrack)) {
1077+
if(!cfgMatchAllTracks.value) {
1078+
// collect global MFT-MCH or MFT-MCH-MID tracks and associate them to the corresponding MCH(-MID) track
1079+
for (const auto& muonTrack : muonTracks) {
1080+
if (!muonTrack.has_collision()) {
10811081
continue;
10821082
}
1083-
if (mftTrackCovs.count(mftTrack.globalIndex()) < 1) {
1083+
if (collisionIndex != muonTrack.collisionId()) {
1084+
continue;
1085+
}
1086+
// skip MCH or MCH-MID tracks
1087+
if (static_cast<int>(muonTrack.trackType()) > GlobalTrackTypeMax) {
1088+
continue;
1089+
}
1090+
1091+
auto const& mchTrack = muonTrack.template matchMCHTrack_as<TMUON>();
1092+
int64_t mchTrackIndex = mchTrack.globalIndex();
1093+
auto const& mftTrack = muonTrack.template matchMFTTrack_as<TMFT>();
1094+
int64_t mftTrackIndex = mftTrack.globalIndex();
1095+
1096+
if (mftTrackCovs.count(mftTrackIndex) < 1) {
10841097
continue;
10851098
}
10861099

1087-
collisionInfo.matchingCandidates[mchTrackIndex].emplace_back(MatchingCandidate{
1088-
mftTrack.globalIndex()});
1100+
collisionInfo.matchingCandidates[mchTrackIndex].emplace_back(MatchingCandidate{mftTrackIndex});
10891101
}
1102+
} else {
1103+
// build matching candidates from all time-compatible MFT-MCH pairs
1104+
for (int64_t mchTrackIndex : collisionInfo.mchTracks) {
1105+
const auto& mchTrack = muonTracks.rawIteratorAt(mchTrackIndex);
1106+
for (const auto& mftTrack : mftTracks) {
1107+
if (!isMftMchTimeCompatible(collisions, bcs, mchTrack, mftTrack)) {
1108+
continue;
1109+
}
1110+
if (mftTrackCovs.count(mftTrack.globalIndex()) < 1) {
1111+
continue;
1112+
}
1113+
1114+
collisionInfo.matchingCandidates[mchTrackIndex].emplace_back(MatchingCandidate{
1115+
mftTrack.globalIndex()});
1116+
}
1117+
}
10901118
}
10911119
}
10921120
}

0 commit comments

Comments
 (0)