From 74cc58e5f2e4dc0bb2f66ff80acd074580f51acf Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Tue, 9 Aug 2016 15:32:43 +0200 Subject: [PATCH] #723 Added sum to statistical output --- .../ProjectDataModel/RimEclipseStatisticsCase.cpp | 2 +- .../RimEclipseStatisticsCaseEvaluator.cpp | 7 +++++-- .../RimEclipseStatisticsCaseEvaluator.h | 2 +- .../ResultStatisticsCache/RigStatisticsMath.cpp | 11 ++++++----- .../ResultStatisticsCache/RigStatisticsMath.h | 2 +- ApplicationCode/UnitTests/RigStatisticsMath-Test.cpp | 8 ++++---- 6 files changed, 18 insertions(+), 14 deletions(-) diff --git a/ApplicationCode/ProjectDataModel/RimEclipseStatisticsCase.cpp b/ApplicationCode/ProjectDataModel/RimEclipseStatisticsCase.cpp index 24aef638ca..066c98d730 100644 --- a/ApplicationCode/ProjectDataModel/RimEclipseStatisticsCase.cpp +++ b/ApplicationCode/ProjectDataModel/RimEclipseStatisticsCase.cpp @@ -528,7 +528,7 @@ void RimEclipseStatisticsCase::updateSelectionSummaryLabel() html += "

Statistical variables to compute:

"; html += "

