From bdaf8fcd19f455177695db8016d411b3d3c4a2b5 Mon Sep 17 00:00:00 2001
From: Jean-Marco Alameddine <jean-marco.alameddine@tu-dortmund.de>
Date: Mon, 29 Jun 2020 15:53:47 +0200
Subject: [PATCH] Fix conversion of CORSIKA direction to PROPOSAL direction

---
 Processes/Proposal/Interaction.cc |  6 ++++--
 Processes/Proposal/Interaction.h  | 17 +++++++++--------
 2 files changed, 13 insertions(+), 10 deletions(-)

diff --git a/Processes/Proposal/Interaction.cc b/Processes/Proposal/Interaction.cc
index e7ccbaec4..0e6234cf6 100644
--- a/Processes/Proposal/Interaction.cc
+++ b/Processes/Proposal/Interaction.cc
@@ -82,8 +82,10 @@ namespace corsika::process::proposal {
       auto point = PROPOSAL::Vector3D(vP.GetPosition().GetX() / 1_cm,
                                       vP.GetPosition().GetY() / 1_cm,
                                       vP.GetPosition().GetZ() / 1_cm);
-      auto p = vP.GetMomentum().GetComponents();
-      auto direction = PROPOSAL::Vector3D(p[0] / 1_GeV, p[1] / 1_GeV, p[2] / 1_GeV);
+      auto d = vP.GetDirection().GetComponents();
+      auto direction = PROPOSAL::Vector3D(d.GetX().magnitude(),
+                                          d.GetY().magnitude(),
+                                          d.GetZ().magnitude());
       auto loss =
           make_tuple(static_cast<int>(type), point, direction, v * primary_energy, 0.);
       auto sec = std::get<SECONDARIES>(calc->second)
diff --git a/Processes/Proposal/Interaction.h b/Processes/Proposal/Interaction.h
index 6f1aeb501..be6835069 100644
--- a/Processes/Proposal/Interaction.h
+++ b/Processes/Proposal/Interaction.h
@@ -43,14 +43,6 @@ namespace corsika::process::proposal {
               unique_ptr<PROPOSAL::Displacement>>;
     std::unordered_map<const NuclearComposition*, calculator_t> calculators;
 
-    enum { SECONDARIES, INTERACTION, DISPLACEMENT };
-    template <typename Particle>
-    auto GetCalculator(Particle& vP) {
-      auto& comp = vP.GetNode()->GetModelProperties().GetNuclearComposition();
-      auto calc_it = calculators.find(&comp);
-      if (calc_it != calculators.end()) return calc_it;
-      return BuildCalculator(vP.GetPID(), comp);
-    }
 
     auto BuildCalculator(particles::Code corsika_code, NuclearComposition const& comp) {
       auto medium = media.at(&comp);
@@ -92,6 +84,15 @@ namespace corsika::process::proposal {
       }
     } // namespace corsika::process::proposal
 
+    enum { SECONDARIES, INTERACTION, DISPLACEMENT };
+    template <typename Particle>
+    auto GetCalculator(Particle& vP) {
+        auto& comp = vP.GetNode()->GetModelProperties().GetNuclearComposition();
+        auto calc_it = calculators.find(&comp);
+        if (calc_it != calculators.end()) return calc_it;
+        return BuildCalculator(vP.GetPID(), comp);
+    }
+
   public:
     template <typename TEnvironment>
     Interaction(TEnvironment const& env, CORSIKA_ParticleCut const& cut);
-- 
GitLab