77 typedef QSharedPointer<Spline>
SPtr;
86 Spline(QWidget* parent =
nullptr,
const QString& title =
"Spline Histogram");
96 void setData(
const Eigen::Matrix<T, Eigen::Dynamic, 1>& matClassLimitData,
97 const Eigen::Matrix<int, Eigen::Dynamic, 1>& matClassFrequencyData);
99 void setData(
const Eigen::Matrix<T, 1, Eigen::Dynamic>& matClassLimitData,
100 const Eigen::Matrix<int, 1, Eigen::Dynamic>& matClassFrequencyData);
110 void updatePlot(
const Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic>& matClassLimitData,
111 const Eigen::VectorXi& matClassFrequencyData);
134 Eigen::VectorXd& vecCoefficientResults,
135 Eigen::VectorXi& vecExponentValues);
246 void borderChanged(
double leftThreshold,
double middleThreshold,
double rightThreshold);
255 const Eigen::Matrix<int, Eigen::Dynamic, 1>& matClassFrequencyData)
257 Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic> matrixName(matClassLimitData.rows(),1);
258 matrixName.col(0) = matClassLimitData;
259 this->
updatePlot(matrixName, matClassFrequencyData);
266 const Eigen::Matrix<int, 1, Eigen::Dynamic>& matClassFrequencyData)
268 Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic> matrixName(1, matClassLimitData.cols());
269 matrixName.row(0) = matClassLimitData;
270 this->
updatePlot(matrixName, matClassFrequencyData);
277 const Eigen::VectorXi& matClassFrequencyData)
279 Eigen::VectorXd resultDisplayValues;
280 int iClassAmount = std::min(
static_cast<int>(matClassFrequencyData.rows()),
281 static_cast<int>(matClassLimitData.rows()) - 1);
282 if(iClassAmount < 1)
return;
291 for (
int ir = 0; ir < iClassAmount; ++ir)
293 double classMark = (resultDisplayValues(ir) + resultDisplayValues(ir + 1)) / 2.0;
294 m_seriesData.append(QPointF(classMark, matClassFrequencyData(ir)));
315 Eigen::VectorXd& vecCoefficientResults,
316 Eigen::VectorXi& vecExponentValues)
318 vecCoefficientResults.resize(iClassAmount + 1);
319 vecExponentValues.resize(iClassAmount + 1);
320 double originalValue(0.0),
321 limitDisplayValue(0.0),
322 doubleExponentValue(0.0);
323 int limitExponentValue(0);
324 for (
int ir = 0; ir <= iClassAmount; ++ir)
326 originalValue = matClassLimitData(ir);
327 if (originalValue == 0.0)
329 doubleExponentValue = 0.0;
333 doubleExponentValue = log10(std::fabs(originalValue));
336 limitExponentValue = round(doubleExponentValue);
337 limitDisplayValue = originalValue * (pow(10, -(limitExponentValue)));
338 vecCoefficientResults(ir) = limitDisplayValue;
339 vecExponentValues(ir) = limitExponentValue;
342 int lowestExponentValue{0},
343 highestExponentValue{0};
345 for (
int ir = 0; ir <= iClassAmount; ++ir)
347 if (vecExponentValues(ir) < lowestExponentValue)
349 lowestExponentValue = vecExponentValues(ir);
351 if (vecExponentValues(ir) > highestExponentValue)
353 highestExponentValue = vecExponentValues(ir);
357 if (highestExponentValue > 0)
359 for (
int ir = 0; ir <= iClassAmount; ++ir)
361 while (vecExponentValues(ir) < highestExponentValue)
363 vecCoefficientResults(ir) = vecCoefficientResults(ir) / 10;
364 vecExponentValues(ir)++;
369 if (lowestExponentValue < 0)
371 for (
int ir = 0; ir <= iClassAmount; ++ir)
373 while (vecExponentValues(ir) > lowestExponentValue)
375 vecCoefficientResults(ir) = vecCoefficientResults(ir) * 10;
376 vecExponentValues(ir)--;
void setData(const Eigen::Matrix< T, Eigen::Dynamic, 1 > &matClassLimitData, const Eigen::Matrix< int, Eigen::Dynamic, 1 > &matClassFrequencyData)
void splitCoefficientAndExponent(const Eigen::Matrix< T, Eigen::Dynamic, Eigen::Dynamic > &matClassLimitData, int iClassAmount, Eigen::VectorXd &vecCoefficientResults, Eigen::VectorXi &vecExponentValues)