Skip to content

Commit 3034a43

Browse files
committed
PWGEM/Dilepton: update matchingMFT.cxx
1 parent fbfa10a commit 3034a43

File tree

1 file changed

+46
-21
lines changed

1 file changed

+46
-21
lines changed

PWGEM/Dilepton/Tasks/matchingMFT.cxx

Lines changed: 46 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -568,26 +568,37 @@ struct matchingMFT {
568568
fRegistry.fill(HIST("Event/hMultFT0CvsMultNTracksPV"), collision.multFT0C(), collision.multNTracksPV());
569569
}
570570

571-
// template <typename TMCParticles>
572-
// void runGen(TMCParticles const& mcParticles)
573-
// {
574-
// for (const auto& mcParticle : mcParticles) {
575-
// if (std::abs(mcParticle.pdgCode()) != 13) { // select true muon
576-
// continue;
577-
// }
578-
// if (!(mcParticle.isPhysicalPrimary() || mcParticle.producedByGenerator())) {
579-
// continue;
580-
// }
581-
// if (mcParticle.eta() < minEtaGL || maxEtaGL < mcParticle.eta()) {
582-
// continue;
583-
// }
584-
585-
// fRegistry.fill(HIST("Generated/primary/hs"), mcParticle.pt(), mcParticle.eta(), mcParticle.phi());
586-
587-
// } // end of mc particles
588-
// }
571+
std::vector<std::tuple<int, int, int>> vec_min_chi2MatchMCHMFT; // std::pair<globalIndex of global muon, globalIndex of matched MCH-MID, globalIndex of MFT> -> chi2MatchMCHMFT;
572+
template <typename TMuons>
573+
void findBestMatchPerMCHMID(TMuons const& muons)
574+
{
575+
vec_min_chi2MatchMCHMFT.reserve(muons.size());
576+
for (const auto& muon : muons) {
577+
if (muon.trackType() == o2::aod::fwdtrack::ForwardTrackTypeEnum::MuonStandaloneTrack) {
578+
const auto& muons_per_MCHMID = muons.sliceBy(fwdtracksPerMCHTrack, muon.globalIndex());
579+
// LOGF(info, "stanadalone: muon.globalIndex() = %d, muon.chi2MatchMCHMFT() = %f", muon.globalIndex(), muon.chi2MatchMCHMFT());
580+
// LOGF(info, "muons_per_MCHMID.size() = %d", muons_per_MCHMID.size());
581+
582+
float min_chi2MatchMCHMFT = 1e+10;
583+
std::tuple<int, int, int> tupleIds_at_min;
584+
for (const auto& muon_tmp : muons_per_MCHMID) {
585+
if (muon_tmp.trackType() == o2::aod::fwdtrack::ForwardTrackTypeEnum::GlobalMuonTrack) {
586+
// LOGF(info, "muon_tmp.globalIndex() = %d, muon_tmp.matchMCHTrackId() = %d, muon_tmp.matchMFTTrackId() = %d, muon_tmp.chi2MatchMCHMFT() = %f", muon_tmp.globalIndex(), muon_tmp.matchMCHTrackId(), muon_tmp.matchMFTTrackId(), muon_tmp.chi2MatchMCHMFT());
587+
if (0.f < muon_tmp.chi2MatchMCHMFT() && muon_tmp.chi2MatchMCHMFT() < min_chi2MatchMCHMFT) {
588+
min_chi2MatchMCHMFT = muon_tmp.chi2MatchMCHMFT();
589+
tupleIds_at_min = std::make_tuple(muon_tmp.globalIndex(), muon_tmp.matchMCHTrackId(), muon_tmp.matchMFTTrackId());
590+
}
591+
}
592+
}
593+
vec_min_chi2MatchMCHMFT.emplace_back(tupleIds_at_min);
594+
// mCandidates[tupleIds_at_min] = min_chi2MatchMCHMFT;
595+
// LOGF(info, "min: muon_tmp.globalIndex() = %d, muon_tmp.matchMCHTrackId() = %d, muon_tmp.matchMFTTrackId() = %d, muon_tmp.chi2MatchMCHMFT() = %f", std::get<0>(tupleIds_at_min), std::get<1>(tupleIds_at_min), std::get<2>(tupleIds_at_min), min_chi2MatchMCHMFT);
596+
}
597+
} // end of muon loop
598+
}
589599

