diff --git a/slsDetectorGui/forms/form_tab_advanced.ui b/slsDetectorGui/forms/form_tab_advanced.ui index e523966c0..8240f6c91 100644 --- a/slsDetectorGui/forms/form_tab_advanced.ui +++ b/slsDetectorGui/forms/form_tab_advanced.ui @@ -256,7 +256,7 @@ Plots Trimbits from Detector. This will take time. 25 25 696 - 199 + 208 @@ -977,7 +977,7 @@ An extension given by the modules serial number will be attached. 25 25 686 - 128 + 148 @@ -1357,7 +1357,7 @@ An extension given by the modules serial number will be attached. 35 15 686 - 128 + 146 @@ -1750,7 +1750,7 @@ An extension given by the modules serial number will be attached. - Others + Acquisition @@ -1758,10 +1758,48 @@ An extension given by the modules serial number will be attached. 14 13 367 - 39 + 110 + + + + false + + + + 0 + 0 + + + + <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 + + + @@ -1791,7 +1829,80 @@ An extension given by the modules serial number will be attached. - + + + + false + + + <nobr> +Exposure Time of a sub frame. Only for Eiger in 32 bit mode +</nobr><br><nobr> + #subexptime# +</nobr> + + + Sub Frame Exposure Time: + + + + + + + false + + + + 0 + 0 + + + + <nobr> +Exposure Time of a sub frame. Only for Eiger in 32 bit mode +</nobr><br><nobr> + #subexptime# +</nobr> + + + Qt::LeftToRight + + + 2 + + + + hr + + + + + min + + + + + s + + + + + ms + + + + + us + + + + + ns + + + + + false @@ -1831,6 +1942,123 @@ An extension given by the modules serial number will be attached. + + + + false + + + <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> + + + Sub Frame Period: + + + + + + + false + + + + 0 + 0 + + + + <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 + + + + 0 + 0 + + + + <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::LeftToRight + + + 2 + + + + hr + + + + + min + + + + + s + + + + + ms + + + + + us + + + + + ns + + + + diff --git a/slsDetectorGui/include/qTabAdvanced.h b/slsDetectorGui/include/qTabAdvanced.h index 9017b5644..e07305d77 100644 --- a/slsDetectorGui/include/qTabAdvanced.h +++ b/slsDetectorGui/include/qTabAdvanced.h @@ -201,6 +201,13 @@ private slots: /** Set storage cells */ void SetNumStoragecells(int value); + /** Set sub frame exposure time */ + void SetSubExposureTime(); + + /** Set sub frame period */ + void SetSubPeriod(); + + private: /** The multi detector object */ multiSlsDetector *myDet; @@ -245,7 +252,11 @@ private: vector spinToY; int numRois; + /** sub period tool tip variables*/ + QString acqSubPeriodTip; + QString errSubPeriodTip; + void CheckAcqPeriodGreaterThanExp(); }; diff --git a/slsDetectorGui/src/qTabAdvanced.cpp b/slsDetectorGui/src/qTabAdvanced.cpp index 92d5d05f3..d07f51bb0 100644 --- a/slsDetectorGui/src/qTabAdvanced.cpp +++ b/slsDetectorGui/src/qTabAdvanced.cpp @@ -72,6 +72,14 @@ void qTabAdvanced::SetupWidgetWindow(){ rxrOnlineTip = comboRxrOnline->toolTip(); errOnlineTip = QString("

It is offline!"); + acqSubPeriodTip = spinSubPeriod->toolTip(); + errSubPeriodTip = acqSubPeriodTip + + QString("

