diff --git a/corsika/detail/media/HomogeneousMedium.inl b/corsika/detail/media/HomogeneousMedium.inl new file mode 100644 index 0000000000000000000000000000000000000000..adbe03c4f31c4516300030bfbf170122663d4124 --- /dev/null +++ b/corsika/detail/media/HomogeneousMedium.inl @@ -0,0 +1,46 @@ +/* + * (c) Copyright 2020 CORSIKA Project, corsika-project@lists.kit.edu + * + * This software is distributed under the terms of the GNU General Public + * Licence version 3 (GPL Version 3). See file LICENSE for a full version of + * the license. + */ + +#pragma once + +#include <corsika/framework/core/PhysicalUnits.hpp> +#include <corsika/framework/geometry/Line.hpp> +#include <corsika/framework/geometry/Point.hpp> +#include <corsika/framework/geometry/Trajectory.hpp> +#include <corsika/media/NuclearComposition.hpp> + +namespace corsika { + + template <typename T> + HomogeneousMedium<T>::HomogeneousMedium(units::si::MassDensityType density, + NuclearComposition nuclComp) + : density_(density) + , nuclComp_(nuclComp) {} + + template <typename T> + units::si::MassDensityType HomogeneousMedium<T>::getMassDensity(Point const&) const { + return density_; + } + template <typename T> + NuclearComposition const& HomogeneousMedium<T>::getNuclearComposition() const { + return nuclComp_; + } + + template <typename T> + units::si::GrammageType HomogeneousMedium<T>::integratedGrammage( + Trajectory<Line> const&, units::si::LengthType to) const { + using namespace units::si; + return to * density_; + } + + template <typename T> + units::si::LengthType HomogeneousMedium<T>::arclengthFromGrammage( + Trajectory<Line> const&, units::si::GrammageType grammage) const { + return grammage / density_; + } +} // namespace corsika diff --git a/corsika/media/HomogeneousMedium.hpp b/corsika/media/HomogeneousMedium.hpp index 81101825ac559bf7b4923827d16f7c4818f22b86..56ea8a25d804c11d468327d83fa7fa7b9a3eeb60 100644 --- a/corsika/media/HomogeneousMedium.hpp +++ b/corsika/media/HomogeneousMedium.hpp @@ -8,49 +8,39 @@ #pragma once -#include <corsika/framework/core/ParticleProperties.hpp> #include <corsika/framework/core/PhysicalUnits.hpp> #include <corsika/framework/geometry/Line.hpp> #include <corsika/framework/geometry/Point.hpp> #include <corsika/framework/geometry/Trajectory.hpp> -#include <corsika/framework/random/RNGManager.hpp> #include <corsika/media/NuclearComposition.hpp> -#include <corsika/setup/SetupTrajectory.h> - -#include <cassert> - /** * a homogeneous medium */ namespace corsika { - template <class T> + template <typename T> class HomogeneousMedium : public T { - MassDensityType const fDensity; - NuclearComposition const fNuclComp; + units::si::MassDensityType const density_; + NuclearComposition const nuclComp_; public: - HomogeneousMedium(MassDensityType pDensity, NuclearComposition pNuclComp) - : fDensity(pDensity) - , fNuclComp(pNuclComp) {} + HomogeneousMedium(units::si::MassDensityType density, NuclearComposition nuclComp); - MassDensityType GetMassDensity(corsika::Point const&) const override { - return fDensity; - } + units::si::MassDensityType getMassDensity(Point const&) const override; - NuclearComposition const& GetNuclearComposition() const override { return fNuclComp; } + NuclearComposition const& getNuclearComposition() const override; - GrammageType IntegratedGrammage(corsika::Trajectory<corsika::Line> const&, - LengthType pTo) const override { - return pTo * fDensity; - } + units::si::GrammageType integratedGrammage( + Trajectory<Line> const&, + units::si::LengthType to) const override; - LengthType ArclengthFromGrammage(corsika::Trajectory<corsika::Line> const&, - GrammageType pGrammage) const override { - return pGrammage / fDensity; - } + units::si::LengthType arclengthFromGrammage( + Trajectory<Line> const&, + units::si::GrammageType grammage) const override; }; } // namespace corsika + +#include <corsika/detail/media/HomogeneousMedium.inl>