From 3e979fdece24a880063a6bf48b26f49995a9d22b Mon Sep 17 00:00:00 2001 From: bergamaschi Date: Wed, 24 Oct 2012 09:44:31 +0000 Subject: [PATCH] finally works also with qwt6 - 2D plot color scales changed to root's git-svn-id: file:///afs/psi.ch/project/sls_det_software/svn/slsDetectorGui@102 af1100a4-978c-4157-bff7-07162d2ba061 --- .../slsDetectorPlotting/include/SlsQt2DHist.h | 18 ++++ .../slsDetectorPlotting/include/SlsQt2DPlot.h | 8 +- .../slsDetectorPlotting/src/SlsQt2DHist.cxx | 3 + .../slsDetectorPlotting/src/SlsQt2DPlot.cxx | 95 +++++++++++-------- 4 files changed, 79 insertions(+), 45 deletions(-) diff --git a/slsDetectorGui/slsDetectorPlotting/include/SlsQt2DHist.h b/slsDetectorGui/slsDetectorPlotting/include/SlsQt2DHist.h index 49ce36859..fbca86864 100644 --- a/slsDetectorGui/slsDetectorPlotting/include/SlsQt2DHist.h +++ b/slsDetectorGui/slsDetectorPlotting/include/SlsQt2DHist.h @@ -82,6 +82,18 @@ class SlsQt2DHist: public QwtRasterData{ virtual QwtDoubleInterval range() const{ return QwtDoubleInterval(z_min,z_max);} #else virtual QwtInterval range() const{ return QwtInterval(z_min,z_max);} + virtual QwtInterval interval(Qt::Axis axis) const { + switch (axis){ + case Qt::ZAxis: + return QwtInterval(z_min,z_max); + case Qt::XAxis: + return QwtInterval(x_min,x_max); + case Qt::YAxis: + return QwtInterval(y_min,y_max); + default: + return QwtInterval(z_min,z_max); + }; + }; #endif @@ -110,6 +122,12 @@ class SlsQt2DHist: public QwtRasterData{ double left_v = value_between_points(y0,data[b00],y1,data[b01],y); double right_v = value_between_points(y0,data[b10],y1,data[b11],y); //horazontal extrap + + + + return 0.5; + + return value_between_points(x_min+(x_int+0.5)*x_width,left_v, x_min+(x_int+1.5)*x_width,right_v,x); } diff --git a/slsDetectorGui/slsDetectorPlotting/include/SlsQt2DPlot.h b/slsDetectorGui/slsDetectorPlotting/include/SlsQt2DPlot.h index c977e89ef..e4e320b49 100644 --- a/slsDetectorGui/slsDetectorPlotting/include/SlsQt2DPlot.h +++ b/slsDetectorGui/slsDetectorPlotting/include/SlsQt2DPlot.h @@ -52,6 +52,7 @@ private: void SetupColorMap(); QwtLinearColorMap* myColourMap(QVector colourStops); + QwtLinearColorMap* myColourMap(int log=0); @@ -85,13 +86,6 @@ public: void SetData(int nbinsx, double xmin, double xmax, int nbinsy,double ymin, double ymax,double *d,double zmin=0, double zmax=-1){ hist->SetData(nbinsx,xmin,xmax,nbinsy,ymin,ymax,d,zmin,zmax); -#if QWT_VERSION<0x060000 - ; -#else - d_spectrogram->setData(hist); -#endif - - } double* GetDataPtr() {return hist->GetDataPtr();} diff --git a/slsDetectorGui/slsDetectorPlotting/src/SlsQt2DHist.cxx b/slsDetectorGui/slsDetectorPlotting/src/SlsQt2DHist.cxx index c8d7204f1..30847ff66 100644 --- a/slsDetectorGui/slsDetectorPlotting/src/SlsQt2DHist.cxx +++ b/slsDetectorGui/slsDetectorPlotting/src/SlsQt2DHist.cxx @@ -60,6 +60,8 @@ void SlsQt2DHist::SetData(int nbinsx, double xmin, double xmax, int nbinsy,doubl #else setInterval( Qt::XAxis,QwtInterval(xmin,xmax)); setInterval( Qt::YAxis,QwtInterval(ymin,ymax)); + // setInterval( Qt::ZAxis,QwtInterval(zmin,zmax)); + //setInterval( Qt::ZAxis,QwtInterval(0.,1.)); #endif } @@ -103,6 +105,7 @@ void SlsQt2DHist::SetMinMax(double zmin,double zmax){ if(z_min>0) z_min/=1.02; else z_min*=1.02; if(z_max>0) z_max*=1.02; else z_max/=1.02; } + setInterval( Qt::ZAxis,QwtInterval(z_min,z_max)); } double SlsQt2DHist::GetMean(){ diff --git a/slsDetectorGui/slsDetectorPlotting/src/SlsQt2DPlot.cxx b/slsDetectorGui/slsDetectorPlotting/src/SlsQt2DPlot.cxx index 7476bc827..106ad7cf6 100644 --- a/slsDetectorGui/slsDetectorPlotting/src/SlsQt2DPlot.cxx +++ b/slsDetectorGui/slsDetectorPlotting/src/SlsQt2DPlot.cxx @@ -55,34 +55,20 @@ SlsQt2DPlot::SlsQt2DPlot(QWidget *parent):QwtPlot(parent){ } -void SlsQt2DPlot::SetupColorMap(){ - QVector cs(0); +void SlsQt2DPlot::SetupColorMap(){ + + - cs.append(0); - cs.append(0.1); - cs.append(0.4); - cs.append(0.6); - cs.append(0.95); - cs.append(1.); - - colorMapLinearScale = myColourMap(cs); + colorMapLinearScale = myColourMap(0); #if QWT_VERSION<0x060000 d_spectrogram->setColorMap(*colorMapLinearScale); #else d_spectrogram->setColorMap(colorMapLinearScale); #endif - QVector cs1(0); - - cs.append(0); - cs.append((pow(10,2*0.10)-1)/99.0); - cs.append((pow(10,2*0.40)-1)/99.0); - cs.append((pow(10,2*0.60)-1)/99.0); - cs.append((pow(10,2*0.95)-1)/99.0); - cs.append(1.); - colorMapLogScale = myColourMap(cs1); + colorMapLogScale = myColourMap(1); #if QWT_VERSION<0x060000 contourLevelsLinear = new QwtValueList(); for(double level=0.5;level<10.0;level+=1.0 ) (*contourLevelsLinear) += level; @@ -198,21 +184,51 @@ void SlsQt2DPlot::SetZMinMax(double zmin,double zmax){ } -QwtLinearColorMap* SlsQt2DPlot::myColourMap(QVector colourStops) { - QwtLinearColorMap* copyMap = new QwtLinearColorMap(); +QwtLinearColorMap* SlsQt2DPlot::myColourMap(QVector colourStops) { + +int ns=5; + +double r[]={0.00, 0.00, 0.87, 1.00, 0.51}; +double g[]={0.00, 0.81, 1.00, 0.20, 0.00}; + double b[] = { 0.51, 1.00, 0.12, 0.00, 0.00 }; - - copyMap->addColorStop(colourStops.value(0), Qt::white); - // copyMap->addColorStop(colourStops.value(0), Qt::darkCyan); - copyMap->addColorStop(colourStops.value(1), Qt::cyan); - copyMap->addColorStop(colourStops.value(2), Qt::blue); - copyMap->addColorStop(colourStops.value(3), Qt::green); - copyMap->addColorStop(colourStops.value(4), Qt::yellow); - copyMap->addColorStop(colourStops.value(5), Qt::red); + QColor c1,c2,c; + c1.setRgbF(r[0],g[0],b[0]); + c2.setRgbF(r[ns-1],g[ns-1],b[ns-1]); + QwtLinearColorMap* copyMap = new QwtLinearColorMap(c1, c2); + + for (int is=1; isaddColorStop(colourStops.value(is),c ); + } + + return copyMap; - return copyMap; } +QwtLinearColorMap* SlsQt2DPlot::myColourMap(int log) { + +int ns=5; + + + QVector cs1(0); + QVector lcs1(0); + + + cs1.append(0.); + cs1.append(0.34); + cs1.append(0.61); + cs1.append(0.84); + cs1.append(1.); +if (log) { + for (int is=0; issetColorMap(d_spectrogram->data().range(),d_spectrogram->colorMap()); #else + // const QwtInterval zInterval = d_spectrogram->data()->interval( Qt::ZAxis ); + const QwtInterval zInterval = hist->range(); + QVector colourStops =((QwtLinearColorMap*)d_spectrogram->colorMap())->colorStops(); QwtLinearColorMap* copyMap = myColourMap(colourStops); - // rightAxis->setColorMap(d_spectrogram->data()->interval(Qt::ZAxis),copyMap); - rightAxis->setColorMap(hist->range(),copyMap); + rightAxis->setColorMap(zInterval,copyMap); #endif if(!zoomer->zoomRectIndex()) UnZoom(); #if QWT_VERSION<0x060000 + + setAxisScale(QwtPlot::yRight,d_spectrogram->data().range().minValue(), d_spectrogram->data().range().maxValue()); -#else - // setAxisScale(QwtPlot::yRight,d_spectrogram->data()->interval(Qt::ZAxis).minValue(), d_spectrogram->data()->interval(Qt::ZAxis).maxValue()); - setAxisScale(QwtPlot::yRight,hist->range().minValue(), hist->range().maxValue()); - - cout << "min is " << d_spectrogram->data()->interval(Qt::ZAxis).minValue() << " " << hist->range().minValue() << endl; - cout << "max is " << d_spectrogram->data()->interval(Qt::ZAxis).maxValue() << " " << hist->range().maxValue() << endl; +#else + + setAxisScale(QwtPlot::yRight,zInterval.minValue(), zInterval.maxValue()); + + plotLayout()->setAlignCanvasToScales(true); #endif replot(); }