From 65d95480bd57f5c5970e3d4867f959c9c7fce4d2 Mon Sep 17 00:00:00 2001 From: Dhanya Thattil Date: Mon, 20 Jan 2020 13:50:50 +0100 Subject: [PATCH 1/7] mythen3 bug fix: rxr needs to update dr --- slsDetectorSoftware/src/slsDetector.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/slsDetectorSoftware/src/slsDetector.cpp b/slsDetectorSoftware/src/slsDetector.cpp index 48638c401..4799c7d12 100755 --- a/slsDetectorSoftware/src/slsDetector.cpp +++ b/slsDetectorSoftware/src/slsDetector.cpp @@ -1793,6 +1793,7 @@ std::string slsDetector::setReceiverHostname(const std::string &receiverIP) { case MYTHEN3: sendNumberofCounterstoReceiver(getCounterMask()); + setDynamicRange(shm()->dynamicRange); break; default: From a0c222b3c6f24e147bdfd3edd2b9097df9d422ef Mon Sep 17 00:00:00 2001 From: Erik Frojdh Date: Mon, 20 Jan 2020 14:23:28 +0100 Subject: [PATCH 2/7] constructor --- slsSupportLib/include/sls_detector_defs.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/slsSupportLib/include/sls_detector_defs.h b/slsSupportLib/include/sls_detector_defs.h index 5e6823adf..54a260fd1 100755 --- a/slsSupportLib/include/sls_detector_defs.h +++ b/slsSupportLib/include/sls_detector_defs.h @@ -211,6 +211,8 @@ class slsDetectorDefs { struct xy { int x{0}; int y{0}; + xy() = default; + xy(int x, int y):x(x),y(y){}; }; #endif From 0194d7ba1c00c0e0b18b71dccbfa6efcb63e8cb9 Mon Sep 17 00:00:00 2001 From: Erik Frojdh Date: Mon, 20 Jan 2020 16:37:18 +0100 Subject: [PATCH 3/7] ctb --- python/scripts/basic.py | 2 +- python/sls_detector/__init__.py | 1 + python/sls_detector/detector.py | 30 +++++++++++++++++++++++++++++- 3 files changed, 31 insertions(+), 2 deletions(-) diff --git a/python/scripts/basic.py b/python/scripts/basic.py index c64cdd455..77d844632 100755 --- a/python/scripts/basic.py +++ b/python/scripts/basic.py @@ -4,7 +4,7 @@ import numpy as np sys.path.append(os.path.join(os.getcwd(), 'bin')) from sls_detector import Detector, Mythen3, Eiger, Jungfrau, DetectorDacs, Dac, Ctb -from sls_detector import dacIndex +from sls_detector import dacIndex, readoutMode d = Detector() diff --git a/python/sls_detector/__init__.py b/python/sls_detector/__init__.py index e46467beb..12e86677b 100755 --- a/python/sls_detector/__init__.py +++ b/python/sls_detector/__init__.py @@ -17,6 +17,7 @@ timingMode = _sls_detector.slsDetectorDefs.timingMode dacIndex = _sls_detector.slsDetectorDefs.dacIndex detectorType = _sls_detector.slsDetectorDefs.detectorType detectorSettings = _sls_detector.slsDetectorDefs.detectorSettings +readoutMode = _sls_detector.slsDetectorDefs.readoutMode IpAddr = _sls_detector.IpAddr MacAddr = _sls_detector.MacAddr diff --git a/python/sls_detector/detector.py b/python/sls_detector/detector.py index 6c60b72bd..81bee3cf6 100755 --- a/python/sls_detector/detector.py +++ b/python/sls_detector/detector.py @@ -774,6 +774,22 @@ class Detector(CppDetectorApi): CTB stuff """ + @property + def runclk(self): + return element_if_equal(self.getRUNClock()) + + @runclk.setter + def runclk(self, freq): + self.setRUNClock(freq) + + @property + def romode(self): + return element_if_equal(self.getReadoutMode()) + + @romode.setter + def romode(self, mode): + self.setReadoutMode(mode) + @property def asamples(self): return element_if_equal(self.getNumberOfAnalogSamples()) @@ -844,4 +860,16 @@ class Detector(CppDetectorApi): @property def adcphase(self): - return element_if_equal() \ No newline at end of file + return element_if_equal(self.getADCPhase()) + + @adcphase.setter + def adcphase(self, value): + self.setADCPhase(value) + + @property + def adcpipeline(self): + return element_if_equal(self.getADCPipeline()) + + @adcpipeline.setter + def adcpipeline(self, value): + self.setADCPipeline(value) \ No newline at end of file From 4b7edf2e62c30581a6ad7d0994915df54fae82bf Mon Sep 17 00:00:00 2001 From: Erik Frojdh Date: Mon, 20 Jan 2020 16:46:38 +0100 Subject: [PATCH 4/7] ctb --- python/sls_detector/detector.py | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/python/sls_detector/detector.py b/python/sls_detector/detector.py index 81bee3cf6..02fb81beb 100755 --- a/python/sls_detector/detector.py +++ b/python/sls_detector/detector.py @@ -854,10 +854,6 @@ class Detector(CppDetectorApi): def maxadcphaseshift(self): return element_if_equal(self.getMaxADCPhaseShift()) - @property - def maxclkphaseshift(self): - return element_if_equal(self.getMaxClockPhaseShift()) - @property def adcphase(self): return element_if_equal(self.getADCPhase()) @@ -872,4 +868,17 @@ class Detector(CppDetectorApi): @adcpipeline.setter def adcpipeline(self, value): - self.setADCPipeline(value) \ No newline at end of file + self.setADCPipeline(value) + + @property + def adcclk(self): + return element_if_equal(self.getADCClock()) + + @adcclk.setter + def adcclk(self, value): + self.setADCClock(value) + + @property + def syncclk(self): + return element_if_equal(self.getSYNCClock()) + From 5667353f471dd0572701fe6d9214f2ff7a654e47 Mon Sep 17 00:00:00 2001 From: Erik Frojdh Date: Tue, 21 Jan 2020 09:07:27 +0100 Subject: [PATCH 5/7] WIP --- python/CMakeLists.txt | 1 + python/scripts/basic.py | 6 +++--- python/sls_detector/detector.py | 15 --------------- python/sls_detector/utils.py | 4 ++++ 4 files changed, 8 insertions(+), 18 deletions(-) diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt index 2f88b948d..df3dd5637 100755 --- a/python/CMakeLists.txt +++ b/python/CMakeLists.txt @@ -32,6 +32,7 @@ set( PYTHON_FILES jungfrau.py mythen3.py registers.py + lookup.py utils.py ) diff --git a/python/scripts/basic.py b/python/scripts/basic.py index 77d844632..8cdd99885 100755 --- a/python/scripts/basic.py +++ b/python/scripts/basic.py @@ -5,11 +5,11 @@ sys.path.append(os.path.join(os.getcwd(), 'bin')) from sls_detector import Detector, Mythen3, Eiger, Jungfrau, DetectorDacs, Dac, Ctb from sls_detector import dacIndex, readoutMode - +from sls_detector.lookup import view, find d = Detector() # e = Eiger() -# c = Ctb() +c = Ctb() # j = Jungfrau() -m = Mythen3() +# m = Mythen3() diff --git a/python/sls_detector/detector.py b/python/sls_detector/detector.py index 02fb81beb..5d1725f10 100755 --- a/python/sls_detector/detector.py +++ b/python/sls_detector/detector.py @@ -13,21 +13,6 @@ 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 - -# def __getitem__(self, key): -# return self._detector.readRegister(key) - -# def __setitem__(self, key, value): -# self._detector.writeRegister(key, value) - - def freeze(cls): cls._frozen = False diff --git a/python/sls_detector/utils.py b/python/sls_detector/utils.py index 5c5835bc9..f59e67c89 100755 --- a/python/sls_detector/utils.py +++ b/python/sls_detector/utils.py @@ -2,10 +2,13 @@ Utility functions that are useful for testing and troubleshooting but not directly used in controlling the detector """ + + from collections import namedtuple import _sls_detector #C++ lib import functools + Geometry = namedtuple('Geometry', ['x', 'y']) def get_set_bits(mask): @@ -65,3 +68,4 @@ def eiger_register_to_time(register): clocks = register >> 3 exponent = register & 0b111 return clocks*10**exponent / 100e6 + From 6bd0256172a476a51f28a4c4d07eca987b8c3d9b Mon Sep 17 00:00:00 2001 From: Erik Frojdh Date: Tue, 21 Jan 2020 10:22:26 +0100 Subject: [PATCH 6/7] pattern stuff --- python/sls_detector/detector.py | 139 ++++++++++++++++++++++++++++++++ python/sls_detector/lookup.py | 9 +++ 2 files changed, 148 insertions(+) create mode 100644 python/sls_detector/lookup.py diff --git a/python/sls_detector/detector.py b/python/sls_detector/detector.py index 5d1725f10..bed1958a6 100755 --- a/python/sls_detector/detector.py +++ b/python/sls_detector/detector.py @@ -867,3 +867,142 @@ class Detector(CppDetectorApi): def syncclk(self): return element_if_equal(self.getSYNCClock()) + @property + def pattern(self): + #TODO! Clean fix + print("Set only") + return 0 + + @property + def patclkctrl(self): + return element_if_equal(self.getPatternClockControl()) + + @patclkctrl.setter + def patclkctrl(self, mask): + self.setPatternClockControl(mask) + + # patioctrl + @property + def patioctrl(self): + return element_if_equal(self.getPatternIOControl()) + + @patioctrl.setter + def patioctrl(self, mask): + self.setPatternIOControl(mask) + + @property + def patlimits(self): + return element_if_equal(self.getPatternLoopAddresses(-1)) + + @patlimits.setter + def patlimits(self, lim): + self.setPatternLoopAddresses(-1, lim[0], lim[1]) + + @property + def patmask(self): + return element_if_equal(self.getPatternMask()) + + @patmask.setter + def patmask(self, mask): + self.setPatternMask(mask) + + @pattern.setter + def pattern(self, fname): + self.setPattern(fname) + + @property + def patwait0(self): + return element_if_equal(self.getPatternWaitAddr(0)) + + @patwait0.setter + def patwait0(self, addr): + self.setPatternWaitAddr(0, addr) + + @property + def patwait1(self): + return element_if_equal(self.getPatternWaitAddr(1)) + + @patwait1.setter + def patwait1(self, addr): + self.setPatternWaitAddr(1, addr) + + @property + def patwait2(self): + return element_if_equal(self.getPatternWaitAddr(2)) + + @patwait2.setter + def patwait2(self, addr): + self.setPatternWaitAddr(2, addr) + + @property + def patwaittime0(self): + return element_if_equal(self.getPatternWaitTime(0)) + + @patwaittime0.setter + def patwaittime0(self, nclk): + self.setPatternWaitTime(0, nclk) + + @property + def patwaittime1(self): + return element_if_equal(self.getPatternWaitTime(1)) + + @patwaittime1.setter + def patwaittime1(self, nclk): + self.setPatternWaitTime(1, nclk) + + @property + def patwaittime2(self): + return element_if_equal(self.getPatternWaitTime(2)) + + @patwaittime2.setter + def patwaittime2(self, nclk): + self.setPatternWaitTime(2, nclk) + + + @property + def patloop0(self): + return element_if_equal(self.getPatternLoopAddresses(0)) + + @patloop0.setter + def patloop0(self, addr): + self.setPatternLoopAddresses(0, addr[0], addr[1]) + + @property + def patloop1(self): + return element_if_equal(self.getPatternLoopAddresses(1)) + + @patloop1.setter + def patloop1(self, addr): + self.setPatternLoopAddresses(1, addr[0], addr[1]) + + @property + def patloop2(self): + return element_if_equal(self.getPatternLoopAddresses(2)) + + @patloop2.setter + def patloop2(self, addr): + self.setPatternLoopAddresses(2, addr[0], addr[1]) + + @property + def patnloop0(self): + return element_if_equal(self.getPatternLoopCycles(0)) + + @patnloop0.setter + def patnloop0(self, n): + self.setPatternLoopCycles(0, n) + + @property + def patnloop1(self): + return element_if_equal(self.getPatternLoopCycles(1)) + + @patnloop1.setter + def patnloop1(self, n): + self.setPatternLoopCycles(1, n) + + @property + def patnloop2(self): + return element_if_equal(self.getPatternLoopCycles(2)) + + @patnloop2.setter + def patnloop2(self, n): + self.setPatternLoopCycles(2, n) \ No newline at end of file diff --git a/python/sls_detector/lookup.py b/python/sls_detector/lookup.py new file mode 100644 index 000000000..30ad3842c --- /dev/null +++ b/python/sls_detector/lookup.py @@ -0,0 +1,9 @@ +from .detector import Detector + +def view(name): + names = find(name) + for n in names: + print(n) + +def find(name): + return [n for n in dir(Detector) if name in n] \ No newline at end of file From 1908a82627096e4dfc8eacaef368654a994d6406 Mon Sep 17 00:00:00 2001 From: Erik Frojdh Date: Tue, 21 Jan 2020 10:44:43 +0100 Subject: [PATCH 7/7] ctb --- python/sls_detector/ctb.py | 78 ------------------------------ python/sls_detector/detector.py | 84 ++++++++++++++++++++++++++++++++- 2 files changed, 82 insertions(+), 80 deletions(-) diff --git a/python/sls_detector/ctb.py b/python/sls_detector/ctb.py index 125b4109c..1c6e695e2 100644 --- a/python/sls_detector/ctb.py +++ b/python/sls_detector/ctb.py @@ -41,81 +41,3 @@ class Ctb(Detector): 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/detector.py b/python/sls_detector/detector.py index bed1958a6..23f0c94dd 100755 --- a/python/sls_detector/detector.py +++ b/python/sls_detector/detector.py @@ -6,7 +6,7 @@ speedLevel = slsDetectorDefs.speedLevel dacIndex = slsDetectorDefs.dacIndex from .utils import element_if_equal, all_equal, get_set_bits, list_to_bitmask -from .utils import Geometry, to_geo +from .utils import Geometry, to_geo, element from .registers import Register, Adc_register import datetime as dt @@ -1005,4 +1005,84 @@ class Detector(CppDetectorApi): @patnloop2.setter def patnloop2(self, n): - self.setPatternLoopCycles(2, n) \ No newline at end of file + self.setPatternLoopCycles(2, n) + + + @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