From 98b865d5488f6da968fa02b44564ec4a41849204 Mon Sep 17 00:00:00 2001
From: "Joachim Wuttke (h)" <j.wuttke@fz-juelich.de>
Date: Thu, 22 Jul 2021 09:03:43 +0200
Subject: [PATCH] take reference k_z from slice 0 or N-1, depending on
 sign(k_infty)

---
 Resample/Slice/KzComputation.cpp              |  12 +++++++-----
 Tests/ReferenceData/Std/RectDetWithRoi.int.gz | Bin 3376 -> 3355 bytes
 .../Core/Fresnel/KzComputationTest.cpp        |   2 +-
 3 files changed, 8 insertions(+), 6 deletions(-)

diff --git a/Resample/Slice/KzComputation.cpp b/Resample/Slice/KzComputation.cpp
index ef5d8043956..20ed4589a8d 100644
--- a/Resample/Slice/KzComputation.cpp
+++ b/Resample/Slice/KzComputation.cpp
@@ -44,15 +44,17 @@ complex_t checkForUnderflow(complex_t val)
 std::vector<complex_t> Compute::Kz::computeReducedKz(const SliceStack& slices, kvector_t k)
 {
     const size_t N = slices.size();
-    const double n_ref = slices[0].material().refractiveIndex(M_TWOPI / k.mag()).real();
+
+    const size_t i_ref = k.z() > 0. ? N-1 : 0;
+    const double n_ref = slices[i_ref].material().refractiveIndex(M_TWOPI / k.mag()).real();
     const double k_base = k.mag() * (k.z() > 0.0 ? -1 : 1);
 
     std::vector<complex_t> result(N);
     // Calculate refraction angle, expressed as k_z, for each layer.
-    complex_t rad = slices[0].scalarReducedPotential(k, n_ref);
-    result[0] = k_base * std::sqrt(rad);
-    for (size_t i = 1; i < N; ++i) {
-        rad = checkForUnderflow(slices[i].scalarReducedPotential(k, n_ref));
+    for (size_t i = 0; i < N; ++i) {
+        complex_t rad = slices[i].scalarReducedPotential(k, n_ref);
+        if (i!=i_ref)
+            rad = checkForUnderflow(rad);
         result[i] = k_base * std::sqrt(rad);
     }
     return result;
diff --git a/Tests/ReferenceData/Std/RectDetWithRoi.int.gz b/Tests/ReferenceData/Std/RectDetWithRoi.int.gz
index b699596c86db5ffb1657a09cddd7a2c4b6493b52..0bea92ef6de9726f96038b4b2666b39828e36889 100644
GIT binary patch
literal 3355
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

literal 3376
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
GJOBXf$eqCe

diff --git a/Tests/UnitTests/Core/Fresnel/KzComputationTest.cpp b/Tests/UnitTests/Core/Fresnel/KzComputationTest.cpp
index dd398ed5c53..315c6b1d203 100644
--- a/Tests/UnitTests/Core/Fresnel/KzComputationTest.cpp
+++ b/Tests/UnitTests/Core/Fresnel/KzComputationTest.cpp
@@ -33,7 +33,7 @@ TEST_F(KzComputationTest, initial)
     mLayer.addLayer(layer3);
     mLayer.addLayer(layer4);
 
-    kvector_t k = vecOfLambdaAlphaPhi(1.0, 1.0 * Units::deg, 0.0);
+    kvector_t k = vecOfLambdaAlphaPhi(1.0, -1.0 * Units::deg, 0.0);
 
     const auto re_sample = ProcessedSample::make(mLayer, {});
 
-- 
GitLab