From 43cecc3779dff8479ea0384981b61e20695a5a60 Mon Sep 17 00:00:00 2001 From: Alice Date: Tue, 6 Oct 2026 16:05:10 +0200 Subject: [PATCH] updated read_columns in python --- include/aare/JungfrauDataFile.hpp | 2 +- python/src/jungfrau_data_file.hpp | 11 +++++++++-- src/JungfrauDataFile.cpp | 3 ++- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/include/aare/JungfrauDataFile.hpp b/include/aare/JungfrauDataFile.hpp index a84b5da1..dc904861 100644 --- a/include/aare/JungfrauDataFile.hpp +++ b/include/aare/JungfrauDataFile.hpp @@ -68,7 +68,7 @@ class JungfrauDataFile : public FileInterface { * @pre column_indices must be sorted in ascending order * @return Frame containing the columns at the current frame */ - Frame read_columns(const std::vector column_indices); + Frame read_columns(const std::vector &column_indices); std::vector read_n(size_t n_frames = 0) override; void read_into(std::byte *image_buf) override; diff --git a/python/src/jungfrau_data_file.hpp b/python/src/jungfrau_data_file.hpp index ae8bc54b..a215b7f6 100644 --- a/python/src/jungfrau_data_file.hpp +++ b/python/src/jungfrau_data_file.hpp @@ -81,8 +81,15 @@ void define_jungfrau_data_file_io_bindings(py::module &m) { .def( "read_columns", [](JungfrauDataFile &self, - const std::vector column_indices) { - return self.read_columns(column_indices); + const std::vector &column_indices) { + auto frame = new Frame(self.read_columns(column_indices)); + return py::array_t( + {frame->rows(), frame->cols()}, + {frame->cols() * sizeof(uint16_t), sizeof(uint16_t)}, + reinterpret_cast(frame->data()), + py::capsule(frame, [](void *ptr) { + delete reinterpret_cast(ptr); + })); }, R"( Read the columns at the current frame. diff --git a/src/JungfrauDataFile.cpp b/src/JungfrauDataFile.cpp index d876037c..3fe5c3d3 100644 --- a/src/JungfrauDataFile.cpp +++ b/src/JungfrauDataFile.cpp @@ -35,7 +35,8 @@ Frame JungfrauDataFile::read_frame(size_t frame_number) { return f; } -Frame JungfrauDataFile::read_columns(const std::vector column_indices) { +Frame JungfrauDataFile::read_columns( + const std::vector &column_indices) { Frame f(rows(), column_indices.size(), Dtype::UINT16);