From c0e87dbbd04b55f0371ca403bd56a663b7334219 Mon Sep 17 00:00:00 2001 From: Alberto Caliva Date: Wed, 25 Feb 2026 18:17:48 +0100 Subject: [PATCH 1/2] [PWGHF] Protect daughter index access in selectEvent to prevent segmentation faults --- .../generator_pythia8_hfhadron_to_nuclei.C | 39 ++++++++++++++++--- 1 file changed, 33 insertions(+), 6 deletions(-) diff --git a/MC/config/PWGHF/external/generator/generator_pythia8_hfhadron_to_nuclei.C b/MC/config/PWGHF/external/generator/generator_pythia8_hfhadron_to_nuclei.C index 49b98168d..f8d653f1a 100644 --- a/MC/config/PWGHF/external/generator/generator_pythia8_hfhadron_to_nuclei.C +++ b/MC/config/PWGHF/external/generator/generator_pythia8_hfhadron_to_nuclei.C @@ -119,18 +119,45 @@ class GeneratorPythia8HFHadToNuclei : public o2::eventgen::GeneratorPythia8 int id = std::abs(event[iPart].id()); float rap = event[iPart].y(); if (id == mHadronPdg && rap > mHadRapidityMin && rap < mHadRapidityMax) { + + int d1 = event[iPart].daughter1(); + int d2 = event[iPart].daughter2(); + + // Protection for invalid index of daughter 1 + if (d1 < 0 || d1 >= event.size()) { + LOG(info) << "Invalid daughter index 1! d1 = " << d1; + continue; + } + + // Protection for invalid index of daughter 2 + if (d2 < 0 || d2 >= event.size()) { + LOG(info) << "Invalid daughter index 2! d2 = " << d2; + continue; + } + + // Swap order + if (d1 > d2) { + std::swap(d1, d2); + } + + // No daughters + if (d1 == 0 && d2 == 0) { + LOG(info) << "No daughters (0,0). Skipping."; + continue; + } + LOG(debug) << "-----------------------------------------------------"; - LOG(debug) << "Found hadron " << event[iPart].id() << " with rapidity " << rap << " and daughters " << event[iPart].daughter1() << " " << event[iPart].daughter2(); + LOG(debug) << "Found hadron " << event[iPart].id() << " with rapidity " << rap << " and daughters " << d1 << " " << d2; // print pdg code of daughters LOG(debug) << "Daughters: "; - for (int iDau = event[iPart].daughter1(); iDau <= event[iPart].daughter2(); ++iDau) { + for (int iDau = d1; iDau <= d2; ++iDau) { LOG(debug) << "Daughter " << iDau << ": " << event[iDau].id(); } - bool isCoalDone = CoalescencePythia8(event, mNucleiPdgList, mTrivialCoal, mCoalMomentum, event[iPart].daughter1(), event[iPart].daughter2()); + bool isCoalDone = CoalescencePythia8(event, mNucleiPdgList, mTrivialCoal, mCoalMomentum, d1, d2); if (isCoalDone) { - LOG(debug) << "Coalescence process found for hadron " << event[iPart].id() << " with daughters " << event[iPart].daughter1() << " " << event[iPart].daughter2(); + LOG(debug) << "Coalescence process found for hadron " << event[iPart].id() << " with daughters " << d1 << " " << d2; LOG(debug) << "Check updated daughters: "; - for (int iDau = event[iPart].daughter1(); iDau <= event[iPart].daughter2(); ++iDau) { + for (int iDau = d1; iDau <= d2; ++iDau) { LOG(debug) << "Daughter " << iDau << ": " << event[iDau].id(); } return true; @@ -171,4 +198,4 @@ FairGenerator *generateHFHadToNuclei(int input_trigger_ratio = 5, std::vectorreadString("Random:setSeed on"); myGen->readString("Random:seed " + std::to_string(seed)); return myGen; -} \ No newline at end of file +} From f385e9acb80c569cd90a86e495f8ac14f7d72792 Mon Sep 17 00:00:00 2001 From: Alberto Caliva Date: Wed, 25 Feb 2026 20:11:44 +0100 Subject: [PATCH 2/2] add library --- .../external/generator/generator_pythia8_hfhadron_to_nuclei.C | 1 + 1 file changed, 1 insertion(+) diff --git a/MC/config/PWGHF/external/generator/generator_pythia8_hfhadron_to_nuclei.C b/MC/config/PWGHF/external/generator/generator_pythia8_hfhadron_to_nuclei.C index f8d653f1a..a2aadef89 100644 --- a/MC/config/PWGHF/external/generator/generator_pythia8_hfhadron_to_nuclei.C +++ b/MC/config/PWGHF/external/generator/generator_pythia8_hfhadron_to_nuclei.C @@ -3,6 +3,7 @@ #include "Pythia8/Pythia.h" #include "TRandom.h" #include +#include #include #include