From a6e23b0509e1536eaf014e0cce94c0d5d08c9cac Mon Sep 17 00:00:00 2001 From: Erik Frojdh Date: Tue, 1 Dec 2020 18:40:45 +0100 Subject: [PATCH] added scanParameters in Python --- python/CMakeLists.txt | 1 + python/examples/using_scan.py | 19 ++++++++++++++ python/slsdet/__init__.py | 1 + python/src/main.cpp | 2 ++ python/src/pattern.cpp | 18 ------------- python/src/scan.cpp | 48 +++++++++++++++++++++++++++++++++++ 6 files changed, 71 insertions(+), 18 deletions(-) create mode 100644 python/examples/using_scan.py create mode 100644 python/src/scan.cpp diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt index aede287be..615aa2ba8 100755 --- a/python/CMakeLists.txt +++ b/python/CMakeLists.txt @@ -5,6 +5,7 @@ pybind11_add_module(_slsdet src/detector.cpp src/network.cpp src/pattern.cpp + src/scan.cpp ) target_link_libraries(_slsdet PUBLIC diff --git a/python/examples/using_scan.py b/python/examples/using_scan.py new file mode 100644 index 000000000..612cae754 --- /dev/null +++ b/python/examples/using_scan.py @@ -0,0 +1,19 @@ + +from slsdet import Mythen3, scanParameters, dacIndex + +#Configure scan +sp = scanParameters() +sp.enable = 1 +sp.dacInd = dacIndex.VTH1 +sp.startOffset = 0 +sp.stopOffset = 1000 +sp.stepSize = 100 +sp.dacSettleTime_ns = int(1e9) + + +# Send scan to detector +d = Mythen3() +d.setScan(sp) + + + diff --git a/python/slsdet/__init__.py b/python/slsdet/__init__.py index 1e41e3fc1..0d98b6f6d 100755 --- a/python/slsdet/__init__.py +++ b/python/slsdet/__init__.py @@ -20,3 +20,4 @@ from .enums import * IpAddr = _slsdet.IpAddr MacAddr = _slsdet.MacAddr +scanParameters = _slsdet.scanParameters \ No newline at end of file diff --git a/python/src/main.cpp b/python/src/main.cpp index 7f083f35e..291752c34 100755 --- a/python/src/main.cpp +++ b/python/src/main.cpp @@ -20,6 +20,7 @@ void init_experimental(py::module &); void init_det(py::module &); void init_network(py::module &); void init_pattern(py::module &); +void init_scan(py::module &); PYBIND11_MODULE(_slsdet, m) { m.doc() = R"pbdoc( C/C++ API @@ -35,6 +36,7 @@ PYBIND11_MODULE(_slsdet, m) { init_det(m); init_network(m); init_pattern(m); + init_scan(m); // init_experimental(m); diff --git a/python/src/pattern.cpp b/python/src/pattern.cpp index 35e1bca01..c12bc96d9 100644 --- a/python/src/pattern.cpp +++ b/python/src/pattern.cpp @@ -20,24 +20,6 @@ void init_pattern(py::module &m) { pat &o = obj.cast(); return py::array_t(1, &o, obj); }); - //.def_readwrite("name", &Pet::name) - // patternParameters.def_property( - // "some", - // [](py::object &obj) { - // pat &o = obj.cast(); - // return py::array_t(1, &o, obj); - // }, - // [](py::object &obj) { - // pat &o = obj.cast(); - // return py::array_t(1, &o, obj); - // }); - - // patternParameters.def_property_readonly( - // "loop", - // [](py::object &obj) { - // pat &o = obj.cast(); - // return py::array_t(6, &o.loop[0], obj); - // }); py::class_ Pattern(m, "Pattern"); Pattern.def(py::init()); diff --git a/python/src/scan.cpp b/python/src/scan.cpp new file mode 100644 index 000000000..75fcf16d4 --- /dev/null +++ b/python/src/scan.cpp @@ -0,0 +1,48 @@ +#include +#include +#include +#include +#include +#include +#include "sls/sls_detector_defs.h" +namespace py = pybind11; +void init_scan(py::module &m) { + + using sp = slsDetectorDefs::scanParameters; + py::class_ scanParameters(m, "scanParameters"); + + scanParameters.def(py::init()); + scanParameters.def_readwrite("enable", &sp::enable); + scanParameters.def_readwrite("dacInd", &sp::dacInd); + scanParameters.def_readwrite("startOffset", &sp::startOffset); + scanParameters.def_readwrite("stopOffset", &sp::stopOffset); + scanParameters.def_readwrite("stepSize", &sp::stepSize); + scanParameters.def_readwrite("dacSettleTime_ns", &sp::dacSettleTime_ns); + scanParameters.def("__repr__", [](const sp &a){ + std::ostringstream oss; + auto indent = " "; + oss << "\n"; + oss << indent << "enable: " << a.enable << '\n'; + oss << indent << "dacInd: " << a.dacInd << '\n'; + oss << indent << "startOffset: " << a.startOffset << '\n'; + oss << indent << "stopOffset: " << a.stopOffset << '\n'; + oss << indent << "stepSize: " << a.stepSize << '\n'; + oss << indent << "dacSettleTime_ns: " << a.dacSettleTime_ns; + return oss.str(); + }); + // dacIndex dacInd; + // int startOffset; + // int stopOffset; + // int stepSize; + // int64_t dacSettleTime_ns; + // patternParameters.def("numpy_view", [](py::object &obj) { + // pat &o = obj.cast(); + // return py::array_t(1, &o, obj); + // }); + + // py::class_ Pattern(m, "Pattern"); + // Pattern.def(py::init()); + // Pattern.def("load", &sls::Pattern::load); + // Pattern.def("data", (pat * (sls::Pattern::*)()) & sls::Pattern::data, + // py::return_value_policy::reference); +}