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"; }