From 7c101d17755e3c6721ec922bb518396da7fe6e5a Mon Sep 17 00:00:00 2001 From: Bryan Godbolt Date: Mon, 20 Sep 2010 12:01:08 -0600 Subject: [PATCH] filled in curve calibrator functions --- src/ui/RadioCalibration/AbstractCalibrator.cc | 2 +- src/ui/RadioCalibration/AbstractCalibrator.h | 2 + src/ui/RadioCalibration/CurveCalibrator.cc | 60 +++++++++++++++++-- src/ui/RadioCalibration/CurveCalibrator.h | 18 ++++-- 4 files changed, 71 insertions(+), 11 deletions(-) diff --git a/src/ui/RadioCalibration/AbstractCalibrator.cc b/src/ui/RadioCalibration/AbstractCalibrator.cc index 2efda5eb4..c57a46e07 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 3b650a882..dc0f97f9b 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 5ec46e037..92af7d1e5 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 84befdf45..d6ccc5933 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 -- 2.22.0