From a15c879a82632ff770dbffc7ce38d218d8e882f9 Mon Sep 17 00:00:00 2001
From: Maximilian Sackel <maximilian.sackel@tu-dortmund.de>
Date: Mon, 22 Jun 2020 20:10:26 +0000
Subject: [PATCH] change template class to RAII templatize constuctor

---
 Processes/Proposal/Interaction.cc | 40 +++++++++++++++++--------------
 Processes/Proposal/Interaction.h  | 12 +++-------
 2 files changed, 25 insertions(+), 27 deletions(-)

diff --git a/Processes/Proposal/Interaction.cc b/Processes/Proposal/Interaction.cc
index 7faaa9dbb..f84ea98b5 100644
--- a/Processes/Proposal/Interaction.cc
+++ b/Processes/Proposal/Interaction.cc
@@ -22,26 +22,27 @@ namespace corsika::process::proposal {
   using namespace corsika::units::si;
 
   template <>
-  std::unordered_map<particles::Code, PROPOSAL::ParticleDef>
-      Interaction<SetupEnvironment>::particles{
-          {particles::Code::Gamma, PROPOSAL::GammaDef()},
-          {particles::Code::Electron, PROPOSAL::EMinusDef()},
-          {particles::Code::Positron, PROPOSAL::EPlusDef()},
-          {particles::Code::MuMinus, PROPOSAL::MuMinusDef()},
-          {particles::Code::MuPlus, PROPOSAL::MuPlusDef()},
-          {particles::Code::TauPlus, PROPOSAL::TauPlusDef()},
-          {particles::Code::TauMinus, PROPOSAL::TauMinusDef()},
-      };
+  std::unordered_map<particles::Code, PROPOSAL::ParticleDef> Interaction::particles{
+      {particles::Code::Gamma, PROPOSAL::GammaDef()},
+      {particles::Code::Electron, PROPOSAL::EMinusDef()},
+      {particles::Code::Positron, PROPOSAL::EPlusDef()},
+      {particles::Code::MuMinus, PROPOSAL::MuMinusDef()},
+      {particles::Code::MuPlus, PROPOSAL::MuPlusDef()},
+      {particles::Code::TauPlus, PROPOSAL::TauPlusDef()},
+      {particles::Code::TauMinus, PROPOSAL::TauMinusDef()},
+  };
+
+  bool Interaction::CanInteract(particles::Code pcode) const noexcept {
+    auto search = particles.find(pcode);
+    if (search != particles.end()) return true;
+    return false;
+  };
 
   template <>
-  Interaction<SetupEnvironment>::Interaction(SetupEnvironment const& env,
-                                             CORSIKA_ParticleCut const& e_cut)
+  Interaction::Interaction(SetupEnvironment const& env, CORSIKA_ParticleCut const& e_cut)
       : fEnvironment(env)
       , cut(make_shared<const PROPOSAL::EnergyCutSettings>(e_cut.GetCutEnergy() / 1_GeV,
-                                                           1, false)) {}
-
-  template <>
-  void Interaction<SetupEnvironment>::Init() {
+                                                           1, false)) {
     auto all_compositions = std::vector<NuclearComposition>();
     fEnvironment.GetUniverse()->walk([&](auto& vtn) {
       if (vtn.HasModelProperties())
@@ -62,9 +63,12 @@ namespace corsika::process::proposal {
     }
   }
 
+  template <>
+  void Interaction::Init() {}
+
   template <>
   template <>
-  corsika::process::EProcessReturn Interaction<SetupEnvironment>::DoInteraction(
+  corsika::process::EProcessReturn Interaction::DoInteraction(
       setup::StackView::StackIterator& vP) {
     if (CanInteract(vP.GetPID())) {
       auto calc = GetCalculator(vP); // [CrossSections]
@@ -107,7 +111,7 @@ namespace corsika::process::proposal {
 
   template <>
   template <>
-  corsika::units::si::GrammageType Interaction<SetupEnvironment>::GetInteractionLength(
+  corsika::units::si::GrammageType Interaction::GetInteractionLength(
       setup::Stack::StackIterator& vP) {
     if (CanInteract(vP.GetPID())) {
       auto calc = GetCalculator(vP); // [CrossSections]
diff --git a/Processes/Proposal/Interaction.h b/Processes/Proposal/Interaction.h
index 503827f35..6eff905a8 100644
--- a/Processes/Proposal/Interaction.h
+++ b/Processes/Proposal/Interaction.h
@@ -27,12 +27,9 @@ using CORSIKA_ParticleCut = corsika::process::particle_cut::ParticleCut;
 
 namespace corsika::process::proposal {
 
-  template <class TEnvironment>
-  class Interaction
-      : public corsika::process::InteractionProcess<Interaction<TEnvironment>> {
+  class Interaction : public corsika::process::InteractionProcess<Interaction> {
 
   private:
-    TEnvironment const& fEnvironment;
     shared_ptr<const PROPOSAL::EnergyCutSettings> cut;
 
     static std::unordered_map<particles::Code, PROPOSAL::ParticleDef> particles;
@@ -41,11 +38,7 @@ namespace corsika::process::proposal {
     corsika::random::RNG& fRNG =
         corsika::random::RNGManager::GetInstance().GetRandomStream("p_rndm");
 
-    bool CanInteract(particles::Code pcode) const noexcept {
-      auto search = particles.find(pcode);
-      if (search != particles.end()) return true;
-      return false;
-    };
+    bool CanInteract(particles::Code pcode) const noexcept;
 
     using calculator_t =
         tuple<PROPOSAL::SecondariesCalculator, unique_ptr<PROPOSAL::Interaction>,
@@ -70,6 +63,7 @@ namespace corsika::process::proposal {
     }
 
   public:
+    template <typename TEnvironment>
     Interaction(TEnvironment const& env, CORSIKA_ParticleCut const& cut);
 
     void Init();
-- 
GitLab