Skip to content

Commit ef4c9a1

Browse files
author
Niveditha Ramasubramanian
committed
Update reducedEvent, fix IsMuon requirement, get _atVtx for candidates
1 parent f4a5e17 commit ef4c9a1

File tree

1 file changed

+43
-89
lines changed

1 file changed

+43
-89
lines changed

PWGDQ/Tasks/qaMatching.cxx

Lines changed: 43 additions & 89 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,6 @@ using namespace o2::aod;
4747

4848
namespace qamatching
4949
{
50-
DECLARE_SOA_COLUMN(ReducedEventId, reducedEventId, int64_t);
5150
DECLARE_SOA_COLUMN(P, p, float);
5251
DECLARE_SOA_COLUMN(Pt, pt, float);
5352
DECLARE_SOA_COLUMN(Eta, eta, float);
@@ -74,11 +73,20 @@ DECLARE_SOA_COLUMN(ColZ, colz, float);
7473
namespace o2::aod
7574
{
7675
DECLARE_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+
{
8290
DECLARE_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

105119
using 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

Comments
 (0)