Skip to content

Commit b61aafd

Browse files
[PWGHF] added tracks efficiency calculation block (#9877)
Co-authored-by: ALICE Action Bot <alibuild@cern.ch>
1 parent f5bf8a2 commit b61aafd

File tree

1 file changed

+36
-17
lines changed

1 file changed

+36
-17
lines changed

PWGHF/HFC/TableProducer/correlatorLcHadrons.cxx

Lines changed: 36 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -226,6 +226,8 @@ struct HfCorrelatorLcHadrons {
226226
Filter lcFilter = ((o2::aod::hf_track_index::hfflag & static_cast<uint8_t>(1 << aod::hf_cand_3prong::DecayType::LcToPKPi)) != static_cast<uint8_t>(0)) && (aod::hf_sel_candidate_lc::isSelLcToPKPi >= selectionFlagLc || aod::hf_sel_candidate_lc::isSelLcToPiKP >= selectionFlagLc);
227227
Filter trackFilter = (nabs(aod::track::eta) < etaTrackMax) && (nabs(aod::track::pt) > ptTrackMin) && (nabs(aod::track::dcaXY) < dcaXYTrackMax) && (nabs(aod::track::dcaZ) < dcaZTrackMax);
228228

229+
// Preslice<aod::McParticles> perTrueCollision = o2::aod::mcparticle::McCollisionId;
230+
Preslice<aod::McParticles> perTrueCollision = o2::aod::mcparticle::mcCollisionId;
229231
// configurable axis definition
230232
ConfigurableAxis binsMultiplicity{"binsMultiplicity", {VARIABLE_WIDTH, 0.0f, 2000.0f, 6000.0f, 100000.0f}, "Mixing bins - multiplicity"};
231233
ConfigurableAxis binsZVtx{"binsZVtx", {VARIABLE_WIDTH, -10.0f, -2.5f, 2.5f, 10.0f}, "Mixing bins - z-vertex"};
@@ -247,6 +249,7 @@ struct HfCorrelatorLcHadrons {
247249
AxisSpec axisPhi = {binsPhi, "#it{#varphi}"};
248250
AxisSpec axisPtLc = {(std::vector<double>)binsPtLc, "#it{p}_{T} (GeV/#it{c})"};
249251
AxisSpec axisPtHadron = {(std::vector<double>)binsPtHadron, "#it{p}_{T} Hadron (GeV/#it{c})"};
252+
AxisSpec axisPtTrack = {500, 0, 50, "#it{p}_{T} Hadron (GeV/#it{c})"};
250253
AxisSpec axisMultiplicity = {binsMultiplicity, "Multiplicity"};
251254
AxisSpec axisMultFT0M = {binsMultFT0M, "MultiplicityFT0M"};
252255
AxisSpec axisPosZ = {binsZVtx, "PosZ"};
@@ -298,9 +301,9 @@ struct HfCorrelatorLcHadrons {
298301
registry.add("hYMcRecBkg", "Lc,Hadron candidates - MC reco;candidate #it{#y};entries", {HistType::kTH1F, {axisRapidity}});
299302
registry.add("hFakeTracksMcRec", "Fake tracks - MC Rec", {HistType::kTH1F, {axisPtHadron}});
300303
registry.add("hPtParticleAssocVsCandMcRec", "Associated Particle - MC Rec", {HistType::kTH2F, {{axisPtHadron}, {axisPtLc}}});
301-
registry.add("hPtTracksVsSignRec", "Associated Particle - MC Rec", {HistType::kTH2F, {{axisPtHadron}, {axisSign}}});
302-
registry.add("hPtTracksVsSignRecTrue", "Associated Particle - MC Rec (True)", {HistType::kTH2F, {{axisPtHadron}, {axisSign}}});
303-
registry.add("hPtTracksVsSignGen", "Associated Particle - MC Gen", {HistType::kTH2F, {{axisPtHadron}, {axisSign}}});
304+
registry.add("hPtTracksVsSignRec", "Associated Particle - MC Rec", {HistType::kTH2F, {{axisPtTrack}, {axisSign}}});
305+
registry.add("hPtTracksVsSignRecTrue", "Associated Particle - MC Rec (True)", {HistType::kTH2F, {{axisPtTrack}, {axisSign}}});
306+
registry.add("hPtTracksVsSignGen", "Associated Particle - MC Gen", {HistType::kTH2F, {{axisPtTrack}, {axisSign}}});
304307
registry.add("hPtPrimaryParticleAssocVsCandMcRec", "Associated Particle - MC Rec", {HistType::kTH2F, {{axisPtHadron}, {axisPtLc}}});
305308
registry.add("hPtVsMultiplicityMcRecPrompt", "Multiplicity FT0M - MC Rec Prompt", {HistType::kTH2F, {{axisPtLc}, {axisMultFT0M}}});
306309
registry.add("hPtVsMultiplicityMcRecNonPrompt", "Multiplicity FT0M - MC Rec Non Prompt", {HistType::kTH2F, {{axisPtLc}, {axisMultFT0M}}});
@@ -508,6 +511,7 @@ struct HfCorrelatorLcHadrons {
508511
efficiencyWeightLc = 1. / efficiencyLc->at(o2::analysis::findBin(binsPtEfficiencyLc, candidate.pt()));
509512
}
510513
auto trackPos1 = candidate.template prong0_as<TracksWithMc>(); // positive daughter (negative for the antiparticles)
514+
auto trackPos2 = candidate.template prong2_as<TracksWithMc>();
511515
int8_t chargeLc = trackPos1.sign(); // charge of 1st prong will be the charge of Lc candidate
512516
isLcSignal = TESTBIT(std::abs(candidate.flagMcMatchRec()), aod::hf_cand_3prong::DecayType::LcToPKPi);
513517
isLcPrompt = candidate.originMcRec() == RecoDecay::OriginType::Prompt;
@@ -586,12 +590,18 @@ struct HfCorrelatorLcHadrons {
586590
}
587591
registry.fill(HIST("hLcBin"), poolBin);
588592

589-
if (calTrkEff && !isLcSignal && calEffLcEvent)
590-
continue;
591-
592-
if (calTrkEff && countLc == 1) {
593+
if (calTrkEff && countLc == 1 && (isLcSignal || !calEffLcEvent)) {
593594
// genrated tracks
594-
for (const auto& track : mcParticles) {
595+
decltype(trackPos1.mcParticle_as<aod::McParticles>()) mctrk{};
596+
if (trackPos1.has_mcParticle()) { // ambiguous tracks should be small
597+
mctrk = trackPos1.template mcParticle_as<aod::McParticles>();
598+
} else if (trackPos2.has_mcParticle()) {
599+
mctrk = trackPos2.template mcParticle_as<aod::McParticles>();
600+
} else {
601+
continue;
602+
}
603+
auto gentracks = mcParticles.sliceBy(perTrueCollision, mctrk.mcCollisionId());
604+
for (const auto& track : gentracks) {
595605
if (std::abs(track.eta()) > etaTrackMax || track.pt() < ptTrackMin || track.pt() > ptTrackMax) {
596606
continue;
597607
}
@@ -606,9 +616,14 @@ struct HfCorrelatorLcHadrons {
606616
continue;
607617
}
608618

609-
int8_t chargeTrack = pdg->GetParticle(track.pdgCode())->Charge(); // Retrieve charge
610-
registry.fill(HIST("hPtTracksVsSignGen"), track.pt(), chargeTrack);
619+
auto motherTrkGen = mcParticles.iteratorAt(track.mothersIds()[0]);
620+
if (std::abs(motherTrkGen.pdgCode()) == kLambdaCPlus)
621+
continue;
622+
623+
auto chargeTrack = pdg->GetParticle(track.pdgCode())->Charge(); // Retrieve charge
624+
registry.fill(HIST("hPtTracksVsSignGen"), track.pt(), chargeTrack / (2 * std::abs(chargeTrack)));
611625
}
626+
//}
612627
}
613628

614629
// Lc-Hadron correlation dedicated section
@@ -625,14 +640,18 @@ struct HfCorrelatorLcHadrons {
625640
continue;
626641
}
627642

628-
if (calTrkEff && countLc == 1 && track.has_mcParticle()) {
643+
if (calTrkEff && countLc == 1 && (isLcSignal || !calEffLcEvent) && track.has_mcParticle()) {
629644
auto mcParticle = track.template mcParticle_as<aod::McParticles>();
630645
if (!mcParticle.isPhysicalPrimary() && isRecTrkPhyPrimary)
631646
continue;
632647

633-
registry.fill(HIST("hPtTracksVsSignRec"), track.pt(), track.sign());
648+
auto motherTrk = mcParticles.iteratorAt(mcParticle.mothersIds()[0]);
649+
if (std::abs(motherTrk.pdgCode()) == kLambdaCPlus)
650+
continue;
651+
652+
registry.fill(HIST("hPtTracksVsSignRec"), track.pt(), track.sign() / 2.);
634653
if (std::abs(mcParticle.pdgCode()) == kProton)
635-
registry.fill(HIST("hPtTracksVsSignRecTrue"), track.pt(), track.sign());
654+
registry.fill(HIST("hPtTracksVsSignRecTrue"), track.pt(), track.sign() / 2.);
636655
}
637656

638657
// Removing Lc daughters by checking track indices
@@ -812,8 +831,8 @@ struct HfCorrelatorLcHadrons {
812831
registry.fill(HIST("hPtParticleAssocMcGen"), particleAssoc.pt());
813832
entryLcHadronPair(getDeltaPhi(particleAssoc.phi(), particle.phi()),
814833
particleAssoc.eta() - particle.eta(),
815-
particle.pt() * chargeLc,
816-
particleAssoc.pt() * chargeAssoc,
834+
particle.pt() * chargeLc / std::abs(chargeLc),
835+
particleAssoc.pt() * chargeAssoc / std::abs(chargeAssoc),
817836
poolBin,
818837
correlationStatus);
819838
entryLcHadronRecoInfo(MassLambdaCPlus, true);
@@ -1042,8 +1061,8 @@ struct HfCorrelatorLcHadrons {
10421061
bool isLcPrompt = candidate.originMcGen() == RecoDecay::OriginType::Prompt;
10431062
entryLcHadronPair(getDeltaPhi(particleAssoc.phi(), candidate.phi()),
10441063
particleAssoc.eta() - candidate.eta(),
1045-
candidate.pt() * chargeLc,
1046-
particleAssoc.pt() * chargeAssoc,
1064+
candidate.pt() * chargeLc / std::abs(chargeLc),
1065+
particleAssoc.pt() * chargeAssoc / std::abs(chargeAssoc),
10471066
poolBin,
10481067
correlationStatus);
10491068
entryLcHadronRecoInfo(MassLambdaCPlus, true);

0 commit comments

Comments
 (0)