@@ -47,6 +47,7 @@ using namespace o2::framework::expressions;
4747
4848using TracksComplete = soa::Join<aod::Tracks, aod::TracksExtra, aod::TracksDCA>;
4949using V0DatasWithoutTrackX = soa::Join<aod::V0Indices, aod::V0Cores>;
50+ using V0DatasWithoutTrackXMC = soa::Join<aod::V0Indices, aod::V0Cores, aod::McV0Labels>;
5051
5152struct HStrangeCorrelation {
5253 // for efficiency corrections if requested
@@ -654,6 +655,8 @@ struct HStrangeCorrelation {
654655 const AxisSpec preAxisPtTrigger{axisPtTrigger, " #it{p}_{T}^{trigger} (GeV/c)" };
655656 const AxisSpec preAxisVtxZ{axisVtxZ, " vertex Z (cm)" };
656657 const AxisSpec preAxisMult{axisMult, " mult percentile" };
658+ const AxisSpec axisPtLambda{axisPtAssoc, " #it{p}_{T}^{#Lambda} (GeV/c)" };
659+ const AxisSpec axisPtCascade{axisPtAssoc, " #it{p}_{T}^{Mother} (GeV/c)" };
657660
658661 // store the original axes in specific TH1Cs for completeness
659662 histos.add (" axes/hDeltaPhiAxis" , " " , kTH1C , {preAxisDeltaPhi});
@@ -882,6 +885,14 @@ struct HStrangeCorrelation {
882885 }
883886 histos.add (" ClosureTest/hTrigger" , " Trigger Tracks" , kTH3F , {axisPtQA, axisEta, axisMult});
884887 }
888+ if (doprocessFeedDown) {
889+ histos.add (" hLambdaXiMinusFeeddownMatrix" , " hLambdaXiMinusFeeddownMatrix" , kTH2F , {axisPtLambda, axisPtCascade});
890+ histos.add (" hLambdaXiZeroFeeddownMatrix" , " hLambdaXiZeroFeeddownMatrix" , kTH2F , {axisPtLambda, axisPtCascade});
891+ histos.add (" hLambdaOmegaFeeddownMatrix" , " hLambdaOmegaFeeddownMatrix" , kTH2F , {axisPtLambda, axisPtCascade});
892+ histos.add (" hAntiLambdaXiPlusFeeddownMatrix" , " hAntiLambdaXiPlusFeeddownMatrix" , kTH2F , {axisPtLambda, axisPtCascade});
893+ histos.add (" hAntiLambdaXiZeroFeeddownMatrix" , " hAntiLambdaXiZeroFeeddownMatrix" , kTH2F , {axisPtLambda, axisPtCascade});
894+ histos.add (" hAntiLambdaOmegaFeeddownMatrix" , " hAntiLambdaOmegaFeeddownMatrix" , kTH2F , {axisPtLambda, axisPtCascade});
895+ }
885896
886897 // visual inspection of sizes
887898 histos.print ();
@@ -1780,6 +1791,72 @@ struct HStrangeCorrelation {
17801791 }
17811792 }
17821793
1794+ void processFeedDown (soa::Join<aod::Collisions, aod::EvSels, aod::CentFT0Ms, aod::PVMults>::iterator const & collision, aod::AssocV0s const & associatedV0s, aod::McParticles const &, V0DatasWithoutTrackXMC const &, TracksComplete const &, aod::BCsWithTimestamps const &)
1795+ {
1796+
1797+ // ________________________________________________
1798+ // Perform basic event selection
1799+ if (!isCollisionSelected (collision)) {
1800+ return ;
1801+ }
1802+
1803+ for (auto const & v0 : associatedV0s) {
1804+ auto v0Data = v0.v0Core_as <V0DatasWithoutTrackXMC>();
1805+
1806+ // ---] track quality check [---
1807+ auto postrack = v0Data.posTrack_as <TracksComplete>();
1808+ auto negtrack = v0Data.negTrack_as <TracksComplete>();
1809+ if (postrack.tpcNClsCrossedRows () < systCuts.minTPCNCrossedRowsAssociated || negtrack.tpcNClsCrossedRows () < systCuts.minTPCNCrossedRowsAssociated )
1810+ continue ;
1811+
1812+ // ---] syst cuts [---
1813+ if (v0Data.v0radius () < systCuts.v0RadiusMin || v0Data.v0radius () > systCuts.v0RadiusMax ||
1814+ std::abs (v0Data.dcapostopv ()) < systCuts.dcapostopv || std::abs (v0Data.dcanegtopv ()) < systCuts.dcanegtopv ||
1815+ v0Data.v0cosPA () < systCuts.v0cospa || v0Data.dcaV0daughters () > systCuts.dcaV0dau )
1816+ continue ;
1817+
1818+ if (v0Data.has_mcParticle ()) {
1819+ auto v0mcParticle = v0Data.mcParticle_as <aod::McParticles>();
1820+ int mcParticlePdg = v0mcParticle.pdgCode ();
1821+ if (mcParticlePdg == 3122 && !v0mcParticle.isPhysicalPrimary ()) {
1822+ auto v0mothers = v0mcParticle.mothers_as <aod::McParticles>();
1823+ if (!v0mothers.empty ()) {
1824+ auto & v0mcParticleMother = v0mothers.front (); // First mother
1825+ if (v0mcParticleMother.pdgCode () == 3312 ) // Xi Minus Mother Matched
1826+ {
1827+ histos.fill (HIST (" hLambdaXiMinusFeeddownMatrix" ), v0mcParticle.pt (), v0mcParticleMother.pt ());
1828+ }
1829+ if (v0mcParticleMother.pdgCode () == 3322 ) // Xi Zero Mother Matched
1830+ {
1831+ histos.fill (HIST (" hLambdaXiZeroFeeddownMatrix" ), v0mcParticle.pt (), v0mcParticleMother.pt ());
1832+ }
1833+ if (v0mcParticleMother.pdgCode () == 3334 ) // Omega Mother Matched
1834+ {
1835+ histos.fill (HIST (" hLambdaOmegaFeeddownMatrix" ), v0mcParticle.pt (), v0mcParticleMother.pt ());
1836+ }
1837+ }
1838+ }
1839+ if (mcParticlePdg == -3122 && !v0mcParticle.isPhysicalPrimary ()) {
1840+ auto v0mothers = v0mcParticle.mothers_as <aod::McParticles>();
1841+ if (!v0mothers.empty ()) {
1842+ auto & v0mcParticleMother = v0mothers.front (); // First mother
1843+ if (v0mcParticleMother.pdgCode () == -3312 ) // Xi Plus Mother Matched
1844+ {
1845+ histos.fill (HIST (" hAntiLambdaXiPlusFeeddownMatrix" ), v0mcParticle.pt (), v0mcParticleMother.pt ());
1846+ }
1847+ if (v0mcParticleMother.pdgCode () == -3322 ) // Anti Xi Zero Mother Matched
1848+ {
1849+ histos.fill (HIST (" hAntiLambdaXiZeroFeeddownMatrix" ), v0mcParticle.pt (), v0mcParticleMother.pt ());
1850+ }
1851+ if (v0mcParticleMother.pdgCode () == -3334 ) // Omega Mother Matched
1852+ {
1853+ histos.fill (HIST (" hAntiLambdaOmegaFeeddownMatrix" ), v0mcParticle.pt (), v0mcParticleMother.pt ());
1854+ }
1855+ }
1856+ }
1857+ }
1858+ }
1859+ }
17831860 PROCESS_SWITCH (HStrangeCorrelation, processSelectEventWithTrigger, " Select events with trigger only" , true );
17841861 PROCESS_SWITCH (HStrangeCorrelation, processSameEventHV0s, " Process same events, h-V0s" , true );
17851862 PROCESS_SWITCH (HStrangeCorrelation, processSameEventHCascades, " Process same events, h-Cascades" , true );
@@ -1793,6 +1870,7 @@ struct HStrangeCorrelation {
17931870
17941871 PROCESS_SWITCH (HStrangeCorrelation, processMCGenerated, " Process MC generated" , false );
17951872 PROCESS_SWITCH (HStrangeCorrelation, processClosureTest, " Process Closure Test" , false );
1873+ PROCESS_SWITCH (HStrangeCorrelation, processFeedDown, " process Feed Down" , false );
17961874};
17971875
17981876WorkflowSpec defineDataProcessing (ConfigContext const & cfgc)
0 commit comments