diff --git a/PWGLF/DataModel/LFStrangenessTables.h b/PWGLF/DataModel/LFStrangenessTables.h index e089436a5ba..73ee1e0cc52 100644 --- a/PWGLF/DataModel/LFStrangenessTables.h +++ b/PWGLF/DataModel/LFStrangenessTables.h @@ -94,6 +94,21 @@ DECLARE_SOA_TABLE(DauTrackExtras, "AOD", "DAUTRACKEXTRA", //! detector propertie using DauTrackExtra = DauTrackExtras::iterator; +namespace motherParticle +{ +DECLARE_SOA_COLUMN(Px, px, float); //! px +DECLARE_SOA_COLUMN(Py, py, float); //! py +DECLARE_SOA_COLUMN(Pz, pz, float); //! pz +DECLARE_SOA_COLUMN(PDGCode, pdgCode, int); //! pdg code +DECLARE_SOA_COLUMN(IsPhysicalPrimary, isPhysicalPrimary, bool); //! primary criterion +} + +DECLARE_SOA_TABLE(MotherMCParticles, "AOD", "MOTHERMCPART", //! mother MC information + motherParticle::Px, motherParticle::Py, motherParticle::Pz, + motherParticle::PDGCode, motherParticle::IsPhysicalPrimary); + +using MotherMCParticle = MotherMCParticles::iterator; + namespace v0data { //______________________________________________________ @@ -106,6 +121,7 @@ DECLARE_SOA_INDEX_COLUMN(V0, v0); //! DECLARE_SOA_INDEX_COLUMN_FULL(PosTrackExtra, posTrackExtra, int, DauTrackExtras, "_PosExtra"); //! DECLARE_SOA_INDEX_COLUMN_FULL(NegTrackExtra, negTrackExtra, int, DauTrackExtras, "_NegExtra"); //! DECLARE_SOA_INDEX_COLUMN(StraCollision, straCollision); //! +DECLARE_SOA_INDEX_COLUMN(MotherMCParticle, motherMCParticle); //! //______________________________________________________ // REGULAR COLUMNS FOR V0CORES @@ -377,11 +393,16 @@ DECLARE_SOA_TABLE(V0MCCores, "AOD", "V0MCCORE", //! MC properties of the V0 for v0data::PxPosMC, v0data::PyPosMC, v0data::PzPosMC, v0data::PxNegMC, v0data::PyNegMC, v0data::PzNegMC); +DECLARE_SOA_TABLE(V0MCMothers, "AOD", "V0MCMOTHER", //! optional table for MC mothers + o2::soa::Index<>, v0data::MotherMCParticleId); + using V0Index = V0Indices::iterator; using V0Core = V0Cores::iterator; using V0TrackX = V0TrackXs::iterator; using V0Datas = soa::Join; using V0Data = V0Datas::iterator; +using V0MCDatas = soa::Join; +using V0MCData = V0MCDatas::iterator; // definitions of indices for interlink tables namespace v0data @@ -462,6 +483,7 @@ DECLARE_SOA_INDEX_COLUMN_FULL(NegTrackExtra, negTrackExtra, int, DauTrackExtras, DECLARE_SOA_INDEX_COLUMN_FULL(BachTrackExtra, bachTrackExtra, int, DauTrackExtras, "_BachExtra"); //! DECLARE_SOA_INDEX_COLUMN_FULL(StrangeTrackExtra, strangeTrackExtra, int, DauTrackExtras, "_StrangeExtra"); //! DECLARE_SOA_INDEX_COLUMN(StraCollision, straCollision); //! +DECLARE_SOA_INDEX_COLUMN(MotherMCParticle, motherMCParticle); //! //______________________________________________________ // REGULAR COLUMNS FOR CASCCORES @@ -755,6 +777,9 @@ DECLARE_SOA_TABLE(CascMCCores, "AOD", "CASCMCCORE", //! bachelor-baryon correlat cascdata::PxBachMC, cascdata::PyBachMC, cascdata::PzBachMC, cascdata::PxMC, cascdata::PyMC, cascdata::PzMC); +DECLARE_SOA_TABLE(CascMCMothers, "AOD", "CASCMCMOTHER", //! optional table for MC mothers + o2::soa::Index<>, cascdata::MotherMCParticleId); + DECLARE_SOA_TABLE(CascBBs, "AOD", "CASCBB", //! bachelor-baryon correlation variables cascdata::BachBaryonCosPA, cascdata::BachBaryonDCAxyToPV) @@ -811,6 +836,11 @@ using CascData = CascDatas::iterator; using KFCascData = KFCascDatas::iterator; using TraCascData = TraCascDatas::iterator; +using CascMCCore = CascMCCores::iterator; +using CascMCMother = CascMCMothers::iterator; +using CascMCDatas = soa::Join; +using CascMCData = CascMCDatas::iterator; + // For compatibility with previous table declarations using CascDataFull = CascDatas; using CascDataExt = CascDatas; diff --git a/PWGLF/TableProducer/cascademcbuilder.cxx b/PWGLF/TableProducer/cascademcbuilder.cxx index 55abc37a156..da299d8bab7 100644 --- a/PWGLF/TableProducer/cascademcbuilder.cxx +++ b/PWGLF/TableProducer/cascademcbuilder.cxx @@ -59,21 +59,22 @@ struct cascademcbuilder { // build cascade labels void processCascades(aod::CascDatas const& casctable, aod::V0sLinked const&, aod::V0Datas const& v0table, aod::McTrackLabels const&, aod::McParticles const&) { - int pdgCode = -1, pdgCodeMother = -1; - int pdgCodePositive = -1, pdgCodeNegative = -1, pdgCodeBachelor = -1, pdgCodeV0 = -1; - bool isPhysicalPrimary = false; - float xmc = -999.0f, ymc = -999.0f, zmc = -999.0f; - float xlmc = -999.0f, ylmc = -999.0f, zlmc = -999.0f; - float pxposmc = -999.0f, pyposmc = -999.0f, pzposmc = -999.0f; - float pxnegmc = -999.0f, pynegmc = -999.0f, pznegmc = -999.0f; - float pxbachmc = -999.0f, pybachmc = -999.0f, pzbachmc = -999.0f; - float px = -999.0f, py = -999.0f, pz = -999.0f; for (auto& casc : casctable) { + int pdgCode = -1, pdgCodeMother = -1; + int pdgCodePositive = -1, pdgCodeNegative = -1, pdgCodeBachelor = -1, pdgCodeV0 = -1; + bool isPhysicalPrimary = false; + float xmc = -999.0f, ymc = -999.0f, zmc = -999.0f; + float xlmc = -999.0f, ylmc = -999.0f, zlmc = -999.0f; + float pxposmc = -999.0f, pyposmc = -999.0f, pzposmc = -999.0f; + float pxnegmc = -999.0f, pynegmc = -999.0f, pznegmc = -999.0f; + float pxbachmc = -999.0f, pybachmc = -999.0f, pzbachmc = -999.0f; + float px = -999.0f, py = -999.0f, pz = -999.0f; + // Loop over those that actually have the corresponding V0 associated to them auto v0 = casc.v0_as(); if (!(v0.has_v0Data())) { casclabels(-1); - continue; // skip those cascades for which V0 doesn't exist + continue; // skip those cascades for which V0 doesn't exist (but: should never happen) } auto v0data = v0.v0Data(); // de-reference index to correct v0data in case it exists int lLabel = -1; @@ -109,9 +110,9 @@ struct cascademcbuilder { for (auto& lPosMother : lMCPosTrack.mothers_as()) { if (lNegMother == lPosMother) { // acquire information - xlmc = lNegMother.vx(); - ylmc = lNegMother.vy(); - zlmc = lNegMother.vz(); + xlmc = lMCPosTrack.vx(); + ylmc = lMCPosTrack.vy(); + zlmc = lMCPosTrack.vz(); pdgCodeV0 = lNegMother.pdgCode(); // if we got to this level, it means the mother particle exists and is the same @@ -122,9 +123,9 @@ struct cascademcbuilder { lLabel = lV0Mother.globalIndex(); pdgCode = lV0Mother.pdgCode(); isPhysicalPrimary = lV0Mother.isPhysicalPrimary(); - xmc = lV0Mother.vx(); - ymc = lV0Mother.vy(); - zmc = lV0Mother.vz(); + xmc = lMCBachTrack.vx(); + ymc = lMCBachTrack.vy(); + zmc = lMCBachTrack.vz(); px = lV0Mother.px(); py = lV0Mother.py(); pz = lV0Mother.pz(); diff --git a/PWGLF/TableProducer/lambdakzerobuilder.cxx b/PWGLF/TableProducer/lambdakzerobuilder.cxx index bba4e6070fb..f862e805c29 100644 --- a/PWGLF/TableProducer/lambdakzerobuilder.cxx +++ b/PWGLF/TableProducer/lambdakzerobuilder.cxx @@ -652,18 +652,20 @@ struct lambdakzeroBuilder { auto lPtAnHy = RecoDecay::sqrtSumOfSquares(v0candidate.posP[0] + 2.0f * v0candidate.negP[0], v0candidate.posP[1] + 2.0f * v0candidate.negP[1]); // Fill basic mass histograms - if ((V0.isdEdxGamma() || dEdxUnchecked) && (V0.isTrueGamma() || mcUnchecked)) - registry.fill(HIST("h2dGammaMass"), lPt, lGammaMass); - if ((V0.isdEdxK0Short() || dEdxUnchecked) && (V0.isTrueK0Short() || mcUnchecked)) - registry.fill(HIST("h2dK0ShortMass"), lPt, lK0ShortMass); - if ((V0.isdEdxLambda() || dEdxUnchecked) && (V0.isTrueLambda() || mcUnchecked)) - registry.fill(HIST("h2dLambdaMass"), lPt, lLambdaMass); - if ((V0.isdEdxAntiLambda() || dEdxUnchecked) && (V0.isTrueAntiLambda() || mcUnchecked)) - registry.fill(HIST("h2dAntiLambdaMass"), lPt, lAntiLambdaMass); - if ((V0.isdEdxHypertriton() || dEdxUnchecked) && (V0.isTrueHypertriton() || mcUnchecked)) - registry.fill(HIST("h2dHypertritonMass"), lPtHy, lHypertritonMass); - if ((V0.isdEdxAntiHypertriton() || dEdxUnchecked) && (V0.isTrueAntiHypertriton() || mcUnchecked)) - registry.fill(HIST("h2dAntiHypertritonMass"), lPtAnHy, lAntiHypertritonMass); + if( TMath::Abs(RecoDecay::eta(std::array{px, py, pz}))<0.5 ) { + if ((V0.isdEdxGamma() || dEdxUnchecked) && (V0.isTrueGamma() || mcUnchecked)) + registry.fill(HIST("h2dGammaMass"), lPt, lGammaMass); + if ((V0.isdEdxK0Short() || dEdxUnchecked) && (V0.isTrueK0Short() || mcUnchecked)) + registry.fill(HIST("h2dK0ShortMass"), lPt, lK0ShortMass); + if ((V0.isdEdxLambda() || dEdxUnchecked) && (V0.isTrueLambda() || mcUnchecked)) + registry.fill(HIST("h2dLambdaMass"), lPt, lLambdaMass); + if ((V0.isdEdxAntiLambda() || dEdxUnchecked) && (V0.isTrueAntiLambda() || mcUnchecked)) + registry.fill(HIST("h2dAntiLambdaMass"), lPt, lAntiLambdaMass); + if ((V0.isdEdxHypertriton() || dEdxUnchecked) && (V0.isTrueHypertriton() || mcUnchecked)) + registry.fill(HIST("h2dHypertritonMass"), lPtHy, lHypertritonMass); + if ((V0.isdEdxAntiHypertriton() || dEdxUnchecked) && (V0.isTrueAntiHypertriton() || mcUnchecked)) + registry.fill(HIST("h2dAntiHypertritonMass"), lPtAnHy, lAntiHypertritonMass); + } // Fill ITS cluster maps with specific mass cuts if (TMath::Abs(lGammaMass - 0.0) < dQAGammaMassWindow && ((V0.isdEdxGamma() || dEdxUnchecked) && (V0.isTrueGamma() || mcUnchecked))) { diff --git a/PWGLF/TableProducer/lambdakzeromcbuilder.cxx b/PWGLF/TableProducer/lambdakzeromcbuilder.cxx index 4b1ada593f2..52fd19a7ec4 100644 --- a/PWGLF/TableProducer/lambdakzeromcbuilder.cxx +++ b/PWGLF/TableProducer/lambdakzeromcbuilder.cxx @@ -53,13 +53,13 @@ struct lambdakzeromcbuilder { // build V0 labels void process(aod::V0Datas const& v0table, aod::McTrackLabels const&, aod::McParticles const& particlesMC) { - int pdgCode = -1, pdgCodeMother = -1, pdgCodePositive = -1, pdgCodeNegative = -1; - bool isPhysicalPrimary = false; - float xmc = -999.0f, ymc = -999.0f, zmc = -999.0f; - float pxposmc = -999.0f, pyposmc = -999.0f, pzposmc = -999.0f; - float pxnegmc = -999.0f, pynegmc = -999.0f, pznegmc = -999.0f; for (auto& v0 : v0table) { int lLabel = -1; + int pdgCode = -1, pdgCodeMother = -1, pdgCodePositive = -1, pdgCodeNegative = -1; + bool isPhysicalPrimary = false; + float xmc = -999.0f, ymc = -999.0f, zmc = -999.0f; + float pxposmc = -999.0f, pyposmc = -999.0f, pzposmc = -999.0f; + float pxnegmc = -999.0f, pynegmc = -999.0f, pznegmc = -999.0f; auto lNegTrack = v0.negTrack_as(); auto lPosTrack = v0.posTrack_as(); @@ -83,9 +83,9 @@ struct lambdakzeromcbuilder { if (lNegMother.globalIndex() == lPosMother.globalIndex()) { lLabel = lNegMother.globalIndex(); // acquire information - xmc = lNegMother.vx(); - ymc = lNegMother.vy(); - zmc = lNegMother.vz(); + xmc = lMCPosTrack.vx(); + ymc = lMCPosTrack.vy(); + zmc = lMCPosTrack.vz(); pdgCode = lNegMother.pdgCode(); isPhysicalPrimary = lNegMother.isPhysicalPrimary(); if (lNegMother.has_mothers()) { diff --git a/PWGLF/TableProducer/lambdakzeromcfinder.cxx b/PWGLF/TableProducer/lambdakzeromcfinder.cxx index 57c313ee166..cf6a1c180ed 100644 --- a/PWGLF/TableProducer/lambdakzeromcfinder.cxx +++ b/PWGLF/TableProducer/lambdakzeromcfinder.cxx @@ -86,6 +86,8 @@ struct lambdakzeromcfinder { Configurable yPreFilter{"yPreFilter", 2.5, "broad y pre-filter for speed"}; ConfigurableAxis axisPtQA{"axisPtQA", {VARIABLE_WIDTH, 0.0f, 0.1f, 0.2f, 0.3f, 0.4f, 0.5f, 0.6f, 0.7f, 0.8f, 0.9f, 1.0f, 1.1f, 1.2f, 1.3f, 1.4f, 1.5f, 1.6f, 1.7f, 1.8f, 1.9f, 2.0f, 2.2f, 2.4f, 2.6f, 2.8f, 3.0f, 3.2f, 3.4f, 3.6f, 3.8f, 4.0f, 4.4f, 4.8f, 5.2f, 5.6f, 6.0f, 6.5f, 7.0f, 7.5f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f, 13.0f, 14.0f, 15.0f, 17.0f, 19.0f, 21.0f, 23.0f, 25.0f, 30.0f, 35.0f, 40.0f, 50.0f}, "pt axis for QA histograms"}; + Configurable doNotRequireTPC{"doNotRequireTPC", true, "do not require TPC for V0 MC finding"}; + Preslice perMcCollision = aod::mcparticle::mcCollisionId; std::vector v0collisionId; @@ -244,7 +246,7 @@ struct lambdakzeromcfinder { if (track.mcParticleId() == daughter.globalIndex()) { if (track.hasITS()) positiveITS = true; - if (track.hasTPC()) { + if (track.hasTPC() || doNotRequireTPC) { positiveTPC = true; trackIndexPositive = track.globalIndex(); // assign only if TPC present posPt = track.pt(); @@ -259,7 +261,7 @@ struct lambdakzeromcfinder { if (track.mcParticleId() == daughter.globalIndex()) { if (track.hasITS()) negativeITS = true; - if (track.hasTPC()) { + if (track.hasTPC() || doNotRequireTPC) { negativeTPC = true; trackIndexNegative = track.globalIndex(); // assign only if TPC present negPt = track.pt(); @@ -319,7 +321,7 @@ struct lambdakzeromcfinder { bool reconstructed = false; for (auto& mcParticle : mcParticles) { if (fabs(mcParticle.y()) > yPreFilter) - continue; // go declarative at a later stage but pre-filter here + continue; // go declarative at a later stage but pre-filter here if (mcParticle.pdgCode() == 22 && findGamma) { reconstructed = ProcessV0(mcParticle, tracks, bestCollisionIndex, positiveITS, negativeITS, positiveTPC, negativeTPC, positiveTPCITS, negativeTPCITS); @@ -431,7 +433,7 @@ struct lambdakzeromcfinder { continue; for (auto& posMotherParticle : posParticle.mothers_as()) { // determine if mother particle satisfies any condition curently being searched for - for (uint16_t ipdg = 0; ipdg < searchedV0PDG.size(); ipdg++) + for (int ipdg = 0; ipdg < searchedV0PDG.size(); ipdg++) if (searchedV0PDG[ipdg] == posMotherParticle.pdgCode()) { v0pdgIndex = ipdg; // index mapping to desired V0 species motherIndex = posMotherParticle.globalIndex(); @@ -450,7 +452,7 @@ struct lambdakzeromcfinder { if (!negParticle.has_mothers()) continue; for (auto& negMotherParticle : negParticle.mothers_as()) { - if (negMotherParticle.globalIndex() == posMotherParticle.globalIndex() && negMotherParticle.pdgCode() == searchedV0NegativePDG[v0pdgIndex]) { + if (negMotherParticle.globalIndex() == posMotherParticle.globalIndex() && negParticle.pdgCode() == searchedV0NegativePDG[v0pdgIndex]) { // de-reference best collision int bestCollisionIndex = -1; auto mcCollision = posParticle.mcCollision_as>(); diff --git a/PWGLF/TableProducer/strangederivedbuilder.cxx b/PWGLF/TableProducer/strangederivedbuilder.cxx index 0932d6deba7..00f2cfba425 100644 --- a/PWGLF/TableProducer/strangederivedbuilder.cxx +++ b/PWGLF/TableProducer/strangederivedbuilder.cxx @@ -82,6 +82,12 @@ struct strangederivedbuilder { Produces traToCascRefs; // tracked -> cascades Produces kfToCascRefs; // KF -> cascades + //__________________________________________________ + // mother information + Produces v0mothers; // V0 mother references + Produces cascmothers; // casc mother references + Produces motherMCParticles; //mc particles for mothers + // histogram registry for bookkeeping HistogramRegistry histos{"Histos", {}, OutputObjHandlingPolicy::AnalysisObject}; @@ -319,6 +325,40 @@ struct strangederivedbuilder { // done! } + void processStrangeMothers(soa::Join const& V0s, soa::Join const& Cascades, aod::McParticles const& mcParticles) + { + std::vector motherReference(mcParticles.size(), -1); // index -1: not used / no reference + + //__________________________________________________ + // mark mcParticles for referencing + for (auto const& v0 : V0s) + motherReference[v0.mcParticleId()] = 0; + for (auto const& ca : Cascades) + motherReference[ca.mcParticleId()] = 0; + //__________________________________________________ + // Figure out the numbering of the new mcMother table + // assume filling per order + int nParticles = 0; + for (int i = 0; i < motherReference.size(); i++) { + if (motherReference[i] >= 0) { + motherReference[i] = nParticles++; // count particles of interest + } + } + //__________________________________________________ + // populate track references + for (auto const& v0 : V0s) + v0mothers(motherReference[v0.mcParticleId()]); // joinable with V0Datas + for (auto const& ca : Cascades) + cascmothers(motherReference[ca.mcParticleId()]); // joinable with CascDatas + //__________________________________________________ + // populate motherMCParticles + for (auto const& tr : mcParticles) { + if (motherReference[tr.globalIndex()] >= 0) { + motherMCParticles(tr.px(), tr.py(), tr.pz(), tr.pdgCode(), tr.isPhysicalPrimary()); + } + } + } + using interlinkedCascades = soa::Join; void processCascadeInterlinkTracked(interlinkedCascades const& masterCascades, aod::CascIndices const& Cascades, aod::TraCascIndices const& TraCascades) @@ -384,6 +424,7 @@ struct strangederivedbuilder { PROCESS_SWITCH(strangederivedbuilder, processCollisions, "Produce collisions (V0s + casc)", true); PROCESS_SWITCH(strangederivedbuilder, processTrackExtrasV0sOnly, "Produce track extra information (V0s only)", true); PROCESS_SWITCH(strangederivedbuilder, processTrackExtras, "Produce track extra information (V0s + casc)", true); + PROCESS_SWITCH(strangederivedbuilder, processStrangeMothers, "Produce tables with mother info for V0s + casc", true); PROCESS_SWITCH(strangederivedbuilder, processCascadeInterlinkTracked, "Produce tables interconnecting cascades", false); PROCESS_SWITCH(strangederivedbuilder, processCascadeInterlinkKF, "Produce tables interconnecting cascades", false); PROCESS_SWITCH(strangederivedbuilder, processSimulation, "Produce simulated information", true); diff --git a/PWGLF/Tasks/QC/straRecoStudy.cxx b/PWGLF/Tasks/QC/straRecoStudy.cxx index 3ed39fafe59..bc06510b92c 100644 --- a/PWGLF/Tasks/QC/straRecoStudy.cxx +++ b/PWGLF/Tasks/QC/straRecoStudy.cxx @@ -181,7 +181,7 @@ struct preProcessMCcollisions { histos.add("h2dNContribSpecialCorr2b", "h2dNContribSpecialCorr2b", kTH2D, {axisContributorsTRD, axisContributorsTOF}); } - void processData(TracksCompleteIU const& tracks) + void processData(aod::Collisions const& colls) { // Dummy process } @@ -363,6 +363,7 @@ struct straRecoStudy { const AxisSpec axisVsPt{(int)NBinsPt, 0, MaxPt, "#it{p}_{T} (GeV/c)"}; const AxisSpec axisVsPtCoarse{(int)NBinsPtCoarse, 0, MaxPt, "#it{p}_{T} (GeV/c)"}; + const AxisSpec axisGammaMass{400, 0.000f, 0.400f, "Inv. Mass (GeV/c^{2})"}; const AxisSpec axisK0ShortMass{400, 0.400f, 0.600f, "Inv. Mass (GeV/c^{2})"}; const AxisSpec axisLambdaMass{400, 1.01f, 1.21f, "Inv. Mass (GeV/c^{2})"}; const AxisSpec axisXiMass{400, 1.22f, 1.42f, "Inv. Mass (GeV/c^{2})"}; @@ -382,17 +383,17 @@ struct straRecoStudy { const AxisSpec axisITSCluMap{(int)128, -0.5f, +127.5f, "Packed ITS map"}; const AxisSpec axisRadius{(int)160, 0.0f, +80.0f, "Radius (cm)"}; - TString lSpecies[] = {"K0Short", "Lambda", "AntiLambda", "XiMinus", "XiPlus", "OmegaMinus", "OmegaPlus"}; - const AxisSpec lMassAxis[] = {axisK0ShortMass, axisLambdaMass, axisLambdaMass, axisXiMass, axisXiMass, axisOmegaMass, axisOmegaMass}; + TString lSpecies[] = {"Gamma", "K0Short", "Lambda", "AntiLambda", "XiMinus", "XiPlus", "OmegaMinus", "OmegaPlus"}; + const AxisSpec lMassAxis[] = {axisGammaMass, axisK0ShortMass, axisLambdaMass, axisLambdaMass, axisXiMass, axisXiMass, axisOmegaMass, axisOmegaMass}; // Creation of histograms: MC generated - for (Int_t i = 0; i < 7; i++) + for (Int_t i = 0; i < 8; i++) histos.add(Form("hGen%s", lSpecies[i].Data()), Form("hGen%s", lSpecies[i].Data()), kTH1F, {axisVsPt}); - for (Int_t i = 0; i < 7; i++) + for (Int_t i = 0; i < 8; i++) histos.add(Form("hGenWithPV%s", lSpecies[i].Data()), Form("hGenWithPV%s", lSpecies[i].Data()), kTH1F, {axisVsPt}); // Creation of histograms: mass affairs - for (Int_t i = 0; i < 7; i++) + for (Int_t i = 0; i < 8; i++) histos.add(Form("h2dMass%s", lSpecies[i].Data()), Form("h2dMass%s", lSpecies[i].Data()), kTH2F, {axisVsPt, lMassAxis[i]}); // Topo sel QA @@ -779,7 +780,7 @@ struct straRecoStudy { { // check if collision successfully reconstructed for (auto& mcp : mcParticles) { - if (TMath::Abs(mcp.y()) < 0.5) { + if (TMath::Abs(mcp.eta()) < 0.5) { if (mcp.pdgCode() == 310) histos.fill(HIST("hGenWithPVK0Short"), mcp.pt()); if (mcp.pdgCode() == 3122) @@ -803,7 +804,9 @@ struct straRecoStudy { { // check if collision successfully reconstructed for (auto& mcp : mcParticles) { - if (TMath::Abs(mcp.y()) < 0.5) { + if (TMath::Abs(mcp.eta()) < 0.5) { + if (mcp.pdgCode() == 22) + histos.fill(HIST("hGenGamma"), mcp.pt()); if (mcp.pdgCode() == 310) histos.fill(HIST("hGenK0Short"), mcp.pt()); if (mcp.pdgCode() == 3122)