diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt index 615aa2ba8..8337a811b 100755 --- a/python/CMakeLists.txt +++ b/python/CMakeLists.txt @@ -6,6 +6,7 @@ pybind11_add_module(_slsdet src/network.cpp src/pattern.cpp src/scan.cpp + src/current.cpp ) target_link_libraries(_slsdet PUBLIC diff --git a/python/examples/use_currentsource.py b/python/examples/use_currentsource.py new file mode 100644 index 000000000..a895126b0 --- /dev/null +++ b/python/examples/use_currentsource.py @@ -0,0 +1,11 @@ +from slsdet import Detector, currentSrcParameters + +s = currentSrcParameters() +s.enable_ = 1 +s.fix_= 1 +s.normal_ = 1 +s.select_ = 10 + + +d = Detector() +d.currentsource = s \ No newline at end of file diff --git a/python/examples/using_scan.py b/python/examples/using_scan.py index 612cae754..2d8f5a74a 100644 --- a/python/examples/using_scan.py +++ b/python/examples/using_scan.py @@ -15,5 +15,7 @@ sp.dacSettleTime_ns = int(1e9) d = Mythen3() d.setScan(sp) +#or d.scan = sp + diff --git a/python/slsdet/__init__.py b/python/slsdet/__init__.py index 0d98b6f6d..698224525 100755 --- a/python/slsdet/__init__.py +++ b/python/slsdet/__init__.py @@ -20,4 +20,5 @@ from .enums import * IpAddr = _slsdet.IpAddr MacAddr = _slsdet.MacAddr -scanParameters = _slsdet.scanParameters \ No newline at end of file +scanParameters = _slsdet.scanParameters +currentSrcParameters = _slsdet.currentSrcParameters \ No newline at end of file diff --git a/python/slsdet/detector.py b/python/slsdet/detector.py index 12449391e..94f9ec483 100755 --- a/python/slsdet/detector.py +++ b/python/slsdet/detector.py @@ -362,6 +362,21 @@ class Detector(CppDetectorApi): """ return self.getNumberOfFramesFromStart() + + @property + @element + def scan(self): + """ + Pass in a scanParameters object + see python/examples/use_scan.py + + """ + return self.getScan() + + @scan.setter + def scan(self, s): + ut.set_using_dict(self.setScan, s) + @property @element def powerchip(self): @@ -1991,7 +2006,7 @@ class Detector(CppDetectorApi): return ut.reduce_time(self.getMeasuredSubFramePeriod()) """ - Jungfrau specific + ------------------<<>>------------------------- """ @property @@ -2212,6 +2227,20 @@ class Detector(CppDetectorApi): def gainmode(self, value): self.setGainMode(value) + @property + @element + def currentsource(self): + """ + Pass in a currentSrcParameters object + see python/examples/use_currentsource.py + + """ + return self.getCurrentSource() + + @currentsource.setter + def currentsource(self, cs): + ut.set_using_dict(self.setCurrentSource, cs) + """ ---------------------------<<>>--------------------------- """ diff --git a/python/src/current.cpp b/python/src/current.cpp new file mode 100644 index 000000000..e6d0d62b7 --- /dev/null +++ b/python/src/current.cpp @@ -0,0 +1,26 @@ +#include +#include +#include +#include +#include + +// #include "sls/Pattern.h" +#include "sls/ToString.h" +#include "sls/sls_detector_defs.h" + +namespace py = pybind11; +void init_source(py::module &m) { + + using src = slsDetectorDefs::currentSrcParameters; + py::class_ currentSrcParameters(m, "currentSrcParameters"); + + currentSrcParameters.def(py::init()); + currentSrcParameters.def_readwrite("enable_", &src::enable_); + currentSrcParameters.def_readwrite("fix_", &src::fix_); + currentSrcParameters.def_readwrite("normal_", &src::normal_); + currentSrcParameters.def_readwrite("select_", &src::select_); + currentSrcParameters.def(pybind11::self == pybind11::self); + + currentSrcParameters.def("__repr__", + [](const src &a) { return sls::ToString(a); }); +} diff --git a/python/src/detector.cpp b/python/src/detector.cpp index f34c141fd..4236a5af9 100644 --- a/python/src/detector.cpp +++ b/python/src/detector.cpp @@ -160,6 +160,13 @@ void init_det(py::module &m) { (void (Detector::*)(const bool)) & Detector::setGapPixelsinCallback, py::arg()) + .def("getFlipRows", + (Result(Detector::*)(sls::Positions) const) & + Detector::getFlipRows, + py::arg() = Positions{}) + .def("setFlipRows", + (void (Detector::*)(bool, sls::Positions)) & Detector::setFlipRows, + py::arg(), py::arg() = Positions{}) .def("isVirtualDetectorServer", (Result(Detector::*)(sls::Positions) const) & Detector::isVirtualDetectorServer, @@ -416,6 +423,39 @@ void init_det(py::module &m) { (void (Detector::*)(bool, sls::Positions)) & Detector::setParallelMode, py::arg(), py::arg() = Positions{}) + .def("getFilterResistor", + (Result(Detector::*)(sls::Positions) const) & + Detector::getFilterResistor, + py::arg() = Positions{}) + .def("setFilterResistor", + (void (Detector::*)(int, sls::Positions)) & + Detector::setFilterResistor, + py::arg(), py::arg() = Positions{}) + .def("getCurrentSource", + (Result(Detector::*)(sls::Positions) + const) & + Detector::getCurrentSource, + py::arg() = Positions{}) + .def("setCurrentSource", + (void (Detector::*)(defs::currentSrcParameters, sls::Positions)) & + Detector::setCurrentSource, + py::arg(), py::arg() = Positions{}) + .def("getDBITPipeline", + (Result(Detector::*)(sls::Positions) const) & + Detector::getDBITPipeline, + py::arg() = Positions{}) + .def("setDBITPipeline", + (void (Detector::*)(int, sls::Positions)) & + Detector::setDBITPipeline, + py::arg(), py::arg() = Positions{}) + .def("getReadNRows", + (Result(Detector::*)(sls::Positions) const) & + Detector::getReadNRows, + py::arg() = Positions{}) + .def("setReadNRows", + (void (Detector::*)(const int, sls::Positions)) & + Detector::setReadNRows, + py::arg(), py::arg() = Positions{}) .def("acquire", (void (Detector::*)()) & Detector::acquire) .def("clearAcquiringFlag", (void (Detector::*)()) & Detector::clearAcquiringFlag) @@ -516,6 +556,31 @@ void init_det(py::module &m) { (void (Detector::*)(const sls::MacAddr, sls::Positions)) & Detector::setSourceUDPMAC2, py::arg(), py::arg() = Positions{}) + .def("getDestinationUDPList", + (Result(Detector::*)(const uint32_t, + sls::Positions) const) & + Detector::getDestinationUDPList, + py::arg(), py::arg() = Positions{}) + .def("setDestinationUDPList", + (void (Detector::*)(const sls::UdpDestination, const int)) & + Detector::setDestinationUDPList, + py::arg(), py::arg()) + .def("getNumberofUDPDestinations", + (Result(Detector::*)(sls::Positions) const) & + Detector::getNumberofUDPDestinations, + py::arg() = Positions{}) + .def("clearUDPDestinations", + (void (Detector::*)(sls::Positions)) & + Detector::clearUDPDestinations, + py::arg() = Positions{}) + .def("getFirstUDPDestination", + (Result(Detector::*)(sls::Positions) const) & + Detector::getFirstUDPDestination, + py::arg() = Positions{}) + .def("setFirstUDPDestination", + (void (Detector::*)(const int, sls::Positions)) & + Detector::setFirstUDPDestination, + py::arg(), py::arg() = Positions{}) .def("getDestinationUDPIP", (Result(Detector::*)(sls::Positions) const) & Detector::getDestinationUDPIP, @@ -852,13 +917,6 @@ void init_det(py::module &m) { (void (Detector::*)(bool, sls::Positions)) & Detector::setOverFlowMode, py::arg(), py::arg() = Positions{}) - .def("getFlipRows", - (Result(Detector::*)(sls::Positions) const) & - Detector::getFlipRows, - py::arg() = Positions{}) - .def("setFlipRows", - (void (Detector::*)(bool, sls::Positions)) & Detector::setFlipRows, - py::arg(), py::arg() = Positions{}) .def("getRateCorrection", (Result(Detector::*)(sls::Positions) const) & Detector::getRateCorrection, @@ -871,14 +929,6 @@ void init_det(py::module &m) { (void (Detector::*)(sls::ns, sls::Positions)) & Detector::setRateCorrection, py::arg(), py::arg() = Positions{}) - .def("getReadNRows", - (Result(Detector::*)(sls::Positions) const) & - Detector::getReadNRows, - py::arg() = Positions{}) - .def("setReadNRows", - (void (Detector::*)(const int, sls::Positions)) & - Detector::setReadNRows, - py::arg(), py::arg() = Positions{}) .def("getInterruptSubframe", (Result(Detector::*)(sls::Positions) const) & Detector::getInterruptSubframe, @@ -1022,9 +1072,17 @@ void init_det(py::module &m) { Detector::getGainMode, py::arg() = Positions{}) .def("setGainMode", - (void (Detector::*)(defs::gainMode, sls::Positions)) & + (void (Detector::*)(const defs::gainMode, sls::Positions)) & Detector::setGainMode, py::arg(), py::arg() = Positions{}) + .def("getFilterCell", + (Result(Detector::*)(sls::Positions) const) & + Detector::getFilterCell, + py::arg() = Positions{}) + .def("setFilterCell", + (void (Detector::*)(int, sls::Positions)) & + Detector::setFilterCell, + py::arg(), py::arg() = Positions{}) .def("getROI", (Result(Detector::*)(sls::Positions) const) & Detector::getROI, @@ -1100,30 +1158,6 @@ void init_det(py::module &m) { .def("setCDSGain", (void (Detector::*)(bool, sls::Positions)) & Detector::setCDSGain, py::arg(), py::arg() = Positions{}) - .def("getFilterResistor", - (Result(Detector::*)(sls::Positions) const) & - Detector::getFilterResistor, - py::arg() = Positions{}) - .def("setFilterResistor", - (void (Detector::*)(int, sls::Positions)) & - Detector::setFilterResistor, - py::arg(), py::arg() = Positions{}) - .def("getFilterCell", - (Result(Detector::*)(sls::Positions) const) & - Detector::getFilterCell, - py::arg() = Positions{}) - .def("setFilterCell", - (void (Detector::*)(int, sls::Positions)) & - Detector::setFilterCell, - py::arg(), py::arg() = Positions{}) - .def("getCurrentSource", - (Result(Detector::*)(sls::Positions) const) & - Detector::getCurrentSource, - py::arg() = Positions{}) - .def("setCurrentSource", - (void (Detector::*)(bool, sls::Positions)) & - Detector::setCurrentSource, - py::arg(), py::arg() = Positions{}) .def("getTimingSource", (Result(Detector::*)(sls::Positions) const) & @@ -1315,14 +1349,6 @@ void init_det(py::module &m) { .def("setDBITClock", (void (Detector::*)(int, sls::Positions)) & Detector::setDBITClock, py::arg(), py::arg() = Positions{}) - .def("getDBITPipeline", - (Result(Detector::*)(sls::Positions) const) & - Detector::getDBITPipeline, - py::arg() = Positions{}) - .def("setDBITPipeline", - (void (Detector::*)(int, sls::Positions)) & - Detector::setDBITPipeline, - py::arg(), py::arg() = Positions{}) .def("getMeasuredVoltage", (Result(Detector::*)(defs::dacIndex, sls::Positions) const) & Detector::getMeasuredVoltage, diff --git a/python/src/main.cpp b/python/src/main.cpp index 291752c34..7afa194b2 100755 --- a/python/src/main.cpp +++ b/python/src/main.cpp @@ -21,6 +21,7 @@ void init_det(py::module &); void init_network(py::module &); void init_pattern(py::module &); void init_scan(py::module &); +void init_source(py::module &); PYBIND11_MODULE(_slsdet, m) { m.doc() = R"pbdoc( C/C++ API @@ -37,6 +38,7 @@ PYBIND11_MODULE(_slsdet, m) { init_network(m); init_pattern(m); init_scan(m); + init_source(m); // init_experimental(m);