From 4da4bb41663546b6efde1762626b5007e9198b7b Mon Sep 17 00:00:00 2001
From: Maximilian Reininghaus <maximilian.reininghaus@kit.edu>
Date: Thu, 23 May 2019 17:20:43 -0300
Subject: [PATCH] event output conversion

---
 Processes/UrQMD/UrQMD.cc | 9 ++++++---
 Processes/UrQMD/UrQMD.h  | 3 +++
 2 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/Processes/UrQMD/UrQMD.cc b/Processes/UrQMD/UrQMD.cc
index 1953d4a35..fba5dc183 100644
--- a/Processes/UrQMD/UrQMD.cc
+++ b/Processes/UrQMD/UrQMD.cc
@@ -170,8 +170,7 @@ corsika::process::EProcessReturn UrQMD::DoInteraction(SetupProjectile& vProjecti
     rsys_.ebeam = (projectileEnergyLab - vProjectile.GetMass()) * (1 / 1_GeV);
 
     if (projectileCode == particles::Code::K0Long) {
-      std::uniform_int_distribution dist(0, 1);
-      projectileCode = (dist(fRNG) == 1) ? particles::Code::K0 : particles::Code::K0Bar;
+      projectileCode = fBooleanDist(fRNG) ? particles::Code::K0 : particles::Code::K0Bar;
     } else if (projectileCode == particles::Code::K0Short) {
       throw std::runtime_error("K0Short should not interact");
     }
@@ -205,7 +204,11 @@ corsika::process::EProcessReturn UrQMD::DoInteraction(SetupProjectile& vProjecti
       originalCS.RotateToZ(projectileMomentumLab);
 
   for (int i = 0; i < sys_.npart; ++i) {
-    auto const code = ConvertFromUrQMD(isys_.ityp[i], isys_.iso3[i]);
+    auto code = ConvertFromUrQMD(isys_.ityp[i], isys_.iso3[i]);
+    if (code == particles::Code::K0 || code == particles::Code::K0Bar) {
+      code = fBooleanDist(fRNG) ? particles::Code::K0Short : particles::Code::K0Long;
+    }
+
     // "coor_.p0[i] * 1_GeV" is likely off-shell as UrQMD doesn't preserve masses well
     auto momentum = geometry::Vector(
         zAxisFrame,
diff --git a/Processes/UrQMD/UrQMD.h b/Processes/UrQMD/UrQMD.h
index c1af956f9..bdbca146e 100644
--- a/Processes/UrQMD/UrQMD.h
+++ b/Processes/UrQMD/UrQMD.h
@@ -18,6 +18,7 @@
 #include <corsika/units/PhysicalUnits.h>
 
 #include <array>
+#include <random>
 #include <utility>
 
 namespace corsika::process::UrQMD {
@@ -42,6 +43,8 @@ namespace corsika::process::UrQMD {
         particles::Code, particles::Code, corsika::units::si::HEPEnergyType, int);
     corsika::random::RNG& fRNG =
         corsika::random::RNGManager::GetInstance().GetRandomStream("UrQMD");
+
+    std::uniform_int_distribution<int> fBooleanDist{0, 1};
   };
 
   namespace constants {
-- 
GitLab