@@ -119,18 +119,45 @@ class GeneratorPythia8HFHadToNuclei : public o2::eventgen::GeneratorPythia8
119119 int id = std ::abs (event [iPart ].id ());
120120 float rap = event [iPart ].y ();
121121 if (id == mHadronPdg && rap > mHadRapidityMin && rap < mHadRapidityMax ) {
122+
123+ int d1 = event [iPart ].daughter1 ();
124+ int d2 = event [iPart ].daughter2 ();
125+
126+ // Protection for invalid index of daughter 1
127+ if (d1 < 0 || d1 >= event .size ()) {
128+ LOG (info ) << "Invalid daughter index 1! d1 = " << d1 ;
129+ continue ;
130+ }
131+
132+ // Protection for invalid index of daughter 2
133+ if (d2 < 0 || d2 >= event .size ()) {
134+ LOG (info ) << "Invalid daughter index 2! d2 = " << d2 ;
135+ continue ;
136+ }
137+
138+ // Swap order
139+ if (d1 > d2 ) {
140+ std ::swap (d1 , d2 );
141+ }
142+
143+ // No daughters
144+ if (d1 == 0 && d2 == 0 ) {
145+ LOG (info ) << "No daughters (0,0). Skipping." ;
146+ continue ;
147+ }
148+
122149 LOG (debug ) << "-----------------------------------------------------" ;
123- LOG (debug ) << "Found hadron " << event [iPart ].id () << " with rapidity " << rap << " and daughters " << event [ iPart ]. daughter1 () << " " << event [ iPart ]. daughter2 () ;
150+ LOG (debug ) << "Found hadron " << event [iPart ].id () << " with rapidity " << rap << " and daughters " << d1 << " " << d2 ;
124151 // print pdg code of daughters
125152 LOG (debug ) << "Daughters: " ;
126- for (int iDau = event [ iPart ]. daughter1 () ; iDau <= event [ iPart ]. daughter2 () ; ++ iDau ) {
153+ for (int iDau = d1 ; iDau <= d2 ; ++ iDau ) {
127154 LOG (debug ) << "Daughter " << iDau << ": " << event [iDau ].id ();
128155 }
129- bool isCoalDone = CoalescencePythia8 (event , mNucleiPdgList , mTrivialCoal , mCoalMomentum , event [ iPart ]. daughter1 (), event [ iPart ]. daughter2 () );
156+ bool isCoalDone = CoalescencePythia8 (event , mNucleiPdgList , mTrivialCoal , mCoalMomentum , d1 , d2 );
130157 if (isCoalDone ) {
131- LOG (debug ) << "Coalescence process found for hadron " << event [iPart ].id () << " with daughters " << event [ iPart ]. daughter1 () << " " << event [ iPart ]. daughter2 () ;
158+ LOG (debug ) << "Coalescence process found for hadron " << event [iPart ].id () << " with daughters " << d1 << " " << d2 ;
132159 LOG (debug ) << "Check updated daughters: " ;
133- for (int iDau = event [ iPart ]. daughter1 () ; iDau <= event [ iPart ]. daughter2 () ; ++ iDau ) {
160+ for (int iDau = d1 ; iDau <= d2 ; ++ iDau ) {
134161 LOG (debug ) << "Daughter " << iDau << ": " << event [iDau ].id ();
135162 }
136163 return true;
@@ -171,4 +198,4 @@ FairGenerator *generateHFHadToNuclei(int input_trigger_ratio = 5, std::vector<in
171198 myGen -> readString ("Random:setSeed on" );
172199 myGen -> readString ("Random:seed " + std ::to_string (seed ));
173200 return myGen ;
174- }
201+ }
0 commit comments