diff --git a/corsika/detail/framework/core/Cascade.inl b/corsika/detail/framework/core/Cascade.inl index bb0d0b854b8e6affe948046e63021ca273c23135..c3a1eee372e7d1390300305638e144e252c15748 100644 --- a/corsika/detail/framework/core/Cascade.inl +++ b/corsika/detail/framework/core/Cascade.inl @@ -303,15 +303,11 @@ namespace corsika { false; // only erase original particle if it decayed or interacted if (distance_interact < distance_decay) { - CrossSectionType const total_cx_post = composition.getWeightedSum(xs_function); eraseParticle = isInteracted( - interaction(secondaries, projectileP4Post, composition, total_cx_post)); + interaction(secondaries, projectileP4Post, composition, total_cx_pre)); } else { [[maybe_unused]] auto projectile = secondaries.getProjectile(); - - InverseTimeType const total_inv_lifetime_post = - sequence_.getInverseLifetime(particle); - if (decay(secondaries, total_inv_lifetime_post) == ProcessReturn::Decayed) { + if (decay(secondaries, total_inv_lifetime_pre) == ProcessReturn::Decayed) { eraseParticle = true; if (secondaries.getSize() == 1 && projectile.getPID() == secondaries.getNextParticle().getPID()) { @@ -321,8 +317,11 @@ namespace corsika { } } - sequence_.doSecondaries(secondaries); - if (eraseParticle) particle.erase(); + if (eraseParticle) { + // doSecondaries() makes sense only if there was an actual event + sequence_.doSecondaries(secondaries); + particle.erase(); + } } template <typename TTracking, typename TProcessList, typename TOutput, typename TStack>