diff --git a/slsDetectorGui/forms/form_tab_plot.ui b/slsDetectorGui/forms/form_tab_plot.ui
index 5bbd6f55a..569816ca4 100644
--- a/slsDetectorGui/forms/form_tab_plot.ui
+++ b/slsDetectorGui/forms/form_tab_plot.ui
@@ -519,6 +519,9 @@
Level 0
+
+ true
+
-
@@ -607,7 +610,7 @@
All Frames
- true
+ false
@@ -1051,7 +1054,7 @@
-
- true
+ false
diff --git a/slsDetectorGui/include/qDrawPlot.h b/slsDetectorGui/include/qDrawPlot.h
index 404a7fa81..c9786a557 100644
--- a/slsDetectorGui/include/qDrawPlot.h
+++ b/slsDetectorGui/include/qDrawPlot.h
@@ -137,6 +137,8 @@ private:
int currentMeasurement;
/** currentFrame */
int currentFrame;
+ /** current Index */
+ int currentIndex;
/** Number of Exposures */
int number_of_exposures;
/** Duration between Exposures */
diff --git a/slsDetectorGui/include/qTabMeasurement.h b/slsDetectorGui/include/qTabMeasurement.h
index a5fff4c01..af3cd90e5 100644
--- a/slsDetectorGui/include/qTabMeasurement.h
+++ b/slsDetectorGui/include/qTabMeasurement.h
@@ -167,6 +167,7 @@ signals:
void StartSignal();
void StopSignal();
void CheckPlotIntervalSignal();
+void EnableNthFrameSignal(bool);
};
diff --git a/slsDetectorGui/include/qTabPlot.h b/slsDetectorGui/include/qTabPlot.h
index 46b746f9f..c161d3456 100644
--- a/slsDetectorGui/include/qTabPlot.h
+++ b/slsDetectorGui/include/qTabPlot.h
@@ -16,6 +16,8 @@ class multiSlsDetector;
class qDrawPlot;
/** Qt Include Headers */
#include
+#include
+#include
/**
*@short sets up the Plot parameters
@@ -51,12 +53,14 @@ private:
bool isOneD;
bool isOrginallyOneD;
- int scanLevel[2];
+ /**whether to enable nth frame according to timing mode*/
+ bool enableNFrame;
- QStackedLayout* stackedLayout;
- QSpinBox *spinNthFrame;
- QDoubleSpinBox *spinTimeGap;
- QComboBox *comboTimeGapUnit;
+ QStackedLayout *stackedLayout;
+ QSpinBox *spinNthFrame;
+ QDoubleSpinBox *spinTimeGap;
+ QComboBox *comboTimeGapUnit;
+ QButtonGroup *btnGroupScan;
/** some Default Values */
static QString defaultPlotTitle;
@@ -75,6 +79,11 @@ private:
*/
void Initialization();
+ /** This enabled/disables the nth frame from frequency plot
+ * @param enable enable/disable
+ */
+ void EnablingNthFrameFunction(bool enable);
+
@@ -85,9 +94,18 @@ void SetFrequency();
* @param enable to enable the scan group box
* @param id is 0 if its scan level 0 or scan level 1
*/
-void EnableScanBox(int mode,int id);
+void EnableScanBox(int mode=-1,int id=-1);
+/** a variable is set when timing mode has been changed.
+ * This variable is also disabled if exptime>acq period to be on safe side
+ * Its to check whether to enabled nth frame for frequency plot
+ * @param enable enable/disable
+ */
+void EnableNthFrame(bool enable){enableNFrame = enable;};
+/** Sets the scan argument of the plot
+ */
+void SetScanArgument();
private slots:
@@ -119,7 +137,6 @@ signals:
void DisableZoomSignal(bool);
void SetZRangeSignal(double,double);
void EnableZRangeSignal(bool);
-void ThresholdScanSignal(int);
};
diff --git a/slsDetectorGui/src/qDetectorMain.cpp b/slsDetectorGui/src/qDetectorMain.cpp
index 58bbc32c2..3427df528 100644
--- a/slsDetectorGui/src/qDetectorMain.cpp
+++ b/slsDetectorGui/src/qDetectorMain.cpp
@@ -222,6 +222,7 @@ void qDetectorMain::Initialization(){
connect(tab_measurement, SIGNAL(StartSignal()), this,SLOT(EnableTabs()));
connect(tab_measurement, SIGNAL(StopSignal()), this,SLOT(EnableTabs()));
connect(tab_measurement, SIGNAL(CheckPlotIntervalSignal()), tab_plot,SLOT(SetFrequency()));
+ connect(tab_measurement, SIGNAL(EnableNthFrameSignal(bool)), tab_plot,SLOT(EnableNthFrame(bool)));
// Plot tab
connect(tab_plot, SIGNAL(DisableZoomSignal(bool)), this,SLOT(SetZoomToolTip(bool)));
// Actions tab
diff --git a/slsDetectorGui/src/qDrawPlot.cpp b/slsDetectorGui/src/qDrawPlot.cpp
index 8fba07e9b..dcf77f9e1 100644
--- a/slsDetectorGui/src/qDrawPlot.cpp
+++ b/slsDetectorGui/src/qDrawPlot.cpp
@@ -51,7 +51,7 @@ qDrawPlot::~qDrawPlot(){
void qDrawPlot::SetupWidgetWindow(){
#ifdef VERBOSE
- cout<<"Setting up plot variables"<setTimer(slsDetectorDefs::ACQUISITION_TIME,-1))*1E-9);
- cout<<"\tExposure Time:"<setTimer(slsDetectorDefs::FRAME_PERIOD,-1))*1E-9);
- cout<<"\tAcquisition Period:"<getFileIndex();
+ cout << "\tCurrent Index:" << currentIndex << endl;
StartDaq(true);
running=!running;
@@ -202,14 +205,14 @@ void qDrawPlot::StartStopDaqToggle(bool stop_if_running){
void qDrawPlot::StartDaq(bool start){
if(start){
#ifdef VERBOSE
- cout<<"Start Daq(true) function"<registerDataCallback(&(GetDataCallBack),this);
// Start acquiring data from server
@@ -270,7 +273,7 @@ bool qDrawPlot::StartOrStopThread(bool start){
// This is manually done instead of keeping track of thread because
// this thread returns immediately after executing the acquire command
gui_acquisition_thread_running=1;
- cout<<"Started acquiring threaddd:"<myDet->acquire(1);
- cout<<"after acquire ...."<progressIndex;
//if theres an old copy, try to get lock again
if(oldCopy){
#ifdef VERBOSE
- cout<<"Copying old data: "<0;i--)
memcpy(histYAxis[i],yvalues[i-1],nPixelsX*sizeof(double));
@@ -338,7 +343,7 @@ int qDrawPlot::GetData(detectorData *data){
}//2d
else{
// Titles
- sprintf(temp_title,"Image Number %d",oldFrameNumber);
+ sprintf(temp_title,"Image Index %d",oldFrameNumber);
imageTitle = temp_title;
// copy data
//memcpy(lastImageArray,image_data,nPixelsX*nPixelsY*sizeof(double));
@@ -354,6 +359,7 @@ int qDrawPlot::GetData(detectorData *data){
progress=(int)data->progressIndex;
//lastImageNumber= currentFrame+1;
currentFrame++;
+ currentIndex++;
return 0;
}
//what comes here has plot enabled AND (frame factor OR data pause over )
@@ -361,7 +367,7 @@ int qDrawPlot::GetData(detectorData *data){
if((currentFrame)<(number_of_exposures)){
#ifdef VERYVERBOSE
- cout<<"Reading in image: "<stop();
@@ -528,7 +535,7 @@ void qDrawPlot::UpdatePlot(){
if(lastImageNumber){
if(histNBins){
#ifdef VERYVERBOSE
- cout<<"Last Image Number: "<SetXTitle(histXAxisTitle.toAscii().constData());
@@ -602,6 +609,7 @@ void qDrawPlot::UpdatePlot(){
}// To start the next measurement
else{
emit SetCurrentMeasurementSignal(currentMeasurement);
+ currentIndex++;
StopDaqForGui();
StartDaq(true);
}
@@ -626,7 +634,7 @@ void qDrawPlot::ClonePlot(){
}
// no space for more clone widget references
if(!found){
- cout<<"Too many clones"<setToolTip(errPeriodTip);
lblPeriod->setPalette(red);
lblPeriod->setText("Acquisition Period:*");
+ emit EnableNthFrameSignal(false);
}
else {
spinPeriod->setToolTip(acqPeriodTip);
lblPeriod->setToolTip(acqPeriodTip);
lblPeriod->setPalette(lblTimingMode->palette());
lblPeriod->setText("Acquisition Period:");
+ emit EnableNthFrameSignal(true);
}
+
//Check if the interval between plots is ok
emit CheckPlotIntervalSignal();
}
@@ -558,6 +561,7 @@ void qTabMeasurement::SetTimingMode(int mode){
return;
}
+
if(mode!=None){//Number of Probes
if(myDet->getDetectorsType()==slsDetectorDefs::MYTHEN){
lblNumProbes->setEnabled(true); spinNumProbes->setEnabled(true);
@@ -668,9 +672,19 @@ void qTabMeasurement::SetTimingMode(int mode){
myPlot->setFrameEnabled(lblNumFrames->isEnabled());
myPlot->setTriggerEnabled(lblNumTriggers->isEnabled());
+
+ //check if period is enabled and alright, only then the nth frame frequency is enabled
+ if((lblPeriod->isEnabled())&&(lblPeriod->text()=="Acquisition Period:"))
+ emit EnableNthFrameSignal(true);
+ else emit EnableNthFrameSignal(false);
+
return;
}
+
+//-------------------------------------------------------------------------------------------------------------------------------------------------
+
+
void qTabMeasurement::EnableFileWrite(bool enable){
#ifdef VERBOSE
cout << "Enable File Write:" << enable << endl;
diff --git a/slsDetectorGui/src/qTabPlot.cpp b/slsDetectorGui/src/qTabPlot.cpp
index ea952d41f..391ff2dfc 100644
--- a/slsDetectorGui/src/qTabPlot.cpp
+++ b/slsDetectorGui/src/qTabPlot.cpp
@@ -12,6 +12,7 @@
#include "slsDetector.h"
#include "multiSlsDetector.h"
// Qt Include Headers
+#include
// C++ Include Headers
#include
#include
@@ -52,8 +53,27 @@ qTabPlot::~qTabPlot(){
void qTabPlot::SetupWidgetWindow(){
- scanLevel[0]=false;
- scanLevel[1]=false;
+ //check if nth frame should be enabled
+ enableNFrame = true;
+ //according to timing mode
+ slsDetectorDefs::externalCommunicationMode mode = myDet->setExternalCommunicationMode();
+ if( (mode==slsDetectorDefs::GATE_FIX_NUMBER)||
+ (mode==slsDetectorDefs::TRIGGER_FRAME) ||
+ (mode==slsDetectorDefs::TRIGGER_WINDOW) ||
+ ((mode==slsDetectorDefs::AUTO_TIMING)&&((int)myDet->setTimer(slsDetectorDefs::FRAME_NUMBER,-1)==1)&&((int)myDet->setTimer(slsDetectorDefs::CYCLES_NUMBER,-1)==1)) )
+ enableNFrame = false;
+ //according to if exptime > acq period
+ if((myDet->setTimer(slsDetectorDefs::ACQUISITION_TIME,-1)*(1E-9))>(myDet->setTimer(slsDetectorDefs::FRAME_PERIOD,-1)*(1E-9)))
+ enableNFrame = false;
+
+
+
+//scan arguments
+ btnGroupScan = new QButtonGroup(this);
+ btnGroupScan->addButton(radioLevel0,0);
+ btnGroupScan->addButton(radioLevel1,1);
+ btnGroupScan->addButton(radioFileIndex,2);
+ btnGroupScan->addButton(radioAllFrames,3);
// Plot Axis
myPlot->SetPlotTitle(defaultPlotTitle);
@@ -129,10 +149,10 @@ void qTabPlot::Select1DPlot(bool b){
chkZAxis->setEnabled(false);
chkZMin->setEnabled(false);
chkZMax->setEnabled(false);
- myPlot->SetHistXAxisTitle(defaultHistXAxisTitle);
dispXAxis->setText(defaultHistXAxisTitle);
- myPlot->SetHistYAxisTitle(defaultHistYAxisTitle);
dispYAxis->setText(defaultHistYAxisTitle);
+ myPlot->SetHistXAxisTitle(defaultHistXAxisTitle);
+ myPlot->SetHistYAxisTitle(defaultHistYAxisTitle);
myPlot->Select1DPlot();
}else{
box1D->hide();
@@ -140,22 +160,12 @@ void qTabPlot::Select1DPlot(bool b){
chkZAxis->setEnabled(true);
chkZMin->setEnabled(true);
chkZMax->setEnabled(true);
-
- //threshold scan
- if((scanLevel[0]==2)||(scanLevel[1]==2)){
- myPlot->SetImageXAxisTitle("Channel Number");
- dispXAxis->setText("Channel Number");
- dispYAxis->setText("Threshold");
- myPlot->SetImageYAxisTitle("Threshold");
- }
- else{
- myPlot->SetImageXAxisTitle(defaultImageXAxisTitle);
- dispXAxis->setText(defaultImageXAxisTitle);
- dispYAxis->setText(defaultImageYAxisTitle);
- myPlot->SetImageYAxisTitle(defaultImageYAxisTitle);
- }
- myPlot->SetImageZAxisTitle(defaultImageZAxisTitle);
+ dispXAxis->setText(defaultImageXAxisTitle);
+ dispYAxis->setText(defaultImageYAxisTitle);
dispZAxis->setText(defaultImageZAxisTitle);
+ myPlot->SetImageXAxisTitle(defaultImageXAxisTitle);
+ myPlot->SetImageYAxisTitle(defaultImageYAxisTitle);
+ myPlot->SetImageZAxisTitle(defaultImageZAxisTitle);
myPlot->Select2DPlot();
}
@@ -172,7 +182,7 @@ void qTabPlot::Initialization(){
connect(radioHistogram, SIGNAL(toggled(bool)),this, SLOT(SetPlot()));
connect(radioDataGraph, SIGNAL(toggled(bool)),this, SLOT(SetPlot()));
// Scan box
- //connect(scna, SIGNAL(toggled(bool)),this, SLOT(scanstuff(bool)));
+ connect(btnGroupScan, SIGNAL(buttonClicked(QAbstractButton *)),this, SLOT(SetScanArgument()));
// Snapshot box
connect(btnClone, SIGNAL(clicked()),myPlot, SLOT(ClonePlot()));
connect(btnCloseClones, SIGNAL(clicked()),myPlot, SLOT(CloseClones()));
@@ -213,7 +223,8 @@ void qTabPlot::Initialization(){
connect(dispYMax, SIGNAL(returnPressed()), this, SLOT(SetAxesRange()));
connect(dispZMin, SIGNAL(returnPressed()), this, SLOT(SetZRange()));
connect(dispZMax, SIGNAL(returnPressed()), this, SLOT(SetZRange()));
- connect(this, SIGNAL(SetZRangeSignal(double,double)),myPlot, SIGNAL(SetZRangeSignal(double,double)));
+
+ connect(this,SIGNAL(SetZRangeSignal(double,double)),myPlot, SIGNAL(SetZRangeSignal(double,double)));
// Common Buttons
// Save
@@ -390,26 +401,16 @@ void qTabPlot::SetPlot(){
myPlot->EnablePlot(true);
//if enable is true, disable everything
if(isOrginallyOneD) {box1D->show();box1D->setEnabled(true);} else box1D->hide();
- if(!isOrginallyOneD){box2D->show();box2D->setEnabled(true);} else box2D->hide();
+ if(!isOrginallyOneD){box2D->show();box2D->setEnabled(true);} else box2D->hide();
Select1DPlot(isOrginallyOneD);
boxSnapshot->setEnabled(true);
boxSave->setEnabled(true);
boxFrequency->setEnabled(true);
boxPlotAxis->setEnabled(true);
+ EnableScanBox();
}else{
cout << " - Histogram" << endl;
- myPlot->EnablePlot(true);
- Select1DPlot(false);
- box1D->hide();
- box2D->show();
- box2D->setEnabled(true);
- boxSnapshot->setEnabled(true);
- boxSave->setEnabled(true);
- boxFrequency->setEnabled(false);
- boxPlotAxis->setEnabled(true);
- boxScan->setEnabled(false);
- myPlot->SetPlotTimer(250);
- emit ThresholdScanSignal(0);
+ //select(2d) will set oneD to false, but originallyoneD will remember
}
}
@@ -452,7 +453,7 @@ void qTabPlot::SetFrequency(){
timeMS = (spinNthFrame->value())*acqPeriodMS;
// To make sure the period between plotting is not less than minimum plot timer in ms
if(timeMSPlot Tab: Interval between Plots - The nth Image must be larger.
"
"Condition to be satisfied:\n(Acquisition Period)*(nth Image) >= 250ms."
"
Nth image adjusted to minimum, "
@@ -477,57 +478,87 @@ void qTabPlot::SetFrequency(){
void qTabPlot::EnableScanBox(int mode,int id){
-#ifdef VERBOSE
- cout << "Entering Enable Scan Box()" << endl;
+#ifdef VERYVERBOSE
+ cout << "Entering Enable Scan Box() \t mode:" << mode << " \t id:" << id << endl;
#endif
+ int mode0 = myDet->getScanMode(0);
+ int mode1 = myDet->getScanMode(1);
- scanLevel[id]=mode;
- //both are disabled
- if((!scanLevel[0])&&(!scanLevel[1])){
- boxScan->setEnabled(false);
- }//both are enabled
- else if((scanLevel[0])&&(scanLevel[1])){
- //disable none and check the other
- if(id) {radioLevel1->setEnabled(true);radioLevel1->setChecked(true);}
- else {radioLevel0->setEnabled(true);radioLevel0->setChecked(true);}
- }//either 1 is enabled/disabled
- else{
- if(!boxScan->isEnabled()) {
- boxScan->setEnabled(true);
- radioFileIndex->setEnabled(false);/**???*/
+ boxScan->setEnabled(mode0||mode1);
+
+ if(boxScan->isEnabled()){
+ //make sure nth frame frequency plot is disabled
+ EnablingNthFrameFunction(false);
+
+ //if level0 or 1, check argument to find which scan enabled last from actions tab
+ if((btnGroupScan->checkedId()!=2)&&(btnGroupScan->checkedId()!=3)){
+ cout<<"mode:"<0){
+ if(!id) radioLevel0->setChecked(true);
+ else radioLevel1->setChecked(true);
+ }
}
- //disable one and check the other
- if(id) {
- radioLevel0->setEnabled(!mode);
- radioLevel0->setChecked(!mode);
- radioLevel1->setEnabled(mode);
- radioLevel1->setChecked(mode);
- }else{
- radioLevel0->setEnabled(mode);
- radioLevel0->setChecked(mode);
- radioLevel1->setEnabled(!mode);
- radioLevel1->setChecked(!mode);
+
+ radioLevel0->setEnabled(mode0);
+ radioLevel1->setEnabled(mode1);
+ }else EnablingNthFrameFunction(enableNFrame);
+}
+
+
+//-------------------------------------------------------------------------------------------------------------------------------------------------
+
+void qTabPlot::EnablingNthFrameFunction(bool enable){
+#ifdef VERYVERBOSE
+ cout << "Enabling Nth Frame : " << enable << endl;
+#endif
+ QStandardItemModel* model = qobject_cast(comboFrequency->model());
+ QStandardItem* item = model->itemFromIndex(model->index(1, comboFrequency->modelColumn(), comboFrequency->rootModelIndex()));
+
+ //enabling/disabling is easy if it wasnt selected anyway
+ if(comboFrequency->currentIndex()!=1)
+ item->setEnabled(enable);
+ else{
+ //only when it was enabled before and now to disable is a problem
+ if(!enable){
+ spinTimeGap->setValue(myPlot->GetMinimumPlotTimer());
+ comboFrequency->setCurrentIndex(0);
+ item->setEnabled(false);
}
}
- //check for threshold
- if((scanLevel[0]==2)||(scanLevel[1]==2))
- radioHistogram->setChecked(true);
- else
- radioDataGraph->setChecked(true);
-
- /*
- if(boxScan->isEnabled()){
- myDet->setPlotType(i);
- }*/
}
+//-------------------------------------------------------------------------------------------------------------------------------------------------
+
+void qTabPlot::SetScanArgument(){
+ switch(btnGroupScan->checkedId()){
+ //level0
+ case 0:
+ break;
+
+ //level1
+ case 1:
+ break;
+
+ //file index
+ case 2:
+ break;
+
+ //all frames
+ case 3:
+ break;
+ }
+
+}
//-------------------------------------------------------------------------------------------------------------------------------------------------
+
void qTabPlot::Refresh(){
SetFrequency();
+ EnableScanBox();
}