From 1ce04ef7854f2b9f08d189d2f6cf07c7d92bc6bc Mon Sep 17 00:00:00 2001 From: l_maliakal_d Date: Tue, 21 Aug 2012 11:53:23 +0000 Subject: [PATCH] updated plot to show index instead of frame number git-svn-id: file:///afs/psi.ch/project/sls_det_software/svn/slsDetectorGui@35 af1100a4-978c-4157-bff7-07162d2ba061 --- slsDetectorGui/forms/form_tab_plot.ui | 7 +- slsDetectorGui/include/qDrawPlot.h | 2 + slsDetectorGui/include/qTabMeasurement.h | 1 + slsDetectorGui/include/qTabPlot.h | 31 +++- slsDetectorGui/src/qDetectorMain.cpp | 1 + slsDetectorGui/src/qDrawPlot.cpp | 62 ++++---- slsDetectorGui/src/qTabMeasurement.cpp | 14 ++ slsDetectorGui/src/qTabPlot.cpp | 175 +++++++++++++---------- 8 files changed, 185 insertions(+), 108 deletions(-) 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(); }