From d70090967ddfdeb78e148911011f3b1a880b7721 Mon Sep 17 00:00:00 2001 From: Erik Frojdh Date: Thu, 10 Sep 2020 16:47:34 +0200 Subject: [PATCH] python funcs --- python/CMakeLists.txt | 3 +- python/scripts/compare_with_commandline.py | 3 +- python/slsdet/detector.py | 50 +++++++++++++++------- python/slsdet/jsonproxy.py | 30 ------------- python/slsdet/slowadcproxy.py | 25 ----------- python/slsdet/utils.py | 4 +- 6 files changed, 38 insertions(+), 77 deletions(-) delete mode 100644 python/slsdet/jsonproxy.py delete mode 100644 python/slsdet/slowadcproxy.py diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt index 2af935c94..b6017d79a 100755 --- a/python/CMakeLists.txt +++ b/python/CMakeLists.txt @@ -35,8 +35,7 @@ set( PYTHON_FILES gotthard.py gotthard2.py moench.py - jsonproxy.py - slowadcproxy.py + proxy.py ctb.py jungfrau.py mythen3.py diff --git a/python/scripts/compare_with_commandline.py b/python/scripts/compare_with_commandline.py index 5d673c233..9f70004c4 100644 --- a/python/scripts/compare_with_commandline.py +++ b/python/scripts/compare_with_commandline.py @@ -8,8 +8,6 @@ from slsdet import Detector pycmd = dir(Detector) -#Add commands that we should not expect as direct commands in python - # dacs are in general not included in the python commands and we expect to # set them from the specialized class or using an enum @@ -119,6 +117,7 @@ print(f'Excluded: {len(dacs)} dacs') print(f'Excluded: {len(intentionally_missing)} other commands') + not_in_cmd = [] for c in pycmd: if c.islower() and not c.startswith('_'): diff --git a/python/slsdet/detector.py b/python/slsdet/detector.py index 90f10682b..4f1d63c18 100755 --- a/python/slsdet/detector.py +++ b/python/slsdet/detector.py @@ -11,8 +11,7 @@ detectorType = slsDetectorDefs.detectorType from .utils import element_if_equal, all_equal, get_set_bits, list_to_bitmask from .utils import Geometry, to_geo, element, reduce_time, is_iterable from . import utils as ut -from .jsonproxy import JsonProxy -from .slowadcproxy import SlowAdcProxy +from .proxy import JsonProxy, SlowAdcProxy from .registers import Register, Adc_register import datetime as dt @@ -195,6 +194,10 @@ class Detector(CppDetectorApi): def dr(self, dr): self.setDynamicRange(dr) + @property + def drlist(self): + return self.getDynamicRangeList() + @property def module_geometry(self): return to_geo(self.getModuleGeometry()) @@ -205,7 +208,7 @@ class Detector(CppDetectorApi): return element_if_equal(ms) @property - def detector_size(self): + def detsize(self): return to_geo(self.getDetectorSize()) @property @@ -244,6 +247,11 @@ class Detector(CppDetectorApi): def frames(self, n_frames): self.setNumberOfFrames(n_frames) + @property + @element + def framesl(self): + return self.getNumberOfFramesLeft() + @property @element def nframes(self): @@ -596,13 +604,14 @@ class Detector(CppDetectorApi): self.setFileFormat(format) @property + @element def findex(self): """File or Acquisition index in receiver.""" - return element_if_equal(self.getAcquisitionIndex()) + return self.getAcquisitionIndex() @findex.setter def findex(self, index): - self.setAcquisitionIndex(index) + ut.set_using_dict(self.setAcquisitionIndex, index) @property def fname(self): @@ -687,6 +696,7 @@ class Detector(CppDetectorApi): # ZMQ Streaming Parameters (Receiver<->Client) @property + @element def rx_zmqstream(self): """ Enable/ disable data streaming from receiver via zmq (eg. to GUI or to another process for further processing). \n @@ -694,11 +704,11 @@ class Detector(CppDetectorApi): Switching to Gui automatically enables data streaming in receiver. \n Switching back to command line acquire will require disabling data streaming in receiver for fast applications. """ - return element_if_equal(self.getRxZmqDataStream()) + return self.getRxZmqDataStream() @rx_zmqstream.setter - def rx_zmqdatastream(self, enable): - self.setRxZmqDataStream(enable) + def rx_zmqstream(self, enable): + ut.set_using_dict(self.setRxZmqDataStream, enable) @property def rx_zmqfreq(self): @@ -1180,19 +1190,17 @@ class Detector(CppDetectorApi): return JsonProxy(self) - - @rx_jsonpara.setter - def rx_jsonpara(self, args): - for key, value in args.items(): - self.setAdditionalJsonParameter(key, str(value)) - @property @element def rx_jsonaddheader(self): return self.getAdditionalJsonHeader() + @rx_jsonaddheader.setter + def rx_jsonaddheader(self, args): + ut.set_using_dict(self.setAdditionalJsonHeader, args) + @property - def frameindex(self): + def rx_frameindex(self): return self.getRxCurrentFrameIndex() @property @@ -1243,7 +1251,7 @@ class Detector(CppDetectorApi): """ - <<>> + <<<-----------------------Eiger specific----------------------->>> """ @@ -2263,3 +2271,13 @@ class Detector(CppDetectorApi): + """ + + <<<-----------------------Gotthard specific----------------------->>> + + """ + + @property + def exptimel(self): + t = self.getExptimeLeft() + return reduce_time(t) diff --git a/python/slsdet/jsonproxy.py b/python/slsdet/jsonproxy.py deleted file mode 100644 index a85adf630..000000000 --- a/python/slsdet/jsonproxy.py +++ /dev/null @@ -1,30 +0,0 @@ -from .utils import element_if_equal - -class JsonProxy: - """ - Proxy class to allow for intuitive setting and getting of rx_jsonpara - This class is returned by Detectr.rx_jsonpara - """ - def __init__(self, det): - self.det = det - - def __getitem__(self, key): - return element_if_equal(self.det.getAdditionalJsonParameter(key)) - - def __setitem__(self, key, value): - self.det.setAdditionalJsonParameter(key, str(value)) - - def __repr__(self): - r = element_if_equal(self.det.getAdditionalJsonHeader()) - if isinstance(r, list): - rstr = '' - for i, list_item in enumerate(r): - list_item = dict(list_item) - rstr += ''.join([f'{i}:{key}: {value}\n' for key, value in list_item.items()]) - - return rstr.strip('\n') - else: - r = dict(r) - return '\n'.join([f'{key}: {value}' for key, value in r.items()]) - - diff --git a/python/slsdet/slowadcproxy.py b/python/slsdet/slowadcproxy.py deleted file mode 100644 index 291f526a8..000000000 --- a/python/slsdet/slowadcproxy.py +++ /dev/null @@ -1,25 +0,0 @@ -from .utils import element_if_equal -from .enums import dacIndex -class SlowAdcProxy: - """ - Proxy class to allow for more intuitive reading the slow ADCs - """ - def __init__(self, det): - self.det = det - - def __getitem__(self, key): - dac_index = dacIndex(int(dacIndex.SLOW_ADC0)+key) - return element_if_equal(self.det.getSlowADC(dac_index)) - - def __repr__(self): - rstr = '' - for i in range(7): - r = element_if_equal(self.__getitem__(i)) - if isinstance(r, list): - rstr += ' '.join(f'{item} mV' for item in r) - else: - rstr += f'{i}: {r} mV\n' - - return rstr.strip('\n') - - diff --git a/python/slsdet/utils.py b/python/slsdet/utils.py index 3474cda0e..687063bda 100755 --- a/python/slsdet/utils.py +++ b/python/slsdet/utils.py @@ -111,14 +111,14 @@ def make_string_path(path): def set_using_dict(func, args): - if isinstance(args, dict): + if isinstance(args, dict) and all(isinstance(k, int) for k in args.keys()): for key, value in args.items(): func(value, [key]) else: func(args) def set_time_using_dict(func, args): - if isinstance(args, dict): + if isinstance(args, dict) and all(isinstance(k, int) for k in args.keys()): for key, value in args.items(): if isinstance(value, int): value = float(value)