590600
SliceCache cache;
601+
PresliceUnsorted<aod::FwdTracks> fwdtracksPerMCHTrack = aod::fwdtrack::matchMCHTrackId;
591602
PresliceUnsorted<aod::FwdTracks> perMFTTrack = o2::aod::fwdtrack::matchMFTTrackId;
592603
Preslice<aod::FwdTracks> perCollision = o2::aod::fwdtrack::collisionId;
593604
Preslice<aod::FwdTrackAssoc> fwdtrackIndicesPerCollision = aod::track_association::collisionId;
@@ -599,6 +610,8 @@ struct matchingMFT {
599610

600611
void processWithoutFTTCA(FilteredMyCollisions const& collisions, MyFwdTracks const& fwdtracks, MyMFTTracks const& mfttracks, aod::BCsWithTimestamps const&, aod::McParticles const&)
601612
{
613+
findBestMatchPerMCHMID(fwdtracks);
614+
602615
for (const auto& collision : collisions) {
603616
const auto& bc = collision.template bc_as<aod::BCsWithTimestamps>();
604617
initCCDB(bc);
@@ -621,15 +634,22 @@ struct matchingMFT {
621634
if (fwdtrack.trackType() != o2::aod::fwdtrack::ForwardTrackTypeEnum::GlobalMuonTrack) {
622635
continue;
623636
}
637+
if (fwdtrack.trackType() == o2::aod::fwdtrack::ForwardTrackTypeEnum::GlobalMuonTrack && std::find(vec_min_chi2MatchMCHMFT.begin(), vec_min_chi2MatchMCHMFT.end(), std::make_tuple(fwdtrack.globalIndex(), fwdtrack.matchMCHTrackId(), fwdtrack.matchMFTTrackId())) == vec_min_chi2MatchMCHMFT.end()) {
638+
continue;
639+
}
624640
fillHistograms(collision, fwdtrack, fwdtracks, mfttracks);
625641
} // end of fwdtrack loop
626642
} // end of collision loop
627-
// runGen(mcParticles);
643+
644+
vec_min_chi2MatchMCHMFT.clear();
645+
vec_min_chi2MatchMCHMFT.shrink_to_fit();
628646
}
629647
PROCESS_SWITCH(matchingMFT, processWithoutFTTCA, "process without FTTCA", false);
630648

631649
void processWithFTTCA(FilteredMyCollisions const& collisions, MyFwdTracks const& fwdtracks, MyMFTTracks const& mfttracks, aod::BCsWithTimestamps const&, aod::FwdTrackAssoc const& fwdtrackIndices, aod::McParticles const&)
632650
{
651+
findBestMatchPerMCHMID(fwdtracks);
652+
633653
for (const auto& collision : collisions) {
634654
const auto& bc = collision.template bc_as<aod::BCsWithTimestamps>();
635655
initCCDB(bc);
@@ -650,13 +670,18 @@ struct matchingMFT {
650670
const auto& fwdtrackIdsThisCollision = fwdtrackIndices.sliceBy(fwdtrackIndicesPerCollision, collision.globalIndex());
651671
for (const auto& fwdtrackId : fwdtrackIdsThisCollision) {
652672
const auto& fwdtrack = fwdtrackId.template fwdtrack_as<MyFwdTracks>();
653-
if (fwdtrack.trackType() != o2::aod::fwdtrack::ForwardTrackTypeEnum::GlobalMuonTrack && fwdtrack.trackType()) {
673+
if (fwdtrack.trackType() != o2::aod::fwdtrack::ForwardTrackTypeEnum::GlobalMuonTrack) {
674+
continue;
675+
}
676+
if (fwdtrack.trackType() == o2::aod::fwdtrack::ForwardTrackTypeEnum::GlobalMuonTrack && std::find(vec_min_chi2MatchMCHMFT.begin(), vec_min_chi2MatchMCHMFT.end(), std::make_tuple(fwdtrack.globalIndex(), fwdtrack.matchMCHTrackId(), fwdtrack.matchMFTTrackId())) == vec_min_chi2MatchMCHMFT.end()) {
654677
continue;
655678
}
656679
fillHistograms(collision, fwdtrack, fwdtracks, mfttracks);
657680
} // end of fwdtrack loop
658681
} // end of collision loop
659-
// runGen(mcParticles);
682+
683+
vec_min_chi2MatchMCHMFT.clear();
684+
vec_min_chi2MatchMCHMFT.shrink_to_fit();
660685
}
661686
PROCESS_SWITCH(matchingMFT, processWithFTTCA, "process with FTTCA", true);
662687
};

0 commit comments

Comments
 (0)