diff --git a/Processes/Proposal/Interaction.cc b/Processes/Proposal/Interaction.cc index 7faaa9dbb8b75f28acd77bc69748d6d79b37ad6e..f84ea98b5d129608d509fb9202013fb920c44b41 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 503827f356892d636303a62c33f0ed31d5cb882d..6eff905a8599ad77b10cdd5c85903cc20588c97b 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();