From f4bc255f2c4f7650dcbd0ece58c4cc0543eed238 Mon Sep 17 00:00:00 2001 From: Dhanya Thattil Date: Wed, 19 Jun 2019 15:01:57 +0200 Subject: [PATCH] WIP --- slsDetectorGui/include/qDrawPlot.h | 43 ++---- slsDetectorGui/src/qDrawPlot.cpp | 236 ++++++++++++++--------------- 2 files changed, 131 insertions(+), 148 deletions(-) diff --git a/slsDetectorGui/include/qDrawPlot.h b/slsDetectorGui/include/qDrawPlot.h index d1e4e22ae..2acbec855 100755 --- a/slsDetectorGui/include/qDrawPlot.h +++ b/slsDetectorGui/include/qDrawPlot.h @@ -316,53 +316,38 @@ void GainPlotSignal(bool); private: multiSlsDetector *myDet; slsDetectorDefs::detectorType detType; + SlsQt1DPlot* plot1D; -SlsQt2DPlotLayout* plot2D; QVector plot1DHists; +SlsQt2DPlotLayout* plot2D; + + static const int MAXCloneWindows = 50; qCloneWidget *cloneWidgets[MAXCloneWindows]; /** Widgets needed to set up plot*/ -QGroupBox *boxPlot; -QGridLayout *layout; -QGridLayout *plotLayout; +QGroupBox *boxPlot; +QGridLayout *layout; +QGridLayout *plotLayout; - - - -/**label with frame index for those with many frames per file*/ QLabel *histFrameIndexTitle; -/** Current Measurement */ + int currentMeasurement; -/** currentFrame */ int currentFrame; -/** variable to check if its the nth frame */ -int numFactor; -/** current Scan Division Level */ -int currentScanDivLevel; -/** current scan Value */ -double currentScanValue; -/** Number of Exposures */ -int number_of_exposures; -/** Number of Frames Per Measurement */ -int number_of_frames; -/** Duration between Exposures */ -double acquisitionPeriod; -/** Acquisition Time */ -double exposureTime; -/** Current file index*/ int currentFileIndex; -/** Current frame index*/ int currentFrameIndex; -/**variables for threads */ -/** */ +int numberofFrames; +double acquisitionPeriod; +double exposureTime; + volatile bool stop_signal; -/** */ + + pthread_mutex_t last_image_complete_mutex; /**variables for histograms */ diff --git a/slsDetectorGui/src/qDrawPlot.cpp b/slsDetectorGui/src/qDrawPlot.cpp index 8ef496de1..595ae5d3f 100755 --- a/slsDetectorGui/src/qDrawPlot.cpp +++ b/slsDetectorGui/src/qDrawPlot.cpp @@ -85,17 +85,17 @@ void qDrawPlot::SetupWidgetWindow() { currentMeasurement = 0; currentFrame = 0; - numFactor = 0; + currentScanDivLevel = 0; currentScanValue = 0; number_of_exposures = 0; - number_of_frames = 0; + numberofFrames = 0; acquisitionPeriod = 0; exposureTime = 0; currentFileIndex = 0; currentFrameIndex = 0; - stop_signal = 0; + stopSignal = 0; pthread_mutex_init(&last_image_complete_mutex, NULL); // Default titles- only for the initial picture @@ -442,7 +442,7 @@ void qDrawPlot::SaveAll(bool enable){saveAll = enable;}; void qDrawPlot::SetLines(bool enable){lines = enable;}; void qDrawPlot::SetMarkers(bool enable){markers = enable;}; -void qDrawPlot::StopAcquisition(){ stop_signal = true; }; +void qDrawPlot::StopAcquisition(){ stopSignal = true; }; const char* qDrawPlot::GetImageTitle() {return imageTitle.c_str();} @@ -502,14 +502,14 @@ void qDrawPlot::StartStopDaqToggle(bool stop_if_running) { int numTriggers = (isTriggerEnabled)*((int)myDet->setTimer(slsDetectorDefs::CYCLES_NUMBER,-1)); numFrames = ((numFrames==0)?1:numFrames); numTriggers = ((numTriggers==0)?1:numTriggers); - number_of_frames = numFrames * numTriggers; - std::cout << "\tNumber of Frames per Scan/Measurement:" << number_of_frames <<'\n'; + numberofFrames = numFrames * numTriggers; + std::cout << "\tNumber of Frames per Scan/Measurement:" << numberofFrames <<'\n'; //get #scansets for level 0 and level 1 int numScan0 = myDet->getScanSteps(0); numScan0 = ((numScan0==0)?1:numScan0); int numScan1 = myDet->getScanSteps(1); numScan1 = ((numScan1==0)?1:numScan1); int numPos=myDet->getPositions(); - number_of_exposures = number_of_frames * numScan0 * numScan1; + number_of_exposures = numberofFrames * numScan0 * numScan1; if(anglePlot) number_of_exposures = numScan0 * numScan1;// * numPos; std::cout << "\tNumber of Exposures Per Measurement:" << number_of_exposures <<'\n'; */ @@ -521,8 +521,7 @@ void qDrawPlot::StartStopDaqToggle(bool stop_if_running) { acquisitionPeriod = ((double)(myDet->setTimer(slsDetectorDefs::FRAME_PERIOD, -1)) * 1E-9); std::cout << "\tAcquisition Period:" << std::setprecision(10) << acquisitionPeriod << '\n'; std::cout << "\tFile Index:" << myDet->getFileIndex() << '\n'; - //to take the first data if frameFactor - numFactor = 0; + //for save automatically, saveError = false; @@ -588,7 +587,7 @@ bool qDrawPlot::StartOrStopThread(bool start) { //stop part, before start or restart if (gui_acquisition_thread_running) { std::cout << "Stopping current acquisition thread ...." << '\n'; - stop_signal = 1; //sorta useless right now + stopSignal = 1; //sorta useless right now gui_acquisition_thread_running = 0; } @@ -628,127 +627,127 @@ bool qDrawPlot::StartOrStopThread(bool start) { -// void qDrawPlot::SetScanArgument(int scanArg){ -// #ifdef VERYVERBOSE -// std::cout << "SetScanArgument function:" << scanArg << " running:" << running <<'\n'; -// #endif -// scanArgument = scanArg; +void qDrawPlot::SetScanArgument(int scanArg){ +#ifdef VERYVERBOSE + std::cout << "SetScanArgument function:" << scanArg << " running:" << running <<'\n'; +#endif + scanArgument = scanArg; -// LockLastImageArray(); + LockLastImageArray(); -// if(plot_in_scope==1) Clear1DPlot(); + if(plot_in_scope==1) Clear1DPlot(); -// // Number of Exposures - must be calculated here to get npixelsy for allframes/frameindex scans -// int numFrames = (isFrameEnabled)*((int)myDet->setTimer(slsDetectorDefs::FRAME_NUMBER,-1)); -// int numTriggers = (isTriggerEnabled)*((int)myDet->setTimer(slsDetectorDefs::CYCLES_NUMBER,-1)); -// int numStoragecells = 0; -// if (detType == slsDetectorDefs::JUNGFRAU) -// numStoragecells = (int)myDet->setTimer(slsDetectorDefs::STORAGE_CELL_NUMBER, -1); -// numFrames = ((numFrames==0)?1:numFrames); -// numTriggers = ((numTriggers==0)?1:numTriggers); -// numStoragecells = ((numStoragecells<=0)?1:numStoragecells+1); -// number_of_frames = numFrames * numTriggers * numStoragecells; -// std::cout << "\tNumber of Frames per Scan/Measurement:" << number_of_frames <<'\n'; -// //get #scansets for level 0 and level 1 -// int numScan0 = myDet->getScanSteps(0); numScan0 = ((numScan0==0)?1:numScan0); -// int numScan1 = myDet->getScanSteps(1); numScan1 = ((numScan1==0)?1:numScan1); -// //int numPos=myDet->getPositions(); + // Number of Exposures - must be calculated here to get npixelsy for allframes/frameindex scans + int numFrames = (isFrameEnabled)*((int)myDet->setTimer(slsDetectorDefs::FRAME_NUMBER,-1)); + int numTriggers = (isTriggerEnabled)*((int)myDet->setTimer(slsDetectorDefs::CYCLES_NUMBER,-1)); + int numStoragecells = 0; + if (detType == slsDetectorDefs::JUNGFRAU) + numStoragecells = (int)myDet->setTimer(slsDetectorDefs::STORAGE_CELL_NUMBER, -1); + numFrames = ((numFrames==0)?1:numFrames); + numTriggers = ((numTriggers==0)?1:numTriggers); + numStoragecells = ((numStoragecells<=0)?1:numStoragecells+1); + numberofFrames = numFrames * numTriggers * numStoragecells; + std::cout << "\tNumber of Frames per Scan/Measurement:" << numberofFrames <<'\n'; + //get #scansets for level 0 and level 1 + int numScan0 = myDet->getScanSteps(0); numScan0 = ((numScan0==0)?1:numScan0); + int numScan1 = myDet->getScanSteps(1); numScan1 = ((numScan1==0)?1:numScan1); + //int numPos=myDet->getPositions(); -// number_of_exposures = number_of_frames * numScan0 * numScan1; -// if(anglePlot) number_of_exposures = numScan0 * numScan1;// * numPos; -// std::cout << "\tNumber of Exposures Per Measurement:" << number_of_exposures <<'\n'; + number_of_exposures = numberofFrames * numScan0 * numScan1; + if(anglePlot) number_of_exposures = numScan0 * numScan1;// * numPos; + std::cout << "\tNumber of Exposures Per Measurement:" << number_of_exposures <<'\n'; -// maxPixelsY = 0; -// minPixelsY = 0; -// nPixelsX = myDet->getTotalNumberOfChannelsInclGapPixels(slsDetectorDefs::X); -// nPixelsY = myDet->getTotalNumberOfChannelsInclGapPixels(slsDetectorDefs::Y); -// if (detType == slsDetectorDefs::MOENCH) { -// npixelsy_jctb = (myDet->setTimer(slsDetectorDefs::SAMPLES, -1) * 2)/25; // for moench 03 -// nPixelsX = npixelsx_jctb; -// nPixelsY = npixelsy_jctb; -// } + maxPixelsY = 0; + minPixelsY = 0; + nPixelsX = myDet->getTotalNumberOfChannelsInclGapPixels(slsDetectorDefs::X); + nPixelsY = myDet->getTotalNumberOfChannelsInclGapPixels(slsDetectorDefs::Y); + if (detType == slsDetectorDefs::MOENCH) { + npixelsy_jctb = (myDet->setTimer(slsDetectorDefs::SAMPLES, -1) * 2)/25; // for moench 03 + nPixelsX = npixelsx_jctb; + nPixelsY = npixelsy_jctb; + } -// //cannot do this in between measurements , so update instantly -// if(scanArgument==qDefs::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); + //cannot do this in between measurements , so update instantly + if(scanArgument==qDefs::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; -// }else if(scanArgument==qDefs::Level1) { -// //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; + }else if(scanArgument==qDefs::Level1) { + //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; -// }else if(scanArgument==qDefs::AllFrames) -// nPixelsY = number_of_exposures; -// else if(scanArgument==qDefs::FileIndex) -// nPixelsY = number_of_frames; + maxPixelsY = values[numSteps-1]; + minPixelsY = values[0]; + nPixelsY = numSteps; + }else if(scanArgument==qDefs::AllFrames) + nPixelsY = number_of_exposures; + else if(scanArgument==qDefs::FileIndex) + nPixelsY = numberofFrames; -// if(minPixelsY>maxPixelsY){ -// double temp = minPixelsY; -// minPixelsY = maxPixelsY; -// maxPixelsY = temp; -// backwardScanPlot = true; -// }else backwardScanPlot = false; + if(minPixelsY>maxPixelsY){ + double temp = minPixelsY; + minPixelsY = maxPixelsY; + maxPixelsY = temp; + backwardScanPlot = true; + }else backwardScanPlot = false; -// //1d -// if(histXAxis) delete [] histXAxis; histXAxis = new double [nPixelsX]; + //1d + if(histXAxis) delete [] histXAxis; histXAxis = new double [nPixelsX]; -// if(histYAxis[0]) delete [] histYAxis[0]; histYAxis[0] = new double [nPixelsX]; + if(histYAxis[0]) delete [] histYAxis[0]; histYAxis[0] = new double [nPixelsX]; -// //2d -// if(lastImageArray) delete [] lastImageArray; lastImageArray = new double[nPixelsY*nPixelsX]; -// if(gainImageArray) delete [] gainImageArray; gainImageArray = new double[nPixelsY*nPixelsX]; + //2d + if(lastImageArray) delete [] lastImageArray; lastImageArray = new double[nPixelsY*nPixelsX]; + if(gainImageArray) delete [] gainImageArray; gainImageArray = new double[nPixelsY*nPixelsX]; -// //initializing 1d x axis -// for(unsigned int px=0;pxdynamicRange << '\n'; std::cout << "fileIndex " << data->fileIndex << '\n'; #endif - if (!stop_signal) { + if (!stopSignal) { //set progress progress = (int)data->progressIndex; @@ -1286,11 +1284,11 @@ int qDrawPlot::AcquisitionFinished(double currentProgress, int detectorStatus) { std::cout << status.toAscii().constData() << " and progress " << currentProgress << '\n'; #endif //error or stopped - if ((stop_signal) || (detectorStatus == slsDetectorDefs::ERROR)) { + if ((stopSignal) || (detectorStatus == slsDetectorDefs::ERROR)) { #ifdef VERBOSE std::cout << "Error in Acquisition\n\n"; #endif - //stop_signal = 1;//just to be sure + //stopSignal = 1;//just to be sure emit AcquisitionErrorSignal(status); } #ifdef VERBOSE