From b93be13c3a5efbcc6ad6f68461294c94a67efd55 Mon Sep 17 00:00:00 2001
From: Felix Riehn <felix@matilda>
Date: Fri, 30 Nov 2018 17:44:17 +0000
Subject: [PATCH] added primitive decay step length

---
 Documentation/Examples/cascade_example.cc | 37 +++++++++++++++++++++--
 1 file changed, 34 insertions(+), 3 deletions(-)

diff --git a/Documentation/Examples/cascade_example.cc b/Documentation/Examples/cascade_example.cc
index f208cf29..b4486335 100644
--- a/Documentation/Examples/cascade_example.cc
+++ b/Documentation/Examples/cascade_example.cc
@@ -337,12 +337,42 @@ class ProcessDecay : public corsika::process::BaseProcess<ProcessDecay> {
 public:
   ProcessDecay() {}
   void Init() {}
+  
   template <typename Particle>
   double MinStepLength(Particle& p) const {
+    EnergyType E   = p.GetEnergy();
+    MassType m     = corsika::particles::GetMass(p.GetPID());
+    // env.GetDensity();
+    const MassDensityType density = 1.e3 * kilogram  / ( 1_cm * 1_cm * 1_cm ); 
+    
+    const double gamma = E / m / constants::cSquared;
+    // lifetimes not implemented yet
+    TimeType t0;
+    switch( p.GetPID() ){
+    case Code::PiPlus :
+      t0 = 1.e-5 * 1_s;
+      break;
+      
+    case Code::KPlus :
+      t0 = 1.e-5 * 1_s;
+      break;
+      
+    default:
+      t0 = 1.e8 * 1_s;
+      break;
+    }
+    cout << "ProcessDecay: MinStep: t0: " << t0 << endl;
+    cout << "ProcessDecay: MinStep: gamma: " << gamma << endl;
+    cout << "ProcessDecay: MinStep: density: " << density << endl;
+    // return as column density
+    const double x0 = density * t0 * gamma * constants::c / kilogram * 1_cm * 1_cm;
+    cout << "ProcessDecay: MinStep: x0: " << x0 << endl;
+    return x0;
   }
-   template <typename Particle, typename Stack>
+  
+  template <typename Particle, typename Stack>
   void DoDiscrete(Particle& p, Stack& s) const {
-   }
+  }
   
   template <typename Particle, typename Trajectory, typename Stack>
   EProcessReturn DoContinuous(Particle&, Trajectory&, Stack&) const {
@@ -359,7 +389,8 @@ int main() {
   tracking_line::TrackingLine<setup::Stack> tracking;
   stack_inspector::StackInspector<setup::Stack> p0(true);
   ProcessSplit p1;
-  const auto sequence = p0 + p1;
+  ProcessDecay p2;
+  const auto sequence = p0 + p1 + p2;
   setup::Stack stack;
 
   corsika::cascade::Cascade EAS(tracking, sequence, stack);
-- 
GitLab