mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
#6201 Select parameters that go into matrix plot
This commit is contained in:
parent
a9b6c1bd7b
commit
ad59f79dea
@ -285,6 +285,23 @@ std::set<EnsembleParameter> RimAbstractCorrelationPlot::ensembleParameters()
|
||||
return ensembleParms;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
std::set<EnsembleParameter> RimAbstractCorrelationPlot::variationSortedEnsembleParameters()
|
||||
{
|
||||
std::set<EnsembleParameter> ensembleParms;
|
||||
|
||||
RiaSummaryCurveDefinitionAnalyser* analyserOfSelectedCurveDefs = getOrCreateSelectedCurveDefAnalyser();
|
||||
|
||||
for ( RimSummaryCaseCollection* ensemble : analyserOfSelectedCurveDefs->m_ensembles )
|
||||
{
|
||||
std::vector<EnsembleParameter> parameters = ensemble->variationSortedEnsembleParameters();
|
||||
ensembleParms.insert( parameters.begin(), parameters.end() );
|
||||
}
|
||||
return ensembleParms;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
|
@ -73,6 +73,7 @@ protected:
|
||||
|
||||
std::set<RifEclipseSummaryAddress> addresses();
|
||||
std::set<EnsembleParameter> ensembleParameters();
|
||||
std::set<EnsembleParameter> variationSortedEnsembleParameters();
|
||||
EnsembleParameter ensembleParameter( const QString& ensembleParameterName );
|
||||
|
||||
// RimViewWindow overrides
|
||||
|
@ -41,6 +41,7 @@
|
||||
|
||||
#include "cafPdmUiComboBoxEditor.h"
|
||||
#include "cafPdmUiTreeOrdering.h"
|
||||
#include "cafPdmUiTreeSelectionEditor.h"
|
||||
|
||||
#include "cvfScalarMapper.h"
|
||||
|
||||
@ -164,6 +165,10 @@ RimCorrelationMatrixPlot::RimCorrelationMatrixPlot()
|
||||
CAF_PDM_InitField( &m_showOnlyTopNCorrelations, "ShowOnlyTopNCorrelations", false, "Show Only Top Correlations", "", "", "" );
|
||||
CAF_PDM_InitField( &m_topNFilterCount, "TopNFilterCount", (size_t)15, "Number rows/columns", "", "", "" );
|
||||
CAF_PDM_InitFieldNoDefault( &m_legendConfig, "LegendConfig", "", "", "", "" );
|
||||
CAF_PDM_InitFieldNoDefault( &m_selectedParametersList, "SelectedParameters", "Select Parameters", "", "", "" );
|
||||
m_selectedParametersList.uiCapability()->setUiLabelPosition( caf::PdmUiItemInfo::TOP );
|
||||
m_selectedParametersList.uiCapability()->setUiEditorTypeName( caf::PdmUiTreeSelectionEditor::uiEditorTypeName() );
|
||||
|
||||
m_legendConfig = new RimRegularLegendConfig();
|
||||
m_legendConfig->setAutomaticRanges( -1.0, 1.0, -1.0, 1.0 );
|
||||
m_legendConfig->setColorLegend( RimRegularLegendConfig::mapToColorLegend( RimRegularLegendConfig::CORRELATION ) );
|
||||
@ -214,6 +219,22 @@ RimRegularLegendConfig* RimCorrelationMatrixPlot::legendConfig()
|
||||
return m_legendConfig();
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RimCorrelationMatrixPlot::selectAllParameters()
|
||||
{
|
||||
m_selectedParametersList.v().clear();
|
||||
std::set<EnsembleParameter> params = variationSortedEnsembleParameters();
|
||||
for ( auto param : params )
|
||||
{
|
||||
if ( !m_excludeParametersWithoutVariation() || param.variationBin > EnsembleParameter::NO_VARIATION )
|
||||
{
|
||||
m_selectedParametersList.v().push_back( param.name );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@ -224,11 +245,16 @@ void RimCorrelationMatrixPlot::fieldChangedByUi( const caf::PdmFieldHandle* chan
|
||||
RimAbstractCorrelationPlot::fieldChangedByUi( changedField, oldValue, newValue );
|
||||
if ( changedField == &m_correlationFactor || changedField == &m_showAbsoluteValues ||
|
||||
changedField == &m_sortByValues || changedField == &m_sortByAbsoluteValues ||
|
||||
changedField == &m_showOnlyTopNCorrelations || changedField == &m_topNFilterCount )
|
||||
changedField == &m_showOnlyTopNCorrelations || changedField == &m_topNFilterCount ||
|
||||
changedField == &m_excludeParametersWithoutVariation || changedField == &m_selectedParametersList )
|
||||
{
|
||||
this->updateLegend();
|
||||
this->loadDataAndUpdate();
|
||||
this->updateConnectedEditors();
|
||||
if ( changedField == &m_excludeParametersWithoutVariation )
|
||||
{
|
||||
selectAllParameters();
|
||||
}
|
||||
updateLegend();
|
||||
loadDataAndUpdate();
|
||||
updateConnectedEditors();
|
||||
}
|
||||
}
|
||||
|
||||
@ -240,6 +266,7 @@ void RimCorrelationMatrixPlot::defineUiOrdering( QString uiConfigName, caf::PdmU
|
||||
caf::PdmUiGroup* correlationGroup = uiOrdering.addNewGroup( "Correlation Factor Settings" );
|
||||
correlationGroup->add( &m_correlationFactor );
|
||||
correlationGroup->add( &m_excludeParametersWithoutVariation );
|
||||
correlationGroup->add( &m_selectedParametersList );
|
||||
correlationGroup->add( &m_showAbsoluteValues );
|
||||
correlationGroup->add( &m_sortByValues );
|
||||
if ( !m_showAbsoluteValues() && m_sortByValues() != Sorting::NO_SORTING )
|
||||
@ -290,6 +317,17 @@ QList<caf::PdmOptionItemInfo>
|
||||
QList<caf::PdmOptionItemInfo> options =
|
||||
RimAbstractCorrelationPlot::calculateValueOptions( fieldNeedingOptions, useOptionsOnly );
|
||||
|
||||
if ( fieldNeedingOptions == &m_selectedParametersList )
|
||||
{
|
||||
std::set<EnsembleParameter> params = variationSortedEnsembleParameters();
|
||||
for ( auto param : params )
|
||||
{
|
||||
if ( !m_excludeParametersWithoutVariation() || param.variationBin > EnsembleParameter::NO_VARIATION )
|
||||
{
|
||||
options.push_back( caf::PdmOptionItemInfo( param.uiName(), param.name ) );
|
||||
}
|
||||
}
|
||||
}
|
||||
return options;
|
||||
}
|
||||
|
||||
@ -439,26 +477,32 @@ void RimCorrelationMatrixPlot::createMatrix()
|
||||
|
||||
std::vector<CorrelationMatrixColumn> correlationMatrixColumns;
|
||||
|
||||
for ( EnsembleParameter parameter : ensembleParameters() )
|
||||
for ( QString paramName : m_selectedParametersList() )
|
||||
{
|
||||
if ( parameter.isNumeric() && parameter.isValid() &&
|
||||
( !m_excludeParametersWithoutVariation || parameter.normalizedStdDeviation() > 1.0e-5 ) )
|
||||
EnsembleParameter parameter;
|
||||
|
||||
bool anyValidResults = false;
|
||||
std::vector<double> correlations;
|
||||
std::vector<RiaSummaryCurveDefinition> selectedCurveDefs;
|
||||
|
||||
for ( auto curveDef : curveDefs )
|
||||
{
|
||||
bool anyValidResults = false;
|
||||
std::vector<double> correlations;
|
||||
std::vector<RiaSummaryCurveDefinition> selectedCurveDefs;
|
||||
auto ensemble = curveDef.ensemble();
|
||||
auto address = curveDef.summaryAddress();
|
||||
|
||||
for ( auto curveDef : curveDefs )
|
||||
if ( ensemble )
|
||||
{
|
||||
double correlation = std::numeric_limits<double>::infinity();
|
||||
std::vector<double> caseValuesAtTimestep;
|
||||
std::vector<double> parameterValues;
|
||||
|
||||
auto ensemble = curveDef.ensemble();
|
||||
auto address = curveDef.summaryAddress();
|
||||
|
||||
if ( ensemble )
|
||||
if ( !parameter.isValid() )
|
||||
{
|
||||
std::vector<double> caseValuesAtTimestep;
|
||||
std::vector<double> parameterValues;
|
||||
parameter = ensemble->ensembleParameter( paramName );
|
||||
}
|
||||
|
||||
if ( parameter.isValid() )
|
||||
{
|
||||
double correlation = std::numeric_limits<double>::infinity();
|
||||
|
||||
for ( size_t caseIdx = 0u; caseIdx < ensemble->allSummaryCases().size(); ++caseIdx )
|
||||
{
|
||||
@ -508,15 +552,15 @@ void RimCorrelationMatrixPlot::createMatrix()
|
||||
if ( m_showAbsoluteValues() ) correlation = std::abs( correlation );
|
||||
anyValidResults = true;
|
||||
}
|
||||
correlations.push_back( correlation );
|
||||
selectedCurveDefs.push_back( curveDef );
|
||||
}
|
||||
correlations.push_back( correlation );
|
||||
selectedCurveDefs.push_back( curveDef );
|
||||
}
|
||||
if ( anyValidResults )
|
||||
{
|
||||
correlationMatrixColumns.push_back( CorrelationMatrixColumn( parameter, correlations, selectedCurveDefs ) );
|
||||
}
|
||||
}
|
||||
if ( anyValidResults )
|
||||
{
|
||||
correlationMatrixColumns.push_back( CorrelationMatrixColumn( parameter, correlations, selectedCurveDefs ) );
|
||||
}
|
||||
}
|
||||
|
||||
eraseInvalidEntries( correlationMatrixColumns );
|
||||
|
@ -57,6 +57,7 @@ public:
|
||||
bool showAbsoluteValues() const;
|
||||
bool sortByAbsoluteValues() const;
|
||||
RimRegularLegendConfig* legendConfig();
|
||||
void selectAllParameters();
|
||||
|
||||
signals:
|
||||
void matrixCellSelected( const EnsembleParameter&, const RiaSummaryCurveDefinition& );
|
||||
@ -90,6 +91,7 @@ private:
|
||||
caf::PdmField<bool> m_excludeParametersWithoutVariation;
|
||||
caf::PdmField<bool> m_showOnlyTopNCorrelations;
|
||||
caf::PdmField<size_t> m_topNFilterCount;
|
||||
caf::PdmField<std::vector<QString>> m_selectedParametersList;
|
||||
|
||||
caf::PdmChildField<RimRegularLegendConfig*> m_legendConfig;
|
||||
|
||||
|
@ -71,6 +71,7 @@ RimCorrelationMatrixPlot* RimCorrelationPlotCollection::createCorrelationMatrixP
|
||||
RimCorrelationMatrixPlot* plot = new RimCorrelationMatrixPlot();
|
||||
plot->setAsPlotMdiWindow();
|
||||
if ( defaultToFirstEnsembleField ) applyFirstEnsembleFieldAddressesToPlot( plot );
|
||||
plot->selectAllParameters();
|
||||
|
||||
m_correlationPlots.push_back( plot );
|
||||
|
||||
@ -99,7 +100,7 @@ RimCorrelationReportPlot*
|
||||
RimCorrelationReportPlot* report = new RimCorrelationReportPlot;
|
||||
report->setAsPlotMdiWindow();
|
||||
if ( defaultToFirstEnsembleFopt ) applyFirstEnsembleFieldAddressesToReport( report, "FOPT" );
|
||||
|
||||
report->matrixPlot()->selectAllParameters();
|
||||
m_correlationReports.push_back( report );
|
||||
return report;
|
||||
}
|
||||
|
@ -104,14 +104,19 @@ bool EnsembleParameter::operator<( const EnsembleParameter& other ) const
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RimSummaryCaseCollection::sortByBinnedVariation( std::vector<EnsembleParameter>& parameterVector )
|
||||
{
|
||||
double minStdDev = std::numeric_limits<double>::infinity();
|
||||
double maxStdDev = 0.0;
|
||||
const double eps = 1.0e-8;
|
||||
double minStdDev = std::numeric_limits<double>::infinity();
|
||||
double maxStdDev = 0.0;
|
||||
for ( const auto& paramPair : parameterVector )
|
||||
{
|
||||
minStdDev = std::min( minStdDev, paramPair.normalizedStdDeviation() );
|
||||
maxStdDev = std::max( maxStdDev, paramPair.normalizedStdDeviation() );
|
||||
double stdDev = paramPair.normalizedStdDeviation();
|
||||
if ( stdDev > eps )
|
||||
{
|
||||
minStdDev = std::min( minStdDev, stdDev );
|
||||
maxStdDev = std::max( maxStdDev, stdDev );
|
||||
}
|
||||
}
|
||||
if ( ( maxStdDev - minStdDev ) < 1.0e-8 )
|
||||
if ( ( maxStdDev - minStdDev ) <= eps )
|
||||
{
|
||||
return;
|
||||
}
|
||||
@ -119,6 +124,7 @@ void RimSummaryCaseCollection::sortByBinnedVariation( std::vector<EnsembleParame
|
||||
double delta = ( maxStdDev - minStdDev ) / EnsembleParameter::NR_OF_VARIATION_BINS;
|
||||
|
||||
std::vector<double> bins;
|
||||
bins.push_back( eps );
|
||||
for ( int i = 0; i < EnsembleParameter::NR_OF_VARIATION_BINS - 1; ++i )
|
||||
{
|
||||
bins.push_back( minStdDev + ( i + 1 ) * delta );
|
||||
@ -126,7 +132,7 @@ void RimSummaryCaseCollection::sortByBinnedVariation( std::vector<EnsembleParame
|
||||
|
||||
for ( EnsembleParameter& nameParamPair : parameterVector )
|
||||
{
|
||||
int binNumber = 0;
|
||||
int binNumber = -1;
|
||||
for ( double bin : bins )
|
||||
{
|
||||
if ( nameParamPair.normalizedStdDeviation() >= bin )
|
||||
@ -157,9 +163,14 @@ QString EnsembleParameter::uiName() const
|
||||
{
|
||||
switch ( variationBin )
|
||||
{
|
||||
case NO_VARIATION:
|
||||
variationString = QString( " (No variation)" );
|
||||
break;
|
||||
case LOW_VARIATION:
|
||||
variationString = QString( " (Low variation)" );
|
||||
break;
|
||||
case MEDIUM_VARIATION:
|
||||
variationString = QString( " (Medium variation)" );
|
||||
break;
|
||||
case HIGH_VARIATION:
|
||||
variationString = QString( " (High variation)" );
|
||||
@ -421,8 +432,11 @@ RifReaderRftInterface* RimSummaryCaseCollection::rftStatisticsReader()
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
const std::vector<EnsembleParameter>& RimSummaryCaseCollection::variationSortedEnsembleParameters() const
|
||||
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;
|
||||
@ -441,7 +455,11 @@ const std::vector<EnsembleParameter>& RimSummaryCaseCollection::variationSortedE
|
||||
m_cachedSortedEnsembleParameters.reserve( paramSet.size() );
|
||||
for ( const QString& parameterName : paramSet )
|
||||
{
|
||||
m_cachedSortedEnsembleParameters.push_back( this->createEnsembleParameter( parameterName ) );
|
||||
auto ensembleParameter = this->createEnsembleParameter( parameterName );
|
||||
if ( !excludeNoVariation || ensembleParameter.normalizedStdDeviation() > eps )
|
||||
{
|
||||
m_cachedSortedEnsembleParameters.push_back( ensembleParameter );
|
||||
}
|
||||
}
|
||||
RimSummaryCaseCollection::sortByBinnedVariation( m_cachedSortedEnsembleParameters );
|
||||
|
||||
|
@ -51,7 +51,8 @@ public:
|
||||
};
|
||||
enum Bins
|
||||
{
|
||||
LOW_VARIATION,
|
||||
NO_VARIATION = -1,
|
||||
LOW_VARIATION = 0,
|
||||
MEDIUM_VARIATION,
|
||||
HIGH_VARIATION,
|
||||
NR_OF_VARIATION_BINS
|
||||
@ -109,7 +110,7 @@ public:
|
||||
void setEnsembleId( int ensembleId );
|
||||
int ensembleId() const;
|
||||
|
||||
const std::vector<EnsembleParameter>& variationSortedEnsembleParameters() const;
|
||||
const std::vector<EnsembleParameter>& variationSortedEnsembleParameters( bool excludeNoVariation = false ) const;
|
||||
std::vector<EnsembleParameter> alphabeticEnsembleParameters() const;
|
||||
|
||||
EnsembleParameter ensembleParameter( const QString& paramName ) const;
|
||||
|
Loading…
Reference in New Issue
Block a user