Skip to content

Commit 085c329

Browse files
[PWGHF] Adding a flag to perform Prompt and Non-prompt D+-hadron correlations (#10830)
Co-authored-by: ALICE Action Bot <alibuild@cern.ch>
1 parent 53ce330 commit 085c329

File tree

3 files changed

+80
-65
lines changed

3 files changed

+80
-65
lines changed

PWGHF/HFC/DataModel/CorrelationTables.h

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -342,6 +342,7 @@ DECLARE_SOA_COLUMN(PtHadron, ptHadron, float); //! T
342342
DECLARE_SOA_COLUMN(MD, mD, float); //! Invariant mass of D+
343343
DECLARE_SOA_COLUMN(MlScoreBkg, mlScoreBkg, float); //! ML background score for D+ selection
344344
DECLARE_SOA_COLUMN(MlScorePrompt, mlScorePrompt, float); //! ML prompt score for D+ selection
345+
DECLARE_SOA_COLUMN(MlScoreNonPrompt, mlScoreNonPrompt, float); //! ML non-prompt score for D+ selection
345346
DECLARE_SOA_COLUMN(SignalStatus, signalStatus, bool); //! Used in MC-Rec, D+ Signal
346347
DECLARE_SOA_COLUMN(PoolBin, poolBin, int); //! Pool Bin of event defined using zvtx and multiplicity
347348
DECLARE_SOA_COLUMN(TrackDcaXY, trackDcaXY, float); //! DCA xy of the track
@@ -372,13 +373,15 @@ DECLARE_SOA_TABLE(DplusHadronGenInfo, "AOD", "DPLUSHGENINFO", //! Ds-Hadrons pai
372373

373374
DECLARE_SOA_TABLE(DplusHadronMlInfo, "AOD", "DPLUSHMLINFO", //! D+-Hadrons pairs Machine Learning Information
374375
aod::hf_correlation_dplus_hadron::MlScoreBkg,
375-
aod::hf_correlation_dplus_hadron::MlScorePrompt);
376+
aod::hf_correlation_dplus_hadron::MlScorePrompt,
377+
aod::hf_correlation_dplus_hadron::MlScoreNonPrompt);
376378

377379
DECLARE_SOA_TABLE(DplusRecoInfo, "AOD", "DPLUSRECOINFO", //! D+ candidates Reconstructed Information
378380
aod::hf_correlation_dplus_hadron::MD,
379381
aod::hf_correlation_dplus_hadron::PtD,
380382
aod::hf_correlation_dplus_hadron::MlScoreBkg,
381-
aod::hf_correlation_dplus_hadron::MlScorePrompt);
383+
aod::hf_correlation_dplus_hadron::MlScorePrompt,
384+
aod::hf_correlation_dplus_hadron::MlScoreNonPrompt);
382385

383386
DECLARE_SOA_TABLE(DplusGenInfo, "AOD", "DPLUSGENOINFO", //! D+ candidates Generated Information
384387
aod::hf_correlation_dplus_hadron::IsPrompt);

PWGHF/HFC/TableProducer/correlatorDplusHadrons.cxx

Lines changed: 20 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
// or submit itself to any jurisdiction.
1111

1212
/// \file correlatorDplusHadrons.cxx
13+
/// \brief D+-Hadrons correlator task - data-like, MC-reco and MC-Gen analyses
1314
/// \author Shyam Kumar <shyam.kumar@cern.ch>
1415

