diff --git a/docs/src/gendoc.cpp b/docs/src/gendoc.cpp index e5e05571a..d7742edeb 100644 --- a/docs/src/gendoc.cpp +++ b/docs/src/gendoc.cpp @@ -48,7 +48,7 @@ int main() { auto tmp = os.str().erase(0, cmd.size()); auto usage = tmp.substr(0, tmp.find_first_of('\n')); tmp.erase(0, usage.size()); - auto help = replace_all(tmp, "\n\t", "\n\t\t"); + auto help = replace_all(tmp, "\n\t", "\n\t\t| "); fs << '\t' << cmd << usage << help << "\n"; } -} \ No newline at end of file +} diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt index 93167953c..948b44d9c 100755 --- a/python/CMakeLists.txt +++ b/python/CMakeLists.txt @@ -32,7 +32,9 @@ set( PYTHON_FILES eiger.py enums.py errors.py + gotthard.py gotthard2.py + moench.py ctb.py jungfrau.py mythen3.py diff --git a/python/scripts/basic.py b/python/scripts/basic.py index d9dfbbcef..65ba3b36b 100755 --- a/python/scripts/basic.py +++ b/python/scripts/basic.py @@ -3,7 +3,7 @@ import sys import numpy as np sys.path.append(os.path.join(os.getcwd(), 'bin')) -from slsdet import Detector, Mythen3, Eiger, Jungfrau, DetectorDacs, Dac, Ctb, Gotthard2 +from slsdet import Detector, Mythen3, Eiger, Jungfrau, DetectorDacs, Dac, Ctb, Gotthard2, Moench from slsdet import dacIndex, readoutMode from slsdet.lookup import view, find @@ -13,4 +13,4 @@ c = Ctb() g = Gotthard2() # j = Jungfrau() # m = Mythen3() - +m = Moench() diff --git a/python/slsdet/__init__.py b/python/slsdet/__init__.py index 871b63173..54bd3ff3f 100755 --- a/python/slsdet/__init__.py +++ b/python/slsdet/__init__.py @@ -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 diff --git a/python/slsdet/dacs.py b/python/slsdet/dacs.py index 574e6e2cd..2ce69a4a1 100755 --- a/python/slsdet/dacs.py +++ b/python/slsdet/dacs.py @@ -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 diff --git a/python/slsdet/detector.py b/python/slsdet/detector.py index e51e47fe2..7c4168be6 100755 --- a/python/slsdet/detector.py +++ b/python/slsdet/detector.py @@ -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): diff --git a/python/slsdet/gotthard.py b/python/slsdet/gotthard.py new file mode 100644 index 000000000..ea33b7462 --- /dev/null +++ b/python/slsdet/gotthard.py @@ -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 \ No newline at end of file diff --git a/python/slsdet/moench.py b/python/slsdet/moench.py new file mode 100644 index 000000000..0398841b1 --- /dev/null +++ b/python/slsdet/moench.py @@ -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 \ No newline at end of file diff --git a/python/slsdet/mythen3.py b/python/slsdet/mythen3.py index 65bb5211a..055ee343a 100644 --- a/python/slsdet/mythen3.py +++ b/python/slsdet/mythen3.py @@ -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 """ diff --git a/slsDetectorSoftware/src/CmdProxy.cpp b/slsDetectorSoftware/src/CmdProxy.cpp index 572bc2421..87da98f8a 100644 --- a/slsDetectorSoftware/src/CmdProxy.cpp +++ b/slsDetectorSoftware/src/CmdProxy.cpp @@ -182,7 +182,7 @@ std::string CmdProxy::VirtualServer(int action) { std::string CmdProxy::Acquire(int action) { std::ostringstream os; if (action == defs::HELP_ACTION) { - os << cmd << " - Acquire the number of frames set up.\n"; + os << cmd << "\n\tAcquire the number of frames set up.\n"; } else { if (det->empty()) { throw sls::RuntimeError( @@ -1612,7 +1612,7 @@ std::string CmdProxy::VetoPhoton(int action) { os << "[ichip] [#photons] [energy in keV] [reference " "file]\n\t[Gotthard2] Set veto reference for 128 channels for " "chip ichip according to reference file and #photons and energy " - "in keV.\n" + "in keV.\n\t" << "[ichip] [output file]\n\t Get gain indices and veto reference " "for 128 channels for chip ichip, saved to file." << '\n'; diff --git a/slsDetectorSoftware/src/CmdProxy.h b/slsDetectorSoftware/src/CmdProxy.h index 75565d58e..3168a2d59 100644 --- a/slsDetectorSoftware/src/CmdProxy.h +++ b/slsDetectorSoftware/src/CmdProxy.h @@ -1691,7 +1691,7 @@ class CmdProxy { StringTo, "[n]\n\tDefault is 50002.\n\t[Jungfrau] Port number of the receiver " "(destination) udp interface where the second half of detector data is " - "sent to. \n[Eiger] Port number of the reciever (desintation) udp " + "sent to. \n\t[Eiger] Port number of the reciever (desintation) udp " "interface where the right half of the detector data is sent to."); EXECUTE_SET_COMMAND(