Skip to content

Commit b923fb3

Browse files
author
Maurice Coquet
committed
Test QA wo cov
1 parent 16a8e58 commit b923fb3

1 file changed

Lines changed: 61 additions & 25 deletions

File tree

PWGDQ/Tasks/qaMatching.cxx

Lines changed: 61 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -255,6 +255,9 @@ struct qaMatching {
255255
std::vector<int64_t> taggedMuons;
256256
};
257257

258+
struct NoCovTag {};
259+
struct WithCovTag {};
260+
258261
using CollisionInfos = std::map<int64_t, CollisionInfo>;
259262

260263
std::unordered_map<int64_t, int32_t> mftTrackCovs;
@@ -2561,12 +2564,13 @@ struct qaMatching {
25612564
}
25622565
}
25632566

2564-
template <class C, class TMUON, class TMFT, class CMFT>
2565-
void ProcessCollisionMC(const CollisionInfo& collisionInfo,
2567+
template <class CovTag, class C, class TMUON, class TMFT, class CMFT = void>
2568+
void ProcessCollisionMC(CovTag,
2569+
const CollisionInfo& collisionInfo,
25662570
C const& collisions,
25672571
TMUON const& muonTracks,
25682572
TMFT const& mftTracks,
2569-
CMFT const& mftCovs)
2573+
CMFT const* mftCovs = nullptr)
25702574
{
25712575
auto collision = collisions.rawIteratorAt(collisionInfo.index);
25722576

@@ -2575,25 +2579,27 @@ struct qaMatching {
25752579

25762580
// Chi2-based matching analysis
25772581
FillMatchingPlotsMC(collision, collisionInfo, muonTracks, mftTracks, collisionInfo.matchingCandidates, collisionInfo.matchingCandidates, collisionInfo.matchablePairs, fMatchingChi2ScoreMftMchLow, fChi2MatchingPlotter.get(), false);
2578-
for (auto& [label, func] : matchingChi2Functions) {
2579-
MatchingCandidates matchingCandidates;
2580-
RunChi2Matching(collisions, muonTracks, mftTracks, mftCovs, label, collisionInfo.matchablePairs, collisionInfo.matchingCandidates, matchingCandidates);
2582+
if constexpr (std::is_same_v<CovTag, WithCovTag>) {
2583+
for (auto& [label, func] : matchingChi2Functions) {
2584+
MatchingCandidates matchingCandidates;
2585+
RunChi2Matching(collisions, muonTracks, mftTracks, *mftCovs, label, collisionInfo.matchablePairs, collisionInfo.matchingCandidates, matchingCandidates);
25812586

2582-
auto* plotter = fMatchingPlotters.at(label).get();
2583-
double matchingScoreCut = matchingScoreCuts.at(label);
2587+
auto* plotter = fMatchingPlotters.at(label).get();
2588+
double matchingScoreCut = matchingScoreCuts.at(label);
25842589

2585-
FillMatchingPlotsMC(collision, collisionInfo, muonTracks, mftTracks, matchingCandidates, collisionInfo.matchingCandidates, collisionInfo.matchablePairs, matchingScoreCut, plotter, false);
2586-
}
2590+
FillMatchingPlotsMC(collision, collisionInfo, muonTracks, mftTracks, matchingCandidates, collisionInfo.matchingCandidates, collisionInfo.matchablePairs, matchingScoreCut, plotter, false);
2591+
}
25872592

2588-
// ML-based matching analysis
2589-
for (auto& [label, mlResponse] : matchingMlResponses) {
2590-
MatchingCandidates matchingCandidates;
2591-
RunMLMatching(collisions, muonTracks, mftTracks, mftCovs, label, collisionInfo.matchablePairs, collisionInfo.matchingCandidates, matchingCandidates);
2593+
// ML-based matching analysis
2594+
for (auto& [label, mlResponse] : matchingMlResponses) {
2595+
MatchingCandidates matchingCandidates;
2596+
RunMLMatching(collisions, muonTracks, mftTracks, *mftCovs, label, collisionInfo.matchablePairs, collisionInfo.matchingCandidates, matchingCandidates);
25922597

2593-
auto* plotter = fMatchingPlotters.at(label).get();
2594-
double matchingScoreCut = matchingScoreCuts.at(label);
2598+
auto* plotter = fMatchingPlotters.at(label).get();
2599+
double matchingScoreCut = matchingScoreCuts.at(label);
25952600

2596-
FillMatchingPlotsMC(collision, collisionInfo, muonTracks, mftTracks, matchingCandidates, collisionInfo.matchingCandidates, collisionInfo.matchablePairs, matchingScoreCut, plotter);
2601+
FillMatchingPlotsMC(collision, collisionInfo, muonTracks, mftTracks, matchingCandidates, collisionInfo.matchingCandidates, collisionInfo.matchablePairs, matchingScoreCut, plotter);
2602+
}
25972603
}
25982604

25992605
// Muons tagging
@@ -2603,18 +2609,25 @@ struct qaMatching {
26032609
continue;
26042610
auto collision = collisions.rawIteratorAt(mchTrack.collisionId());
26052611

2606-
auto const& mftTrack = mftTracks.rawIteratorAt(mftIndex);
2607-
if (mftTrackCovs.count(mftTrack.globalIndex()) < 1) {
2608-
continue;
2609-
}
2610-
auto const& mftTrackCov = mftCovs.rawIteratorAt(mftTrackCovs[mftTrack.globalIndex()]);
2611-
26122612
auto mchTrackAtVertex = VarManager::PropagateMuon(mchTrack, collision, VarManager::kToVertex);
26132613

26142614
// extrapolate to the matching plane
26152615
auto z = o2::mft::constants::mft::LayerZCoordinate()[9];
26162616
auto mchTrackProp = PropagateToZMCH(mchTrackAtVertex, z);
2617-
auto mftTrackProp = PropagateToZMFT(FwdToTrackPar(mftTrack, mftTrackCov), z);
2617+
2618+
auto const& mftTrack = mftTracks.rawIteratorAt(mftIndex);
2619+
o2::track::TrackParCovFwd mftTrackBeforeProp;
2620+
if constexpr (std::is_same_v<CovTag, WithCovTag>) {
2621+
if (mftTrackCovs.count(mftTrack.globalIndex()) < 1) {
2622+
continue;
2623+
}
2624+
auto const& mftTrackCov = mftCovs->rawIteratorAt(mftTrackCovs[mftTrack.globalIndex()]);
2625+
mftTrackBeforeProp = FwdToTrackPar(mftTrack, mftTrackCov);
2626+
} else {
2627+
mftTrackBeforeProp = FwdToTrackPar(mftTrack);
2628+
}
2629+
2630+
auto mftTrackProp = PropagateToZMFT(mftTrackBeforeProp, z);
26182631

26192632
registry.get<TH2>(HIST("matching/MC/pairedMCHTracksAtMFT"))->Fill(mchTrackProp.getX(), mchTrackProp.getY());
26202633
registry.get<TH2>(HIST("matching/MC/pairedMFTTracksAtMFT"))->Fill(mftTrackProp.getX(), mftTrackProp.getY());
@@ -2668,11 +2681,34 @@ struct qaMatching {
26682681
}
26692682

26702683
for (auto const& [collisionIndex, collisionInfo] : fCollisionInfos) {
2671-
ProcessCollisionMC(collisionInfo, collisions, muonTracks, mftTracks, mftCovs);
2684+
ProcessCollisionMC(WithCovTag{}, collisionInfo, collisions, muonTracks, mftTracks, &mftCovs);
26722685
}
26732686
}
26742687

26752688
PROCESS_SWITCH(qaMatching, processQAMC, "processQAMC", true);
2689+
2690+
void processQAMCNoCov(MyEvents const& collisions,
2691+
aod::BCsWithTimestamps const& bcs,
2692+
MyMuonsMC const& muonTracks,
2693+
MyMFTsMC const& mftTracks,
2694+
aod::McParticles const& /*mcParticles*/)
2695+
{
2696+
auto bc = bcs.begin();
2697+
initCCDB(bc);
2698+
2699+
for (auto& muon : muonTracks) {
2700+
registry.get<TH1>(HIST("nTracksPerType"))->Fill(static_cast<int>(muon.trackType()));
2701+
}
2702+
2703+
FillCollisions(collisions, bcs, muonTracks, mftTracks, fCollisionInfos);
2704+
2705+
for (auto const& [collisionIndex, collisionInfo] : fCollisionInfos) {
2706+
ProcessCollisionMC(NoCovTag{}, collisionInfo, collisions, muonTracks, mftTracks);
2707+
}
2708+
}
2709+
2710+
PROCESS_SWITCH(qaMatching, processQAMCNoCov, "processQAMCNoCov", true);
2711+
26762712
};
26772713

26782714
WorkflowSpec defineDataProcessing(ConfigContext const& cfgc)

0 commit comments

Comments
 (0)