Skip to content

Commit c9807a5

Browse files
fgrosaalibuild
andauthored
PWGDQ: add single-track variables for D daughters in the JPsi-D reduced data model (#8203)
Co-authored-by: ALICE Action Bot <alibuild@cern.ch>
1 parent 1bc5ff9 commit c9807a5

3 files changed

Lines changed: 119 additions & 47 deletions

File tree

PWGDQ/DataModel/ReducedInfoTables.h

Lines changed: 91 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@
2525
#include "Common/DataModel/PIDResponse.h"
2626
#include "MathUtils/Utils.h"
2727

28+
#include "PWGHF/Utils/utilsPid.h"
29+
2830
namespace o2::aod
2931
{
3032

@@ -919,33 +921,62 @@ DECLARE_SOA_TABLE(RedJpDmColls, "AOD", "REDJPDMCOLL", //!
919921

920922
namespace jpsidmescorr
921923
{
922-
DECLARE_SOA_INDEX_COLUMN(RedJpDmColl, redJpDmColl); //!
923-
DECLARE_SOA_COLUMN(MassD0, massD0, float); //!
924-
DECLARE_SOA_COLUMN(MassD0bar, massD0bar, float); //!
925-
DECLARE_SOA_COLUMN(Px, px, float); //!
926-
DECLARE_SOA_COLUMN(Py, py, float); //!
927-
DECLARE_SOA_COLUMN(Pz, pz, float); //!
928-
DECLARE_SOA_COLUMN(DecVtxX, decVtxX, float); //!
929-
DECLARE_SOA_COLUMN(DecVtxY, decVtxY, float); //!
930-
DECLARE_SOA_COLUMN(DecVtxZ, decVtxZ, float); //!
931-
DECLARE_SOA_COLUMN(BdtBkgMassHypo0, bdtBkgMassHypo0, float); //!
932-
DECLARE_SOA_COLUMN(BdtPromptMassHypo0, bdtPromptMassHypo0, float); //!
933-
DECLARE_SOA_COLUMN(BdtNonpromptMassHypo0, bdtNonpromptMassHypo0, float); //!
934-
DECLARE_SOA_COLUMN(BdtBkg, bdtBkg, float); //!
935-
DECLARE_SOA_COLUMN(BdtPrompt, bdtPrompt, float); //!
936-
DECLARE_SOA_COLUMN(BdtNonprompt, bdtNonprompt, float); //!
937-
DECLARE_SOA_COLUMN(BdtBkgMassHypo1, bdtBkgMassHypo1, float); //!
938-
DECLARE_SOA_COLUMN(BdtPromptMassHypo1, bdtPromptMassHypo1, float); //!
939-
DECLARE_SOA_COLUMN(BdtNonpromptMassHypo1, bdtNonpromptMassHypo1, float); //!
940-
DECLARE_SOA_COLUMN(NumColls, numColls, uint64_t); //!
941-
DECLARE_SOA_COLUMN(PtD0, ptD0, float); //!
942-
DECLARE_SOA_COLUMN(PtJpsi, ptJpsi, float); //!
943-
DECLARE_SOA_COLUMN(RapD0, rapD0, float); //!
944-
DECLARE_SOA_COLUMN(RapJpsi, rapJpsi, float); //!
945-
DECLARE_SOA_COLUMN(PhiD0, phiD0, float); //!
946-
DECLARE_SOA_COLUMN(PhiJpsi, phiJpsi, float); //!
947-
DECLARE_SOA_COLUMN(DeltaY, deltaY, float); //!
948-
DECLARE_SOA_COLUMN(DeltaPhi, deltaPhi, float); //!
924+
DECLARE_SOA_INDEX_COLUMN(RedJpDmColl, redJpDmColl); //!
925+
DECLARE_SOA_COLUMN(MassDmes, massDmes, float); //!
926+
DECLARE_SOA_COLUMN(MassD0, massD0, float); //!
927+
DECLARE_SOA_COLUMN(MassD0bar, massD0bar, float); //!
928+
DECLARE_SOA_COLUMN(Px, px, float); //!
929+
DECLARE_SOA_COLUMN(Py, py, float); //!
930+
DECLARE_SOA_COLUMN(Pz, pz, float); //!
931+
DECLARE_SOA_COLUMN(DecVtxX, decVtxX, float); //!
932+
DECLARE_SOA_COLUMN(DecVtxY, decVtxY, float); //!
933+
DECLARE_SOA_COLUMN(DecVtxZ, decVtxZ, float); //!
934+
DECLARE_SOA_COLUMN(BdtBkgMassHypo0, bdtBkgMassHypo0, float); //!
935+
DECLARE_SOA_COLUMN(BdtPromptMassHypo0, bdtPromptMassHypo0, float); //!
936+
DECLARE_SOA_COLUMN(BdtNonpromptMassHypo0, bdtNonpromptMassHypo0, float); //!
937+
DECLARE_SOA_COLUMN(BdtBkg, bdtBkg, float); //!
938+
DECLARE_SOA_COLUMN(BdtPrompt, bdtPrompt, float); //!
939+
DECLARE_SOA_COLUMN(BdtNonprompt, bdtNonprompt, float); //!
940+
DECLARE_SOA_COLUMN(BdtBkgMassHypo1, bdtBkgMassHypo1, float); //!
941+
DECLARE_SOA_COLUMN(BdtPromptMassHypo1, bdtPromptMassHypo1, float); //!
942+
DECLARE_SOA_COLUMN(BdtNonpromptMassHypo1, bdtNonpromptMassHypo1, float); //!
943+
DECLARE_SOA_COLUMN(NumColls, numColls, uint64_t); //!
944+
DECLARE_SOA_COLUMN(PtDmes, ptDmes, float); //!
945+
DECLARE_SOA_COLUMN(PtJpsi, ptJpsi, float); //!
946+
DECLARE_SOA_COLUMN(RapDmes, rapDmes, float); //!
947+
DECLARE_SOA_COLUMN(RapJpsi, rapJpsi, float); //!
948+
DECLARE_SOA_COLUMN(PhiDmes, phiDmes, float); //!
949+
DECLARE_SOA_COLUMN(PhiJpsi, phiJpsi, float); //!
950+
DECLARE_SOA_COLUMN(DeltaY, deltaY, float); //!
951+
DECLARE_SOA_COLUMN(DeltaPhi, deltaPhi, float); //!
952+
DECLARE_SOA_COLUMN(NumItsClsDmesProng0, numItsClsDmesProng0, int); //!
953+
DECLARE_SOA_COLUMN(NumItsClsDmesProng1, numItsClsDmesProng1, int); //!
954+
DECLARE_SOA_COLUMN(NumTpcCrossedRowsDmesProng0, numTpcCrossedRowsDmesProng0, int); //!
955+
DECLARE_SOA_COLUMN(NumTpcCrossedRowsDmesProng1, numTpcCrossedRowsDmesProng1, int); //!
956+
DECLARE_SOA_COLUMN(EtaDmesProng0, etaDmesProng0, float); //!
957+
DECLARE_SOA_COLUMN(EtaDmesProng1, etaDmesProng1, float); //!
958+
DECLARE_SOA_COLUMN(PtDmesProng0, ptDmesProng0, float); //!
959+
DECLARE_SOA_COLUMN(PtDmesProng1, ptDmesProng1, float); //!
960+
DECLARE_SOA_COLUMN(MinNumItsClsDmesProng, minNumItsClsDmesProng, int); //!
961+
DECLARE_SOA_COLUMN(MinNumTpcCrossedRowsDmesProng, minNumTpcCrossedRowsDmesProng, int); //!
962+
DECLARE_SOA_COLUMN(MinAbsEtaDmesProng, minAbsEtaDmesProng, float); //!
963+
DECLARE_SOA_COLUMN(MinPtDmesProng, minPtDmesProng, float); //!
964+
DECLARE_SOA_COLUMN(NumSigmaTpcPiProng0, numSigmaTpcPiProng0, float); //!
965+
DECLARE_SOA_COLUMN(NumSigmaTpcPiProng1, numSigmaTpcPiProng1, float); //!
966+
DECLARE_SOA_COLUMN(NumSigmaTofPiProng0, numSigmaTofPiProng0, float); //!
967+
DECLARE_SOA_COLUMN(NumSigmaTofPiProng1, numSigmaTofPiProng1, float); //!
968+
DECLARE_SOA_COLUMN(NumSigmaTpcKaProng0, numSigmaTpcKaProng0, float); //!
969+
DECLARE_SOA_COLUMN(NumSigmaTpcKaProng1, numSigmaTpcKaProng1, float); //!
970+
DECLARE_SOA_COLUMN(NumSigmaTofKaProng0, numSigmaTofKaProng0, float); //!
971+
DECLARE_SOA_COLUMN(NumSigmaTofKaProng1, numSigmaTofKaProng1, float); //!
972+
DECLARE_SOA_DYNAMIC_COLUMN(NumSigmaTpcTofPiProng0, numSigmaTpcTofPiProng0, //!
973+
[](float tpcNSigmaPi0, float tofNSigmaPi0) -> float { return pid_tpc_tof_utils::combineNSigma<false /*tiny*/>(tpcNSigmaPi0, tofNSigmaPi0); });
974+
DECLARE_SOA_DYNAMIC_COLUMN(NumSigmaTpcTofPiProng1, numSigmaTpcTofPiProng1, //!
975+
[](float tpcNSigmaPi1, float tofNSigmaPi1) -> float { return pid_tpc_tof_utils::combineNSigma<false /*tiny*/>(tpcNSigmaPi1, tofNSigmaPi1); });
976+
DECLARE_SOA_DYNAMIC_COLUMN(NumSigmaTpcTofKaProng0, numSigmaTpcTofKaProng0, //!
977+
[](float tpcNSigmaKa0, float tofNSigmaKa0) -> float { return pid_tpc_tof_utils::combineNSigma<false /*tiny*/>(tpcNSigmaKa0, tofNSigmaKa0); });
978+
DECLARE_SOA_DYNAMIC_COLUMN(NumSigmaTpcTofKaProng1, numSigmaTpcTofKaProng1, //!
979+
[](float tpcNSigmaKa1, float tofNSigmaKa1) -> float { return pid_tpc_tof_utils::combineNSigma<false /*tiny*/>(tpcNSigmaKa1, tofNSigmaKa1); });
949980
} // namespace jpsidmescorr
950981

951982
DECLARE_SOA_TABLE(RedJpDmDileptons, "AOD", "REDJPDMDILEPTON", //!
@@ -976,6 +1007,30 @@ DECLARE_SOA_TABLE(RedJpDmDmesons, "AOD", "REDJPDMDMESON", //!
9761007
reducedpair::Sign,
9771008
reducedpair::McDecision);
9781009

1010+
DECLARE_SOA_TABLE(RedJpDmDmDau0s, "AOD", "REDJPDMDMDAU0", //!
1011+
jpsidmescorr::PtDmesProng0,
1012+
jpsidmescorr::EtaDmesProng0,
1013+
jpsidmescorr::NumItsClsDmesProng0,
1014+
jpsidmescorr::NumTpcCrossedRowsDmesProng0,
1015+
jpsidmescorr::NumSigmaTpcPiProng0,
1016+
jpsidmescorr::NumSigmaTofPiProng0,
1017+
jpsidmescorr::NumSigmaTpcKaProng0,
1018+
jpsidmescorr::NumSigmaTofKaProng0,
1019+
jpsidmescorr::NumSigmaTpcTofPiProng0<jpsidmescorr::NumSigmaTpcPiProng0, jpsidmescorr::NumSigmaTofPiProng0>,
1020+
jpsidmescorr::NumSigmaTpcTofKaProng0<jpsidmescorr::NumSigmaTpcKaProng0, jpsidmescorr::NumSigmaTofKaProng0>);
1021+
1022+
DECLARE_SOA_TABLE(RedJpDmDmDau1s, "AOD", "REDJPDMDMDAU1", //!
1023+
jpsidmescorr::PtDmesProng1,
1024+
jpsidmescorr::EtaDmesProng1,
1025+
jpsidmescorr::NumItsClsDmesProng1,
1026+
jpsidmescorr::NumTpcCrossedRowsDmesProng1,
1027+
jpsidmescorr::NumSigmaTpcPiProng1,
1028+
jpsidmescorr::NumSigmaTofPiProng1,
1029+
jpsidmescorr::NumSigmaTpcKaProng1,
1030+
jpsidmescorr::NumSigmaTofKaProng1,
1031+
jpsidmescorr::NumSigmaTpcTofPiProng1<jpsidmescorr::NumSigmaTpcPiProng1, jpsidmescorr::NumSigmaTofPiProng1>,
1032+
jpsidmescorr::NumSigmaTpcTofKaProng1<jpsidmescorr::NumSigmaTpcKaProng1, jpsidmescorr::NumSigmaTofKaProng1>);
1033+
9791034
DECLARE_SOA_TABLE(RedJpDmD0Masss, "AOD", "REDJPDMD0MASS", //!
9801035
jpsidmescorr::MassD0,
9811036
jpsidmescorr::MassD0bar);
@@ -990,18 +1045,22 @@ DECLARE_SOA_TABLE(RedJpDmDmesBdts, "AOD", "REDJPDMDMESBDT", //!
9901045

9911046
DECLARE_SOA_TABLE(RedDleptDmesAll, "AOD", "RTDILPTDMESALL", //!
9921047
reducedpair::Mass,
993-
jpsidmescorr::MassD0,
1048+
jpsidmescorr::MassDmes,
9941049
jpsidmescorr::PtJpsi,
995-
jpsidmescorr::PtD0,
1050+
jpsidmescorr::PtDmes,
9961051
jpsidmescorr::RapJpsi,
997-
jpsidmescorr::RapD0,
1052+
jpsidmescorr::RapDmes,
9981053
jpsidmescorr::PhiJpsi,
999-
jpsidmescorr::PhiD0,
1054+
jpsidmescorr::PhiDmes,
10001055
jpsidmescorr::DeltaY,
10011056
jpsidmescorr::DeltaPhi,
10021057
jpsidmescorr::BdtBkg,
10031058
jpsidmescorr::BdtPrompt,
1004-
jpsidmescorr::BdtNonprompt);
1059+
jpsidmescorr::BdtNonprompt,
1060+
jpsidmescorr::MinPtDmesProng,
1061+
jpsidmescorr::MinAbsEtaDmesProng,
1062+
jpsidmescorr::MinNumItsClsDmesProng,
1063+
jpsidmescorr::MinNumTpcCrossedRowsDmesProng);
10051064

10061065
namespace muondca
10071066
{

PWGDQ/TableProducer/tableMakerJpsiHf.cxx

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -75,8 +75,9 @@ struct CandidateDilepton {
7575

7676
// Declarations of various short names
7777
using MyEvents = soa::Join<aod::Collisions, aod::EvSels>;
78-
using MyD0CandidatesSelected = soa::Join<aod::HfCand2Prong, aod::HfSelD0>;
79-
using MyD0CandidatesSelectedWithBdt = soa::Join<aod::HfCand2Prong, aod::HfSelD0, aod::HfMlD0>;
78+
using MyD0CandidatesSelected = soa::Join<aod::HfCand2ProngWPid, aod::HfSelD0>;
79+
using MyD0CandidatesSelectedWithBdt = soa::Join<aod::HfCand2ProngWPid, aod::HfSelD0, aod::HfMlD0>;
80+
using TracksWithExtra = soa::Join<aod::Tracks, aod::TracksExtra>;
8081

8182
using MyBarrelTracksSelectedWithColl = soa::Join<aod::ReducedTracks, aod::ReducedTracksBarrel, aod::ReducedTracksBarrelPID, aod::ReducedTracksBarrelInfo>;
8283
using MyMuonTracksSelectedWithColl = soa::Join<aod::ReducedMuons, aod::ReducedMuonsExtra, aod::ReducedMuonsInfo>;
@@ -91,6 +92,8 @@ struct tableMakerJpsiHf {
9192
// Produce derived tables
9293
Produces<RedJpDmColls> redCollisions;
9394
Produces<RedJpDmDmesons> redDmesons;
95+
Produces<RedJpDmDmDau0s> redDmesDau0;
96+
Produces<RedJpDmDmDau1s> redDmesDau1;
9497
Produces<RedJpDmDmesBdts> redDmesBdts;
9598
Produces<RedJpDmD0Masss> redD0Masses;
9699
Produces<RedJpDmDileptons> redDileptons;
@@ -244,7 +247,7 @@ struct tableMakerJpsiHf {
244247
// Template function to run pair - hadron combinations
245248
// TODO: generalise to all charm-hadron species
246249
template <bool withDca, bool withBdt, int TPairType, uint32_t TTrackFillMap /* gkMuonFillMapWithColl or gkTrackFillMapWithColl*/, typename TDqTrack, typename THfTrack>
247-
void runDileptonDmeson(TDqTrack const& leptons, THfTrack const& dmesons, MyEvents::iterator const& collision)
250+
void runDileptonDmeson(TDqTrack const& leptons, THfTrack const& dmesons, MyEvents::iterator const& collision, TracksWithExtra const&)
248251
{
249252
VarManager::ResetValues(0, VarManager::kNVars, fValuesDileptonCharmHadron);
250253

@@ -345,6 +348,11 @@ struct tableMakerJpsiHf {
345348
}
346349
if (!isDmesonFilled) {
347350
redDmesons(indexRed, dmeson.px(), dmeson.py(), dmeson.pz(), dmeson.xSecondaryVertex(), dmeson.ySecondaryVertex(), dmeson.zSecondaryVertex(), 0, 0);
351+
auto trackProng0 = dmeson.template prong0_as<TracksWithExtra>();
352+
auto trackProng1 = dmeson.template prong1_as<TracksWithExtra>();
353+
// one table for each daughter with single track variables
354+
redDmesDau0(trackProng0.pt(), trackProng0.eta(), trackProng0.itsNCls(), trackProng0.tpcNClsCrossedRows(), dmeson.nSigTpcPi0(), dmeson.nSigTofPi0(), dmeson.nSigTpcKa0(), dmeson.nSigTofKa0());
355+
redDmesDau1(trackProng1.pt(), trackProng1.eta(), trackProng1.itsNCls(), trackProng1.tpcNClsCrossedRows(), dmeson.nSigTpcPi1(), dmeson.nSigTofPi1(), dmeson.nSigTpcKa1(), dmeson.nSigTofKa1());
348356
filledDmesonIds.push_back(dmesonIdx);
349357
}
350358
std::array<float, 6> scores = {999., -999., -999., 999., -999., -999.}; // D0 + D0bar
@@ -385,54 +393,54 @@ struct tableMakerJpsiHf {
385393
}
386394

387395
// process J/psi(->mumu) - D0
388-
void processJspiToMuMuD0(MyEvents const& collisions, MyMuonTracksSelectedWithColl const& muonCandidates, soa::Filtered<MyD0CandidatesSelected> const& selectedD0Candidates)
396+
void processJspiToMuMuD0(MyEvents const& collisions, MyMuonTracksSelectedWithColl const& muonCandidates, soa::Filtered<MyD0CandidatesSelected> const& selectedD0Candidates, TracksWithExtra const& barrelTracks)
389397
{
390398
if (storeTableForNorm) {
391399
redCollCounter(collisions.size());
392400
}
393401
for (auto const& collision : collisions) {
394402
auto groupedDmesonCandidates = selectedD0Candidates.sliceBy(perCollisionDmeson, collision.globalIndex());
395403
auto groupedLeptonCandidates = muonCandidates.sliceBy(perCollisionMuons, collision.globalIndex());
396-
runDileptonDmeson<false, false, VarManager::kDecayToMuMu, gkMuonFillMapWithColl>(groupedLeptonCandidates, groupedDmesonCandidates, collision);
404+
runDileptonDmeson<false, false, VarManager::kDecayToMuMu, gkMuonFillMapWithColl>(groupedLeptonCandidates, groupedDmesonCandidates, collision, barrelTracks);
397405
}
398406
}
399407

400408
// process J/psi(->ee) - D0
401-
void processJspiToEED0(MyEvents const& collisions, MyBarrelTracksSelectedWithColl const& electronCandidates, soa::Filtered<MyD0CandidatesSelected> const& selectedD0Candidates)
409+
void processJspiToEED0(MyEvents const& collisions, MyBarrelTracksSelectedWithColl const& electronCandidates, soa::Filtered<MyD0CandidatesSelected> const& selectedD0Candidates, TracksWithExtra const& barrelTracks)
402410
{
403411
if (storeTableForNorm) {
404412
redCollCounter(collisions.size());
405413
}
406414
for (auto const& collision : collisions) {
407415
auto groupedDmesonCandidates = selectedD0Candidates.sliceBy(perCollisionDmeson, collision.globalIndex());
408416
auto groupedLeptonCandidates = electronCandidates.sliceBy(perCollisionElectrons, collision.globalIndex());
409-
runDileptonDmeson<false, false, VarManager::kDecayToEE, gkTrackFillMapWithColl>(groupedLeptonCandidates, groupedDmesonCandidates, collision);
417+
runDileptonDmeson<false, false, VarManager::kDecayToEE, gkTrackFillMapWithColl>(groupedLeptonCandidates, groupedDmesonCandidates, collision, barrelTracks);
410418
}
411419
}
412420

413421
// process J/psi(->mumu) - D0 adding the BDT output scores to the D0 table
414-
void processJspiToMuMuD0WithBdt(MyEvents const& collisions, MyMuonTracksSelectedWithColl const& muonCandidates, soa::Filtered<MyD0CandidatesSelectedWithBdt> const& selectedD0CandidatesWithBdt)
422+
void processJspiToMuMuD0WithBdt(MyEvents const& collisions, MyMuonTracksSelectedWithColl const& muonCandidates, soa::Filtered<MyD0CandidatesSelectedWithBdt> const& selectedD0CandidatesWithBdt, TracksWithExtra const& barrelTracks)
415423
{
416424
if (storeTableForNorm) {
417425
redCollCounter(collisions.size());
418426
}
419427
for (auto const& collision : collisions) {
420428
auto groupedDmesonCandidates = selectedD0CandidatesWithBdt.sliceBy(perCollisionDmesonWithBdt, collision.globalIndex());
421429
auto groupedLeptonCandidates = muonCandidates.sliceBy(perCollisionMuons, collision.globalIndex());
422-
runDileptonDmeson<false, true, VarManager::kDecayToMuMu, gkMuonFillMapWithColl>(groupedLeptonCandidates, groupedDmesonCandidates, collision);
430+
runDileptonDmeson<false, true, VarManager::kDecayToMuMu, gkMuonFillMapWithColl>(groupedLeptonCandidates, groupedDmesonCandidates, collision, barrelTracks);
423431
}
424432
}
425433

426434
// process J/psi(->ee) - D0 adding the BDT output scores to the D0 table
427-
void processJspiToEED0WithBdt(MyEvents const& collisions, MyBarrelTracksSelectedWithColl const& electronCandidates, soa::Filtered<MyD0CandidatesSelectedWithBdt> const& selectedD0CandidatesWithBdt)
435+
void processJspiToEED0WithBdt(MyEvents const& collisions, MyBarrelTracksSelectedWithColl const& electronCandidates, soa::Filtered<MyD0CandidatesSelectedWithBdt> const& selectedD0CandidatesWithBdt, TracksWithExtra const& barrelTracks)
428436
{
429437
if (storeTableForNorm) {
430438
redCollCounter(collisions.size());
431439
}
432440
for (auto const& collision : collisions) {
433441
auto groupedDmesonCandidates = selectedD0CandidatesWithBdt.sliceBy(perCollisionDmesonWithBdt, collision.globalIndex());
434442
auto groupedLeptonCandidates = electronCandidates.sliceBy(perCollisionElectrons, collision.globalIndex());
435-
runDileptonDmeson<false, true, VarManager::kDecayToEE, gkTrackFillMapWithColl>(groupedLeptonCandidates, groupedDmesonCandidates, collision);
443+
runDileptonDmeson<false, true, VarManager::kDecayToEE, gkTrackFillMapWithColl>(groupedLeptonCandidates, groupedDmesonCandidates, collision, barrelTracks);
436444
}
437445
}
438446

0 commit comments

Comments
 (0)