From 71b0ed271e3ee0722bc3771729bb2735d268bdfe Mon Sep 17 00:00:00 2001 From: Erik Frojdh Date: Wed, 8 Jan 2020 15:33:28 +0100 Subject: [PATCH] CTB --- python/CMakeLists.txt | 2 +- python/scripts/basic.py | 6 +- python/sls_detector/__init__.py | 1 + python/sls_detector/ctb.py | 121 ++++++++++++++++++++++++++++++++ python/sls_detector/eiger.py | 1 - python/sls_detector/utils.py | 6 ++ 6 files changed, 131 insertions(+), 6 deletions(-) create mode 100644 python/sls_detector/ctb.py diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt index 9bd69e94b..dfada8571 100755 --- a/python/CMakeLists.txt +++ b/python/CMakeLists.txt @@ -29,7 +29,7 @@ set( PYTHON_FILES eiger.py errors.py experimental.py - # jungfrau_ctb.py + ctb.py # jungfrau.py registers.py utils.py diff --git a/python/scripts/basic.py b/python/scripts/basic.py index 54911fb88..110828a17 100755 --- a/python/scripts/basic.py +++ b/python/scripts/basic.py @@ -4,12 +4,10 @@ import numpy as np sys.path.append(os.path.join(os.getcwd(), 'bin')) # from sls_detector import Eiger, Jungfrau, Detector, defs -from sls_detector import Detector, Eiger, DetectorDacs, Dac +from sls_detector import Detector, Eiger, DetectorDacs, Dac, Ctb from sls_detector import dacIndex d = Detector() e = Eiger() - -# from sls_detector.eiger import EigerVcmp -# v = EigerVcmp(d) \ No newline at end of file +c = Ctb() \ No newline at end of file diff --git a/python/sls_detector/__init__.py b/python/sls_detector/__init__.py index e11a3dfe7..ce1395931 100755 --- a/python/sls_detector/__init__.py +++ b/python/sls_detector/__init__.py @@ -1,5 +1,6 @@ # from .detector import Detector, DetectorError, free_shared_memory from .eiger import Eiger +from .ctb import Ctb from .dacs import DetectorDacs, Dac from .experimental import Detector diff --git a/python/sls_detector/ctb.py b/python/sls_detector/ctb.py new file mode 100644 index 000000000..06298681c --- /dev/null +++ b/python/sls_detector/ctb.py @@ -0,0 +1,121 @@ +from .experimental import Detector +from .utils import element_if_equal +from .dacs import DetectorDacs +import _sls_detector +dacIndex = _sls_detector.slsDetectorDefs.dacIndex +from .detector_property import DetectorProperty + +class CtbDacs(DetectorDacs): + """ + Eiger specific dacs + """ + _dacs = [('dac0', dacIndex(0), 0, 4000, 1400), + ('dac1', dacIndex(1), 0, 4000, 1200), + ('dac2', dacIndex(2), 0, 4000, 900), + ('dac3', dacIndex(3), 0, 4000, 1050), + ('dac4', dacIndex(4), 0, 4000, 1400), + ('dac5', dacIndex(5), 0, 4000, 655), + ('dac6', dacIndex(6), 0, 4000, 2000), + ('dac7', dacIndex(7), 0, 4000, 1400), + ('dac8', dacIndex(8), 0, 4000, 850), + ('dac9', dacIndex(9), 0, 4000, 2000), + ('dac10', dacIndex(10), 0, 4000, 2294), + ('dac11', dacIndex(11), 0, 4000, 983), + ('dac12', dacIndex(12), 0, 4000, 1475), + ('dac13', dacIndex(13), 0, 4000, 1200), + ('dac14', dacIndex(14), 0, 4000, 1600), + ('dac15', dacIndex(15), 0, 4000, 1455), + ('dac16', dacIndex(16), 0, 4000, 0), + ('dac17', dacIndex(17), 0, 4000, 1000), + ] + _dacnames = [_d[0] for _d in _dacs] + +from .utils import element +class Ctb(Detector): + def __init__(self, id = 0): + super().__init__(id) + self._frozen = False + self._dacs = CtbDacs(self) + + @property + def dacs(self): + return self._dacs + + @property + @element + def v_a(self): + return self.getDAC(dacIndex.V_POWER_A, True) + + @v_a.setter + def v_a(self, value): + self.setDAC(dacIndex.V_POWER_A, value, True) + + @property + @element + def v_b(self): + return self.getDAC(dacIndex.V_POWER_B, True) + + @v_b.setter + def v_b(self, value): + self.setDAC(dacIndex.V_POWER_B, value, True) + + @property + @element + def v_c(self): + return self.getDAC(dacIndex.V_POWER_C, True) + + @v_c.setter + def v_c(self, value): + self.setDAC(dacIndex.V_POWER_C, value, True) + + @property + @element + def v_d(self): + return self.getDAC(dacIndex.V_POWER_D, True) + + @v_d.setter + def v_d(self, value): + self.setDAC(dacIndex.V_POWER_D, value, True) + + @property + @element + def v_io(self): + return self.getDAC(dacIndex.V_POWER_IO, True) + + @v_io.setter + def v_io(self, value): + self.setDAC(dacIndex.V_POWER_IO, value, True) + + @property + @element + def v_limit(self): + return self.getDAC(dacIndex.V_LIMIT, True) + + @v_limit.setter + def v_limit(self, value): + self.setDAC(dacIndex.V_LIMIT, value, True) + + @property + @element + def im_a(self): + return self.getMeasuredCurrent(dacIndex.I_POWER_A) + + @property + @element + def im_b(self): + return self.getMeasuredCurrent(dacIndex.I_POWER_B) + + @property + @element + def im_c(self): + return self.getMeasuredCurrent(dacIndex.I_POWER_C) + + @property + @element + def im_d(self): + return self.getMeasuredCurrent(dacIndex.I_POWER_D) + + @property + @element + def im_io(self): + return self.getMeasuredCurrent(dacIndex.I_POWER_IO) \ No newline at end of file diff --git a/python/sls_detector/eiger.py b/python/sls_detector/eiger.py index b09b083a5..0cdb15a27 100755 --- a/python/sls_detector/eiger.py +++ b/python/sls_detector/eiger.py @@ -45,7 +45,6 @@ class EigerVcmp: else: dacs = _dacs[::-1] for d in dacs: - print(d, i) self.set.append(lambda x, d=d, i=i : detector.setDAC(d, x, False, [i])) self.get.append(lambda d=d, i=i : detector.getDAC(d, False, [i])[0]) diff --git a/python/sls_detector/utils.py b/python/sls_detector/utils.py index fc0c6537a..1e1f3afff 100755 --- a/python/sls_detector/utils.py +++ b/python/sls_detector/utils.py @@ -4,6 +4,7 @@ but not directly used in controlling the detector """ from collections import namedtuple import _sls_detector #C++ lib +import functools Geometry = namedtuple('Geometry', ['x', 'y']) @@ -28,6 +29,11 @@ def element_if_equal(mylist): else: return mylist +def element(func): + @functools.wraps(func) + def wrapper(self, *args, **kwargs): + return element_if_equal(func(self, *args, **kwargs)) + return wrapper def eiger_register_to_time(register): """