From 17e56f7bea01bafd3a72d714b3c979ffaf0cf240 Mon Sep 17 00:00:00 2001 From: Maximilian Sackel <maximilian.sackel@tu-dortmund.de> Date: Wed, 15 Jul 2020 10:49:56 +0000 Subject: [PATCH] Change unneccessary particle map to array and enable continuous losses for gammas. --- Processes/Proposal/ContinuousProcess.cc | 23 +++++++---------------- Processes/Proposal/ContinuousProcess.h | 6 +++++- Processes/Proposal/Interaction.cc | 17 ++++------------- Processes/Proposal/Interaction.h | 8 ++++++-- 4 files changed, 22 insertions(+), 32 deletions(-) diff --git a/Processes/Proposal/ContinuousProcess.cc b/Processes/Proposal/ContinuousProcess.cc index 53eddcc85..d95202e5d 100644 --- a/Processes/Proposal/ContinuousProcess.cc +++ b/Processes/Proposal/ContinuousProcess.cc @@ -18,18 +18,10 @@ namespace corsika::process::proposal { using namespace corsika::environment; using namespace corsika::units::si; - unordered_map<particles::Code, PROPOSAL::ParticleDef> ContinuousProcess::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 ContinuousProcess::CanInteract(particles::Code pcode) const noexcept { - if (particles.find(pcode) != particles.end()) return true; + if (std::find(tracked_particles.begin(), tracked_particles.end(), pcode) != + tracked_particles.end()) + return true; return false; } @@ -40,9 +32,8 @@ namespace corsika::process::proposal { , fRNG(corsika::random::RNGManager::GetInstance().GetRandomStream("proposal")) { auto all_compositions = std::vector<const NuclearComposition*>(); _env.GetUniverse()->walk([&](auto& vtn) { - if (vtn.HasModelProperties()) { + if (vtn.HasModelProperties()) all_compositions.push_back(&vtn.GetModelProperties().GetNuclearComposition()); - } }); for (auto& ncarg : all_compositions) { auto comp_vec = std::vector<PROPOSAL::Components::Component>(); @@ -71,7 +62,7 @@ namespace corsika::process::proposal { template <> void ContinuousProcess::Scatter(SetupParticle& vP, HEPEnergyType const& loss, - GrammageType const& grammage) { + GrammageType const& grammage) { auto calc = GetCalculator(vP); auto d = vP.GetDirection().GetComponents(); auto direction = PROPOSAL::Vector3D(d.GetX().magnitude(), d.GetY().magnitude(), @@ -94,10 +85,10 @@ namespace corsika::process::proposal { template <> EProcessReturn ContinuousProcess::DoContinuous(SetupParticle& vP, SetupTrack const& vT) { - if (vP.GetChargeNumber() == 0) return process::EProcessReturn::eOk; + if (!CanInteract(vP.GetPID())) return process::EProcessReturn::eOk; auto dX = vP.GetNode()->GetModelProperties().IntegratedGrammage(vT, vT.GetLength()); auto energy_loss = TotalEnergyLoss(vP, dX); - Scatter(vP, energy_loss, dX); + if (vP.GetChargeNumber() != 0) Scatter(vP, energy_loss, dX); vP.SetEnergy(vP.GetEnergy() - energy_loss); if (vP.GetEnergy() < cut.GetECut()) return process::EProcessReturn::eParticleAbsorbed; vP.SetMomentum(vP.GetMomentum() * vP.GetEnergy() / vP.GetMomentum().GetNorm()); diff --git a/Processes/Proposal/ContinuousProcess.h b/Processes/Proposal/ContinuousProcess.h index 7a42c1224..7e234ac63 100644 --- a/Processes/Proposal/ContinuousProcess.h +++ b/Processes/Proposal/ContinuousProcess.h @@ -34,7 +34,11 @@ namespace corsika::process::proposal { : public corsika::process::ContinuousProcess<ContinuousProcess> { CORSIKA_ParticleCut& cut; corsika::random::RNG& fRNG; - static unordered_map<particles::Code, PROPOSAL::ParticleDef> particles; + static constexpr std::array<particles::Code, 7> tracked_particles{ + particles::Code::Gamma, particles::Code::Electron, particles::Code::Positron, + particles::Code::MuMinus, particles::Code::MuPlus, particles::Code::TauPlus, + particles::Code::TauMinus, + }; unordered_map<const NuclearComposition*, PROPOSAL::Medium> media; bool CanInteract(particles::Code pcode) const noexcept; diff --git a/Processes/Proposal/Interaction.cc b/Processes/Proposal/Interaction.cc index 60ae3c81f..fb567b398 100644 --- a/Processes/Proposal/Interaction.cc +++ b/Processes/Proposal/Interaction.cc @@ -19,18 +19,10 @@ namespace corsika::process::proposal { using namespace corsika::environment; using namespace corsika::units::si; - 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 { - if (particles.find(pcode) != particles.end()) return true; + if (std::find(tracked_particles.begin(), tracked_particles.end(), pcode) != + tracked_particles.end()) + return true; return false; } @@ -40,9 +32,8 @@ namespace corsika::process::proposal { , fRNG(corsika::random::RNGManager::GetInstance().GetRandomStream("proposal")) { auto all_compositions = std::vector<const NuclearComposition*>(); _env.GetUniverse()->walk([&](auto& vtn) { - if (vtn.HasModelProperties()) { + if (vtn.HasModelProperties()) all_compositions.push_back(&vtn.GetModelProperties().GetNuclearComposition()); - } }); for (auto& ncarg : all_compositions) { auto comp_vec = std::vector<Component_PROPOSAL>(); diff --git a/Processes/Proposal/Interaction.h b/Processes/Proposal/Interaction.h index 6d0ad2f37..f3c3b2cf0 100644 --- a/Processes/Proposal/Interaction.h +++ b/Processes/Proposal/Interaction.h @@ -17,7 +17,7 @@ #include <corsika/process/particle_cut/ParticleCut.h> #include <corsika/random/RNGManager.h> #include <corsika/random/UniformRealDistribution.h> -#include <unordered_map> +#include <array> #include "PROPOSAL/PROPOSAL.h" using namespace corsika::environment; @@ -32,7 +32,11 @@ namespace corsika::process::proposal { class Interaction : public corsika::process::InteractionProcess<Interaction> { CORSIKA_ParticleCut& cut; corsika::random::RNG& fRNG; - static std::unordered_map<particles::Code, PROPOSAL::ParticleDef> particles; + static constexpr std::array<particles::Code, 7> tracked_particles{ + particles::Code::Gamma, particles::Code::Electron, particles::Code::Positron, + particles::Code::MuMinus, particles::Code::MuPlus, particles::Code::TauPlus, + particles::Code::TauMinus, + }; std::unordered_map<const NuclearComposition*, PROPOSAL::Medium> media; bool CanInteract(particles::Code pcode) const noexcept; -- GitLab