Calculation of p10/p90 : Add more tests and treat all computed values equally

This commit is contained in:
Magne Sjaastad 2020-12-18 07:33:23 +01:00
parent b8b7ee234d
commit 4dfcc7e45b
4 changed files with 76 additions and 3 deletions

View File

@ -244,7 +244,7 @@ void RifReaderEnsembleStatisticsRft::calculateStatistics( const RifEclipseRftAdd
if ( p10 != HUGE_VAL ) m_cachedValues[p10Address].push_back( p10 );
if ( p50 != HUGE_VAL ) m_cachedValues[p50Address].push_back( p50 );
if ( p90 != HUGE_VAL ) m_cachedValues[p90Address].push_back( p90 );
m_cachedValues[meanAddress].push_back( mean );
if ( mean != HUGE_VAL ) m_cachedValues[meanAddress].push_back( mean );
}
}
}

View File

@ -196,7 +196,7 @@ void RimEnsembleStatisticsCase::calculate( const std::vector<RimSummaryCase*> su
if ( p10 != HUGE_VAL ) m_p10Data.push_back( p10 );
if ( p50 != HUGE_VAL ) m_p50Data.push_back( p50 );
if ( p90 != HUGE_VAL ) m_p90Data.push_back( p90 );
m_meanData.push_back( mean );
if ( mean != HUGE_VAL ) m_meanData.push_back( mean );
}
}

View File

@ -95,6 +95,8 @@ void RigStatisticsMath::calculateStatisticsCurves( const std::vector<double>& va
{
CVF_ASSERT( p10 && p50 && p90 && mean );
if ( values.empty() ) return;
enum PValue
{
P10,

View File

@ -219,4 +219,75 @@ TEST( RigStatisticsMath, Accumulators )
EXPECT_DOUBLE_EQ( sum, acc.valueSum );
EXPECT_EQ( 4u, acc.sampleCount );
}
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
TEST( RigStatisticsMath, calculateStatisticsCurves )
{
{
std::vector<double> values;
double mean = HUGE_VAL;
double p10 = HUGE_VAL;
double p50 = HUGE_VAL;
double p90 = HUGE_VAL;
RigStatisticsMath::calculateStatisticsCurves( values, &p10, &p50, &p90, &mean );
EXPECT_TRUE( std::isinf( p10 ) );
EXPECT_TRUE( std::isinf( p50 ) );
EXPECT_TRUE( std::isinf( p90 ) );
EXPECT_TRUE( std::isinf( mean ) );
}
{
std::vector<double> values{
1.0,
1.0,
1.0,
};
double mean = HUGE_VAL;
double p10 = HUGE_VAL;
double p50 = HUGE_VAL;
double p90 = HUGE_VAL;
// If we have few samples, P10 and P90 cannot be computed
RigStatisticsMath::calculateStatisticsCurves( values, &p10, &p50, &p90, &mean );
EXPECT_TRUE( std::isinf( p10 ) );
EXPECT_TRUE( std::isinf( p90 ) );
EXPECT_DOUBLE_EQ( 1.0, p50 );
EXPECT_DOUBLE_EQ( 1.0, mean );
}
{
std::vector<double> values{ 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 2.0, 5.0, 10.0 };
double mean = HUGE_VAL;
double p10 = HUGE_VAL;
double p50 = HUGE_VAL;
double p90 = HUGE_VAL;
RigStatisticsMath::calculateStatisticsCurves( values, &p10, &p50, &p90, &mean );
EXPECT_DOUBLE_EQ( 1.0, p10 );
EXPECT_DOUBLE_EQ( 1.0, p50 );
EXPECT_FALSE( std::isinf( p90 ) );
EXPECT_FALSE( std::isinf( mean ) );
}
{
std::vector<double> values{ 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0 };
double mean = HUGE_VAL;
double p10 = HUGE_VAL;
double p50 = HUGE_VAL;
double p90 = HUGE_VAL;
RigStatisticsMath::calculateStatisticsCurves( values, &p10, &p50, &p90, &mean );
EXPECT_DOUBLE_EQ( 1.0, p10 );
EXPECT_DOUBLE_EQ( 1.0, p50 );
EXPECT_DOUBLE_EQ( 1.0, p90 );
EXPECT_DOUBLE_EQ( 1.0, mean );
}
}