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