From c9b778c8a00709b51f53859c13066dd3fa23aa1b Mon Sep 17 00:00:00 2001
From: Nikos Karastathis <n.karastathis@kit.edu>
Date: Tue, 20 Apr 2021 18:15:43 +0200
Subject: [PATCH] TimeCut class implemented

---
 corsika/detail/modules/TimeCut.inl | 29 ++++++++++++++++++++
 corsika/modules/TimeCut.hpp        | 44 ++++++++++++++++++++++++++++++
 2 files changed, 73 insertions(+)
 create mode 100644 corsika/detail/modules/TimeCut.inl
 create mode 100644 corsika/modules/TimeCut.hpp

diff --git a/corsika/detail/modules/TimeCut.inl b/corsika/detail/modules/TimeCut.inl
new file mode 100644
index 000000000..4bf2fa7dd
--- /dev/null
+++ b/corsika/detail/modules/TimeCut.inl
@@ -0,0 +1,29 @@
+/*
+ * (c) Copyright 2020 CORSIKA Project, corsika-project@lists.kit.edu
+ *
+ * This software is distributed under the terms of the GNU General Public
+ * Licence version 3 (GPL Version 3). See file LICENSE for a full version of
+ * the license.
+ */
+
+#pragma once
+
+#include <corsika/modules/TimeCut.hpp>
+
+namespace corsika {
+
+  inline TimeCut::TimeCut(const TimeType time)
+  : time_(time) {}
+
+  inline ProcessReturn TimeCut::doContinuous(
+      corsika::setup::Stack::particle_type& particle, corsika::setup::Trajectory const&,
+      bool const) {
+    CORSIKA_LOG_TRACE("TimeCut::doContinuous");
+    if (particle.getTime() >= time_) {
+      CORSIKA_LOG_TRACE("stopping continuous process");
+      return ProcessReturn::ParticleAbsorbed;
+    }
+    return ProcessReturn::Ok;
+  }
+
+} // namespace corsika
diff --git a/corsika/modules/TimeCut.hpp b/corsika/modules/TimeCut.hpp
new file mode 100644
index 000000000..ca622c5ce
--- /dev/null
+++ b/corsika/modules/TimeCut.hpp
@@ -0,0 +1,44 @@
+/*
+ * (c) Copyright 2020 CORSIKA Project, corsika-project@lists.kit.edu
+ *
+ * This software is distributed under the terms of the GNU General Public
+ * Licence version 3 (GPL Version 3). See file LICENSE for a full version of
+ * the license.
+ */
+
+#pragma once
+
+#include <corsika/framework/core/ParticleProperties.hpp>
+#include <corsika/framework/core/PhysicalUnits.hpp>
+#include <corsika/framework/process/ContinuousProcess.hpp>
+
+#include <corsika/setup/SetupStack.hpp>
+#include <corsika/setup/SetupTrajectory.hpp>
+
+namespace corsika {
+
+  /*
+   * Simple TimeCut process. Stops the sequence at the indicated time
+   */
+  class TimeCut : public ContinuousProcess<TimeCut> {
+
+  public:
+    TimeCut(TimeType const time);
+
+    ProcessReturn doContinuous(
+        corsika::setup::Stack::particle_type& vParticle,
+        corsika::setup::Trajectory const& vTrajectory,
+        const bool limitFlag = false); // this is not used for TimeCut
+    LengthType getMaxStepLength(corsika::setup::Stack::particle_type const&,
+                                corsika::setup::Trajectory const&) {
+      return meter * std::numeric_limits<double>::infinity();
+    }
+
+  private:
+    TimeType time_;
+
+  };
+
+} // namespace corsika
+
+#include <corsika/detail/modules/TimeCut.inl>
-- 
GitLab