mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-06-11 04:17:15 +02:00
Pattern 6 levels (#493)
* separating pattern levels from command name: command line done * separated patten level from command in examples and default pattern files in servers * command line and server works * python: patnloop not verified, wip * works except for patloop (set, and get does not list properly) * minor * fixed tests * added 3 more levels for ctb and moench * wip * minor err msg * minor * binaries in * separating pattern levels from command name: command line done * separated patten level from command in examples and default pattern files in servers * command line and server works * python: patnloop not verified, wip * works except for patloop (set, and get does not list properly) * minor * fixed tests * added 3 more levels for ctb and moench * wip * minor err msg * minor * binaries in * python working * import fix * changed fw version for ctb and moench. binaries in Co-authored-by: Erik Frojdh <erik.frojdh@gmail.com>
This commit is contained in:
@ -23,6 +23,8 @@ LOCALHOST_IP="127.0.0.1"
|
||||
MAX_STR_LENGTH=1000
|
||||
SHORT_STR_LENGTH=20
|
||||
MAX_PATTERN_LENGTH=0x2000
|
||||
MAX_PATTERN_LEVELS=6
|
||||
M3_MAX_PATTERN_LEVELS=3
|
||||
DEFAULT_STREAMING_TIMER_IN_MS=500
|
||||
NUM_RX_THREAD_IDS=9
|
||||
MAX_NUM_PACKETS=512
|
||||
|
@ -17,7 +17,7 @@ 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 _slsdet import xy
|
||||
from . import utils as ut
|
||||
from .proxy import JsonProxy, SlowAdcProxy, ClkDivProxy, MaxPhaseProxy, ClkFreqProxy
|
||||
from .proxy import JsonProxy, SlowAdcProxy, ClkDivProxy, MaxPhaseProxy, ClkFreqProxy, PatLoopProxy, PatNLoopProxy, PatWaitProxy, PatWaitTimeProxy
|
||||
from .registers import Register, Adc_register
|
||||
import datetime as dt
|
||||
|
||||
@ -3098,6 +3098,24 @@ class Detector(CppDetectorApi):
|
||||
def patmask(self, mask):
|
||||
ut.set_using_dict(self.setPatternMask, mask)
|
||||
|
||||
@property
|
||||
# @element
|
||||
def patwait(self):
|
||||
"""
|
||||
[Ctb][Moench][Mythen3] Wait address of loop level provided.
|
||||
|
||||
Example
|
||||
-------
|
||||
>>> d.patwait[0] = 5
|
||||
>>> d.patwait[0]
|
||||
5
|
||||
>>> d.patwait
|
||||
0: 5
|
||||
1: 20
|
||||
2: 30
|
||||
"""
|
||||
return PatWaitProxy(self)
|
||||
|
||||
@property
|
||||
@element
|
||||
def patwait0(self):
|
||||
@ -3158,6 +3176,23 @@ class Detector(CppDetectorApi):
|
||||
addr = ut.merge_args(2, addr)
|
||||
ut.set_using_dict(self.setPatternWaitAddr, *addr)
|
||||
|
||||
@property
|
||||
def patwaittime(self):
|
||||
"""
|
||||
[Ctb][Moench][Mythen3] Wait time in clock cycles of loop level provided.
|
||||
|
||||
Example
|
||||
-------
|
||||
>>> d.patwaittime[0] = 5
|
||||
>>> d.patwaittime[0]
|
||||
5
|
||||
>>> d.patwaittime
|
||||
0: 5
|
||||
1: 20
|
||||
2: 30
|
||||
"""
|
||||
return PatWaitTimeProxy(self)
|
||||
|
||||
@property
|
||||
@element
|
||||
def patwaittime0(self):
|
||||
@ -3192,6 +3227,23 @@ class Detector(CppDetectorApi):
|
||||
ut.set_using_dict(self.setPatternWaitTime, *nclk)
|
||||
|
||||
|
||||
@property
|
||||
def patloop(self):
|
||||
"""
|
||||
[Ctb][Moench][Mythen3] Limits (start and stop address) of the loop provided.
|
||||
|
||||
Example
|
||||
-------
|
||||
>>> d.patloop[0] = [5, 20]
|
||||
>>> d.patloop[0]
|
||||
[5, 20]
|
||||
>>> d.patloop
|
||||
0: [5, 20]
|
||||
1: [20, 4]
|
||||
2: [30, 5]
|
||||
"""
|
||||
return PatLoopProxy(self)
|
||||
|
||||
@property
|
||||
@element
|
||||
def patloop0(self):
|
||||
@ -3254,6 +3306,24 @@ class Detector(CppDetectorApi):
|
||||
addr = ut.merge_args(2, addr)
|
||||
ut.set_using_dict(self.setPatternLoopAddresses, *addr)
|
||||
|
||||
|
||||
@property
|
||||
def patnloop(self):
|
||||
"""
|
||||
[Ctb][Moench][Mythen3] Number of cycles of the loop provided.
|
||||
|
||||
Example
|
||||
-------
|
||||
>>> d.patnloop[0] = 5
|
||||
>>> d.patnloop[0]
|
||||
5
|
||||
>>> d.patnloop
|
||||
0: 5
|
||||
1: 20
|
||||
2: 30
|
||||
"""
|
||||
return PatNLoopProxy(self)
|
||||
|
||||
@property
|
||||
@element
|
||||
def patnloop0(self):
|
||||
|
@ -2,14 +2,24 @@
|
||||
# Copyright (C) 2021 Contributors to the SLS Detector Package
|
||||
from .utils import element_if_equal
|
||||
from .enums import dacIndex
|
||||
from .defines import M3_MAX_PATTERN_LEVELS, MAX_PATTERN_LEVELS
|
||||
from _slsdet import slsDetectorDefs
|
||||
|
||||
|
||||
def set_proxy_using_dict(func, key, value):
|
||||
def set_proxy_using_dict(func, key, value, unpack = False):
|
||||
if isinstance(value, dict) and all(isinstance(k, int) for k in value.keys()):
|
||||
for dkey, dvalue in value.items():
|
||||
func(key, dvalue, [dkey])
|
||||
if unpack:
|
||||
for dkey, dvalue in value.items():
|
||||
func(key, *dvalue, [dkey])
|
||||
else:
|
||||
for dkey, dvalue in value.items():
|
||||
func(key, dvalue, [dkey])
|
||||
else:
|
||||
func(key, value)
|
||||
if unpack:
|
||||
func(key, *value)
|
||||
else:
|
||||
func(key, value)
|
||||
|
||||
|
||||
class JsonProxy:
|
||||
"""
|
||||
@ -127,4 +137,118 @@ class ClkFreqProxy:
|
||||
else:
|
||||
rstr += f'{i}: {r}\n'
|
||||
|
||||
return rstr.strip('\n')
|
||||
return rstr.strip('\n')
|
||||
|
||||
class PatLoopProxy:
|
||||
"""
|
||||
Proxy class to allow for more intuitive reading patloop
|
||||
"""
|
||||
def __init__(self, det):
|
||||
self.det = det
|
||||
|
||||
def __getitem__(self, key):
|
||||
return element_if_equal(self.det.getPatternLoopAddresses(key))
|
||||
|
||||
def __setitem__(self, key, value):
|
||||
set_proxy_using_dict(self.det.setPatternLoopAddresses, key, value, unpack = True)
|
||||
|
||||
def __repr__(self):
|
||||
max_levels = MAX_PATTERN_LEVELS
|
||||
if self.det.type == slsDetectorDefs.detectorType.MYTHEN3:
|
||||
max_levels = M3_MAX_PATTERN_LEVELS
|
||||
rstr = ''
|
||||
for i in range(max_levels):
|
||||
r = self.__getitem__(i)
|
||||
if isinstance(r[0], list):
|
||||
part = ' '.join(f'{item}' for item in r)
|
||||
rstr += f'{i}: {part}\n'
|
||||
else:
|
||||
rstr += f'{i}: {r}\n'
|
||||
|
||||
return rstr.strip('\n')
|
||||
|
||||
|
||||
class PatNLoopProxy:
|
||||
"""
|
||||
Proxy class to allow for more intuitive reading patnloop
|
||||
"""
|
||||
def __init__(self, det):
|
||||
self.det = det
|
||||
|
||||
def __getitem__(self, key):
|
||||
return element_if_equal(self.det.getPatternLoopCycles(key))
|
||||
|
||||
def __setitem__(self, key, value):
|
||||
set_proxy_using_dict(self.det.setPatternLoopCycles, key, value)
|
||||
|
||||
def __repr__(self):
|
||||
max_levels = MAX_PATTERN_LEVELS
|
||||
if self.det.type == slsDetectorDefs.detectorType.MYTHEN3:
|
||||
max_levels = M3_MAX_PATTERN_LEVELS
|
||||
rstr = ''
|
||||
for i in range(max_levels):
|
||||
r = element_if_equal(self.__getitem__(i))
|
||||
if isinstance(r, list):
|
||||
part = ', '.join(f'{item}' for item in r)
|
||||
rstr += f'{i}: {part}\n'
|
||||
else:
|
||||
rstr += f'{i}: {r}\n'
|
||||
|
||||
return rstr.strip('\n')
|
||||
|
||||
|
||||
class PatWaitProxy:
|
||||
"""
|
||||
Proxy class to allow for more intuitive reading patwait
|
||||
"""
|
||||
def __init__(self, det):
|
||||
self.det = det
|
||||
|
||||
def __getitem__(self, key):
|
||||
return element_if_equal(self.det.getPatternWaitAddr(key))
|
||||
|
||||
def __setitem__(self, key, value):
|
||||
set_proxy_using_dict(self.det.setPatternWaitAddr, key, value)
|
||||
|
||||
def __repr__(self):
|
||||
max_levels = MAX_PATTERN_LEVELS
|
||||
if self.det.type == slsDetectorDefs.detectorType.MYTHEN3:
|
||||
max_levels = M3_MAX_PATTERN_LEVELS
|
||||
rstr = ''
|
||||
for i in range(max_levels):
|
||||
r = element_if_equal(self.__getitem__(i))
|
||||
if isinstance(r, list):
|
||||
part = ', '.join(f'{item}' for item in r)
|
||||
rstr += f'{i}: {part}\n'
|
||||
else:
|
||||
rstr += f'{i}: {r}\n'
|
||||
|
||||
return rstr.strip('\n')
|
||||
|
||||
class PatWaitTimeProxy:
|
||||
"""
|
||||
Proxy class to allow for more intuitive reading patwaittime
|
||||
"""
|
||||
def __init__(self, det):
|
||||
self.det = det
|
||||
|
||||
def __getitem__(self, key):
|
||||
return element_if_equal(self.det.getPatternWaitTime(key))
|
||||
|
||||
def __setitem__(self, key, value):
|
||||
set_proxy_using_dict(self.det.setPatternWaitTime, key, value)
|
||||
|
||||
def __repr__(self):
|
||||
max_levels = MAX_PATTERN_LEVELS
|
||||
if self.det.type == slsDetectorDefs.detectorType.MYTHEN3:
|
||||
max_levels = M3_MAX_PATTERN_LEVELS
|
||||
rstr = ''
|
||||
for i in range(max_levels):
|
||||
r = element_if_equal(self.__getitem__(i))
|
||||
if isinstance(r, list):
|
||||
part = ', '.join(f'{item}' for item in r)
|
||||
rstr += f'{i}: {part}\n'
|
||||
else:
|
||||
rstr += f'{i}: {r}\n'
|
||||
|
||||
return rstr.strip('\n')
|
||||
|
@ -14,7 +14,7 @@ void init_pattern(py::module &m) {
|
||||
using pat = sls::patternParameters;
|
||||
py::class_<pat> patternParameters(m, "patternParameters");
|
||||
|
||||
PYBIND11_NUMPY_DTYPE(pat, word, ioctrl, limits, loop, nloop, wait,
|
||||
PYBIND11_NUMPY_DTYPE(pat, word, ioctrl, limits, startloop, stoploop, nloop, wait,
|
||||
waittime);
|
||||
|
||||
patternParameters.def(py::init());
|
||||
|
Reference in New Issue
Block a user