From 9cf2ab6b4e4432df7b60da9a2be7699d9cfeee69 Mon Sep 17 00:00:00 2001 From: ralfulrich <ralf.ulrich@kit.edu> Date: Mon, 21 Jun 2021 23:26:47 +0200 Subject: [PATCH] coverage --- corsika/detail/media/BaseTabular.inl | 1 - corsika/detail/modules/urqmd/UrQMD.inl | 9 ++--- corsika/media/BaseTabular.hpp | 34 +------------------ corsika/media/SlidingPlanarTabular.hpp | 7 ++-- corsika/stack/DummyStack.hpp | 2 ++ tests/media/testEnvironment.cpp | 27 +++++++++++++++ tests/modules/testEpos.cpp | 1 + .../stack/testGeometryNodeStackExtension.cpp | 26 ++++++++++++++ 8 files changed, 65 insertions(+), 42 deletions(-) diff --git a/corsika/detail/media/BaseTabular.inl b/corsika/detail/media/BaseTabular.inl index 916fb0320..3a02f63ad 100644 --- a/corsika/detail/media/BaseTabular.inl +++ b/corsika/detail/media/BaseTabular.inl @@ -140,7 +140,6 @@ namespace corsika { CORSIKA_LOG_ERROR("cannot integrate negative grammage"); throw std::runtime_error("negative grammage error"); } - LengthType const height = (traj.getPosition(0) - point_).getNorm() - referenceHeight_; double const fbin = height / deltaHeight_; diff --git a/corsika/detail/modules/urqmd/UrQMD.inl b/corsika/detail/modules/urqmd/UrQMD.inl index 4b40f19f4..9c9bcfe1a 100644 --- a/corsika/detail/modules/urqmd/UrQMD.inl +++ b/corsika/detail/modules/urqmd/UrQMD.inl @@ -88,7 +88,8 @@ namespace corsika::urqmd { break; default: { // LCOV_EXCL_START since this can never happen due to canInteract CORSIKA_LOG_WARN("UrQMD cross-section not tabulated for {}", projectileCode); - return CrossSectionType::zero(); // LCOV_EXCL_STOP + return CrossSectionType::zero(); + // LCOV_EXCL_STOP } } @@ -395,9 +396,9 @@ namespace corsika::urqmd { boost::filesystem::ifstream file(filename, std::ios::in); if (!file.is_open()) { - throw std::runtime_error( - filename.native() + - " could not be opened."); // LCOV_EXCL_LINE since this is pointless to test + // LCOV_EXCL_START since this is pointless to test + throw std::runtime_error(filename.native() + " could not be opened."); + // LCOV_EXCL_STOP } std::string line; diff --git a/corsika/media/BaseTabular.hpp b/corsika/media/BaseTabular.hpp index a552b6648..cecf7cc8a 100644 --- a/corsika/media/BaseTabular.hpp +++ b/corsika/media/BaseTabular.hpp @@ -21,7 +21,7 @@ namespace corsika { /** * This class provides the grammage/length conversion functionality for - * (locally) flat exponential atmospheres. + * (locally) flat tabulated atmospheres. */ template <typename TDerived> class BaseTabular { @@ -38,40 +38,8 @@ namespace corsika { MassDensityType getMassDensity(LengthType const height) const; - // clang-format off - /** - * For a (normalized) axis \f$ \vec{a} \f$, the grammage along a non-orthogonal line with (normalized) - * direction \f$ \vec{u} \f$ is given by - * \f[ - * X = \frac{\varrho_0 \lambda}{\vec{u} \cdot \vec{a}} \left( \exp\left( \vec{u} \cdot \vec{a} \frac{l}{\lambda} \right) - 1 \right) - * \f], where \f$ \varrho_0 \f$ is the density at the starting point. - * - * If \f$ \vec{u} \cdot \vec{a} = 0 \f$, the calculation is just like with a homogeneous density: - * \f[ - * X = \varrho_0 l; - * \f] - */ - // clang-format on GrammageType getIntegratedGrammage(BaseTrajectory const& line) const; - // clang-format off - /** - * For a (normalized) axis \f$ \vec{a} \f$, the length of a non-orthogonal line with (normalized) - * direction \f$ \vec{u} \f$ corresponding to grammage \f$ X \f$ is given by - * \f[ - * l = \begin{cases} - * \frac{\lambda}{\vec{u} \cdot \vec{a}} \log\left(Y \right), & \text{if} Y := 0 > 1 + - * \vec{u} \cdot \vec{a} \frac{X}{\rho_0 \lambda} - * \infty & \text{else,} - * \end{cases} - * \f] where \f$ \varrho_0 \f$ is the density at the starting point. - * - * If \f$ \vec{u} \cdot \vec{a} = 0 \f$, the calculation is just like with a homogeneous density: - * \f[ - * l = \frac{X}{\varrho_0} - * \f] - */ - // clang-format on LengthType getArclengthFromGrammage(BaseTrajectory const& line, GrammageType const grammage) const; diff --git a/corsika/media/SlidingPlanarTabular.hpp b/corsika/media/SlidingPlanarTabular.hpp index 4550792aa..afd0d88e2 100644 --- a/corsika/media/SlidingPlanarTabular.hpp +++ b/corsika/media/SlidingPlanarTabular.hpp @@ -12,7 +12,6 @@ #include <corsika/framework/core/PhysicalUnits.hpp> #include <corsika/framework/geometry/Line.hpp> #include <corsika/framework/geometry/Point.hpp> -#include <corsika/framework/random/RNGManager.hpp> #include <corsika/framework/geometry/BaseTrajectory.hpp> #include <corsika/media/NuclearComposition.hpp> #include <corsika/media/BaseTabular.hpp> @@ -23,11 +22,11 @@ namespace corsika { /** * The SlidingPlanarTabular models mass density as * \f[ - * \varrho(r) = \varrho_0 \exp\left( \frac{|p_0 - r|}{\lambda} \right). + * \varrho(r) = \varrho_0 \rho\left( |p_0 - r| \right). * \f] * For grammage/length conversion, the density distribution is approximated as - * locally flat at the starting point \f$ r_0 \f$ of the trajectory with the axis pointing - * from \f$ p_0 \f$ to \f$ r_0 \f$. + * locally flat at the starting point \f$ r_0 \f$ of the trajectory with the + * axis pointing rom \f$ p_0 \f$ to \f$ r_0 \f$ defining the local height. */ // clang-format on diff --git a/corsika/stack/DummyStack.hpp b/corsika/stack/DummyStack.hpp index 9bbd51403..bcba30f1d 100644 --- a/corsika/stack/DummyStack.hpp +++ b/corsika/stack/DummyStack.hpp @@ -71,6 +71,8 @@ namespace corsika::dummy_stack { */ void copy(const int /*i1*/, const int /*i2*/) {} + void swap(const int, const int) {} + void incrementSize() { entries_++; } void decrementSize() { entries_--; } diff --git a/tests/media/testEnvironment.cpp b/tests/media/testEnvironment.cpp index 224bed806..372cfdb9a 100644 --- a/tests/media/testEnvironment.cpp +++ b/tests/media/testEnvironment.cpp @@ -83,6 +83,9 @@ TEST_CASE("HomogeneousMedium") { std::vector<float>{1.f}); HomogeneousMedium<IMediumModel> const medium(19.2_g / cube(1_cm), protonComposition); + CHECK(protonComposition.getFractions() == std::vector<float>{1.}); + CHECK(protonComposition.getComponents() == std::vector<Code>{Code::Proton}); + CHECK_THROWS(NuclearComposition({Code::Proton}, {1.1})); CHECK_THROWS(NuclearComposition({Code::Proton}, {0.99})); } @@ -103,6 +106,10 @@ TEST_CASE("FlatExponential") { LengthType const length = 2_m; TimeType const tEnd = length / speed; + CHECK(medium.getNuclearComposition().getFractions() == std::vector<float>{1.}); + CHECK(medium.getNuclearComposition().getComponents() == + std::vector<Code>{Code::Proton}); + SECTION("horizontal") { Line const line(gOrigin, Vector<SpeedType::dimension_type>( gCS, {speed, 0_m / second, 0_m / second})); @@ -245,6 +252,26 @@ TEST_CASE("SlidingPlanarTabular") { SlidingPlanarTabular<IMediumModel> const medium(gOrigin, rhoFunc, 1000, 10_m, protonComposition); + SECTION("not possible") { + CHECK_THROWS(medium.getMassDensity({gCS, {0_m, 1e10_m, 0_m}})); + + SpeedType const speed = 5_m / second; + TimeType const tEnd = 1e10_s; + Line const line( + {gCS, {0_m, 0_m, 1_m}}, + Vector<SpeedType::dimension_type>(gCS, {0_m / second, 0_m / second, speed})); + setup::Trajectory const trajectory = + setup::testing::make_track<setup::Trajectory>(line, tEnd); + CHECK_THROWS(medium.getIntegratedGrammage(trajectory)); + + Line const line2( + {gCS, {0_m, 0_m, 1e9_m}}, + Vector<SpeedType::dimension_type>(gCS, {0_m / second, 0_m / second, speed})); + setup::Trajectory const trajectory2 = + setup::testing::make_track<setup::Trajectory>(line2, tEnd); + CHECK_THROWS(medium.getArclengthFromGrammage(trajectory2, 1e3_g / square(1_cm))); + } + SECTION("density") { CHECK(medium.getMassDensity({gCS, {0_m, 0_m, 3_m}}) / medium.getMassDensity({gCS, {0_m, 3_m, 0_m}}) == diff --git a/tests/modules/testEpos.cpp b/tests/modules/testEpos.cpp index a4c4ef593..aa2a006f2 100644 --- a/tests/modules/testEpos.cpp +++ b/tests/modules/testEpos.cpp @@ -38,6 +38,7 @@ TEST_CASE("epos", "modules") { corsika::epos::convertFromEpos(corsika::epos::EposCode::Electron)); CHECK(Code::Proton == corsika::epos::convertFromEpos(corsika::epos::EposCode::Proton)); + CHECK_THROWS(corsika::epos::convertFromEpos(corsika::epos::EposCode::Unknown)); } SECTION("corsika -> epos") { diff --git a/tests/stack/testGeometryNodeStackExtension.cpp b/tests/stack/testGeometryNodeStackExtension.cpp index 9cc29edcc..2bc2e1160 100644 --- a/tests/stack/testGeometryNodeStackExtension.cpp +++ b/tests/stack/testGeometryNodeStackExtension.cpp @@ -86,4 +86,30 @@ TEST_CASE("GeometryNodeStackExtension", "stack") { CHECK(v == 99 * data); CHECK(s.getEntries() == 0); } + + SECTION("copy and swap") { + + const int data1 = 16; + const int data2 = 17; + + TestStack s; + // add 99 particles, each 10th particle is a nucleus with A=i and Z=A/2! + for (int i = 0; i < 4; ++i) { + auto p = s.addParticle(std::tuple<dummy_stack::NoData>{noData}); + p.setNode(i % 2 == 0 ? &data1 : &data2); + } + + CHECK(*((s.first() + 0)).getNode() == 16); + CHECK(*((s.first() + 1)).getNode() == 17); + CHECK(*((s.first() + 2)).getNode() == 16); + CHECK(*((s.first() + 3)).getNode() == 17); + + s.copy(s.first() + 0, s.first() + 1); + CHECK(*((s.first() + 0)).getNode() == 16); + CHECK(*((s.first() + 1)).getNode() == 16); + + s.swap(s.first() + 3, s.first() + 1); + CHECK(*((s.first() + 1)).getNode() == 17); + CHECK(*((s.first() + 3)).getNode() == 16); + } } -- GitLab