diff --git a/conda-recepie/meta.yaml b/conda-recepie/meta.yaml index 9c7348639..ca325441e 100644 --- a/conda-recepie/meta.yaml +++ b/conda-recepie/meta.yaml @@ -69,6 +69,7 @@ outputs: host: - python - pybind11 2.2 + - pyzmq - sls_detector_lib - libstdcxx-ng - libgcc-ng diff --git a/python/scripts/basic.py b/python/scripts/basic.py index a31e05214..1f14422ba 100644 --- a/python/scripts/basic.py +++ b/python/scripts/basic.py @@ -1,3 +1,6 @@ +import os +import sys +sys.path.append(os.path.join(os.getcwd(), 'bin')) from sls_detector import Eiger from sls_detector import ExperimentalDetector diff --git a/python/src/main.cpp b/python/src/main.cpp index 116285460..38e927937 100644 --- a/python/src/main.cpp +++ b/python/src/main.cpp @@ -2,6 +2,7 @@ #include #include "Detector.h" +#include "mythenFileIO.h" namespace py = pybind11; @@ -284,6 +285,7 @@ py::class_ multiDetectorApi(m, "multiDetectorApi"); .def("_setReceiverUDPIP", &multiSlsDetector::setReceiverUDPIP) ; + m.def("hej", &hej, "some"); #ifdef VERSION_INFO m.attr("__version__") = VERSION_INFO; diff --git a/python/src/mythenFileIO.h b/python/src/mythenFileIO.h new file mode 100644 index 000000000..0d35ca6c5 --- /dev/null +++ b/python/src/mythenFileIO.h @@ -0,0 +1,77 @@ +#pragma once + +#include +#include +#include +#include +#include +#include + +template +std::vector ExtractBits(const std::vector &data, int dr = 24) { + constexpr int mask0 = (1 << bit_index0); + constexpr int mask1 = (1 << bit_index1); + constexpr int NumStrips = 2; + const int NumCompleteSamples = data.size() / dr; + const int NumCounters = NumCompleteSamples * NumStrips; + + std::vector result(NumCounters); + + auto ptr = data.data(); + + auto strip0 = result.data(); + auto strip1 = strip0 + NumCompleteSamples; + + for (int j = 0; j != NumCompleteSamples; ++j) { + for (int i = 0; i != dr; ++i) { + int bit0 = (*ptr & mask0) >> bit_index0; + int bit1 = (*ptr++ & mask1) >> bit_index1; + *strip0 |= bit0 << i; + *strip1 |= bit1 << i; + } + strip0++; + strip1++; + } + return result; +} + +template +std::vector ExtractBits(const std::vector &data, int dr = 24) { + constexpr int mask = (1 << bit_index); + const int NumCompleteSamples = data.size() / dr; + std::vector result(NumCompleteSamples); + auto ptr = data.data(); + for (auto &r : result) { + for (int i = 0; i != dr; ++i) { + int bit = (*ptr++ & mask) >> bit_index; + r |= bit << i; + } + } + return result; +} + +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)); + } + auto data_size = static_cast(fs.tellg()) - byte_offset; + 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 " + << ((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); + return data; +} + +int hej(){ + return 5; +} diff --git a/slsDetectorSoftware/include/multiSlsDetector.h b/slsDetectorSoftware/include/multiSlsDetector.h index c34ecd63e..c097295b2 100644 --- a/slsDetectorSoftware/include/multiSlsDetector.h +++ b/slsDetectorSoftware/include/multiSlsDetector.h @@ -2112,7 +2112,7 @@ class multiSlsDetector : public virtual slsDetectorDefs { int (*measurement_finished)(int, int, void *){nullptr}; void *measFinished_p{nullptr}; - int (*progress_call)(double, void *); + int (*progress_call)(double, void *){nullptr}; void *pProgressCallArg{nullptr}; int (*dataReady)(detectorData *, int, int, void *){nullptr};