diff --git a/src/ui/RadioCalibration/AbstractCalibrator.cc b/src/ui/RadioCalibration/AbstractCalibrator.cc index 2efda5eb4c1e4789f22d4e7bb0a2984ecaa77e9a..c57a46e0757c29224361e21a5e9010ed1f0b4e16 100644 --- a/src/ui/RadioCalibration/AbstractCalibrator.cc +++ b/src/ui/RadioCalibration/AbstractCalibrator.cc @@ -17,7 +17,7 @@ float AbstractCalibrator::logAverage() float total = 0; for (int i=0; isize(); ++i) total += log->value(i); - return (total/log->size()); + return floor(total/log->size()); } float AbstractCalibrator::logExtrema() diff --git a/src/ui/RadioCalibration/AbstractCalibrator.h b/src/ui/RadioCalibration/AbstractCalibrator.h index 3b650a8826c3f186e3d2d241b7cf3c24aa6aec2b..dc0f97f9b608c6e4b3f1d5bbd881c65276f8fa8b 100644 --- a/src/ui/RadioCalibration/AbstractCalibrator.h +++ b/src/ui/RadioCalibration/AbstractCalibrator.h @@ -5,6 +5,8 @@ #include #include +#include + class AbstractCalibrator : public QWidget { Q_OBJECT diff --git a/src/ui/RadioCalibration/CurveCalibrator.cc b/src/ui/RadioCalibration/CurveCalibrator.cc index 5ec46e037a02d70417c4722d946e82621fb45e56..92af7d1e53a6ee499822cb41f5c8b2b71bcd812b 100644 --- a/src/ui/RadioCalibration/CurveCalibrator.cc +++ b/src/ui/RadioCalibration/CurveCalibrator.cc @@ -2,9 +2,8 @@ CurveCalibrator::CurveCalibrator(QString titleString, QWidget *parent) : AbstractCalibrator(parent), - setpoints(QVector(5)), - positions(QVector()) - + setpoints(new QVector(5)), + positions(new QVector()) { QGridLayout *grid = new QGridLayout(this); QLabel *title = new QLabel(titleString); @@ -18,10 +17,10 @@ CurveCalibrator::CurveCalibrator(QString titleString, QWidget *parent) : grid->addLayout(pulseLayout, 1, 0, 1, 5, Qt::AlignHCenter); for (int i=0; i<=100; i=i+100/4) - positions.append(static_cast(i)); + positions->append(static_cast(i)); - setpoints.fill(1500); + setpoints->fill(1500); plot = new QwtPlot(); @@ -29,13 +28,62 @@ CurveCalibrator::CurveCalibrator(QString titleString, QWidget *parent) : plot->setAxisScale(QwtPlot::yLeft, 1000, 2000, 200); + plot->setAxisScale(QwtPlot::xBottom, 0, 100, 25); curve = new QwtPlotCurve(); - curve->setData(positions, setpoints); + curve->setPen(QPen(QColor(QString("lime")))); + curve->setData(*positions, *setpoints); curve->attach(plot); plot->replot(); + QPushButton *zero = new QPushButton(tr("0 %")); + QPushButton *twentyfive = new QPushButton(tr("25 %")); + QPushButton *fifty = new QPushButton(tr("50 %")); + QPushButton *seventyfive = new QPushButton(tr("75 %")); + QPushButton *hundred = new QPushButton(tr("100 %")); + + grid->addWidget(zero, 3, 0); + grid->addWidget(twentyfive, 3, 1); + grid->addWidget(fifty, 3, 2); + grid->addWidget(seventyfive, 3, 3); + grid->addWidget(hundred, 3, 4); this->setLayout(grid); + + signalMapper = new QSignalMapper(this); + signalMapper->setMapping(zero, 0); + signalMapper->setMapping(twentyfive, 1); + signalMapper->setMapping(fifty, 2); + signalMapper->setMapping(seventyfive, 3); + signalMapper->setMapping(hundred, 4); + + connect(zero, SIGNAL(clicked()), signalMapper, SLOT(map())); + connect(twentyfive, SIGNAL(clicked()), signalMapper, SLOT(map())); + connect(fifty, SIGNAL(clicked()), signalMapper, SLOT(map())); + connect(seventyfive, SIGNAL(clicked()), signalMapper, SLOT(map())); + connect(hundred, SIGNAL(clicked()), signalMapper, SLOT(map())); + connect(signalMapper, SIGNAL(mapped(int)), this, SLOT(setSetpoint(int))); +} + +CurveCalibrator::~CurveCalibrator() +{ + delete setpoints; + delete positions; +} + +void CurveCalibrator::setSetpoint(int setpoint) +{ + if (setpoint == 0 || setpoint == 4) + { + setpoints->replace(setpoint, static_cast(logExtrema())); + } + else + { + setpoints->replace(setpoint, static_cast(logAverage())); + } + + plot->replot(); + + emit setpointChanged(setpoint, static_cast(setpoints->value(setpoint))); } diff --git a/src/ui/RadioCalibration/CurveCalibrator.h b/src/ui/RadioCalibration/CurveCalibrator.h index 84befdf45c8940f274a8812712ecc9d591bdb362..d6ccc5933f739f8d26e26ccbfb9c9502094056dc 100644 --- a/src/ui/RadioCalibration/CurveCalibrator.h +++ b/src/ui/RadioCalibration/CurveCalibrator.h @@ -9,6 +9,11 @@ #include #include #include +#include +#include +#include +#include +#include #include "AbstractCalibrator.h" @@ -17,15 +22,20 @@ class CurveCalibrator : public AbstractCalibrator Q_OBJECT public: explicit CurveCalibrator(QString title = QString(), QWidget *parent = 0); - + ~CurveCalibrator(); signals: - void setpointChanged(float[5]); + void setpointChanged(int setpoint, float raw); + +protected slots: + void setSetpoint(int setpoint); protected: - QVector setpoints; - QVector positions; + QVector *setpoints; + QVector *positions; QwtPlot *plot; QwtPlotCurve *curve; + + QSignalMapper *signalMapper; }; #endif // CURVECALIBRATOR_H