From 6d1856daa217ecc1bea546237689bd9a06d706f6 Mon Sep 17 00:00:00 2001
From: Dhanya Thattil <33750417+thattil@users.noreply.github.com>
Date: Thu, 3 Sep 2020 10:47:02 +0200
Subject: [PATCH 1/3] gui: added burstmode (#159)
Added burst mode in the GUI. Visible only for detectors that supports it.
---
slsDetectorGui/forms/form_tab_measurement.ui | 76 +++++++++++++++-----
slsDetectorGui/include/qTabMeasurement.h | 2 +
slsDetectorGui/src/qTabMeasurement.cpp | 65 +++++++++++++----
3 files changed, 113 insertions(+), 30 deletions(-)
diff --git a/slsDetectorGui/forms/form_tab_measurement.ui b/slsDetectorGui/forms/form_tab_measurement.ui
index ba9da5c72..5a9766232 100755
--- a/slsDetectorGui/forms/form_tab_measurement.ui
+++ b/slsDetectorGui/forms/form_tab_measurement.ui
@@ -432,7 +432,7 @@
4
- -
+
-
@@ -503,7 +503,7 @@
- -
+
-
false
@@ -572,7 +572,7 @@ Frame period between exposures.
- -
+
-
@@ -616,7 +616,7 @@ Frame period between exposures.
- -
+
-
@@ -674,7 +674,7 @@ Frame period between exposures.
- -
+
-
true
@@ -718,7 +718,7 @@ Exposure Time of a frame.
- -
+
-
false
@@ -735,7 +735,7 @@ Frame period between exposures.
- -
+
-
false
@@ -745,7 +745,7 @@ Frame period between exposures.
- -
+
-
true
@@ -762,7 +762,7 @@ Exposure Time of a frame.
- -
+
-
false
@@ -809,7 +809,7 @@ Exposure Time of a frame.
- -
+
-
true
@@ -871,7 +871,7 @@ Exposure Time of a frame.
- -
+
-
false
@@ -931,7 +931,7 @@ Frame period between exposures.
- -
+
-
@@ -1070,7 +1070,7 @@ Frame period between exposures.
- -
+
-
@@ -1141,7 +1141,7 @@ Frame period between exposures.
- -
+
-
@@ -1268,7 +1268,7 @@ Frame period between exposures.
- -
+
-
@@ -1431,7 +1431,7 @@ Frame period between exposures.
- -
+
-
@@ -1502,7 +1502,7 @@ Frame period between exposures.
- -
+
-
@@ -1639,6 +1639,48 @@ Frame period between exposures.
+ -
+
+
+ Burst Mode:
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 0
+ 25
+
+
+
+ Timing Mode of the detector.
+ #timing#
+
+
-
+
+ Off
+
+
+ -
+
+ Burst Internal
+
+
+ -
+
+ Burst external
+
+
+
+
diff --git a/slsDetectorGui/include/qTabMeasurement.h b/slsDetectorGui/include/qTabMeasurement.h
index 091936ecc..3d8e5b844 100644
--- a/slsDetectorGui/include/qTabMeasurement.h
+++ b/slsDetectorGui/include/qTabMeasurement.h
@@ -20,6 +20,7 @@ class qTabMeasurement : public QWidget, private Ui::TabMeasurementObject {
private slots:
void SetTimingMode(int val);
+ void SetBurstMode(int val);
void SetNumMeasurements(int val);
void SetNumFrames(int val);
void SetNumTriggers(int val);
@@ -52,6 +53,7 @@ class qTabMeasurement : public QWidget, private Ui::TabMeasurementObject {
void EnableWidgetsforTimingMode();
void GetTimingMode();
+ void GetBurstMode();
void GetNumFrames();
void GetNumTriggers();
void GetNumBursts();
diff --git a/slsDetectorGui/src/qTabMeasurement.cpp b/slsDetectorGui/src/qTabMeasurement.cpp
index 06d283f15..a9c7fc92e 100644
--- a/slsDetectorGui/src/qTabMeasurement.cpp
+++ b/slsDetectorGui/src/qTabMeasurement.cpp
@@ -46,6 +46,8 @@ void qTabMeasurement::SetupWidgetWindow() {
ShowGates();
// enabling according to det type
+ lblBurstMode->hide();
+ comboBurstMode->hide();
switch (det->getDetectorType().squash()) {
case slsDetectorDefs::MOENCH:
lblNumSamples->setEnabled(true);
@@ -64,6 +66,8 @@ void qTabMeasurement::SetupWidgetWindow() {
startingFnumImplemented = true;
break;
case slsDetectorDefs::GOTTHARD2:
+ lblBurstMode->show();
+ comboBurstMode->show();
lblNumBursts->setEnabled(true);
spinNumBursts->setEnabled(true);
lblBurstPeriod->setEnabled(true);
@@ -89,6 +93,10 @@ void qTabMeasurement::SetupWidgetWindow() {
void qTabMeasurement::Initialization() {
connect(comboTimingMode, SIGNAL(currentIndexChanged(int)), this,
SLOT(SetTimingMode(int)));
+ if (comboBurstMode->isVisible()) {
+ connect(comboBurstMode, SIGNAL(currentIndexChanged(int)), this,
+ SLOT(SetBurstMode(int)));
+ }
connect(spinNumMeasurements, SIGNAL(valueChanged(int)), this,
SLOT(SetNumMeasurements(int)));
connect(spinNumFrames, SIGNAL(valueChanged(int)), this,
@@ -144,18 +152,11 @@ void qTabMeasurement::Initialization() {
void qTabMeasurement::ShowTriggerDelay() {
bool showTrigger = true;
if (det->getDetectorType().squash() == slsDetectorDefs::GOTTHARD2) {
- try {
- LOG(logDEBUG) << "Getting burst mode";
- auto retval = det->getBurstMode().tsquash(
- "Inconsistent burst mode for all detectors.");
- // burst mode and auto timing mode
- if (retval != slsDetectorDefs::BURST_OFF &&
- comboTimingMode->currentIndex() == AUTO) {
- showTrigger = false;
- }
+ if ((comboBurstMode->currentIndex() != slsDetectorDefs::BURST_OFF) &&
+ (comboTimingMode->currentIndex() == AUTO)) {
+ // show burst, burstperiod, not trigger or delay
+ showTrigger = false;
}
- CATCH_DISPLAY("Could not get burst mode.",
- "qTabMeasurement::ShowTriggerDelay")
}
if (showTrigger) {
@@ -248,7 +249,7 @@ void qTabMeasurement::EnableWidgetsforTimingMode() {
spinPeriod->setEnabled(true);
comboPeriodUnit->setEnabled(true);
if (det->getDetectorType().squash() == slsDetectorDefs::GOTTHARD2) {
- ShowTriggerDelay();
+ GetBurstMode(); // also decides to show trigger or burst mode
}
break;
case TRIGGER:
@@ -272,7 +273,7 @@ void qTabMeasurement::EnableWidgetsforTimingMode() {
spinDelay->setEnabled(true);
comboDelayUnit->setEnabled(true);
if (det->getDetectorType().squash() == slsDetectorDefs::GOTTHARD2) {
- ShowTriggerDelay();
+ GetBurstMode(); // also decides to show trigger or burst mode
}
}
break;
@@ -359,6 +360,41 @@ void qTabMeasurement::SetTimingMode(int val) {
this, &qTabMeasurement::GetTimingMode)
}
+void qTabMeasurement::GetBurstMode() {
+ LOG(logDEBUG) << "Getting burst mode";
+ disconnect(comboBurstMode, SIGNAL(currentIndexChanged(int)), this,
+ SLOT(SetBurstMode(int)));
+ try {
+ auto retval = det->getBurstMode().tsquash(
+ "Inconsistent burst mode for all detectors.");
+ switch (retval) {
+ case slsDetectorDefs::BURST_OFF:
+ case slsDetectorDefs::BURST_INTERNAL:
+ case slsDetectorDefs::BURST_EXTERNAL:
+ comboBurstMode->setCurrentIndex((int)retval);
+ ShowTriggerDelay();
+ break;
+ default:
+ throw sls::RuntimeError(std::string("Unknown burst mode: ") +
+ std::to_string(retval));
+ }
+ }
+ CATCH_DISPLAY("Could not get burst mode.", "qTabMeasurement::GetBurstMode")
+ connect(comboBurstMode, SIGNAL(currentIndexChanged(int)), this,
+ SLOT(SetBurstMode(int)));
+}
+
+void qTabMeasurement::SetBurstMode(int val) {
+ LOG(logINFO) << "Setting burst mode:"
+ << comboBurstMode->currentText().toAscii().data();
+ try {
+ det->setBurstMode(static_cast(val));
+ ShowTriggerDelay();
+ }
+ CATCH_HANDLE("Could not set burst mode.", "qTabMeasurement::SetBurstMode",
+ this, &qTabMeasurement::GetBurstMode)
+}
+
void qTabMeasurement::SetNumMeasurements(int val) {
LOG(logINFO) << "Setting Number of Measurements to " << val;
numMeasurements = val;
@@ -913,6 +949,9 @@ void qTabMeasurement::Refresh() {
if (!plot->GetIsRunning()) {
GetTimingMode();
+ if (comboBurstMode->isVisible()) {
+ GetBurstMode();
+ }
GetNumFrames();
GetExposureTime();
GetAcquisitionPeriod();
From 6b7dee263123ffc8c0af98a080aed143eb625780 Mon Sep 17 00:00:00 2001
From: Erik Frojdh
Date: Thu, 3 Sep 2020 11:49:08 +0200
Subject: [PATCH 2/3] added versions and parallel to python
---
python/slsdet/detector.py | 42 +++++++++++++++++++++++++++++++--------
1 file changed, 34 insertions(+), 8 deletions(-)
diff --git a/python/slsdet/detector.py b/python/slsdet/detector.py
index e258e6f4c..a09b12937 100755
--- a/python/slsdet/detector.py
+++ b/python/slsdet/detector.py
@@ -139,27 +139,23 @@ class Detector(CppDetectorApi):
raise ValueError("hostname needs to be string or list of strings")
@property
- def fw_version(self):
+ def firmwareversion(self):
return element_if_equal(self.getFirmwareVersion())
@property
- def server_version(self):
+ def detectorserverversion(self):
# TODO! handle hex print
return element_if_equal(self.getDetectorServerVersion())
@property
- def client_version(self):
- return element_if_equal(self.getClientVersion())
+ def clientversion(self):
+ return self.getClientVersion()
@property
def rx_version(self):
"""Receiver version in format [0xYYMMDD]."""
return element_if_equal(self.getReceiverVersion())
- @property
- def detector_type(self):
- return element_if_equal(self.getDetectorType())
-
@property
def dr(self):
"""
@@ -1022,6 +1018,22 @@ class Detector(CppDetectorApi):
def led(self, value):
self.setLEDEnable(value)
+
+ @property
+ def versions(self):
+ return {'type': self.type,
+ 'package': self.packageversion,
+ 'client': self.clientversion,
+ 'firmware': self.firmwareversion,
+ 'detectorserver': self.detectorserverversion,
+ 'receiver': self.rx_version}
+
+
+ @property
+ def packageversion(self):
+ return self.getPackageVersion()
+
+
@property
def ratecorr(self):
"""
@@ -1172,6 +1184,19 @@ class Detector(CppDetectorApi):
def subdeadtime(self, t):
self.setSubDeadTime(t)
+
+ @property
+ @element
+ def parallel(self):
+ """
+ [Eiger] Enable or disable the parallel readout mode of Eiger.
+ """
+ return self.getParallelMode()
+
+ @parallel.setter
+ def parallel(self, value):
+ self.setParallelMode(value)
+
@property
def partialreset(self):
"""[Eiger] Sets up detector to do partial or complete reset at start of acquisition. 0 complete reset, 1 partial reset. Default is complete reset.
@@ -1392,6 +1417,7 @@ class Detector(CppDetectorApi):
def veto(self, value):
self.setVeto(value)
+
"""
Mythen3 specific
"""
From 22f14cacb040424158c16b0d8daf4cc6da6d29e3 Mon Sep 17 00:00:00 2001
From: Erik Frojdh
Date: Thu, 3 Sep 2020 15:33:12 +0200
Subject: [PATCH 3/3] virtual and vetofile
---
python/scripts/cmd_python.py | 16 ++++++++++++
python/slsdet/detector.py | 48 +++++++++++++++++++++++++++++++++++-
2 files changed, 63 insertions(+), 1 deletion(-)
diff --git a/python/scripts/cmd_python.py b/python/scripts/cmd_python.py
index a398732c7..7c01a82d0 100644
--- a/python/scripts/cmd_python.py
+++ b/python/scripts/cmd_python.py
@@ -19,6 +19,22 @@ pycmd += ['vrf', 'vtr', 'vrs', 'vtgstv', 'vsvn', 'vtrim',
'vin_com', 'vin_cm', 'vrshaper', 'vrshaper_n', 'vrpreamp', 'vishaper',
'vicin', 'vcassh', 'vcal_n', 'vcal_p']
+# command : reason
+intentionally_missing = [
+ 'temp_10ge', #temperatures already available from enum or specialized class
+ 'temp_adc',
+ 'temp_dcdc',
+ 'temp_fpga',
+ 'temp_fpgaext',
+ 'temp_fpgafl',
+ 'temp_fpgafr',
+ 'temp_slowadc',
+ 'temp_sodl',
+ 'temp_sodr',
+ 'trigger', #use sendSoftwareTrigger
+]
+
+pycmd += intentionally_missing
missing = []
for c in cmd:
if c not in pycmd:
diff --git a/python/slsdet/detector.py b/python/slsdet/detector.py
index a09b12937..163916e6d 100755
--- a/python/slsdet/detector.py
+++ b/python/slsdet/detector.py
@@ -1028,12 +1028,31 @@ class Detector(CppDetectorApi):
'detectorserver': self.detectorserverversion,
'receiver': self.rx_version}
+ @property
+ def virtual(self):
+ """
+ Setup with n virtual servers running on localhost
+ starting with port p
+
+ Examples
+ ---------
+
+ >>> d.virtual = n, p
+
+ """
+ raise NotImplementedError('Virtual is set only')
+
+ @virtual.setter
+ def virtual(self, args):
+ n_detectors, starting_port = args
+ self.setVirtualDetectorServers(n_detectors, starting_port)
+
+
@property
def packageversion(self):
return self.getPackageVersion()
-
@property
def ratecorr(self):
"""
@@ -1418,6 +1437,33 @@ class Detector(CppDetectorApi):
self.setVeto(value)
+ @property
+ def vetofile(self):
+ """
+ [Gotthard2] Set veto reference for each 128 channels for specific chip.
+ The file should have 128 rows of gain index and 12 bit value in dec
+
+ Examples
+ ---------
+
+ d.vetofile = '/path/to/file.txt' #set for all chips
+ d.vetofile = 3, '/path/to/file.txt' # set for chip 3
+
+ """
+ raise NotImplementedError('vetofile is set only')
+
+ @vetofile.setter
+ def vetofile(self, args):
+ if isinstance(args, str):
+ chip_index = -1
+ fname = args
+ elif isinstance(args, (tuple, list)):
+ chip_index, fname = args
+ else:
+ raise ValueError("unknow argument to vetofile")
+
+ self.setVetoFile(chip_index, fname)
+
"""
Mythen3 specific
"""