Skip to content

Commit af82135

Browse files
authored
Improve description of statistical formulas (#13567)
* Refactor and extend percentile calculation utilities Refactored percentile and quantile calculation logic for improved flexibility and maintainability. Added helper functions for quantile/percentile validation, introduced a new vector-based calculatePercentiles method, and updated calculateStatisticsCurves to use it. Refactored nearest-rank and interpolated percentile methods to accept percentiles as vectors and improved parameter validation. Enhanced documentation throughout and updated function signatures in the header for clarity.
1 parent e8cd19f commit af82135

File tree

4 files changed

+332
-126
lines changed

4 files changed

+332
-126
lines changed

ApplicationLibCode/ProjectDataModel/RimEclipseStatisticsCaseEvaluator.cpp

Lines changed: 29 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020

2121
#include "RimEclipseStatisticsCaseEvaluator.h"
2222

23+
#include "RiaLogging.h"
24+
2325
#include "RigCaseCellResultsData.h"
2426
#include "RigEclipseCaseData.h"
2527
#include "RigEclipseResultInfo.h"
@@ -262,13 +264,20 @@ void RimEclipseStatisticsCaseEvaluator::evaluateForResults( const QList<ResSpec>
262264
pValPoss.push_back( m_statisticsConfig.m_pMinPos );
263265
pValPoss.push_back( m_statisticsConfig.m_pMidPos );
264266
pValPoss.push_back( m_statisticsConfig.m_pMaxPos );
265-
std::vector<double> pVals =
267+
auto resultValues =
266268
RigStatisticsMath::calculateNearestRankPercentiles( values,
267269
pValPoss,
268270
RigStatisticsMath::PercentileStyle::SWITCHED );
269-
statParams[PMIN] = pVals[0];
270-
statParams[PMID] = pVals[1];
271-
statParams[PMAX] = pVals[2];
271+
if ( resultValues.has_value() )
272+
{
273+
statParams[PMIN] = ( *resultValues )[0];
274+
statParams[PMID] = ( *resultValues )[1];
275+
statParams[PMAX] = ( *resultValues )[2];
276+
}
277+
else
278+
{
279+
RiaLogging::warning( QString::fromStdString( resultValues.error() ) );
280+
}
272281
}
273282
else if ( m_statisticsConfig.m_pValMethod == RimEclipseStatisticsCase::PercentileCalcType::HISTOGRAM_ESTIMATED )
274283
{
@@ -285,17 +294,24 @@ void RimEclipseStatisticsCaseEvaluator::evaluateForResults( const QList<ResSpec>
285294
else if ( m_statisticsConfig.m_pValMethod ==
286295
RimEclipseStatisticsCase::PercentileCalcType::INTERPOLATED_OBSERVATION )
287296
{
288-
std::vector<double> pValPoss;
289-
pValPoss.push_back( m_statisticsConfig.m_pMinPos );
290-
pValPoss.push_back( m_statisticsConfig.m_pMidPos );
291-
pValPoss.push_back( m_statisticsConfig.m_pMaxPos );
292-
std::vector<double> pVals =
297+
std::vector<double> percentiles;
298+
percentiles.push_back( m_statisticsConfig.m_pMinPos );
299+
percentiles.push_back( m_statisticsConfig.m_pMidPos );
300+
percentiles.push_back( m_statisticsConfig.m_pMaxPos );
301+
auto resultValues =
293302
RigStatisticsMath::calculateInterpolatedPercentiles( values,
294-
pValPoss,
303+
percentiles,
295304
RigStatisticsMath::PercentileStyle::SWITCHED );
296-
statParams[PMIN] = pVals[0];
297-
statParams[PMID] = pVals[1];
298-
statParams[PMAX] = pVals[2];
305+
if ( resultValues.has_value() )
306+
{
307+
statParams[PMIN] = ( *resultValues )[0];
308+
statParams[PMID] = ( *resultValues )[1];
309+
statParams[PMAX] = ( *resultValues )[2];
310+
}
311+
else
312+
{
313+
RiaLogging::warning( QString::fromStdString( resultValues.error() ) );
314+
}
299315
}
300316
else
301317
{

0 commit comments

Comments
 (0)