This commit is contained in:
Erik Frojdh 2020-05-27 11:30:11 +02:00
parent f4ba46c19b
commit b543708d9d
3 changed files with 45 additions and 3 deletions

View File

@ -5,9 +5,10 @@ from _slsdet import IpAddr, MacAddr
runStatus = slsDetectorDefs.runStatus runStatus = slsDetectorDefs.runStatus
speedLevel = slsDetectorDefs.speedLevel speedLevel = slsDetectorDefs.speedLevel
dacIndex = slsDetectorDefs.dacIndex dacIndex = slsDetectorDefs.dacIndex
detectorType = slsDetectorDefs.detectorType
from .utils import element_if_equal, all_equal, get_set_bits, list_to_bitmask 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 from .registers import Register, Adc_register
import datetime as dt import datetime as dt
@ -170,6 +171,9 @@ class Detector(CppDetectorApi):
@property @property
def exptime(self): def exptime(self):
if self.type == detectorType.MYTHEN3:
res = self.getExptimeForAllGates()
return reduce_time(res)
res = self.getExptime() res = self.getExptime()
return element_if_equal([it.total_seconds() for it in res]) return element_if_equal([it.total_seconds() for it in res])

View File

@ -7,10 +7,17 @@ but not directly used in controlling the detector
from collections import namedtuple from collections import namedtuple
import _slsdet #C++ lib import _slsdet #C++ lib
import functools import functools
import datetime as dt
Geometry = namedtuple('Geometry', ['x', 'y']) Geometry = namedtuple('Geometry', ['x', 'y'])
def iterable(item):
try:
iter(item)
except TypeError:
return False
return True
def get_set_bits(mask): def get_set_bits(mask):
""" """
Return a list of the set bits in a python integer Return a list of the set bits in a python integer
@ -41,6 +48,9 @@ def all_equal(mylist):
def element_if_equal(mylist): def element_if_equal(mylist):
"""If all elements are equal return only one element""" """If all elements are equal return only one element"""
if not iterable(mylist):
return mylist
if all_equal(mylist): if all_equal(mylist):
if len(mylist) == 0: if len(mylist) == 0:
return None return None
@ -49,6 +59,13 @@ def element_if_equal(mylist):
else: else:
return mylist 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): def element(func):
""" """
Wrapper to return either list or element Wrapper to return either list or element

View File

@ -5,7 +5,28 @@ Testing functions from utils.py
""" """
import pytest 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(): def test_convert_zero():