From f7078c37004a9a3a7e9d7eb5014dc30d94fe23fb Mon Sep 17 00:00:00 2001 From: l_maliakal_d Date: Mon, 10 Sep 2012 17:55:44 +0000 Subject: [PATCH] updated number of measurements to be taken from the detector class git-svn-id: file:///afs/psi.ch/project/sls_det_software/svn/slsDetectorGui@54 af1100a4-978c-4157-bff7-07162d2ba061 --- slsDetectorGui/include/qDrawPlot.h | 9 +- slsDetectorGui/include/qTabMeasurement.h | 4 +- slsDetectorGui/src/qDetectorMain.cpp | 67 +++--- slsDetectorGui/src/qDrawPlot.cpp | 259 +++++++++++++---------- slsDetectorGui/src/qTabAdvanced.cpp | 20 ++ slsDetectorGui/src/qTabDataOutput.cpp | 2 +- slsDetectorGui/src/qTabMeasurement.cpp | 58 +++-- 7 files changed, 253 insertions(+), 166 deletions(-) diff --git a/slsDetectorGui/include/qDrawPlot.h b/slsDetectorGui/include/qDrawPlot.h index f16c63eeb..5872fed19 100644 --- a/slsDetectorGui/include/qDrawPlot.h +++ b/slsDetectorGui/include/qDrawPlot.h @@ -94,9 +94,6 @@ public: * @param stop_if_running is 0 to stop acquisition and 1 to start acquisition */ void StartStopDaqToggle(bool stop_if_running=0); - /** Set number of measurements - * @param num number of measurements to be set */ - void setNumMeasurements(int num){number_of_measurements = num;}; /** Set frame enabled * @param enable enable*/ void setFrameEnabled(bool enable){isFrameEnabled = enable;}; @@ -168,6 +165,8 @@ int StartDaqForGui() {return StartOrStopThread(1) ? 1:0;} int StopDaqForGui() {return StartOrStopThread(0) ? 0:1;} /** Starts/stops Acquisition Thread */ bool StartOrStopThread(bool start); +/** Sets up measurement each time */ +void SetupMeasurement(); /** Resets the acquisition parameter like lastimagenumber */ int ResetDaqForGui(); /** The function which is called when start acquisition thread is created */ @@ -252,8 +251,6 @@ SlsQt2DPlotLayout* plot2D; QVector plot1D_hists; -/** Number of Measurements */ -int number_of_measurements; /** Current Measurement */ int currentMeasurement; /** currentFrame */ @@ -391,6 +388,8 @@ int scanArgument; /** enable angle plot */ bool anglePlot; +/** prevents err msg displaying twice when detector stopped, "transmitting" */ +bool alreadyDisplayed; diff --git a/slsDetectorGui/include/qTabMeasurement.h b/slsDetectorGui/include/qTabMeasurement.h index aa46f6477..10497eab9 100644 --- a/slsDetectorGui/include/qTabMeasurement.h +++ b/slsDetectorGui/include/qTabMeasurement.h @@ -43,7 +43,7 @@ public: /** To enable expert mode * @param enable to enable if true */ - void SetExpertMode(bool enable){expertMode = enable;SetupTimingMode();}; + void SetExpertMode(bool enable); @@ -163,8 +163,6 @@ private: enum{None, Auto, Trigger_Exp_Series, Trigger_Frame, Trigger_Readout, Gated, Gated_Start, Trigger_Window, NumTimingModes}; /** timer to update the progress*/ QTimer *progressTimer; - /** number of measurements*/ - int numMeasurement; /** current measurement */ int currentMeasurement; /** tool tip variables*/ diff --git a/slsDetectorGui/src/qDetectorMain.cpp b/slsDetectorGui/src/qDetectorMain.cpp index 8102f03fe..9ca9110d9 100644 --- a/slsDetectorGui/src/qDetectorMain.cpp +++ b/slsDetectorGui/src/qDetectorMain.cpp @@ -174,47 +174,48 @@ void qDetectorMain::SetUpDetector(){ //instantiate detector and set window title - myDet = new multiSlsDetector(detID); - string host = myDet->getHostname(detID); - cout<<"online:"<setOnline();<getSlsDetector(detID); + myDet = new multiSlsDetector(); + string host = myDet->getHostname(); + //if hostname doesnt exist even in shared memory if(!host.length()){ #ifdef VERBOSE - cout << endl << "No Detector Connected at id:" << detID << endl; + cout << endl << "No Detector Connected." << endl; #endif - char cIndex[10]; - sprintf(cIndex,"%d",detID); - qDefs::Message(qDefs::CRITICAL,string("No Detector Connected at id : ")+string(cIndex),"Main"); - exit(-1); - }//if the detector is not even connected - else if(s->setTCPSocket()==slsDetectorDefs::FAIL){ - qDefs::Message(qDefs::CRITICAL,string("The detector ")+host+string(" is not connected. Exiting GUI."),"Main"); - cout << "The detector " << host << "is not connected. Exiting GUI." << endl; + qDefs::Message(qDefs::CRITICAL,"No Detectors Connected. ","Main"); exit(-1); } - else{ - slsDetectorDefs::detectorType detType = myDet->getDetectorsType(); - // Check if type valid. If not, exit - switch(detType){//digitalDetector decides if trimbits should be shown - case slsDetectorDefs::MYTHEN: digitalDetector = true; break; - case slsDetectorDefs::EIGER: digitalDetector = true; break; - case slsDetectorDefs::GOTTHARD: digitalDetector = false;break; - case slsDetectorDefs::AGIPD: digitalDetector = false;break; - default: - string detName = myDet->slsDetectorBase::getDetectorType(detType); - string errorMess = host+string(" has unknown detector type \"")+ - detName+string("\". Exiting GUI."); - qDefs::Message(qDefs::CRITICAL,errorMess,"Main"); - exit(-1); - } - setWindowTitle("SLS Detector GUI : "+ - QString(slsDetectorBase::getDetectorType(detType).c_str())+ " - "+QString(host.c_str())); + + //check if the detector is not even connected + string offline = myDet->checkOnline(); + if(!offline.empty()){ + qDefs::Message(qDefs::CRITICAL,string("The detector(s) ")+offline+string(" is/are not connected. Exiting GUI."),"Main"); + cout << "The detector(s) " << host << " is/are not connected. Exiting GUI." << endl; + exit(-1); + } + + // Check if type valid. If not, exit + slsDetectorDefs::detectorType detType = myDet->getDetectorsType(); + switch(detType){ + //digitalDetector decides if trimbits should be shown + case slsDetectorDefs::MYTHEN: digitalDetector = true; break; + case slsDetectorDefs::EIGER: digitalDetector = true; break; + case slsDetectorDefs::GOTTHARD: digitalDetector = false;break; + case slsDetectorDefs::AGIPD: digitalDetector = false;break; + default: + string detName = myDet->slsDetectorBase::getDetectorType(detType); + string errorMess = host+string(" has unknown detector type \"")+ + detName+string("\". Exiting GUI."); + qDefs::Message(qDefs::CRITICAL,errorMess,"Main"); + exit(-1); + } + setWindowTitle("SLS Detector GUI : "+ + QString(slsDetectorBase::getDetectorType(detType).c_str())+ " - "+QString(host.c_str())); #ifdef VERBOSE - cout << endl << "Type : " << slsDetectorBase::getDetectorType(detType) << "\nDetector : " << host << endl; + cout << endl << "Type : " << slsDetectorBase::getDetectorType(detType) << "\nDetector : " << host << endl; #endif - myDet->setOnline(slsDetectorDefs::ONLINE_FLAG); - } + myDet->setOnline(slsDetectorDefs::ONLINE_FLAG); + } diff --git a/slsDetectorGui/src/qDrawPlot.cpp b/slsDetectorGui/src/qDrawPlot.cpp index 52e271f96..c468f506b 100644 --- a/slsDetectorGui/src/qDrawPlot.cpp +++ b/slsDetectorGui/src/qDrawPlot.cpp @@ -28,6 +28,7 @@ using namespace std; //------------------------------------------------------------------------------------------------------------------------------------------------- + qDrawPlot::qDrawPlot(QWidget *parent,multiSlsDetector*& detector): QWidget(parent),myDet(detector){ SetupWidgetWindow(); @@ -35,8 +36,10 @@ qDrawPlot::qDrawPlot(QWidget *parent,multiSlsDetector*& detector): StartStopDaqToggle(); //as default } + //------------------------------------------------------------------------------------------------------------------------------------------------- + qDrawPlot::~qDrawPlot(){ // Clear plot Clear1DPlot(); @@ -48,13 +51,14 @@ qDrawPlot::~qDrawPlot(){ for(int i=0;isetTimer(slsDetectorDefs::MEASUREMENTS_NUMBER,-1); // Reset Current Measurement currentMeasurement = 0; emit SetCurrentMeasurementSignal(currentMeasurement); + //to get the first image data_pause_over = true; - + //in case of error message + alreadyDisplayed = false; // Number of Exposures int numFrames = (isFrameEnabled)*((int)myDet->setTimer(slsDetectorDefs::FRAME_NUMBER,-1)); @@ -245,8 +258,10 @@ void qDrawPlot::StartStopDaqToggle(bool stop_if_running){ } } + //------------------------------------------------------------------------------------------------------------------------------------------------- + void qDrawPlot::StartDaq(bool start){ if(start){ #ifdef VERBOSE @@ -264,8 +279,10 @@ void qDrawPlot::StartDaq(bool start){ } } + //------------------------------------------------------------------------------------------------------------------------------------------------- + int qDrawPlot::ResetDaqForGui(){ if(!StopDaqForGui()) return 0; cout << "Resetting image number" << endl; @@ -273,8 +290,10 @@ int qDrawPlot::ResetDaqForGui(){ return 1; } + //------------------------------------------------------------------------------------------------------------------------------------------------- + bool qDrawPlot::StartOrStopThread(bool start){ static bool firstTime = true; static bool gui_acquisition_thread_running = 0; @@ -291,92 +310,9 @@ bool qDrawPlot::StartOrStopThread(bool start){ //start part if(start){ - if(myDet->getRunStatus()==slsDetectorDefs::IDLE) - cout<getRunStatus()<getFileIndex(); - currentScanValue = 0; - currentScanDivLevel = 0; - - - if(scanArgument!=None){ - if(scanArgument==AllFrames){ - maxPixelsY = currentIndex + number_of_exposures - 1; - minPixelsY = currentIndex; - nPixelsY = number_of_exposures; - }else if(scanArgument==FileIndex){ - maxPixelsY = currentIndex + number_of_frames - 1; - minPixelsY = currentIndex; - nPixelsY = number_of_frames; - }else if(scanArgument==Level0){ - //no need to check if numsteps=0,cuz otherwise this mode wont be set in plot tab - int numSteps = myDet->getScanSteps(0); - double *values = new double[numSteps]; - myDet->getScanSteps(0,values); - - maxPixelsY = values[numSteps-1]; - minPixelsY = values[0]; - nPixelsY = numSteps; - currentScanValue = values[0]; - } - else { - //no need to check if numsteps=0,cuz otherwise this mode wont be set in plot tab - int numSteps = myDet->getScanSteps(1); - double *values = new double[numSteps]; - myDet->getScanSteps(1,values); - - maxPixelsY = values[numSteps-1]; - minPixelsY = values[0]; - nPixelsY = numSteps; - currentScanValue = values[0]; - } - pixelWidth = (maxPixelsY -minPixelsY)/(nPixelsY-1); - startPixel = minPixelsY -(pixelWidth/2); - endPixel = maxPixelsY + (pixelWidth/2); - }else{//no scan - nPixelsY = 100;//number_of_exposures; - maxPixelsY = 100; - minPixelsY = 0; - startPixel = -0.5; - endPixel = nPixelsY-0.5; - } - cout<<"nPixelsY:"<getRunStatus()==slsDetectorDefs::IDLE) + cout<getRunStatus()<getFileIndex(); + currentScanValue = 0; + currentScanDivLevel = 0; + + + if(scanArgument!=None){ + if(scanArgument==AllFrames){ + maxPixelsY = currentIndex + number_of_exposures - 1; + minPixelsY = currentIndex; + nPixelsY = number_of_exposures; + }else if(scanArgument==FileIndex){ + maxPixelsY = currentIndex + number_of_frames - 1; + minPixelsY = currentIndex; + nPixelsY = number_of_frames; + }else if(scanArgument==Level0){ + //no need to check if numsteps=0,cuz otherwise this mode wont be set in plot tab + int numSteps = myDet->getScanSteps(0); + double *values = new double[numSteps]; + myDet->getScanSteps(0,values); + + maxPixelsY = values[numSteps-1]; + minPixelsY = values[0]; + nPixelsY = numSteps; + currentScanValue = values[0]; + } + else { + //no need to check if numsteps=0,cuz otherwise this mode wont be set in plot tab + int numSteps = myDet->getScanSteps(1); + double *values = new double[numSteps]; + myDet->getScanSteps(1,values); + + maxPixelsY = values[numSteps-1]; + minPixelsY = values[0]; + nPixelsY = numSteps; + currentScanValue = values[0]; + } + pixelWidth = (maxPixelsY -minPixelsY)/(nPixelsY-1); + startPixel = minPixelsY -(pixelWidth/2); + endPixel = maxPixelsY + (pixelWidth/2); + }else{//no scan + nPixelsY = 100;//number_of_exposures; + maxPixelsY = 100; + minPixelsY = 0; + startPixel = -0.5; + endPixel = nPixelsY-0.5; + } + cout<<"nPixelsY:"<myDet->acquire(1); @@ -406,19 +435,24 @@ void* qDrawPlot::DataStartAcquireThread(void *this_pointer){ return this_pointer; } + //------------------------------------------------------------------------------------------------------------------------------------------------- + int qDrawPlot::GetDataCallBack(detectorData *data, void *this_pointer){ ((qDrawPlot*)this_pointer)->GetData(data); return 0; } + //------------------------------------------------------------------------------------------------------------------------------------------------- + int qDrawPlot::GetData(detectorData *data){ #ifdef VERYVERBOSE cout << "Entering GetDatafunction" << endl; #endif + cout<<"progress:"<<(int)data->progressIndex<getRunStatus(); - string status = slsDetectorBase::runStatusType(slsDetectorDefs::runStatus(detStatus)); - qDefs::Message(qDefs::WARNING,string("The acquisiton has ended abruptly. Current Detector Status: ")+status+string("."),"Dock"); + if(!alreadyDisplayed){ + alreadyDisplayed = true; + int detStatus = (int)myDet->getRunStatus(); + string status = slsDetectorBase::runStatusType(slsDetectorDefs::runStatus(detStatus)); + qDefs::Message(qDefs::WARNING,string("The acquisiton has ended abruptly. Current Detector Status: ")+status+string("."),"Dock"); + } } + //------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/slsDetectorGui/src/qTabAdvanced.cpp b/slsDetectorGui/src/qTabAdvanced.cpp index 39af2c33e..9bc2c7081 100644 --- a/slsDetectorGui/src/qTabAdvanced.cpp +++ b/slsDetectorGui/src/qTabAdvanced.cpp @@ -346,6 +346,26 @@ void qTabAdvanced::UpdatePlot(){ cout << "Updating Plot" << endl; #endif + int nPixelsX = myDet->getTotalNumberOfChannels(); + + int *histXAxis = new int[nPixelsX]; + int *histYAxis = new int[100]; + for(int i=0;igetNumberOfDetectors();det++){ + slsDetector *s = myDet->getSlsDetector(det); + channelsPerDetector=s->getTotalNumberOfChannels(); + if(s->chanregs){ + for(int i=0;ichanregs,channelsPerDetector*sizeof(int)); + } + } + } +*/ + cout<<"histyaxis[500]:"<getDetectorsType(); diff --git a/slsDetectorGui/src/qTabMeasurement.cpp b/slsDetectorGui/src/qTabMeasurement.cpp index cd0a7b43d..c1a129a4b 100644 --- a/slsDetectorGui/src/qTabMeasurement.cpp +++ b/slsDetectorGui/src/qTabMeasurement.cpp @@ -48,7 +48,7 @@ qTabMeasurement::~qTabMeasurement(){ void qTabMeasurement::SetupWidgetWindow(){ //Number of measurements - numMeasurement=1; + spinNumMeasurements->setValue((int)myDet->setTimer(slsDetectorDefs::MEASUREMENTS_NUMBER,-1)); //Timer to update the progress bar progressTimer = new QTimer(this); @@ -66,6 +66,7 @@ void qTabMeasurement::SetupWidgetWindow(){ " #period#

