From 54c91ab9cd1d7494e1bfa7de307e5dc18f85cad7 Mon Sep 17 00:00:00 2001 From: ALICE Action Bot Date: Tue, 2 Jun 2026 16:32:33 +0000 Subject: [PATCH] Please consider the following formatting changes --- .../TableProducer/correlatorXicHadrons.cxx | 455 +++++++++--------- 1 file changed, 221 insertions(+), 234 deletions(-) diff --git a/PWGHF/HFC/TableProducer/correlatorXicHadrons.cxx b/PWGHF/HFC/TableProducer/correlatorXicHadrons.cxx index def98d4faad..e2b25103092 100644 --- a/PWGHF/HFC/TableProducer/correlatorXicHadrons.cxx +++ b/PWGHF/HFC/TableProducer/correlatorXicHadrons.cxx @@ -13,8 +13,8 @@ /// \brief Xic-Hadrons correlator task - data-like, Mc-Reco and Mc-Gen analyses /// \author Ravindra Singh -#include "PWGHF/Core/DecayChannelsLegacy.h" #include "PWGHF/Core/DecayChannels.h" +#include "PWGHF/Core/DecayChannelsLegacy.h" #include "PWGHF/Core/HfHelper.h" #include "PWGHF/Core/SelectorCuts.h" #include "PWGHF/DataModel/AliasTables.h" @@ -56,6 +56,7 @@ #include #include + #include #include #include @@ -103,7 +104,6 @@ enum class PDGChargeScale : size_t { Scale = 3u }; - // ============================================================================ // HELPER FUNCTIONS // ============================================================================ @@ -111,7 +111,7 @@ enum class PDGChargeScale : size_t { /// /// Returns deltaPhi values in range [-pi/2., 3.*pi/2.] /// -double getDeltaPhi (double phiXic, double phiHadron) +double getDeltaPhi(double phiXic, double phiHadron) { return RecoDecay::constrainAngle(phiHadron - phiXic, -PIHalf); } @@ -125,7 +125,7 @@ using BinningTypeMcGen = ColumnBinningPolicy candSel; //using LcSelection table to avoid duplication for similair table, name will be changed later + Produces candSel; // using LcSelection table to avoid duplication for similair table, name will be changed later Configurable useSel8{"useSel8", true, "Flag for applying sel8 for collision selection"}; Configurable selNoSameBunchPileUpColl{"selNoSameBunchPileUpColl", true, "Flag for rejecting the collisions associated with the same bunch crossing"}; @@ -157,31 +157,30 @@ struct HfCorrelatorXicHadronsSelection { using CandsXic0DataFiltered = soa::Filtered>; using CandsXic0McRecFiltered = soa::Filtered>; - // MC Gen using CandidatesXicPlusMcGen = soa::Join; using CandidatesXic0McGen = soa::Join; // filter on selection of Xic and decay channel Xic->PKPi - //Filter xicPlusFilter = ((o2::aod::hf_track_index::hfflag & static_cast(1 << o2::aod::hf_cand_xic_to_xi_pi_pi::DecayType::XicToXiPiPi)) != static_cast(0)) && (aod::hf_sel_candidate_xic::isSelXicToXiPiPi || selectionFlagXic <= 0); - //Filter xicPlusFilter = ((o2::aod::hf_track_index::hfflag & static_cast(1 << o2::aod::hf_cand_xic_to_xi_pi_pi::DecayType::XicToXiPiPi)) != static_cast(0)) && (aod::hf_sel_candidate_xic::isSelXicToXiPiPi >= selectionFlagXic); - //Filter xic0Filter = ((o2::aod::hf_track_index::hfflag & static_cast(1 << aod::hf_cand_xic0_omegac0::DecayType::XiczeroToXiPi)) != static_cast(0)) && (aod::hf_sel_toxipi::resultSelections >= selectionFlagXic); + // Filter xicPlusFilter = ((o2::aod::hf_track_index::hfflag & static_cast(1 << o2::aod::hf_cand_xic_to_xi_pi_pi::DecayType::XicToXiPiPi)) != static_cast(0)) && (aod::hf_sel_candidate_xic::isSelXicToXiPiPi || selectionFlagXic <= 0); + // Filter xicPlusFilter = ((o2::aod::hf_track_index::hfflag & static_cast(1 << o2::aod::hf_cand_xic_to_xi_pi_pi::DecayType::XicToXiPiPi)) != static_cast(0)) && (aod::hf_sel_candidate_xic::isSelXicToXiPiPi >= selectionFlagXic); + // Filter xic0Filter = ((o2::aod::hf_track_index::hfflag & static_cast(1 << aod::hf_cand_xic0_omegac0::DecayType::XiczeroToXiPi)) != static_cast(0)) && (aod::hf_sel_toxipi::resultSelections >= selectionFlagXic); Filter xicPlusFilter = aod::hf_sel_candidate_xic::isSelXicToXiPiPi >= selectionFlagXic; Filter xic0Filter = aod::hf_sel_toxipi::resultSelections == true; template - void selectionCollision (CollType const& collision, CandType const& candidates) + void selectionCollision(CollType const& collision, CandType const& candidates) { bool isSelColl = true; bool isCandFound = false; bool isSel8 = true; bool isNosameBunchPileUp = true; double yCand = -999.; - double massCand = -999.; + double massCand = -999.; double ptCand = -999; if (doSelXicCollision) { for (const auto& candidate : candidates) { // For both XicPlus and Xic0 - if constexpr (isXicPlus){ + if constexpr (isXicPlus) { massCand = o2::constants::physics::MassXiCPlus; ptCand = candidate.pt(); yCand = candidate.y(massCand); @@ -206,12 +205,12 @@ struct HfCorrelatorXicHadronsSelection { isNosameBunchPileUp = static_cast(collision.selection_bit(o2::aod::evsel::kNoSameBunchPileup)); } isSelColl = isCandFound && isSel8 && isNosameBunchPileUp; - + candSel(isSelColl); } template - void selectionCollisionMcGen (CandType const& mcParticles) + void selectionCollisionMcGen(CandType const& mcParticles) { bool isCandFound = false; for (const auto& particle : mcParticles) { @@ -233,7 +232,7 @@ struct HfCorrelatorXicHadronsSelection { } template - bool selectionV0 (TCollision const& collision, V0 const& candidate) + bool selectionV0(TCollision const& collision, V0 const& candidate) { if (candidate.v0radius() < cfgV0.cfgV0radiusMin) { return false; @@ -264,7 +263,7 @@ struct HfCorrelatorXicHadronsSelection { } template - bool eventSelV0 (TCollision collision) + bool eventSelV0(TCollision collision) { if (!collision.sel8()) { return 0; @@ -289,8 +288,8 @@ struct HfCorrelatorXicHadronsSelection { return 1; } // event selection V0 - void processV0Selection (SelCollisions::iterator const& collision, - aod::V0Datas const& V0s) + void processV0Selection(SelCollisions::iterator const& collision, + aod::V0Datas const& V0s) { bool isCandFound = false; const int64_t kMinV0Candidates = 1; @@ -313,43 +312,43 @@ struct HfCorrelatorXicHadronsSelection { } PROCESS_SWITCH(HfCorrelatorXicHadronsSelection, processV0Selection, "Process V0 Collision Selection for Data", false); - void processXicPlusSelection (SelCollisions::iterator const& collision, - CandsXicPlusDataFiltered const& candidates) + void processXicPlusSelection(SelCollisions::iterator const& collision, + CandsXicPlusDataFiltered const& candidates) { selectionCollision(collision, candidates); } PROCESS_SWITCH(HfCorrelatorXicHadronsSelection, processXicPlusSelection, "Process XicPlus Collision Selection for Data", true); - void processXic0Selection (SelCollisions::iterator const& collision, - CandsXic0DataFiltered const& candidates) + void processXic0Selection(SelCollisions::iterator const& collision, + CandsXic0DataFiltered const& candidates) { selectionCollision(collision, candidates); } PROCESS_SWITCH(HfCorrelatorXicHadronsSelection, processXic0Selection, "Process Xic0 Collision Selection for Data", false); - void processXicPlusSelectionMcRec (SelCollisions::iterator const& collision, - CandsXicPlusMcRecFiltered const& candidates) + void processXicPlusSelectionMcRec(SelCollisions::iterator const& collision, + CandsXicPlusMcRecFiltered const& candidates) { selectionCollision(collision, candidates); } PROCESS_SWITCH(HfCorrelatorXicHadronsSelection, processXicPlusSelectionMcRec, "Process XicPlus Selection McRec", false); - void processXic0SelectionMcRec (SelCollisions::iterator const& collision, - CandsXic0McRecFiltered const& candidates) + void processXic0SelectionMcRec(SelCollisions::iterator const& collision, + CandsXic0McRecFiltered const& candidates) { selectionCollision(collision, candidates); } PROCESS_SWITCH(HfCorrelatorXicHadronsSelection, processXic0SelectionMcRec, "Process Xic0 Selection McRec", false); - void processXicPlusSelectionMcGen (aod::McCollision const&, - CandidatesXicPlusMcGen const& mcParticles) + void processXicPlusSelectionMcGen(aod::McCollision const&, + CandidatesXicPlusMcGen const& mcParticles) { selectionCollisionMcGen(mcParticles); } PROCESS_SWITCH(HfCorrelatorXicHadronsSelection, processXicPlusSelectionMcGen, "Process XicPlus Selection McGen", false); - void processXic0SelectionMcGen (aod::McCollision const&, - CandidatesXic0McGen const& mcParticles) + void processXic0SelectionMcGen(aod::McCollision const&, + CandidatesXic0McGen const& mcParticles) { selectionCollisionMcGen(mcParticles); } @@ -358,7 +357,7 @@ struct HfCorrelatorXicHadronsSelection { // Xic-Hadron correlation pair builder struct HfCorrelatorXicHadrons { - //using Lc correlation table to avoid duplication for similair tables, name will be changed later + // using Lc correlation table to avoid duplication for similair tables, name will be changed later Produces entryCandHadronPair; Produces entryCandHadronPairY; Produces entryCandHadronPairTrkPID; @@ -468,9 +467,9 @@ struct HfCorrelatorXicHadrons { using TracksWithMc = soa::Filtered>; Filter collisionFilter = aod::hf_selection_lc_collision::lcSel == true; -// Filter xicPlusFilter = ((o2::aod::hf_track_index::hfflag & static_cast(1 << o2::aod::hf_cand_xic_to_xi_pi_pi::DecayType::XicToXiPiPi)) != static_cast(0)) && (aod::hf_sel_candidate_xic::isSelXicToXiPiPi >= cfgXicCand.selectionFlagXic); - //Filter xicPlusFilter = ((o2::aod::hf_track_index::hfflag & static_cast(1 << o2::aod::hf_cand_xic_to_xi_pi_pi::DecayType::XicToXiPiPi)) != static_cast(0)) && (aod::hf_sel_candidate_xic::isSelXicToXiPiPi || cfgXicCand.selectionFlagXic <= 0); - //Filter xic0Filter = ((o2::aod::hf_track_index::hfflag & static_cast(1 << aod::hf_cand_xic0_omegac0::DecayType::XiczeroToXiPi)) != static_cast(0)) && (aod::hf_sel_toxipi::resultSelections >= cfgXicCand.selectionFlagXic); + // Filter xicPlusFilter = ((o2::aod::hf_track_index::hfflag & static_cast(1 << o2::aod::hf_cand_xic_to_xi_pi_pi::DecayType::XicToXiPiPi)) != static_cast(0)) && (aod::hf_sel_candidate_xic::isSelXicToXiPiPi >= cfgXicCand.selectionFlagXic); + // Filter xicPlusFilter = ((o2::aod::hf_track_index::hfflag & static_cast(1 << o2::aod::hf_cand_xic_to_xi_pi_pi::DecayType::XicToXiPiPi)) != static_cast(0)) && (aod::hf_sel_candidate_xic::isSelXicToXiPiPi || cfgXicCand.selectionFlagXic <= 0); + // Filter xic0Filter = ((o2::aod::hf_track_index::hfflag & static_cast(1 << aod::hf_cand_xic0_omegac0::DecayType::XiczeroToXiPi)) != static_cast(0)) && (aod::hf_sel_toxipi::resultSelections >= cfgXicCand.selectionFlagXic); Filter trackFilter = (nabs(aod::track::eta) < cfgXicCand.etaTrackMax) && (nabs(aod::track::pt) > cfgXicCand.ptTrackMin) && (nabs(aod::track::dcaXY) < cfgXicCand.dcaXYTrackMax) && (nabs(aod::track::dcaZ) < cfgXicCand.dcaZTrackMax); Filter xicPlusFilter = aod::hf_sel_candidate_xic::isSelXicToXiPiPi >= cfgXicCand.selectionFlagXic; Filter xic0Filter = aod::hf_sel_toxipi::resultSelections == true; @@ -539,21 +538,21 @@ struct HfCorrelatorXicHadrons { registry.add("hZvtx", "z vertex;z vertex;entries", {HistType::kTH1F, {{200, -20., 20.}}}); registry.add("hCandBin", "candidates in pool Bin;pool Bin;entries", {HistType::kTH1F, {{9, 0., 9.}}}); registry.add("hTracksBin", "Tracks selected in pool Bin;pool Bin;entries", {HistType::kTH1F, {{9, 0., 9.}}}); - //registry.add("hMassXicVsPt", "Xic candidates;inv. mass (Xi pi pi) (GeV/#it{c}^{2});entries", {HistType::kTH2F, {{axisCandMass}, {axisPtXic}}}); - //registry.add("hMassXicPlusVsPtVsSign", "Xic candidates;inv. mass (#Xi #pi #pi) (GeV/#it{c}^{2});sign;entries", {HistType::kTH3F, {{axisCandMass}, {axisPtXic}, {axisSign}}}); - //registry.add("hMassXicData", "Xic candidates;inv. mass (Xi pi pi) (GeV/#it{c}^{2});entries", {HistType::kTH1F, {{axisCandMass}}}); + // registry.add("hMassXicVsPt", "Xic candidates;inv. mass (Xi pi pi) (GeV/#it{c}^{2});entries", {HistType::kTH2F, {{axisCandMass}, {axisPtXic}}}); + // registry.add("hMassXicPlusVsPtVsSign", "Xic candidates;inv. mass (#Xi #pi #pi) (GeV/#it{c}^{2});sign;entries", {HistType::kTH3F, {{axisCandMass}, {axisPtXic}, {axisSign}}}); + // registry.add("hMassXicData", "Xic candidates;inv. mass (Xi pi pi) (GeV/#it{c}^{2});entries", {HistType::kTH1F, {{axisCandMass}}}); registry.add("hXicPoolBin", "Xic candidates pool bin", {HistType::kTH1F, {axisPoolBin}}); registry.add("hTracksPoolBin", "Particles associated pool bin", {HistType::kTH1F, {axisPoolBin}}); // Histograms for MC Reco analysis registry.add("hMcEvtCount", "Event counter - MC gen;;entries", {HistType::kTH1F, {{1, -0.5, 0.5}}}); - //registry.add("hMassXicMcRecBkg", "Xic background candidates - MC reco;inv. mass (Xi pi pi) (GeV/#it{c}^{2});entries", {HistType::kTH2F, {{axisCandMass}, {axisPtXic}}}); + // registry.add("hMassXicMcRecBkg", "Xic background candidates - MC reco;inv. mass (Xi pi pi) (GeV/#it{c}^{2});entries", {HistType::kTH2F, {{axisCandMass}, {axisPtXic}}}); registry.add("hPtCandSig", "Xic,Hadron candidates - MC Reco", {HistType::kTH1F, {axisPtXic}}); registry.add("hPtCandSigPrompt", "Xic,Hadron candidates Prompt - MC Reco", {HistType::kTH1F, {axisPtXic}}); registry.add("hPtCandSigNonPrompt", "Xic,Hadron candidates Non Prompt - MC Reco", {HistType::kTH1F, {axisPtXic}}); - //registry.add("hPtCandMcRecBkg", "Xic,Hadron candidates - MC Reco", {HistType::kTH1F, {axisPtXic}}); + // registry.add("hPtCandMcRecBkg", "Xic,Hadron candidates - MC Reco", {HistType::kTH1F, {axisPtXic}}); registry.add("hEtaSig", "Xic,Hadron candidates - MC Reco", {HistType::kTH1F, {axisEta}}); registry.add("hPhiSig", "Xic,Hadron candidates - MC Reco", {HistType::kTH1F, {axisPhi}}); - // registry.add("hY", "Xic,Hadron candidates;candidate #it{#y};entries", {HistType::kTH1F, {axisRapidity}}); + // registry.add("hY", "Xic,Hadron candidates;candidate #it{#y};entries", {HistType::kTH1F, {axisRapidity}}); registry.add("hYSig", "Xic,Hadron candidates - MC reco;candidate #it{#y};entries", {HistType::kTH1F, {axisRapidity}}); registry.add("hPtCandMcRecSigPrompt", "Xic,Hadron candidates Prompt - MC Reco", {HistType::kTH1F, {axisPtXic}}); registry.add("hPtCandMcRecSigNonPrompt", "Xic,Hadron candidates Non Prompt - MC Reco", {HistType::kTH1F, {axisPtXic}}); @@ -608,10 +607,10 @@ struct HfCorrelatorXicHadrons { corrBinning = {{binsZVtx, binsMultiplicity}, true}; } -template + template void fillMlOutput(MlProbType const& mlProb, std::vector& outputMl) { - if (mlProb.size() == 0){ + if (mlProb.size() == 0) { return; } for (unsigned int iclass = 0; iclass < cfgXicCand.classMl->size() && iclass < outputMl.size(); iclass++) { @@ -622,14 +621,13 @@ template } } -// template -// double estimateY(CandType const& candidate) -// { -// return HfHelper::yXic(candidate); -// } - + // template + // double estimateY(CandType const& candidate) + // { + // return HfHelper::yXic(candidate); + // } - float getMassFromPdg (int pdgCode) + float getMassFromPdg(int pdgCode) { switch (std::abs(pdgCode)) { case PDG_t::kProton: @@ -645,35 +643,40 @@ template } } -// template -// float getXicType(const auto& candidate) -// { -// int chargeCand = candidate.sign(); -// float XicType = 0.f; -// if (chargeCand == 0) { -// auto bachelorTrack = candidate.template prong0_as(); -// XicType = (bachelorTrack.sign() > 0) ? 0.5f : -0.5f; // to seprate Xic0 with its anti-particle -// } else { -// XicType = (chargeCand > 0) ? 1.5f : -1.5f; -// } -// return XicType; -// } + // template + // float getXicType(const auto& candidate) + // { + // int chargeCand = candidate.sign(); + // float XicType = 0.f; + // if (chargeCand == 0) { + // auto bachelorTrack = candidate.template prong0_as(); + // XicType = (bachelorTrack.sign() > 0) ? 0.5f : -0.5f; // to seprate Xic0 with its anti-particle + // } else { + // XicType = (chargeCand > 0) ? 1.5f : -1.5f; + // } + // return XicType; + // } float getXicTypeMC(const auto& particle) -{ - int pdgCode = particle.pdgCode(); - - switch (pdgCode) { - case kXiC0: return 0.5f; // Xic0 - case -kXiC0: return -0.5f; // Xic0-bar - case kXiCPlus: return 1.5f; // XicPlus - case -kXiCPlus: return -1.5f; // XicMinus - default: return 0.f; + { + int pdgCode = particle.pdgCode(); + + switch (pdgCode) { + case kXiC0: + return 0.5f; // Xic0 + case -kXiC0: + return -0.5f; // Xic0-bar + case kXiCPlus: + return 1.5f; // XicPlus + case -kXiCPlus: + return -1.5f; // XicMinus + default: + return 0.f; + } } -} template - bool isSelectedV0Daughter (T const& track, int pid) + bool isSelectedV0Daughter(T const& track, int pid) { if (std::abs(pid) == kProton && std::abs(track.tpcNSigmaPr()) > cfgV0.cfgDaughPIDCutsTPCPr) { return false; @@ -701,7 +704,7 @@ template } template - float calculateInvMass (float pT1, float eta1, float phi1, assocType const& particle2, float mass1, float mass2) + float calculateInvMass(float pT1, float eta1, float phi1, assocType const& particle2, float mass1, float mass2) { ROOT::Math::PtEtaPhiMVector vec1(pT1, eta1, phi1, mass1); ROOT::Math::PtEtaPhiMVector vec2(particle2.pt(), particle2.eta(), particle2.phi(), mass2); @@ -710,7 +713,7 @@ template } template - float calculateCombinedPt (float pT1, float eta1, float phi1, assocType const& particle2) + float calculateCombinedPt(float pT1, float eta1, float phi1, assocType const& particle2) { ROOT::Math::PtEtaPhiMVector vec1(pT1, eta1, phi1, 0.); ROOT::Math::PtEtaPhiMVector vec2(particle2.pt(), particle2.eta(), particle2.phi(), 0.); @@ -743,8 +746,8 @@ template registry.fill(HIST("hV0Lambda"), v0.mLambda(), v0.pt(), posTrackV0.pt()); registry.fill(HIST("hV0LambdaRefl"), v0.mAntiLambda(), v0.pt(), negTrackV0.pt()); registry.fill(HIST("hTPCnSigmaPr"), posTrackV0.pt(), posTrackV0.tpcNSigmaPr()); - - if (posTrackV0.hasTOF()) { + + if (posTrackV0.hasTOF()) { registry.fill(HIST("hTOFnSigmaPr"), posTrackV0.pt(), posTrackV0.tofNSigmaPr()); } @@ -868,7 +871,7 @@ template double phiCand = -999.0; bool selXicCand = false; - //float xicType = getXicType(candidate); + // float xicType = getXicType(candidate); // Determine mass and rapidity based on Xic type if constexpr (!isXicPlus) { @@ -912,7 +915,7 @@ template if constexpr (IsMcRec) { isPrompt = candidate.originMcRec() == RecoDecay::OriginType::Prompt; isNonPrompt = candidate.originMcRec() == RecoDecay::OriginType::NonPrompt; - + isSignal = isXicPlus ? (std::abs(candidate.flagMcMatchRec()) == o2::aod::hf_cand_xic_to_xi_pi_pi::DecayType::XicToXiPiPi) : (std::abs(candidate.flagMcMatchRec()) == static_cast(BIT(aod::hf_cand_xic0_omegac0::DecayType::XiczeroToXiPi))); if (isSignal) { @@ -944,7 +947,7 @@ template entryCandCandGenInfo(isPrompt); if (!skipMixedEventTableFilling) { entryCand(phiCand, etaCand, ptCand, massCand, poolBin, gCollisionId, timeStamp); - //entryCandCharge(xicType); + // entryCandCharge(xicType); } } @@ -1004,7 +1007,7 @@ template } template - void calculateTrkEff (T1 const& trackPos1, T2 const& trackPos2, McPart const& mcParticles) + void calculateTrkEff(T1 const& trackPos1, T2 const& trackPos2, McPart const& mcParticles) { decltype(trackPos1.template mcParticle_as()) mctrk{}; if (trackPos1.has_mcParticle()) { @@ -1041,9 +1044,9 @@ template } template - void fillCorrelationTable (bool trkPidFill, AssocType const& assoc, float const& candPt, float const& candEta, float const& candPhi, - const std::vector& outMl, int binPool, int8_t correlStatus, - double yCand, double candMass, McPart const& mcParticles) + void fillCorrelationTable(bool trkPidFill, AssocType const& assoc, float const& candPt, float const& candEta, float const& candPhi, + const std::vector& outMl, int binPool, int8_t correlStatus, + double yCand, double candMass, McPart const& mcParticles) { bool isPhysicalPrimary = false; int trackOrigin = -1; @@ -1081,7 +1084,7 @@ template assoc.pt() * signAssoc, binPool, correlStatus, - cent); //will be added later if required + cent); // will be added later if required entryCandHadronPairY(yAssoc - yCand); entryCandHadronMlInfo(outMl[0], outMl[1]); entryCandHadronRecoInfo(candMass, false); @@ -1127,7 +1130,6 @@ template float const multiplicityFT0M = collision.multFT0M(); int gCollisionId = collision.globalIndex(); - if (cfgXicCand.eventFractionToAnalyze > 0) { if (rnd->Uniform(0, 1) > cfgXicCand.eventFractionToAnalyze) { skipMixedEventTableFilling = true; @@ -1173,14 +1175,14 @@ template if constexpr (!isXicPlus) { massCand = candidate.invMassCharmBaryon(); - yCand = candidate.kfRapXic(); //yCand = candidate.y(o2::constants::physics::MassXiC0); + yCand = candidate.kfRapXic(); // yCand = candidate.y(o2::constants::physics::MassXiC0); ptCand = -RecoDecay::pt(candidate.pxCharmBaryon(), candidate.pyCharmBaryon()) * candidate.signDecay(); etaCand = candidate.etaCharmBaryon(); phiCand = RecoDecay::phi(candidate.pxCharmBaryon(), candidate.pyCharmBaryon()); selXicCand = candidate.resultSelections() >= cfgXicCand.selectionFlagXic; const auto& probs = candidate.mlProbToXiPi(); fillMlOutput(probs, outputMlXic); - } else { // XicPlus + } else { // XicPlus massCand = candidate.invMassXicPlus(); yCand = candidate.y(o2::constants::physics::MassXiCPlus); @@ -1199,7 +1201,6 @@ template continue; } - registry.fill(HIST("hY"), yCand); registry.fill(HIST("hEta"), etaCand); registry.fill(HIST("hPhi"), phiCand); @@ -1212,10 +1213,10 @@ template if constexpr (IsMcRec) { isPrompt = candidate.originMcRec() == RecoDecay::OriginType::Prompt; isNonPrompt = candidate.originMcRec() == RecoDecay::OriginType::NonPrompt; - + isSignal = std::abs(candidate.flagMcMatchRec()) == o2::aod::hf_cand_xic_to_xi_pi_pi::DecayType::XicToXiPiPi; - // auto trackProng0 = candidate.template prong0_as(); - // auto trackProng1 = candidate.template prong1_as(); + // auto trackProng0 = candidate.template prong0_as(); + // auto trackProng1 = candidate.template prong1_as(); if (cfgXicCand.calTrkEff && countCand == 1 && (isSignal || !cfgXicCand.calEffEventWithCand)) { // calculateTrkEff can be added here if needed } @@ -1257,13 +1258,13 @@ template // Correlation with hadrons for (const auto& track : tracks) { - isCandidateDaughter = (candidate.bachelorId() == track.globalIndex()) || (candidate.posTrackId() == track.globalIndex()) || (candidate.negTrackId() == track.globalIndex()); - - if constexpr (isXicPlus){ - isCandidateDaughter = (candidate.pi0Id() == track.globalIndex()) || (candidate.pi1Id() == track.globalIndex()) || isCandidateDaughter; - } else { - isCandidateDaughter = (candidate.bachelorFromCharmBaryonId() == track.globalIndex()) || isCandidateDaughter; - } + isCandidateDaughter = (candidate.bachelorId() == track.globalIndex()) || (candidate.posTrackId() == track.globalIndex()) || (candidate.negTrackId() == track.globalIndex()); + + if constexpr (isXicPlus) { + isCandidateDaughter = (candidate.pi0Id() == track.globalIndex()) || (candidate.pi1Id() == track.globalIndex()) || isCandidateDaughter; + } else { + isCandidateDaughter = (candidate.bachelorFromCharmBaryonId() == track.globalIndex()) || isCandidateDaughter; + } if (isCandidateDaughter && !cfgXicCand.storeAutoCorrelationFlag) { continue; @@ -1331,7 +1332,7 @@ template // MIXED EVENT PROCESSING // ============================================================================ - template + template void doMixEvent(CollisionType const& collisions, AssociateType const& tracks, CandType const& candidates, @@ -1361,30 +1362,30 @@ template registry.fill(HIST("hXicPoolBin"), poolBinXic); for (const auto& [candidate, assocParticle] : o2::soa::combinations(o2::soa::CombinationsFullIndexPolicy(tracks1, tracks2))) { - - if constexpr (!isXicPlus) { - massCand = candidate.invMassCharmBaryon(); - yCand = candidate.kfRapXic(); - ptCand = -RecoDecay::pt(candidate.pxCharmBaryon(), candidate.pyCharmBaryon()) *candidate.signDecay(); - etaCand = candidate.etaCharmBaryon(); - phiCand = RecoDecay::phi(candidate.pxCharmBaryon(), candidate.pyCharmBaryon()); - selCand = candidate.resultSelections() >= cfgXicCand.selectionFlagXic; - const auto& probs = candidate.mlProbToXiPi(); - fillMlOutput(probs, outputMlXic); - } else { - massCand = candidate.invMassXicPlus(); - yCand = candidate.y(o2::constants::physics::MassXiCPlus); - ptCand = candidate.pt()*candidate.sign(); - etaCand = candidate.eta(); - phiCand = candidate.phi(); - selCand = candidate.isSelXicToXiPiPi() >= cfgXicCand.selectionFlagXic; - const auto& probs = candidate.mlProbXicToXiPiPi(); - fillMlOutput(probs, outputMlXic); - } - if (!selCand) { - continue; - } + if constexpr (!isXicPlus) { + massCand = candidate.invMassCharmBaryon(); + yCand = candidate.kfRapXic(); + ptCand = -RecoDecay::pt(candidate.pxCharmBaryon(), candidate.pyCharmBaryon()) * candidate.signDecay(); + etaCand = candidate.etaCharmBaryon(); + phiCand = RecoDecay::phi(candidate.pxCharmBaryon(), candidate.pyCharmBaryon()); + selCand = candidate.resultSelections() >= cfgXicCand.selectionFlagXic; + const auto& probs = candidate.mlProbToXiPi(); + fillMlOutput(probs, outputMlXic); + } else { + massCand = candidate.invMassXicPlus(); + yCand = candidate.y(o2::constants::physics::MassXiCPlus); + ptCand = candidate.pt() * candidate.sign(); + etaCand = candidate.eta(); + phiCand = candidate.phi(); + selCand = candidate.isSelXicToXiPiPi() >= cfgXicCand.selectionFlagXic; + const auto& probs = candidate.mlProbXicToXiPiPi(); + fillMlOutput(probs, outputMlXic); + } + + if (!selCand) { + continue; + } if constexpr (IsMcRec) { isPrompt = candidate.originMcRec() == RecoDecay::OriginType::Prompt; isNonPrompt = candidate.originMcRec() == RecoDecay::OriginType::NonPrompt; @@ -1395,39 +1396,39 @@ template } if constexpr (!isV0) { - if (cfgXicCand.corrParticle != 2 && !assocParticle.isGlobalTrackWoDCA()) { - continue; - } - if (cfgXicCand.pidTrkApplied) { - if (!passPIDSelection(assocParticle, cfgXicCand.trkPIDspecies, cfgXicCand.pidTPCMax, cfgXicCand.pidTOFMax, cfgXicCand.tofPIDThreshold, cfgXicCand.forceTOF)) { + if (cfgXicCand.corrParticle != 2 && !assocParticle.isGlobalTrackWoDCA()) { continue; } - } - } else { + if (cfgXicCand.pidTrkApplied) { + if (!passPIDSelection(assocParticle, cfgXicCand.trkPIDspecies, cfgXicCand.pidTPCMax, cfgXicCand.pidTOFMax, cfgXicCand.tofPIDThreshold, cfgXicCand.forceTOF)) { + continue; + } + } + } else { - auto posTrackV0 = assocParticle.template posTrack_as(); - auto negTrackV0 = assocParticle.template negTrack_as(); + auto posTrackV0 = assocParticle.template posTrack_as(); + auto negTrackV0 = assocParticle.template negTrack_as(); - if (std::abs(o2::constants::physics::MassLambda - assocParticle.mLambda()) < cfgV0.cfgHypMassWindow) { - if (isSelectedV0Daughter(posTrackV0, kProton) && isSelectedV0Daughter(negTrackV0, kPiPlus)) { + if (std::abs(o2::constants::physics::MassLambda - assocParticle.mLambda()) < cfgV0.cfgHypMassWindow) { + if (isSelectedV0Daughter(posTrackV0, kProton) && isSelectedV0Daughter(negTrackV0, kPiPlus)) { fillCorrelationTable(V0LambdaType::Lambda)>(cfgXicCand.fillTrkPID, assocParticle, ptCand, etaCand, phiCand, outputMlXic, poolBin, correlationStatus, yCand, massCand, *mcParticles); } } if (std::abs(o2::constants::physics::MassLambda - assocParticle.mAntiLambda()) < cfgV0.cfgHypMassWindow) { - if (isSelectedV0Daughter(negTrackV0, kProton) && isSelectedV0Daughter(posTrackV0, kPiPlus)) { + if (isSelectedV0Daughter(negTrackV0, kProton) && isSelectedV0Daughter(posTrackV0, kPiPlus)) { fillCorrelationTable(V0LambdaType::AntiLambda)>(cfgXicCand.fillTrkPID, assocParticle, ptCand, etaCand, phiCand, outputMlXic, poolBin, correlationStatus, yCand, massCand, *mcParticles); - } - } - } - if (isPrompt) { - registry.fill(HIST("hPtCandMcRecSigPrompt"), ptCand); - registry.fill(HIST("hPtVsMultiplicityMcRecPrompt"), ptCand, 0); - } else if (isNonPrompt) { - registry.fill(HIST("hPtCandMcRecSigNonPrompt"), ptCand); - registry.fill(HIST("hPtVsMultiplicityMcRecNonPrompt"), ptCand, 0); + } } + } + if (isPrompt) { + registry.fill(HIST("hPtCandMcRecSigPrompt"), ptCand); + registry.fill(HIST("hPtVsMultiplicityMcRecPrompt"), ptCand, 0); + } else if (isNonPrompt) { + registry.fill(HIST("hPtCandMcRecSigNonPrompt"), ptCand); + registry.fill(HIST("hPtVsMultiplicityMcRecNonPrompt"), ptCand, 0); + } } } } @@ -1442,7 +1443,6 @@ template int counterCharmCand = 0; int8_t candSign = 0; - registry.fill(HIST("hMcEvtCount"), 0); BinningTypeMcGen const corrBinningMcGen{{binsZVtx, binsMultiplicityMc}, true}; poolBin = corrBinningMcGen.getBin(std::make_tuple(mcCollision.posZ(), mcCollision.multMCFT0A())); @@ -1478,7 +1478,7 @@ template registry.fill(HIST("hPhiMcGen"), RecoDecay::constrainAngle(particle.phi(), -PIHalf)); registry.fill(HIST("hYMcGen"), yCand); - //int8_t chargeCand = pdg->GetParticle(particle.pdgCode())->Charge() / PDGChargeScale; + // int8_t chargeCand = pdg->GetParticle(particle.pdgCode())->Charge() / PDGChargeScale; float xicType = getXicTypeMC(particle); isPrompt = particle.originMcGen() == RecoDecay::OriginType::Prompt; @@ -1555,7 +1555,7 @@ template poolBin, correlationStatus, cent); - entryCandHadronPairY(RecoDecay::y(particleAssoc.pVector(), getMassFromPdg(particleAssoc.pdgCode())) - yCand); + entryCandHadronPairY(RecoDecay::y(particleAssoc.pVector(), getMassFromPdg(particleAssoc.pdgCode())) - yCand); entryCandHadronRecoInfo(massCand, true); entryCandHadronGenInfo(isPrompt, particleAssoc.isPhysicalPrimary(), trackOrigin); } // end inner loop @@ -1569,135 +1569,127 @@ template // ============================================================================ /// Data processing: XicPlus with regular hadron tracks - void processDataXicPlus (SelCollisions::iterator const& collision, - TracksData const& tracks, - CandsXicPlusDataFiltered const& candidates, - aod::BCsWithTimestamps const&) + void processDataXicPlus(SelCollisions::iterator const& collision, + TracksData const& tracks, + CandsXicPlusDataFiltered const& candidates, + aod::BCsWithTimestamps const&) { doSameEvent(collision, tracks, candidates); } PROCESS_SWITCH(HfCorrelatorXicHadrons, processDataXicPlus, "Process data XicPlus", true); - - /// MC Reco processing: XicPlus with regular hadron tracks - void processMcRecXicPlus (SelCollisions::iterator const& collision, - TracksWithMc const& tracks, - CandsXicPlusMcRecFiltered const& candidates, - aod::McParticles const& mcParticles) + void processMcRecXicPlus(SelCollisions::iterator const& collision, + TracksWithMc const& tracks, + CandsXicPlusMcRecFiltered const& candidates, + aod::McParticles const& mcParticles) { doSameEvent(collision, tracks, candidates, &mcParticles); } PROCESS_SWITCH(HfCorrelatorXicHadrons, processMcRecXicPlus, "Process Mc Reco mode Xic", false); - /// Data processing: Xic0 with regular hadron tracks - void processDataXic0 (SelCollisions::iterator const& collision, - TracksData const& tracks, - CandsXic0DataFiltered const& candidates, - aod::BCsWithTimestamps const&) + void processDataXic0(SelCollisions::iterator const& collision, + TracksData const& tracks, + CandsXic0DataFiltered const& candidates, + aod::BCsWithTimestamps const&) { doSameEvent(collision, tracks, candidates); } PROCESS_SWITCH(HfCorrelatorXicHadrons, processDataXic0, "Process data Xic0", false); - /// MC Reco processing: Xic0 with regular hadron tracks - void processMcRecXic0 (SelCollisions::iterator const& collision, - TracksWithMc const& tracks, - CandsXic0McRecFiltered const& candidates, - aod::McParticles const& mcParticles) + void processMcRecXic0(SelCollisions::iterator const& collision, + TracksWithMc const& tracks, + CandsXic0McRecFiltered const& candidates, + aod::McParticles const& mcParticles) { doSameEvent(collision, tracks, candidates, &mcParticles); } PROCESS_SWITCH(HfCorrelatorXicHadrons, processMcRecXic0, "Process Mc Reco mode Xic0", false); - /// Data processing: XicPlus with V0 Lambda - void processDataXicPlusV0 (SelCollisions::iterator const& collision, - TracksData const& tracks, - aod::V0Datas const& v0s, - CandsXicPlusDataFiltered const& candidates, - aod::BCsWithTimestamps const&) + void processDataXicPlusV0(SelCollisions::iterator const& collision, + TracksData const& tracks, + aod::V0Datas const& v0s, + CandsXicPlusDataFiltered const& candidates, + aod::BCsWithTimestamps const&) { doSameEventWithV0(collision, v0s, tracks, candidates); } PROCESS_SWITCH(HfCorrelatorXicHadrons, processDataXicPlusV0, "Data process for v0 lambda with Xic Plus", false); - /// MC Reco processing: XicPlus with V0 Lambda - void processMcRecXicPlusV0 (SelCollisions::iterator const& collision, - TracksWithMc const& tracks, - soa::Join const& v0s, - CandsXicPlusMcRecFiltered const& candidates, - aod::McParticles const& mcParticles) + void processMcRecXicPlusV0(SelCollisions::iterator const& collision, + TracksWithMc const& tracks, + soa::Join const& v0s, + CandsXicPlusMcRecFiltered const& candidates, + aod::McParticles const& mcParticles) { doSameEventWithV0(collision, v0s, tracks, candidates, &mcParticles); } PROCESS_SWITCH(HfCorrelatorXicHadrons, processMcRecXicPlusV0, "Mc process for v0 lambda with Xic Plus", false); - /// Data processing: Xic0 with V0 Lambda - void processDataXic0V0 (SelCollisions::iterator const& collision, - TracksData const& tracks, - aod::V0Datas const& v0s, - CandsXic0DataFiltered const& candidates, - aod::BCsWithTimestamps const&) + void processDataXic0V0(SelCollisions::iterator const& collision, + TracksData const& tracks, + aod::V0Datas const& v0s, + CandsXic0DataFiltered const& candidates, + aod::BCsWithTimestamps const&) { doSameEventWithV0(collision, v0s, tracks, candidates); } PROCESS_SWITCH(HfCorrelatorXicHadrons, processDataXic0V0, "Data process for v0 lambda with Xic0", false); /// MC Reco processing: Xic0 with V0 Lambda - void processMcRecXic0V0 (SelCollisions::iterator const& collision, - TracksWithMc const& tracks, - soa::Join const& v0s, - CandsXic0McRecFiltered const& candidates, - aod::McParticles const& mcParticles) + void processMcRecXic0V0(SelCollisions::iterator const& collision, + TracksWithMc const& tracks, + soa::Join const& v0s, + CandsXic0McRecFiltered const& candidates, + aod::McParticles const& mcParticles) { doSameEventWithV0(collision, v0s, tracks, candidates, &mcParticles); } PROCESS_SWITCH(HfCorrelatorXicHadrons, processMcRecXic0V0, "Mc process for v0 lambda with Xic0", false); - // ============================================================================ - // MIXED EVENT PROCESS FUNCTIONS + // MIXED EVENT PROCESS FUNCTIONS // ============================================================================ /// Data Mixed Event: XicPlus with regular hadron tracks - void processDataMixedEventXicPlus (SelCollisions const& collisions, - CandsXicPlusDataFiltered const& candidates, - TracksData const& tracks) + void processDataMixedEventXicPlus(SelCollisions const& collisions, + CandsXicPlusDataFiltered const& candidates, + TracksData const& tracks) { doMixEvent(collisions, tracks, candidates, tracks); } PROCESS_SWITCH(HfCorrelatorXicHadrons, processDataMixedEventXicPlus, "Process Mixed Event Data XicPlus", false); /// MC Reco Mixed Event: XicPlus with regular hadron tracks - void processMcRecMixedEventXicPlus (SelCollisions const& collisions, - CandsXicPlusMcRecFiltered const& candidates, - TracksWithMc const& tracks, - aod::McParticles const& mcParticles) + void processMcRecMixedEventXicPlus(SelCollisions const& collisions, + CandsXicPlusMcRecFiltered const& candidates, + TracksWithMc const& tracks, + aod::McParticles const& mcParticles) { doMixEvent(collisions, tracks, candidates, tracks, &mcParticles); } PROCESS_SWITCH(HfCorrelatorXicHadrons, processMcRecMixedEventXicPlus, "Process Mixed Event McRec XicPlus", false); /// Data Mixed Event: Xic0 with regular hadron tracks - void processDataMixedEventXic0 (SelCollisions const& collisions, - CandsXic0DataFiltered const& candidates, - TracksData const& tracks) + void processDataMixedEventXic0(SelCollisions const& collisions, + CandsXic0DataFiltered const& candidates, + TracksData const& tracks) { doMixEvent(collisions, tracks, candidates, tracks); } PROCESS_SWITCH(HfCorrelatorXicHadrons, processDataMixedEventXic0, "Process Mixed Event Data Xic0", false); /// MC Reco Mixed Event: Xic0 with regular hadron tracks - void processMcRecMixedEventXic0 (SelCollisions const& collisions, - CandsXic0McRecFiltered const& candidates, - TracksWithMc const& tracks, - aod::McParticles const& mcParticles) + void processMcRecMixedEventXic0(SelCollisions const& collisions, + CandsXic0McRecFiltered const& candidates, + TracksWithMc const& tracks, + aod::McParticles const& mcParticles) { doMixEvent(collisions, tracks, candidates, tracks, &mcParticles); } @@ -1709,70 +1701,67 @@ template /// Data Mixed Event: XicPlus with V0 Lambda /// NOTE: V0 mixed events are more complex - need proper binning and collision matching - void processDataMixedEventXicPlusV0 (SelCollisions const& collisions, - CandsXicPlusDataFiltered const& candidates, - aod::V0Datas const& v0s, - TracksData const& tracks) + void processDataMixedEventXicPlusV0(SelCollisions const& collisions, + CandsXicPlusDataFiltered const& candidates, + aod::V0Datas const& v0s, + TracksData const& tracks) { doMixEvent(collisions, v0s, candidates, tracks); } PROCESS_SWITCH(HfCorrelatorXicHadrons, processDataMixedEventXicPlusV0, "Process Mixed Event Data XicPlus + V0Lambda", false); /// MC Reco Mixed Event: XicPlus with V0 Lambda - void processMcRecMixedEventXicPlusV0 (SelCollisions const& collisions, - CandsXicPlusMcRecFiltered const& candidates, - soa::Join const& v0s, - TracksWithMc const& tracks, - aod::McParticles const& mcParticles) + void processMcRecMixedEventXicPlusV0(SelCollisions const& collisions, + CandsXicPlusMcRecFiltered const& candidates, + soa::Join const& v0s, + TracksWithMc const& tracks, + aod::McParticles const& mcParticles) { doMixEvent(collisions, v0s, candidates, tracks, &mcParticles); } PROCESS_SWITCH(HfCorrelatorXicHadrons, processMcRecMixedEventXicPlusV0, "Process Mixed Event McRec XicPlus + V0Lambda", false); /// Data Mixed Event: Xic0 with V0 Lambda - void processDataMixedEventXic0V0 (SelCollisions const& collisions, - CandsXic0DataFiltered const& candidates, - aod::V0Datas const& v0s, - TracksData const& tracks) + void processDataMixedEventXic0V0(SelCollisions const& collisions, + CandsXic0DataFiltered const& candidates, + aod::V0Datas const& v0s, + TracksData const& tracks) { doMixEvent(collisions, v0s, candidates, tracks); } PROCESS_SWITCH(HfCorrelatorXicHadrons, processDataMixedEventXic0V0, "Process Mixed Event Data Xic0 + V0Lambda", false); /// MC Reco Mixed Event: Xic0 with V0 Lambda - void processMcRecMixedEventXic0V0 (SelCollisions const& collisions, - CandsXic0McRecFiltered const& candidates, - soa::Join const& v0s, - TracksWithMc const& tracks, - aod::McParticles const& mcParticles) + void processMcRecMixedEventXic0V0(SelCollisions const& collisions, + CandsXic0McRecFiltered const& candidates, + soa::Join const& v0s, + TracksWithMc const& tracks, + aod::McParticles const& mcParticles) { doMixEvent(collisions, v0s, candidates, tracks, &mcParticles); } PROCESS_SWITCH(HfCorrelatorXicHadrons, processMcRecMixedEventXic0V0, "Process Mixed Event McRec Xic0 + V0Lambda", false); - // ============================================================================ // MC GEN LEVEL - SAME EVENT PROCESSING // ============================================================================ /// MC Gen Same Event: XicPlus - void processMcGenXicPlus (SelCollisionsMc::iterator const& mcCollision, - CandidatesXicPlusMcGen const& mcParticles) + void processMcGenXicPlus(SelCollisionsMc::iterator const& mcCollision, + CandidatesXicPlusMcGen const& mcParticles) { doSameEventMcGen<1>(mcCollision, mcParticles); } PROCESS_SWITCH(HfCorrelatorXicHadrons, processMcGenXicPlus, "Process Mc Gen XicPlus", false); /// MC Gen Same Event: Xic0 - void processMcGenXic0 (SelCollisionsMc::iterator const& mcCollision, - CandidatesXic0McGen const& mcParticles) + void processMcGenXic0(SelCollisionsMc::iterator const& mcCollision, + CandidatesXic0McGen const& mcParticles) { doSameEventMcGen<0>(mcCollision, mcParticles); } PROCESS_SWITCH(HfCorrelatorXicHadrons, processMcGenXic0, "Process Mc Gen Xic0", false); - - void processMcGenMixedEvent(SelCollisionsMc const& collisions, CandidatesXicPlusMcGen const& mcParticles) { @@ -1810,7 +1799,7 @@ template continue; } - //int8_t const chargeXic = pdg->GetParticle(candidate.pdgCode())->Charge(); + // int8_t const chargeXic = pdg->GetParticle(candidate.pdgCode())->Charge(); float xicType = getXicTypeMC(candidate); int8_t const chargeAssoc = pdg->GetParticle(particleAssoc.pdgCode())->Charge(); @@ -1826,7 +1815,7 @@ template poolBin, correlationStatus, cent); - entryCandHadronPairY(RecoDecay::y(particleAssoc.pVector(), getMassFromPdg(particleAssoc.pdgCode())) - yXic); //particleAssoc.rapidity(getMassFromPdg(particleAssoc.pdgCode())) + entryCandHadronPairY(RecoDecay::y(particleAssoc.pVector(), getMassFromPdg(particleAssoc.pdgCode())) - yXic); // particleAssoc.rapidity(getMassFromPdg(particleAssoc.pdgCode())) entryCandHadronRecoInfo(massCand, true); entryCandHadronGenInfo(isPromptXic, particleAssoc.isPhysicalPrimary(), trackOrigin); entryPairCandCharge(xicType); @@ -1834,8 +1823,6 @@ template } } PROCESS_SWITCH(HfCorrelatorXicHadrons, processMcGenMixedEvent, "Process Mixed Event McGen", false); - - }; WorkflowSpec defineDataProcessing(ConfigContext const& cfgc)