From 6c753f3b506fafff9528ec8e1996404db1542fdb Mon Sep 17 00:00:00 2001 From: Erik Frojdh Date: Thu, 28 May 2020 08:48:11 +0200 Subject: [PATCH] veto --- python/slsdet/detector.py | 65 ++++++++++++++------------------- python/slsdet/utils.py | 5 +++ python/src/detector.cpp | 8 ++++ python/unit-tests/test_utils.py | 25 ++++++++++--- 4 files changed, 60 insertions(+), 43 deletions(-) diff --git a/python/slsdet/detector.py b/python/slsdet/detector.py index 605226432..0f5ec95f9 100755 --- a/python/slsdet/detector.py +++ b/python/slsdet/detector.py @@ -9,6 +9,7 @@ detectorType = slsDetectorDefs.detectorType 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 . import utils as ut from .registers import Register, Adc_register import datetime as dt @@ -173,16 +174,14 @@ class Detector(CppDetectorApi): def exptime(self): if self.type == detectorType.MYTHEN3: res = self.getExptimeForAllGates() - return reduce_time(res) - res = self.getExptime() - return element_if_equal([it.total_seconds() for it in res]) + else: + res = self.getExptime() + return reduce_time(res) + @exptime.setter def exptime(self, t): - if isinstance(t, dt.timedelta): - self.setExptime(t) - else: - self.setExptime(dt.timedelta(seconds=t)) + self.setExptime(ut.make_timedelta(t)) @property def gatedelay(self): @@ -193,57 +192,36 @@ class Detector(CppDetectorApi): if is_iterable(value): if len(value) == 3: for i,v in enumerate(value): - if isinstance(v, dt.timedelta): - self.setGateDelay(i, v) - else: - self.setGateDelay(i, dt.timedelta(seconds = v)) + self.setGateDelay(i, ut.make_timedelta(v)) else: - if isinstance(value, dt.timedelta): - self.setGateDelay(-1, value) - else: - self.setGateDelay(-1, dt.timedelta(seconds=value)) - - + self.setGateDelay(-1, ut.make_timedelta(value)) + @property def subexptime(self): res = self.getSubExptime() - return element_if_equal([it.total_seconds() for it in res]) + return reduce_time(res) @subexptime.setter def subexptime(self, t): - if isinstance(t, dt.timedelta): - self.setSubExptime(t) - else: - self.setSubExptime(dt.timedelta(seconds=t)) + self.setSubExptime(ut.make_timedelta(t)) @property def subdeadtime(self): res = self.getSubDeadTime() - return element_if_equal([it.total_seconds() for it in res]) + reduce_time(res) @subdeadtime.setter def subdeadtime(self, t): - if isinstance(t, dt.timedelta): - self.setSubDeadTime(t) - else: - self.setSubDeadTime(dt.timedelta(seconds=t)) - + self.setSubDeadTime(ut.make_timedelta(t)) @property def period(self): res = self.getPeriod() - return element_if_equal([it.total_seconds() for it in res]) + reduce_time(res) @period.setter def period(self, t): - if isinstance(t, dt.timedelta): - self.setPeriod(t) - else: - self.setPeriod(dt.timedelta(seconds=t)) - - - - + self.setPeriod(ut.make_timedelta(t)) # Time @property @@ -770,6 +748,19 @@ class Detector(CppDetectorApi): def storeinram(self, value): self.setStoreInRamMode(value) + """ + Gotthard2 + """ + @property + @element + def veto(self): + return self.getVeto() + + @veto.setter + def veto(self, value): + self.setVeto(value) + + """ Mythen3 specific diff --git a/python/slsdet/utils.py b/python/slsdet/utils.py index e21a956f9..405ad6230 100755 --- a/python/slsdet/utils.py +++ b/python/slsdet/utils.py @@ -88,3 +88,8 @@ def eiger_register_to_time(register): exponent = register & 0b111 return clocks*10**exponent / 100e6 +def make_timedelta(t): + if isinstance(t, dt.timedelta): + return t + else: + return dt.timedelta(seconds=t) diff --git a/python/src/detector.cpp b/python/src/detector.cpp index a2f29af31..87dda5feb 100644 --- a/python/src/detector.cpp +++ b/python/src/detector.cpp @@ -978,6 +978,14 @@ void init_det(py::module &m) { (void (Detector::*)(defs::timingSourceType, sls::Positions)) & Detector::setTimingSource, py::arg(), py::arg() = Positions{}) + .def("getVeto", + (Result(Detector::*)(sls::Positions) const) & + Detector::getVeto, + py::arg() = Positions{}) + .def("setVeto", + (void (Detector::*)(const bool, sls::Positions)) & + Detector::setVeto, + py::arg(), py::arg() = Positions{}) .def("getCounterMask", (Result(Detector::*)(sls::Positions) const) & Detector::getCounterMask, diff --git a/python/unit-tests/test_utils.py b/python/unit-tests/test_utils.py index ae80dfa99..5850aa4a4 100755 --- a/python/unit-tests/test_utils.py +++ b/python/unit-tests/test_utils.py @@ -9,10 +9,10 @@ from slsdet.utils import * import datetime as dt def test_iterable(): - assert iterable(5) == False - assert iterable('abc') == True - assert iterable([]) == True - assert iterable(5.9) == False + assert is_iterable(5) == False + assert is_iterable('abc') == True + assert is_iterable([]) == True + assert is_iterable(5.9) == False def test_reduce_time_to_single_value_from_list(): t = 3*[dt.timedelta(seconds = 1)] @@ -25,7 +25,7 @@ def test_reduce_time_to_single_value_from_list_of_lists(): def test_reduce_time_when_sublist_is_different(): t = [dt.timedelta(seconds = 1), dt.timedelta(seconds = 2), dt.timedelta(seconds = 1)] - tt = 4*t + tt = [t for i in range(4)] assert reduce_time(tt) == [1,2,1] @@ -80,4 +80,17 @@ def test_list_to_mask(): assert(list_to_bitmask([0]) == 1) assert(list_to_bitmask([1]) == 2) assert(list_to_bitmask([3]) == 8) - assert(list_to_bitmask([1,1,1]) == 2) \ No newline at end of file + assert(list_to_bitmask([1,1,1]) == 2) + + +def test_make_timedelta_from_double(): + t = 1.7 + r = make_timedelta(t) + assert t == r.total_seconds() + assert r == dt.timedelta(seconds=t) + +def test_make_timedelta_from_timedelta(): + t = dt.timedelta(minutes=1) + r = make_timedelta(t) + assert 60 == r.total_seconds() + assert r == dt.timedelta(minutes=1) \ No newline at end of file