diff --git a/PWGHF/HFC/DataModel/ReducedDMesonPairsTables.h b/PWGHF/HFC/DataModel/ReducedDMesonPairsTables.h index c6bda4958cc..b739ae6c89a 100644 --- a/PWGHF/HFC/DataModel/ReducedDMesonPairsTables.h +++ b/PWGHF/HFC/DataModel/ReducedDMesonPairsTables.h @@ -96,6 +96,17 @@ DECLARE_SOA_TABLE(HfCandDpMls, "AOD", "HFCANDDPML", full::MlScore0, full::MlScore1) +DECLARE_SOA_TABLE(HfCandDpTinys, "AOD", "HFCANDDPTINY", + full::CandidateSelFlag, + full::M, + full::Pt, + full::Eta, + full::Phi, + full::HfCandDpFullEvId, + hf_cand_3prong::FlagMcMatchRec, + hf_cand_3prong::OriginMcRec, + hf_cand_3prong::FlagMcDecayChanRec) + DECLARE_SOA_TABLE(HfCandDpLites, "AOD", "HFCANDDPLITE", hf_cand::Chi2PCA, full::DecayLength, @@ -139,7 +150,6 @@ DECLARE_SOA_TABLE(HfCandDpLites, "AOD", "HFCANDDPLITE", full::Phi, full::Y, full::Centrality, - collision::NumContrib, full::HfCandDpFullEvId, hf_cand_3prong::FlagMcMatchRec, hf_cand_3prong::OriginMcRec, diff --git a/PWGHF/HFC/TableProducer/correlatorDplusDplusReduced.cxx b/PWGHF/HFC/TableProducer/correlatorDplusDplusReduced.cxx index 3cc79666f33..306d2d494e8 100644 --- a/PWGHF/HFC/TableProducer/correlatorDplusDplusReduced.cxx +++ b/PWGHF/HFC/TableProducer/correlatorDplusDplusReduced.cxx @@ -52,6 +52,7 @@ using namespace o2::hf_centrality; struct HfCorrelatorDplusDplusReduced { Produces rowCandidateFull; Produces rowCandidateLite; + Produces rowCandidateTiny; Produces rowCandidateFullEvents; Produces rowCandidateMl; @@ -60,6 +61,7 @@ struct HfCorrelatorDplusDplusReduced { Configurable selectionFlagDplus{"selectionFlagDplus", 1, "Selection Flag for Dplus"}; Configurable fillCandidateLiteTable{"fillCandidateLiteTable", false, "Switch to fill lite table with candidate properties"}; + Configurable fillCandidateTinyTable{"fillCandidateTinyTable", false, "Switch to fill tiny table with candidate properties"}; // parameters for production of training samples Configurable fillCorrBkgs{"fillCorrBkgs", false, "Flag to fill derived tables with correlated background candidates"}; Configurable> classMlIndexes{"classMlIndexes", {0, 2}, "Indexes of ML bkg and non-prompt scores."}; @@ -113,11 +115,12 @@ struct HfCorrelatorDplusDplusReduced { } template - void fillCandidateTable(const T& candidate, int localEvIdx = -1) + void fillCandidateTable(const T& candidate, int localEvIdx = -1, int sign = 1) { int8_t flagMc = 0; int8_t originMc = 0; int8_t channelMc = 0; + if constexpr (doMc) { flagMc = candidate.flagMcMatchRec(); originMc = candidate.originMcRec(); @@ -140,7 +143,18 @@ struct HfCorrelatorDplusDplusReduced { cent = getCentralityColl(coll, centEstimator); } - if (fillCandidateLiteTable) { + if (fillCandidateTinyTable) { + rowCandidateTiny( + candidate.isSelDplusToPiKPi(), + hfHelper.invMassDplusToPiKPi(candidate), + sign * candidate.pt(), + candidate.eta(), + candidate.phi(), + localEvIdx, + flagMc, + originMc, + channelMc); + } else if (fillCandidateLiteTable) { rowCandidateLite( candidate.chi2PCA(), candidate.decayLength(), @@ -176,7 +190,7 @@ struct HfCorrelatorDplusDplusReduced { candidate.tpcTofNSigmaKa2(), candidate.isSelDplusToPiKPi(), hfHelper.invMassDplusToPiKPi(candidate), - candidate.pt(), + sign * candidate.pt(), candidate.cpa(), candidate.cpaXY(), candidate.maxNormalisedDeltaIP(), @@ -184,7 +198,6 @@ struct HfCorrelatorDplusDplusReduced { candidate.phi(), hfHelper.yDplus(candidate), cent, - coll.numContrib(), localEvIdx, flagMc, originMc, @@ -252,7 +265,7 @@ struct HfCorrelatorDplusDplusReduced { candidate.tpcTofNSigmaKa2(), candidate.isSelDplusToPiKPi(), hfHelper.invMassDplusToPiKPi(candidate), - candidate.pt(), + sign * candidate.pt(), candidate.p(), candidate.cpa(), candidate.cpaXY(), @@ -270,7 +283,7 @@ struct HfCorrelatorDplusDplusReduced { } } - void processData(aod::Collisions const& collisions, SelectedCandidates const& candidates) + void processData(aod::Collisions const& collisions, SelectedCandidates const& candidates, aod::Tracks const&) { static int lastRunNumber = -1; // reserve memory @@ -297,14 +310,14 @@ struct HfCorrelatorDplusDplusReduced { const auto colId = collision.globalIndex(); auto candidatesInThisCollision = candidates.sliceBy(tracksPerCollision, colId); - if (skipSingleD) { - if (candidatesInThisCollision.size() < 2) { // o2-linter: disable=magic-number (number of candidate must be larger than 1) + if (skipSingleD) + if (candidatesInThisCollision.size() < 2) // o2-linter: disable=magic-number (number of candidate must be larger than 1) continue; - } - } fillEvent(collision); for (const auto& candidate : candidatesInThisCollision) { - fillCandidateTable(candidate, rowCandidateFullEvents.lastIndex()); + auto prong_candidate = candidate.prong1_as(); + auto candidate_sign = prong_candidate.sign(); + fillCandidateTable(candidate, rowCandidateFullEvents.lastIndex(), candidate_sign); } } } @@ -324,14 +337,14 @@ struct HfCorrelatorDplusDplusReduced { for (const auto& collision : collisions) { // No skimming for MC data. No Zorro ! const auto colId = collision.globalIndex(); auto candidatesInThisCollision = candidates.sliceBy(tracksPerCollision, colId); - if (skipSingleD) { - if (candidatesInThisCollision.size() < 2) { // o2-linter: disable=magic-number (number of candidate must be larger than 1) + if (skipSingleD) + if (candidatesInThisCollision.size() < 2) // o2-linter: disable=magic-number (number of candidate must be larger than 1) continue; - } - } fillEvent(collision); for (const auto& candidate : candidatesInThisCollision) { - fillCandidateTable(candidate, rowCandidateFullEvents.lastIndex()); + auto prong_candidate = candidate.prong1_as(); + auto candidate_sign = prong_candidate.sign(); + fillCandidateTable(candidate, rowCandidateFullEvents.lastIndex(), candidate_sign); } } } @@ -346,11 +359,9 @@ struct HfCorrelatorDplusDplusReduced { for (const auto& mccollision : mccollisions) { // No skimming for MC data. No Zorro ! const auto colId = mccollision.globalIndex(); const auto particlesInThisCollision = mcparticles.sliceBy(mcParticlesPerMcCollision, colId); - if (skipSingleD) { - if (particlesInThisCollision.size() < 2) { // o2-linter: disable=magic-number (number of candidate must be larger than 1) + if (skipSingleD) + if (particlesInThisCollision.size() < 2) // o2-linter: disable=magic-number (number of candidate must be larger than 1) continue; - } - } rowCandidateMcCollisions( mccollision.posX(), mccollision.posY(), diff --git a/PWGHF/HFC/Tasks/taskCorrelationDplusDplusReduced.cxx b/PWGHF/HFC/Tasks/taskCorrelationDplusDplusReduced.cxx index 7d84131a57d..926e2a111e5 100644 --- a/PWGHF/HFC/Tasks/taskCorrelationDplusDplusReduced.cxx +++ b/PWGHF/HFC/Tasks/taskCorrelationDplusDplusReduced.cxx @@ -38,7 +38,7 @@ using namespace o2::framework::expressions; struct HfTaskCorrelationDplusDplusReduced { Configurable selectionFlagDplus{"selectionFlagDplus", 1, "Selection Flag for Dplus"}; - using SelectedCandidates = soa::Filtered; + using SelectedCandidates = soa::Filtered; using SelectedMcParticles = o2::aod::HfCandDpMcPs; Filter filterSelectCandidates = aod::full::candidateSelFlag >= selectionFlagDplus; @@ -56,7 +56,9 @@ struct HfTaskCorrelationDplusDplusReduced { { registry.add("hMassDplus", "D+ candidates;inv. mass (#pi#pi K) (GeV/#it{c}^{2}))", {HistType::kTH1F, {{120, 1.5848, 2.1848}}}); registry.add("hMassDplusMatched", "D+ matched candidates;inv. mass (#pi#pi K) (GeV/#it{c}^{2}))", {HistType::kTH1F, {{120, 1.5848, 2.1848}}}); - registry.add("hMassDMesonPair", "D Meson pair candidates;inv. mass (#pi K) (GeV/#it{c}^{2});inv. mass (#pi K) (GeV/#it{c}^{2})", {HistType::kTH2F, {{120, 1.5848, 2.1848}, {120, 1.5848, 2.1848}}}); + registry.add("hMassDplusminusPair", "D plus-minus pair candidates;inv. mass (#pi K) (GeV/#it{c}^{2});inv. mass (#pi K) (GeV/#it{c}^{2})", {HistType::kTH2F, {{120, 1.5848, 2.1848}, {120, 1.5848, 2.1848}}}); + registry.add("hMassDplusPair", "D plus pair candidates;inv. mass (#pi K) (GeV/#it{c}^{2});inv. mass (#pi K) (GeV/#it{c}^{2})", {HistType::kTH2F, {{120, 1.5848, 2.1848}, {120, 1.5848, 2.1848}}}); + registry.add("hMassDminusPair", "D minus pair candidates;inv. mass (#pi K) (GeV/#it{c}^{2});inv. mass (#pi K) (GeV/#it{c}^{2})", {HistType::kTH2F, {{120, 1.5848, 2.1848}, {120, 1.5848, 2.1848}}}); registry.add("hDltPhiMcGen", "Azimuthal correlation for D mesons; #Delta#phi", {HistType::kTH1F, {{100, -3.141593, 3.141593}}}); } @@ -67,9 +69,25 @@ struct HfTaskCorrelationDplusDplusReduced { for (const auto& cand1 : localCandidates) { auto mass1 = cand1.m(); + auto sign1 = 1; + if (cand1.pt() < 0) { + sign1 = -1; + } for (auto cand2 = cand1 + 1; cand2 != localCandidates.end(); ++cand2) { auto mass2 = cand2.m(); - registry.fill(HIST("hMassDMesonPair"), mass2, mass1); + auto sign2 = 1; + if (cand2.pt() < 0) { + sign2 = -1; + } + if (sign1 == sign2) { + if (sign1 == 1) { + registry.fill(HIST("hMassDplusPair"), mass2, mass1); + } else { + registry.fill(HIST("hMassDminusPair"), mass2, mass1); + } + } else { + registry.fill(HIST("hMassDplusminusPair"), mass2, mass1); + } } } } @@ -83,9 +101,8 @@ struct HfTaskCorrelationDplusDplusReduced { for (const auto& cand1 : localCandidates) { auto mass1 = cand1.m(); registry.fill(HIST("hMassDplus"), mass1); - if (std::abs(cand1.flagMcMatchRec()) == hf_decay::hf_cand_3prong::DecayChannelMain::DplusToPiKPi) { + if (std::abs(cand1.flagMcMatchRec()) == hf_decay::hf_cand_3prong::DecayChannelMain::DplusToPiKPi) registry.fill(HIST("hMassDplusMatched"), mass1); - } } } PROCESS_SWITCH(HfTaskCorrelationDplusDplusReduced, processLocalDataMcRec, "Process local MC data", false);