Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 14 additions & 10 deletions PWGHF/HFC/TableProducer/correlatorLcHadrons.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -696,7 +696,11 @@ struct HfCorrelatorLcHadrons {
}
//}
}
float cent = 100.0; // will be updated later

float cent = 0.;
if (useCentrality) {
cent = collision.centFT0M();
}

// Lc-Hadron correlation dedicated section
// if the candidate is selected as Lc, search for Hadron ad evaluate correlations
Expand Down Expand Up @@ -908,8 +912,8 @@ struct HfCorrelatorLcHadrons {
}
}

int8_t const chargeLc = pdg->GetParticle(particle.pdgCode())->Charge(); // Retrieve charge
int8_t const chargeAssoc = pdg->GetParticle(particleAssoc.pdgCode())->Charge(); // Retrieve charge
auto const chargeLc = static_cast<int8_t>(pdg->GetParticle(particle.pdgCode())->Charge()); // Retrieve charge
auto const chargeAssoc = static_cast<int8_t>(pdg->GetParticle(particleAssoc.pdgCode())->Charge()); // Retrieve charge

int trackOrigin = RecoDecay::getCharmHadronOrigin(mcParticles, particleAssoc, true);
registry.fill(HIST("hPtParticleAssocMcGen"), particleAssoc.pt());
Expand Down Expand Up @@ -1007,7 +1011,7 @@ struct HfCorrelatorLcHadrons {
TracksWithMc const& tracks,
aod::McParticles const& mcParticles)
{
BinningType const corrBinning{{binsZVtx, binsMultiplicityMc}, true};
BinningType const corrBinningMcRec{{binsZVtx, binsMultiplicityMc}, true};
for (const auto& candidate : candidates) {
if (std::abs(HfHelper::yLc(candidate)) > yCandMax || candidate.pt() < ptCandMin || candidate.pt() > ptCandMax) {
continue;
Expand Down Expand Up @@ -1043,11 +1047,11 @@ struct HfCorrelatorLcHadrons {
}
}
auto tracksTuple = std::make_tuple(candidates, tracks);
Pair<SelCollisionsWithLc, CandidatesLcMcRec, TracksWithMc, BinningType> const pairMcRec{corrBinning, numberEventsMixed, -1, collisions, tracksTuple, &cache};
Pair<SelCollisionsWithLc, CandidatesLcMcRec, TracksWithMc, BinningType> const pairMcRec{corrBinningMcRec, numberEventsMixed, -1, collisions, tracksTuple, &cache};

for (const auto& [c1, tracks1, c2, tracks2] : pairMcRec) {
int poolBin = corrBinning.getBin(std::make_tuple(c2.posZ(), c2.multFT0M()));
int const poolBinLc = corrBinning.getBin(std::make_tuple(c1.posZ(), c1.multFT0M()));
int poolBin = corrBinningMcRec.getBin(std::make_tuple(c2.posZ(), c2.multFT0M()));
int const poolBinLc = corrBinningMcRec.getBin(std::make_tuple(c1.posZ(), c1.multFT0M()));
registry.fill(HIST("hMultFT0M"), c1.multFT0M());
registry.fill(HIST("hZvtx"), c1.posZ());
registry.fill(HIST("hTracksPoolBin"), poolBin);
Expand Down Expand Up @@ -1153,9 +1157,9 @@ struct HfCorrelatorLcHadrons {
if (pidTrkApplied && (std::abs(particleAssoc.pdgCode()) != kProton)) {
continue; // proton PID
}
int8_t const chargeLc = pdg->GetParticle(candidate.pdgCode())->Charge(); // Retrieve charge
int8_t const chargeAssoc = pdg->GetParticle(particleAssoc.pdgCode())->Charge(); // Retrieve charge
float cent = 100.0; // will be updated later
auto const chargeLc = static_cast<int8_t>(pdg->GetParticle(candidate.pdgCode())->Charge()); // Retrieve charge
auto const chargeAssoc = static_cast<int8_t>(pdg->GetParticle(particleAssoc.pdgCode())->Charge()); // Retrieve charge
float cent = 100.0; // will be updated later

int trackOrigin = RecoDecay::getCharmHadronOrigin(mcParticles, particleAssoc, true);
bool isLcPrompt = candidate.originMcGen() == RecoDecay::OriginType::Prompt;
Expand Down
73 changes: 51 additions & 22 deletions PWGHF/HFC/Tasks/taskCorrelationLcHadrons.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@
#include <THnSparse.h>
#include <TString.h>

#include <array>
#include <chrono>
#include <cstddef>
#include <cstdint>
Expand Down Expand Up @@ -87,20 +88,37 @@ const TString stringMcGenLcFd = "MC gen, non-prompt #Lambda_c;";

// definition of vectors for standard ptbin and invariant mass configurables
const int nPtBinsCorrelations = 8;
const double pTBinsCorrelations[nPtBinsCorrelations + 1] = {0., 2., 4., 6., 8., 12., 16., 24., 99.};
const auto vecBinsPtCorrelations = std::vector<double>{pTBinsCorrelations, pTBinsCorrelations + nPtBinsCorrelations + 1};
const double signalRegionInnerDefault[nPtBinsCorrelations] = {2.269, 2.269, 2.269, 2.269, 2.269, 2.269, 2.269, 2.269};
const double signalRegionOuterDefault[nPtBinsCorrelations] = {2.309, 2.309, 2.309, 2.309, 2.309, 2.309, 2.309, 2.309};
const double sidebandLeftOuterDefault[nPtBinsCorrelations] = {2.209, 2.209, 2.209, 2.209, 2.209, 2.209, 2.209, 2.209};
const double sidebandLeftInnerDefault[nPtBinsCorrelations] = {2.249, 2.249, 2.249, 2.249, 2.249, 2.249, 2.249, 2.249};
const double sidebandRightInnerDefault[nPtBinsCorrelations] = {2.329, 2.329, 2.329, 2.329, 2.329, 2.329, 2.329, 2.329};
const double sidebandRightOuterDefault[nPtBinsCorrelations] = {2.369, 2.369, 2.369, 2.369, 2.369, 2.369, 2.369, 2.369};
const auto vecSignalRegionInner = std::vector<double>{signalRegionInnerDefault, signalRegionInnerDefault + nPtBinsCorrelations};
const auto vecSignalRegionOuter = std::vector<double>{signalRegionOuterDefault, signalRegionOuterDefault + nPtBinsCorrelations};
const auto vecSidebandLeftInner = std::vector<double>{sidebandLeftInnerDefault, sidebandLeftInnerDefault + nPtBinsCorrelations};
const auto vecSidebandLeftOuter = std::vector<double>{sidebandLeftOuterDefault, sidebandLeftOuterDefault + nPtBinsCorrelations};
const auto vecSidebandRightInner = std::vector<double>{sidebandRightInnerDefault, sidebandRightInnerDefault + nPtBinsCorrelations};
const auto vecSidebandRightOuter = std::vector<double>{sidebandRightOuterDefault, sidebandRightOuterDefault + nPtBinsCorrelations};

const std::array<double, nPtBinsCorrelations + 1> pTBinsCorrelations = {
0., 2., 4., 6., 8., 12., 16., 24., 99.};
const auto vecBinsPtCorrelations =
std::vector<double>{pTBinsCorrelations.begin(), pTBinsCorrelations.end()};

const std::array<double, nPtBinsCorrelations> signalRegionInnerDefault = {
2.269, 2.269, 2.269, 2.269, 2.269, 2.269, 2.269, 2.269};
const std::array<double, nPtBinsCorrelations> signalRegionOuterDefault = {
2.309, 2.309, 2.309, 2.309, 2.309, 2.309, 2.309, 2.309};
const std::array<double, nPtBinsCorrelations> sidebandLeftOuterDefault = {
2.209, 2.209, 2.209, 2.209, 2.209, 2.209, 2.209, 2.209};
const std::array<double, nPtBinsCorrelations> sidebandLeftInnerDefault = {
2.249, 2.249, 2.249, 2.249, 2.249, 2.249, 2.249, 2.249};
const std::array<double, nPtBinsCorrelations> sidebandRightInnerDefault = {
2.329, 2.329, 2.329, 2.329, 2.329, 2.329, 2.329, 2.329};
const std::array<double, nPtBinsCorrelations> sidebandRightOuterDefault = {
2.369, 2.369, 2.369, 2.369, 2.369, 2.369, 2.369, 2.369};

const auto vecSignalRegionInner =
std::vector<double>{signalRegionInnerDefault.begin(), signalRegionInnerDefault.end()};
const auto vecSignalRegionOuter =
std::vector<double>{signalRegionOuterDefault.begin(), signalRegionOuterDefault.end()};
const auto vecSidebandLeftInner =
std::vector<double>{sidebandLeftInnerDefault.begin(), sidebandLeftInnerDefault.end()};
const auto vecSidebandLeftOuter =
std::vector<double>{sidebandLeftOuterDefault.begin(), sidebandLeftOuterDefault.end()};
const auto vecSidebandRightInner =
std::vector<double>{sidebandRightInnerDefault.begin(), sidebandRightInnerDefault.end()};
const auto vecSidebandRightOuter =
std::vector<double>{sidebandRightOuterDefault.begin(), sidebandRightOuterDefault.end()};

/// Lc-Hadron correlation pair filling task, from pair tables - for real data and data-like analysis (i.e. reco-level w/o matching request via Mc truth)
struct HfTaskCorrelationLcHadrons {
Expand Down Expand Up @@ -268,7 +286,7 @@ struct HfTaskCorrelationLcHadrons {
registry.add("hDeltaPhiPtIntSidebandsMcRec", stringLcHadron + stringSideband + stringDeltaPhi + "entries", {HistType::kTH1D, {axisDeltaPhi}});
registry.add("hCorrel2DPtIntSidebandsMcRec", stringLcHadron + stringSideband + stringDeltaPhi + stringDeltaEta + "entries", {HistType::kTH2F, {{axisDeltaPhi}, {axisDeltaEta}}});
registry.add("hCorrel2DVsPtSidebandsMcRec", stringLcHadron + stringSideband + stringDeltaPhi + stringDeltaEta + stringPtLc + stringPtHadron + "entries", {HistType::kTHnSparseD, {{axisDeltaPhi}, {axisDeltaEta}, {axisPtCorr}, {axisPtHadron}, {axisPoolBin}}});
registry.add("hCorrel2DVsPtPhysicalPrimaryMcRec", stringLcHadron + "(only true primary particles)" + stringSignal, {HistType::kTHnSparseD, {{axisDeltaPhi}, {axisDeltaEta}, {axisPtLc}, {axisPtHadron}, {axisLcPrompt}, {axisPoolBin}}});
registry.add("hCorrel2DVsPtPhysicalPrimaryMcRec", stringLcHadron + "(only true primary particles)" + stringSignal, {HistType::kTHnSparseD, {{axisDeltaPhi}, {axisDeltaEta}, {axisPtLc}, {axisPtHadron}, {axisLcPrompt}, {axisPoolBin}, {axisCentFT0M}}});
registry.add("hCorrel2DVsPtTrueLcPhysicalPrimaryMcRec", stringLcHadron + "(only true Lc, and true primary particles)" + stringSignal, {HistType::kTHnSparseD, {{axisDeltaPhi}, {axisDeltaEta}, {axisPtLc}, {axisPtHadron}, {axisLcPrompt}, {axisPoolBin}}});
registry.add("hDeltaEtaPtIntSidebandLeftMcRec", stringLcHadron + "Left" + stringSideband + stringDeltaPhi + stringDeltaEta + stringPtLc + stringPtHadron + "entries", {HistType::kTH1D, {axisDeltaEta}});
registry.add("hDeltaPhiPtIntSidebandLeftMcRec", stringLcHadron + "Left" + stringSideband + stringDeltaPhi + stringDeltaEta + stringPtLc + stringPtHadron + "entries", {HistType::kTH1D, {axisDeltaPhi}});
Expand All @@ -282,8 +300,8 @@ struct HfTaskCorrelationLcHadrons {
registry.add("hCorrel2DVsPtSignalRegionNonPromptLcNonPromptHadronMcRec", stringLcHadron + " signal region PromptLc - NonPrompt Track MC reco", {HistType::kTHnSparseD, {{axisDeltaPhi}, {axisDeltaEta}, {axisPtLc}, {axisPtHadron}, {axisPoolBin}}});
registry.add("hCorrel2DVsPtSignalRegionTruePromptLcPromptHadronMcRec", stringLcHadron + "signal region and true PromptLc - Prompt Track MC reco", {HistType::kTHnSparseD, {{axisDeltaPhi}, {axisDeltaEta}, {axisPtLc}, {axisPtHadron}, {axisPoolBin}}});
registry.add("hCorrel2DVsPtSignalRegionTrueNonPromptLcNonPromptHadronMcRec", stringLcHadron + " signal region and true PromptLc - NonPrompt Track MC reco", {HistType::kTHnSparseD, {{axisDeltaPhi}, {axisDeltaEta}, {axisPtLc}, {axisPtHadron}, {axisPoolBin}}});
registry.add("hCorrel2DVsPtSignalMcRec", stringLcHadron + stringSignal + stringDeltaPhi + stringDeltaEta + stringPtLc + stringPtHadron + "entries", {HistType::kTHnSparseD, {{axisDeltaPhi}, {axisDeltaEta}, {axisPtCorr}, {axisPtHadron}, {axisPoolBin}}});
registry.add("hCorrel2DVsPtSignalRegionMcRec", stringLcHadron + stringSignal + stringDeltaPhi + stringDeltaEta + stringPtLc + stringPtHadron + "entries", {HistType::kTHnSparseD, {{axisDeltaPhi}, {axisDeltaEta}, {axisPtCorr}, {axisPtHadron}, {axisLcPrompt}, {axisPoolBin}}});
registry.add("hCorrel2DVsPtSignalMcRec", stringLcHadron + stringSignal + stringDeltaPhi + stringDeltaEta + stringPtLc + stringPtHadron + "entries", {HistType::kTHnSparseD, {{axisDeltaPhi}, {axisDeltaEta}, {axisPtCorr}, {axisPtHadron}, {axisPoolBin}, {axisCentFT0M}}});
registry.add("hCorrel2DVsPtSignalRegionMcRec", stringLcHadron + stringSignal + stringDeltaPhi + stringDeltaEta + stringPtLc + stringPtHadron + "entries", {HistType::kTHnSparseD, {{axisDeltaPhi}, {axisDeltaEta}, {axisPtCorr}, {axisPtHadron}, {axisLcPrompt}, {axisPoolBin}, {axisCentFT0M}}});
registry.add("hCorrel2DVsPtBkgMcRec", stringLcHadron + stringSignal + stringDeltaPhi + stringDeltaEta + stringPtLc + stringPtHadron + "entries", {HistType::kTHnSparseD, {{axisDeltaPhi}, {axisDeltaEta}, {axisPtCorr}, {axisPtHadron}, {axisPoolBin}}});

registry.get<THnSparse>(HIST("hCorrel2DVsPtSidebandLeftMcRec"))->Sumw2();
Expand Down Expand Up @@ -405,7 +423,13 @@ struct HfTaskCorrelationLcHadrons {

if (activateQA) {
const int regionLimits = 6;
std::string labels[regionLimits] = {"SigReg Left", "SigReg Right", "Left SB Low", "Left SB Up", "Right SB Low", "Right SB Up"};
const std::array<std::string, regionLimits> labels = {
"SigReg Left",
"SigReg Right",
"Left SB Low",
"Left SB Up",
"Right SB Low",
"Right SB Up"};
static const AxisSpec axisSidebandLimits = {regionLimits, 0.5, 6.5, ""};
auto hSigSidebandLimits = registry.add<TH2>("Inputs/hSigSidebandLimits", "Signal and Sideband Limits;;#it{p}_{T} (GeV/#it{c})", {HistType::kTH2F, {axisSidebandLimits, {(std::vector<double>)binsPtCorrelations, "#it{p}_{T} (GeV/#it{c})"}}});
for (int iLim = 0; iLim < regionLimits; iLim++) {
Expand Down Expand Up @@ -521,7 +545,7 @@ struct HfTaskCorrelationLcHadrons {
registry.fill(HIST("hCorrel2DVsPtSignMass"), deltaPhi, deltaEta, ptLc, ptHadron, massLc, signPair, poolBin, efficiencyWeight);
}
// check if correlation entry belongs to signal region, sidebands or is outside both, and fill correlation plots
if (storeMass) {
if (storeMass != 0) {
registry.fill(HIST("hCorrel2DVsPtGlobalRegion"), deltaPhi, deltaEta, ptLc, ptHadron, poolBin, massLc, efficiencyWeight);
continue;
}
Expand Down Expand Up @@ -636,6 +660,11 @@ struct HfTaskCorrelationLcHadrons {
bool const isAutoCorrelated = pairEntry.isAutoCorrelated();
int signPair = 0;

float cent = 0.;
if (useCentrality) {
cent = pairEntry.cent();
}

// reject entries outside pT ranges of interest
if (ptLc < binsPtEfficiencyLc->front() || ptLc > binsPtEfficiencyLc->back()) {
continue;
Expand Down Expand Up @@ -696,7 +725,7 @@ struct HfTaskCorrelationLcHadrons {
if (fillSign) {
registry.fill(HIST("hCorrel2DVsPtSignSignalMcRec"), deltaPhi, deltaEta, ptLc, ptHadron, signPair, poolBin, efficiencyWeight);
} else {
registry.fill(HIST("hCorrel2DVsPtSignalMcRec"), deltaPhi, deltaEta, ptLc, ptHadron, poolBin, efficiencyWeight);
registry.fill(HIST("hCorrel2DVsPtSignalMcRec"), deltaPhi, deltaEta, ptLc, ptHadron, poolBin, cent, efficiencyWeight);
}
} else {
if (fillSign) {
Expand All @@ -713,13 +742,13 @@ struct HfTaskCorrelationLcHadrons {
if (fillSign) {
registry.fill(HIST("hCorrel2DVsPtSignSignalRegionMcRec"), deltaPhi, deltaEta, ptLc, ptHadron, signPair, poolBin, efficiencyWeight);
} else {
registry.fill(HIST("hCorrel2DVsPtSignalRegionMcRec"), deltaPhi, deltaEta, ptLc, ptHadron, statusLcPrompt, poolBin, efficiencyWeight);
registry.fill(HIST("hCorrel2DVsPtSignalRegionMcRec"), deltaPhi, deltaEta, ptLc, ptHadron, statusLcPrompt, poolBin, cent, efficiencyWeight);
}
registry.fill(HIST("hCorrel2DPtIntSignalRegionMcRec"), deltaPhi, deltaEta, efficiencyWeight);
registry.fill(HIST("hDeltaEtaPtIntSignalRegionMcRec"), deltaEta, efficiencyWeight);
registry.fill(HIST("hDeltaPhiPtIntSignalRegionMcRec"), deltaPhi, efficiencyWeight);
if (isPhysicalPrimary) {
registry.fill(HIST("hCorrel2DVsPtPhysicalPrimaryMcRec"), deltaPhi, deltaEta, ptLc, ptHadron, statusLcPrompt, poolBin, efficiencyWeight);
registry.fill(HIST("hCorrel2DVsPtPhysicalPrimaryMcRec"), deltaPhi, deltaEta, ptLc, ptHadron, statusLcPrompt, poolBin, cent, efficiencyWeight);
if (pairEntry.signalStatus() != 0) {
registry.fill(HIST("hCorrel2DVsPtTrueLcPhysicalPrimaryMcRec"), deltaPhi, deltaEta, ptLc, ptHadron, statusLcPrompt, poolBin, efficiencyWeight);
}
Expand Down
Loading