1516
#include <vector>
@@ -161,6 +162,7 @@ struct HfCorrelatorDplusHadrons {
161162
Produces<aod::TrkRecInfoDplus> entryTrackRecoInfo;
162163
Produces<aod::Dplus> entryDplus;
163164
Produces<aod::Hadron> entryHadron;
165+
static constexpr std::size_t NDaughters{3u};
164166

165167
Configurable<int> selectionFlagDplus{"selectionFlagDplus", 7, "Selection Flag for Dplus"}; // 7 corresponds to topo+PID cuts
166168
Configurable<int> numberEventsMixed{"numberEventsMixed", 5, "Number of events mixed in ME process"};
@@ -182,19 +184,9 @@ struct HfCorrelatorDplusHadrons {
182184
Configurable<std::vector<double>> binsPtHadron{"binsPtHadron", std::vector<double>{0.3, 2., 4., 8., 12., 50.}, "pT bin limits for assoc particle"};
183185
Configurable<std::vector<double>> binsPtEfficiencyD{"binsPtEfficiencyD", std::vector<double>{o2::analysis::hf_cuts_dplus_to_pi_k_pi::vecBinsPt}, "pT bin limits for efficiency"};
184186
Configurable<std::vector<float>> efficiencyD{"efficiencyD", {1., 1., 1., 1., 1., 1.}, "efficiency values for D+ meson"};
185-
ConfigurableAxis binsMultiplicity{"binsMultiplicity", {VARIABLE_WIDTH, 0.0f, 2000.0f, 6000.0f, 100000.0f}, "Mixing bins - multiplicity"};
186-
ConfigurableAxis binsZVtx{"binsZVtx", {VARIABLE_WIDTH, -10.0f, -2.5f, 2.5f, 10.0f}, "Mixing bins - z-vertex"};
187-
ConfigurableAxis binsMultiplicityMc{"binsMultiplicityMc", {VARIABLE_WIDTH, 0.0f, 20.0f, 50.0f, 500.0f}, "Mixing bins - MC multiplicity"}; // In MCGen multiplicity is defined by counting tracks
188-
ConfigurableAxis binsBdtScore{"binsBdtScore", {100, 0., 1.}, "Bdt output scores"};
189-
ConfigurableAxis binsEta{"binsEta", {50, -2., 2.}, "#it{#eta}"};
190-
ConfigurableAxis binsPhi{"binsPhi", {64, -PIHalf, 3. * PIHalf}, "#it{#varphi}"};
191-
ConfigurableAxis binsPoolBin{"binsPoolBin", {9, 0., 9.}, "PoolBin"};
192-
ConfigurableAxis binsMultFT0M{"binsMultFT0M", {600, 0., 6000.}, "Multiplicity as FT0M signal amplitude"};
193-
ConfigurableAxis binsMassD{"binsMassD", {200, 1.7, 2.10}, "inv. mass (#pi^{+}K^{-}#pi^{+}) (GeV/#it{c}^{2})"};
194187

195188
HfHelper hfHelper;
196189
SliceCache cache;
197-
BinningType corrBinning{{binsZVtx, binsMultiplicity}, true};
198190

199191
// Event Mixing for the Data Mode
200192
using SelCollisionsWithDplus = soa::Filtered<soa::Join<aod::Collisions, aod::Mults, aod::EvSels, aod::DmesonSelection>>;
@@ -215,9 +207,16 @@ struct HfCorrelatorDplusHadrons {
215207
Filter dplusFilter = ((o2::aod::hf_track_index::hfflag & static_cast<uint8_t>(1 << aod::hf_cand_3prong::DecayType::DplusToPiKPi)) != static_cast<uint8_t>(0)) && aod::hf_sel_candidate_dplus::isSelDplusToPiKPi >= selectionFlagDplus;
216208
Filter trackFilter = (nabs(aod::track::eta) < etaTrackMax) && (nabs(aod::track::pt) > ptTrackMin) && (nabs(aod::track::dcaXY) < dcaXYTrackMax) && (nabs(aod::track::dcaZ) < dcaZTrackMax);
217209
// Filter particlesFilter = nabs(aod::mcparticle::pdgCode) == 411 || ((aod::mcparticle::flags & (uint8_t)o2::aod::mcparticle::enums::PhysicalPrimary) == (uint8_t)o2::aod::mcparticle::enums::PhysicalPrimary);
218-
219-
Preslice<aod::HfCand3Prong> perCol = aod::hf_cand::collisionId;
220-
210+
ConfigurableAxis binsMultiplicity{"binsMultiplicity", {VARIABLE_WIDTH, 0.0f, 2000.0f, 6000.0f, 100000.0f}, "Mixing bins - multiplicity"};
211+
ConfigurableAxis binsZVtx{"binsZVtx", {VARIABLE_WIDTH, -10.0f, -2.5f, 2.5f, 10.0f}, "Mixing bins - z-vertex"};
212+
ConfigurableAxis binsMultiplicityMc{"binsMultiplicityMc", {VARIABLE_WIDTH, 0.0f, 20.0f, 50.0f, 500.0f}, "Mixing bins - MC multiplicity"}; // In MCGen multiplicity is defined by counting tracks
213+
ConfigurableAxis binsBdtScore{"binsBdtScore", {100, 0., 1.}, "Bdt output scores"};
214+
ConfigurableAxis binsEta{"binsEta", {50, -2., 2.}, "#it{#eta}"};
215+
ConfigurableAxis binsPhi{"binsPhi", {64, -PIHalf, 3. * PIHalf}, "#it{#varphi}"};
216+
ConfigurableAxis binsPoolBin{"binsPoolBin", {9, 0., 9.}, "PoolBin"};
217+
ConfigurableAxis binsMultFT0M{"binsMultFT0M", {600, 0., 6000.}, "Multiplicity as FT0M signal amplitude"};
218+
ConfigurableAxis binsMassD{"binsMassD", {200, 1.7, 2.10}, "inv. mass (#pi^{+}K^{-}#pi^{+}) (GeV/#it{c}^{2})"};
219+
BinningType corrBinning{{binsZVtx, binsMultiplicity}, true};
221220
HistogramRegistry registry{"registry", {}, OutputObjHandlingPolicy::AnalysisObject};
222221

223222
void init(InitContext&)
@@ -344,7 +343,7 @@ struct HfCorrelatorDplusHadrons {
344343
for (unsigned int iclass = 0; iclass < classMl->size(); iclass++) {
345344
outputMl[iclass] = candidate.mlProbDplusToPiKPi()[classMl->at(iclass)];
346345
}
347-
entryDplusCandRecoInfo(hfHelper.invMassDplusToPiKPi(candidate), candidate.pt(), outputMl[0], outputMl[1]); // 0: BkgBDTScore, 1:PromptBDTScore
346+
entryDplusCandRecoInfo(hfHelper.invMassDplusToPiKPi(candidate), candidate.pt(), outputMl[0], outputMl[1], outputMl[2]); // 0: BkgBDTScore, 1:PromptBDTScore, 2: FDScore
348347
entryDplus(candidate.phi(), candidate.eta(), candidate.pt(), hfHelper.invMassDplusToPiKPi(candidate), poolBin, gCollisionId, timeStamp);
349348

350349
// Dplus-Hadron correlation dedicated section
@@ -366,7 +365,7 @@ struct HfCorrelatorDplusHadrons {
366365
track.pt(), poolBin);
367366
entryDplusHadronRecoInfo(hfHelper.invMassDplusToPiKPi(candidate), false);
368367
entryDplusHadronGenInfo(false, false, 0);
369-
entryDplusHadronMlInfo(outputMl[0], outputMl[1]);
368+
entryDplusHadronMlInfo(outputMl[0], outputMl[1], outputMl[2]);
370369
entryTrackRecoInfo(track.dcaXY(), track.dcaZ(), track.tpcNClsCrossedRows());
371370
if (cntDplus == 0) {
372371
entryHadron(track.phi(), track.eta(), track.pt(), poolBin, gCollisionId, timeStamp);
@@ -458,7 +457,7 @@ struct HfCorrelatorDplusHadrons {
458457
outputMl[iclass] = candidate.mlProbDplusToPiKPi()[classMl->at(iclass)];
459458
}
460459
registry.fill(HIST("hMassDplusMcRecSig"), hfHelper.invMassDplusToPiKPi(candidate), candidate.pt(), efficiencyWeightD);
461-
entryDplusCandRecoInfo(hfHelper.invMassDplusToPiKPi(candidate), candidate.pt(), outputMl[0], outputMl[1]);
460+
entryDplusCandRecoInfo(hfHelper.invMassDplusToPiKPi(candidate), candidate.pt(), outputMl[0], outputMl[1], outputMl[2]);
462461
entryDplusCandGenInfo(isDplusPrompt);
463462
} else {
464463
registry.fill(HIST("hPtCandMcRecBkg"), candidate.pt());
@@ -487,7 +486,7 @@ struct HfCorrelatorDplusHadrons {
487486
candidate.pt(),
488487
track.pt(), poolBin);
489488
entryDplusHadronRecoInfo(hfHelper.invMassDplusToPiKPi(candidate), isDplusSignal);
490-
entryDplusHadronMlInfo(outputMl[0], outputMl[1]);
489+
entryDplusHadronMlInfo(outputMl[0], outputMl[1], outputMl[2]);
491490
if (track.has_mcParticle()) {
492491
auto mcParticle = track.template mcParticle_as<aod::McParticles>();
493492
isPhysicalPrimary = mcParticle.isPhysicalPrimary();
@@ -555,12 +554,12 @@ struct HfCorrelatorDplusHadrons {
555554

556555
// prompt and non-prompt division
557556
std::vector<int> listDaughters{};
558-
std::array<int, 3> arrDaughDplusPDG = {+kPiPlus, -kKPlus, kPiPlus};
559-
std::array<int, 3> prongsId;
557+
std::array<int, NDaughters> arrDaughDplusPDG = {+kPiPlus, -kKPlus, kPiPlus};
558+
std::array<int, NDaughters> prongsId;
560559
listDaughters.clear();
561560
RecoDecay::getDaughters(particle1, &listDaughters, arrDaughDplusPDG, 2);
562561
int counterDaughters = 0;
563-
if (listDaughters.size() == 3) {
562+
if (listDaughters.size() == NDaughters) {
564563
for (const auto& dauIdx : listDaughters) {
565564
auto daughI = mcParticles.rawIteratorAt(dauIdx - mcParticles.offset());
566565
counterDaughters += 1;
@@ -695,7 +694,7 @@ struct HfCorrelatorDplusHadrons {
695694
for (unsigned int iclass = 0; iclass < classMl->size(); iclass++) {
696695
outputMl[iclass] = candidate.mlProbDplusToPiKPi()[classMl->at(iclass)];
697696
}
698-
entryDplusHadronMlInfo(outputMl[0], outputMl[1]);
697+
entryDplusHadronMlInfo(outputMl[0], outputMl[1], outputMl[2]);
699698
entryTrackRecoInfo(pAssoc.dcaXY(), pAssoc.dcaZ(), pAssoc.tpcNClsCrossedRows());
700699
}
701700
}

0 commit comments

Comments
 (0)