")+ QString("Acquisition Period should be" " greater than or equal to Exposure Time."); + //File Name dispFileName->setText(QString(myDet->getFileName().c_str())); //File Index @@ -92,6 +93,24 @@ void qTabMeasurement::SetupWidgetWindow(){ //------------------------------------------------------------------------------------------------------------------------------------------------- +void qTabMeasurement::SetExpertMode(bool enable){ + expertMode = enable; + lblNumProbes->setEnabled(enable); + spinNumProbes->setEnabled(enable); + //Number of Probes + if((enable)&&(myDet->getDetectorsType()==slsDetectorDefs::MYTHEN)){ + int val = (int)myDet->setTimer(slsDetectorDefs::PROBES_NUMBER,-1); + spinNumProbes->setValue(val); +#ifdef VERBOSE + cout << "Getting number of probes : " << val << endl; +#endif + } +} + + +//------------------------------------------------------------------------------------------------------------------------------------------------- + + void qTabMeasurement::SetupTimingMode(){ //Get timing mode from detector slsDetectorDefs::externalCommunicationMode mode = myDet->setExternalCommunicationMode(); @@ -251,16 +270,6 @@ void qTabMeasurement::Enable(bool enable){ //------------------------------------------------------------------------------------------------------------------------------------------------- -void qTabMeasurement::setNumMeasurements(int val){ -#ifdef VERBOSE - cout << "Setting Number of Measurements to " << val << endl; -#endif - numMeasurement = val; - myPlot->setNumMeasurements(val); -} -//------------------------------------------------------------------------------------------------------------------------------------------------- - - void qTabMeasurement::setFileName(const QString& fName){ myDet->setFileName(fName.toAscii().data()); #ifdef VERBOSE @@ -302,13 +311,13 @@ void qTabMeasurement::startStopAcquisition(){ #ifdef VERBOSE cout << "Stopping Acquisition" << endl<< endl; #endif + emit StopSignal(); myDet->stopAcquisition(); progressTimer->stop(); btnStartStop->setText("Start"); btnStartStop->setIcon(*iconStart); btnStartStop->setChecked(false); Enable(1); - emit StopSignal(); } } @@ -342,7 +351,8 @@ void qTabMeasurement::SetCurrentMeasurement(int val){ void qTabMeasurement::UpdateProgress(){ - progressBar->setValue((int)(((currentMeasurement*100)+(myPlot->GetProgress()))/numMeasurement)); + //progressBar->setValue((int)(((currentMeasurement*100)+(myPlot->GetProgress()))/spinNumMeasurements->value())); + progressBar->setValue((int)myPlot->GetProgress()); lblProgressIndex->setText(QString::number(myDet->getFileIndex())); } @@ -350,12 +360,22 @@ void qTabMeasurement::UpdateProgress(){ //------------------------------------------------------------------------------------------------------------------------------------------------- +void qTabMeasurement::setNumMeasurements(int val){ + myDet->setTimer(slsDetectorDefs::MEASUREMENTS_NUMBER,val); +#ifdef VERBOSE + cout << "Setting Number of Measurements to " << (int)myDet->setTimer(slsDetectorDefs::MEASUREMENTS_NUMBER,-1) << endl; +#endif +} + + +//------------------------------------------------------------------------------------------------------------------------------------------------- + + void qTabMeasurement::setNumFrames(int val){ myDet->setTimer(slsDetectorDefs::FRAME_NUMBER,val); #ifdef VERBOSE cout << "Setting number of frames to " << (int)myDet->setTimer(slsDetectorDefs::FRAME_NUMBER,-1) << endl; #endif - } @@ -567,12 +587,12 @@ void qTabMeasurement::SetTimingMode(int mode){ } - if(mode!=None){//Number of Probes - if((myDet->getDetectorsType()==slsDetectorDefs::MYTHEN)&&(expertMode)){ - lblNumProbes->setEnabled(true); spinNumProbes->setEnabled(true); - } + //Number of Probes + if((expertMode)&&(myDet->getDetectorsType()==slsDetectorDefs::MYTHEN)){ + lblNumProbes->setEnabled(true); spinNumProbes->setEnabled(true); } + //To disconnect all the signals before changing their values DeInitialization(); @@ -703,6 +723,8 @@ void qTabMeasurement::EnableFileWrite(bool enable){ void qTabMeasurement::Refresh(){ + //Number of measurements + spinNumMeasurements->setValue((int)myDet->setTimer(slsDetectorDefs::MEASUREMENTS_NUMBER,-1)); //File Name dispFileName->setText(QString(myDet->getFileName().c_str())); //File Index