Skip to content

Commit 1d5c6ce

Browse files
authored
[PWGEM/Dilepton] update matchingMFT.cxx (#12874)
1 parent 61616dc commit 1d5c6ce

File tree

1 file changed

+47
-21
lines changed

1 file changed

+47
-21
lines changed

PWGEM/Dilepton/Tasks/matchingMFT.cxx

Lines changed: 47 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838

3939
#include <map>
4040
#include <string>
41+
#include <tuple>
4142
#include <unordered_map>
4243
#include <vector>
4344

@@ -568,26 +569,37 @@ struct matchingMFT {
568569
fRegistry.fill(HIST("Event/hMultFT0CvsMultNTracksPV"), collision.multFT0C(), collision.multNTracksPV());
569570
}
570571

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-
// }
572+
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;
573+
template <typename TMuons>
574+
void findBestMatchPerMCHMID(TMuons const& muons)
575+
{
576+
vec_min_chi2MatchMCHMFT.reserve(muons.size());
577+
for (const auto& muon : muons) {
578+
if (muon.trackType() == o2::aod::fwdtrack::ForwardTrackTypeEnum::MuonStandaloneTrack) {
579+
const auto& muons_per_MCHMID = muons.sliceBy(fwdtracksPerMCHTrack, muon.globalIndex());
580+
// LOGF(info, "stanadalone: muon.globalIndex() = %d, muon.chi2MatchMCHMFT() = %f", muon.globalIndex(), muon.chi2MatchMCHMFT());
581+
// LOGF(info, "muons_per_MCHMID.size() = %d", muons_per_MCHMID.size());
582+
583+
float min_chi2MatchMCHMFT = 1e+10;
584+
std::tuple<int, int, int> tupleIds_at_min;
585+
for (const auto& muon_tmp : muons_per_MCHMID) {
586+
if (muon_tmp.trackType() == o2::aod::fwdtrack::ForwardTrackTypeEnum::GlobalMuonTrack) {
587+
// 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());
588+
if (0.f < muon_tmp.chi2MatchMCHMFT() && muon_tmp.chi2MatchMCHMFT() < min_chi2MatchMCHMFT) {
589+
min_chi2MatchMCHMFT = muon_tmp.chi2MatchMCHMFT();
590+
tupleIds_at_min = std::make_tuple(muon_tmp.globalIndex(), muon_tmp.matchMCHTrackId(), muon_tmp.matchMFTTrackId());
591+
}
592+
}
593+
}
594+
vec_min_chi2MatchMCHMFT.emplace_back(tupleIds_at_min);
595+
// mCandidates[tupleIds_at_min] = min_chi2MatchMCHMFT;
596+
// 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);
597+
}
598+
} // end of muon loop
599+
}
589600

590601
SliceCache cache;
602+
PresliceUnsorted<aod::FwdTracks> fwdtracksPerMCHTrack = aod::fwdtrack::matchMCHTrackId;
591603
PresliceUnsorted<aod::FwdTracks> perMFTTrack = o2::aod::fwdtrack::matchMFTTrackId;
592604
Preslice<aod::FwdTracks> perCollision = o2::aod::fwdtrack::collisionId;
593605
Preslice<aod::FwdTrackAssoc> fwdtrackIndicesPerCollision = aod::track_association::collisionId;
@@ -599,6 +611,8 @@ struct matchingMFT {
599611

600612
void processWithoutFTTCA(FilteredMyCollisions const& collisions, MyFwdTracks const& fwdtracks, MyMFTTracks const& mfttracks, aod::BCsWithTimestamps const&, aod::McParticles const&)
601613
{
614+
findBestMatchPerMCHMID(fwdtracks);
615+
602616
for (const auto& collision : collisions) {
603617
const auto& bc = collision.template bc_as<aod::BCsWithTimestamps>();
604618
initCCDB(bc);
@@ -621,15 +635,22 @@ struct matchingMFT {
621635
if (fwdtrack.trackType() != o2::aod::fwdtrack::ForwardTrackTypeEnum::GlobalMuonTrack) {
622636
continue;
623637
}
638+
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()) {
639+
continue;
640+
}
624641
fillHistograms(collision, fwdtrack, fwdtracks, mfttracks);
625642
} // end of fwdtrack loop
626643
} // end of collision loop
627-
// runGen(mcParticles);
644+
645+
vec_min_chi2MatchMCHMFT.clear();
646+
vec_min_chi2MatchMCHMFT.shrink_to_fit();
628647
}
629648
PROCESS_SWITCH(matchingMFT, processWithoutFTTCA, "process without FTTCA", false);
630649

631650
void processWithFTTCA(FilteredMyCollisions const& collisions, MyFwdTracks const& fwdtracks, MyMFTTracks const& mfttracks, aod::BCsWithTimestamps const&, aod::FwdTrackAssoc const& fwdtrackIndices, aod::McParticles const&)
632651
{
652+
findBestMatchPerMCHMID(fwdtracks);
653+
633654
for (const auto& collision : collisions) {
634655
const auto& bc = collision.template bc_as<aod::BCsWithTimestamps>();
635656
initCCDB(bc);
@@ -650,13 +671,18 @@ struct matchingMFT {
650671
const auto& fwdtrackIdsThisCollision = fwdtrackIndices.sliceBy(fwdtrackIndicesPerCollision, collision.globalIndex());
651672
for (const auto& fwdtrackId : fwdtrackIdsThisCollision) {
652673
const auto& fwdtrack = fwdtrackId.template fwdtrack_as<MyFwdTracks>();
653-
if (fwdtrack.trackType() != o2::aod::fwdtrack::ForwardTrackTypeEnum::GlobalMuonTrack && fwdtrack.trackType()) {
674+
if (fwdtrack.trackType() != o2::aod::fwdtrack::ForwardTrackTypeEnum::GlobalMuonTrack) {
675+
continue;
676+
}
677+
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()) {
654678
continue;
655679
}
656680
fillHistograms(collision, fwdtrack, fwdtracks, mfttracks);
657681
} // end of fwdtrack loop
658682
} // end of collision loop
659-
// runGen(mcParticles);
683+
684+
vec_min_chi2MatchMCHMFT.clear();
685+
vec_min_chi2MatchMCHMFT.shrink_to_fit();
660686
}
661687
PROCESS_SWITCH(matchingMFT, processWithFTTCA, "process with FTTCA", true);
662688
};

0 commit comments

Comments
 (0)