@@ -93,7 +93,6 @@ DECLARE_SOA_COLUMN(Pt, pt, float);
9393DECLARE_SOA_COLUMN (Eta, eta, float );
9494DECLARE_SOA_COLUMN (Phi, phi, float );
9595DECLARE_SOA_COLUMN (MatchLabel, matchLabel, int8_t );
96- DECLARE_SOA_COLUMN (TrackId, trackId, int64_t );
9796DECLARE_SOA_COLUMN (MatchType, matchType, int8_t );
9897DECLARE_SOA_COLUMN (MatchChi2, matchChi2, float );
9998DECLARE_SOA_COLUMN (MatchScore, matchScore, float );
@@ -133,7 +132,6 @@ namespace o2::aod
133132DECLARE_SOA_TABLE (QaMatchingMCHTrack, " AOD" , " QAMCHTRK" ,
134133 o2::soa::Index<>,
135134 qamatching::ReducedEventId,
136- qamatching::TrackId,
137135 qamatching::TrackType,
138136 qamatching::P,
139137 qamatching::Pt,
@@ -147,11 +145,20 @@ DECLARE_SOA_TABLE(QaMatchingMCHTrack, "AOD", "QAMCHTRK",
147145 qamatching::PxAtVtx,
148146 qamatching::PyAtVtx,
149147 qamatching::PzAtVtx);
148+ } // namespace o2::aod
149+
150+ namespace qamatching
151+ {
152+ DECLARE_SOA_INDEX_COLUMN_FULL_CUSTOM (ReducedTrack, reducedTrack, int32_t , o2::aod::QaMatchingMCHTrack, " QAMCHTRKs" , " " );
153+ } // namespace qamatching
154+
155+ namespace o2 ::aod
156+ {
150157DECLARE_SOA_TABLE (QaMatchingCandidates, " AOD" , " QAMCAND" ,
151158 o2::soa::Index<>,
152159 qamatching::ReducedEventId,
160+ qamatching::ReducedTrackId,
153161 qamatching::MatchLabel,
154- qamatching::TrackId,
155162 qamatching::P, qamatching::Pt, qamatching::Eta, qamatching::Phi,
156163 qamatching::MatchType, qamatching::MatchChi2, qamatching::MatchScore, qamatching::MatchRanking,
157164 qamatching::XAtVtx,
@@ -162,6 +169,11 @@ DECLARE_SOA_TABLE(QaMatchingCandidates, "AOD", "QAMCAND",
162169 qamatching::PzAtVtx);
163170} // namespace o2::aod
164171
172+ namespace qamatching
173+ {
174+ DECLARE_SOA_INDEX_COLUMN_FULL_CUSTOM (Candidate, candidate, int32_t , o2::aod::QaMatchingCandidates, " QAMCANDs" , " " );
175+ } // namespace qamatching
176+
165177using MyEvents = soa::Join<aod::Collisions, aod::EvSels, aod::FT0Mults, aod::MFTMults, aod::PVMults, aod::CentFT0Ms, aod::CentFT0As, aod::CentFT0Cs>;
166178using MyMuons = soa::Join<aod::FwdTracks, aod::FwdTracksCov>;
167179using MyMuonsMC = soa::Join<aod::FwdTracks, aod::FwdTracksCov, aod::McFwdTrackLabels, aod::FwdTracksDCA, aod::FwdTrkCompColls>;
@@ -458,6 +470,8 @@ struct QaMatching {
458470 std::vector<int64_t > mftTracks;
459471 // vector of MCH(-MID) track indexes
460472 std::vector<int64_t > mchTracks;
473+ // mapping between original and reduced MCH track indexes
474+ std::map<int64_t , int64_t > reducedMchTrackIds;
461475 // matching candidates
462476 MatchingCandidates matchingCandidates;
463477 // vector of MFT-MCH track index pairs belonging to the same MC muon particle
@@ -1986,6 +2000,7 @@ struct QaMatching {
19862000 if (collisionIds.empty ())
19872001 return ;
19882002
2003+ int64_t reducedMchTrackId = 0 ;
19892004 for (size_t cid = 0 ; cid < collisionIds.size (); cid++) {
19902005 const auto & collision = collisions.rawIteratorAt (collisionIds[cid]);
19912006 int64_t collisionIndex = collision.globalIndex ();
@@ -2015,6 +2030,8 @@ struct QaMatching {
20152030 // standalone MCH or MCH-MID tracks
20162031 int64_t mchTrackIndex = muonTrack.globalIndex ();
20172032 collisionInfo.mchTracks .push_back (mchTrackIndex);
2033+ collisionInfo.reducedMchTrackIds [mchTrackIndex] = reducedMchTrackId;
2034+ reducedMchTrackId += 1 ;
20182035 } else {
20192036 // global muon tracks (MFT-MCH or MFT-MCH-MID)
20202037 int64_t muonTrackIndex = muonTrack.globalIndex ();
@@ -2916,7 +2933,7 @@ struct QaMatching {
29162933
29172934 // -------------------------------
29182935 // Chi2-based matching from production
2919- fillQaMatchingAodTablesForCollision (collision, muonTracks, collisionInfo.matchingCandidates , matchingMethodCounter, collisionInfo.reducedEventId );
2936+ fillQaMatchingAodTablesForCollision (collision, muonTracks, collisionInfo.matchingCandidates , matchingMethodCounter, collisionInfo.reducedEventId , collisionInfo. reducedMchTrackIds );
29202937 if constexpr (isMC) {
29212938 fillMatchingPlotsMc (collision, collisionInfo, muonTracks, mftTracks, collisionInfo.matchingCandidates , collisionInfo.matchingCandidates , collisionInfo.matchablePairs , cfgMatchingChi2ScoreMftMchLow, fChi2MatchingPlotter .get (), false );
29222939 } else {
@@ -2970,7 +2987,7 @@ struct QaMatching {
29702987 double matchingScoreCut = matchingScoreCuts.at (label);
29712988
29722989 matchingMethodCounter += 1 ;
2973- fillQaMatchingAodTablesForCollision (collision, muonTracks, matchingCandidates, matchingMethodCounter, collisionInfo.reducedEventId );
2990+ fillQaMatchingAodTablesForCollision (collision, muonTracks, matchingCandidates, matchingMethodCounter, collisionInfo.reducedEventId , collisionInfo. reducedMchTrackIds );
29742991 if constexpr (isMC) {
29752992 fillMatchingPlotsMc (collision, collisionInfo, muonTracks, mftTracks, matchingCandidates, collisionInfo.matchingCandidates , collisionInfo.matchablePairs , matchingScoreCut, plotter, false );
29762993 } else {
@@ -2988,7 +3005,7 @@ struct QaMatching {
29883005 double matchingScoreCut = matchingScoreCuts.at (label);
29893006
29903007 matchingMethodCounter += 1 ;
2991- fillQaMatchingAodTablesForCollision (collision, muonTracks, matchingCandidates, matchingMethodCounter, collisionInfo.reducedEventId );
3008+ fillQaMatchingAodTablesForCollision (collision, muonTracks, matchingCandidates, matchingMethodCounter, collisionInfo.reducedEventId , collisionInfo. reducedMchTrackIds );
29923009 if constexpr (isMC) {
29933010 fillMatchingPlotsMc (collision, collisionInfo, muonTracks, mftTracks, matchingCandidates, collisionInfo.matchingCandidates , collisionInfo.matchablePairs , matchingScoreCut, plotter);
29943011 } else {
@@ -3006,7 +3023,8 @@ struct QaMatching {
30063023 TMUON const & muonTracks,
30073024 const MatchingCandidates& matchingCandidates,
30083025 int8_t matchLabel,
3009- int32_t reducedEventId)
3026+ int32_t reducedEventId,
3027+ std::map<int64_t , int64_t > reducedMchTrackIds)
30103028 {
30113029 for (const auto & [mchIndex, candidates] : matchingCandidates) {
30123030 if (candidates.empty ()) {
@@ -3018,13 +3036,19 @@ struct QaMatching {
30183036 continue ;
30193037 }
30203038
3039+ auto reducedMchTrackIdIt = reducedMchTrackIds.find (mchIndex);
3040+ if (reducedMchTrackIdIt == reducedMchTrackIds.end ()) {
3041+ continue ;
3042+ }
3043+ int64_t reducedMchTrackId = reducedMchTrackIdIt->second ;
3044+
30213045 for (const auto & candidate : candidates) {
30223046 const auto & candidateTrack = muonTracks.rawIteratorAt (candidate.globalTrackId );
30233047 auto candidateTrackAtVertex = VarManager::PropagateMuon (candidateTrack, collision, VarManager::kToVertex );
30243048 qaMatchingCandidates (
30253049 reducedEventId,
3050+ reducedMchTrackId,
30263051 matchLabel,
3027- mchIndex,
30283052 static_cast <float >(candidateTrack.p ()),
30293053 static_cast <float >(candidateTrack.pt ()),
30303054 static_cast <float >(candidateTrack.eta ()),
@@ -3095,7 +3119,6 @@ struct QaMatching {
30953119 }
30963120 qaMatchingMCHTrack (
30973121 reducedEventId,
3098- mchIndex,
30993122 static_cast <int8_t >(mchTrack.trackType ()),
31003123 static_cast <float >(mchTrack.p ()),
31013124 static_cast <float >(mchTrack.pt ()),
0 commit comments