Skip to content

Commit fe33ea5

Browse files
authored
[PWGHF] Add generated impact parameter to mini trees output (#14581)
1 parent 5948fee commit fe33ea5

File tree

1 file changed

+41
-12
lines changed

1 file changed

+41
-12
lines changed

PWGHF/D2H/Tasks/taskDs.cxx

Lines changed: 41 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -101,28 +101,32 @@ DECLARE_SOA_COLUMN(Pt, pt, float); //!
101101
DECLARE_SOA_COLUMN(M, m, float); //! Invariant mass of D-meson candidates (GeV/c)
102102
DECLARE_SOA_COLUMN(Centrality, centrality, float); //! Centrality of collision
103103
DECLARE_SOA_COLUMN(ImpactParameter, impactParameter, float); //! Impact parameter of D-meson candidate
104+
DECLARE_SOA_COLUMN(ImpactParameterMc, impactParameterMc, float); //! Generated impact parameter of D-meson candidate
104105
DECLARE_SOA_COLUMN(DecayLength, decayLength, float); //! Decay length of D-meson candidate
105106
DECLARE_SOA_COLUMN(DecayLengthXY, decayLengthXY, float); //! Transverse decay length of D-meson candidate
106107
DECLARE_SOA_COLUMN(DecayLengthNormalised, decayLengthNormalised, float); //! Normalised decay length of D-meson candidate
107108
DECLARE_SOA_COLUMN(DecayLengthXYNormalised, decayLengthXYNormalised, float); //! Normalised transverse decay length of D-meson candidate
108109
DECLARE_SOA_COLUMN(FlagMc, flagMc, int); //! MC flag (according to DataType enum)
109110
} // namespace hf_cand_ds_mini
110111

