IAP GITLAB

Skip to content
Snippets Groups Projects
Commit 1682e17f authored by Maximilian Reininghaus's avatar Maximilian Reininghaus :vulcan: Committed by Maximilian Reininghaus
Browse files

test momentum conservation

parent 85325f8f
No related branches found
No related tags found
1 merge request!116Some improvements here and there
...@@ -48,6 +48,15 @@ auto sumCharge(TStackView const& view) { ...@@ -48,6 +48,15 @@ auto sumCharge(TStackView const& view) {
return totalCharge; return totalCharge;
} }
template <typename TStackView>
auto sumMomentum(TStackView const& view, geometry::CoordinateSystem const& vCS) {
geometry::Vector<hepenergy_d> sum{vCS, 0_eV, 0_eV, 0_eV};
for (auto const& p : view) { sum += p.GetMomentum(); }
return sum;
}
auto setupEnvironment(particles::Code vTargetCode) { auto setupEnvironment(particles::Code vTargetCode) {
// setup environment, geometry // setup environment, geometry
auto env = std::make_unique<environment::Environment<environment::IMediumModel>>(); auto env = std::make_unique<environment::Environment<environment::IMediumModel>>();
...@@ -159,28 +168,41 @@ TEST_CASE("UrQMD") { ...@@ -159,28 +168,41 @@ TEST_CASE("UrQMD") {
SECTION("nucleon projectile") { SECTION("nucleon projectile") {
auto [env, csPtr, nodePtr] = setupEnvironment(particles::Code::Oxygen); auto [env, csPtr, nodePtr] = setupEnvironment(particles::Code::Oxygen);
unsigned short constexpr A = 4, Z = 2; unsigned short constexpr A = 14, Z = 7;
auto [stackPtr, secViewPtr] = setupStack(A, Z, 400_GeV, nodePtr, *csPtr); auto [stackPtr, secViewPtr] = setupStack(A, Z, 400_GeV, nodePtr, *csPtr);
// must be assigned to variable, cannot be used as rvalue?! // must be assigned to variable, cannot be used as rvalue?!
auto projectile = secViewPtr->GetProjectile(); auto projectile = secViewPtr->GetProjectile();
auto const projectileMomentum = projectile.GetMomentum();
[[maybe_unused]] process::EProcessReturn const ret = urqmd.DoInteraction(projectile); [[maybe_unused]] process::EProcessReturn const ret = urqmd.DoInteraction(projectile);
REQUIRE(sumCharge(*secViewPtr) == REQUIRE(sumCharge(*secViewPtr) ==
Z + particles::GetChargeNumber(particles::Code::Oxygen)); Z + particles::GetChargeNumber(particles::Code::Oxygen));
auto const secMomSum =
sumMomentum(*secViewPtr, projectileMomentum.GetCoordinateSystem());
REQUIRE((secMomSum - projectileMomentum).norm() / projectileMomentum.norm() ==
Approx(0).margin(1e-2));
} }
SECTION("\"special\" projectile") { SECTION("\"special\" projectile") {
auto [env, csPtr, nodePtr] = setupEnvironment(particles::Code::Oxygen); auto [env, csPtr, nodePtr] = setupEnvironment(particles::Code::Oxygen);
auto [stackPtr, secViewPtr] = auto [stackPtr, secViewPtr] =
setupStack(particles::Code::K0, 400_GeV, nodePtr, *csPtr); setupStack(particles::Code::PiPlus, 400_GeV, nodePtr, *csPtr);
// must be assigned to variable, cannot be used as rvalue?! // must be assigned to variable, cannot be used as rvalue?!
auto projectile = secViewPtr->GetProjectile(); auto projectile = secViewPtr->GetProjectile();
auto const projectileMomentum = projectile.GetMomentum();
[[maybe_unused]] process::EProcessReturn const ret = urqmd.DoInteraction(projectile); [[maybe_unused]] process::EProcessReturn const ret = urqmd.DoInteraction(projectile);
REQUIRE(sumCharge(*secViewPtr) == REQUIRE(sumCharge(*secViewPtr) ==
particles::GetChargeNumber(particles::Code::K0) + particles::GetChargeNumber(particles::Code::PiPlus) +
particles::GetChargeNumber(particles::Code::Oxygen)); particles::GetChargeNumber(particles::Code::Oxygen));
auto const secMomSum =
sumMomentum(*secViewPtr, projectileMomentum.GetCoordinateSystem());
REQUIRE((secMomSum - projectileMomentum).norm() / projectileMomentum.norm() ==
Approx(0).margin(1e-2));
} }
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment