Skip to content

Commit fc3192d

Browse files
committed
Update
1 parent 802603e commit fc3192d

1 file changed

Lines changed: 30 additions & 104 deletions

File tree

PWGDQ/Tasks/qaMatching.cxx

Lines changed: 30 additions & 104 deletions
Original file line numberDiff line numberDiff line change
@@ -1334,28 +1334,7 @@ struct QaMatching {
13341334
{
13351335
return isGoodGlobalMatching(candidate, cfgMatchingChi2ScoreMftMchLow);
13361336
}
1337-
/*
1338-
template <class TMUON>
1339-
bool isGoodGlobalMatching(const TMUON& muonTrack,
1340-
double matchingScore,
1341-
double matchingScoreCut)
1342-
{
1343-
if (static_cast<int>(muonTrack.trackType()) > GlobalTrackTypeMax)
1344-
return false;
1345-
1346-
// MFT-MCH matching score cut
1347-
if (matchingScore < matchingScoreCut)
1348-
return false;
13491337

1350-
return true;
1351-
}
1352-
1353-
template <class TMUON>
1354-
bool isGoodGlobalMatching(const TMUON& muonTrack, double matchingScore)
1355-
{
1356-
return isGoodGlobalMatching(muonTrack, matchingScore, cfgMatchingChi2ScoreMftMchLow);
1357-
}
1358-
*/
13591338
bool isTrueGlobalMatching(const MatchingCandidate& candidate, const std::vector<std::pair<int64_t, int64_t>>& matchablePairs)
13601339
{
13611340
if (candidate.trackType > GlobalTrackTypeMax)
@@ -1368,21 +1347,7 @@ struct QaMatching {
13681347

13691348
return (std::find(matchablePairs.begin(), matchablePairs.end(), trackIndexes) != matchablePairs.end());
13701349
}
1371-
/*
1372-
template <class TMUON>
1373-
bool isTrueGlobalMatching(const TMUON& muonTrack, const std::vector<std::pair<int64_t, int64_t>>& matchablePairs)
1374-
{
1375-
if (static_cast<int>(muonTrack.trackType()) > GlobalTrackTypeMax)
1376-
return false;
1377-
1378-
int64_t mchTrackId = static_cast<int64_t>(muonTrack.matchMCHTrackId());
1379-
int64_t mftTrackId = static_cast<int64_t>(muonTrack.matchMFTTrackId());
13801350

1381-
std::pair<int64_t, int64_t> trackIndexes = std::make_pair(mchTrackId, mftTrackId);
1382-
1383-
return (std::find(matchablePairs.begin(), matchablePairs.end(), trackIndexes) != matchablePairs.end());
1384-
}
1385-
*/
13861351
bool isMatchableMch(int64_t mchTrackId, const std::vector<std::pair<int64_t, int64_t>>& matchablePairs)
13871352
{
13881353
for (const auto& [id1, id2] : matchablePairs) {
@@ -1847,44 +1812,7 @@ struct QaMatching {
18471812

18481813
return result;
18491814
}
1850-
/*
1851-
template <class TMUON, class TMUONS, class TMFTS>
1852-
MuonMatchType getMatchType(const TMUON& muonTrack,
1853-
TMUONS const& muonTracks,
1854-
TMFTS const& mftTracks,
1855-
const std::vector<std::pair<int64_t, int64_t>>& matchablePairs,
1856-
int ranking)
1857-
{
1858-
bool verbose{false};
1859-
if (static_cast<int>(muonTrack.trackType()) > GlobalTrackTypeMax)
1860-
return kMatchTypeUndefined;
1861-
1862-
auto const& mchTrack = muonTrack.template matchMCHTrack_as<TMUONS>();
1863-
1864-
//if (mchTrack.globalIndex() == 229 && muonTrack.globalIndex() == 230) verbose = true;
1865-
1866-
bool isPairable = isMatchableMch(mchTrack.globalIndex(), matchablePairs);
1867-
bool isTrueMatch = isTrueGlobalMatching(muonTrack, matchablePairs);
1868-
int decayRanking = getDecayRanking(mchTrack, mftTracks);
1869-
1870-
if (verbose) std::cout << std::format("[TOTO] ranking={} isPairable={} isTrueMatch={} decayRanking={} ", ranking, isPairable, isTrueMatch, decayRanking) << std::endl;
18711815

1872-
MuonMatchType result{kMatchTypeUndefined};
1873-
if (isPairable) {
1874-
if (isTrueMatch) {
1875-
result = (ranking == 1) ? kMatchTypeTrueLeading : kMatchTypeTrueNonLeading;
1876-
} else {
1877-
result = (ranking == 1) ? kMatchTypeWrongLeading : kMatchTypeWrongNonLeading;
1878-
}
1879-
} else if (decayRanking == DecayRankingDirect) {
1880-
result = (ranking == 1) ? kMatchTypeDecayLeading : kMatchTypeDecayNonLeading;
1881-
} else {
1882-
result = (ranking == 1) ? kMatchTypeFakeLeading : kMatchTypeFakeNonLeading;
1883-
}
1884-
1885-
return result;
1886-
}
1887-
*/
18881816
// tag muons based on the track quality and the track position at the front and back MFT planes
18891817
template <class TMUON, class C>
18901818
void getTaggedMuons(const CollisionInfo& collisionInfo,
@@ -1971,26 +1899,7 @@ struct QaMatching {
19711899
}
19721900
}
19731901
}
1974-
/*
1975-
template <class TMUONS>
1976-
int64_t getGlobalFwdTrackIndex(const TMUONS& muonTracks, int64_t mchIndex, int64_t mftIndex)
1977-
{
1978-
int64_t result = -1;
1979-
for (const auto& muonTrack : muonTracks) {
1980-
if (static_cast<int>(muonTrack.trackType()) > GlobalTrackTypeMax) {
1981-
continue;
1982-
}
1983-
if (mchIndex != muonTrack.matchMCHTrackId()) {
1984-
continue;
1985-
}
1986-
if (mftIndex != muonTrack.matchMFTTrackId()) {
1987-
continue;
1988-
}
1989-
result = muonTrack.globalIndex();
1990-
}
1991-
return result;
1992-
}
1993-
*/
1902+
19941903
double getMuMuInvariantMass(const o2::mch::TrackParam& track1, const o2::mch::TrackParam& track2)
19951904
{
19961905
ROOT::Math::PxPyPzMVector muon1{
@@ -2798,9 +2707,7 @@ struct QaMatching {
27982707
return;
27992708
auto matchingFunc = mMatchingFunctionMap.at(funcName);
28002709

2801-
int id1 = 0;
28022710
for (const auto& muonTrack : muonTracks) {
2803-
id1 += 1;
28042711
if (!muonTrack.has_collision()) {
28052712
continue;
28062713
}
@@ -2820,10 +2727,8 @@ struct QaMatching {
28202727
const auto& collMch = collisions.rawIteratorAt(muonTrack.collisionId());
28212728
const auto& bcMch = bcs.rawIteratorAt(collMch.bcId());
28222729

2823-
int id2 = 0;
28242730
// loop over MFT track/covariance mapping
28252731
for (const auto& [mftIndex, mftCovIndex] : mftTrackCovs) {
2826-
id2 += 1;
28272732
auto const& mftTrack = mftTracks.rawIteratorAt(mftIndex);
28282733
auto const& mftTrackCov = mftCovs.rawIteratorAt(mftCovIndex);
28292734

@@ -2834,6 +2739,7 @@ struct QaMatching {
28342739
const auto& collMft = collisions.rawIteratorAt(mftTrack.collisionId());
28352740
const auto& bcMft = bcs.rawIteratorAt(collMft.bcId());
28362741

2742+
// check time compatibility between MCH and MFT tracks
28372743
int64_t deltaBc = static_cast<int64_t>(bcMft.globalBC()) - static_cast<int64_t>(bcMch.globalBC());
28382744
double deltaBcNS = o2::constants::lhc::LHCBunchSpacingNS * deltaBc;
28392745
double deltaTrackTime = mftTrack.trackTime() - muonTrack.trackTime() + deltaBcNS;
@@ -2882,7 +2788,7 @@ struct QaMatching {
28822788
if (matchingCandidateIterator != newMatchingCandidates.end()) {
28832789
matchingCandidateIterator->second.emplace_back(MatchingCandidate{
28842790
muonTrack.collisionId(),
2885-
globalTrackIndex, //candidate.globalTrackId,
2791+
globalTrackIndex,
28862792
mchIndex,
28872793
mftTrack.globalIndex(),
28882794
globalTrackType,
@@ -2898,7 +2804,7 @@ struct QaMatching {
28982804
} else {
28992805
newMatchingCandidates[mchIndex].emplace_back(MatchingCandidate{
29002806
muonTrack.collisionId(),
2901-
globalTrackIndex, //candidate.globalTrackId,
2807+
globalTrackIndex,
29022808
mchIndex,
29032809
mftTrack.globalIndex(),
29042810
globalTrackType,
@@ -2943,7 +2849,7 @@ struct QaMatching {
29432849
ranking += 1;
29442850
}
29452851
}
2946-
}
2852+
}
29472853

29482854
template <bool isMC, class C, class BC, class TMUON, class TMFT, class CMFT>
29492855
void runChi2Matching(C const& collisions,
@@ -3000,9 +2906,6 @@ struct QaMatching {
30002906
if (!muonTrack.has_collision()) {
30012907
continue;
30022908
}
3003-
int64_t mchIndex = muonTrack.globalIndex();
3004-
3005-
auto collision = collisions.rawIteratorAt(muonTrack.collisionId());
30062909

30072910
// skip global tracks
30082911
if (static_cast<int>(muonTrack.trackType()) <= GlobalTrackTypeMax) {
@@ -3013,11 +2916,34 @@ struct QaMatching {
30132916
continue;
30142917
}
30152918

2919+
int64_t mchIndex = muonTrack.globalIndex();
2920+
auto collision = collisions.rawIteratorAt(muonTrack.collisionId());
2921+
2922+
const auto& collMch = collisions.rawIteratorAt(muonTrack.collisionId());
2923+
const auto& bcMch = bcs.rawIteratorAt(collMch.bcId());
2924+
30162925
// loop over MFT track/covariance mapping
30172926
for (const auto& [mftIndex, mftCovIndex] : mftTrackCovs) {
30182927
auto const& mftTrack = mftTracks.rawIteratorAt(mftIndex);
30192928
auto const& mftTrackCov = mftCovs.rawIteratorAt(mftCovIndex);
30202929

2930+
if (!mftTrack.has_collision()) {
2931+
continue;
2932+
}
2933+
2934+
const auto& collMft = collisions.rawIteratorAt(mftTrack.collisionId());
2935+
const auto& bcMft = bcs.rawIteratorAt(collMft.bcId());
2936+
2937+
// check time compatibility between MCH and MFT tracks
2938+
int64_t deltaBc = static_cast<int64_t>(bcMft.globalBC()) - static_cast<int64_t>(bcMch.globalBC());
2939+
double deltaBcNS = o2::constants::lhc::LHCBunchSpacingNS * deltaBc;
2940+
double deltaTrackTime = mftTrack.trackTime() - muonTrack.trackTime() + deltaBcNS;
2941+
double trackTimeResTot = mftTrack.trackTimeRes() + muonTrack.trackTimeRes();
2942+
2943+
if (std::fabs(deltaTrackTime) > trackTimeResTot) {
2944+
continue;
2945+
}
2946+
30212947
// get tracks parameters in O2 format
30222948
auto mftTrackProp = fwdToTrackPar(mftTrack, mftTrackCov);
30232949
auto mchTrackProp = fwdToTrackPar(muonTrack, muonTrack);
@@ -3075,7 +3001,7 @@ struct QaMatching {
30753001
if (matchingCandidateIterator != newMatchingCandidates.end()) {
30763002
matchingCandidateIterator->second.emplace_back(MatchingCandidate{
30773003
muonTrack.collisionId(),
3078-
globalTrackIndex, //candidate.globalTrackId,
3004+
globalTrackIndex,
30793005
mchIndex,
30803006
mftTrack.globalIndex(),
30813007
globalTrackType,
@@ -3091,7 +3017,7 @@ struct QaMatching {
30913017
} else {
30923018
newMatchingCandidates[mchIndex].emplace_back(MatchingCandidate{
30933019
muonTrack.collisionId(),
3094-
globalTrackIndex, //candidate.globalTrackId,
3020+
globalTrackIndex,
30953021
mchIndex,
30963022
mftTrack.globalIndex(),
30973023
globalTrackType,

0 commit comments

Comments
 (0)