From 413d06addcd5e0065715533fff7e726073cae0af Mon Sep 17 00:00:00 2001
From: ralfulrich <ralf.ulrich@kit.edu>
Date: Thu, 29 Nov 2018 12:56:30 +0100
Subject: [PATCH] fixed bug in sibyll2corsika

---
 Documentation/Examples/cascade_example.cc | 12 ++++++++----
 Processes/Sibyll/ParticleConversion.h     |  2 +-
 Processes/Sibyll/code_generator.py        | 11 +++++++----
 3 files changed, 16 insertions(+), 9 deletions(-)

diff --git a/Documentation/Examples/cascade_example.cc b/Documentation/Examples/cascade_example.cc
index 13997ef13..0d6551cd5 100644
--- a/Documentation/Examples/cascade_example.cc
+++ b/Documentation/Examples/cascade_example.cc
@@ -30,6 +30,7 @@ using namespace corsika::units;
 using namespace corsika::particles;
 using namespace corsika::random;
 
+#include <typeinfo>
 #include <iostream>
 using namespace std;
 
@@ -42,11 +43,14 @@ public:
   template <typename Particle>
   double MinStepLength(Particle& p) const {
     // beam particles for sibyll : 1, 2, 3 for p, pi, k
-    Code c_id = p.GetPID();
-    //sibyll::SibyllCodeIntType s_id = process::sibyll::ConvertToSibyll( p.GetPID() );
+    corsika::particles::Code c_id = p.GetPID();
+    corsika::process::sibyll::Code s_id = process::sibyll::ConvertToSibyll( p.GetPID() );
+    corsika::particles::Code p_id_2 = process::sibyll::ConvertFromSibyll( corsika::process::sibyll::Code::Proton );
+    cout << p_id_2 << endl;
     std::cout << "MinStepLength: particle input " << "corsika id: " << c_id << std::endl;
-      //std::cout << "MinStepLength: particle input " << "sibyll id: " << s_id << std::endl;
-    //    std::cout << "MinStepLength: particle input " << "sibyll id: " << process::sibyll::ConvertToSibyll( p.GetPID() ) << std::endl;
+    auto test = static_cast<corsika::process::sibyll::SibyllCodeIntType>(s_id);
+    std::cout << "MinStepLength: particle input " << "sibyll id: |" << (int)test << "|" <<std::endl;
+											  // std::cout << "MinStepLength: particle input " << "sibyll id: " << process::sibyll::ConvertToSibyll( p.GetPID() ) << std::endl;
     int kBeam   = 1;
 
     /* 
diff --git a/Processes/Sibyll/ParticleConversion.h b/Processes/Sibyll/ParticleConversion.h
index 2ad007016..3347220a7 100644
--- a/Processes/Sibyll/ParticleConversion.h
+++ b/Processes/Sibyll/ParticleConversion.h
@@ -37,7 +37,7 @@ namespace corsika::process::sibyll {
   corsika::particles::Code constexpr ConvertFromSibyll(Code pCode) {
     return sibyll2corsika[static_cast<SibyllCodeIntType>(pCode) - minSibyll];
   }
-  
+
 } // namespace corsika::process::sibyll
 
 #endif
diff --git a/Processes/Sibyll/code_generator.py b/Processes/Sibyll/code_generator.py
index dc082cdb8..aff36785e 100755
--- a/Processes/Sibyll/code_generator.py
+++ b/Processes/Sibyll/code_generator.py
@@ -60,12 +60,15 @@ def generate_corsika2sibyll(pythia_db):
 
 # generates the look-up table to convert sibyll codes to corsika codes    
 def generate_sibyll2corsika(pythia_db) :
+    minID = 0
+    for identifier, pData in pythia_db.items() :
+        if 'sibyll_code' in pData:
+            minID = min(minID, pData['sibyll_code'])
+            
     pDict = {}
     for identifier, pData in pythia_db.items() :
         if 'sibyll_code' in pData:
-            sib_code = pData['sibyll_code']
-            # corsika_code = pData['ngc_code']
-            #d[sib_code] = (corsika_code, identifier)
+            sib_code = pData['sibyll_code'] - minID
             pDict[sib_code] = identifier
     
     nPart = max(pDict.keys()) - min(pDict.keys()) + 1
@@ -79,7 +82,7 @@ def generate_sibyll2corsika(pythia_db) :
         string += "  corsika::particles::Code::{:s}, \n".format(identifier)
     
     string += "};\n"
-    string += "SibyllCodeIntType constexpr minSibyll = {:d};\n".format(min(pDict.keys()))
+    string += "SibyllCodeIntType constexpr minSibyll = {:d};\n".format(minID)
     return string
 
 
-- 
GitLab