diff --git a/python/slsdet/detector.py b/python/slsdet/detector.py index 16281375d..613f8516e 100755 --- a/python/slsdet/detector.py +++ b/python/slsdet/detector.py @@ -138,6 +138,17 @@ class Detector(CppDetectorApi): else: raise ValueError("hostname needs to be string or list of strings") + + @property + @element + def stopport(self): + return self.getStopPort() + + @stopport.setter + def stopport(self, args): + ut.set_using_dict(self.setStopPort, args) + + @property def firmwareversion(self): return element_if_equal(self.getFirmwareVersion()) @@ -381,12 +392,7 @@ class Detector(CppDetectorApi): @txndelay_frame.setter def txndelay_frame(self, args): - if isinstance(args, dict): - for key, value in args.items(): - self.setTransmissionDelayFrame(value, [key]) - else: - self.setTransmissionDelayFrame(args) - + ut.set_using_dict(self.setTransmissionDelayFrame, args) @property @element @@ -395,12 +401,7 @@ class Detector(CppDetectorApi): @txndelay_left.setter def txndelay_left(self, args): - if isinstance(args, dict): - for key, value in args.items(): - self.setTransmissionDelayLeft(value, [key]) - else: - self.setTransmissionDelayLeft(args) - + ut.set_using_dict(self.setTransmissionDelayLeft, args) @property @element @@ -409,11 +410,7 @@ class Detector(CppDetectorApi): @txndelay_right.setter def txndelay_right(self, args): - if isinstance(args, dict): - for key, value in args.items(): - self.setTransmissionDelayRight(value, [key]) - else: - self.setTransmissionDelayRight(args) + ut.set_using_dict(self.setTransmissionDelayRight, args) @property def use_receiver(self): @@ -1169,6 +1166,16 @@ class Detector(CppDetectorApi): def speed(self, value): self.setSpeed(value) + @property + def rx_jsonpara(self): + raise NotImplementedError('use d.getAdditionalJsonParameter(\'key\')') + + @rx_jsonpara.setter + def rx_jsonpara(self, args): + for key, value in args.items(): + self.setAdditionalJsonParameter(key, str(value)) + + @property def frameindex(self): return self.getRxCurrentFrameIndex() @@ -1220,9 +1227,20 @@ class Detector(CppDetectorApi): return element_if_equal(self.getNumMissingPackets()) """ - Some Eiger stuff, does this have to be here or can we move it to subclass? + + <<>> + """ + @property + @element + def quad(self): + return self.getQuad() + + @quad.setter + def quad(self, value): + self.setQuad(value) + @property def subexptime(self): """ @@ -1491,9 +1509,19 @@ class Detector(CppDetectorApi): self.selectUDPInterface(i) """ - Gotthard2 + <<>> """ + @property + @element + def timingsource(self): + return self.getTimingSource() + + @timingsource.setter + def timingsource(self, args): + ut.set_using_dict(self.setTimingSource, args) + + @property @element def veto(self): @@ -1630,9 +1658,18 @@ class Detector(CppDetectorApi): self.setCounterMask(list_to_bitmask(values)) """ - CTB stuff + <<>> """ + @property + @element + def samples(self): + return self.getNumberOfAnalogSamples() + + @samples.setter + def samples(self, nsamples): + self.setNumberOfAnalogSamples(nsamples) + @property def runclk(self): """[Ctb][Moench] Run clock in MHz.""" diff --git a/python/slsdet/utils.py b/python/slsdet/utils.py index e9230f0bd..c7fd6517f 100755 --- a/python/slsdet/utils.py +++ b/python/slsdet/utils.py @@ -107,4 +107,12 @@ def make_string_path(path): elif isinstance(path, str): return os.path.expanduser(path) else: - raise ValueError("Cannot convert argument to posix path") \ No newline at end of file + raise ValueError("Cannot convert argument to posix path") + + +def set_using_dict(func, args): + if isinstance(args, dict): + for key, value in args.items(): + func(value, [key]) + else: + func(args) \ No newline at end of file diff --git a/slsDetectorGui/src/qDetectorMain.cpp b/slsDetectorGui/src/qDetectorMain.cpp index 5249af5bb..e84bf2af7 100644 --- a/slsDetectorGui/src/qDetectorMain.cpp +++ b/slsDetectorGui/src/qDetectorMain.cpp @@ -222,12 +222,12 @@ void qDetectorMain::SetUpDetector(const std::string &config_file, int multiID) { actionLoadTrimbits->setEnabled(false); switch (detType) { case slsDetectorDefs::EIGER: + case slsDetectorDefs::MYTHEN3: actionLoadTrimbits->setEnabled(true); break; case slsDetectorDefs::GOTTHARD: case slsDetectorDefs::JUNGFRAU: case slsDetectorDefs::MOENCH: - case slsDetectorDefs::MYTHEN3: case slsDetectorDefs::GOTTHARD2: break; default: @@ -334,7 +334,8 @@ void qDetectorMain::EnableModes(QAction *action) { tabs->setTabEnabled(ADVANCED, enable); actionLoadTrimbits->setVisible(enable && - detType == slsDetectorDefs::EIGER); + (detType == slsDetectorDefs::EIGER || + detType == slsDetectorDefs::MYTHEN3)); LOG(logINFO) << "Expert Mode: " << qDefs::stringEnable(enable); } @@ -400,11 +401,8 @@ void qDetectorMain::ExecuteUtilities(QAction *action) { this, tr("Load Detector Trimbits"), fName, tr("Trimbit files (*.trim noise.sn*);;All Files(*)")); fileDialog->setFileMode(QFileDialog::AnyFile); - if (fileDialog->exec() == QDialog::Accepted) + if (fileDialog->exec() == QDialog::Accepted) { fName = fileDialog->selectedFiles()[0]; - - // Gets called when cancelled as well - if (!fName.isEmpty()) { det->loadTrimbits(std::string(fName.toAscii().constData())); qDefs::Message(qDefs::INFORMATION, "The Trimbits have been loaded successfully.", diff --git a/slsDetectorGui/src/qTabAdvanced.cpp b/slsDetectorGui/src/qTabAdvanced.cpp index 85f7c42a3..1a3353f16 100644 --- a/slsDetectorGui/src/qTabAdvanced.cpp +++ b/slsDetectorGui/src/qTabAdvanced.cpp @@ -29,6 +29,7 @@ void qTabAdvanced::SetupWidgetWindow() { tab_roi->setEnabled(true); break; case slsDetectorDefs::MYTHEN3: + tab_trimming->setEnabled(true); lblDiscardBits->setEnabled(true); spinDiscardBits->setEnabled(true); lblGateIndex->setEnabled(true);