@@ -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