From 36075d3468b243cc2c2bc2085eeb5b1afc97d21b Mon Sep 17 00:00:00 2001
From: Tobias Winchen <tobias.winchen@rwth-aachen.de>
Date: Tue, 6 Apr 2021 10:51:22 +0000
Subject: [PATCH] Cleaned up tests

---
 .../edd/detail/GatedSpectrometer.cu           |  10 -
 .../edd/detail/GatedStokesSpectrometer.cu     |   8 -
 .../edd/test/src/GatedSpectrometerTest.cu     | 113 ++++----
 .../test/src/GatedStokesSpectrometerTest.cu   | 263 ------------------
 4 files changed, 61 insertions(+), 333 deletions(-)
 delete mode 100644 psrdada_cpp/effelsberg/edd/test/src/GatedStokesSpectrometerTest.cu

diff --git a/psrdada_cpp/effelsberg/edd/detail/GatedSpectrometer.cu b/psrdada_cpp/effelsberg/edd/detail/GatedSpectrometer.cu
index 456d40e9..c77edc7d 100644
--- a/psrdada_cpp/effelsberg/edd/detail/GatedSpectrometer.cu
+++ b/psrdada_cpp/effelsberg/edd/detail/GatedSpectrometer.cu
@@ -98,16 +98,6 @@ GatedSpectrometer<HandlerType, InputType, OutputType>::GatedSpectrometer(
 
   _nchans = _fft_length / 2 + 1;
 
-  // Calculate the scaling parameters for 8 bit output
-  float dof = 2 * _naccumulate;
-  float scale =
-      std::pow(input_level * std::sqrt(static_cast<float>(_nchans)), 2);
-  float offset = scale * dof;
-  float scaling = scale * std::sqrt(2 * dof) / output_level;
-  BOOST_LOG_TRIVIAL(debug)
-      << "Correction factors for 8-bit conversion: offset = " << offset
-      << ", scaling = " << scaling;
-
   inputDataStream = new InputType(fft_length, nbits, _dadaBufferLayout);
 
   //How many output spectra per input block?
diff --git a/psrdada_cpp/effelsberg/edd/detail/GatedStokesSpectrometer.cu b/psrdada_cpp/effelsberg/edd/detail/GatedStokesSpectrometer.cu
index 6b6e8671..fa590b5e 100644
--- a/psrdada_cpp/effelsberg/edd/detail/GatedStokesSpectrometer.cu
+++ b/psrdada_cpp/effelsberg/edd/detail/GatedStokesSpectrometer.cu
@@ -202,14 +202,6 @@ GatedStokesSpectrometer<HandlerType>::GatedStokesSpectrometer(
 
   _nchans = _fft_length / 2 + 1;
   int batch = _nsamps_per_buffer / _fft_length;
-  float dof = 2 * _naccumulate;
-  float scale =
-      std::pow(input_level * std::sqrt(static_cast<float>(_nchans)), 2);
-  float offset = scale * dof;
-  float scaling = scale * std::sqrt(2 * dof) / output_level;
-  BOOST_LOG_TRIVIAL(debug)
-      << "Correction factors for 8-bit conversion: offset = " << offset
-      << ", scaling = " << scaling;
 
   BOOST_LOG_TRIVIAL(debug) << "Generating FFT plan";
   int n[] = {static_cast<int>(_fft_length)};
diff --git a/psrdada_cpp/effelsberg/edd/test/src/GatedSpectrometerTest.cu b/psrdada_cpp/effelsberg/edd/test/src/GatedSpectrometerTest.cu
index 495375dd..911cd27c 100644
--- a/psrdada_cpp/effelsberg/edd/test/src/GatedSpectrometerTest.cu
+++ b/psrdada_cpp/effelsberg/edd/test/src/GatedSpectrometerTest.cu
@@ -78,67 +78,76 @@ TEST(GatedSpectrometer, stokes_IQUV)
 }
 
 
-TEST(GatedSpectrometer, stokes_accumulate)
-{
-    CUDA_ERROR_CHECK(cudaDeviceSynchronize());
-    size_t nchans = 8 * 1024 * 1024 + 1;
-    size_t naccumulate = 5;
-
-    thrust::device_vector<float2> P0(nchans * naccumulate);
-    thrust::device_vector<float2> P1(nchans * naccumulate);
-    thrust::fill(P0.begin(), P0.end(), (float2){0, 0});
-    thrust::fill(P1.begin(), P1.end(), (float2){0, 0});
-    thrust::device_vector<float> I(nchans);
-    thrust::device_vector<float> Q(nchans);
-    thrust::device_vector<float> U(nchans);
-    thrust::device_vector<float> V(nchans);
-    thrust::fill(I.begin(), I.end(), 0);
-    thrust::fill(Q.begin(), Q.end(), 0);
-    thrust::fill(U.begin(), U.end(), 0);
-    thrust::fill(V.begin(), V.end(), 0);
-
-    // This channel should be left circular polarized
-    size_t idx0 = 23;
-    for (int k = 0; k< naccumulate; k++)
-    {
-        size_t idx = idx0 + k * nchans;
-        P0[idx] = (float2){0.0f, 1.0f/std::sqrt(2)};
-        P1[idx] = (float2){1.0f/std::sqrt(2),0.0f};
-    }
 
-    psrdada_cpp::effelsberg::edd::stokes_accumulate<<<1024, 1024>>>(
-          thrust::raw_pointer_cast(P0.data()),
-          thrust::raw_pointer_cast(P1.data()),
-          thrust::raw_pointer_cast(I.data()),
-          thrust::raw_pointer_cast(Q.data()),
-          thrust::raw_pointer_cast(U.data()),
-          thrust::raw_pointer_cast(V.data()),
-          nchans,
-          naccumulate
-            );
-
-    CUDA_ERROR_CHECK(cudaDeviceSynchronize());
-    thrust::pair<thrust::device_vector<float>::iterator, thrust::device_vector<float>::iterator> minmax;
+void testParam(size_t nchans, size_t naccumulate){
+
+        CUDA_ERROR_CHECK(cudaDeviceSynchronize());
+
+        thrust::device_vector<float2> P0(nchans * naccumulate);
+        thrust::device_vector<float2> P1(nchans * naccumulate);
+        thrust::fill(P0.begin(), P0.end(), (float2){0, 0});
+        thrust::fill(P1.begin(), P1.end(), (float2){0, 0});
+        thrust::device_vector<float> I(nchans);
+        thrust::device_vector<float> Q(nchans);
+        thrust::device_vector<float> U(nchans);
+        thrust::device_vector<float> V(nchans);
+        thrust::fill(I.begin(), I.end(), 0);
+        thrust::fill(Q.begin(), Q.end(), 0);
+        thrust::fill(U.begin(), U.end(), 0);
+        thrust::fill(V.begin(), V.end(), 0);
+
+        // This channel should be left circular polarized
+        size_t idx0 = 23;
+        for (int k = 0; k< naccumulate; k++)
+        {
+            size_t idx = idx0 + k * nchans;
+            P0[idx] = (float2){0.0f, 1.0f/std::sqrt(2)};
+            P1[idx] = (float2){1.0f/std::sqrt(2),0.0f};
+        }
+
+        psrdada_cpp::effelsberg::edd::stokes_accumulate<<<1024, 1024>>>(
+              thrust::raw_pointer_cast(P0.data()),
+              thrust::raw_pointer_cast(P1.data()),
+              thrust::raw_pointer_cast(I.data()),
+              thrust::raw_pointer_cast(Q.data()),
+              thrust::raw_pointer_cast(U.data()),
+              thrust::raw_pointer_cast(V.data()),
+              nchans,
+              naccumulate
+                );
+
+        CUDA_ERROR_CHECK(cudaDeviceSynchronize());
+        thrust::pair<thrust::device_vector<float>::iterator, thrust::device_vector<float>::iterator> minmax;
+
+        minmax = thrust::minmax_element(I.begin(), I.end());
+        EXPECT_FLOAT_EQ(*minmax.first, 0);
+        EXPECT_FLOAT_EQ(*minmax.second, naccumulate);
+
+        minmax = thrust::minmax_element(Q.begin(), Q.end());
+        EXPECT_FLOAT_EQ(*minmax.first, 0);
+        EXPECT_FLOAT_EQ(*minmax.second, 0);
+
+        minmax = thrust::minmax_element(U.begin(), U.end());
+        EXPECT_FLOAT_EQ(*minmax.first, 0);
+        EXPECT_FLOAT_EQ(*minmax.second, 0);
+
+        minmax = thrust::minmax_element(V.begin(), V.end());
+        EXPECT_FLOAT_EQ(*minmax.first, -1. * naccumulate);
+        EXPECT_FLOAT_EQ(*minmax.second, 0);
+    };
 
-    minmax = thrust::minmax_element(I.begin(), I.end());
-    EXPECT_FLOAT_EQ(*minmax.first, 0);
-    EXPECT_FLOAT_EQ(*minmax.second, naccumulate);
 
-    minmax = thrust::minmax_element(Q.begin(), Q.end());
-    EXPECT_FLOAT_EQ(*minmax.first, 0);
-    EXPECT_FLOAT_EQ(*minmax.second, 0);
+TEST(GatedSpectrometer, stokes_accumulate)
+{
 
-    minmax = thrust::minmax_element(U.begin(), U.end());
-    EXPECT_FLOAT_EQ(*minmax.first, 0);
-    EXPECT_FLOAT_EQ(*minmax.second, 0);
 
-    minmax = thrust::minmax_element(V.begin(), V.end());
-    EXPECT_FLOAT_EQ(*minmax.first, -1. * naccumulate);
-    EXPECT_FLOAT_EQ(*minmax.second, 0);
+    testParam(8 * 1024 * 1024 + 1, 5);
+    testParam(1024 + 1, 5);
 }
 
 
 
+
 TEST(GatedSpectrometer, GatingKernel)
 {
   const size_t blockSize = 1024;
diff --git a/psrdada_cpp/effelsberg/edd/test/src/GatedStokesSpectrometerTest.cu b/psrdada_cpp/effelsberg/edd/test/src/GatedStokesSpectrometerTest.cu
deleted file mode 100644
index 9c88f4c4..00000000
--- a/psrdada_cpp/effelsberg/edd/test/src/GatedStokesSpectrometerTest.cu
+++ /dev/null
@@ -1,263 +0,0 @@
-#include "psrdada_cpp/effelsberg/edd/GatedStokesSpectrometer.cuh"
-
-#include "psrdada_cpp/dada_null_sink.hpp"
-#include "psrdada_cpp/multilog.hpp"
-#include "gtest/gtest.h"
-
-#include "thrust/device_vector.h"
-#include "thrust/extrema.h"
-
-
-TEST(GatedStokesSpectrometer, BitManipulationMacros) {
-  for (int i = 0; i < 64; i++) {
-    uint64_t v = 0;
-    SET_BIT(v, i);
-
-    for (int j = 0; j < 64; j++) {
-      if (j == i)
-        EXPECT_EQ(TEST_BIT(v, j), 1);
-      else
-        EXPECT_EQ(TEST_BIT(v, j), 0);
-    }
-  }
-}
-
-
-TEST(GatedStokesSpectrometer, stokes_IQUV)
-{
-    float I,Q,U,V;
-    // No field
-    psrdada_cpp::effelsberg::edd::stokes_IQUV((float2){0.0f,0.0f}, (float2){0.0f,0.0f}, I, Q, U, V);
-    EXPECT_FLOAT_EQ(I, 0);
-    EXPECT_FLOAT_EQ(Q, 0);
-    EXPECT_FLOAT_EQ(U, 0);
-    EXPECT_FLOAT_EQ(V, 0);
-
-    // For p1 = Ex, p2 = Ey
-    // horizontal polarized
-    psrdada_cpp::effelsberg::edd::stokes_IQUV((float2){1.0f,0.0f}, (float2){0.0f,0.0f}, I, Q, U, V);
-    EXPECT_FLOAT_EQ(I, 1);
-    EXPECT_FLOAT_EQ(Q, 1);
-    EXPECT_FLOAT_EQ(U, 0);
-    EXPECT_FLOAT_EQ(V, 0);
-
-    // vertical polarized
-    psrdada_cpp::effelsberg::edd::stokes_IQUV((float2){0.0f,0.0f}, (float2){1.0f,0.0f}, I, Q, U, V);
-    EXPECT_FLOAT_EQ(I, 1);
-    EXPECT_FLOAT_EQ(Q, -1);
-    EXPECT_FLOAT_EQ(U, 0);
-    EXPECT_FLOAT_EQ(V, 0);
-
-    //linear +45 deg.
-    psrdada_cpp::effelsberg::edd::stokes_IQUV((float2){1.0f/std::sqrt(2),0.0f}, (float2){1.0f/std::sqrt(2),0.0f}, I, Q, U, V);
-    EXPECT_FLOAT_EQ(I, 1);
-    EXPECT_FLOAT_EQ(Q, 0);
-    EXPECT_FLOAT_EQ(U, 1);
-    EXPECT_FLOAT_EQ(V, 0);
-
-    //linear -45 deg.
-    psrdada_cpp::effelsberg::edd::stokes_IQUV((float2){-1.0f/std::sqrt(2),0.0f}, (float2){1.0f/std::sqrt(2),0.0f}, I, Q, U, V);
-    EXPECT_FLOAT_EQ(I, 1);
-    EXPECT_FLOAT_EQ(Q, 0);
-    EXPECT_FLOAT_EQ(U, -1);
-    EXPECT_FLOAT_EQ(V, 0);
-
-    //left circular
-    psrdada_cpp::effelsberg::edd::stokes_IQUV((float2){.0f,1.0f/std::sqrt(2)}, (float2){1.0f/std::sqrt(2),.0f}, I, Q, U, V);
-    EXPECT_FLOAT_EQ(I, 1);
-    EXPECT_FLOAT_EQ(Q, 0);
-    EXPECT_FLOAT_EQ(U, 0);
-    EXPECT_FLOAT_EQ(V, -1);
-
-    // right circular
-    psrdada_cpp::effelsberg::edd::stokes_IQUV((float2){.0f,-1.0f/std::sqrt(2)}, (float2){1.0f/std::sqrt(2),.0f}, I, Q, U, V);
-    EXPECT_FLOAT_EQ(I, 1);
-    EXPECT_FLOAT_EQ(Q, 0);
-    EXPECT_FLOAT_EQ(U, 0);
-    EXPECT_FLOAT_EQ(V, 1);
-}
-
-
-TEST(GatedStokesSpectrometer, stokes_accumulate)
-{
-    CUDA_ERROR_CHECK(cudaDeviceSynchronize());
-    size_t nchans = 8 * 1024 * 1024 + 1;
-    size_t naccumulate = 5;
-
-    thrust::device_vector<float2> P0(nchans * naccumulate);
-    thrust::device_vector<float2> P1(nchans * naccumulate);
-    thrust::fill(P0.begin(), P0.end(), (float2){0, 0});
-    thrust::fill(P1.begin(), P1.end(), (float2){0, 0});
-    thrust::device_vector<float> I(nchans);
-    thrust::device_vector<float> Q(nchans);
-    thrust::device_vector<float> U(nchans);
-    thrust::device_vector<float> V(nchans);
-    thrust::fill(I.begin(), I.end(), 0);
-    thrust::fill(Q.begin(), Q.end(), 0);
-    thrust::fill(U.begin(), U.end(), 0);
-    thrust::fill(V.begin(), V.end(), 0);
-
-    // This channel should be left circular polarized
-    size_t idx0 = 23;
-    for (int k = 0; k< naccumulate; k++)
-    {
-        size_t idx = idx0 + k * nchans;
-        P0[idx] = (float2){0.0f, 1.0f/std::sqrt(2)};
-        P1[idx] = (float2){1.0f/std::sqrt(2),0.0f};
-    }
-
-    psrdada_cpp::effelsberg::edd::stokes_accumulate<<<1024, 1024>>>(
-          thrust::raw_pointer_cast(P0.data()),
-          thrust::raw_pointer_cast(P1.data()),
-          thrust::raw_pointer_cast(I.data()),
-          thrust::raw_pointer_cast(Q.data()),
-          thrust::raw_pointer_cast(U.data()),
-          thrust::raw_pointer_cast(V.data()),
-          nchans,
-          naccumulate
-            );
-
-    CUDA_ERROR_CHECK(cudaDeviceSynchronize());
-    thrust::pair<thrust::device_vector<float>::iterator, thrust::device_vector<float>::iterator> minmax;
-
-    minmax = thrust::minmax_element(I.begin(), I.end());
-    EXPECT_FLOAT_EQ(*minmax.first, 0);
-    EXPECT_FLOAT_EQ(*minmax.second, naccumulate);
-
-    minmax = thrust::minmax_element(Q.begin(), Q.end());
-    EXPECT_FLOAT_EQ(*minmax.first, 0);
-    EXPECT_FLOAT_EQ(*minmax.second, 0);
-
-    minmax = thrust::minmax_element(U.begin(), U.end());
-    EXPECT_FLOAT_EQ(*minmax.first, 0);
-    EXPECT_FLOAT_EQ(*minmax.second, 0);
-
-    minmax = thrust::minmax_element(V.begin(), V.end());
-    EXPECT_FLOAT_EQ(*minmax.first, -1. * naccumulate);
-    EXPECT_FLOAT_EQ(*minmax.second, 0);
-}
-
-
-
-TEST(GatedStokesSpectrometer, GatingKernel)
-{
-  const size_t blockSize = 1024;
-  const size_t nBlocks = 16 * 1024;
-
-  thrust::device_vector<float> G0(blockSize * nBlocks);
-  thrust::device_vector<float> G1(blockSize * nBlocks);
-  thrust::device_vector<uint64_t> _sideChannelData(nBlocks);
-  thrust::device_vector<psrdada_cpp::effelsberg::edd::uint64_cu> _nG0(nBlocks);
-  thrust::device_vector<psrdada_cpp::effelsberg::edd::uint64_cu> _nG1(nBlocks);
-  thrust::device_vector<float> baseLineG0(1);
-  thrust::device_vector<float> baseLineG1(1);
-
-  thrust::device_vector<float> baseLineG0_update(1);
-  thrust::device_vector<float> baseLineG1_update(1);
-  thrust::fill(G0.begin(), G0.end(), 42);
-  thrust::fill(G1.begin(), G1.end(), 23);
-  thrust::fill(_sideChannelData.begin(), _sideChannelData.end(), 0);
-
-  // everything to G0
-  {
-    thrust::fill(_nG0.begin(), _nG0.end(), 0);
-    thrust::fill(_nG1.begin(), _nG1.end(), 0);
-    baseLineG0[0] = -3;
-    baseLineG1[0] = -4;
-    baseLineG0_update[0] = 0;
-    baseLineG1_update[0] = 0;
-
-    const uint64_t *sideCD =
-        (uint64_t *)(thrust::raw_pointer_cast(_sideChannelData.data()));
-    psrdada_cpp::effelsberg::edd::gating<<<1024 , 1024>>>(
-          thrust::raw_pointer_cast(G0.data()),
-          thrust::raw_pointer_cast(G1.data()), sideCD,
-          G0.size(), blockSize, 0, 1,
-          0,
-          thrust::raw_pointer_cast(baseLineG0.data()),
-          thrust::raw_pointer_cast(baseLineG1.data()),
-          thrust::raw_pointer_cast(baseLineG0_update.data()),
-          thrust::raw_pointer_cast(baseLineG1_update.data()),
-          thrust::raw_pointer_cast(_nG0.data()),
-          thrust::raw_pointer_cast(_nG1.data())
-          );
-
-    thrust::pair<thrust::device_vector<float>::iterator, thrust::device_vector<float>::iterator> minmax;
-    minmax = thrust::minmax_element(G0.begin(), G0.end());
-    EXPECT_EQ(*minmax.first, 42);
-    EXPECT_EQ(*minmax.second, 42);
-
-    minmax = thrust::minmax_element(G1.begin(), G1.end());
-    EXPECT_EQ(*minmax.first, -4.);
-    EXPECT_EQ(*minmax.second, -4.);
-
-    EXPECT_EQ(_nG0[0], G0.size());
-    EXPECT_EQ(_nG1[0], 0u);
-
-    EXPECT_FLOAT_EQ(42.f, baseLineG0_update[0] / (_nG0[0] + 1E-121));
-    EXPECT_FLOAT_EQ(0.f, baseLineG1_update[0] / (_nG1[0] + 1E-121));
-  }
-
-  // everything to G1 // with baseline -5
-  {
-    thrust::fill(_nG0.begin(), _nG0.end(), 0);
-    thrust::fill(_nG1.begin(), _nG1.end(), 0);
-    baseLineG0[0] = 5.;
-    baseLineG1[0] = -2;
-    baseLineG0_update[0] = 0;
-    baseLineG1_update[0] = 0;
-
-    thrust::fill(_sideChannelData.begin(), _sideChannelData.end(), 1L);
-    const uint64_t *sideCD =
-        (uint64_t *)(thrust::raw_pointer_cast(_sideChannelData.data()));
-    psrdada_cpp::effelsberg::edd::gating<<<1024, 1024>>>(
-          thrust::raw_pointer_cast(G0.data()),
-          thrust::raw_pointer_cast(G1.data()), sideCD,
-          G0.size(), blockSize, 0, 1,
-          0,
-          thrust::raw_pointer_cast(baseLineG0.data()),
-          thrust::raw_pointer_cast(baseLineG1.data()),
-          thrust::raw_pointer_cast(baseLineG0_update.data()),
-          thrust::raw_pointer_cast(baseLineG1_update.data()),
-          thrust::raw_pointer_cast(_nG0.data()),
-          thrust::raw_pointer_cast(_nG1.data())
-          );
-    thrust::pair<thrust::device_vector<float>::iterator, thrust::device_vector<float>::iterator> minmax;
-    minmax = thrust::minmax_element(G0.begin(), G0.end());
-    EXPECT_EQ(*minmax.first, 5.);
-    EXPECT_EQ(*minmax.second, 5.);
-
-    minmax = thrust::minmax_element(G1.begin(), G1.end());
-    EXPECT_EQ(*minmax.first, 42);
-    EXPECT_EQ(*minmax.second, 42);
-
-    EXPECT_EQ(_nG0[0], 0u);
-    EXPECT_EQ(_nG1[0], G1.size());
-
-    EXPECT_FLOAT_EQ(0.f, baseLineG0_update[0] / (_nG0[0] + 1E-121));
-    EXPECT_FLOAT_EQ(42.f, baseLineG1_update[0] / (_nG1[0] + 1E-121));
-  }
-}
-
-TEST(GatedStokesSpectrometer, array_sum) {
-
-  const size_t NBLOCKS = 16 * 32;
-  const size_t NTHREADS = 1024;
-
-  size_t inputLength = 1 << 22 + 1 ;
-  size_t dataLength = inputLength;
-  ////zero pad input array
-  //if (inputLength % (2 * NTHREADS) != 0)
-  //  dataLength = (inputLength / (2 * NTHREADS) + 1) * 2 * NTHREADS;
-  thrust::device_vector<float> data(dataLength);
-  thrust::fill(data.begin(), data.begin() + inputLength, 1);
-  //thrust::fill(data.begin() + inputLength, data.end(), 0);
-  thrust::device_vector<float> blr(NTHREADS * 2);
-
-  thrust::fill(blr.begin(), blr.end(), 0);
-
-  psrdada_cpp::effelsberg::edd::array_sum<<<NBLOCKS, NTHREADS, NTHREADS* sizeof(float)>>>(thrust::raw_pointer_cast(data.data()), data.size(), thrust::raw_pointer_cast(blr.data()));
-  psrdada_cpp::effelsberg::edd::array_sum<<<1, NTHREADS, NTHREADS* sizeof(float)>>>(thrust::raw_pointer_cast(blr.data()), blr.size(), thrust::raw_pointer_cast(blr.data()));
-
-  EXPECT_EQ(size_t(blr[0]), inputLength);
-}
-- 
GitLab