diff --git a/python/slsdet/detector.py b/python/slsdet/detector.py index 061e70193..7887d582f 100755 --- a/python/slsdet/detector.py +++ b/python/slsdet/detector.py @@ -8,6 +8,8 @@ speedLevel = slsDetectorDefs.speedLevel dacIndex = slsDetectorDefs.dacIndex detectorType = slsDetectorDefs.detectorType +defs = slsDetectorDefs + from .utils import element_if_equal, all_equal, get_set_bits, list_to_bitmask from .utils import Geometry, to_geo, element, reduce_time, is_iterable from _slsdet import xy @@ -1787,10 +1789,25 @@ class Detector(CppDetectorApi): """ - <<<-----------------------Eiger specific----------------------->>> + <<>> """ + @property + def datastream(self): + """ + datastream [left|right] [0, 1] + [Eiger] Enables or disables data streaming from left or/and right side of detector. 1 (enabled) by default. + """ + result = {} + for port in [defs.LEFT, defs.RIGHT]: + result[port] = element_if_equal(self.getDataStream(port)) + return result + + @datastream.setter + def datastream(self, value): + ut.set_using_dict(self.setDataStream, *value) + @property @element def quad(self): diff --git a/python/src/detector.cpp b/python/src/detector.cpp index c29c8cabf..a5d909f9d 100644 --- a/python/src/detector.cpp +++ b/python/src/detector.cpp @@ -401,7 +401,9 @@ void init_det(py::module &m) { .def("startDetector", (void (Detector::*)()) & Detector::startDetector) .def("startDetectorReadout", (void (Detector::*)()) & Detector::startDetectorReadout) - .def("stopDetector", (void (Detector::*)()) & Detector::stopDetector) + .def("stopDetector", + (void (Detector::*)(sls::Positions)) & Detector::stopDetector, + py::arg() = Positions{}) .def("getDetectorStatus", (Result(Detector::*)(sls::Positions) const) & Detector::getDetectorStatus, @@ -430,7 +432,7 @@ void init_det(py::module &m) { .def("sendSoftwareTrigger", (void (Detector::*)(const bool, sls::Positions)) & Detector::sendSoftwareTrigger, - py::arg(), py::arg() = Positions{}) + py::arg() = false, py::arg() = Positions{}) .def("getScan", (Result(Detector::*)(sls::Positions) const) & Detector::getScan, @@ -911,6 +913,16 @@ void init_det(py::module &m) { py::arg() = Positions{}) .def("setQuad", (void (Detector::*)(const bool)) & Detector::setQuad, py::arg()) + .def("getDataStream", + (Result(Detector::*)(const defs::portPosition, + sls::Positions) const) & + Detector::getDataStream, + py::arg(), py::arg() = Positions{}) + .def("setDataStream", + (void (Detector::*)(const defs::portPosition, const bool, + sls::Positions)) & + Detector::setDataStream, + py::arg(), py::arg(), py::arg() = Positions{}) .def("getThresholdTemperature", (Result(Detector::*)(sls::Positions) const) & Detector::getThresholdTemperature, diff --git a/python/src/enums.cpp b/python/src/enums.cpp index 961f615be..fb39c208a 100644 --- a/python/src/enums.cpp +++ b/python/src/enums.cpp @@ -281,4 +281,11 @@ void init_enums(py::module &m) { .value("M3_C225ACsh", slsDetectorDefs::M3_GainCaps::M3_C225ACsh) .value("M3_C15pre", slsDetectorDefs::M3_GainCaps::M3_C15pre) .export_values(); + + py::enum_(Defs, "portPosition") + .value("LEFT", slsDetectorDefs::portPosition::LEFT) + .value("RIGHT", slsDetectorDefs::portPosition::RIGHT) + .value("TOP", slsDetectorDefs::portPosition::TOP) + .value("BOTTOM", slsDetectorDefs::portPosition::BOTTOM) + .export_values(); }