111-
DECLARE_SOA_TABLE(HfCandDsMinis, "AOD", "HFCANDDSMINI", //! Table with few Ds properties
112+
DECLARE_SOA_TABLE(HfCandDsMinis, "AOD", "HFDSMINI", //! Table with few Ds properties
112113
hf_cand_ds_mini::M,
113114
hf_cand_ds_mini::Pt,
114115
hf_cand_ds_mini::Centrality);
115116

116-
DECLARE_SOA_TABLE(HfCandDsDlMinis, "AOD", "HFCANDDSDLMINI", //! Table with decay length Ds properties
117+
DECLARE_SOA_TABLE(HfCandDsDlMinis, "AOD", "HFDSDLMINI", //! Table with decay length Ds properties
117118
hf_cand_ds_mini::DecayLength,
118119
hf_cand_ds_mini::DecayLengthXY,
119120
hf_cand_ds_mini::DecayLengthNormalised,
120121
hf_cand_ds_mini::DecayLengthXYNormalised);
121122

122-
DECLARE_SOA_TABLE(HfCandDsD0Minis, "AOD", "HFCANDDSD0MINI", //! Table with impact parameter (d0)
123+
DECLARE_SOA_TABLE(HfCandDsD0Minis, "AOD", "HFDSD0MINI", //! Table with impact parameter (d0)
123124
hf_cand_ds_mini::ImpactParameter);
124125

125-
DECLARE_SOA_TABLE(HfCandDsMcMinis, "AOD", "HFCANDDSMCMINI", //! Table with MC decay type check
126+
DECLARE_SOA_TABLE(HfCandDsD0McMinis, "AOD", "HFDSD0MCMINI", //! Table with generated impact parameter (d0)
127+
hf_cand_ds_mini::ImpactParameterMc);
128+
129+
DECLARE_SOA_TABLE(HfCandDsMcMinis, "AOD", "HFDSMCMINI", //! Table with MC decay type check
126130
hf_cand_ds_mini::FlagMc);
127131
} // namespace o2::aod
128132

@@ -141,6 +145,7 @@ struct HfTaskDs {
141145
Produces<aod::HfCandDsDlMinis> hfCandDsDlMinis;
142146
Produces<aod::HfCandDsD0Minis> hfCandDsD0Minis;
143147
Produces<aod::HfCandDsMcMinis> hfCandDsMcMinis;
148+
Produces<aod::HfCandDsD0McMinis> hfCandDsD0McMinis;
144149

145150
Configurable<int> decayChannel{"decayChannel", 1, "Switch between resonant decay channels: 1 for Ds/Dplus->PhiPi->KKpi, 2 for Ds/Dplus->K0*K->KKPi"};
146151
Configurable<bool> fillDplusMc{"fillDplusMc", true, "Switch to fill Dplus MC information"};
@@ -584,8 +589,8 @@ struct HfTaskDs {
584589
}
585590
}
586591

587-
template <bool IsMc, typename Coll, typename Cand>
588-
void fillMiniTrees(const Cand& candidate, DataType dataType, FinalState finalState)
592+
template <typename Coll, typename Cand>
593+
void fillMiniTrees(const Cand& candidate, FinalState finalState)
589594
{
590595
auto mass = finalState == FinalState::KKPi ? HfHelper::invMassDsToKKPi(candidate) : HfHelper::invMassDsToPiKK(candidate);
591596
auto pt = candidate.pt();
@@ -597,8 +602,32 @@ struct HfTaskDs {
597602
if (miniTrees.extendWithImpactParameter) {
598603
hfCandDsD0Minis(candidate.impactParameterXY());
599604
}
600-
if constexpr (IsMc) {
601-
hfCandDsMcMinis(dataType);
605+
}
606+
607+
template <typename Coll, typename Cand>
608+
void fillMiniTreesMc(const Cand& candidate, DataType dataType, FinalState finalState, const CandDsMcGen& mcParticles, int indexMother)
609+
{
610+
auto mass = finalState == FinalState::KKPi ? HfHelper::invMassDsToKKPi(candidate) : HfHelper::invMassDsToPiKK(candidate);
611+
auto pt = candidate.pt();
612+
613+
hfCandDsMinis(mass, pt, evaluateCentralityCand<Coll>(candidate));
614+
if (miniTrees.extendWithDecayLength) {
615+
hfCandDsDlMinis(candidate.decayLength(), candidate.decayLengthXY(), candidate.decayLengthNormalised(), candidate.decayLengthXYNormalised());
616+
}
617+
if (miniTrees.extendWithImpactParameter) {
618+
hfCandDsD0Minis(candidate.impactParameterXY());
619+
}
620+
hfCandDsMcMinis(dataType);
621+
622+
if (miniTrees.extendWithImpactParameter) {
623+
// indexMother is != -1 here
624+
auto particleMc = mcParticles.rawIteratorAt(indexMother);
625+
auto prong0 = mcParticles.rawIteratorAt(particleMc.daughtersIds()[0]);
626+
627+
std::array pv{particleMc.mcCollision().posX(), particleMc.mcCollision().posY(), particleMc.mcCollision().posZ()};
628+
std::array sv{prong0.vx(), prong0.vy(), prong0.vz()};
629+
auto genD0 = RecoDecay::impParXY(pv, sv, std::array{particleMc.px(), particleMc.py(), particleMc.pz()});
630+
hfCandDsD0McMinis(genD0);
602631
}
603632
}
604633

@@ -663,7 +692,7 @@ struct HfTaskDs {
663692
fillHisto(candidate, dataType);
664693
fillHistoKKPi<true, Coll>(candidate, dataType);
665694
if (miniTrees.produceMiniTrees) {
666-
fillMiniTrees<true, Coll>(candidate, dataType, FinalState::KKPi);
695+
fillMiniTreesMc<Coll>(candidate, dataType, FinalState::KKPi, mcParticles, indexMother);
667696
}
668697
if (TESTBIT(candidate.isSelDsToKKPi(), aod::SelectionStep::RecoSkims)) {
669698
std::get<TH2Ptr>(histosPtr[dataType]["hPtVsYRecoSkim"])->Fill(pt, yCand);
@@ -683,7 +712,7 @@ struct HfTaskDs {
683712
fillHisto(candidate, dataType);
684713
fillHistoPiKK<true, Coll>(candidate, dataType);
685714
if (miniTrees.produceMiniTrees) {
686-
fillMiniTrees<true, Coll>(candidate, dataType, FinalState::PiKK);
715+
fillMiniTreesMc<Coll>(candidate, dataType, FinalState::PiKK, mcParticles, indexMother);
687716
}
688717

689718
if (TESTBIT(candidate.isSelDsToPiKK(), aod::SelectionStep::RecoSkims)) {
@@ -709,7 +738,7 @@ struct HfTaskDs {
709738
fillHisto(candidate, DataType::Data);
710739
fillHistoKKPi<false, Coll>(candidate, DataType::Data);
711740
if (miniTrees.produceMiniTrees) {
712-
fillMiniTrees<true, Coll>(candidate, DataType::Data, FinalState::KKPi);
741+
fillMiniTrees<Coll>(candidate, FinalState::KKPi);
713742
}
714743
}
715744
if (candidate.isSelDsToPiKK() >= selectionFlagDs) { // PiKK
@@ -719,7 +748,7 @@ struct HfTaskDs {
719748
fillHisto(candidate, DataType::Data);
720749
fillHistoPiKK<false, Coll>(candidate, DataType::Data);
721750
if (miniTrees.produceMiniTrees) {
722-
fillMiniTrees<true, Coll>(candidate, DataType::Data, FinalState::PiKK);
751+
fillMiniTrees<Coll>(candidate, FinalState::PiKK);
723752
}
724753
}
725754
}

0 commit comments

Comments
 (0)