mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
Calculation of p10/p90 : Add more tests and treat all computed values equally
This commit is contained in:
parent
b8b7ee234d
commit
4dfcc7e45b
@ -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 );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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 );
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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,
|
||||
|
@ -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 );
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user