diff --git a/python/slsdet/detector.py b/python/slsdet/detector.py index 39dfdd450..3998b23a9 100755 --- a/python/slsdet/detector.py +++ b/python/slsdet/detector.py @@ -5,9 +5,10 @@ from _slsdet import IpAddr, MacAddr runStatus = slsDetectorDefs.runStatus speedLevel = slsDetectorDefs.speedLevel dacIndex = slsDetectorDefs.dacIndex +detectorType = slsDetectorDefs.detectorType from .utils import element_if_equal, all_equal, get_set_bits, list_to_bitmask -from .utils import Geometry, to_geo, element +from .utils import Geometry, to_geo, element, reduce_time from .registers import Register, Adc_register import datetime as dt @@ -170,6 +171,9 @@ class Detector(CppDetectorApi): @property 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]) diff --git a/python/slsdet/utils.py b/python/slsdet/utils.py index 4c9fa6c87..65d54145e 100755 --- a/python/slsdet/utils.py +++ b/python/slsdet/utils.py @@ -7,10 +7,17 @@ but not directly used in controlling the detector from collections import namedtuple import _slsdet #C++ lib import functools - +import datetime as dt Geometry = namedtuple('Geometry', ['x', 'y']) +def iterable(item): + try: + iter(item) + except TypeError: + return False + return True + def get_set_bits(mask): """ Return a list of the set bits in a python integer @@ -41,6 +48,9 @@ def all_equal(mylist): def element_if_equal(mylist): """If all elements are equal return only one element""" + if not iterable(mylist): + return mylist + if all_equal(mylist): if len(mylist) == 0: return None @@ -49,6 +59,13 @@ def element_if_equal(mylist): else: return mylist +def reduce_time(mylist): + res = element_if_equal(element_if_equal(mylist)) + if isinstance(res, dt.timedelta): + return res.total_seconds() + else: + return [r.total_seconds() for r in res] + def element(func): """ Wrapper to return either list or element diff --git a/python/unit-tests/test_utils.py b/python/unit-tests/test_utils.py index 15e7aad20..ae80dfa99 100755 --- a/python/unit-tests/test_utils.py +++ b/python/unit-tests/test_utils.py @@ -5,7 +5,28 @@ Testing functions from utils.py """ import pytest -from sls_detector.utils import * +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 + +def test_reduce_time_to_single_value_from_list(): + t = 3*[dt.timedelta(seconds = 1)] + assert reduce_time(t) == 1 + +def test_reduce_time_to_single_value_from_list_of_lists(): + t = 3*[dt.timedelta(seconds = 3.3)] + tt = 5*t + assert reduce_time(tt) == 3.3 + +def test_reduce_time_when_sublist_is_different(): + t = [dt.timedelta(seconds = 1), dt.timedelta(seconds = 2), dt.timedelta(seconds = 1)] + tt = 4*t + assert reduce_time(tt) == [1,2,1] def test_convert_zero():