@@ -47,7 +47,6 @@ using namespace o2::aod;
4747
4848namespace qamatching
4949{
50- DECLARE_SOA_COLUMN (ReducedEventId, reducedEventId, int64_t );
5150DECLARE_SOA_COLUMN (P, p, float );
5251DECLARE_SOA_COLUMN (Pt, pt, float );
5352DECLARE_SOA_COLUMN (Eta, eta, float );
@@ -74,11 +73,20 @@ DECLARE_SOA_COLUMN(ColZ, colz, float);
7473namespace o2 ::aod
7574{
7675DECLARE_SOA_TABLE (QaMatchingEvents, " AOD" , " QAMEVT" ,
77- qamatching::ReducedEventId ,
76+ o2::soa::Index<> ,
7877 qamatching::MftMultiplicity,
7978 qamatching::ColX,
8079 qamatching::ColY,
8180 qamatching::ColZ);
81+ } // namespace o2::aod
82+
83+ namespace qamatching
84+ {
85+ DECLARE_SOA_INDEX_COLUMN_FULL (ReducedEvent, reducedevent, int32_t , o2::aod::QaMatchingEvents, " " );
86+ } // namespace qamatching
87+
88+ namespace o2 ::aod
89+ {
8290DECLARE_SOA_TABLE (QaMatchingMCHTrack, " AOD" , " QAMCHTRK" ,
8391 qamatching::ReducedEventId,
8492 qamatching::TrackId,
@@ -99,7 +107,13 @@ DECLARE_SOA_TABLE(QaMatchingCandidates, "AOD", "QAMCAND",
99107 qamatching::MatchLabel,
100108 qamatching::TrackId,
101109 qamatching::P, qamatching::Pt, qamatching::Eta, qamatching::Phi,
102- qamatching::MatchType, qamatching::MatchScore, qamatching::MatchRanking);
110+ qamatching::MatchType, qamatching::MatchScore, qamatching::MatchRanking,
111+ qamatching::X_atVtx,
112+ qamatching::Y_atVtx,
113+ qamatching::Z_atVtx,
114+ qamatching::Px_atVtx,
115+ qamatching::Py_atVtx,
116+ qamatching::Pz_atVtx);
103117} // namespace o2::aod
104118
105119using MyEvents = soa::Join<aod::Collisions, aod::EvSels>;
@@ -1639,67 +1653,9 @@ struct qaMatching {
16391653 return trueMatchIndex;
16401654 }
16411655
1642- template <class TMUON , class TMUONS , class TMFTS >
1643- int GetTrueMatchIndexTrackType (TMUON const & muonTracks,
1644- TMUONS const & muonTracksAll,
1645- TMFTS const & mftTracks,
1646- const std::vector<MatchingCandidate>& matchCandidatesVector,
1647- const std::vector<std::pair<int64_t , int64_t >>& matchablePairs)
1648- {
1649- // Same definition as GetTrueMatchIndex, but require trackType-based IsMuon.
1650- int trueMatchIndex = 0 ;
1651- for (size_t i = 0 ; i < matchCandidatesVector.size (); i++) {
1652- auto const & muonTrack = muonTracks.rawIteratorAt (matchCandidatesVector[i].globalTrackId );
1653- if (!IsMuon (muonTrack, muonTracksAll, mftTracks)) {
1654- continue ;
1655- }
1656- if (IsTrueGlobalMatching (muonTrack, matchablePairs)) {
1657- trueMatchIndex = i + 1 ;
1658- break ;
1659- }
1660- }
1661- return trueMatchIndex;
1662- }
1663-
1664- template <class TMCH , class TMFT >
1665- bool IsMuon (const TMCH& mchTrack,
1666- const TMFT& mftTrack)
1667- {
1668- // skip tracks that do not have an associated MC particle
1669- if (!mchTrack.has_mcParticle ())
1670- return false ;
1671- if (!mftTrack.has_mcParticle ())
1672- return false ;
1673-
1674- // get the index associated to the MC particles
1675- auto mchMcParticle = mchTrack.mcParticle ();
1676- auto mftMcParticle = mftTrack.mcParticle ();
1677- if (mchMcParticle.globalIndex () != mftMcParticle.globalIndex ())
1678- return false ;
1679-
1680- if (std::abs (mchMcParticle.pdgCode ()) != 13 )
1681- return false ;
1682-
1683- return true ;
1684- }
1685-
1686- template <class TMUON , class TMUONS , class TMFTS >
1687- bool IsMuon (const TMUON& muonTrack,
1688- TMUONS const & /* muonTracks*/ ,
1689- TMFTS const & /* mftTracks*/ )
1690- {
1691- if (static_cast <int >(muonTrack.trackType ()) >= 2 )
1692- return false ;
1693-
1694- auto const & mchTrack = muonTrack.template matchMCHTrack_as <TMUONS>();
1695- auto const & mftTrack = muonTrack.template matchMFTTrack_as <TMFTS>();
1696-
1697- return IsMuon (mchTrack, mftTrack);
1698- }
1699-
17001656 template <class TMUON , class TMUONS , class TMFTS >
17011657 MuonMatchType GetMatchType (const TMUON& muonTrack,
1702- TMUONS const & muonTracks,
1658+ TMUONS const & /* muonTracks*/ ,
17031659 TMFTS const & mftTracks,
17041660 const std::vector<std::pair<int64_t , int64_t >>& matchablePairs,
17051661 int ranking)
@@ -1709,25 +1665,20 @@ struct qaMatching {
17091665
17101666 auto const & mchTrack = muonTrack.template matchMCHTrack_as <TMUONS>();
17111667 bool isPaired = IsMatchableMCH (mchTrack.globalIndex (), matchablePairs);
1712- bool isMuon = IsMuon (muonTrack, muonTracks, mftTracks);
17131668 int decayRanking = GetDecayRanking (mchTrack, mftTracks);
17141669
17151670 MuonMatchType result{kMatchTypeUndefined };
17161671 if (isPaired) {
1717- if (isMuon) {
1718- result = (ranking == 1 ) ? kMatchTypeTrueLeading : kMatchTypeTrueNonLeading ;
1719- } else {
1720- result = (ranking == 1 ) ? kMatchTypeWrongLeading : kMatchTypeWrongNonLeading ;
1721- }
1672+ result = (ranking == 1 ) ? kMatchTypeTrueLeading : kMatchTypeTrueNonLeading ;
17221673 } else if (decayRanking == 2 ) {
17231674 result = (ranking == 1 ) ? kMatchTypeDecayLeading : kMatchTypeDecayNonLeading ;
17241675 } else {
17251676 result = (ranking == 1 ) ? kMatchTypeFakeLeading : kMatchTypeFakeNonLeading ;
17261677 }
17271678
17281679 if (result == kMatchTypeUndefined ) {
1729- std::cout << std::format (" [GetMatchType] isPaired={} isMuon={} decayRanking={} result={}" ,
1730- isPaired, isMuon, decayRanking, static_cast <int >(result))
1680+ std::cout << std::format (" [GetMatchType] isPaired={} decayRanking={} result={}" ,
1681+ isPaired, decayRanking, static_cast <int >(result))
17311682 << std::endl;
17321683 }
17331684
@@ -2118,8 +2069,8 @@ struct qaMatching {
21182069 // find the index of the matching candidate that corresponds to the true match
21192070 // index=1 corresponds to the leading candidate
21202071 // index=0 means no candidate was found that corresponds to the true match
2121- int trueMatchIndex = GetTrueMatchIndexTrackType (muonTracks, muonTracks, mftTracks , globalTracksVector, matchablePairs);
2122- int trueMatchIndexProd = GetTrueMatchIndexTrackType (muonTracks, muonTracks, mftTracks , matchingCandidatesProd.at (mchIndex), matchablePairs);
2072+ int trueMatchIndex = GetTrueMatchIndex (muonTracks, globalTracksVector, matchablePairs);
2073+ int trueMatchIndexProd = GetTrueMatchIndex (muonTracks, matchingCandidatesProd.at (mchIndex), matchablePairs);
21232074
21242075 float mcParticleDz = -1000 ;
21252076 if (mchTrack.has_mcParticle ()) {
@@ -2855,7 +2806,7 @@ struct qaMatching {
28552806 TMUON const & muonTracks,
28562807 const MatchingCandidates& matchingCandidates,
28572808 int8_t matchLabel,
2858- int64_t reducedEventId)
2809+ int32_t reducedEventId)
28592810 {
28602811 for (const auto & [mchIndex, candidates] : matchingCandidates) {
28612812 if (candidates.empty ()) {
@@ -2866,36 +2817,39 @@ struct qaMatching {
28662817 if (!IsGoodGlobalMuon (mchTrack, collision)) {
28672818 continue ;
28682819 }
2869- float p = mchTrack.p ();
2870- float pt = mchTrack.pt ();
2871- float eta = mchTrack.eta ();
2872- float phi = mchTrack.phi ();
28732820
28742821 for (const auto & candidate : candidates) {
2822+ const auto & candidateTrack = muonTracks.rawIteratorAt (candidate.globalTrackId );
2823+ auto candidateTrackAtVertex = VarManager::PropagateMuon (candidateTrack, collision, VarManager::kToVertex );
28752824 qaMatchingCandidates (
28762825 reducedEventId,
28772826 matchLabel,
28782827 mchIndex,
2879- p ,
2880- pt ,
2881- eta,
2882- phi,
2828+ static_cast < float >(candidateTrack. p ()) ,
2829+ static_cast < float >(candidateTrack. pt ()) ,
2830+ static_cast < float >(candidateTrack. eta ()) ,
2831+ static_cast < float >(candidateTrack. phi ()) ,
28832832 static_cast <int8_t >(candidate.matchType ),
28842833 static_cast <float >(candidate.matchScore ),
2885- static_cast <int32_t >(candidate.matchRanking ));
2834+ static_cast <int32_t >(candidate.matchRanking ),
2835+ static_cast <float >(candidateTrackAtVertex.getX ()),
2836+ static_cast <float >(candidateTrackAtVertex.getY ()),
2837+ static_cast <float >(candidateTrackAtVertex.getZ ()),
2838+ static_cast <float >(candidateTrackAtVertex.getPx ()),
2839+ static_cast <float >(candidateTrackAtVertex.getPy ()),
2840+ static_cast <float >(candidateTrackAtVertex.getPz ()));
28862841 }
28872842 }
28882843 }
28892844
28902845 template <class TCOLLISION >
28912846 void FillQaMatchingAodEventForCollision (const CollisionInfo& collisionInfo,
28922847 TCOLLISION const & collision,
2893- int64_t reducedEventId,
2848+ int32_t reducedEventId,
28942849 int & debugCounter)
28952850 {
28962851 int32_t mftMultiplicity = static_cast <int32_t >(collisionInfo.mftTracks .size ());
28972852 qaMatchingEvents (
2898- reducedEventId,
28992853 mftMultiplicity,
29002854 static_cast <float >(collision.posX ()),
29012855 static_cast <float >(collision.posY ()),
@@ -2914,7 +2868,7 @@ struct qaMatching {
29142868 TMUON const & muonTracks,
29152869 TMFT const & mftTracks,
29162870 TBC const & bcs,
2917- int64_t reducedEventId)
2871+ int32_t reducedEventId)
29182872 {
29192873 std::unordered_set<int64_t > mchIds;
29202874 for (const auto & mchIndex : collisionInfo.mchTracks ) {
@@ -2968,8 +2922,8 @@ struct qaMatching {
29682922 mftTrackCovs[mftTrackCov.matchMFTTrackId ()] = mftTrackCov.globalIndex ();
29692923 }
29702924
2971- std::unordered_map<int64_t , int64_t > reducedEventIds;
2972- int64_t reducedEventCounter = 0 ;
2925+ std::unordered_map<int64_t , int32_t > reducedEventIds;
2926+ int32_t reducedEventCounter = 0 ;
29732927 for (auto const & [collisionIndex, collisionInfo] : fCollisionInfos ) {
29742928 reducedEventIds.emplace (collisionInfo.index , reducedEventCounter);
29752929 reducedEventCounter += 1 ;
@@ -2981,7 +2935,7 @@ struct qaMatching {
29812935 if (it == reducedEventIds.end ()) {
29822936 continue ;
29832937 }
2984- int64_t reducedEventId = it->second ;
2938+ int32_t reducedEventId = it->second ;
29852939 auto collision = collisions.rawIteratorAt (collisionInfo.index );
29862940 FillQaMatchingAodEventForCollision (collisionInfo, collision, reducedEventId, debugCounter);
29872941 FillQaMatchingMchTracksForCollision (collisionInfo, collisions, collision, muonTracks, mftTracks, bcs, reducedEventId);
@@ -3003,7 +2957,7 @@ struct qaMatching {
30032957 if (it == reducedEventIds.end ()) {
30042958 continue ;
30052959 }
3006- int64_t reducedEventId = it->second ;
2960+ int32_t reducedEventId = it->second ;
30072961 MatchingCandidates matchingCandidates;
30082962 RunChi2Matching (collisions, bcs, muonTracks, mftTracks, mftCovs, aodLabel.name , collisionInfo.matchablePairs , collisionInfo.matchingCandidates , matchingCandidates);
30092963 auto collision = collisions.rawIteratorAt (collisionInfo.index );
0 commit comments