diff --git a/PWGLF/DataModel/LFResonanceTables.h b/PWGLF/DataModel/LFResonanceTables.h index 2e9c1e0e11d..b12eea86652 100644 --- a/PWGLF/DataModel/LFResonanceTables.h +++ b/PWGLF/DataModel/LFResonanceTables.h @@ -215,7 +215,7 @@ DECLARE_SOA_COLUMN(DecayVtxY, decayVtxY, float); DECLARE_SOA_COLUMN(DecayVtxZ, decayVtxZ, float); //! Z position of the decay vertex DECLARE_SOA_COLUMN(Alpha, alpha, float); //! Alpha of the decay vertex DECLARE_SOA_COLUMN(QtArm, qtarm, float); //! Armenteros Qt of the decay vertex -DECLARE_SOA_COLUMN(TpcSignal10, tpcSignal10, int8_t); //! TPC signal of the track x10 +DECLARE_SOA_COLUMN(TpcSignal10, tpcSignal10, int16_t); //! TPC signal of the track x10 DECLARE_SOA_COLUMN(DaughterTPCNSigmaPosPi10, daughterTPCNSigmaPosPi10, int8_t); //! TPC PID x10 of the positive daughter as Pion DECLARE_SOA_COLUMN(DaughterTPCNSigmaPosKa10, daughterTPCNSigmaPosKa10, int8_t); //! TPC PID x10 of the positive daughter as Kaon DECLARE_SOA_COLUMN(DaughterTPCNSigmaPosPr10, daughterTPCNSigmaPosPr10, int8_t); //! TPC PID x10 of the positive daughter as Proton @@ -310,7 +310,7 @@ DECLARE_SOA_DYNAMIC_COLUMN(DaughterTOFNSigmaBachPr, daughterTOFNSigmaBachPr, [](int8_t daughterTOFNSigmaBachPr10) { return (float)daughterTOFNSigmaBachPr10 / 10.f; }); // TPC signal x10 DECLARE_SOA_DYNAMIC_COLUMN(TpcSignal, tpcSignal, - [](int8_t tpcSignal10) { return (float)tpcSignal10 / 10.f; }); + [](int16_t tpcSignal10) { return (float)tpcSignal10 / 100.f; }); // pT, Eta, Phi // DECLARE_SOA_DYNAMIC_COLUMN(Pt, pt, [](float px, float py) -> float { return RecoDecay::sqrtSumOfSquares(px, py); }); DECLARE_SOA_DYNAMIC_COLUMN(Eta, eta, [](float px, float py, float pz) -> float { return RecoDecay::eta(std::array{px, py, pz}); }); diff --git a/PWGLF/TableProducer/Resonances/resonanceInitializer.cxx b/PWGLF/TableProducer/Resonances/resonanceInitializer.cxx index 174b60959a7..0ba7074043d 100644 --- a/PWGLF/TableProducer/Resonances/resonanceInitializer.cxx +++ b/PWGLF/TableProducer/Resonances/resonanceInitializer.cxx @@ -106,7 +106,6 @@ struct ResonanceInitializer { Configurable dBzInput{"dBzInput", -999, "bz field, -999 is automatic"}; Configurable cfgFillQA{"cfgFillQA", false, "Fill QA histograms"}; Configurable cfgBypassCCDB{"cfgBypassCCDB", true, "Bypass loading CCDB part to save CPU time and memory"}; // will be affected to b_z value. - // Track filter from tpcSkimsTableCreator Configurable trackSelection{"trackSelection", 0, "Track selection: 0 -> No Cut, 1 -> kGlobalTrack, 2 -> kGlobalTrackWoPtEta, 3 -> kGlobalTrackWoDCA, 4 -> kQualityTracks, 5 -> kInAcceptanceTracks"}; Configurable trackSphDef{"trackSphDef", 0, "Spherocity Definition: |pT| = 1 -> 0, otherwise -> 1"}; @@ -237,6 +236,7 @@ struct ResonanceInitializer { Configurable pdgTruthMother{"pdgTruthMother", 3324, "pdgcode for the truth mother e.g. Xi(1530) (3324)"}; Configurable pdgTruthDaughter1{"pdgTruthDaughter1", 3312, "pdgcode for the daughter 1, e.g. Xi- 3312"}; Configurable pdgTruthDaughter2{"pdgTruthDaughter2", 211, "pdgcode for the daughter 2, e.g. pi+ 211"}; + Configurable cfgDoSignalLoss{"cfgDoSignalLoss", false, "Save reference particles for mT scaling signal loss"}; } GenCuts; Configurable checkIsRecINELgt0{"checkIsRecINELgt0", true, "Check rec INEL>0 for the Rec. Collision"}; @@ -277,8 +277,13 @@ struct ResonanceInitializer { || (nabs(aod::mcparticle::pdgCode) == 3324) // Xi(1530)0 || (nabs(aod::mcparticle::pdgCode) == 10323) // K1(1270)+ || (nabs(aod::mcparticle::pdgCode) == 123314) // Xi(1820)0 - || (nabs(aod::mcparticle::pdgCode) == 123324); // Xi(1820)-0 - + || (nabs(aod::mcparticle::pdgCode) == 123324) // Xi(1820)-0 + || (nabs(aod::mcparticle::pdgCode) == 2212) // Proton + || (nabs(aod::mcparticle::pdgCode) == 3122) // Lambda0 + || (nabs(aod::mcparticle::pdgCode) == 3312) // Xi- + || (nabs(aod::mcparticle::pdgCode) == 3322) // Xi0 + || (nabs(aod::mcparticle::pdgCode) == 3334); // Omega- + // using ResoEvents = soa::Join; using ResoEvents001 = soa::Join; using ResoRun2Events = soa::Join; @@ -759,7 +764,7 @@ struct ResonanceInitializer { static_cast(std::round(track.tofNSigmaPi() * 10)), static_cast(std::round(track.tofNSigmaKa() * 10)), static_cast(std::round(track.tofNSigmaPr() * 10)), - static_cast(std::round(track.tpcSignal() * 10)), + static_cast(std::round(track.tpcSignal() * 100)), trackFlags); if (!cfgBypassTrackIndexFill) { resoTrackTracks(track.globalIndex()); @@ -1182,6 +1187,12 @@ struct ResonanceInitializer { void fillMCParticles(SelectedMCPartType const& mcParts, TotalMCParts const& mcParticles) { for (auto const& mcPart : mcParts) { + if (!GenCuts.cfgDoSignalLoss) { + int absPdg = std::abs(mcPart.pdgCode()); + if (absPdg == 2212 || absPdg == 3122 || absPdg == 3312 || absPdg == 3322 || absPdg == 3334) { + continue; + } + } std::vector daughterPDGs; if (mcPart.has_daughters()) { auto daughter01 = mcParticles.rawIteratorAt(mcPart.daughtersIds()[0] - mcParticles.offset()); diff --git a/PWGLF/TableProducer/Resonances/resonanceMergeDF.cxx b/PWGLF/TableProducer/Resonances/resonanceMergeDF.cxx index 71f2840b0d0..55491c775d6 100644 --- a/PWGLF/TableProducer/Resonances/resonanceMergeDF.cxx +++ b/PWGLF/TableProducer/Resonances/resonanceMergeDF.cxx @@ -159,7 +159,7 @@ struct ResonanceMergeDF { (int8_t)(track.tofNSigmaPi() * 10), (int8_t)(track.tofNSigmaKa() * 10), (int8_t)(track.tofNSigmaPr() * 10), - (int8_t)(track.tpcSignal() * 10), + static_cast(track.tpcSignal() * 100), track.trackFlags())); } @@ -271,7 +271,7 @@ struct ResonanceMergeDF { (int8_t)(track.tofNSigmaPi() * 10), (int8_t)(track.tofNSigmaKa() * 10), (int8_t)(track.tofNSigmaPr() * 10), - (int8_t)(track.tpcSignal() * 10), + static_cast(track.tpcSignal() * 100), track.trackFlags())); } @@ -458,7 +458,7 @@ struct ResonanceMergeDF { (int8_t)(track.tofNSigmaPi() * 10), (int8_t)(track.tofNSigmaKa() * 10), (int8_t)(track.tofNSigmaPr() * 10), - (int8_t)(track.tpcSignal() * 10), + static_cast(track.tpcSignal() * 100), track.trackFlags()); } } @@ -521,7 +521,7 @@ struct ResonanceMergeDF { (int8_t)(track.tofNSigmaPi() * 10), (int8_t)(track.tofNSigmaKa() * 10), (int8_t)(track.tofNSigmaPr() * 10), - (int8_t)(track.tpcSignal() * 10), + static_cast(track.tpcSignal() * 100), track.trackFlags()); } // Cascade candidate diff --git a/PWGLF/Tasks/Resonances/lambda1520_PbPb.cxx b/PWGLF/Tasks/Resonances/lambda1520_PbPb.cxx index 7c9c4452464..40589f98e58 100644 --- a/PWGLF/Tasks/Resonances/lambda1520_PbPb.cxx +++ b/PWGLF/Tasks/Resonances/lambda1520_PbPb.cxx @@ -239,6 +239,24 @@ struct lambdaAnalysis_pb { histos.add("Analysis/h3d_reso_lstar_PM", "Resolution #Lambda(1520) p_{T}", kTHnSparseF, {{200, -0.05, 0.05}, axisPt, axisCent}); histos.add("Analysis/h3d_reso_lstar_MP", "Resolution #bar{#Lambda}(1520) p_{T}", kTHnSparseF, {{200, -0.05, 0.05}, axisPt, axisCent}); } + + if (doprocessMCGen) { + histos.add("SignalLoss/hMCEventCutflow", "MC Event Cutflow", kTH1F, {{7, 0, 7}}); + histos.add("SignalLoss/hGen_mT_scaled_Proton", "mT Scaled #Lambda(1520) from Proton", kTHnSparseF, {axisPt, axisCent}); + histos.add("SignalLoss/hGen_mT_scaled_AntiProton", "mT Scaled #bar{#Lambda}(1520) from AntiProton", kTHnSparseF, {axisPt, axisCent}); + + histos.add("SignalLoss/hGen_mT_scaled_Lambda0", "mT Scaled #Lambda(1520) from Lambda0", kTHnSparseF, {axisPt, axisCent}); + histos.add("SignalLoss/hGen_mT_scaled_AntiLambda0", "mT Scaled #bar{#Lambda}(1520) from AntiLambda0", kTHnSparseF, {axisPt, axisCent}); + + histos.add("SignalLoss/hGen_mT_scaled_XiMinus", "mT Scaled #Lambda(1520) from Xi-", kTHnSparseF, {axisPt, axisCent}); + histos.add("SignalLoss/hGen_mT_scaled_XiPlus", "mT Scaled #bar{#Lambda}(1520) from Xi+", kTHnSparseF, {axisPt, axisCent}); + + histos.add("SignalLoss/hGen_mT_scaled_Xi0", "mT Scaled #Lambda(1520) from Xi0", kTHnSparseF, {axisPt, axisCent}); + histos.add("SignalLoss/hGen_mT_scaled_AntiXi0", "mT Scaled #bar{#Lambda}(1520) from AntiXi0", kTHnSparseF, {axisPt, axisCent}); + + histos.add("SignalLoss/hGen_mT_scaled_OmegaMinus", "mT Scaled #Lambda(1520) from Omega-", kTHnSparseF, {axisPt, axisCent}); + histos.add("SignalLoss/hGen_mT_scaled_OmegaPlus", "mT Scaled #bar{#Lambda}(1520) from Omega+", kTHnSparseF, {axisPt, axisCent}); + } } template @@ -771,10 +789,11 @@ struct lambdaAnalysis_pb { for (auto const& part : resoParents) { if (std::abs(part.pdgCode()) != lambda1520id) // // L* pdg_code = 3124 continue; - // if (std::abs(part.y()) > 0.5) { // rapidity cut - // continue; - // } + float yshift = std::abs(part.y()) - cfgRapidityShift; + + if (std::abs(yshift) > cfgRapidityCut) + continue; bool pass1 = false; bool pass2 = false; @@ -797,6 +816,98 @@ struct lambdaAnalysis_pb { } PROCESS_SWITCH(lambdaAnalysis_pb, processMC, "Process Event for MC", false); + void processMCGen(resoMCCols::iterator const& collision, + aod::ResoMCParents const& resoParents) + { + + float centrality = collision.cent(); + + histos.fill(HIST("SignalLoss/hMCEventCutflow"), 0); // All collisions + + if (cEvtMCTriggerTVX && !collision.isTriggerTVX()) + return; + histos.fill(HIST("SignalLoss/hMCEventCutflow"), 1); // After TriggerTVX + + if (cEvtMCVtxIn10 && !collision.isVtxIn10()) + return; + histos.fill(HIST("SignalLoss/hMCEventCutflow"), 2); // After VtxIn10 + + if (cEvtMCINELgt0 && !collision.isINELgt0()) + return; + histos.fill(HIST("SignalLoss/hMCEventCutflow"), 3); // After INELgt0 + + if (cEvtMCSel8 && !collision.isInSel8()) + return; + histos.fill(HIST("SignalLoss/hMCEventCutflow"), 4); // After Sel8 + + if (cEvtMCRecINELgt0 && !collision.isRecINELgt0()) + return; + histos.fill(HIST("SignalLoss/hMCEventCutflow"), 5); // After RecINELgt0 + + if (cEvtMCAfterAllCuts && !collision.isInAfterAllCuts()) + return; + histos.fill(HIST("SignalLoss/hMCEventCutflow"), 6); // After AfterAllCuts + + for (auto const& part : resoParents) { + + float yshift = std::abs(part.y()) - cfgRapidityShift; + + if (std::abs(yshift) > cfgRapidityCut) + continue; + + int pdg = part.pdgCode(); + float ptRef = part.pt(); + double ptSq = -1.0; + + std::array pvec = {part.px(), part.py(), part.pz()}; + float mass = RecoDecay::m(pvec, part.e()); + + if (pdg == 2212) { + ptSq = (ptRef * ptRef) + (mass * mass) - (o2::constants::physics::MassLambda1520 * o2::constants::physics::MassLambda1520); + if (ptSq > 0) + histos.fill(HIST("SignalLoss/hGen_mT_scaled_Proton"), std::sqrt(ptSq), centrality); + } else if (pdg == -2212) { + ptSq = (ptRef * ptRef) + (mass * mass) - (o2::constants::physics::MassLambda1520 * o2::constants::physics::MassLambda1520); + if (ptSq > 0) + histos.fill(HIST("SignalLoss/hGen_mT_scaled_AntiProton"), std::sqrt(ptSq), centrality); + } else if (pdg == 3122) { + ptSq = (ptRef * ptRef) + (mass * mass) - (o2::constants::physics::MassLambda1520 * o2::constants::physics::MassLambda1520); + if (ptSq > 0) + histos.fill(HIST("SignalLoss/hGen_mT_scaled_Lambda0"), std::sqrt(ptSq), centrality); + } else if (pdg == -3122) { + ptSq = (ptRef * ptRef) + (mass * mass) - (o2::constants::physics::MassLambda1520 * o2::constants::physics::MassLambda1520); + if (ptSq > 0) + histos.fill(HIST("SignalLoss/hGen_mT_scaled_AntiLambda0"), std::sqrt(ptSq), centrality); + } else if (pdg == 3312) { + ptSq = (ptRef * ptRef) + (mass * mass) - (o2::constants::physics::MassLambda1520 * o2::constants::physics::MassLambda1520); + if (ptSq > 0) + histos.fill(HIST("SignalLoss/hGen_mT_scaled_XiMinus"), std::sqrt(ptSq), centrality); + } else if (pdg == -3312) { + ptSq = (ptRef * ptRef) + (mass * mass) - (o2::constants::physics::MassLambda1520 * o2::constants::physics::MassLambda1520); + if (ptSq > 0) + histos.fill(HIST("SignalLoss/hGen_mT_scaled_XiPlus"), std::sqrt(ptSq), centrality); + } else if (pdg == 3322) { + ptSq = (ptRef * ptRef) + (mass * mass) - (o2::constants::physics::MassLambda1520 * o2::constants::physics::MassLambda1520); + if (ptSq > 0) + histos.fill(HIST("SignalLoss/hGen_mT_scaled_Xi0"), std::sqrt(ptSq), centrality); + } else if (pdg == -3322) { + ptSq = (ptRef * ptRef) + (mass * mass) - (o2::constants::physics::MassLambda1520 * o2::constants::physics::MassLambda1520); + if (ptSq > 0) + histos.fill(HIST("SignalLoss/hGen_mT_scaled_AntiXi0"), std::sqrt(ptSq), centrality); + } else if (pdg == 3334) { + ptSq = (ptRef * ptRef) + (mass * mass) - (o2::constants::physics::MassLambda1520 * o2::constants::physics::MassLambda1520); + if (ptSq > 0) + histos.fill(HIST("SignalLoss/hGen_mT_scaled_OmegaMinus"), std::sqrt(ptSq), centrality); + } else if (pdg == -3334) { + ptSq = (ptRef * ptRef) + (mass * mass) - (o2::constants::physics::MassLambda1520 * o2::constants::physics::MassLambda1520); + if (ptSq > 0) + histos.fill(HIST("SignalLoss/hGen_mT_scaled_OmegaPlus"), std::sqrt(ptSq), centrality); + } + } + } + + PROCESS_SWITCH(lambdaAnalysis_pb, processMCGen, "Process Event for MC", false); + using BinningType2 = ColumnBinningPolicy; void processMix(resoCols& collisions, resoTracks const& tracks)