41 #include "../disp_global.h"
48 #include <QtCharts/QChart>
49 #include <QtCharts/QSplineSeries>
64 #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
94 typedef QSharedPointer<Spline>
SPtr;
103 Spline(QWidget* parent = 0,
const QString& title =
"Spline Histogram");
113 void setData(
const Eigen::Matrix<T, Eigen::Dynamic, 1>& matClassLimitData,
114 const Eigen::Matrix<int, Eigen::Dynamic, 1>& matClassFrequencyData);
116 void setData(
const Eigen::Matrix<T, 1, Eigen::Dynamic>& matClassLimitData,
117 const Eigen::Matrix<int, 1, Eigen::Dynamic>& matClassFrequencyData);
127 void updatePlot(
const Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic>& matClassLimitData,
128 const Eigen::VectorXi& matClassFrequencyData);
136 void mousePressEvent(QMouseEvent *event);
148 void splitCoefficientAndExponent(
const Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic>& matClassLimitData,
150 Eigen::VectorXd& vecCoefficientResults,
151 Eigen::VectorXi& vecExponentValues);
159 void setThreshold(
const QVector3D& vecThresholdValues);
167 const QVector3D& getThreshold();
177 QVector3D correctionDisplayTrueValue(QVector3D vecOriginalValues,
178 QString functionName);
186 void setColorMap (
const QString &colorMap);
200 #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
201 void updateThreshold (QtCharts::QLineSeries *lineSeries);
202 QtCharts::QChart* m_pChart;
203 QtCharts::QSplineSeries* m_pSeries;
204 QtCharts::QLineSeries* m_pLeftThreshold;
205 QtCharts::QLineSeries* m_pMiddleThreshold;
206 QtCharts::QLineSeries* m_pRightThreshold;
208 void updateThreshold (QLineSeries *lineSeries);
229 void borderChanged(
double leftThreshold,
double middleThreshold,
double rightThreshold);
236 template <
typename T>
238 const Eigen::Matrix<int, Eigen::Dynamic, 1>& matClassFrequencyData)
240 Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic> matrixName(matClassLimitData.rows(),1);
241 matrixName.col(0) = matClassLimitData;
242 this->
updatePlot(matrixName, matClassFrequencyData);
247 template <
typename T>
248 void Spline::setData(
const Eigen::Matrix<T, 1, Eigen::Dynamic>& matClassLimitData,
249 const Eigen::Matrix<int, 1, Eigen::Dynamic>& matClassFrequencyData)
251 Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic> matrixName(1, matClassLimitData.cols());
252 matrixName.row(0) = matClassLimitData;
253 this->
updatePlot(matrixName, matClassFrequencyData);
260 const Eigen::VectorXi& matClassFrequencyData)
262 Eigen::VectorXd resultDisplayValues;
263 int iClassAmount = matClassFrequencyData.rows();
267 QString histogramExponent;
281 for (
int ir = 0; ir < iClassAmount; ++ir)
283 classMark = (resultDisplayValues(ir) + resultDisplayValues(ir+1))/2 ;
284 m_pSeries->append(classMark, matClassFrequencyData(ir));
292 #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
307 m_pChart->legend()->setVisible(
true);
308 m_pChart->legend()->setAlignment(Qt::AlignBottom);
315 template <
typename T>
318 Eigen::VectorXd& vecCoefficientResults,
319 Eigen::VectorXi& vecExponentValues)
321 vecCoefficientResults.resize(iClassAmount + 1);
322 vecExponentValues.resize(iClassAmount + 1);
323 double originalValue(0.0),
324 limitDisplayValue(0.0),
325 doubleExponentValue(0.0);
326 int limitExponentValue(0);
327 for (
int ir = 0; ir <= iClassAmount; ++ir)
329 originalValue = matClassLimitData(ir);
330 if (originalValue == 0.0)
332 doubleExponentValue = 0.0;
337 doubleExponentValue = log10(std::fabs(originalValue));
340 limitExponentValue = round(doubleExponentValue);
341 limitDisplayValue = originalValue * (pow(10,-(limitExponentValue)));
342 vecCoefficientResults(ir) = limitDisplayValue;
343 vecExponentValues(ir) = limitExponentValue;
346 int lowestExponentValue{0},
347 highestExponentValue{0};
349 for (
int ir = 0; ir <= iClassAmount; ++ir)
351 if (vecExponentValues(ir) < lowestExponentValue)
353 lowestExponentValue = vecExponentValues(ir);
355 if (vecExponentValues(ir) > highestExponentValue)
357 highestExponentValue = vecExponentValues(ir);
361 if (highestExponentValue > 0)
363 for (
int ir = 0; ir <= iClassAmount; ++ir)
365 while (vecExponentValues(ir) < highestExponentValue)
367 vecCoefficientResults(ir) = vecCoefficientResults(ir) / 10;
368 vecExponentValues(ir)++;
373 if (lowestExponentValue < 0)
375 for (
int ir = 0; ir <= iClassAmount; ++ir)
377 while (vecExponentValues(ir) > lowestExponentValue)
379 vecCoefficientResults(ir) = vecCoefficientResults(ir) * 10;
380 vecExponentValues(ir)--;