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

View File

@ -32,18 +32,34 @@ void RimSummaryCaseCollection_TESTER::test1()
EnsembleParameter param;
param.type = EnsembleParameter::TYPE_NUMERIC;
size_t valueCount = countDistribution( gen );
double meanValue = meanDistribution( gen );
double range = variationDistribution( gen );
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 )
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 = valueDistribution( gen );
maxValue = std::max( maxValue, value );
minValue = std::min( minValue, value );
param.values.push_back( QVariant( value ) );
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 range = variationDistribution( gen );
std::uniform_real_distribution<double> valueDistribution( meanValue - range, meanValue + range );
for ( size_t j = 0; j < valueCount; ++j )
{
double value = valueDistribution( gen );
maxValue = std::max( maxValue, value );
minValue = std::min( minValue, value );
param.values.push_back( QVariant( value ) );
}
}
param.minValue = minValue;
@ -55,6 +71,7 @@ void RimSummaryCaseCollection_TESTER::test1()
param.name = QString( "%1" ).arg( i );
parameters.push_back( param );
}
size_t previousSize = parameters.size();
RimSummaryCaseCollection::sortByBinnedVariation( parameters );
size_t currentSize = parameters.size();
@ -63,7 +80,14 @@ void RimSummaryCaseCollection_TESTER::test1()
int currentVariation = (int)EnsembleParameter::HIGH_VARIATION;
for ( const EnsembleParameter& nameParamPair : parameters )
{
EXPECT_GE( nameParamPair.variationBin, (int)EnsembleParameter::LOW_VARIATION );
if ( nameParamPair.normalizedStdDeviation() == 0.0 )
{
EXPECT_EQ( nameParamPair.variationBin, (int)EnsembleParameter::NO_VARIATION );
}
else
{
EXPECT_GE( nameParamPair.variationBin, (int)EnsembleParameter::LOW_VARIATION );
}
EXPECT_LE( nameParamPair.variationBin, (int)EnsembleParameter::HIGH_VARIATION );
EXPECT_LE( nameParamPair.variationBin, currentVariation );
currentVariation = nameParamPair.variationBin;