This commit is contained in:
2019-06-19 15:01:18 +02:00
parent 332e83d43c
commit d2280b4414
2 changed files with 236 additions and 209 deletions

View File

@ -1,23 +1,12 @@
/*
* qDrawPlot.h
*
* Created on: May 7, 2012
* Author: Dhanya Maliakal
*/
#ifndef QDRAWPLOT_H
#define QDRAWPLOT_H
#pragma once
#include "qDefs.h"
/** Project Class Headers */
class multiSlsDetector;
#include "detectorData.h"
/** Qt Project Class Headers */
#include "SlsQt1DPlot.h"
#include "SlsQt2DPlotLayout.h"
class detectorData;
class SlsQt1DPlot;
class SlsQt2DPlotLayout;
class qCloneWidget;
/** Qt Include Headers */
#include <QWidget>
#include <QGridLayout>
#include <QGroupBox>
@ -33,7 +22,7 @@ class qCloneWidget;
#include <qwt_column_symbol.h>
#include <qpen.h>
/** C++ Include Headers */
#define MAX_1DPLOTS 10
@ -54,58 +43,30 @@ public:
/** Destructor */
~qDrawPlot();
/**is an acquisition running , need it to prevent measurement tab
* from being refreshed when switching tabs during acquisition */
bool isRunning(){return running;};
/** gets the progress of acquisition to the measurement tab*/
int GetProgress(){return progress;};
/** gets the file index to the measurement tab*/
int GetFileIndex(){return currentFileIndex;};
/** gets the frame index to the measurement tab*/
int GetFrameIndex(){return currentFrameIndex;};
/** sets file write enable , if not enabled,
* file index wont increase and so you need secondary titles to differentitate between plots*/
void SetFileWrite(bool enable){fileSaveEnable = enable;};
/** sets plot Title prefix*/
void SetPlotTitlePrefix(QString title) {plotTitle_prefix = title;}
void SetXAxisTitle(QString title) {
if(plot_in_scope==1) {
histXAxisTitle = title;
} else {
imageXAxisTitle = title;
}
}
void SetYAxisTitle(QString title) {
if(plot_in_scope==1) {
histYAxisTitle = title;
} else {
imageYAxisTitle = title;
}
}
/** sets 2D Z Axis Title */
void SetZAxisTitle(QString title) {imageZAxisTitle = title;}
/** Disables zoom if any of the axes range are checked and fixed with a value */
bool isRunning();
int GetProgress();
int GetFileIndex();
int GetFrameIndex();
void SetFileWrite(bool enable);
void SetPlotTitlePrefix(QString title);
void SetXAxisTitle(QString title);
void SetYAxisTitle(QString title);
void SetZAxisTitle(QString title);
void DisableZoom(bool disable);
/** Enables plot from the plot tab*/
void EnablePlot(bool enable);
/** Enable angle plot */
void EnableAnglePlot(bool enable){anglePlot = enable;};
void EnableAnglePlot(bool enable);
/** Its a reminder to update plot to set the xy range
* This is done only when there is a plot to update */
void SetXYRange(bool changed){XYRangeChanged = changed;};
void SetXYRange(bool changed);
/**Sets the min/max for x/y
* @param val is the value to be set
* @param xy is xmin,xmax,ymin or ymax */
void SetXYRangeValues(double val,qDefs::range xy){XYRangeValues[xy]=val;};
void SetXYRangeValues(double val,qDefs::range xy);
/**Sets if min/max for x/y is enabled
* @param changed is if this has been changed
* @param xy is xmin,xmax,ymin or ymax */
void IsXYRangeValues(bool changed,qDefs::range xy){IsXYRange[xy]=changed;};
void IsXYRangeValues(bool changed,qDefs::range xy);
/** Set Plot timer - between plots in ms*/
void SetPlotTimer(double time);
@ -121,10 +82,10 @@ public:
void StartStopDaqToggle(bool stop_if_running=0);
/** Set frame enabled
* @param enable enable*/
void setFrameEnabled(bool enable){isFrameEnabled = enable;};
void setFrameEnabled(bool enable);
/** Set trigger enabled
* @param enable enable */
void setTriggerEnabled(bool enable){isTriggerEnabled = enable;};
void setTriggerEnabled(bool enable);
/** Updates the trimbit plot
* @param fromDetector is true if the trimbits should be loaded from detector
@ -136,12 +97,12 @@ public:
/** This is set once client initiates start/stop acquisition
* and this is reset when the gui really starts/stops- to know when to return
*/
void SetClientInitiated(){clientInitiated = true;};
void SetClientInitiated();
/** Get client intiated variable. This is set once client initiates start/stop acquisition
* and this is reset when the gui really starts/stops- to know when to return
*/
bool GetClientInitiated(){return clientInitiated;};
bool GetClientInitiated();
/** Update all ranges, interpolate etc after cloning
* parameters are if they are checked or not
@ -155,22 +116,22 @@ public:
void SetHistogram(bool enable,int histArg, int min=0, int max=0, double size=0){histogram = enable;histogramArgument = histArg; histFrom=min;histTo=max;histSize=size;};
/** Get X Minimum value from plot */
double GetXMinimum() { if(plot_in_scope==1) return plot1D->GetXMinimum(); else return plot2D->GetPlot()->GetXMinimum();};
double GetXMinimum();
/** Get X Maximum value from plot */
double GetXMaximum() { if(plot_in_scope==1) return plot1D->GetXMaximum(); else return plot2D->GetPlot()->GetXMaximum();};
double GetXMaximum();
/** Get Y Minimum value from plot */
double GetYMinimum() { if(plot_in_scope==1) return plot1D->GetYMinimum(); else return plot2D->GetPlot()->GetYMinimum();};
double GetYMinimum();
/** Get Y Maximum value from plot */
double GetYMaximum() { if(plot_in_scope==1) return plot1D->GetYMaximum(); else return plot2D->GetPlot()->GetYMaximum();};
double GetYMaximum();
public slots:
/** To select 1D or 2D plot
@param i is 1 for 1D, else 2D plot */
void SelectPlot(int i=2);
/** To select 1D plot */
void Select1DPlot() {SelectPlot(1);}
void Select1DPlot();
/** To select 2D plot */
void Select2DPlot() {SelectPlot(2);}
void Select2DPlot();
/** To clear plot */
void Clear1DPlot();
/** Creates a clone of the plot */
@ -182,17 +143,17 @@ void SaveClones();
/** To Save plot */
void SavePlot();
/** Save all plots **/
void SaveAll(bool enable){saveAll = enable;};
void SaveAll(bool enable);
/** Sets persistency from plot tab */
void SetPersistency(int val);
/** sets style of plot to lines*/
void SetLines(bool enable){lines = enable;};
void SetLines(bool enable);
/** sets markers */
void SetMarkers(bool enable){markers = enable;};
void SetMarkers(bool enable);
/** sets the scan argument to prepare the plot*/
// void SetScanArgument(int scanArg);
/** sets stop_signal to true */
void StopAcquisition(){ stop_signal = true; };
void StopAcquisition();
/** Set/unset pedestal */
void SetPedestal(bool enable);
/** Recalculate Pedestal */
@ -216,21 +177,21 @@ void SetupWidgetWindow();
/** Gets the image title */
const char* GetImageTitle() {return imageTitle.c_str();}
const char* GetImageTitle();
/** Gets the hist title for a 1D plot */
const char* GetHistTitle(int i) {return (i>=0&&i<MAX_1DPLOTS) ? histTitle[i].c_str():0;} //int for hist number
const char* GetHistTitle(int i);
/** Gets the y axis value for the hist in 1D plot */
double* GetHistYAxis(int i) {return (i>=0&&i<MAX_1DPLOTS) ? histYAxis[i]:0;} //int for hist number
double* GetHistYAxis(int i);
/** Locks the image to update plot */
int LockLastImageArray() {return pthread_mutex_lock(&last_image_complete_mutex); }
int LockLastImageArray();
/** Unocks the image to update plot */
int UnlockLastImageArray() {return pthread_mutex_unlock(&last_image_complete_mutex);}
int UnlockLastImageArray();
/** Starts the acquisition */
int StartDaqForGui() {return StartOrStopThread(1) ? 1:0;}
int StartDaqForGui();
/** Stops the acquisition */
int StopDaqForGui() {return StartOrStopThread(0) ? 0:1;}
int StopDaqForGui();
/** Starts/stops Acquisition Thread */
bool StartOrStopThread(bool start);
@ -284,14 +245,7 @@ static int GetProgressCallBack(double currentProgress, void *this_pointer);
/** Saves all the plots. All sets saveError to true if not saved.*/
void SavePlotAutomatic();
/** Sets the style of the 1d plot */
void SetStyle(SlsQtH1D* h){
if(lines) h->setStyle(QwtPlotCurve::Lines); else h->setStyle(QwtPlotCurve::Dots);
#if QWT_VERSION<0x060000
if(markers) h->setSymbol(*marker); else h->setSymbol(*noMarker);
#else
if(markers) h->setSymbol(marker); else h->setSymbol(noMarker);
#endif
};
void SetStyle(SlsQtH1D* h);
/** Find Statistics
@ -330,7 +284,7 @@ void CloneCloseEvent(int id);
/**After a pause, the gui is allowed to collect the data
* this is called when it is over
* */
void UpdatePause(){data_pause_over=true;};
void UpdatePause();
/** Shows the first save error message while automatic saving
* @param fileName file name of the first file that it tried to save.
* */
@ -345,39 +299,38 @@ void ShowAcquisitionErrorMessage(QString status);
*/
void EnableGainPlot(bool e);
signals:
void UpdatingPlotFinished();
void InterpolateSignal(bool);
void ContourSignal(bool);
void LogzSignal(bool);
void LogySignal(bool);
void ResetZMinZMaxSignal(bool,bool,double,double);
void SetCurrentMeasurementSignal(int);
void saveErrorSignal(QString);
void AcquisitionErrorSignal(QString);
void UpdatePlotSignal();
void GainPlotSignal(bool);
private:
/** The sls detector object */
multiSlsDetector *myDet;
/** detectot type */
slsDetectorDefs::detectorType detType;
SlsQt1DPlot* plot1D;
SlsQt2DPlotLayout* plot2D;
QVector<SlsQtH1D*> plot1DHists;
/** Widgets needed to plot the clone */
/** Max Number of Clone Windows */
static const int MAXCloneWindows = 50;
/** Array of clone window widget pointers */
qCloneWidget *winClone[MAXCloneWindows];
qCloneWidget *cloneWidgets[MAXCloneWindows];
/** Widgets needed to set up plot*/
QGroupBox *boxPlot;
QGridLayout *layout;
QGridLayout *plotLayout;
/** Timer to update plot */
QTimer* plot_update_timer;
/** Timer to pause getting data from client */
QTimer* data_pause_timer;
bool data_pause_over;
/** 1D object */
SlsQt1DPlot* plot1D;
/** 2D object */
SlsQt2DPlotLayout* plot2D;
/** vector of 1D hist values */
QVector<SlsQtH1D*> plot1D_hists;
/**label with frame index for those with many frames per file*/
QLabel *histFrameIndexTitle;
@ -610,20 +563,5 @@ bool gainDataEnable;
const static int npixelsx_jctb = 400;
int npixelsy_jctb;
signals:
void UpdatingPlotFinished();
void InterpolateSignal(bool);
void ContourSignal(bool);
void LogzSignal(bool);
void LogySignal(bool);
void ResetZMinZMaxSignal(bool,bool,double,double);
void SetCurrentMeasurementSignal(int);
void saveErrorSignal(QString);
void AcquisitionErrorSignal(QString);
void UpdatePlotSignal();
void GainPlotSignal(bool);
};
#endif /* QDRAWPLOT_H */

