From af23e96e2d5642c12dcd9c4331094712c1805abb Mon Sep 17 00:00:00 2001
From: "Joachim Wuttke (o)" <j.wuttke@fz-juelich.de>
Date: Tue, 17 Oct 2023 14:49:56 +0200
Subject: [PATCH 1/2] simplify OffspecDetector::axisBinIndex

---
 Device/Detector/OffspecDetector.cpp | 16 +++++-----------
 1 file changed, 5 insertions(+), 11 deletions(-)

diff --git a/Device/Detector/OffspecDetector.cpp b/Device/Detector/OffspecDetector.cpp
index 4a75536d036..9eb243c9053 100644
--- a/Device/Detector/OffspecDetector.cpp
+++ b/Device/Detector/OffspecDetector.cpp
@@ -53,18 +53,12 @@ const Scale& OffspecDetector::axis(size_t index) const
     return *m_axes[index];
 }
 
-size_t OffspecDetector::axisBinIndex(size_t index, size_t selected_axis) const
+size_t OffspecDetector::axisBinIndex(size_t i, size_t k_axis) const
 {
-    const size_t dim = 2;
-    size_t remainder(index);
-    size_t i_axis = dim;
-    for (size_t i = 0; i < dim; ++i) {
-        --i_axis;
-        if (selected_axis == i_axis)
-            return remainder % m_axes[i_axis]->size();
-        remainder /= m_axes[i_axis]->size();
-    }
-    ASSERT_NEVER;
+    if (k_axis == 1)
+        return i % m_axes[1]->size();
+    else
+        return i / m_axes[1]->size();
 }
 
 size_t OffspecDetector::totalSize() const
-- 
GitLab


From 1e9e4e9004994d73feab3275357d4c95c8e47878 Mon Sep 17 00:00:00 2001
From: "Joachim Wuttke (o)" <j.wuttke@fz-juelich.de>
Date: Tue, 17 Oct 2023 15:00:40 +0200
Subject: [PATCH 2/2] OffspecDet internally row-major

---
 Device/Detector/OffspecDetector.cpp  |  8 ++++----
 Sim/Simulation/OffspecSimulation.cpp | 15 +++++++++------
 2 files changed, 13 insertions(+), 10 deletions(-)

diff --git a/Device/Detector/OffspecDetector.cpp b/Device/Detector/OffspecDetector.cpp
index 9eb243c9053..13be1a76c80 100644
--- a/Device/Detector/OffspecDetector.cpp
+++ b/Device/Detector/OffspecDetector.cpp
@@ -55,10 +55,10 @@ const Scale& OffspecDetector::axis(size_t index) const
 
 size_t OffspecDetector::axisBinIndex(size_t i, size_t k_axis) const
 {
-    if (k_axis == 1)
-        return i % m_axes[1]->size();
+    if (k_axis == 0)
+        return i % m_axes[0]->size();
     else
-        return i / m_axes[1]->size();
+        return i / m_axes[0]->size();
 }
 
 size_t OffspecDetector::totalSize() const
@@ -93,5 +93,5 @@ size_t OffspecDetector::indexOfSpecular(double alpha, double phi) const
 
 size_t OffspecDetector::getGlobalIndex(size_t x, size_t y) const
 {
-    return x * axis(1).size() + y;
+    return y * axis(0).size() + x;
 }
diff --git a/Sim/Simulation/OffspecSimulation.cpp b/Sim/Simulation/OffspecSimulation.cpp
index 6a284af36bb..2317a1e6709 100644
--- a/Sim/Simulation/OffspecSimulation.cpp
+++ b/Sim/Simulation/OffspecSimulation.cpp
@@ -133,20 +133,23 @@ size_t OffspecSimulation::nElements() const
 Datafield OffspecSimulation::packResult()
 {
     const size_t ns = m_scan->nScan();
-    const size_t ny = m_detector->axis(1).size();
-    const size_t Ndet = m_detector->axis(0).size() * ny;
-    std::vector<double> out(ns * ny, 0.);
+    const size_t nphi = m_detector->axis(0).size();
+    const size_t nalp = m_detector->axis(1).size();
+    const size_t Ndet = nalp * nphi;
+    std::vector<double> out(ns * nalp, 0.);
 
     // Apply detector resolution and transfer detector image
     for (size_t j = 0; j < ns; ++j) {
 
         // TODO restore resolution m_detector->applyDetectorResolution(&detector_image);
 
-        for (size_t i = 0; i < Ndet; ++i) {
-            double& val = out[j * ny + i % ny];
-            val += m_cache[j * Ndet + i];
+        for (size_t ia = 0; ia < nalp; ++ia) {
+            double val = 0;
+            for (size_t ip = 0; ip < nphi; ++ip)
+                val += m_cache[j * Ndet + ia * nphi + ip];
             if (background())
                 val = background()->addBackground(val);
+            out[j * nalp + ia] = val;
         }
     }
 
-- 
GitLab