Merge branch 'developer' of github.com:slsdetectorgroup/slsDetectorPackage into developer

This commit is contained in:
2020-08-25 17:18:22 +02:00
11 changed files with 151 additions and 18 deletions

View File

@ -6,6 +6,8 @@ from .detector import Detector
from .jungfrau import Jungfrau
from .mythen3 import Mythen3
from .gotthard2 import Gotthard2
from .gotthard import Gotthard
from .moench import Moench
# from .jungfrau_ctb import JungfrauCTB
# from _slsdet import DetectorApi

View File

@ -103,6 +103,9 @@ class DetectorDacs:
for i, _d in enumerate(self):
_d[:] = dac_array[i]
def from_array(self, dac_array):
self.set_from_array(dac_array)
def set_default(self):
"""
Set all dacs to their default values

View File

@ -248,9 +248,18 @@ class Detector(CppDetectorApi):
@exptime.setter
def exptime(self, t):
if isinstance(t, int):
t = float(t)
self.setExptime(t)
if self.type == detectorType.MYTHEN3 and is_iterable(t):
for i, v in enumerate(t):
if isinstance(v, int):
v = float(v)
self.setExptime(i, v)
else:
if isinstance(t, int):
t = float(t)
self.setExptime(t)
@property
def period(self):
@ -1101,10 +1110,13 @@ class Detector(CppDetectorApi):
@gatedelay.setter
def gatedelay(self, value):
if is_iterable(value):
if len(value) == 3:
for i, v in enumerate(value):
self.setGateDelay(i, v)
for i, v in enumerate(value):
if isinstance(v, int):
v = float(v)
self.setGateDelay(i, v)
else:
if isinstance(value, int):
value = float(value)
self.setGateDelay(-1, value)
@property
@ -1288,6 +1300,11 @@ class Detector(CppDetectorApi):
print("Set only")
return 0
@pattern.setter
def pattern(self, fname):
fname = ut.make_string_path(fname)
self.setPattern(fname)
# patioctrl
@property
def patioctrl(self):
@ -1323,6 +1340,15 @@ class Detector(CppDetectorApi):
def patlimits(self, lim):
self.setPatternLoopAddresses(-1, lim[0], lim[1])
@property
@element
def patsetbit(self):
return self.getPatternBitMask()
@patsetbit.setter
def patsetbit(self, mask):
self.setPatternBitMask(mask)
@property
def patmask(self):
"""[Ctb][Moench][Mythen3] Sets the bits that will have a pattern mask applied to the selected patmask for every pattern.
@ -1339,10 +1365,7 @@ class Detector(CppDetectorApi):
def patmask(self, mask):
self.setPatternMask(mask)
@pattern.setter
def pattern(self, fname):
fname = ut.make_string_path(fname)
self.setPattern(fname)
@property
def patwait0(self):

51
python/slsdet/gotthard.py Normal file
View File

@ -0,0 +1,51 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
This file contains the specialization for the Moench detector
"""
from .detector import Detector, freeze
from .dacs import DetectorDacs
import _slsdet
dacIndex = _slsdet.slsDetectorDefs.dacIndex
from .detector_property import DetectorProperty
# @freeze
# vref_ds, vcascn_pb, vcascp_pb, vout_cm, vcasc_out, vin_cm, vref_comp, ib_test_c
class GotthardDacs(DetectorDacs):
_dacs = [('vref_ds', dacIndex.VREF_DS, 0, 4000, 660),
('vcascn_pb', dacIndex.VCASCN_PB, 0, 4000, 650),
('vcascp_pb,', dacIndex.VCASCP_PB, 0, 4000, 1480),
('vout_cm', dacIndex.VOUT_CM, 0, 4000, 1520),
('vcasc_out', dacIndex.VCASC_OUT, 0, 4000, 1320),
('vin_cm', dacIndex.VIN_CM, 0, 4000, 1350),
('vref_comp', dacIndex.VREF_COMP, 0, 4000, 350),
('ib_test_c', dacIndex.IB_TESTC, 0, 4000, 2001),
]
_dacnames = [_d[0] for _d in _dacs]
#vthreshold??
@freeze
class Gotthard(Detector):
"""
Subclassing Detector to set up correct dacs and detector specific
functions.
"""
_detector_dynamic_range = [16]
_settings = ['standard', 'highgain', 'lowgain', 'veryhighgain', 'verylowgain']
"""available settings for Eiger, note almost always standard"""
def __init__(self, id=0):
super().__init__(id)
self._frozen = False
self._dacs = GotthardDacs(self)
@property
def dacs(self):
return self._dacs

52
python/slsdet/moench.py Normal file
View File

@ -0,0 +1,52 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
This file contains the specialization for the Moench detector
"""
from .detector import Detector, freeze
from .dacs import DetectorDacs
import _slsdet
dacIndex = _slsdet.slsDetectorDefs.dacIndex
from .detector_property import DetectorProperty
# @freeze
class MoenchDacs(DetectorDacs):
"""
Jungfrau specific DACs
"""
_dacs = [('vbp_colbuf', dacIndex.VBP_COLBUF, 0, 4000, 1300),
('vipre', dacIndex.VIPRE, 0, 4000, 1000),
('vin_cm,', dacIndex.VIN_CM, 0, 4000, 1400),
('vb_sda', dacIndex.VB_SDA, 0, 4000, 680),
('vcasc_sfp', dacIndex.VCASC_SFP, 0, 4000, 1428),
('vout_cm', dacIndex.VOUT_CM, 0, 4000, 1200),
('vipre_cds', dacIndex.VIPRE_CDS, 0, 4000, 800),
('ibias_sfp', dacIndex.IBIAS_SFP, 0, 4000, 900),
]
_dacnames = [_d[0] for _d in _dacs]
#vthreshold??
@freeze
class Moench(Detector):
"""
Subclassing Detector to set up correct dacs and detector specific
functions.
"""
_detector_dynamic_range = [16]
_settings = ['standard', 'highgain', 'lowgain', 'veryhighgain', 'verylowgain']
"""available settings for Eiger, note almost always standard"""
def __init__(self, id=0):
super().__init__(id)
self._frozen = False
self._dacs = MoenchDacs(self)
@property
def dacs(self):
return self._dacs

View File

@ -1,7 +1,7 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
This file contains the specialization for the Jungfrau detector
This file contains the specialization for the Mythen3 detector
"""