Skip to content

Commit 5165955

Browse files
committed
[PWGDQ] enable processing of real data in matching tasks
The ML training data producer and the matching QA tasks are modified to allow processing real data as well as MC data. A dedicated process function is added to both tasks.
1 parent 20c2770 commit 5165955

2 files changed

Lines changed: 317 additions & 244 deletions

File tree

PWGDQ/Tasks/mftMchMatcher.cxx

Lines changed: 61 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -574,19 +574,13 @@ struct mftMchMatcher {
574574
return result;
575575
}
576576

577-
void processMC(MyEvents const& collisions,
578-
aod::BCsWithTimestamps const& bcs,
579-
MyMuonsMC const& muonTracks,
580-
MyMFTsMC const& mftTracks,
581-
MyMFTCovariances const& mftCovs,
582-
aod::McParticles const& /*mcParticles*/)
577+
template <bool isMc, class TCOLLS, class TBCS, class TMUONS, class TMFTS, class TCOVS>
578+
void fillTable(TCOLLS const& collisions,
579+
TBCS const& /*bcs*/,
580+
TMUONS const& muonTracks,
581+
TMFTS const& mftTracks,
582+
TCOVS const& mftCovs)
583583
{
584-
if (bcs.size() > 0) {
585-
auto bc = bcs.begin();
586-
initCCDB(bc);
587-
VarManager::SetMatchingPlane(fzMatching.value);
588-
}
589-
590584
registry.get<TH1>(HIST("acceptedEvents"))->Fill(0);
591585
// reject a randomly selected fraction of events
592586
if (fSamplingFraction < 1.0) {
@@ -600,7 +594,9 @@ struct mftMchMatcher {
600594
fillBestMuonMatches(muonTracks);
601595

602596
std::vector<std::pair<int64_t, int64_t>> matchablePairs;
603-
fillMatchablePairs(muonTracks, mftTracks, matchablePairs);
597+
if constexpr (isMc) {
598+
fillMatchablePairs(muonTracks, mftTracks, matchablePairs);
599+
}
604600

605601
mftCovIndexes.clear();
606602
for (auto& mftTrackCov : mftCovs) {
@@ -626,10 +622,10 @@ struct mftMchMatcher {
626622
}
627623

628624
const auto& collision = collisions.rawIteratorAt(muon.collisionId());
629-
auto bc_coll = collision.bc_as<aod::BCsWithTimestamps>();
625+
auto bc_coll = collision.template bc_as<TBCS>();
630626

631-
auto muontrack = muon.template matchMCHTrack_as<MyMuonsMC>();
632-
auto mfttrack = muon.template matchMFTTrack_as<MyMFTsMC>();
627+
auto muontrack = muon.template matchMCHTrack_as<TMUONS>();
628+
auto mfttrack = muon.template matchMFTTrack_as<TMFTS>();
633629
auto const& mfttrackcov = mftCovs.rawIteratorAt(mftCovIndexes[mfttrack.globalIndex()]);
634630

635631
auto muonTime = muontrack.trackTime() + bc_coll.globalBC() * o2::constants::lhc::LHCBunchSpacingNS;
@@ -657,9 +653,21 @@ struct mftMchMatcher {
657653
bool IsAmbig = (muon.compatibleCollIds().size() != 1);
658654
int MFTMult = collision.mftNtracks();
659655

660-
auto matchType = getMatchType(muon, muonTracks, mftTracks, matchablePairs, isBestMatch);
656+
auto matchType = kMatchTypeUndefined;
657+
if constexpr (isMc) {
658+
matchType = getMatchType(muon, muonTracks, mftTracks, matchablePairs, isBestMatch);
659+
}
661660
bool isSignal = (matchType == kMatchTypeTrueLeading) || (matchType == kMatchTypeTrueNonLeading);
662661

662+
int mcMaskMuon = 0;
663+
int mcMaskMft = 0;
664+
int ncMaskGlob = 0;
665+
if constexpr (isMc) {
666+
mcMaskMuon = muontrack.mcMask();
667+
mcMaskMft = mfttrack.mcMask();
668+
ncMaskGlob = muon.mcMask();
669+
}
670+
663671
registry.get<TH1>(HIST("matchType"))->Fill(static_cast<int>(matchType));
664672

665673
fwdMatchMLCandidates(
@@ -719,15 +727,48 @@ struct mftMchMatcher {
719727
muon.fwdDcaY(),
720728
IsAmbig,
721729
MFTMult,
722-
muontrack.mcMask(),
723-
mfttrack.mcMask(),
724-
muon.mcMask(),
730+
mcMaskMuon,
731+
mcMaskMft,
732+
ncMaskGlob,
725733
static_cast<int>(matchType),
726734
isSignal);
727735
}
728736
}
729737

738+
void processMC(MyEvents const& collisions,
739+
aod::BCsWithTimestamps const& bcs,
740+
MyMuonsMC const& muonTracks,
741+
MyMFTsMC const& mftTracks,
742+
MyMFTCovariances const& mftCovs,
743+
aod::McParticles const& /*mcParticles*/)
744+
{
745+
if (bcs.size() > 0) {
746+
auto bc = bcs.begin();
747+
initCCDB(bc);
748+
VarManager::SetMatchingPlane(fzMatching.value);
749+
}
750+
751+
fillTable<true>(collisions, bcs, muonTracks, mftTracks, mftCovs);
752+
}
753+
730754
PROCESS_SWITCH(mftMchMatcher, processMC, "process_MC", true);
755+
756+
void processRD(MyEvents const& collisions,
757+
aod::BCsWithTimestamps const& bcs,
758+
MyMuonsWithCov const& muonTracks,
759+
MyMFTs const& mftTracks,
760+
MyMFTCovariances const& mftCovs)
761+
{
762+
if (bcs.size() > 0) {
763+
auto bc = bcs.begin();
764+
initCCDB(bc);
765+
VarManager::SetMatchingPlane(fzMatching.value);
766+
}
767+
768+
fillTable<false>(collisions, bcs, muonTracks, mftTracks, mftCovs);
769+
}
770+
771+
PROCESS_SWITCH(mftMchMatcher, processRD, "process_RD", false);
731772
};
732773

733774
WorkflowSpec defineDataProcessing(ConfigContext const& cfgc)

0 commit comments

Comments
 (0)