Remove superfluous use of epsilon in EnsembleParameter and fix test

This commit is contained in:
Gaute Lindkvist 2020-07-28 09:25:48 +02:00
parent ee5c058634
commit 447d335fc8
2 changed files with 43 additions and 22 deletions

View File

@ -104,19 +104,18 @@ bool EnsembleParameter::operator<( const EnsembleParameter& other ) const
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RimSummaryCaseCollection::sortByBinnedVariation( std::vector<EnsembleParameter>& parameterVector ) void RimSummaryCaseCollection::sortByBinnedVariation( std::vector<EnsembleParameter>& parameterVector )
{ {
const double eps = 1.0e-8;
double minStdDev = std::numeric_limits<double>::infinity(); double minStdDev = std::numeric_limits<double>::infinity();
double maxStdDev = 0.0; double maxStdDev = 0.0;
for ( const auto& paramPair : parameterVector ) for ( const auto& paramPair : parameterVector )
{ {
double stdDev = paramPair.normalizedStdDeviation(); double stdDev = paramPair.normalizedStdDeviation();
if ( stdDev > eps ) if ( stdDev != 0.0 )
{ {
minStdDev = std::min( minStdDev, stdDev ); minStdDev = std::min( minStdDev, stdDev );
maxStdDev = std::max( maxStdDev, stdDev ); maxStdDev = std::max( maxStdDev, stdDev );
} }
} }
if ( ( maxStdDev - minStdDev ) <= eps ) if ( ( maxStdDev - minStdDev ) <= 0.0 )
{ {
return; return;
} }
@ -124,7 +123,7 @@ void RimSummaryCaseCollection::sortByBinnedVariation( std::vector<EnsembleParame
double delta = ( maxStdDev - minStdDev ) / EnsembleParameter::NR_OF_VARIATION_BINS; double delta = ( maxStdDev - minStdDev ) / EnsembleParameter::NR_OF_VARIATION_BINS;
std::vector<double> bins; std::vector<double> bins;
bins.push_back( eps ); bins.push_back( 0.0 );
for ( int i = 0; i < EnsembleParameter::NR_OF_VARIATION_BINS - 1; ++i ) for ( int i = 0; i < EnsembleParameter::NR_OF_VARIATION_BINS - 1; ++i )
{ {
bins.push_back( minStdDev + ( i + 1 ) * delta ); bins.push_back( minStdDev + ( i + 1 ) * delta );
@ -135,7 +134,7 @@ void RimSummaryCaseCollection::sortByBinnedVariation( std::vector<EnsembleParame
int binNumber = -1; int binNumber = -1;
for ( double bin : bins ) for ( double bin : bins )
{ {
if ( nameParamPair.normalizedStdDeviation() >= bin ) if ( nameParamPair.normalizedStdDeviation() > bin )
{ {
binNumber++; binNumber++;
} }
@ -435,8 +434,6 @@ RifReaderRftInterface* RimSummaryCaseCollection::rftStatisticsReader()
const std::vector<EnsembleParameter>& const std::vector<EnsembleParameter>&
RimSummaryCaseCollection::variationSortedEnsembleParameters( bool excludeNoVariation ) const RimSummaryCaseCollection::variationSortedEnsembleParameters( bool excludeNoVariation ) const
{ {
const double eps = 1.0e-8;
if ( m_cachedSortedEnsembleParameters.size() ) return m_cachedSortedEnsembleParameters; if ( m_cachedSortedEnsembleParameters.size() ) return m_cachedSortedEnsembleParameters;
std::set<QString> paramSet; std::set<QString> paramSet;
@ -456,7 +453,7 @@ const std::vector<EnsembleParameter>&
for ( const QString& parameterName : paramSet ) for ( const QString& parameterName : paramSet )
{ {
auto ensembleParameter = this->createEnsembleParameter( parameterName ); auto ensembleParameter = this->createEnsembleParameter( parameterName );
if ( !excludeNoVariation || ensembleParameter.normalizedStdDeviation() > eps ) if ( !excludeNoVariation || ensembleParameter.normalizedStdDeviation() != 0.0 )
{ {
m_cachedSortedEnsembleParameters.push_back( ensembleParameter ); m_cachedSortedEnsembleParameters.push_back( ensembleParameter );
} }

View File

@ -33,11 +33,26 @@ void RimSummaryCaseCollection_TESTER::test1()
param.type = EnsembleParameter::TYPE_NUMERIC; param.type = EnsembleParameter::TYPE_NUMERIC;
size_t valueCount = countDistribution( gen ); size_t valueCount = countDistribution( gen );
double maxValue = -std::numeric_limits<double>::max();
double minValue = std::numeric_limits<double>::max();
// Add a few with zero variation
if ( i % 100 )
{
double value = (double)i;
maxValue = value;
minValue = value;
for ( size_t j = 0; j < valueCount; ++j )
{
param.values.push_back( value );
}
}
else
{
double meanValue = meanDistribution( gen ); double meanValue = meanDistribution( gen );
double range = variationDistribution( gen ); double range = variationDistribution( gen );
std::uniform_real_distribution<double> valueDistribution( meanValue - range, meanValue + range ); std::uniform_real_distribution<double> valueDistribution( meanValue - range, meanValue + range );
double maxValue = -std::numeric_limits<double>::max();
double minValue = std::numeric_limits<double>::max();
for ( size_t j = 0; j < valueCount; ++j ) for ( size_t j = 0; j < valueCount; ++j )
{ {
double value = valueDistribution( gen ); double value = valueDistribution( gen );
@ -45,6 +60,7 @@ void RimSummaryCaseCollection_TESTER::test1()
minValue = std::min( minValue, value ); minValue = std::min( minValue, value );
param.values.push_back( QVariant( value ) ); param.values.push_back( QVariant( value ) );
} }
}
param.minValue = minValue; param.minValue = minValue;
param.maxValue = maxValue; param.maxValue = maxValue;
@ -55,6 +71,7 @@ void RimSummaryCaseCollection_TESTER::test1()
param.name = QString( "%1" ).arg( i ); param.name = QString( "%1" ).arg( i );
parameters.push_back( param ); parameters.push_back( param );
} }
size_t previousSize = parameters.size(); size_t previousSize = parameters.size();
RimSummaryCaseCollection::sortByBinnedVariation( parameters ); RimSummaryCaseCollection::sortByBinnedVariation( parameters );
size_t currentSize = parameters.size(); size_t currentSize = parameters.size();
@ -62,8 +79,15 @@ void RimSummaryCaseCollection_TESTER::test1()
int currentVariation = (int)EnsembleParameter::HIGH_VARIATION; int currentVariation = (int)EnsembleParameter::HIGH_VARIATION;
for ( const EnsembleParameter& nameParamPair : parameters ) for ( const EnsembleParameter& nameParamPair : parameters )
{
if ( nameParamPair.normalizedStdDeviation() == 0.0 )
{
EXPECT_EQ( nameParamPair.variationBin, (int)EnsembleParameter::NO_VARIATION );
}
else
{ {
EXPECT_GE( nameParamPair.variationBin, (int)EnsembleParameter::LOW_VARIATION ); EXPECT_GE( nameParamPair.variationBin, (int)EnsembleParameter::LOW_VARIATION );
}
EXPECT_LE( nameParamPair.variationBin, (int)EnsembleParameter::HIGH_VARIATION ); EXPECT_LE( nameParamPair.variationBin, (int)EnsembleParameter::HIGH_VARIATION );
EXPECT_LE( nameParamPair.variationBin, currentVariation ); EXPECT_LE( nameParamPair.variationBin, currentVariation );
currentVariation = nameParamPair.variationBin; currentVariation = nameParamPair.variationBin;