From dac5ecd123eaba0e8aad5ae72446bf81ddbd9df1 Mon Sep 17 00:00:00 2001 From: Erik Frojdh Date: Wed, 8 Jan 2020 16:44:42 +0100 Subject: [PATCH] dbit --- python/scripts/basic.py | 3 +- python/scripts/cmd_python.py | 13 ++++ python/sls_detector/ctb.py | 2 +- python/sls_detector/experimental.py | 110 +++++++++++++++++++++------- python/sls_detector/registers.py | 9 ++- python/sls_detector/utils.py | 3 + 6 files changed, 108 insertions(+), 32 deletions(-) create mode 100644 python/scripts/cmd_python.py diff --git a/python/scripts/basic.py b/python/scripts/basic.py index 110828a17..3c4c450c6 100755 --- a/python/scripts/basic.py +++ b/python/scripts/basic.py @@ -10,4 +10,5 @@ from sls_detector import dacIndex d = Detector() e = Eiger() -c = Ctb() \ No newline at end of file +c = Ctb() + diff --git a/python/scripts/cmd_python.py b/python/scripts/cmd_python.py new file mode 100644 index 000000000..9dc15374e --- /dev/null +++ b/python/scripts/cmd_python.py @@ -0,0 +1,13 @@ +import subprocess +import locale +out = subprocess.run(['g', 'list'], stdout = subprocess.PIPE, encoding=locale.getpreferredencoding()) +cmd = out.stdout.splitlines() +cmd.pop(0) + +from sls_detector import Detector, Eiger, Ctb + +pycmd = dir(Detector)+dir(Eiger)+dir(Ctb) + +for c in cmd: + if c not in pycmd: + print(c) \ No newline at end of file diff --git a/python/sls_detector/ctb.py b/python/sls_detector/ctb.py index 06298681c..3c57d3220 100644 --- a/python/sls_detector/ctb.py +++ b/python/sls_detector/ctb.py @@ -7,7 +7,7 @@ from .detector_property import DetectorProperty class CtbDacs(DetectorDacs): """ - Eiger specific dacs + Ctb dacs """ _dacs = [('dac0', dacIndex(0), 0, 4000, 1400), ('dac1', dacIndex(1), 0, 4000, 1200), diff --git a/python/sls_detector/experimental.py b/python/sls_detector/experimental.py index 50727e2c6..cb1e486b7 100755 --- a/python/sls_detector/experimental.py +++ b/python/sls_detector/experimental.py @@ -7,24 +7,25 @@ dacIndex = slsDetectorDefs.dacIndex from .utils import element_if_equal, all_equal from .utils import Geometry, to_geo +from .registers import Register, Adc_register import datetime as dt from functools import wraps from collections import namedtuple -class Register: - """ - Helper class to read and write to registers using a - more Pythonic syntax - """ - def __init__(self, detector): - self._detector = detector +# class Register: +# """ +# Helper class to read and write to registers using a +# more Pythonic syntax +# """ +# def __init__(self, detector): +# self._detector = detector - def __getitem__(self, key): - return self._detector.readRegister(key) +# def __getitem__(self, key): +# return self._detector.readRegister(key) - def __setitem__(self, key, value): - self._detector.writeRegister(key, value) +# def __setitem__(self, key, value): +# self._detector.writeRegister(key, value) def freeze(cls): @@ -69,6 +70,7 @@ class Detector(CppDetectorApi): """ super().__init__(multi_id) self._register = Register(self) + self._adc_register = Adc_register(self) @@ -589,6 +591,10 @@ class Detector(CppDetectorApi): def reg(self): return self._register + @property + def adcreg(self): + return self._adc_register + @property def ratecorr(self): """ tau in ns """ @@ -639,21 +645,7 @@ class Detector(CppDetectorApi): def vthreshold(self): return element_if_equal(self.getDAC(dacIndex.THRESHOLD)) - @property - def asamples(self): - return element_if_equal(self.getNumberOfAnalogSamples()) - - @asamples.setter - def asamples(self, N): - self.setNumberOfAnalogSamples(N) - - @property - def dsamples(self): - return element_if_equal(self.getNumberOfDigitalSamples()) - - @dsamples.setter - def dsamples(self, N): - self.setNumberOfDigitalSamples(N) + """ @@ -682,4 +674,68 @@ class Detector(CppDetectorApi): @flowcontrol10g.setter def flowcontrol10g(self, enable): - self.setTenGigaFlowControl(enable) \ No newline at end of file + self.setTenGigaFlowControl(enable) + + """ + CTB stuff + """ + + @property + def asamples(self): + return element_if_equal(self.getNumberOfAnalogSamples()) + + @asamples.setter + def asamples(self, N): + self.setNumberOfAnalogSamples(N) + + @property + def dsamples(self): + return element_if_equal(self.getNumberOfDigitalSamples()) + + @dsamples.setter + def dsamples(self, N): + self.setNumberOfDigitalSamples(N) + + @property + def dbitphase(self): + return element_if_equal(self.getDBITPhase()) + + @dbitphase.setter + def dbitphase(self, value): + self.setDBITPhase(value) + + @property + def dbitclk(self): + return element_if_equal(self.getDBITClock()) + + @dbitclk.setter + def dbitclk(self, value): + self.setDBITClock(value) + + @property + def dbitpipeline(self): + return element_if_equal(self.getDBITPipeline()) + + @dbitpipeline.setter + def dbitpipeline(self, value): + self.setDBITPipeline(value) + + @property + def maxdbitphaseshift(self): + return element_if_equal(self.getMaxDBITPhaseShift()) + + @property + def rx_dbitlist(self): + return element_if_equal(self.getRxDbitList()) + + @rx_dbitlist.setter + def rx_dbitlist(self, value): + self.setRxDbitList(value) + + @property + def rx_dbitoffset(self): + return element_if_equal(self.getRxDbitOffset()) + + @rx_dbitoffset.setter + def rx_dbitoffset(self, value): + self.setRxDbitOffset(value) \ No newline at end of file diff --git a/python/sls_detector/registers.py b/python/sls_detector/registers.py index 0685dc3ea..ae7eeda5e 100755 --- a/python/sls_detector/registers.py +++ b/python/sls_detector/registers.py @@ -3,14 +3,17 @@ class Register: self._detector = detector def __getitem__(self, key): - return self._detector._api.readRegister(key) + return self._detector.readRegister(key) def __setitem__(self, key, value): - self._detector._api.writeRegister(key, value) + self._detector.writeRegister(key, value) class Adc_register: def __init__(self, detector): self._detector = detector def __setitem__(self, key, value): - self._detector._api.writeAdcRegister(key, value) \ No newline at end of file + self._detector.writeAdcRegister(key, value) + + def __getitem__(self, key): + raise ValueError('Adc registers cannot be read back') \ No newline at end of file diff --git a/python/sls_detector/utils.py b/python/sls_detector/utils.py index 1e1f3afff..0032320cc 100755 --- a/python/sls_detector/utils.py +++ b/python/sls_detector/utils.py @@ -30,6 +30,9 @@ def element_if_equal(mylist): return mylist def element(func): + """ + Wrapper to return either list or element + """ @functools.wraps(func) def wrapper(self, *args, **kwargs): return element_if_equal(func(self, *args, **kwargs))