From ac5a7044386dc475d2a9525b32ff0c7c3ad12f55 Mon Sep 17 00:00:00 2001 From: Maximilian Reininghaus <maximilian.reininghaus@kit.edu> Date: Wed, 19 Dec 2018 15:46:15 +0100 Subject: [PATCH] adapt NullModel to current ContinuousProcess interface --- Framework/ProcessSequence/ContinuousProcess.h | 9 +++-- Framework/ProcessSequence/DecayProcess.h | 3 +- Framework/ProcessSequence/ProcessSequence.h | 3 +- Processes/NullModel/NullModel.cc | 36 +------------------ Processes/NullModel/NullModel.h | 34 +++++++++--------- Processes/NullModel/testNullModel.cc | 6 ++-- 6 files changed, 33 insertions(+), 58 deletions(-) diff --git a/Framework/ProcessSequence/ContinuousProcess.h b/Framework/ProcessSequence/ContinuousProcess.h index c578f2352..32c1db6ab 100644 --- a/Framework/ProcessSequence/ContinuousProcess.h +++ b/Framework/ProcessSequence/ContinuousProcess.h @@ -13,6 +13,7 @@ #define _include_corsika_continuousprocess_h_ #include <corsika/process/ProcessReturn.h> // for convenience +#include <corsika/units/PhysicalUnits.h> //#include <corsika/setup/SetupTrajectory.h> namespace corsika::process { @@ -33,8 +34,12 @@ namespace corsika::process { // here starts the interface part // -> enforce derived to implement DoContinuous... - template <typename P, typename T, typename S> - inline EProcessReturn DoContinuous(P&, T&, S&) const; + template <typename Particle, typename Track, typename Stack> + EProcessReturn DoContinuous(Particle&, Track&, Stack&) const; + + // -> enforce derived to implement MaxStepLength... + template <typename Particle, typename Track> + corsika::units::si::LengthType MaxStepLength(Particle& p, Track& track) const; }; } // namespace corsika::process diff --git a/Framework/ProcessSequence/DecayProcess.h b/Framework/ProcessSequence/DecayProcess.h index 076a32410..0175cee60 100644 --- a/Framework/ProcessSequence/DecayProcess.h +++ b/Framework/ProcessSequence/DecayProcess.h @@ -29,14 +29,13 @@ namespace corsika::process { template <typename derived> struct DecayProcess { - derived& GetRef() { return static_cast<derived&>(*this); } const derived& GetRef() const { return static_cast<const derived&>(*this); } /// here starts the interface-definition part // -> enforce derived to implement DoDecay... template <typename Particle, typename Stack> - inline EProcessReturn DoDecay(Particle&, Stack&) const; + EProcessReturn DoDecay(Particle&, Stack&) const; template <typename Particle> corsika::units::si::TimeType GetLifetime(Particle& p) const; diff --git a/Framework/ProcessSequence/ProcessSequence.h b/Framework/ProcessSequence/ProcessSequence.h index d58c14b50..3f0e35798 100644 --- a/Framework/ProcessSequence/ProcessSequence.h +++ b/Framework/ProcessSequence/ProcessSequence.h @@ -176,8 +176,9 @@ namespace corsika::process { template <typename Particle, typename Track> corsika::units::si::LengthType MaxStepLength(Particle& p, Track& track) const { - corsika::units::si::LengthType max_length = + corsika::units::si::LengthType max_length = // if no other process in the sequence implements it std::numeric_limits<double>::infinity() * corsika::units::si::meter; + if constexpr (std::is_base_of<ContinuousProcess<T1>, T1>::value || is_process_sequence<T1>::value) { corsika::units::si::LengthType const len = A.MaxStepLength(p, track); diff --git a/Processes/NullModel/NullModel.cc b/Processes/NullModel/NullModel.cc index 313d38034..4130bf0c4 100644 --- a/Processes/NullModel/NullModel.cc +++ b/Processes/NullModel/NullModel.cc @@ -1,4 +1,3 @@ - /** * (c) Copyright 2018 CORSIKA Project, corsika-project@lists.kit.edu * @@ -11,37 +10,4 @@ #include <corsika/process/null_model/NullModel.h> -#include <corsika/logging/Logger.h> -#include <corsika/setup/SetupTrajectory.h> - -#include <iostream> -#include <limits> -using namespace std; - -using namespace corsika; -using namespace corsika::units::si; -using namespace corsika::process::null_model; - -template <typename Stack> -NullModel<Stack>::NullModel() {} - -template <typename Stack> -NullModel<Stack>::~NullModel() {} - -template <typename Stack> -process::EProcessReturn NullModel<Stack>::DoContinuous(Particle&, setup::Trajectory&, - Stack&) const { - return EProcessReturn::eOk; -} - -template <typename Stack> -double NullModel<Stack>::MaxStepLength(Particle&, setup::Trajectory&) const { - return std::numeric_limits<double>::infinity(); -} - -template <typename Stack> -void NullModel<Stack>::Init() {} - -#include <corsika/setup/SetupStack.h> - -template class process::null_model::NullModel<setup::Stack>; +void corsika::process::null_model::NullModel::Init() {} diff --git a/Processes/NullModel/NullModel.h b/Processes/NullModel/NullModel.h index 367c907f3..e1fc5b3ff 100644 --- a/Processes/NullModel/NullModel.h +++ b/Processes/NullModel/NullModel.h @@ -1,4 +1,3 @@ - /** * (c) Copyright 2018 CORSIKA Project, corsika-project@lists.kit.edu * @@ -15,26 +14,29 @@ #include <corsika/process/ContinuousProcess.h> #include <corsika/setup/SetupTrajectory.h> -namespace corsika::process { - - namespace null_model { +namespace corsika::process::null_model { - template <typename Stack> - class NullModel { + class NullModel : public corsika::process::ContinuousProcess<NullModel> { + corsika::units::si::LengthType fMaxStepLength{ + corsika::units::si::meter * std::numeric_limits<double>::infinity()}; - typedef typename Stack::ParticleType Particle; + public: + NullModel(corsika::units::si::LengthType maxStepLength) + : fMaxStepLength(maxStepLength) {} - public: - NullModel(); - ~NullModel(); + void Init(); - void Init(); - EProcessReturn DoContinuous(Particle&, corsika::setup::Trajectory&, Stack& s) const; - double MaxStepLength(Particle&, corsika::setup::Trajectory&) const; - }; + template <typename Particle, typename Track, typename Stack> + process::EProcessReturn DoContinuous(Particle&, Track&, Stack&) const { + return EProcessReturn::eOk; + } - } // namespace null_model + template <typename Particle, typename Track> + corsika::units::si::LengthType MaxStepLength(Particle&, Track&) const { + return fMaxStepLength; + } + }; -} // namespace corsika::process +} // namespace corsika::process::null_model #endif diff --git a/Processes/NullModel/testNullModel.cc b/Processes/NullModel/testNullModel.cc index ffcba5e03..56d635d1f 100644 --- a/Processes/NullModel/testNullModel.cc +++ b/Processes/NullModel/testNullModel.cc @@ -43,11 +43,13 @@ TEST_CASE("NullModel", "[processes]") { SECTION("interface") { - NullModel<setup::Stack> model; + NullModel model(10_m); model.Init(); [[maybe_unused]] const process::EProcessReturn ret = model.DoContinuous(particle, track, stack); - [[maybe_unused]] const double length = model.MaxStepLength(particle, track); + LengthType const length = model.MaxStepLength(particle, track); + + CHECK((length / 10_m) == Approx(1)); } } -- GitLab