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
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])

View File

@ -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