diff --git a/Processes/Tracking/CMakeLists.txt b/Processes/Tracking/CMakeLists.txt index d0aebb6d311c2fdd4844069af0e893b058355d16..088b37a41dbd10cd79e30791a166a92ba5229e39 100644 --- a/Processes/Tracking/CMakeLists.txt +++ b/Processes/Tracking/CMakeLists.txt @@ -32,3 +32,13 @@ target_include_directories ( install (FILES ${MODEL_HEADERS} DESTINATION include/${MODEL_NAMESPACE}) +# #-- -- -- -- -- -- -- -- -- -- +# #code unit testing +CORSIKA_ADD_TEST (testTracking) +target_link_libraries ( + testTracking + ProcessTrackingLine + ProcessTrackingLeapFrogStraight + ProcessTrackingLeapFrogCurved + CORSIKAtesting +) diff --git a/Processes/TrackingLeapFrogStraight/testTrackingLeapFrogStraight.cc b/Processes/Tracking/testTracking.cc similarity index 77% rename from Processes/TrackingLeapFrogStraight/testTrackingLeapFrogStraight.cc rename to Processes/Tracking/testTracking.cc index e75cbf741cb0bacb914e939cd6fd884b568aadbc..fffe1ba2a3410ae07981557f8acdd935e7552a87 100644 --- a/Processes/TrackingLeapFrogStraight/testTrackingLeapFrogStraight.cc +++ b/Processes/Tracking/testTracking.cc @@ -6,7 +6,9 @@ * the license. */ -#include <corsika/process/tracking_bfield/Tracking.h> +#include <corsika/process/tracking_leapfrog_curved/Tracking.h> +#include <corsika/process/tracking_leapfrog_straight/Tracking.h> +#include <corsika/process/tracking_line/Tracking.h> #include <corsika/particles/ParticleProperties.h> @@ -28,19 +30,45 @@ using namespace corsika::units; using namespace corsika::geometry; using namespace corsika::units::si; +typedef corsika::geometry::Vector<corsika::units::si::magnetic_flux_density_d> + MagneticFieldVector; + template <typename T> int sgn(T val) { return (T(0) < val) - (val < T(0)); } -TEST_CASE("TrackingBField") { +/* + This is the unified and commond unit test for Tracking: + + - tracking_leapfrog_curved::Tracking + - tracking_leapfrog_straight::Tracking + - tracking_line::Tracking + + */ + +TEMPLATE_TEST_CASE("TrackingLeapfrog_Curved", "tracking", + tracking_leapfrog_curved::Tracking, + tracking_leapfrog_straight::Tracking, tracking_line::Tracking) { logging::SetLevel(logging::level::trace); const HEPEnergyType P0 = 10_GeV; auto PID = GENERATE(as<Code>{}, Code::MuPlus, Code::MuPlus, Code::Gamma); - auto Bfield = GENERATE(as<MagneticFluxType>{}, 0_T, 50_uT, -50_uT); + // for algorithms that know magnetic deflections choose: +-50uT, 0uT + // otherwise just 0uT + auto Bfield = GENERATE(filter( + []([[maybe_unused]] MagneticFluxType v) { + if constexpr (std::is_same_v<TestType, tracking_line::Tracking>) + return v == 0_uT; + else + return true; + }, + values<MagneticFluxType>({50_uT, 0_uT, -50_uT}))); + // particle --> (world) --> | --> (target) + // true: start inside "world" volume + // false: start inside "target" volume auto outer = GENERATE(as<bool>{}, true, false); SECTION(fmt::format("Tracking PID={}, Bfield={} uT, from outside={}", PID, @@ -57,7 +85,7 @@ TEST_CASE("TrackingBField") { if (chargeNumber != 0 and Bfield != 0_T) { deflect = -sgn(chargeNumber) * sgn(Bfield / 1_T); // direction of deflection LengthType const gyroradius = - P0 * 1_V / (constants::c * abs(chargeNumber) * abs(Bfield) * 1_eV); + P0 * 1_V / (constants::c * abs(chargeNumber) * abs(Bfield) * 1_eV); radius = gyroradius; } @@ -65,8 +93,7 @@ TEST_CASE("TrackingBField") { { [[maybe_unused]] const auto& env_dummy = env; } auto const& cs = *csPtr; - tracking_leapfrog_straight::Tracking tracking; - using tracking_leapfrog_straight::MagneticFieldVector; + TestType tracking; Point const center(cs, {0_m, 0_m, 0_m}); auto target = setup::Environment::CreateNode<geometry::Sphere>(center, radius); @@ -122,6 +149,7 @@ TEST_CASE("TrackingBField") { deflect, particle.GetMomentum().GetComponents(), particle.GetPosition().GetCoordinates(), pointCheck.GetCoordinates()); - CHECK((particle.GetPosition() - pointCheck).norm() / radius == Approx(0).margin(1e-3)); + CHECK((particle.GetPosition() - pointCheck).norm() / radius == + Approx(0).margin(1e-3)); } } diff --git a/Processes/TrackingLeapFrogCurved/CMakeLists.txt b/Processes/TrackingLeapFrogCurved/CMakeLists.txt index 141929f27d4133a764da2699cb17729d7c9c6ea3..8b3794d695fc1b0ac1e57d98241f7f876ede0833 100644 --- a/Processes/TrackingLeapFrogCurved/CMakeLists.txt +++ b/Processes/TrackingLeapFrogCurved/CMakeLists.txt @@ -34,11 +34,4 @@ target_include_directories ( install (FILES ${MODEL_HEADERS} DESTINATION include/${MODEL_NAMESPACE}) -# #-- -- -- -- -- -- -- -- -- -- -# #code unit testing -CORSIKA_ADD_TEST (testTrackingLeapFrogCurved) -target_link_libraries ( - testTrackingLeapFrogCurved - ProcessTrackingLeapFrogCurved - CORSIKAtesting -) +# Note: all Tracking Algorithms are tested in testTracking diff --git a/Processes/TrackingLeapFrogStraight/CMakeLists.txt b/Processes/TrackingLeapFrogStraight/CMakeLists.txt index afd5d99c74c310ee32ee49b494a293e2cecdeba7..fba5345506d54fb40d457f58c5a285fa7119abf4 100644 --- a/Processes/TrackingLeapFrogStraight/CMakeLists.txt +++ b/Processes/TrackingLeapFrogStraight/CMakeLists.txt @@ -5,7 +5,7 @@ set ( set ( MODEL_NAMESPACE - corsika/process/tracking_leapfrag_straight + corsika/process/tracking_leapfrog_straight ) add_library (ProcessTrackingLeapFrogStraight INTERFACE) @@ -33,11 +33,4 @@ target_include_directories ( install (FILES ${MODEL_HEADERS} DESTINATION include/${MODEL_NAMESPACE}) -# #-- -- -- -- -- -- -- -- -- -- -# #code unit testing -CORSIKA_ADD_TEST (testTrackingLeapFrogStraight) -target_link_libraries ( - testTrackingLeapFrogStraight - ProcessTrackingLeapFrogStraight - CORSIKAtesting -) +# Note: all Tracking Algorithms are tested in testTracking diff --git a/Processes/TrackingLeapFrogStraight/testTrackingBFieldStack.h b/Processes/TrackingLeapFrogStraight/testTrackingBFieldStack.h deleted file mode 100644 index 98d7ce3fe84c5f5cafc4e37e8245ce65823a03b4..0000000000000000000000000000000000000000 --- a/Processes/TrackingLeapFrogStraight/testTrackingBFieldStack.h +++ /dev/null @@ -1,58 +0,0 @@ -/* - * (c) Copyright 2018 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/environment/Environment.h> - -#include <corsika/geometry/Point.h> -#include <corsika/geometry/Vector.h> - -#include <corsika/particles/ParticleProperties.h> - -#include <corsika/stack/CombinedStack.h> -#include <corsika/stack/node/GeometryNodeStackExtension.h> -#include <corsika/stack/nuclear_extension/NuclearStackExtension.h> - -#include <corsika/units/PhysicalUnits.h> - -class TestMagneticField { - using MagneticFieldVector = - corsika::geometry::Vector<corsika::units::si::magnetic_flux_density_d>; - - TestMagneticField() = delete; - -public: - TestMagneticField(const corsika::units::si::MagneticFluxType& field) - : Bz_(field) {} - - void SetMagneticField(const corsika::units::si::MagneticFluxType& field) { Bz_ = field; } - MagneticFieldVector GetMagneticField(corsika::geometry::Point const& p) const { - using namespace corsika::units::si; - return MagneticFieldVector(p.GetCoordinateSystem(), 0_T, 0_T, Bz_); - } - -private: - corsika::units::si::MagneticFluxType Bz_; -}; - -using TestEnvironmentType = corsika::environment::Environment<TestMagneticField>; - -template <typename T> -using SetupGeometryDataInterface = - corsika::stack::node::GeometryDataInterface<T, TestEnvironmentType>; - -// combine particle data stack with geometry information for tracking -template <typename StackIter> -using StackWithGeometryInterface = corsika::stack::CombinedParticleInterface< - corsika::stack::nuclear_extension::ParticleDataStack::MPIType, - SetupGeometryDataInterface, StackIter>; - -using TestTrackingBFieldStack = corsika::stack::CombinedStack< - typename corsika::stack::nuclear_extension::ParticleDataStack::StackImpl, - corsika::stack::node::GeometryData<TestEnvironmentType>, StackWithGeometryInterface>; diff --git a/Processes/TrackingLine/CMakeLists.txt b/Processes/TrackingLine/CMakeLists.txt index a5376eac12a5536450e097cad650a702376b261f..75dcaec7e4df4f510adab8f0801413fee77c90e0 100644 --- a/Processes/TrackingLine/CMakeLists.txt +++ b/Processes/TrackingLine/CMakeLists.txt @@ -34,11 +34,4 @@ target_include_directories ( install (FILES ${MODEL_HEADERS} DESTINATION include/${MODEL_NAMESPACE}) -# #-- -- -- -- -- -- -- -- -- -- -# #code unit testing -CORSIKA_ADD_TEST (testTrackingLine) -target_link_libraries ( - testTrackingLine - ProcessTrackingLine - CORSIKAtesting -) +# Note: all Tracking Algorithms are tested in testTracking diff --git a/Processes/TrackingLine/testTrackingLine.cc b/Processes/TrackingLine/testTrackingLine.cc deleted file mode 100644 index df652418526951dd41a28f66e8b2ff466fd81808..0000000000000000000000000000000000000000 --- a/Processes/TrackingLine/testTrackingLine.cc +++ /dev/null @@ -1,35 +0,0 @@ -/* - * (c) Copyright 2018 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. - */ - -#include <corsika/process/tracking_line/Tracking.h> -#include <testTrackingLineStack.h> // test-build, and include file is obtained from CMAKE_CURRENT_SOURCE_DIR - -#include <corsika/environment/Environment.h> -#include <corsika/particles/ParticleProperties.h> - -#include <corsika/geometry/Point.h> -#include <corsika/geometry/Sphere.h> -#include <corsika/geometry/Vector.h> -#include <corsika/geometry/Intersections.hpp> - -#include <corsika/setup/SetupTrajectory.h> -using corsika::setup::Trajectory; - -#include <catch2/catch.hpp> - -using namespace corsika; -using namespace corsika::process; -using namespace corsika::units; -using namespace corsika::geometry; - -#include <iostream> -using namespace std; -using namespace corsika::units::si; - -TEST_CASE("TrackingLine") { -}