View File

@ -1,20 +1,23 @@
// Qt Project Class Headers
#include "qDrawPlot.h"
#include "qCloneWidget.h"
#include "slsDetector.h"
// Project Class Headers
#include "multiSlsDetector.h"
#include "slsDetector.h"
// #include "postProcessing.h"
// Qt Include Headers
#include "qDrawPlot.h"
#include "detectorData.h"
#include "SlsQt1DPlot.h"
#include "SlsQt2DPlotLayout.h"
#include "qCloneWidget.h"
#include <QFileDialog>
#include <QFont>
#include <QImage>
#include <QPainter>
//#include "qwt_double_interval.h"
#include "qwt_series_data.h"
// C++ Include Headers
#include <iomanip>
#include <iostream>
#include <sstream>
@ -22,22 +25,22 @@
//-------------------------------------------------------------------------------------------------------------------------------------------------
qDrawPlot::qDrawPlot(QWidget *parent, multiSlsDetector *detector) : QWidget(parent), myDet(detector), plot1D_hists(0) {
qDrawPlot::qDrawPlot(QWidget *parent, multiSlsDetector *detector) : QWidget(parent), myDet(detector), plot1DHists(0) {
SetupWidgetWindow();
Initialization();
StartStopDaqToggle(); //as default
}
//-------------------------------------------------------------------------------------------------------------------------------------------------
qDrawPlot::~qDrawPlot() {
// Clear plot
Clear1DPlot();
for (QVector<SlsQtH1D *>::iterator h = plot1D_hists.begin(); h != plot1D_hists.end(); ++h)
for (QVector<SlsQtH1D *>::iterator h = plot1DHists.begin(); h != plot1DHists.end(); ++h)
delete *h;
plot1D_hists.clear();
plot1DHists.clear();
if (lastImageArray)
delete[] lastImageArray;
lastImageArray = 0;
@ -48,13 +51,13 @@ qDrawPlot::~qDrawPlot() {
delete myDet;
myDet = 0;
for (int i = 0; i < MAXCloneWindows; ++i)
if (winClone[i]) {
delete winClone[i];
winClone[i] = NULL;
if (cloneWidgets[i]) {
delete cloneWidgets[i];
cloneWidgets[i] = NULL;
}
}
//-------------------------------------------------------------------------------------------------------------------------------------------------
void qDrawPlot::SetupWidgetWindow() {
#ifdef VERBOSE
@ -230,7 +233,7 @@ void qDrawPlot::SetupWidgetWindow() {
// clone
for (int i = 0; i < MAXCloneWindows; ++i)
winClone[i] = 0;
cloneWidgets[i] = 0;
// Setting up window
setFont(QFont("Sans Serif", 9));
@ -244,8 +247,6 @@ void qDrawPlot::SetupWidgetWindow() {
boxPlot->setAlignment(Qt::AlignHCenter);
boxPlot->setFont(QFont("Sans Serif", 11, QFont::Normal));
boxPlot->setTitle("Sample Plot");
data_pause_timer = new QTimer(this);
connect(data_pause_timer, SIGNAL(timeout()), this, SLOT(UpdatePause()));
//display statistics
displayStatistics = false;
@ -308,7 +309,7 @@ void qDrawPlot::SetupWidgetWindow() {
Clear1DPlot();
plot1D->SetXTitle("X Axis");
plot1D->SetYTitle("Y Axis");
plot1D_hists.append(h = new SlsQtH1D("", histNBins, histXAxis, histYAxis[0]));
plot1DHists.append(h = new SlsQtH1D("", histNBins, histXAxis, histYAxis[0]));
h->SetLineColor(0);
SetStyle(h);
h->Attach(plot1D);
@ -365,7 +366,7 @@ void qDrawPlot::SetupWidgetWindow() {
qDefs::checkErrorMessage(myDet, "qDrawPlot::SetupWidgetWindow");
}
//-------------------------------------------------------------------------------------------------------------------------------------------------
void qDrawPlot::Initialization() {
connect(this, SIGNAL(UpdatePlotSignal()), this, SLOT(UpdatePlot()));
@ -380,7 +381,95 @@ void qDrawPlot::Initialization() {
connect(this, SIGNAL(GainPlotSignal(bool)), this, SLOT(EnableGainPlot(bool)));
}
//-------------------------------------------------------------------------------------------------------------------------------------------------
bool qDrawPlot::isRunning(){return running;};
int qDrawPlot::GetProgress(){return progress;};
int qDrawPlot::GetFileIndex(){return currentFileIndex;};
int qDrawPlot::GetFrameIndex(){return currentFrameIndex;};
void qDrawPlot::SetFileWrite(bool enable){fileSaveEnable = enable;};
void qDrawPlot::SetPlotTitlePrefix(QString title) {plotTitle_prefix = title;}
void qDrawPlot::SetXAxisTitle(QString title) {
if(plot_in_scope==1) {
histXAxisTitle = title;
} else {
imageXAxisTitle = title;
}
}
void qDrawPlot::SetYAxisTitle(QString title) {
if(plot_in_scope==1) {
histYAxisTitle = title;
} else {
imageYAxisTitle = title;
}
}
void qDrawPlot::SetZAxisTitle(QString title) {imageZAxisTitle = title;}
void qDrawPlot::EnableAnglePlot(bool enable){anglePlot = enable;};
void qDrawPlot::SetXYRange(bool changed){XYRangeChanged = changed;};
void qDrawPlot::SetXYRangeValues(double val,qDefs::range xy){XYRangeValues[xy]=val;};
void qDrawPlot::IsXYRangeValues(bool changed,qDefs::range xy){IsXYRange[xy]=changed;};
void qDrawPlot::setFrameEnabled(bool enable){isFrameEnabled = enable;};
void qDrawPlot::setTriggerEnabled(bool enable){isTriggerEnabled = enable;};
void qDrawPlot::SetClientInitiated(){clientInitiated = true;};
bool qDrawPlot::GetClientInitiated(){return clientInitiated;};
double qDrawPlot::GetXMinimum() { if(plot_in_scope==1) return plot1D->GetXMinimum(); else return plot2D->GetPlot()->GetXMinimum();};
double qDrawPlot::GetXMaximum() { if(plot_in_scope==1) return plot1D->GetXMaximum(); else return plot2D->GetPlot()->GetXMaximum();};
double qDrawPlot::GetYMinimum() { if(plot_in_scope==1) return plot1D->GetYMinimum(); else return plot2D->GetPlot()->GetYMinimum();};
double qDrawPlot::GetYMaximum() { if(plot_in_scope==1) return plot1D->GetYMaximum(); else return plot2D->GetPlot()->GetYMaximum();};
void qDrawPlot::Select1DPlot() {SelectPlot(1);}
void qDrawPlot::Select2DPlot() {SelectPlot(2);}
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; };
const char* qDrawPlot::GetImageTitle() {return imageTitle.c_str();}
const char* qDrawPlot::GetHistTitle(int i) {return (i>=0&&i<MAX_1DPLOTS) ? histTitle[i].c_str():0;} //int for hist number
double* qDrawPlot::GetHistYAxis(int i) {return (i>=0&&i<MAX_1DPLOTS) ? histYAxis[i]:0;} //int for hist number
int qDrawPlot::LockLastImageArray() {return pthread_mutex_lock(&last_image_complete_mutex); }
int qDrawPlot::UnlockLastImageArray() {return pthread_mutex_unlock(&last_image_complete_mutex);}
int qDrawPlot::StartDaqForGui() {return StartOrStopThread(1) ? 1:0;}
int qDrawPlot::StopDaqForGui() {return StartOrStopThread(0) ? 0:1;}
void qDrawPlot::SetStyle(SlsQtH1D* h){
if(lines) h->setStyle(QwtPlotCurve::Lines); else h->setStyle(QwtPlotCurve::Dots);
#if QWT_VERSION<0x060000
if(markers) h->setSymbol(*marker); else h->setSymbol(*noMarker);
#else
if(markers) h->setSymbol(marker); else h->setSymbol(noMarker);
#endif
};
void qDrawPlot::UpdatePause(){data_pause_over=true;};
void qDrawPlot::SetCallBacks(bool enable) {
if (enable) {
// Setting the callback function to get data from detector class
@ -457,7 +546,7 @@ void qDrawPlot::StartStopDaqToggle(bool stop_if_running) {
clientInitiated = false;
}
//-------------------------------------------------------------------------------------------------------------------------------------------------
void qDrawPlot::StartDaq(bool start) {
if (start) {
@ -474,7 +563,7 @@ void qDrawPlot::StartDaq(bool start) {
}
}
//-------------------------------------------------------------------------------------------------------------------------------------------------
int qDrawPlot::ResetDaqForGui() {
if (!StopDaqForGui())
@ -484,7 +573,7 @@ int qDrawPlot::ResetDaqForGui() {
return 1;
}
//-------------------------------------------------------------------------------------------------------------------------------------------------
bool qDrawPlot::StartOrStopThread(bool start) {
#ifdef VERYVERBOSE
@ -537,7 +626,7 @@ bool qDrawPlot::StartOrStopThread(bool start) {
return gui_acquisition_thread_running;
}
//-------------------------------------------------------------------------------------------------------------------------------------------------
// void qDrawPlot::SetScanArgument(int scanArg){
// #ifdef VERYVERBOSE
@ -661,7 +750,7 @@ bool qDrawPlot::StartOrStopThread(bool start) {
// }
//-------------------------------------------------------------------------------------------------------------------------------------------------
void qDrawPlot::SetupMeasurement() {
#ifdef VERYVERBOSE
@ -765,7 +854,7 @@ void qDrawPlot::SetupMeasurement() {
#endif
}
//-------------------------------------------------------------------------------------------------------------------------------------------------
void *qDrawPlot::DataStartAcquireThread(void *this_pointer) {
// stream data from receiver to the gui
@ -789,14 +878,14 @@ void *qDrawPlot::DataStartAcquireThread(void *this_pointer) {
return this_pointer;
}
//-------------------------------------------------------------------------------------------------------------------------------------------------
int qDrawPlot::GetDataCallBack(detectorData *data, int fIndex, int subIndex, void *this_pointer) {
((qDrawPlot *)this_pointer)->GetData(data, fIndex, subIndex);
return 0;
}
//-------------------------------------------------------------------------------------------------------------------------------------------------
int qDrawPlot::GetData(detectorData *data, int fIndex, int subIndex) {
#ifdef VERYVERBOSE
@ -1176,7 +1265,7 @@ int qDrawPlot::GetData(detectorData *data, int fIndex, int subIndex) {
return 0;
}
//-------------------------------------------------------------------------------------------------------------------------------------------------
int qDrawPlot::GetAcquisitionFinishedCallBack(double currentProgress, int detectorStatus, void *this_pointer) {
((qDrawPlot *)this_pointer)->AcquisitionFinished(currentProgress, detectorStatus);
@ -1186,7 +1275,7 @@ int qDrawPlot::GetAcquisitionFinishedCallBack(double currentProgress, int detect
return 0;
}
//-------------------------------------------------------------------------------------------------------------------------------------------------
int qDrawPlot::AcquisitionFinished(double currentProgress, int detectorStatus) {
#ifdef VERBOSE
@ -1231,14 +1320,14 @@ int qDrawPlot::AcquisitionFinished(double currentProgress, int detectorStatus) {
return 0;
}
//-------------------------------------------------------------------------------------------------------------------------------------------------
int qDrawPlot::GetProgressCallBack(double currentProgress, void *this_pointer) {
((qDrawPlot *)this_pointer)->progress = currentProgress;
return 0;
}
//-------------------------------------------------------------------------------------------------------------------------------------------------
void qDrawPlot::ShowAcquisitionErrorMessage(QString status) {
if (!alreadyDisplayed) {
@ -1250,14 +1339,14 @@ void qDrawPlot::ShowAcquisitionErrorMessage(QString status) {
}
}
//-------------------------------------------------------------------------------------------------------------------------------------------------
int qDrawPlot::GetMeasurementFinishedCallBack(int currentMeasurementIndex, int fileIndex, void *this_pointer) {
((qDrawPlot *)this_pointer)->MeasurementFinished(currentMeasurementIndex, fileIndex);
return 0;
}
//-------------------------------------------------------------------------------------------------------------------------------------------------
int qDrawPlot::MeasurementFinished(int currentMeasurementIndex, int fileIndex) {
#ifdef VERBOSE
@ -1281,7 +1370,7 @@ int qDrawPlot::MeasurementFinished(int currentMeasurementIndex, int fileIndex) {
return 0;
}
//-------------------------------------------------------------------------------------------------------------------------------------------------
void qDrawPlot::SelectPlot(int i) { //1 for 1D otherwise 2D
if (i == 1) {
@ -1308,10 +1397,10 @@ void qDrawPlot::SelectPlot(int i) { //1 for 1D otherwise 2D
}
}
//-------------------------------------------------------------------------------------------------------------------------------------------------
void qDrawPlot::Clear1DPlot() {
for (QVector<SlsQtH1D *>::iterator h = plot1D_hists.begin(); h != plot1D_hists.end(); ++h) {
for (QVector<SlsQtH1D *>::iterator h = plot1DHists.begin(); h != plot1DHists.end(); ++h) {
(*h)->Detach(plot1D);
//do not delete *h or h.
}
@ -1319,7 +1408,7 @@ void qDrawPlot::Clear1DPlot() {
plotHistogram->detach();
}
//-------------------------------------------------------------------------------------------------------------------------------------------------
void qDrawPlot::UpdatePlot() {
#ifdef VERYVERBOSE
@ -1361,14 +1450,14 @@ void qDrawPlot::UpdatePlot() {
else {
for (int hist_num = 0; hist_num < (int)nHists; ++hist_num) {
SlsQtH1D *h;
if (hist_num + 1 > plot1D_hists.size()) {
if (hist_num + 1 > plot1DHists.size()) {
if (anglePlot)
plot1D_hists.append(h = new SlsQtH1D("", histNBins, histXAngleAxis, histYAngleAxis));
plot1DHists.append(h = new SlsQtH1D("", histNBins, histXAngleAxis, histYAngleAxis));
else
plot1D_hists.append(h = new SlsQtH1D("", histNBins, histXAxis, GetHistYAxis(hist_num)));
plot1DHists.append(h = new SlsQtH1D("", histNBins, histXAxis, GetHistYAxis(hist_num)));
h->SetLineColor(hist_num);
} else {
h = plot1D_hists.at(hist_num);
h = plot1DHists.at(hist_num);
if (anglePlot)
h->SetData(histNBins, histXAngleAxis, histYAngleAxis);
else
@ -1490,7 +1579,7 @@ void qDrawPlot::UpdatePlot() {
#endif
}
//-------------------------------------------------------------------------------------------------------------------------------------------------
void qDrawPlot::ClonePlot() {
int i;
@ -1498,7 +1587,7 @@ void qDrawPlot::ClonePlot() {
//check for space for more clone widget references
bool found = false;
for (i = 0; i < MAXCloneWindows; ++i)
if (!winClone[i]) {
if (!cloneWidgets[i]) {
found = true;
break;
}
@ -1521,17 +1610,17 @@ void qDrawPlot::ClonePlot() {
// create clone & copy data
if (plot_in_scope == 1) {
winClone[i] = new qCloneWidget(this, i, boxPlot->title(), histXAxisTitle, histYAxisTitle, "",
cloneWidgets[i] = new qCloneWidget(this, i, boxPlot->title(), histXAxisTitle, histYAxisTitle, "",
(int)plot_in_scope, sFilePath, displayStatistics, lblMinDisp->text(), lblMaxDisp->text(), lblSumDisp->text());
if (!anglePlot)
winClone[i]->SetCloneHists((int)nHists, histNBins, histXAxis, histYAxis, histTitle, lines, markers);
cloneWidgets[i]->SetCloneHists((int)nHists, histNBins, histXAxis, histYAxis, histTitle, lines, markers);
else
winClone[i]->SetCloneHists((int)nHists, histNBins, histXAngleAxis, histYAngleAxis, histTitle, lines, markers);
cloneWidgets[i]->SetCloneHists((int)nHists, histNBins, histXAngleAxis, histYAngleAxis, histTitle, lines, markers);
} else {
winClone[i] = new qCloneWidget(this, i, boxPlot->title(), imageXAxisTitle, imageYAxisTitle, imageZAxisTitle,
cloneWidgets[i] = new qCloneWidget(this, i, boxPlot->title(), imageXAxisTitle, imageYAxisTitle, imageZAxisTitle,
(int)plot_in_scope, sFilePath, displayStatistics, lblMinDisp->text(), lblMaxDisp->text(), lblSumDisp->text());
winClone[i]->SetCloneHists2D(nPixelsX, -0.5, nPixelsX - 0.5, nPixelsY, startPixel, endPixel, lastImageArray);
cloneWidgets[i]->SetCloneHists2D(nPixelsX, -0.5, nPixelsX - 0.5, nPixelsY, startPixel, endPixel, lastImageArray);
}
// update range
@ -1542,25 +1631,25 @@ void qDrawPlot::ClonePlot() {
break;
}
if (found)
winClone[i]->SetRange(IsXYRange, XYRangeValues);
cloneWidgets[i]->SetRange(IsXYRange, XYRangeValues);
UnlockLastImageArray();
winClone[i]->show();
cloneWidgets[i]->show();
// to remember which all clone widgets were closed
connect(winClone[i], SIGNAL(CloneClosedSignal(int)), this, SLOT(CloneCloseEvent(int)));
connect(cloneWidgets[i], SIGNAL(CloneClosedSignal(int)), this, SLOT(CloneCloseEvent(int)));
}
//-------------------------------------------------------------------------------------------------------------------------------------------------
void qDrawPlot::SaveClones() {
char errID[200];
std::string errMessage = "The Snapshots with ID's: ";
bool success = true;
for (int i = 0; i < MAXCloneWindows; ++i)
if (winClone[i]) {
if (winClone[i]->SavePlotAutomatic()) {
if (cloneWidgets[i]) {
if (cloneWidgets[i]->SavePlotAutomatic()) {
success = false;
sprintf(errID, "%d", i);
errMessage.append(std::string(errID) + std::string(", "));
@ -1572,24 +1661,24 @@ void qDrawPlot::SaveClones() {
qDefs::Message(qDefs::WARNING, errMessage + std::string("were not saved."), "qDrawPlot::SaveClones");
}
//-------------------------------------------------------------------------------------------------------------------------------------------------
void qDrawPlot::CloseClones() {
for (int i = 0; i < MAXCloneWindows; ++i)
if (winClone[i])
winClone[i]->close();
if (cloneWidgets[i])
cloneWidgets[i]->close();
}
//-------------------------------------------------------------------------------------------------------------------------------------------------
void qDrawPlot::CloneCloseEvent(int id) {
winClone[id] = 0;
cloneWidgets[id] = 0;
#ifdef VERBOSE
std::cout << "Closing Clone Window id:" << id << '\n';
#endif
}
//-------------------------------------------------------------------------------------------------------------------------------------------------
void qDrawPlot::SavePlot() {
// render image
@ -1624,7 +1713,7 @@ void qDrawPlot::SavePlot() {
}
}
//-------------------------------------------------------------------------------------------------------------------------------------------------
void qDrawPlot::SavePlotAutomatic() {
//no need to save the same plot many times
@ -1667,13 +1756,13 @@ void qDrawPlot::SavePlotAutomatic() {
}
}
//-------------------------------------------------------------------------------------------------------------------------------------------------
void qDrawPlot::ShowSaveErrorMessage(QString fileName) {
qDefs::Message(qDefs::WARNING, std::string("Automatic Saving: Could not save the first file:\n") + std::string(fileName.toAscii().constData()) + std::string("\n\nNote: Will not show future file save errors for this acquisition."), "qDrawPlot::ShowSaveErrorMessage");
}
//-------------------------------------------------------------------------------------------------------------------------------------------------
void qDrawPlot::SetPersistency(int val) {
for (int i = 0; i <= val; ++i)
@ -1682,7 +1771,7 @@ void qDrawPlot::SetPersistency(int val) {
persistency = val;
}
//-------------------------------------------------------------------------------------------------------------------------------------------------
void qDrawPlot::EnablePlot(bool enable) {
#ifdef VERBOSE
@ -1694,7 +1783,7 @@ void qDrawPlot::EnablePlot(bool enable) {
Clear1DPlot();
}
//-------------------------------------------------------------------------------------------------------------------------------------------------
void qDrawPlot::DisableZoom(bool disable) {
if (plot_in_scope == 1)
@ -1703,7 +1792,7 @@ void qDrawPlot::DisableZoom(bool disable) {
plot2D->GetPlot()->DisableZoom(disable);
}
//-------------------------------------------------------------------------------------------------------------------------------------------------
int qDrawPlot::UpdateTrimbitPlot(bool fromDetector,bool Histogram){
int ret;
@ -1765,7 +1854,7 @@ void qDrawPlot::DisableZoom(bool disable) {
return qDefs::OK;
}
//-------------------------------------------------------------------------------------------------------------------------------------------------
void qDrawPlot::SetPedestal(bool enable) {
#ifdef VERBOSE
@ -1780,7 +1869,7 @@ void qDrawPlot::SetPedestal(bool enable) {
}
}
//-------------------------------------------------------------------------------------------------------------------------------------------------
void qDrawPlot::RecalculatePedestal() {
#ifdef VERBOSE
@ -1805,7 +1894,7 @@ void qDrawPlot::RecalculatePedestal() {
UnlockLastImageArray();
}
//-------------------------------------------------------------------------------------------------------------------------------------------------
void qDrawPlot::SetAccumulate(bool enable) {
#ifdef VERBOSE
@ -1814,7 +1903,7 @@ void qDrawPlot::SetAccumulate(bool enable) {
accumulate = enable;
}
//-------------------------------------------------------------------------------------------------------------------------------------------------
void qDrawPlot::ResetAccumulate() {
#ifdef VERBOSE
@ -1825,7 +1914,7 @@ void qDrawPlot::ResetAccumulate() {
UnlockLastImageArray();
}
//-------------------------------------------------------------------------------------------------------------------------------------------------
void qDrawPlot::SetPlotTimer(double time) {
// timerValue = time;
@ -1838,7 +1927,7 @@ void qDrawPlot::SetPlotTimer(double time) {
// }
}
//-------------------------------------------------------------------------------------------------------------------------------------------------
void qDrawPlot::SetFrameFactor(int frame) {
// frameFactor = frame;
@ -1850,7 +1939,7 @@ void qDrawPlot::SetFrameFactor(int frame) {
// }
}
//-------------------------------------------------------------------------------------------------------------------------------------------------
void qDrawPlot::UpdateAfterCloning(bool points, bool logy, bool interpolate, bool contour, bool logz) {
#ifdef VERBOSE
@ -1870,7 +1959,7 @@ void qDrawPlot::UpdateAfterCloning(bool points, bool logy, bool interpolate, boo
}
}
//-------------------------------------------------------------------------------------------------------------------------------------------------
void qDrawPlot::SetBinary(bool enable, int from, int to) {
#ifdef VERBOSE
@ -1884,7 +1973,7 @@ void qDrawPlot::SetBinary(bool enable, int from, int to) {
binaryTo = to;
}
//-------------------------------------------------------------------------------------------------------------------------------------------------
void qDrawPlot::DisplayStatistics(bool enable) {
#ifdef VERBOSE
@ -1904,7 +1993,7 @@ void qDrawPlot::DisplayStatistics(bool enable) {
lblSumDisp->setText("-");
}
//-------------------------------------------------------------------------------------------------------------------------------------------------
void qDrawPlot::GetStatistics(double &min, double &max, double &sum, double *array, int size) {
#ifdef VERYVERBOSE
@ -1923,7 +2012,7 @@ void qDrawPlot::GetStatistics(double &min, double &max, double &sum, double *arr
}
}
//-------------------------------------------------------------------------------------------------------------------------------------------------
void qDrawPlot::EnableGainPlot(bool e) {
#ifdef VERBOSE
@ -1932,7 +2021,7 @@ void qDrawPlot::EnableGainPlot(bool e) {
gainDataEnable = e;
}
//-------------------------------------------------------------------------------------------------------------------------------------------------
void qDrawPlot::toDoublePixelData(double *dest, char *source, int size, int databytes, int dr, double *gaindest) {
int ichan = 0;