Sub Frame Period " + "should be greater than or equal to " + "Sub Frame Exposure Time.
"); + + + detType = myDet->getDetectorsType(); switch(detType){ case slsDetectorDefs::MYTHEN: @@ -91,6 +99,12 @@ void qTabAdvanced::SetupWidgetWindow(){ dispMAC->setEnabled(true); boxRxr->setEnabled(true); boxSetAllTrimbits->setEnabled(true); + lblSubExpTime->setEnabled(true); + spinSubExpTime->setEnabled(true); + comboSubExpTimeUnit->setEnabled(true); + lblSubPeriod->setEnabled(true); + spinSubPeriod->setEnabled(true); + comboSubPeriodUnit->setEnabled(true); break; case slsDetectorDefs::MOENCH: isEnergy = false; @@ -212,6 +226,18 @@ void qTabAdvanced::SetupWidgetWindow(){ lblNumStoragecells->setEnabled(true); spinNumStoragecells->setEnabled(true); spinNumStoragecells->setValue((int)myDet->setTimer(slsDetectorDefs::STORAGE_CELL_NUMBER,-1)); + } else if (detType == slsDetectorDefs::EIGER) { + //subexptime + qDefs::timeUnit unit; + double time = qDefs::getCorrectTime(unit,((double)(myDet->setTimer(slsDetectorDefs::SUBFRAME_ACQUISITION_TIME,-1)*(1E-9)))); + spinSubExpTime->setValue(time); + comboSubExpTimeUnit->setCurrentIndex((int)unit); + //period + time = qDefs::getCorrectTime(unit,((double)(myDet->setTimer(slsDetectorDefs::SUBFRAME_PERIOD,-1)*(1E-9)))); + spinSubPeriod->setValue(time); + comboSubPeriodUnit->setCurrentIndex((int)unit); + + CheckAcqPeriodGreaterThanExp(); } Initialization(); @@ -303,6 +329,14 @@ void qTabAdvanced::Initialization(){ if(detType == slsReceiverDefs::JUNGFRAU) { connect(spinNumStoragecells, SIGNAL(valueChanged(int)), this, SLOT(SetNumStoragecells(int))); + } else if (detType == slsDetectorDefs::EIGER) { + //Exposure Time + connect(spinSubExpTime,SIGNAL(valueChanged(double)), this, SLOT(SetSubExposureTime())); + connect(comboSubExpTimeUnit,SIGNAL(currentIndexChanged(int)), this, SLOT(SetSubExposureTime())); + //Frame Period between exposures + connect(spinSubPeriod,SIGNAL(valueChanged(double)), this, SLOT(SetSubPeriod())); + connect(comboSubPeriodUnit,SIGNAL(currentIndexChanged(int)),this, SLOT(SetSubPeriod())); + } } @@ -1253,6 +1287,110 @@ void qTabAdvanced::SetNumStoragecells(int value) { //------------------------------------------------------------------------------------------------------------------------------------------------- +void qTabAdvanced::SetSubExposureTime() { + disconnect(spinSubExpTime,SIGNAL(valueChanged(double)), this, SLOT(SetSubExposureTime())); + disconnect(comboSubExpTimeUnit,SIGNAL(currentIndexChanged(int)),this, SLOT(SetSubExposureTime())); + + //Get the value of timer in ns + double timeNS = qDefs::getNSTime( + (qDefs::timeUnit)comboSubExpTimeUnit->currentIndex(), + spinSubExpTime->value()); + + // set value +#ifdef VERBOSE + cout << "Setting sub frame acquisition time to " << timeNS << " clocks" << + "/" << spinSubExpTime->value() << + qDefs::getUnitString((qDefs::timeUnit)comboSubExpTimeUnit->currentIndex()) << endl; +#endif + myDet->setTimer(slsDetectorDefs::SUBFRAME_ACQUISITION_TIME,(int64_t)timeNS); + qDefs::checkErrorMessage(myDet,"qTabAdvanced::SetSubExposureTime"); + + // update value in gui + qDefs::timeUnit unit; + double time = qDefs::getCorrectTime(unit,((double)( + myDet->setTimer(slsDetectorDefs::SUBFRAME_ACQUISITION_TIME,-1)*(1E-9)))); + spinSubExpTime->setValue(time); + comboSubExpTimeUnit->setCurrentIndex((int)unit); + + + // highlight if period < exptime + CheckAcqPeriodGreaterThanExp(); + + connect(spinSubExpTime,SIGNAL(valueChanged(double)), this, SLOT(SetSubExposureTime())); + connect(comboSubExpTimeUnit,SIGNAL(currentIndexChanged(int)), this, SLOT(SetSubExposureTime())); + + + qDefs::checkErrorMessage(myDet,"qTabAdvanced::SetSubExposureTime"); +} + + +//------------------------------------------------------------------------------------------------------------------------------------------------- + + +void qTabAdvanced::SetSubPeriod() { + disconnect(spinSubPeriod,SIGNAL(valueChanged(double)), this, SLOT(SetSubPeriod())); + disconnect(comboSubPeriodUnit,SIGNAL(currentIndexChanged(int)),this, SLOT(SetSubPeriod())); + + //Get the value of timer in ns + double timeNS = qDefs::getNSTime( + (qDefs::timeUnit)comboSubPeriodUnit->currentIndex(), + spinSubPeriod->value()); + + // set value +#ifdef VERBOSE + cout << "Setting sub frame period to " << timeNS << " clocks" << + "/" << spinSubPeriod->value() << + qDefs::getUnitString((qDefs::timeUnit)comboSubPeriodUnit->currentIndex()) << endl; +#endif + myDet->setTimer(slsDetectorDefs::SUBFRAME_PERIOD,(int64_t)timeNS); + qDefs::checkErrorMessage(myDet,"qTabAdvanced::SetSubPeriod"); + + // update value in gui + qDefs::timeUnit unit; + double time = qDefs::getCorrectTime(unit,((double)( + myDet->setTimer(slsDetectorDefs::SUBFRAME_PERIOD,-1)*(1E-9)))); + spinSubPeriod->setValue(time); + comboSubPeriodUnit->setCurrentIndex((int)unit); + + // highlight if period < exptime + CheckAcqPeriodGreaterThanExp(); + + connect(spinSubPeriod,SIGNAL(valueChanged(double)), this, SLOT(SetSubPeriod())); + connect(comboSubPeriodUnit,SIGNAL(currentIndexChanged(int)),this, SLOT(SetSubPeriod())); + + + qDefs::checkErrorMessage(myDet,"qTabAdvanced::SetSubPeriod"); +} + + +//------------------------------------------------------------------------------------------------------------------------------------------------- + + +void qTabAdvanced::CheckAcqPeriodGreaterThanExp(){ + double exptimeNS = qDefs::getNSTime( + (qDefs::timeUnit)comboSubExpTimeUnit->currentIndex(), + spinSubExpTime->value()); + double acqtimeNS = qDefs::getNSTime( + (qDefs::timeUnit)comboSubPeriodUnit->currentIndex(), + spinSubPeriod->value()); + if(exptimeNS>acqtimeNS && acqtimeNS > 0) { + spinSubPeriod->setToolTip(errSubPeriodTip); + lblSubPeriod->setToolTip(errSubPeriodTip); + lblSubPeriod->setPalette(red); + lblSubPeriod->setText("Sub Frame Period:*"); + } + else { + spinSubPeriod->setToolTip(acqSubPeriodTip); + lblSubPeriod->setToolTip(acqSubPeriodTip); + lblSubPeriod->setPalette(lblExpTime->palette()); + lblSubPeriod->setText("Sub Frame Period:"); + } +} + + +//------------------------------------------------------------------------------------------------------------------------------------------------- + + void qTabAdvanced::Refresh(){ @@ -1449,6 +1587,38 @@ void qTabAdvanced::Refresh(){ connect(spinNumStoragecells,SIGNAL(valueChanged(int)), this, SLOT(SetNumStoragecells(int))); } + // sub exptime and sub period + else if (detType == slsReceiverDefs::EIGER) { + disconnect(spinSubExpTime,SIGNAL(valueChanged(double)), this, SLOT(SetSubExposureTime())); + disconnect(comboSubExpTimeUnit,SIGNAL(currentIndexChanged(int)),this, SLOT(SetSubExposureTime())); + disconnect(spinSubPeriod,SIGNAL(valueChanged(double)), this, SLOT(SetSubPeriod())); + disconnect(comboSubPeriodUnit,SIGNAL(currentIndexChanged(int)),this, SLOT(SetSubPeriod())); + +#ifdef VERBOSE + cout << "Getting Sub Exposure time and Sub Period" << endl; +#endif + // subexptime + qDefs::timeUnit unit; + double time = qDefs::getCorrectTime(unit,((double)( + myDet->setTimer(slsDetectorDefs::SUBFRAME_ACQUISITION_TIME,-1)*(1E-9)))); + spinSubExpTime->setValue(time); + comboSubExpTimeUnit->setCurrentIndex((int)unit); + + // subperiod + time = qDefs::getCorrectTime(unit,((double)(myDet->setTimer(slsDetectorDefs::SUBFRAME_PERIOD,-1)*(1E-9)))); + spinSubPeriod->setValue(time); + comboSubPeriodUnit->setCurrentIndex((int)unit); + + + // highlight if period < exptime + CheckAcqPeriodGreaterThanExp(); + + connect(spinSubExpTime,SIGNAL(valueChanged(double)), this, SLOT(SetSubExposureTime())); + connect(comboSubExpTimeUnit,SIGNAL(currentIndexChanged(int)), this, SLOT(SetSubExposureTime())); + connect(spinSubPeriod,SIGNAL(valueChanged(double)), this, SLOT(SetSubPeriod())); + connect(comboSubPeriodUnit,SIGNAL(currentIndexChanged(int)),this, SLOT(SetSubPeriod())); + } + #ifdef VERBOSE cout << "**Updated Advanced Tab" << endl << endl; #endif