From 04146e683ca39d98632e46f2327e9a47228c61eb Mon Sep 17 00:00:00 2001 From: Erik Frojdh Date: Wed, 10 Apr 2019 16:54:33 +0200 Subject: [PATCH] updated reading --- python/scripts/basic.py | 14 +++++++++++++- python/src/Detector.h | 2 +- python/src/main.cpp | 4 +++- python/src/mythenFileIO.h | 20 ++++++++++++++------ 4 files changed, 31 insertions(+), 9 deletions(-) diff --git a/python/scripts/basic.py b/python/scripts/basic.py index 1f14422ba..8f199146c 100644 --- a/python/scripts/basic.py +++ b/python/scripts/basic.py @@ -1,8 +1,20 @@ import os import sys +import numpy as np sys.path.append(os.path.join(os.getcwd(), 'bin')) from sls_detector import Eiger from sls_detector import ExperimentalDetector +from _sls_detector.io import read_ctb_file + d = Eiger() -e = ExperimentalDetector() \ No newline at end of file +e = ExperimentalDetector() + +# ncols = 192 +# start = 600 +# end = 1800 +# nrows = end-start +# data = np.zeros((nrows, ncols)) + +# for i in range(nrows): +# data[i, :] = read_ctb_file(f'/home/l_frojdh/mythendata/MoKbZr_30kV60mA_1s_200V_thr{start+i}_1.raw', 8, 24) \ No newline at end of file diff --git a/python/src/Detector.h b/python/src/Detector.h index 52264bbad..39a9db510 100644 --- a/python/src/Detector.h +++ b/python/src/Detector.h @@ -19,7 +19,7 @@ class Detector { Detector(int i) : det(i), multi_detector_id(i) { //Disable output from std::cout - std::cout.setstate(std::ios_base::failbit); + // std::cout.setstate(std::ios_base::failbit); } int getMultiDetectorId() { return multi_detector_id; } diff --git a/python/src/main.cpp b/python/src/main.cpp index c338b4328..b7b29bb35 100644 --- a/python/src/main.cpp +++ b/python/src/main.cpp @@ -285,7 +285,9 @@ py::class_ multiDetectorApi(m, "multiDetectorApi"); .def("_setReceiverUDPIP", &multiSlsDetector::setReceiverUDPIP) ; - m.def("hej", &hej, "some"); + py::module io = m.def_submodule("io", "Submodule for io"); + io.def("read_ctb_file", &read_ctb_file, "some"); + #ifdef VERSION_INFO m.attr("__version__") = VERSION_INFO; diff --git a/python/src/mythenFileIO.h b/python/src/mythenFileIO.h index 0d35ca6c5..c0660c9bc 100644 --- a/python/src/mythenFileIO.h +++ b/python/src/mythenFileIO.h @@ -7,6 +7,11 @@ #include #include +#include +#include +#include +namespace py = pybind11; + template std::vector ExtractBits(const std::vector &data, int dr = 24) { constexpr int mask0 = (1 << bit_index0); @@ -50,11 +55,11 @@ std::vector ExtractBits(const std::vector &data, int dr = 24) { return result; } -std::vector ReadFile(const std::string &fname, int offset = 8, int dr = 24) { +std::vector ReadFile(const std::string &fname, int offset = 8, + int dr = 24) { const int element_size = static_cast(sizeof(uint64_t)); const int byte_offset = element_size * offset; const int expected_size = dr * element_size * 32 * 3; - std::ifstream fs(fname, std::ios::binary | std::ios::ate); if (!fs.is_open()) { throw std::runtime_error("File not found: " + std::string(fname)); @@ -63,15 +68,18 @@ std::vector ReadFile(const std::string &fname, int offset = 8, int dr if (data_size != expected_size) { auto diff = data_size - expected_size; std::cout << "WARNING: data size is: " << data_size - << " expected size is: " << expected_size << ", " << std::abs(diff) << " bytes " + << " expected size is: " << expected_size << ", " + << std::abs(diff) << " bytes " << ((diff < 0) ? "missing" : "too many") << '\n'; } std::vector data(expected_size / element_size); fs.seekg(byte_offset, std::ios::beg); - fs.read(reinterpret_cast(data.data()), data_size); + fs.read(reinterpret_cast(data.data()), expected_size); return data; } -int hej(){ - return 5; +py::array_t read_ctb_file(const std::string &fname, int offset = 8, + int dr = 24) { + auto data = ExtractBits<17, 6>(ReadFile(fname, offset, dr)); + return py::array(data.size(), data.data()); }