From 4064b5d53052d66ef32ba2731c7dd12ad926000d Mon Sep 17 00:00:00 2001 From: Maximilian Reininghaus <maximilian.reininghaus@kit.edu> Date: Thu, 9 May 2019 19:27:25 -0300 Subject: [PATCH] fixed bug in EnergyLoss binning --- Processes/EnergyLoss/EnergyLoss.cc | 15 ++++++++------- Processes/EnergyLoss/EnergyLoss.h | 31 +++++++++++++----------------- 2 files changed, 21 insertions(+), 25 deletions(-) diff --git a/Processes/EnergyLoss/EnergyLoss.cc b/Processes/EnergyLoss/EnergyLoss.cc index fd8484911..aaa6dfd61 100644 --- a/Processes/EnergyLoss/EnergyLoss.cc +++ b/Processes/EnergyLoss/EnergyLoss.cc @@ -147,7 +147,8 @@ namespace corsika::process::energy_loss { (0.5 * log(aux) - beta2 - Cadj / Z - delta / 2 + barkas + bloch) * dX; } - process::EProcessReturn EnergyLoss::DoContinuous(SetupParticle& p, SetupTrack& t) { + process::EProcessReturn EnergyLoss::DoContinuous(SetupParticle& p, + SetupTrack const& t) { if (p.GetChargeNumber() == 0) return process::EProcessReturn::eOk; GrammageType const dX = p.GetNode()->GetModelProperties().IntegratedGrammage(t, t.GetLength()); @@ -169,7 +170,7 @@ namespace corsika::process::energy_loss { p.SetEnergy(Enew); MomentumUpdate(p, Enew); fEnergyLossTot += dE; - GetXbin(p, dE); + GetXbin(p, t, dE); return status; } @@ -199,17 +200,17 @@ namespace corsika::process::energy_loss { #include <corsika/geometry/CoordinateSystem.h> - int EnergyLoss::GetXbin(corsika::setup::Stack::ParticleType& vP, + int EnergyLoss::GetXbin(SetupParticle const& vP, SetupTrack const& vTrack, const HEPEnergyType dE) { using namespace corsika::geometry; CoordinateSystem const& rootCS = RootCoordinateSystem::GetInstance().GetRootCoordinateSystem(); - Point pos1(rootCS, 0_m, 0_m, 0_m); - Point pos2(rootCS, 0_m, 0_m, vP.GetPosition().GetCoordinates()[2]); - Vector delta = (pos2 - pos1) / 1_s; - Trajectory t(Line(pos1, delta), 1_s); + Point const pos1(rootCS, 0_m, 0_m, 0_m); + Point const pos2(rootCS, 0_m, 0_m, vTrack.GetPosition(0).GetCoordinates()[2]); + auto const delta = (pos2 - pos1) / 1_s; + Trajectory const t(Line(pos1, delta), 1_s); GrammageType const grammage = vP.GetNode()->GetModelProperties().IntegratedGrammage(t, t.GetLength()); diff --git a/Processes/EnergyLoss/EnergyLoss.h b/Processes/EnergyLoss/EnergyLoss.h index db0d29adf..711e135f7 100644 --- a/Processes/EnergyLoss/EnergyLoss.h +++ b/Processes/EnergyLoss/EnergyLoss.h @@ -25,35 +25,30 @@ namespace corsika::process::energy_loss { class EnergyLoss : public corsika::process::ContinuousProcess<EnergyLoss> { using MeVgcm2 = decltype(1e6 * units::si::electronvolt / units::si::gram * - corsika::units::si::square(1e-2 * units::si::meter)); + units::si::square(1e-2 * units::si::meter)); - void MomentumUpdate(corsika::setup::Stack::ParticleType&, - corsika::units::si::HEPEnergyType Enew); + void MomentumUpdate(setup::Stack::ParticleType&, units::si::HEPEnergyType Enew); public: EnergyLoss(); void Init() {} + process::EProcessReturn DoContinuous(setup::Stack::ParticleType&, + setup::Trajectory const&); + units::si::LengthType MaxStepLength(setup::Stack::ParticleType const&, + setup::Trajectory const&) const; - corsika::process::EProcessReturn DoContinuous(corsika::setup::Stack::ParticleType&, - corsika::setup::Trajectory&); - corsika::units::si::LengthType MaxStepLength( - corsika::setup::Stack::ParticleType const&, - corsika::setup::Trajectory const&) const; - - corsika::units::si::HEPEnergyType GetTotal() const { return fEnergyLossTot; } + units::si::HEPEnergyType GetTotal() const { return fEnergyLossTot; } void PrintProfile() const; private: - static corsika::units::si::HEPEnergyType BetheBloch( - corsika::setup::Stack::ParticleType const& p, - const corsika::units::si::GrammageType dX); + static units::si::HEPEnergyType BetheBloch(setup::Stack::ParticleType const& p, + const units::si::GrammageType dX); - int GetXbin(corsika::setup::Stack::ParticleType& p, - const corsika::units::si::HEPEnergyType dE); + int GetXbin(setup::Stack::ParticleType const&, setup::Trajectory const&, units::si::HEPEnergyType); - corsika::units::si::HEPEnergyType fEnergyLossTot; - corsika::units::si::GrammageType fdX; // profile binning - std::map<int, double> fProfile; // longitudinal profile + units::si::HEPEnergyType fEnergyLossTot; + units::si::GrammageType fdX; // profile binning + std::map<int, double> fProfile; // longitudinal profile }; } // namespace corsika::process::energy_loss -- GitLab