mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
#723 Added sum to statistical output
This commit is contained in:
parent
3d27e57991
commit
74cc58e5f2
@ -528,7 +528,7 @@ void RimEclipseStatisticsCase::updateSelectionSummaryLabel()
|
||||
|
||||
html += "<p><b>Statistical variables to compute:</b></p>";
|
||||
html += "<p class=indent>";
|
||||
html += "Min, Max, Range, Mean, Std.dev"; ;
|
||||
html += "Min, Max, Sum, Range, Mean, Std.dev"; ;
|
||||
if (m_calculatePercentiles())
|
||||
{
|
||||
html += "<br>";
|
||||
|
@ -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<ResSpec>&
|
||||
|
||||
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<ResSpec>&
|
||||
|
||||
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<ResSpec>&
|
||||
|
||||
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 )
|
||||
|
@ -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<RimEclipseCase*> m_sourceCases;
|
||||
|
@ -27,14 +27,14 @@
|
||||
/// A function to do basic statistical calculations
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
|
||||
void RigStatisticsMath::calculateBasicStatistics(const std::vector<double>& values, double* min, double* max, double* range, double* mean, double* dev)
|
||||
void RigStatisticsMath::calculateBasicStatistics(const std::vector<double>& 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<double>& 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<double>(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<double>& 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;
|
||||
|
@ -25,7 +25,7 @@
|
||||
class RigStatisticsMath
|
||||
{
|
||||
public:
|
||||
static void calculateBasicStatistics(const std::vector<double>& values, double* min, double* max, double* range, double* mean, double* dev);
|
||||
static void calculateBasicStatistics(const std::vector<double>& values, double* min, double* max, double* sum, double* range, double* mean, double* dev);
|
||||
static std::vector<double> calculateNearestRankPercentiles(const std::vector<double> & inputValues, const std::vector<double>& pValPositions);
|
||||
static std::vector<double> calculateInterpolatedPercentiles(const std::vector<double> & inputValues, const std::vector<double>& pValPositions);
|
||||
};
|
||||
|
@ -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<size_t> histogram;
|
||||
RigHistogramCalculator histCalc(min, max, 100, &histogram);
|
||||
|
Loading…
Reference in New Issue
Block a user