Skip to content

Commit 4fb6a7b

Browse files
authored
[ALICE3] add more qa to otf decayer (#16265)
1 parent f57267a commit 4fb6a7b

2 files changed

Lines changed: 140 additions & 46 deletions

File tree

ALICE3/TableProducer/OTF/onTheFlyDecayer.cxx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@ struct OnTheFlyDecayer {
8585

8686
HistogramRegistry histos{"histos", {}, OutputObjHandlingPolicy::AnalysisObject};
8787

88+
int mCollisionId{-1};
8889
std::vector<int> mEnabledDecays;
8990
void init(o2::framework::InitContext&)
9091
{
@@ -134,7 +135,7 @@ struct OnTheFlyDecayer {
134135
particle.setIndicesDaughter(allParticles.size(), allParticles.size() + (decayStack.size() - 1));
135136
for (o2::upgrade::OTFParticle daughter : decayStack) {
136137
daughter.setIndicesMother(i, i);
137-
daughter.setCollisionId(particle.collisionId());
138+
daughter.setCollisionId(mCollisionId);
138139
daughter.setIsAlive(true);
139140
daughter.setIsPrimary(false);
140141
allParticles.push_back(daughter);
@@ -149,8 +150,9 @@ struct OnTheFlyDecayer {
149150
decayParticles(stop, stop + ndau);
150151
}
151152

152-
void process(aod::McCollision const&, aod::McParticles const& mcParticles)
153+
void process(aod::McCollision const& collision, aod::McParticles const& mcParticles)
153154
{
155+
mCollisionId = collision.globalIndex();
154156
allParticles.clear();
155157

156158
// First we copy the particles from the table into a vector that is extendable

ALICE3/Tasks/alice3DecayerQa.cxx

Lines changed: 136 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ using namespace o2::framework;
3838

3939
struct Alice3DecayerQA {
4040
HistogramRegistry histos{"histos", {}, OutputObjHandlingPolicy::AnalysisObject};
41+
SliceCache cache;
4142

4243
struct : ConfigurableGroup {
4344
ConfigurableAxis axisCollisionId{"axisCollisionId", {1000, 0, 999}, "CollisionId axis for QA histograms"};
@@ -54,34 +55,33 @@ struct Alice3DecayerQA {
5455
ConfigurableAxis axisIsAlive{"axisIsAlive", {2, 0, 1}, "IsAlive axis for QA histograms"};
5556
ConfigurableAxis axisIsPrimary{"axisIsPrimary", {2, 0, 1}, "IsPrimary axis for QA histograms"};
5657
ConfigurableAxis axisPt{"axisPt", {VARIABLE_WIDTH, 0.0f, 0.1f, 0.2f, 0.3f, 0.4f, 0.5f, 0.6f, 0.7f, 0.8f, 0.9f, 1.0f, 1.1f, 1.2f, 1.3f, 1.4f, 1.5f, 1.6f, 1.7f, 1.8f, 1.9f, 2.0f, 2.2f, 2.4f, 2.6f, 2.8f, 3.0f, 3.2f, 3.4f, 3.6f, 3.8f, 4.0f, 4.4f, 4.8f, 5.2f, 5.6f, 6.0f, 6.5f, 7.0f, 7.5f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f, 13.0f, 14.0f, 15.0f, 17.0f, 19.0f, 21.0f, 23.0f, 25.0f, 30.0f, 35.0f, 40.0f, 50.0f}, "pt axis for QA histograms"};
58+
ConfigurableAxis axisRadiusLog{"axisRadiusLog", {VARIABLE_WIDTH, 0.0f, 0.01f, 0.0104713f, 0.0109648f, 0.0114815f, 0.0120226f, 0.0125893f, 0.0131826f, 0.0138038f, 0.0144544f, 0.0151356f, 0.0158489f, 0.0165959f, 0.017378f, 0.018197f, 0.0190546f, 0.0199526f, 0.020893f, 0.0218776f, 0.0229087f, 0.0239883f, 0.0251189f, 0.0263027f, 0.0275423f, 0.0288403f, 0.0301995f, 0.0316228f, 0.0331131f, 0.0346737f, 0.0363078f, 0.0380189f, 0.0398107f, 0.0416869f, 0.0436516f, 0.0457088f, 0.047863f, 0.0501187f, 0.0524807f, 0.0549541f, 0.057544f, 0.060256f, 0.0630957f, 0.0660693f, 0.0691831f, 0.0724436f, 0.0758578f, 0.0794328f, 0.0831764f, 0.0870964f, 0.0912011f, 0.0954993f, 0.1f, 0.104713f, 0.109648f, 0.114815f, 0.120226f, 0.125893f, 0.131826f, 0.138038f, 0.144544f, 0.151356f, 0.158489f, 0.165959f, 0.17378f, 0.18197f, 0.190546f, 0.199526f, 0.20893f, 0.218776f, 0.229087f, 0.239883f, 0.251189f, 0.263027f, 0.275423f, 0.288403f, 0.301995f, 0.316228f, 0.331131f, 0.346737f, 0.363078f, 0.380189f, 0.398107f, 0.416869f, 0.436516f, 0.457088f, 0.47863f, 0.501187f, 0.524807f, 0.549541f, 0.57544f, 0.60256f, 0.630957f, 0.660693f, 0.691831f, 0.724436f, 0.758578f, 0.794328f, 0.831764f, 0.870964f, 0.912011f, 0.954993f, 1.0f, 1.04713f, 1.09648f, 1.14815f, 1.20226f, 1.25893f, 1.31826f, 1.38038f, 1.44544f, 1.51356f, 1.58489f, 1.65959f, 1.7378f, 1.8197f, 1.90546f, 1.99526f, 2.0893f, 2.18776f, 2.29087f, 2.39883f, 2.51189f, 2.63027f, 2.75423f, 2.88403f, 3.01995f, 3.16228f, 3.31131f, 3.46737f, 3.63078f, 3.80189f, 3.98107f, 4.16869f, 4.36516f, 4.57088f, 4.7863f, 5.01187f, 5.24807f, 5.49541f, 5.7544f, 6.0256f, 6.30957f, 6.60693f, 6.91831f, 7.24436f, 7.58578f, 7.94328f, 8.31764f, 8.70964f, 9.12011f, 9.54993f, 10.0f, 10.4713f, 10.9648f, 11.4815f, 12.0226f, 12.5893f, 13.1826f, 13.8038f, 14.4544f, 15.1356f, 15.8489f, 16.5959f, 17.378f, 18.197f, 19.0546f, 19.9526f, 20.893f, 21.8776f, 22.9087f, 23.9883f, 25.1189f, 26.3027f, 27.5423f, 28.8403f, 30.1995f, 31.6228f, 33.1131f, 34.6737f, 36.3078f, 38.0189f, 39.8107f, 41.6869f, 43.6516f, 45.7088f, 47.863f, 50.1187f, 52.4807f, 54.9541f, 57.544f, 60.256f, 63.0957f, 66.0693f, 69.1831f, 72.4436f, 75.8578f, 79.4328f, 83.1764f, 87.0964f, 91.2011f, 95.4993f, 100.0f}, "Radial axis"};
59+
ConfigurableAxis axisPtLog{"axisPtLog", {VARIABLE_WIDTH, 0.0f, 0.001f, 0.00104713f, 0.00109648f, 0.00114815f, 0.00120226f, 0.00125893f, 0.00131826f, 0.00138038f, 0.00144544f, 0.00151356f, 0.00158489f, 0.00165959f, 0.0017378f, 0.0018197f, 0.00190546f, 0.00199526f, 0.0020893f, 0.00218776f, 0.00229087f, 0.00239883f, 0.00251189f, 0.00263027f, 0.00275423f, 0.00288403f, 0.00301995f, 0.00316228f, 0.00331131f, 0.00346737f, 0.00363078f, 0.00380189f, 0.00398107f, 0.00416869f, 0.00436516f, 0.00457088f, 0.0047863f, 0.00501187f, 0.00524807f, 0.00549541f, 0.0057544f, 0.0060256f, 0.00630957f, 0.00660693f, 0.00691831f, 0.00724436f, 0.00758578f, 0.00794328f, 0.00831764f, 0.00870964f, 0.00912011f, 0.00954993f, 0.01f, 0.0104713f, 0.0109648f, 0.0114815f, 0.0120226f, 0.0125893f, 0.0131826f, 0.0138038f, 0.0144544f, 0.0151356f, 0.0158489f, 0.0165959f, 0.017378f, 0.018197f, 0.0190546f, 0.0199526f, 0.020893f, 0.0218776f, 0.0229087f, 0.0239883f, 0.0251189f, 0.0263027f, 0.0275423f, 0.0288403f, 0.0301995f, 0.0316228f, 0.0331131f, 0.0346737f, 0.0363078f, 0.0380189f, 0.0398107f, 0.0416869f, 0.0436516f, 0.0457088f, 0.047863f, 0.0501187f, 0.0524807f, 0.0549541f, 0.057544f, 0.060256f, 0.0630957f, 0.0660693f, 0.0691831f, 0.0724436f, 0.0758578f, 0.0794328f, 0.0831764f, 0.0870964f, 0.0912011f, 0.0954993f, 0.1f, 0.104713f, 0.109648f, 0.114815f, 0.120226f, 0.125893f, 0.131826f, 0.138038f, 0.144544f, 0.151356f, 0.158489f, 0.165959f, 0.17378f, 0.18197f, 0.190546f, 0.199526f, 0.20893f, 0.218776f, 0.229087f, 0.239883f, 0.251189f, 0.263027f, 0.275423f, 0.288403f, 0.301995f, 0.316228f, 0.331131f, 0.346737f, 0.363078f, 0.380189f, 0.398107f, 0.416869f, 0.436516f, 0.457088f, 0.47863f, 0.501187f, 0.524807f, 0.549541f, 0.57544f, 0.60256f, 0.630957f, 0.660693f, 0.691831f, 0.724436f, 0.758578f, 0.794328f, 0.831764f, 0.870964f, 0.912011f, 0.954993f, 1.0f, 1.04713f, 1.09648f, 1.14815f, 1.20226f, 1.25893f, 1.31826f, 1.38038f, 1.44544f, 1.51356f, 1.58489f, 1.65959f, 1.7378f, 1.8197f, 1.90546f, 1.99526f, 2.0893f, 2.18776f, 2.29087f, 2.39883f, 2.51189f, 2.63027f, 2.75423f, 2.88403f, 3.01995f, 3.16228f, 3.31131f, 3.46737f, 3.63078f, 3.80189f, 3.98107f, 4.16869f, 4.36516f, 4.57088f, 4.7863f, 5.01187f, 5.24807f, 5.49541f, 5.7544f, 6.0256f, 6.30957f, 6.60693f, 6.91831f, 7.24436f, 7.58578f, 7.94328f, 8.31764f, 8.70964f, 9.12011f, 9.54993f, 10.0f}, "pt axis for QA histograms"};
5760
} axes;
5861

59-
Partition<aod::McParticles> trueEl = aod::mcparticle::pdgCode == static_cast<int>(kElectron);
60-
Partition<aod::McParticles> trueMu = aod::mcparticle::pdgCode == static_cast<int>(kMuonMinus);
61-
Partition<aod::McParticles> truePi = aod::mcparticle::pdgCode == static_cast<int>(kPiPlus);
62-
Partition<aod::McParticles> trueKa = aod::mcparticle::pdgCode == static_cast<int>(kKMinus);
63-
Partition<aod::McParticles> truePr = aod::mcparticle::pdgCode == static_cast<int>(kProton);
62+
Partition<aod::McPartWithDaus> trueElectrons = aod::mcparticle::pdgCode == static_cast<int>(PDG_t::kElectron);
63+
Partition<aod::McPartWithDaus> trueMuons = aod::mcparticle::pdgCode == static_cast<int>(PDG_t::kMuonMinus);
64+
Partition<aod::McPartWithDaus> truePions = aod::mcparticle::pdgCode == static_cast<int>(PDG_t::kPiPlus);
65+
Partition<aod::McPartWithDaus> trueKaons = aod::mcparticle::pdgCode == static_cast<int>(PDG_t::kKMinus);
66+
Partition<aod::McPartWithDaus> trueProtons = aod::mcparticle::pdgCode == static_cast<int>(PDG_t::kProton);
67+
Partition<aod::McPartWithDaus> trueK0Short = aod::mcparticle::pdgCode == static_cast<int>(PDG_t::kK0Short);
68+
Partition<aod::McPartWithDaus> trueLambdas = aod::mcparticle::pdgCode == static_cast<int>(PDG_t::kLambda0);
69+
Partition<aod::McPartWithDaus> trueXiMinus = aod::mcparticle::pdgCode == static_cast<int>(PDG_t::kXiMinus);
6470

65-
Partition<aod::McPartWithDaus> trueElWithDau = aod::mcparticle::pdgCode == static_cast<int>(kElectron);
66-
Partition<aod::McPartWithDaus> trueMuWithDau = aod::mcparticle::pdgCode == static_cast<int>(kMuonMinus);
67-
Partition<aod::McPartWithDaus> truePiWithDau = aod::mcparticle::pdgCode == static_cast<int>(kPiPlus);
68-
Partition<aod::McPartWithDaus> trueKaWithDau = aod::mcparticle::pdgCode == static_cast<int>(kKMinus);
69-
Partition<aod::McPartWithDaus> truePrWithDau = aod::mcparticle::pdgCode == static_cast<int>(kProton);
71+
template <typename TParticle>
72+
float radius(const TParticle& particle) const
73+
{
74+
return std::hypot(particle.vx(), particle.vy());
75+
}
7076

7177
void init(o2::framework::InitContext&)
7278
{
73-
histos.add("DefaultMC/hElPt", "hElPt", kTH1D, {axes.axisPt});
74-
histos.add("DefaultMC/hMuPt", "hMuPt", kTH1D, {axes.axisPt});
75-
histos.add("DefaultMC/hPiPt", "hPiPt", kTH1D, {axes.axisPt});
76-
histos.add("DefaultMC/hKaPt", "hKaPt", kTH1D, {axes.axisPt});
77-
histos.add("DefaultMC/hPrPt", "hPrPt", kTH1D, {axes.axisPt});
78-
79+
// QA with Table entries
7980
histos.add("MCWithDau/hElPt", "hElPt", kTH1D, {axes.axisPt});
8081
histos.add("MCWithDau/hMuPt", "hMuPt", kTH1D, {axes.axisPt});
8182
histos.add("MCWithDau/hPiPt", "hPiPt", kTH1D, {axes.axisPt});
8283
histos.add("MCWithDau/hKaPt", "hKaPt", kTH1D, {axes.axisPt});
8384
histos.add("MCWithDau/hPrPt", "hPrPt", kTH1D, {axes.axisPt});
84-
8585
histos.add("MCWithDau/hCollisionId", "hCollisionId", kTH1D, {axes.axisCollisionId});
8686
histos.add("MCWithDau/hPdgCode", "hPdgCode", kTH1D, {axes.axisPdgCode});
8787
histos.add("MCWithDau/hStatusCode", "hStatusCode", kTH1D, {axes.axisStatusCode});
@@ -104,44 +104,137 @@ struct Alice3DecayerQA {
104104
histos.add("MCWithDau/hPt", "hPt", kTH1D, {axes.axisPt});
105105
histos.add("MCWithDau/hP", "hP", kTH1D, {axes.axisPt});
106106
histos.add("MCWithDau/hE", "hE", kTH1D, {axes.axisPt});
107-
}
108107

109-
void processMC(const aod::McParticles&)
110-
{
111-
for (const auto& particle : trueEl) {
112-
histos.fill(HIST("DefaultMC/hElPt"), particle.pt());
113-
}
114-
for (const auto& particle : trueMu) {
115-
histos.fill(HIST("DefaultMC/hMuPt"), particle.pt());
116-
}
117-
for (const auto& particle : truePi) {
118-
histos.fill(HIST("DefaultMC/hPiPt"), particle.pt());
119-
}
120-
for (const auto& particle : trueKa) {
121-
histos.fill(HIST("DefaultMC/hKaPt"), particle.pt());
122-
}
123-
for (const auto& particle : truePr) {
124-
histos.fill(HIST("DefaultMC/hPrPt"), particle.pt());
125-
}
108+
// QA with daughters from Decayer
109+
histos.add("K0S/hGeneratedPt", "hGeneratedPt", kTH1D, {axes.axisPt});
110+
histos.add("K0S/hHasDecayed", "hHasDecayed", kTH1D, {{2, -0.5, 1.5}});
111+
histos.add("K0S/hPosDauDecayRadius", "hPosDauDecayRadius", kTH2D, {axes.axisRadiusLog, axes.axisPtLog});
112+
histos.add("K0S/hNegDauDecayRadius", "hNegDauDecayRadius", kTH2D, {axes.axisRadiusLog, axes.axisPtLog});
113+
histos.add("Lambda/hGeneratedPt", "hGeneratedPt", kTH1D, {axes.axisPt});
114+
histos.add("Lambda/hHasDecayed", "hHasDecayed", kTH1D, {{2, -0.5, 1.5}});
115+
histos.add("Lambda/hPosDauDecayRadius", "hPosDauDecayRadius", kTH2D, {axes.axisRadiusLog, axes.axisPtLog});
116+
histos.add("Lambda/hNegDauDecayRadius", "hNegDauDecayRadius", kTH2D, {axes.axisRadiusLog, axes.axisPtLog});
117+
histos.add("XiMinus/hGeneratedPt", "hGeneratedPt", kTH1D, {axes.axisPt});
118+
histos.add("XiMinus/hHasDecayed", "hHasDecayed", kTH1D, {{2, -0.5, 1.5}});
119+
histos.add("XiMinus/hBachDauDecayRadius", "hBachDauDecayRadius", kTH2D, {axes.axisRadiusLog, axes.axisPtLog});
120+
histos.add("XiMinus/hV0DauDecayRadius", "hV0DauDecayRadius", kTH2D, {axes.axisRadiusLog, axes.axisPtLog});
121+
histos.add("XiMinus/hPosDauDecayRadius", "hPosDauDecayRadius", kTH2D, {axes.axisRadiusLog, axes.axisPtLog});
122+
histos.add("XiMinus/hNegDauDecayRadius", "hNegDauDecayRadius", kTH2D, {axes.axisRadiusLog, axes.axisPtLog});
126123
}
127124

128-
void processMCWithDau(const aod::McCollision&, const aod::McPartWithDaus& particles)
125+
void process(const aod::McCollision& collision, const aod::McPartWithDaus& particles)
129126
{
130-
for (const auto& particle : trueElWithDau) {
127+
// Group with collision
128+
auto trueElectronsGrouped = trueElectrons->sliceByCached(aod::mcparticle::mcCollisionId, collision.globalIndex(), cache);
129+
auto trueMuonsGrouped = trueMuons->sliceByCached(aod::mcparticle::mcCollisionId, collision.globalIndex(), cache);
130+
auto truePionsGrouped = truePions->sliceByCached(aod::mcparticle::mcCollisionId, collision.globalIndex(), cache);
131+
auto trueKaonsGrouped = trueKaons->sliceByCached(aod::mcparticle::mcCollisionId, collision.globalIndex(), cache);
132+
auto trueProtonsGrouped = trueProtons->sliceByCached(aod::mcparticle::mcCollisionId, collision.globalIndex(), cache);
133+
auto trueK0ShortGrouped = trueK0Short->sliceByCached(aod::mcparticle::mcCollisionId, collision.globalIndex(), cache);
134+
auto trueLambdasGrouped = trueLambdas->sliceByCached(aod::mcparticle::mcCollisionId, collision.globalIndex(), cache);
135+
auto trueXiMinusGrouped = trueXiMinus->sliceByCached(aod::mcparticle::mcCollisionId, collision.globalIndex(), cache);
136+
137+
for (const auto& particle : trueElectronsGrouped) {
131138
histos.fill(HIST("MCWithDau/hElPt"), particle.pt());
132139
}
133-
for (const auto& particle : trueMuWithDau) {
140+
for (const auto& particle : trueMuonsGrouped) {
134141
histos.fill(HIST("MCWithDau/hMuPt"), particle.pt());
135142
}
136-
for (const auto& particle : truePiWithDau) {
143+
for (const auto& particle : truePionsGrouped) {
137144
histos.fill(HIST("MCWithDau/hPiPt"), particle.pt());
138145
}
139-
for (const auto& particle : trueKaWithDau) {
146+
for (const auto& particle : trueKaonsGrouped) {
140147
histos.fill(HIST("MCWithDau/hKaPt"), particle.pt());
141148
}
142-
for (const auto& particle : truePrWithDau) {
149+
for (const auto& particle : trueProtonsGrouped) {
143150
histos.fill(HIST("MCWithDau/hPrPt"), particle.pt());
144151
}
152+
for (const auto& particle : trueK0ShortGrouped) {
153+
histos.fill(HIST("K0S/hGeneratedPt"), particle.pt());
154+
if (particle.has_daughters()) {
155+
histos.fill(HIST("K0S/hHasDecayed"), 0);
156+
auto daughters = particle.daughtersIds();
157+
if (daughters.size() == 2) {
158+
auto dau0 = particles.rawIteratorAt(daughters.front());
159+
auto dau1 = particles.rawIteratorAt(daughters.back());
160+
161+
// K0S -> pi+ pi-
162+
const bool k0sDecay = (dau0.pdgCode() == PDG_t::kPiPlus && dau1.pdgCode() == PDG_t::kPiMinus) ||
163+
(dau0.pdgCode() == PDG_t::kPiMinus && dau1.pdgCode() == PDG_t::kPiPlus);
164+
if (k0sDecay) {
165+
auto& positive = dau0.pdgCode() == PDG_t::kPiPlus ? dau0 : dau1;
166+
auto& negative = dau0.pdgCode() == PDG_t::kPiPlus ? dau1 : dau0;
167+
histos.fill(HIST("K0S/hPosDauDecayRadius"), radius(positive), positive.pt());
168+
histos.fill(HIST("K0S/hNegDauDecayRadius"), radius(negative), negative.pt());
169+
}
170+
}
171+
} else {
172+
histos.fill(HIST("K0S/hHasDecayed"), 1);
173+
}
174+
}
175+
for (const auto& particle : trueLambdasGrouped) {
176+
histos.fill(HIST("Lambda/hGeneratedPt"), particle.pt());
177+
if (particle.has_daughters()) {
178+
histos.fill(HIST("Lambda/hHasDecayed"), 0);
179+
auto daughters = particle.daughtersIds();
180+
if (daughters.size() == 2) {
181+
auto dau0 = particles.rawIteratorAt(daughters[0]);
182+
auto dau1 = particles.rawIteratorAt(daughters[1]);
183+
184+
// Lambda -> p pi-
185+
const bool lambdaDecay = (dau0.pdgCode() == PDG_t::kProton && dau1.pdgCode() == PDG_t::kPiMinus) ||
186+
(dau0.pdgCode() == PDG_t::kPiMinus && dau1.pdgCode() == PDG_t::kProton);
187+
if (lambdaDecay) {
188+
auto& positive = dau0.pdgCode() == PDG_t::kProton ? dau0 : dau1;
189+
auto& negative = dau0.pdgCode() == PDG_t::kProton ? dau1 : dau0;
190+
histos.fill(HIST("Lambda/hPosDauDecayRadius"), radius(positive), positive.pt());
191+
histos.fill(HIST("Lambda/hNegDauDecayRadius"), radius(negative), negative.pt());
192+
}
193+
}
194+
} else {
195+
histos.fill(HIST("Lambda/hHasDecayed"), 1);
196+
}
197+
}
198+
for (const auto& particle : trueXiMinusGrouped) {
199+
histos.fill(HIST("XiMinus/hGeneratedPt"), particle.pt());
200+
if (particle.has_daughters()) {
201+
histos.fill(HIST("XiMinus/hHasDecayed"), 0);
202+
auto daughters = particle.daughtersIds();
203+
if (daughters.size() == 2) {
204+
auto dau0 = particles.rawIteratorAt(daughters.front());
205+
auto dau1 = particles.rawIteratorAt(daughters.back());
206+
207+
// Xi- -> Lambda pi-
208+
const bool xiDecay = (dau0.pdgCode() == PDG_t::kLambda0 && dau1.pdgCode() == PDG_t::kPiMinus) ||
209+
(dau0.pdgCode() == PDG_t::kPiMinus && dau1.pdgCode() == PDG_t::kLambda0);
210+
if (xiDecay) {
211+
auto& v0 = dau0.pdgCode() == PDG_t::kLambda0 ? dau0 : dau1;
212+
auto& bachelor = dau0.pdgCode() == PDG_t::kLambda0 ? dau1 : dau0;
213+
histos.fill(HIST("XiMinus/hBachDauDecayRadius"), radius(bachelor), bachelor.pt());
214+
histos.fill(HIST("XiMinus/hV0DauDecayRadius"), radius(v0), v0.pt());
215+
216+
// Lambda -> p pi-
217+
if (v0.has_daughters()) {
218+
auto v0daughters = v0.daughtersIds();
219+
if (v0daughters.size() == 2) {
220+
auto v0dau0 = particles.rawIteratorAt(v0daughters.front());
221+
auto v0dau1 = particles.rawIteratorAt(v0daughters.back());
222+
const bool lambdaDecay = (v0dau0.pdgCode() == PDG_t::kProton && v0dau1.pdgCode() == PDG_t::kPiMinus) ||
223+
(v0dau0.pdgCode() == PDG_t::kPiMinus && v0dau1.pdgCode() == PDG_t::kProton);
224+
if (lambdaDecay) {
225+
auto& positive = v0dau0.pdgCode() == PDG_t::kProton ? v0dau0 : v0dau1;
226+
auto& negative = v0dau0.pdgCode() == PDG_t::kProton ? v0dau1 : v0dau0;
227+
histos.fill(HIST("XiMinus/hPosDauDecayRadius"), radius(positive), positive.pt());
228+
histos.fill(HIST("XiMinus/hNegDauDecayRadius"), radius(negative), negative.pt());
229+
}
230+
}
231+
}
232+
}
233+
}
234+
} else {
235+
histos.fill(HIST("XiMinus/hHasDecayed"), 1);
236+
}
237+
}
145238

146239
for (const auto& particle : particles) {
147240
histos.fill(HIST("MCWithDau/hCollisionId"), particle.mcCollisionId());
@@ -167,14 +260,13 @@ struct Alice3DecayerQA {
167260
for (const auto& motherParticleId : particle.mothersIds()) {
168261
histos.fill(HIST("MCWithDau/hMothersIds"), motherParticleId);
169262
}
170-
for (const auto& dauParticleId : particle.mothersIds()) {
263+
for (const auto& dauParticleId : particle.daughtersIds()) {
171264
histos.fill(HIST("MCWithDau/hDaughtersIds"), dauParticleId);
172265
}
173266
}
174267
}
175268

176-
PROCESS_SWITCH(Alice3DecayerQA, processMC, "fill MC-only histograms", false);
177-
PROCESS_SWITCH(Alice3DecayerQA, processMCWithDau, "fill MC-with-dau histograms", true);
269+
PROCESS_SWITCH(Alice3DecayerQA, process, "fill MC-with-dau histograms", true);
178270
};
179271

180272
WorkflowSpec defineDataProcessing(ConfigContext const& ctx)

0 commit comments

Comments
 (0)