|
|
#include "lfrspectrogram.h"
|
|
|
|
|
|
class SpectrogramData: public QwtRasterData
|
|
|
{
|
|
|
public:
|
|
|
SpectrogramData():
|
|
|
QwtRasterData(QwtDoubleRect(-1.5, -1.5, 3.0, 3.0))
|
|
|
{
|
|
|
}
|
|
|
|
|
|
virtual QwtRasterData *copy() const
|
|
|
{
|
|
|
return new SpectrogramData();
|
|
|
}
|
|
|
|
|
|
virtual QwtDoubleInterval range() const
|
|
|
{
|
|
|
return QwtDoubleInterval(0.0, 10.0);
|
|
|
}
|
|
|
|
|
|
virtual double value(double x, double y) const
|
|
|
{
|
|
|
const double c = 0.842;
|
|
|
|
|
|
const double v1 = x * x + (y-c) * (y+c);
|
|
|
const double v2 = x * (y+c) + x * (y+c);
|
|
|
|
|
|
return 1.0 / (v1 * v1 + v2 * v2);
|
|
|
}
|
|
|
};
|
|
|
|
|
|
LFRSpectrogram::LFRSpectrogram(QWidget *parent) :
|
|
|
QWidget(parent)
|
|
|
{
|
|
|
mainLayout = new QVBoxLayout();
|
|
|
plot_spectrogram = new QwtPlot();
|
|
|
spectrogram = new QwtPlotSpectrogram(tr("spectrogram"));
|
|
|
|
|
|
QwtLinearColorMap colorMap(Qt::darkCyan, Qt::red);
|
|
|
colorMap.addColorStop(0.1, Qt::cyan);
|
|
|
colorMap.addColorStop(0.6, Qt::green);
|
|
|
colorMap.addColorStop(0.95, Qt::yellow);
|
|
|
|
|
|
spectrogram->setColorMap(colorMap);
|
|
|
spectrogram->setData( SpectrogramData() );
|
|
|
spectrogram->attach(plot_spectrogram);
|
|
|
|
|
|
// A color bar on the right axis
|
|
|
QwtScaleWidget *rightAxis = plot_spectrogram->axisWidget(QwtPlot::yRight);
|
|
|
rightAxis->setTitle("Intensity");
|
|
|
rightAxis->setColorBarEnabled(true);
|
|
|
rightAxis->setColorMap(spectrogram->data().range(),
|
|
|
spectrogram->colorMap());
|
|
|
|
|
|
plot_spectrogram->setAxisScale(QwtPlot::yRight,
|
|
|
spectrogram->data().range().minValue(),
|
|
|
spectrogram->data().range().maxValue() );
|
|
|
plot_spectrogram->enableAxis(QwtPlot::yRight);
|
|
|
|
|
|
plot_spectrogram->plotLayout()->setAlignCanvasToScales(true);
|
|
|
plot_spectrogram->replot();
|
|
|
|
|
|
mainLayout->addWidget(plot_spectrogram);
|
|
|
|
|
|
this->setLayout(mainLayout);
|
|
|
}
|
|
|
|