"; - html += "Min, Max, Range, Mean, Std.dev"; ; + html += "Min, Max, Sum, Range, Mean, Std.dev"; ; if (m_calculatePercentiles()) { html += "
"; diff --git a/ApplicationCode/ProjectDataModel/RimEclipseStatisticsCaseEvaluator.cpp b/ApplicationCode/ProjectDataModel/RimEclipseStatisticsCaseEvaluator.cpp index 3daa9f75c6..a65100152e 100644 --- a/ApplicationCode/ProjectDataModel/RimEclipseStatisticsCaseEvaluator.cpp +++ b/ApplicationCode/ProjectDataModel/RimEclipseStatisticsCaseEvaluator.cpp @@ -60,7 +60,8 @@ void RimEclipseStatisticsCaseEvaluator::addNamedResult(RigCaseCellResultsData* d QString createResultNameMin(const QString& resultName) { return resultName + "_MIN"; } -QString createResultNameMax(const QString& resultName) { return resultName + "_MAX"; } +QString createResultNameMax(const QString& resultName) { return resultName + "_MAX"; } +QString createResultNameSum(const QString& resultName) { return resultName + "_SUM"; } QString createResultNameMean(const QString& resultName) { return resultName + "_MEAN"; } QString createResultNameDev(const QString& resultName) { return resultName + "_DEV"; } QString createResultNameRange(const QString& resultName) { return resultName + "_RANGE"; } @@ -94,6 +95,7 @@ void RimEclipseStatisticsCaseEvaluator::evaluateForResults(const QList& statisticalResultNames.push_back(createResultNameMin(resultName)); statisticalResultNames.push_back(createResultNameMax(resultName)); + statisticalResultNames.push_back(createResultNameSum(resultName)); statisticalResultNames.push_back(createResultNameMean(resultName)); statisticalResultNames.push_back(createResultNameDev(resultName)); statisticalResultNames.push_back(createResultNameRange(resultName)); @@ -173,6 +175,7 @@ void RimEclipseStatisticsCaseEvaluator::evaluateForResults(const QList& statisticalResultNames[MIN] = createResultNameMin(resultName); statisticalResultNames[MAX] = createResultNameMax(resultName); + statisticalResultNames[SUM] = createResultNameSum(resultName); statisticalResultNames[RANGE] = createResultNameRange(resultName); statisticalResultNames[MEAN] = createResultNameMean(resultName); statisticalResultNames[STDEV] = createResultNameDev(resultName); @@ -219,7 +222,7 @@ void RimEclipseStatisticsCaseEvaluator::evaluateForResults(const QList& if (foundAnyValidValues) { - RigStatisticsMath::calculateBasicStatistics(values, &statParams[MIN], &statParams[MAX], &statParams[RANGE], &statParams[MEAN], &statParams[STDEV]); + RigStatisticsMath::calculateBasicStatistics(values, &statParams[MIN], &statParams[MAX], &statParams[SUM], &statParams[RANGE], &statParams[MEAN], &statParams[STDEV]); // Calculate percentiles if (m_statisticsConfig.m_calculatePercentiles ) diff --git a/ApplicationCode/ProjectDataModel/RimEclipseStatisticsCaseEvaluator.h b/ApplicationCode/ProjectDataModel/RimEclipseStatisticsCaseEvaluator.h index ca39be70cb..86549bac95 100644 --- a/ApplicationCode/ProjectDataModel/RimEclipseStatisticsCaseEvaluator.h +++ b/ApplicationCode/ProjectDataModel/RimEclipseStatisticsCaseEvaluator.h @@ -79,7 +79,7 @@ private: void addNamedResult(RigCaseCellResultsData* cellResults, RimDefines::ResultCatType resultType, const QString& resultName, size_t activeCellCount); void buildSourceMetaData(RifReaderInterface::PorosityModelResultType poroModel, RimDefines::ResultCatType resultType, const QString& resultName); - enum StatisticsParamType { MIN, MAX, RANGE, MEAN, STDEV, PMIN, PMID, PMAX, STAT_PARAM_COUNT }; + enum StatisticsParamType { MIN, MAX, SUM, RANGE, MEAN, STDEV, PMIN, PMID, PMAX, STAT_PARAM_COUNT }; private: std::vector m_sourceCases; diff --git a/ApplicationCode/ResultStatisticsCache/RigStatisticsMath.cpp b/ApplicationCode/ResultStatisticsCache/RigStatisticsMath.cpp index dcaac02f1f..3ad923335c 100644 --- a/ApplicationCode/ResultStatisticsCache/RigStatisticsMath.cpp +++ b/ApplicationCode/ResultStatisticsCache/RigStatisticsMath.cpp @@ -27,14 +27,14 @@ /// A function to do basic statistical calculations //-------------------------------------------------------------------------------------------------- -void RigStatisticsMath::calculateBasicStatistics(const std::vector& values, double* min, double* max, double* range, double* mean, double* dev) +void RigStatisticsMath::calculateBasicStatistics(const std::vector& values, double* min, double* max, double* sum, double* range, double* mean, double* dev) { double m_min(HUGE_VAL); double m_max(-HUGE_VAL); double m_mean(HUGE_VAL); double m_dev(HUGE_VAL); - double sum = 0.0; + double m_sum = 0.0; double sumSquared = 0.0; size_t validValueCount = 0; @@ -49,20 +49,20 @@ void RigStatisticsMath::calculateBasicStatistics(const std::vector& valu if (val < m_min) m_min = val; if (val > m_max) m_max = val; - sum += val; + m_sum += val; sumSquared += (val * val); } if (validValueCount > 0) { - m_mean = sum / validValueCount; + m_mean = m_sum / validValueCount; // http://en.wikipedia.org/wiki/Standard_deviation#Rapid_calculation_methods // Running standard deviation double s0 = static_cast(validValueCount); - double s1 = sum; + double s1 = m_sum; double s2 = sumSquared; m_dev = sqrt( (s0 * s2) - (s1 * s1) ) / s0; @@ -70,6 +70,7 @@ void RigStatisticsMath::calculateBasicStatistics(const std::vector& valu if (min) *min = m_min; if (max) *max = m_max; + if (sum) *sum = m_sum; if (range) *range = m_max - m_min; if (mean) *mean = m_mean; diff --git a/ApplicationCode/ResultStatisticsCache/RigStatisticsMath.h b/ApplicationCode/ResultStatisticsCache/RigStatisticsMath.h index 62a9cadbcf..7c299b380a 100644 --- a/ApplicationCode/ResultStatisticsCache/RigStatisticsMath.h +++ b/ApplicationCode/ResultStatisticsCache/RigStatisticsMath.h @@ -25,7 +25,7 @@ class RigStatisticsMath { public: - static void calculateBasicStatistics(const std::vector& values, double* min, double* max, double* range, double* mean, double* dev); + static void calculateBasicStatistics(const std::vector& values, double* min, double* max, double* sum, double* range, double* mean, double* dev); static std::vector calculateNearestRankPercentiles(const std::vector & inputValues, const std::vector& pValPositions); static std::vector calculateInterpolatedPercentiles(const std::vector & inputValues, const std::vector& pValPositions); }; diff --git a/ApplicationCode/UnitTests/RigStatisticsMath-Test.cpp b/ApplicationCode/UnitTests/RigStatisticsMath-Test.cpp index af9bc26f81..ca5f1aaab9 100644 --- a/ApplicationCode/UnitTests/RigStatisticsMath-Test.cpp +++ b/ApplicationCode/UnitTests/RigStatisticsMath-Test.cpp @@ -47,15 +47,15 @@ TEST(RigStatisticsMath, BasicTest) values.push_back(HUGE_VAL); values.push_back(-57020.4389966513000); - double min, max, range, mean, stdev; - RigStatisticsMath::calculateBasicStatistics(values, &min, &max, &range, &mean, &stdev); + double min, max, sum, range, mean, stdev; + RigStatisticsMath::calculateBasicStatistics(values, &min, &max, &sum, &range, &mean, &stdev); EXPECT_DOUBLE_EQ(-98649.8109937874000, min ); EXPECT_DOUBLE_EQ(99372.9362079615000 , max ); + EXPECT_DOUBLE_EQ(212079.46728689762 , sum ); EXPECT_DOUBLE_EQ(198022.7472017490000, range ); EXPECT_DOUBLE_EQ(16313.8051759152000 , mean ); EXPECT_DOUBLE_EQ(66104.391542887200 , stdev ); - } @@ -125,7 +125,7 @@ TEST(RigStatisticsMath, HistogramPercentiles) double min, max, range, mean, stdev; - RigStatisticsMath::calculateBasicStatistics(values, &min, &max, &range, &mean, &stdev); + RigStatisticsMath::calculateBasicStatistics(values, &min, &max, NULL, &range, &mean, &stdev); std::vector histogram; RigHistogramCalculator histCalc(min, max, 100, &histogram);