From 97114f45548a43c93c131c02e220fcfd3b3e0984 Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Mon, 11 Jan 2021 15:44:27 +0100 Subject: [PATCH] #7190 Correlation Parameters : Fix cache inconsistencies --- .../Summary/RimSummaryCaseCollection.cpp | 49 ++++++++++++------- .../Summary/RimSummaryCaseCollection.h | 2 +- 2 files changed, 32 insertions(+), 19 deletions(-) diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCaseCollection.cpp b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCaseCollection.cpp index 4eeb2441ca..9af8d43d5e 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCaseCollection.cpp +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCaseCollection.cpp @@ -452,36 +452,49 @@ RifReaderRftInterface* RimSummaryCaseCollection::rftStatisticsReader() //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -const std::vector& - RimSummaryCaseCollection::variationSortedEnsembleParameters( bool excludeNoVariation ) const +std::vector RimSummaryCaseCollection::variationSortedEnsembleParameters( bool excludeNoVariation ) const { - if ( m_cachedSortedEnsembleParameters.size() ) return m_cachedSortedEnsembleParameters; - - std::set paramSet; - for ( RimSummaryCase* rimCase : this->allSummaryCases() ) + if ( m_cachedSortedEnsembleParameters.empty() ) { - if ( rimCase->caseRealizationParameters() != nullptr ) + std::set paramSet; + for ( RimSummaryCase* rimCase : this->allSummaryCases() ) { - auto ps = rimCase->caseRealizationParameters()->parameters(); - for ( auto p : ps ) + if ( rimCase->caseRealizationParameters() != nullptr ) { - paramSet.insert( p.first ); + auto ps = rimCase->caseRealizationParameters()->parameters(); + for ( const auto& p : ps ) + { + paramSet.insert( p.first ); + } } } - } - m_cachedSortedEnsembleParameters.reserve( paramSet.size() ); - for ( const QString& parameterName : paramSet ) - { - auto ensembleParameter = this->createEnsembleParameter( parameterName ); - if ( !excludeNoVariation || ensembleParameter.normalizedStdDeviation() != 0.0 ) + m_cachedSortedEnsembleParameters.reserve( paramSet.size() ); + for ( const QString& parameterName : paramSet ) { + auto ensembleParameter = this->createEnsembleParameter( parameterName ); m_cachedSortedEnsembleParameters.push_back( ensembleParameter ); } + RimSummaryCaseCollection::sortByBinnedVariation( m_cachedSortedEnsembleParameters ); } - RimSummaryCaseCollection::sortByBinnedVariation( m_cachedSortedEnsembleParameters ); - return m_cachedSortedEnsembleParameters; + if ( !excludeNoVariation ) + { + return m_cachedSortedEnsembleParameters; + } + else + { + const double epsilon = 1e-9; + std::vector parametersWithVariation; + for ( const auto& p : m_cachedSortedEnsembleParameters ) + { + if ( std::abs( p.normalizedStdDeviation() ) > epsilon ) + { + parametersWithVariation.push_back( p ); + } + } + return parametersWithVariation; + } } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCaseCollection.h b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCaseCollection.h index e4338b64c4..4d4f68eee5 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCaseCollection.h +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCaseCollection.h @@ -117,7 +117,7 @@ public: int ensembleId() const; bool hasEnsembleParameters() const; - const std::vector& variationSortedEnsembleParameters( bool excludeNoVariation = false ) const; + std::vector variationSortedEnsembleParameters( bool excludeNoVariation = false ) const; std::vector> correlationSortedEnsembleParameters( const RifEclipseSummaryAddress& address ) const; std::vector>