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
This commit is contained in:
bergamaschi 2012-10-24 09:44:31 +00:00
parent 1d03067bd5
commit 3e979fdece
4 changed files with 79 additions and 45 deletions

View File

@ -82,6 +82,18 @@ class SlsQt2DHist: public QwtRasterData{
virtual QwtDoubleInterval range() const{ return QwtDoubleInterval(z_min,z_max);} virtual QwtDoubleInterval range() const{ return QwtDoubleInterval(z_min,z_max);}
#else #else
virtual QwtInterval range() const{ return QwtInterval(z_min,z_max);} 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 #endif
@ -110,6 +122,12 @@ class SlsQt2DHist: public QwtRasterData{
double left_v = value_between_points(y0,data[b00],y1,data[b01],y); 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); double right_v = value_between_points(y0,data[b10],y1,data[b11],y);
//horazontal extrap //horazontal extrap
return 0.5;
return value_between_points(x_min+(x_int+0.5)*x_width,left_v, 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); x_min+(x_int+1.5)*x_width,right_v,x);
} }

View File

@ -52,6 +52,7 @@ private:
void SetupColorMap(); void SetupColorMap();
QwtLinearColorMap* myColourMap(QVector<double> colourStops); QwtLinearColorMap* myColourMap(QVector<double> 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){ 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); 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();} double* GetDataPtr() {return hist->GetDataPtr();}

View File

@ -60,6 +60,8 @@ void SlsQt2DHist::SetData(int nbinsx, double xmin, double xmax, int nbinsy,doubl
#else #else
setInterval( Qt::XAxis,QwtInterval(xmin,xmax)); setInterval( Qt::XAxis,QwtInterval(xmin,xmax));
setInterval( Qt::YAxis,QwtInterval(ymin,ymax)); setInterval( Qt::YAxis,QwtInterval(ymin,ymax));
// setInterval( Qt::ZAxis,QwtInterval(zmin,zmax));
//setInterval( Qt::ZAxis,QwtInterval(0.,1.));
#endif #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_min>0) z_min/=1.02; else z_min*=1.02;
if(z_max>0) z_max*=1.02; else z_max/=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(){ double SlsQt2DHist::GetMean(){

View File

@ -55,34 +55,20 @@ SlsQt2DPlot::SlsQt2DPlot(QWidget *parent):QwtPlot(parent){
} }
void SlsQt2DPlot::SetupColorMap(){ void SlsQt2DPlot::SetupColorMap(){
QVector<double> cs(0);
cs.append(0); colorMapLinearScale = myColourMap(0);
cs.append(0.1);
cs.append(0.4);
cs.append(0.6);
cs.append(0.95);
cs.append(1.);
colorMapLinearScale = myColourMap(cs);
#if QWT_VERSION<0x060000 #if QWT_VERSION<0x060000
d_spectrogram->setColorMap(*colorMapLinearScale); d_spectrogram->setColorMap(*colorMapLinearScale);
#else #else
d_spectrogram->setColorMap(colorMapLinearScale); d_spectrogram->setColorMap(colorMapLinearScale);
#endif #endif
QVector<double> 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 #if QWT_VERSION<0x060000
contourLevelsLinear = new QwtValueList(); contourLevelsLinear = new QwtValueList();
for(double level=0.5;level<10.0;level+=1.0 ) (*contourLevelsLinear) += level; 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<double> colourStops) { QwtLinearColorMap* SlsQt2DPlot::myColourMap(QVector<double> colourStops) {
QwtLinearColorMap* copyMap = new QwtLinearColorMap();
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 };
QColor c1,c2,c;
copyMap->addColorStop(colourStops.value(0), Qt::white); c1.setRgbF(r[0],g[0],b[0]);
// copyMap->addColorStop(colourStops.value(0), Qt::darkCyan); c2.setRgbF(r[ns-1],g[ns-1],b[ns-1]);
copyMap->addColorStop(colourStops.value(1), Qt::cyan); QwtLinearColorMap* copyMap = new QwtLinearColorMap(c1, c2);
copyMap->addColorStop(colourStops.value(2), Qt::blue);
copyMap->addColorStop(colourStops.value(3), Qt::green); for (int is=1; is<ns-1; is++) {
copyMap->addColorStop(colourStops.value(4), Qt::yellow); c.setRgbF(r[is],g[is],b[is]);
copyMap->addColorStop(colourStops.value(5), Qt::red); copyMap->addColorStop(colourStops.value(is),c );
}
return copyMap;
return copyMap;
} }
QwtLinearColorMap* SlsQt2DPlot::myColourMap(int log) {
int ns=5;
QVector<double> cs1(0);
QVector<double> 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; is<ns; is++) {
lcs1.append((pow(10,2*cs1.value(is))-1)/99.0);
}
return myColourMap(lcs1);
}
return myColourMap(cs1);
}
void SlsQt2DPlot::Update(){ void SlsQt2DPlot::Update(){
@ -220,26 +236,29 @@ void SlsQt2DPlot::Update(){
rightAxis->setColorMap(d_spectrogram->data().range(),d_spectrogram->colorMap()); rightAxis->setColorMap(d_spectrogram->data().range(),d_spectrogram->colorMap());
#else #else
// const QwtInterval zInterval = d_spectrogram->data()->interval( Qt::ZAxis );
const QwtInterval zInterval = hist->range();
QVector<double> colourStops =((QwtLinearColorMap*)d_spectrogram->colorMap())->colorStops(); QVector<double> colourStops =((QwtLinearColorMap*)d_spectrogram->colorMap())->colorStops();
QwtLinearColorMap* copyMap = myColourMap(colourStops); QwtLinearColorMap* copyMap = myColourMap(colourStops);
// rightAxis->setColorMap(d_spectrogram->data()->interval(Qt::ZAxis),copyMap); rightAxis->setColorMap(zInterval,copyMap);
rightAxis->setColorMap(hist->range(),copyMap);
#endif #endif
if(!zoomer->zoomRectIndex()) UnZoom(); if(!zoomer->zoomRectIndex()) UnZoom();
#if QWT_VERSION<0x060000 #if QWT_VERSION<0x060000
setAxisScale(QwtPlot::yRight,d_spectrogram->data().range().minValue(), setAxisScale(QwtPlot::yRight,d_spectrogram->data().range().minValue(),
d_spectrogram->data().range().maxValue()); d_spectrogram->data().range().maxValue());
#else #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;
setAxisScale(QwtPlot::yRight,zInterval.minValue(), zInterval.maxValue());
plotLayout()->setAlignCanvasToScales(true);
#endif #endif
replot(); replot();
} }