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);