From 94f7493bb35cb6fb49f28d0541e1f61ded5527a6 Mon Sep 17 00:00:00 2001 From: "Joachim Wuttke (h)" <j.wuttke@fz-juelich.de> Date: Wed, 31 Jul 2024 09:59:27 +0200 Subject: [PATCH] mv fcts flatten and reshapeTo2D from Vec to namespace FieldUtil in Field.h --- Base/Type/Field2D.h | 23 +++++++++++++++++++++++ Base/Util/Vec.h | 19 ------------------- Sample/Interface/RoughnessMap.cpp | 9 ++++----- 3 files changed, 27 insertions(+), 24 deletions(-) diff --git a/Base/Type/Field2D.h b/Base/Type/Field2D.h index d92ed1e1ff6..fc73473b090 100644 --- a/Base/Type/Field2D.h +++ b/Base/Type/Field2D.h @@ -21,4 +21,27 @@ using double2d_t = std::vector<std::vector<double>>; using complex2d_t = std::vector<std::vector<complex_t>>; +namespace FieldUtil { + +template <typename C> std::vector<C> flatten(const std::vector<std::vector<C>>& src) +{ + std::vector<C> result; + for (const auto& row : src) + result.insert(result.end(), row.begin(), row.end()); + return result; +} + +template <typename C> +std::vector<std::vector<C>> reshapeTo2D(const std::vector<C>& src, size_t n_rows) +{ + size_t n_cols = src.size() / n_rows; + std::vector<std::vector<C>> result(n_rows); + + for (size_t i = 0; i < n_rows; i++) + result[i].insert(result[i].end(), src.begin() + i * n_cols, src.begin() + (i + 1) * n_cols); + return result; +} + +} // namespace FieldUtil + #endif // BORNAGAIN_BASE_TYPE_FIELD2D_H diff --git a/Base/Util/Vec.h b/Base/Util/Vec.h index 3c298004675..5b8e20dfcc1 100644 --- a/Base/Util/Vec.h +++ b/Base/Util/Vec.h @@ -40,25 +40,6 @@ template <typename C> void concat(std::vector<C>& v, const std::vector<C>& w) v.insert(v.end(), w.begin(), w.end()); } -template <typename C> std::vector<C> flatten(const std::vector<std::vector<C>>& src) -{ - std::vector<C> result; - for (const auto& row : src) - result.insert(result.end(), row.begin(), row.end()); - return result; -} - -template <typename C> -std::vector<std::vector<C>> reshapeTo2D(const std::vector<C>& src, size_t n_rows) -{ - size_t n_cols = src.size() / n_rows; - std::vector<std::vector<C>> result(n_rows); - - for (size_t i = 0; i < n_rows; i++) - result[i].insert(result[i].end(), src.begin() + i * n_cols, src.begin() + (i + 1) * n_cols); - return result; -} - } // namespace Vec #endif // BORNAGAIN_BASE_UTIL_VEC_H diff --git a/Sample/Interface/RoughnessMap.cpp b/Sample/Interface/RoughnessMap.cpp index ec672300b2f..ddad4ca7782 100644 --- a/Sample/Interface/RoughnessMap.cpp +++ b/Sample/Interface/RoughnessMap.cpp @@ -14,7 +14,6 @@ #include "Sample/Interface/RoughnessMap.h" #include "Base/Util/Assert.h" -#include "Base/Util/Vec.h" #include <algorithm> #include <numbers> @@ -175,7 +174,7 @@ double2d_t RoughnessMap::applyHeightsToSpectrum(const double2d_t& h_map, const double2d_t& s_map) const { // flatten spectral map - auto s_map_flat = Vec::flatten(s_map); + auto s_map_flat = FieldUtil::flatten(s_map); // sort and remember the original positions std::vector<std::pair<double, size_t>> s_map_indexed(s_map_flat.size()); @@ -185,13 +184,13 @@ double2d_t RoughnessMap::applyHeightsToSpectrum(const double2d_t& h_map, std::sort(s_map_indexed.begin(), s_map_indexed.end()); // replace heights of spectral map - auto h_map_flat = Vec::flatten(h_map); + auto h_map_flat = FieldUtil::flatten(h_map); std::sort(h_map_flat.begin(), h_map_flat.end()); for (size_t i = 0; i < s_map_flat.size(); i++) s_map_flat[s_map_indexed[i].second] = h_map_flat[i]; - return Vec::reshapeTo2D(s_map_flat, s_map.size()); + return FieldUtil::reshapeTo2D(s_map_flat, s_map.size()); } void RoughnessMap::createMap() @@ -229,7 +228,7 @@ PyObject* RoughnessMap::generate() { createMap(); std::vector<std::size_t> dimensions = {m_rough_map.size(), m_rough_map[0].size()}; - return PyInterpreter::Numpy::fromCppVector(dimensions, Vec::flatten(m_rough_map)); + return PyInterpreter::Numpy::fromCppVector(dimensions, FieldUtil::flatten(m_rough_map)); } #endif // BORNAGAIN_PYTHON -- GitLab