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