From 2e75bd86dd5d456651b95cf4b21b0eb1afd2f5cd Mon Sep 17 00:00:00 2001 From: Maximilian Reininghaus <maximilian.reininghaus@tu-dortmund.de> Date: Fri, 16 Jun 2023 01:51:55 +0200 Subject: [PATCH] use pre-step cross-section/lifetime; doSecondaries() only after real event generation --- corsika/detail/framework/core/Cascade.inl | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/corsika/detail/framework/core/Cascade.inl b/corsika/detail/framework/core/Cascade.inl index bb0d0b854..c3a1eee37 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> -- GitLab