From 4084d18b163d350d7f8822509d246da51586c85f Mon Sep 17 00:00:00 2001 From: Erik Frojdh Date: Fri, 22 May 2026 17:01:53 +0200 Subject: [PATCH] reduced storage size --- include/aare/PixelHistogram.hpp | 29 +++++++++++++++++------------ python/src/bind_PixelHistogram.hpp | 6 +++--- src/PixelHistogram.cpp | 20 ++++++++++---------- 3 files changed, 30 insertions(+), 25 deletions(-) diff --git a/include/aare/PixelHistogram.hpp b/include/aare/PixelHistogram.hpp index e6a9ea6..c54133a 100644 --- a/include/aare/PixelHistogram.hpp +++ b/include/aare/PixelHistogram.hpp @@ -8,21 +8,26 @@ namespace bh = boost::histogram; namespace aare { -class PixelHistogram{ +class PixelHistogram { + public: + using StorageType = uint16_t; + using AxisType = float; + + private: using Axes = std::tuple< - bh::axis::regular, - bh::axis::integer, - bh::axis::integer - >; - using Hist = bh::histogram>; + bh::axis::regular, + bh::axis::integer, + bh::axis::integer>; + using Hist = bh::histogram>; Hist hist_; - - public: + + public: PixelHistogram(int rows, int cols, int n_bins, double xmin, double xmax); - void fill(const NDView& image); - NDArray hdata() const; - NDArray bin_centers() const; - NDArray bin_edges() const; + void fill(const NDView &image); + NDArray hdata() const; + NDArray bin_centers() const; + NDArray bin_edges() const; }; } // namespace aare diff --git a/python/src/bind_PixelHistogram.hpp b/python/src/bind_PixelHistogram.hpp index e3e85aa..23ec6d1 100644 --- a/python/src/bind_PixelHistogram.hpp +++ b/python/src/bind_PixelHistogram.hpp @@ -43,7 +43,7 @@ void define_pixel_histogram_bindings(py::module &m) { .def("hdata", [](const PixelHistogram &self) { - auto ptr = new NDArray(self.hdata()); + auto ptr = new NDArray(self.hdata()); return return_image_data(ptr); }, R"( @@ -55,7 +55,7 @@ void define_pixel_histogram_bindings(py::module &m) { .def("bin_centers", [](const PixelHistogram &self) { - auto ptr = new NDArray(self.bin_centers()); + auto ptr = new NDArray(self.bin_centers()); return return_image_data(ptr); }, R"( @@ -66,7 +66,7 @@ void define_pixel_histogram_bindings(py::module &m) { )") .def("bin_edges", [](const PixelHistogram &self) { - auto ptr = new NDArray(self.bin_edges()); + auto ptr = new NDArray(self.bin_edges()); return return_image_data(ptr); }, R"( diff --git a/src/PixelHistogram.cpp b/src/PixelHistogram.cpp index bbc3de9..2d95b54 100644 --- a/src/PixelHistogram.cpp +++ b/src/PixelHistogram.cpp @@ -9,7 +9,7 @@ namespace aare { PixelHistogram::PixelHistogram(int rows, int cols, int n_bins, double xmin, double xmax): hist_( - bh::axis::regular(n_bins, xmin, xmax, "value"), bh::axis::integer(0, cols, "y"), bh::axis::integer(0, rows, "x") @@ -17,12 +17,12 @@ PixelHistogram::PixelHistogram(int rows, int cols, int n_bins, double xmin, doub // Constructor implementation } -NDArray PixelHistogram::hdata() const { +NDArray PixelHistogram::hdata() const { const auto bins = static_cast(hist_.axis(0).size()); const auto cols = static_cast(hist_.axis(1).size()); const auto rows = static_cast(hist_.axis(2).size()); - NDArray data({rows, cols, bins}); + NDArray data({rows, cols, bins}); const auto &storage = bh::unsafe_access::storage(hist_); std::memcpy(data.data(), storage.data(), data.total_bytes()); @@ -38,27 +38,27 @@ void PixelHistogram::fill(const NDView &image) { } } -NDArray PixelHistogram::bin_centers() const { +NDArray PixelHistogram::bin_centers() const { const auto& value_axis = hist_.axis(0); const auto n_bins = static_cast(value_axis.size()); - NDArray centers({n_bins}); + NDArray centers({n_bins}); for (ssize_t i = 0; i < n_bins; ++i) { // Get the left and right edges of the bin and compute the center - double left = value_axis.value(i); - double right = value_axis.value(i + 1); - centers(i) = (left + right) / 2.0; + AxisType left = value_axis.value(i); + AxisType right = value_axis.value(i + 1); + centers(i) = (left + right) / AxisType(2.0); } return centers; } -NDArray PixelHistogram::bin_edges() const { +NDArray PixelHistogram::bin_edges() const { const auto& value_axis = hist_.axis(0); const auto n_bins = static_cast(value_axis.size()); - NDArray edges({n_bins + 1}); + NDArray edges({n_bins + 1}); for (ssize_t i = 0; i <= n_bins; ++i) { edges(i) = value_axis.value(i);