diff --git a/slsDetectorGui/forms/form_tab_advanced.ui b/slsDetectorGui/forms/form_tab_advanced.ui
index df356bf81..ea19dab8a 100755
--- a/slsDetectorGui/forms/form_tab_advanced.ui
+++ b/slsDetectorGui/forms/form_tab_advanced.ui
@@ -1066,239 +1066,6 @@
Acquisition
- -
-
-
- Qt::Horizontal
-
-
- QSizePolicy::Expanding
-
-
-
- 20
- 20
-
-
-
-
- -
-
-
- false
-
-
- <html><head/><body><p>Number of additional storage cells. For Jungfrau only. </p><p>Default: 0. </p><p>Number of Images received: #frames * #triggers * (#storagecells+1) </p><p> #storagecells#</p><p><br/></p></body></html>
-
-
- Number of Storage cells:
-
-
-
- -
-
-
- Qt::Horizontal
-
-
- QSizePolicy::Fixed
-
-
-
- 10
- 20
-
-
-
-
- -
-
-
- Qt::Vertical
-
-
- QSizePolicy::Expanding
-
-
-
- 20
- 20
-
-
-
-
- -
-
-
- false
-
-
-
- 0
- 0
-
-
-
-
- 0
- 25
-
-
-
- <html><head/><body><p>Number of additional storage cells. For Jungfrau only. </p><p>Default: 0. </p><p>Number of Images received: #frames * #triggers * (#storagecells+1) </p><p> #storagecells#</p><p><br/></p></body></html>
-
-
-
-
-
-
-
-
- Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter
-
-
- false
-
-
-
-
-
- -1
-
-
- 15
-
-
- 0
-
-
-
- -
-
-
- false
-
-
-
- 0
- 0
-
-
-
-
- 0
- 25
-
-
-
- <nobr>
-Exposure Time of a sub frame. Only for Eiger in 32 bit mode
-</nobr><br><nobr>
- #subexptime#
-</nobr>
-
-
- Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter
-
-
- false
-
-
- 9
-
-
- -1.000000000000000
-
-
- 2000000000.000000000000000
-
-
- 1.000000000000000
-
-
-
- -
-
-
- false
-
-
- <nobr>
-Dead time between sub frames. Only for Eiger in 32 bit mode.
-</nobr><br><nobr>
-Default value is 0. A value less than the required minimum is ignored.
-</nobr><br><nobr>
- #subdeadtime#
-</nobr>
-
-
- Sub Frame Dead Time:
-
-
-
- -
-
-
- false
-
-
-
- 0
- 0
-
-
-
-
- 0
- 25
-
-
-
- <nobr>
-Period between sub frames. Only for Eiger in 32 bit mode.
-</nobr><br><nobr>
-Default value is 0. A value less than the required minimum is ignored.
-</nobr><br><nobr>
- #subperiod#
-</nobr>
-
-
- Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter
-
-
- false
-
-
- 9
-
-
- -1.000000000000000
-
-
- 2000000000.000000000000000
-
-
- 1.000000000000000
-
-
-
- -
-
-
- false
-
-
- <nobr>
-Exposure Time of a sub frame. Only for Eiger in 32 bit mode
-</nobr><br><nobr>
- #subexptime#
-</nobr>
-
-
- Sub Frame Exposure Time:
-
-
-
-
@@ -1425,6 +1192,98 @@ Exposure Time of a sub frame. Only for Eiger in 32 bit mode
+ -
+
+
+ false
+
+
+ <html><head/><body><p>Number of additional storage cells. For Jungfrau only. </p><p>Default: 0. </p><p>Number of Images received: #frames * #triggers * (#storagecells+1) </p><p> #storagecells#</p><p><br/></p></body></html>
+
+
+ Number of Storage cells:
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+ QSizePolicy::Fixed
+
+
+
+ 10
+ 20
+
+
+
+
+ -
+
+
+ false
+
+
+
+ 0
+ 0
+
+
+
+
+ 0
+ 25
+
+
+
+ <nobr>
+Period between sub frames. Only for Eiger in 32 bit mode.
+</nobr><br><nobr>
+Default value is 0. A value less than the required minimum is ignored.
+</nobr><br><nobr>
+ #subperiod#
+</nobr>
+
+
+ Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter
+
+
+ false
+
+
+ 9
+
+
+ -1.000000000000000
+
+
+ 2000000000.000000000000000
+
+
+ 1.000000000000000
+
+
+
+ -
+
+
+ false
+
+
+ <nobr>
+Exposure Time of a sub frame. Only for Eiger in 32 bit mode
+</nobr><br><nobr>
+ #subexptime#
+</nobr>
+
+
+ Sub Frame Exposure Time:
+
+
+
-
@@ -1490,6 +1349,428 @@ Default value is 0. A value less than the required minimum is ignored.
+ -
+
+
+ Qt::Horizontal
+
+
+ QSizePolicy::Expanding
+
+
+
+ 20
+ 20
+
+
+
+
+ -
+
+
+ Qt::Vertical
+
+
+ QSizePolicy::Expanding
+
+
+
+ 20
+ 20
+
+
+
+
+ -
+
+
+ false
+
+
+
+ 0
+ 0
+
+
+
+
+ 0
+ 25
+
+
+
+ <html><head/><body><p>Number of additional storage cells. For Jungfrau only. </p><p>Default: 0. </p><p>Number of Images received: #frames * #triggers * (#storagecells+1) </p><p> #storagecells#</p><p><br/></p></body></html>
+
+
+
+
+
+
+
+
+ Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter
+
+
+ false
+
+
+
+
+
+ -1
+
+
+ 15
+
+
+ 0
+
+
+
+ -
+
+
+ false
+
+
+
+ 0
+ 0
+
+
+
+
+ 0
+ 25
+
+
+
+ <nobr>
+Exposure Time of a sub frame. Only for Eiger in 32 bit mode
+</nobr><br><nobr>
+ #subexptime#
+</nobr>
+
+
+ Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter
+
+
+ false
+
+
+ 9
+
+
+ -1.000000000000000
+
+
+ 2000000000.000000000000000
+
+
+ 1.000000000000000
+
+
+
+ -
+
+
+ false
+
+
+ <nobr>
+Dead time between sub frames. Only for Eiger in 32 bit mode.
+</nobr><br><nobr>
+Default value is 0. A value less than the required minimum is ignored.
+</nobr><br><nobr>
+ #subdeadtime#
+</nobr>
+
+
+ Sub Frame Dead Time:
+
+
+
+ -
+
+
+ false
+
+
+
+ 0
+ 0
+
+
+
+
+ 0
+ 25
+
+
+
+ <html><head/><body><p>Exposure Time of a corresonding gate signal index. <br/>#exptime1# </p><p>#exptime2#</p><p>#exptime3# </p></body></html>
+
+
+ Qt::LeftToRight
+
+
+ 2
+
+
-
+
+ hr
+
+
+ -
+
+ min
+
+
+ -
+
+ s
+
+
+ -
+
+ ms
+
+
+ -
+
+ us
+
+
+ -
+
+ ns
+
+
+
+
+ -
+
+
+ false
+
+
+
+ 0
+ 0
+
+
+
+
+ 0
+ 25
+
+
+
+ <html><head/><body><p>Exposure Time of a corresonding gate signal index. <br/>#exptime1# </p><p>#exptime2#</p><p>#exptime3# </p></body></html>
+
+
+ Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter
+
+
+ false
+
+
+ 9
+
+
+ -1.000000000000000
+
+
+ 2000000000.000000000000000
+
+
+ 1.000000000000000
+
+
+
+ -
+
+
+ false
+
+
+
+ 0
+ 0
+
+
+
+
+ 0
+ 25
+
+
+
+ <html><head/><body><p>Gate index. It will get exposure time and gate delay for corresponding gate signal.</p></body></html>
+
+
+
+
+
+
+
+
+ Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter
+
+
+ false
+
+
+
+
+
+ 0
+
+
+ 3
+
+
+ 0
+
+
+
+ -
+
+
+ false
+
+
+ <html><head/><body><p>Number of additional storage cells. For Jungfrau only. </p><p>Default: 0. </p><p>Number of Images received: #frames * #triggers * (#storagecells+1) </p><p> #storagecells#</p><p><br/></p></body></html>
+
+
+ Gate Delay:
+
+
+
+ -
+
+
+ false
+
+
+
+ 0
+ 0
+
+
+
+
+ 0
+ 25
+
+
+
+ <html><head/><body><p>Gate Delay of a corresonding gate signal index. <br/>#gatedelay1# </p><p>#gatedelay2#</p><p>#gatedelay3# </p></body></html>
+
+
+ Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter
+
+
+ false
+
+
+ 9
+
+
+ -1.000000000000000
+
+
+ 2000000000.000000000000000
+
+
+ 1.000000000000000
+
+
+
+ -
+
+
+ false
+
+
+
+ 0
+ 0
+
+
+
+
+ 0
+ 25
+
+
+
+ <html><head/><body><p>Gate Delay of a corresonding gate signal index. <br/>#gatedelay1# </p><p>#gatedelay2#</p><p>#gatedelay3# </p></body></html>
+
+
+ Qt::LeftToRight
+
+
+ 2
+
+
-
+
+ hr
+
+
+ -
+
+ min
+
+
+ -
+
+ s
+
+
+ -
+
+ ms
+
+
+ -
+
+ us
+
+
+ -
+
+ ns
+
+
+
+
+ -
+
+
+ false
+
+
+ <html><head/><body><p>Number of additional storage cells. For Jungfrau only. </p><p>Default: 0. </p><p>Number of Images received: #frames * #triggers * (#storagecells+1) </p><p> #storagecells#</p><p><br/></p></body></html>
+
+
+ Expososure Time:
+
+
+
+ -
+
+
+ false
+
+
+ <html><head/><body><p>Number of additional storage cells. For Jungfrau only. </p><p>Default: 0. </p><p>Number of Images received: #frames * #triggers * (#storagecells+1) </p><p> #storagecells#</p><p><br/></p></body></html>
+
+
+ Gate Index:
+
+
+
diff --git a/slsDetectorGui/include/qTabAdvanced.h b/slsDetectorGui/include/qTabAdvanced.h
index 942dc63da..7165eeb2f 100644
--- a/slsDetectorGui/include/qTabAdvanced.h
+++ b/slsDetectorGui/include/qTabAdvanced.h
@@ -36,6 +36,9 @@ class qTabAdvanced : public QWidget, private Ui::TabAdvancedObject {
void SetNumStoragecells(int value);
void SetSubExposureTime();
void SetSubDeadTime();
+ void SetGateIndex(int value);
+ void SetExposureTime();
+ void SetGateDelay();
private:
void SetupWidgetWindow();
@@ -59,6 +62,8 @@ class qTabAdvanced : public QWidget, private Ui::TabAdvancedObject {
void GetNumStoragecells();
void GetSubExposureTime();
void GetSubDeadTime();
+ void GetExposureTime();
+ void GetGateDelay();
sls::Detector *det;
qDrawPlot *plot;
diff --git a/slsDetectorGui/src/qTabAdvanced.cpp b/slsDetectorGui/src/qTabAdvanced.cpp
index a8ba59401..5974e6141 100644
--- a/slsDetectorGui/src/qTabAdvanced.cpp
+++ b/slsDetectorGui/src/qTabAdvanced.cpp
@@ -29,9 +29,21 @@ void qTabAdvanced::SetupWidgetWindow() {
tab_roi->setEnabled(true);
break;
case slsDetectorDefs::MYTHEN3:
+ lblDiscardBits->setEnabled(true);
+ spinDiscardBits->setEnabled(true);
+ lblGateIndex->setEnabled(true);
+ spinGateIndex->setEnabled(true);
+ lblExpTime->setEnabled(true);
+ spinExpTime->setEnabled(true);
+ comboExpTimeUnit->setEnabled(true);
+ lblGateDelay->setEnabled(true);
+ spinGateDelay->setEnabled(true);
+ comboGateDelayUnit->setEnabled(true);
+ break;
case slsDetectorDefs::GOTTHARD2:
lblDiscardBits->setEnabled(true);
spinDiscardBits->setEnabled(true);
+ break;
default:
break;
}
@@ -116,6 +128,28 @@ void qTabAdvanced::Initialization() {
connect(spinDiscardBits, SIGNAL(valueChanged(int)), plot,
SLOT(SetNumDiscardBits(int)));
}
+
+ // gate index
+ if (lblGateIndex->isEnabled()) {
+ connect(spinGateIndex, SIGNAL(valueChanged(int)), this,
+ SLOT(SetGateIndex(int)));
+ }
+
+ // exptime1, exptime2, exptme3
+ if (lblExpTime->isEnabled()) {
+ connect(spinExpTime, SIGNAL(valueChanged(double)), this,
+ SLOT(SetExposureTime()));
+ connect(comboExpTimeUnit, SIGNAL(currentIndexChanged(int)), this,
+ SLOT(SetExposureTime()));
+ }
+
+ // gatedelay1, gatedelay2, gatedelay3
+ if (lblGateDelay->isEnabled()) {
+ connect(spinGateDelay, SIGNAL(valueChanged(double)), this,
+ SLOT(SetGateDelay()));
+ connect(comboGateDelayUnit, SIGNAL(currentIndexChanged(int)), this,
+ SLOT(SetGateDelay()));
+ }
}
void qTabAdvanced::PopulateDetectors() {
@@ -671,6 +705,92 @@ void qTabAdvanced::SetSubDeadTime() {
GetSubDeadTime();
}
+void qTabAdvanced::SetGateIndex(int value) {
+ LOG(logINFO) << "Getting exptime and gate delay for gate index: " << value;
+ GetExposureTime();
+ GetGateDelay();
+}
+
+void qTabAdvanced::GetExposureTime() {
+ int gateIndex = spinGateIndex->value();
+ LOG(logDEBUG) << "Getting exposure time" << gateIndex;
+ disconnect(spinExpTime, SIGNAL(valueChanged(double)), this,
+ SLOT(SetExposureTime()));
+ disconnect(comboExpTimeUnit, SIGNAL(currentIndexChanged(int)), this,
+ SLOT(SetExposureTime()));
+ try {
+ auto retval = det->getExptime(gateIndex).tsquash(
+ "Exptime is inconsistent for all detectors.");
+ auto time = qDefs::getUserFriendlyTime(retval);
+ spinExpTime->setValue(time.first);
+ comboExpTimeUnit->setCurrentIndex(static_cast(time.second));
+ }
+ CATCH_DISPLAY("Could not get exposure time.",
+ "qTabSettings::GetExposureTime")
+ connect(spinExpTime, SIGNAL(valueChanged(double)), this,
+ SLOT(SetExposureTime()));
+ connect(comboExpTimeUnit, SIGNAL(currentIndexChanged(int)), this,
+ SLOT(SetExposureTime()));
+}
+
+void qTabAdvanced::SetExposureTime() {
+ int gateIndex = spinGateIndex->value();
+ auto timeNS = qDefs::getNSTime(std::make_pair(
+ spinExpTime->value(),
+ static_cast(comboExpTimeUnit->currentIndex())));
+ LOG(logINFO) << "Setting exptime" << gateIndex << " to " << timeNS.count()
+ << " ns"
+ << "/" << spinExpTime->value()
+ << qDefs::getUnitString(
+ (qDefs::timeUnit)comboExpTimeUnit->currentIndex());
+ try {
+ det->setExptime(gateIndex, timeNS);
+ }
+ CATCH_DISPLAY("Could not set exposure time.",
+ "qTabAdvanced::SetExposureTime")
+
+ GetExposureTime();
+}
+
+void qTabAdvanced::GetGateDelay() {
+ int gateIndex = spinGateIndex->value();
+ LOG(logDEBUG) << "Getting gate delay" << gateIndex;
+ disconnect(spinGateDelay, SIGNAL(valueChanged(double)), this,
+ SLOT(SetGateDelay()));
+ disconnect(comboGateDelayUnit, SIGNAL(currentIndexChanged(int)), this,
+ SLOT(SetGateDelay()));
+ try {
+ auto retval = det->getGateDelay(gateIndex).tsquash(
+ "GateDelay is inconsistent for all detectors.");
+ auto time = qDefs::getUserFriendlyTime(retval);
+ spinGateDelay->setValue(time.first);
+ comboGateDelayUnit->setCurrentIndex(static_cast(time.second));
+ }
+ CATCH_DISPLAY("Could not get gate delay.", "qTabSettings::GetGateDelay")
+ connect(spinGateDelay, SIGNAL(valueChanged(double)), this,
+ SLOT(SetGateDelay()));
+ connect(comboGateDelayUnit, SIGNAL(currentIndexChanged(int)), this,
+ SLOT(SetGateDelay()));
+}
+
+void qTabAdvanced::SetGateDelay() {
+ int gateIndex = spinGateIndex->value();
+ auto timeNS = qDefs::getNSTime(std::make_pair(
+ spinGateDelay->value(),
+ static_cast(comboGateDelayUnit->currentIndex())));
+ LOG(logINFO) << "Setting gatedelay" << gateIndex << " to " << timeNS.count()
+ << " ns"
+ << "/" << spinGateDelay->value()
+ << qDefs::getUnitString(
+ (qDefs::timeUnit)comboGateDelayUnit->currentIndex());
+ try {
+ det->setGateDelay(gateIndex, timeNS);
+ }
+ CATCH_DISPLAY("Could not set gate delay.", "qTabAdvanced::SetGateDelay")
+
+ GetGateDelay();
+}
+
void qTabAdvanced::Refresh() {
LOG(logDEBUG) << "**Updating Advanced Tab";
@@ -698,5 +818,14 @@ void qTabAdvanced::Refresh() {
GetSubDeadTime();
}
+ // exptime1, exptime2, exptme3
+ if (lblExpTime->isEnabled()) {
+ GetExposureTime();
+ }
+
+ // gatedelay1, gatedelay2, gatedelay3
+ if (lblGateDelay->isEnabled()) {
+ GetGateDelay();
+ }
LOG(logDEBUG) << "**Updated Advanced Tab";
}