From c083a26fc7f2ec9dd57202e4fe5b197e54035695 Mon Sep 17 00:00:00 2001
From: Maximilian Reininghaus <maximilian.reininghaus@kit.edu>
Date: Mon, 29 Apr 2019 13:13:50 -0300
Subject: [PATCH] set secondaries onshell

---
 Processes/UrQMD/UrQMD.cc | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/Processes/UrQMD/UrQMD.cc b/Processes/UrQMD/UrQMD.cc
index 1f7e44215..04d5ae701 100644
--- a/Processes/UrQMD/UrQMD.cc
+++ b/Processes/UrQMD/UrQMD.cc
@@ -182,12 +182,14 @@ corsika::process::EProcessReturn UrQMD::DoInteraction(SetupProjectile& vProjecti
 
   for (int i = 0; i < sys_.npart; ++i) {
     auto const code = ConvertFromUrQMD(isys_.ityp[i], isys_.iso3[i]);
-    auto const energy = coor_.p0[i] * 1_GeV;
+    // "coor_.p0[i] * 1_GeV" is likely off-shell as UrQMD doesn't preserve masses well
     auto momentum = geometry::Vector(
         zAxisFrame,
         geometry::QuantityVector<dimensionless_d>{coor_.px[i], coor_.py[i], coor_.pz[i]} *
             1_GeV);
 
+    auto const energy = sqrt(momentum.squaredNorm() + square(particles::GetMass(code)));
+
     momentum.rebase(originalCS); // transform back into standard lab frame
     std::cout << i << " " << code << " " << momentum.GetComponents() << std::endl;
 
-- 
GitLab