IAP GITLAB

Skip to content
Snippets Groups Projects
Commit 17e56f7b authored by Maximilian Sackel's avatar Maximilian Sackel
Browse files

Change unneccessary particle map to array and enable continuous losses for gammas.

parent 524c403a
No related branches found
No related tags found
No related merge requests found
......@@ -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());
......
......@@ -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;
......
......@@ -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>();
......
......@@ -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;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment