From c65a84c89a23f07416ec1193618322d916e82fda Mon Sep 17 00:00:00 2001 From: ralfulrich <ralf.ulrich@kit.edu> Date: Thu, 6 Jun 2019 12:38:31 +0200 Subject: [PATCH] added unit test for ObservationPlane --- Processes/ObservationPlane/CMakeLists.txt | 14 +-- .../ObservationPlane/testObservationPlane.cc | 96 +++++++++++++++++++ 2 files changed, 103 insertions(+), 7 deletions(-) create mode 100644 Processes/ObservationPlane/testObservationPlane.cc diff --git a/Processes/ObservationPlane/CMakeLists.txt b/Processes/ObservationPlane/CMakeLists.txt index cb656d312..2707887a1 100644 --- a/Processes/ObservationPlane/CMakeLists.txt +++ b/Processes/ObservationPlane/CMakeLists.txt @@ -34,11 +34,11 @@ install (FILES ${MODEL_HEADERS} DESTINATION include/${MODEL_NAMESPACE}) # -------------------- # code unit testing -#CORSIKA_ADD_TEST(testObservationPlane) -#target_link_libraries ( -# testObservationPlane -# ProcessObservationPlane -# CORSIKAstackinterface -# CORSIKAthirdparty # for catch2 -#) +CORSIKA_ADD_TEST(testObservationPlane) +target_link_libraries ( + testObservationPlane + ProcessObservationPlane + CORSIKAstackinterface + CORSIKAthirdparty # for catch2 +) diff --git a/Processes/ObservationPlane/testObservationPlane.cc b/Processes/ObservationPlane/testObservationPlane.cc new file mode 100644 index 000000000..1df725253 --- /dev/null +++ b/Processes/ObservationPlane/testObservationPlane.cc @@ -0,0 +1,96 @@ +/* + * (c) Copyright 2019 CORSIKA Project, corsika-project@lists.kit.edu + * + * See file AUTHORS for a list of contributors. + * + * 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. + */ + +#define CATCH_CONFIG_MAIN // This tells Catch to provide a main() - only do this in one + // cpp file +#include <catch2/catch.hpp> + +#include <corsika/process/observation_plane/ObservationPlane.h> + +#include <corsika/geometry/Point.h> +#include <corsika/geometry/RootCoordinateSystem.h> +#include <corsika/geometry/Vector.h> + +#include <corsika/particles/ParticleProperties.h> +#include <corsika/units/PhysicalUnits.h> + +using namespace corsika::units::si; +using namespace corsika::process::observation_plane; +using namespace corsika; +using namespace corsika::geometry; +using namespace corsika::particles; + +TEST_CASE("ContinuousProcess interface", "[proccesses][observation_plane]") { + + auto const& rootCS = RootCoordinateSystem::GetInstance().GetRootCoordinateSystem(); + + /* + Test with downward going 1_GeV neutrino, starting at 0,1_m,10m + + ObservationPlane has origin at 0,0,0 + */ + + Point const start(rootCS, {0_m, 1_m, 10_m}); + Vector<units::si::SpeedType::dimension_type> vec(rootCS, 0_m / second, 0_m / second, + -units::constants::c); + Line line(start, vec); + Trajectory<Line> track(line, 10_m / units::constants::c); + + // setup particle stack, and add primary particle + setup::Stack stack; + stack.Clear(); + { + auto elab2plab = [](HEPEnergyType Elab, HEPMassType m) { + return sqrt((Elab - m) * (Elab + m)); + }; + stack.AddParticle( + std::tuple<Code, units::si::HEPEnergyType, corsika::stack::MomentumVector, Point, + units::si::TimeType>{ + Code::NuMu, 1_GeV, + corsika::stack::MomentumVector( + rootCS, {0_GeV, 0_GeV, -elab2plab(1_GeV, NuMu::GetMass())}), + Point(rootCS, {1_m, 1_m, 10_m}), 0_ns}); + } + auto particle = stack.GetNextParticle(); + + SECTION("horizontal plane") { + + Plane const obsPlane(Point(rootCS, {0_m, 0_m, 0_m}), + Vector<dimensionless_d>(rootCS, {0., 0., 1.})); + ObservationPlane obs(obsPlane, "particles.dat"); + + obs.Init(); + [[maybe_unused]] const LengthType length = obs.MaxStepLength(particle, track); + [[maybe_unused]] const process::EProcessReturn ret = + obs.DoContinuous(particle, track); + + SECTION("steplength") { REQUIRE(length == 10_m); } + + /* + SECTION("horizontal plane") { + REQUIRE(true); // todo: we have to check content of output file... + + } + */ + } + + SECTION("inclined plane") { + Plane const obsPlane(Point(rootCS, {0_m, 0_m, 0_m}), + Vector<dimensionless_d>(rootCS, {1., 1., 0.5})); + ObservationPlane obs(obsPlane, "particles.dat"); + + obs.Init(); + [[maybe_unused]] const LengthType length = obs.MaxStepLength(particle, track); + [[maybe_unused]] const process::EProcessReturn ret = + obs.DoContinuous(particle, track); + + SECTION("steplength") { REQUIRE(length == 12_m); } + } +} -- GitLab