mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
#7524 Correlation plot filter
This commit is contained in:
parent
5d45a8cec9
commit
c5ac85953b
@ -1,3 +1,21 @@
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Copyright (C) 2020 Equinor ASA
|
||||
//
|
||||
// ResInsight is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
// FITNESS FOR A PARTICULAR PURPOSE.
|
||||
//
|
||||
// See the GNU General Public License at <http://www.gnu.org/licenses/gpl.html>
|
||||
// for more details.
|
||||
//
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include "RimAbstractCorrelationPlot.h"
|
||||
|
||||
#include "RiaPreferences.h"
|
||||
@ -7,18 +25,22 @@
|
||||
#include "RifSummaryReaderInterface.h"
|
||||
|
||||
#include "RimAnalysisPlotDataEntry.h"
|
||||
#include "RimEnsembleCurveFilter.h"
|
||||
#include "RimEnsembleCurveFilterCollection.h"
|
||||
#include "RimEnsembleCurveSet.h"
|
||||
#include "RimProject.h"
|
||||
#include "RimSummaryAddress.h"
|
||||
#include "RimSummaryCase.h"
|
||||
#include "RimSummaryCaseCollection.h"
|
||||
|
||||
#include "RiuPlotMainWindowTools.h"
|
||||
#include "RiuQwtPlotWidget.h"
|
||||
#include "RiuSummaryVectorSelectionDialog.h"
|
||||
|
||||
#include "cafPdmUiComboBoxEditor.h"
|
||||
#include "cafPdmUiLineEditor.h"
|
||||
#include "cafPdmUiPushButtonEditor.h"
|
||||
#include "cafPdmUiToolButtonEditor.h"
|
||||
|
||||
CAF_PDM_ABSTRACT_SOURCE_INIT( RimAbstractCorrelationPlot, "AbstractCorrelationPlot" );
|
||||
|
||||
@ -36,9 +58,9 @@ RimAbstractCorrelationPlot::RimAbstractCorrelationPlot()
|
||||
m_selectedVarsUiField.uiCapability()->setUiReadOnly( true );
|
||||
m_selectedVarsUiField.uiCapability()->setUiEditorTypeName( caf::PdmUiLineEditor::uiEditorTypeName() );
|
||||
|
||||
CAF_PDM_InitFieldNoDefault( &m_analysisPlotDataSelection, "AnalysisPlotData", "", "", "", "" );
|
||||
m_analysisPlotDataSelection.uiCapability()->setUiTreeChildrenHidden( true );
|
||||
m_analysisPlotDataSelection.uiCapability()->setUiTreeHidden( true );
|
||||
CAF_PDM_InitFieldNoDefault( &m_dataSources, "AnalysisPlotData", "", "", "", "" );
|
||||
m_dataSources.uiCapability()->setUiTreeChildrenHidden( true );
|
||||
m_dataSources.uiCapability()->setUiTreeHidden( true );
|
||||
|
||||
CAF_PDM_InitFieldNoDefault( &m_pushButtonSelectSummaryAddress, "SelectAddress", "", "", "", "" );
|
||||
caf::PdmUiPushButtonEditor::configureEditorForField( &m_pushButtonSelectSummaryAddress );
|
||||
@ -61,6 +83,12 @@ RimAbstractCorrelationPlot::RimAbstractCorrelationPlot()
|
||||
m_axisValueFontSize = caf::FontTools::RelativeSize::XSmall;
|
||||
|
||||
m_legendFontSize = caf::FontTools::RelativeSize::XSmall;
|
||||
|
||||
CAF_PDM_InitField( &m_useCaseFilter, "UseCaseFilter", false, "Use Ensemble Filter", "", "", "" );
|
||||
CAF_PDM_InitFieldNoDefault( &m_curveSetForFiltering, "CurveSetForFiltering", " Ensemble Filter", "", "", "" );
|
||||
CAF_PDM_InitField( &m_editCaseFilter, "EditCaseFilter", false, "Edit", "", "", "" );
|
||||
m_editCaseFilter.uiCapability()->setUiEditorTypeName( caf::PdmUiToolButtonEditor::uiEditorTypeName() );
|
||||
m_editCaseFilter.uiCapability()->setUiLabelPosition( caf::PdmUiItemInfo::HIDDEN );
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@ -75,12 +103,12 @@ RimAbstractCorrelationPlot::~RimAbstractCorrelationPlot()
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RimAbstractCorrelationPlot::setCurveDefinitions( const std::vector<RiaSummaryCurveDefinition>& curveDefinitions )
|
||||
{
|
||||
m_analysisPlotDataSelection.deleteAllChildObjects();
|
||||
m_dataSources.deleteAllChildObjects();
|
||||
for ( auto curveDef : curveDefinitions )
|
||||
{
|
||||
auto dataEntry = new RimAnalysisPlotDataEntry();
|
||||
dataEntry->setFromCurveDefinition( curveDef );
|
||||
m_analysisPlotDataSelection.push_back( dataEntry );
|
||||
m_dataSources.push_back( dataEntry );
|
||||
}
|
||||
connectAllCaseSignals();
|
||||
|
||||
@ -125,12 +153,12 @@ void RimAbstractCorrelationPlot::fieldChangedByUi( const caf::PdmFieldHandle* ch
|
||||
if ( !curveSelection.empty() )
|
||||
{
|
||||
std::vector<RiaSummaryCurveDefinition> summaryVectorDefinitions = dlg.curveSelection();
|
||||
m_analysisPlotDataSelection.deleteAllChildObjects();
|
||||
m_dataSources.deleteAllChildObjects();
|
||||
for ( const RiaSummaryCurveDefinition& vectorDef : summaryVectorDefinitions )
|
||||
{
|
||||
auto plotEntry = new RimAnalysisPlotDataEntry();
|
||||
plotEntry->setFromCurveDefinition( vectorDef );
|
||||
m_analysisPlotDataSelection.push_back( plotEntry );
|
||||
m_dataSources.push_back( plotEntry );
|
||||
}
|
||||
connectAllCaseSignals();
|
||||
this->loadDataAndUpdate();
|
||||
@ -170,6 +198,31 @@ void RimAbstractCorrelationPlot::fieldChangedByUi( const caf::PdmFieldHandle* ch
|
||||
|
||||
this->updateConnectedEditors();
|
||||
}
|
||||
else if ( changedField == &m_curveSetForFiltering )
|
||||
{
|
||||
connectCurveFilterSignals();
|
||||
|
||||
this->loadDataAndUpdate();
|
||||
}
|
||||
else if ( changedField == &m_useCaseFilter )
|
||||
{
|
||||
this->loadDataAndUpdate();
|
||||
}
|
||||
else if ( changedField == &m_editCaseFilter )
|
||||
{
|
||||
m_editCaseFilter = false;
|
||||
if ( m_curveSetForFiltering != nullptr )
|
||||
{
|
||||
auto filterColl = m_curveSetForFiltering->filterCollection();
|
||||
auto activeFilters = filterColl->filters();
|
||||
auto firstFilter = activeFilters.empty() ? nullptr : activeFilters.front();
|
||||
|
||||
if ( firstFilter )
|
||||
{
|
||||
RiuPlotMainWindowTools::selectAsCurrentItem( firstFilter );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@ -253,6 +306,34 @@ QList<caf::PdmOptionItemInfo>
|
||||
{
|
||||
options = caf::FontTools::relativeSizeValueOptions( RiaPreferences::current()->defaultPlotFontSize() );
|
||||
}
|
||||
else if ( fieldNeedingOptions == &m_curveSetForFiltering )
|
||||
{
|
||||
RimSummaryCaseCollection* ensemble = nullptr;
|
||||
|
||||
for ( auto e : m_dataSources )
|
||||
{
|
||||
auto ens = e->ensemble();
|
||||
if ( ens )
|
||||
{
|
||||
ensemble = ens;
|
||||
}
|
||||
}
|
||||
|
||||
options.push_back( caf::PdmOptionItemInfo( "None", nullptr ) );
|
||||
|
||||
if ( ensemble )
|
||||
{
|
||||
std::vector<RimEnsembleCurveSet*> referringObjects;
|
||||
ensemble->objectsWithReferringPtrFieldsOfType( referringObjects );
|
||||
|
||||
for ( auto object : referringObjects )
|
||||
{
|
||||
auto nameFiled = object->name();
|
||||
|
||||
options.push_back( caf::PdmOptionItemInfo( nameFiled, object ) );
|
||||
}
|
||||
}
|
||||
}
|
||||
return options;
|
||||
}
|
||||
|
||||
@ -279,7 +360,7 @@ std::set<time_t> RimAbstractCorrelationPlot::allAvailableTimeSteps()
|
||||
std::vector<RiaSummaryCurveDefinition> RimAbstractCorrelationPlot::curveDefinitions() const
|
||||
{
|
||||
std::vector<RiaSummaryCurveDefinition> curveDefs;
|
||||
for ( auto dataEntry : m_analysisPlotDataSelection )
|
||||
for ( auto dataEntry : m_dataSources )
|
||||
{
|
||||
curveDefs.push_back( dataEntry->curveDefinition() );
|
||||
}
|
||||
@ -309,7 +390,7 @@ std::set<RifEclipseSummaryAddress> RimAbstractCorrelationPlot::addresses()
|
||||
{
|
||||
std::set<RifEclipseSummaryAddress> addresses;
|
||||
|
||||
for ( auto dataEntry : m_analysisPlotDataSelection )
|
||||
for ( auto dataEntry : m_dataSources )
|
||||
{
|
||||
addresses.insert( dataEntry->summaryAddress() );
|
||||
}
|
||||
@ -326,6 +407,65 @@ std::set<RimSummaryCaseCollection*> RimAbstractCorrelationPlot::ensembles()
|
||||
return analyserOfSelectedCurveDefs->m_ensembles;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
std::set<RimSummaryCase*> RimAbstractCorrelationPlot::filterEnsembleCases( RimSummaryCaseCollection* ensemble ) const
|
||||
{
|
||||
std::set<RimSummaryCase*> setOfCases;
|
||||
|
||||
if ( ensemble )
|
||||
{
|
||||
std::vector<RimSummaryCase*> summaryCasesVector;
|
||||
|
||||
if ( m_useCaseFilter() && m_curveSetForFiltering() && m_curveSetForFiltering->summaryCaseCollection() == ensemble )
|
||||
{
|
||||
summaryCasesVector = m_curveSetForFiltering->filterEnsembleCases( ensemble->allSummaryCases() );
|
||||
}
|
||||
else
|
||||
{
|
||||
summaryCasesVector = ensemble->allSummaryCases();
|
||||
}
|
||||
|
||||
setOfCases.insert( summaryCasesVector.begin(), summaryCasesVector.end() );
|
||||
}
|
||||
|
||||
return setOfCases;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
bool RimAbstractCorrelationPlot::isCaseFilterEnabled() const
|
||||
{
|
||||
return m_useCaseFilter();
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RimAbstractCorrelationPlot::enableCaseFilter( bool enable )
|
||||
{
|
||||
m_useCaseFilter = enable;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
RimEnsembleCurveSet* RimAbstractCorrelationPlot::caseFilterDataSource() const
|
||||
{
|
||||
return m_curveSetForFiltering();
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RimAbstractCorrelationPlot::setCaseFilterDataSource( RimEnsembleCurveSet* ensemble )
|
||||
{
|
||||
m_curveSetForFiltering = ensemble;
|
||||
connectCurveFilterSignals();
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@ -596,6 +736,27 @@ QString RimAbstractCorrelationPlot::completeAddressText()
|
||||
void RimAbstractCorrelationPlot::initAfterRead()
|
||||
{
|
||||
connectAllCaseSignals();
|
||||
connectCurveFilterSignals();
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RimAbstractCorrelationPlot::appendDataSourceFields( QString uiConfigName, caf::PdmUiOrdering& uiOrdering )
|
||||
{
|
||||
caf::PdmUiGroup* curveDataGroup = uiOrdering.addNewGroup( "Summary Vector" );
|
||||
|
||||
m_selectedVarsUiField = selectedQuantitiesText();
|
||||
|
||||
curveDataGroup->add( &m_selectedVarsUiField );
|
||||
curveDataGroup->add( &m_pushButtonSelectSummaryAddress, { false, 1, 0 } );
|
||||
curveDataGroup->add( &m_timeStepFilter );
|
||||
curveDataGroup->add( &m_timeStep );
|
||||
curveDataGroup->add( &m_useCaseFilter );
|
||||
curveDataGroup->add( &m_curveSetForFiltering );
|
||||
m_curveSetForFiltering.uiCapability()->setUiHidden( !m_useCaseFilter() );
|
||||
curveDataGroup->add( &m_editCaseFilter, { false, 1, 0 } );
|
||||
m_editCaseFilter.uiCapability()->setUiHidden( !m_useCaseFilter() );
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@ -612,7 +773,7 @@ void RimAbstractCorrelationPlot::onCaseRemoved( const SignalEmitter* emitter, Ri
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RimAbstractCorrelationPlot::connectAllCaseSignals()
|
||||
{
|
||||
for ( auto dataEntry : m_analysisPlotDataSelection )
|
||||
for ( auto dataEntry : m_dataSources )
|
||||
{
|
||||
if ( dataEntry->ensemble() )
|
||||
{
|
||||
@ -620,3 +781,22 @@ void RimAbstractCorrelationPlot::connectAllCaseSignals()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RimAbstractCorrelationPlot::connectCurveFilterSignals()
|
||||
{
|
||||
if ( m_curveSetForFiltering() )
|
||||
{
|
||||
m_curveSetForFiltering()->filterChanged.connect( this, &RimAbstractCorrelationPlot::onFilterSourceChanged );
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RimAbstractCorrelationPlot::onFilterSourceChanged( const caf::SignalEmitter* emitter )
|
||||
{
|
||||
if ( m_useCaseFilter() ) loadDataAndUpdate();
|
||||
}
|
||||
|
@ -17,15 +17,12 @@
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
#pragma once
|
||||
|
||||
#include "RifEclipseSummaryAddress.h"
|
||||
#include "RifEclipseSummaryAddressQMetaType.h"
|
||||
|
||||
#include "RimPlot.h"
|
||||
#include "RimSummaryCaseCollection.h"
|
||||
#include "RimTimeStepFilter.h"
|
||||
|
||||
#include "cafPdmPtrField.h"
|
||||
|
||||
#include <QDateTime>
|
||||
#include <QString>
|
||||
|
||||
#include <ctime>
|
||||
@ -34,6 +31,11 @@ class RiaSummaryCurveDefinition;
|
||||
class RiaSummaryCurveDefinitionAnalyser;
|
||||
class RimAnalysisPlotDataEntry;
|
||||
class RimSummaryAddress;
|
||||
class RimEnsembleCurveSet;
|
||||
class RimSummaryCaseCollection;
|
||||
class RimSummaryCase;
|
||||
class EnsembleParameter;
|
||||
class RifEclipseSummaryAddress;
|
||||
|
||||
class RimAbstractCorrelationPlot : public RimPlot
|
||||
{
|
||||
@ -51,10 +53,18 @@ public:
|
||||
void setCurveDefinitions( const std::vector<RiaSummaryCurveDefinition>& curveDefinitions );
|
||||
void setTimeStep( std::time_t timeStep );
|
||||
std::set<RimSummaryCaseCollection*> ensembles();
|
||||
RiuQwtPlotWidget* viewer() override;
|
||||
void detachAllCurves() override;
|
||||
QDateTime timeStep() const;
|
||||
QString timeStepString() const;
|
||||
|
||||
// Get summary cases filtered by attached ensemble parameter filter
|
||||
std::set<RimSummaryCase*> filterEnsembleCases( RimSummaryCaseCollection* ensemble ) const;
|
||||
bool isCaseFilterEnabled() const;
|
||||
void enableCaseFilter( bool enable );
|
||||
RimEnsembleCurveSet* caseFilterDataSource() const;
|
||||
void setCaseFilterDataSource( RimEnsembleCurveSet* ensemble );
|
||||
|
||||
RiuQwtPlotWidget* viewer() override;
|
||||
void detachAllCurves() override;
|
||||
QDateTime timeStep() const;
|
||||
QString timeStepString() const;
|
||||
|
||||
int labelFontSize() const;
|
||||
int axisTitleFontSize() const;
|
||||
@ -115,9 +125,15 @@ protected:
|
||||
|
||||
void initAfterRead() final;
|
||||
|
||||
void appendDataSourceFields( QString uiConfigName, caf::PdmUiOrdering& uiOrdering );
|
||||
|
||||
private:
|
||||
void onCaseRemoved( const SignalEmitter* emitter, RimSummaryCase* summaryCase );
|
||||
void connectAllCaseSignals();
|
||||
void connectCurveFilterSignals();
|
||||
void onFilterSourceChanged( const caf::SignalEmitter* emitter );
|
||||
|
||||
RiaSummaryCurveDefinitionAnalyser* getOrCreateSelectedCurveDefAnalyser();
|
||||
|
||||
protected:
|
||||
std::unique_ptr<RiaSummaryCurveDefinitionAnalyser> m_analyserOfSelectedCurveDefs;
|
||||
@ -125,9 +141,6 @@ protected:
|
||||
|
||||
bool m_selectMultipleVectors;
|
||||
|
||||
// Fields
|
||||
caf::PdmChildArrayField<RimAnalysisPlotDataEntry*> m_analysisPlotDataSelection;
|
||||
|
||||
caf::PdmField<QString> m_selectedVarsUiField;
|
||||
caf::PdmField<bool> m_pushButtonSelectSummaryAddress;
|
||||
caf::PdmField<TimeStepFilterEnum> m_timeStepFilter;
|
||||
@ -141,5 +154,8 @@ protected:
|
||||
caf::PdmField<caf::FontTools::RelativeSizeEnum> m_axisValueFontSize;
|
||||
|
||||
private:
|
||||
RiaSummaryCurveDefinitionAnalyser* getOrCreateSelectedCurveDefAnalyser();
|
||||
caf::PdmChildArrayField<RimAnalysisPlotDataEntry*> m_dataSources;
|
||||
caf::PdmField<bool> m_useCaseFilter;
|
||||
caf::PdmPtrField<RimEnsembleCurveSet*> m_curveSetForFiltering;
|
||||
caf::PdmField<bool> m_editCaseFilter;
|
||||
};
|
||||
|
@ -314,13 +314,7 @@ void RimCorrelationMatrixPlot::defineUiOrdering( QString uiConfigName, caf::PdmU
|
||||
}
|
||||
}
|
||||
|
||||
caf::PdmUiGroup* curveDataGroup = uiOrdering.addNewGroup( "Summary Vector" );
|
||||
m_selectedVarsUiField = selectedQuantitiesText();
|
||||
|
||||
curveDataGroup->add( &m_selectedVarsUiField );
|
||||
curveDataGroup->add( &m_pushButtonSelectSummaryAddress, { false, 1, 0 } );
|
||||
curveDataGroup->add( &m_timeStepFilter );
|
||||
curveDataGroup->add( &m_timeStep );
|
||||
appendDataSourceFields( uiConfigName, uiOrdering );
|
||||
|
||||
if ( uiConfigName != "report" )
|
||||
{
|
||||
@ -522,6 +516,8 @@ void RimCorrelationMatrixPlot::createMatrix()
|
||||
|
||||
if ( ensemble )
|
||||
{
|
||||
std::set<RimSummaryCase*> activeCases = filterEnsembleCases( ensemble );
|
||||
|
||||
std::vector<double> caseValuesAtTimestep;
|
||||
std::vector<double> parameterValues;
|
||||
|
||||
@ -533,8 +529,10 @@ void RimCorrelationMatrixPlot::createMatrix()
|
||||
|
||||
for ( size_t caseIdx = 0u; caseIdx < ensemble->allSummaryCases().size(); ++caseIdx )
|
||||
{
|
||||
auto summaryCase = ensemble->allSummaryCases()[caseIdx];
|
||||
RifSummaryReaderInterface* reader = summaryCase->summaryReader();
|
||||
auto summaryCase = ensemble->allSummaryCases()[caseIdx];
|
||||
if ( activeCases.count( summaryCase ) == 0 ) continue;
|
||||
|
||||
RifSummaryReaderInterface* reader = summaryCase->summaryReader();
|
||||
if ( reader )
|
||||
{
|
||||
std::vector<double> values;
|
||||
|
@ -18,7 +18,8 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "RimCorrelationPlot.h"
|
||||
#include "RimAbstractCorrelationPlot.h"
|
||||
|
||||
#include "cafAppEnum.h"
|
||||
|
||||
#include <QDateTime>
|
||||
|
@ -130,12 +130,7 @@ void RimCorrelationPlot::defineUiOrdering( QString uiConfigName, caf::PdmUiOrder
|
||||
correlationGroup->add( &m_topNFilterCount );
|
||||
}
|
||||
|
||||
caf::PdmUiGroup* curveDataGroup = uiOrdering.addNewGroup( "Summary Vector" );
|
||||
|
||||
curveDataGroup->add( &m_selectedVarsUiField );
|
||||
curveDataGroup->add( &m_pushButtonSelectSummaryAddress, { false, 1, 0 } );
|
||||
curveDataGroup->add( &m_timeStepFilter );
|
||||
curveDataGroup->add( &m_timeStep );
|
||||
appendDataSourceFields( uiConfigName, uiOrdering );
|
||||
|
||||
caf::PdmUiGroup* plotGroup = uiOrdering.addNewGroup( "Plot Settings" );
|
||||
plotGroup->add( &m_showPlotTitle );
|
||||
@ -190,7 +185,6 @@ void RimCorrelationPlot::onLoadDataAndUpdate()
|
||||
|
||||
RiuGroupedBarChartBuilder chartBuilder;
|
||||
|
||||
// buildTestPlot( chartBuilder );
|
||||
addDataToChartBuilder( chartBuilder );
|
||||
|
||||
chartBuilder.addBarChartToPlot( m_plotWidget,
|
||||
@ -246,8 +240,10 @@ void RimCorrelationPlot::addDataToChartBuilder( RiuGroupedBarChartBuilder& chart
|
||||
auto ensemble = *ensembles().begin();
|
||||
auto address = *addresses().begin();
|
||||
|
||||
std::set<RimSummaryCase*> activeCases = filterEnsembleCases( ensemble );
|
||||
|
||||
std::vector<std::pair<EnsembleParameter, double>> correlations =
|
||||
ensemble->parameterCorrelations( address, selectedTimestep, m_selectedParametersList() );
|
||||
ensemble->parameterCorrelations( address, selectedTimestep, m_selectedParametersList(), activeCases );
|
||||
|
||||
for ( auto parameterCorrPair : correlations )
|
||||
{
|
||||
|
@ -21,7 +21,6 @@
|
||||
#include "RiaSummaryCurveDefinition.h" // use of caf::Signal requires this include
|
||||
|
||||
#include "RimAbstractCorrelationPlot.h"
|
||||
#include "RimSummaryCaseCollection.h"
|
||||
|
||||
#include "cafAppEnum.h"
|
||||
|
||||
|
@ -296,38 +296,46 @@ void RimCorrelationReportPlot::deleteViewWidget()
|
||||
void RimCorrelationReportPlot::onLoadDataAndUpdate()
|
||||
{
|
||||
updateMdiWindowVisibility();
|
||||
|
||||
if ( m_showWindow )
|
||||
{
|
||||
auto timeStep = m_correlationMatrixPlot->timeStep().toSecsSinceEpoch();
|
||||
bool showOnlyTopNCorrelations = m_correlationMatrixPlot->showTopNCorrelations();
|
||||
int topNFilterCount = m_correlationMatrixPlot->topNFilterCount();
|
||||
|
||||
m_correlationPlot->setTimeStep( timeStep );
|
||||
m_correlationPlot->setShowOnlyTopNCorrelations( showOnlyTopNCorrelations );
|
||||
m_correlationPlot->setTopNFilterCount( topNFilterCount );
|
||||
m_parameterResultCrossPlot->setTimeStep( timeStep );
|
||||
|
||||
m_correlationMatrixPlot->setLabelFontSize( m_labelFontSize() );
|
||||
m_correlationMatrixPlot->setAxisTitleFontSize( m_axisTitleFontSize() );
|
||||
m_correlationMatrixPlot->setAxisValueFontSize( m_axisValueFontSize() );
|
||||
|
||||
auto timeStep = m_correlationMatrixPlot->timeStep().toSecsSinceEpoch();
|
||||
bool showOnlyTopNCorrelations = m_correlationMatrixPlot->showTopNCorrelations();
|
||||
int topNFilterCount = m_correlationMatrixPlot->topNFilterCount();
|
||||
bool useCaseFilter = m_correlationMatrixPlot->isCaseFilterEnabled();
|
||||
auto caseFilterDataSource = m_correlationMatrixPlot->caseFilterDataSource();
|
||||
|
||||
m_correlationPlot->setTimeStep( timeStep );
|
||||
m_correlationPlot->setShowOnlyTopNCorrelations( showOnlyTopNCorrelations );
|
||||
m_correlationPlot->setTopNFilterCount( topNFilterCount );
|
||||
m_correlationPlot->enableCaseFilter( useCaseFilter );
|
||||
m_correlationPlot->setCaseFilterDataSource( caseFilterDataSource );
|
||||
|
||||
m_correlationPlot->setLabelFontSize( m_labelFontSize() );
|
||||
m_correlationPlot->setAxisTitleFontSize( m_axisTitleFontSize() );
|
||||
m_correlationPlot->setAxisValueFontSize( m_axisValueFontSize() );
|
||||
m_correlationPlot->setShowAbsoluteValues( m_correlationMatrixPlot->showAbsoluteValues() );
|
||||
m_correlationPlot->setSortByAbsoluteValues( m_correlationMatrixPlot->sortByAbsoluteValues() );
|
||||
|
||||
m_parameterResultCrossPlot->setTimeStep( timeStep );
|
||||
m_parameterResultCrossPlot->enableCaseFilter( useCaseFilter );
|
||||
m_parameterResultCrossPlot->setCaseFilterDataSource( caseFilterDataSource );
|
||||
m_parameterResultCrossPlot->setLabelFontSize( m_labelFontSize() );
|
||||
m_parameterResultCrossPlot->setLegendFontSize( m_legendFontSize() );
|
||||
m_parameterResultCrossPlot->setAxisTitleFontSize( m_axisTitleFontSize() );
|
||||
m_parameterResultCrossPlot->setAxisValueFontSize( m_axisValueFontSize() );
|
||||
|
||||
m_correlationPlot->setShowAbsoluteValues( m_correlationMatrixPlot->showAbsoluteValues() );
|
||||
m_correlationPlot->setSortByAbsoluteValues( m_correlationMatrixPlot->sortByAbsoluteValues() );
|
||||
|
||||
m_correlationMatrixPlot->loadDataAndUpdate();
|
||||
m_correlationPlot->loadDataAndUpdate();
|
||||
m_parameterResultCrossPlot->loadDataAndUpdate();
|
||||
|
||||
m_viewer->setPlotTitle( m_plotWindowTitle() );
|
||||
}
|
||||
|
||||
updateLayout();
|
||||
}
|
||||
|
||||
|
@ -17,7 +17,6 @@
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
#pragma once
|
||||
|
||||
#include "RimCorrelationPlot.h"
|
||||
#include "RimPlotWindow.h"
|
||||
|
||||
#include "cafPdmChildField.h"
|
||||
|
@ -115,13 +115,7 @@ void RimParameterResultCrossPlot::fieldChangedByUi( const caf::PdmFieldHandle* c
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RimParameterResultCrossPlot::defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering )
|
||||
{
|
||||
m_selectedVarsUiField = selectedQuantitiesText();
|
||||
|
||||
caf::PdmUiGroup* curveDataGroup = uiOrdering.addNewGroup( "Summary Vector" );
|
||||
curveDataGroup->add( &m_selectedVarsUiField );
|
||||
curveDataGroup->add( &m_pushButtonSelectSummaryAddress, { false, 1, 0 } );
|
||||
curveDataGroup->add( &m_timeStepFilter );
|
||||
curveDataGroup->add( &m_timeStep );
|
||||
appendDataSourceFields( uiConfigName, uiOrdering );
|
||||
|
||||
caf::PdmUiGroup* crossPlotGroup = uiOrdering.addNewGroup( "Cross Plot Parameters" );
|
||||
crossPlotGroup->add( &m_ensembleParameter );
|
||||
@ -256,9 +250,12 @@ void RimParameterResultCrossPlot::createPoints()
|
||||
QStringList caseNames = caseNamesOfValidEnsembleCases( ensemble );
|
||||
QString commonCaseRoot = RiaTextStringTools::commonRoot( caseNames );
|
||||
|
||||
std::set<RimSummaryCase*> activeCases = filterEnsembleCases( ensemble );
|
||||
|
||||
for ( size_t caseIdx = 0u; caseIdx < ensemble->allSummaryCases().size(); ++caseIdx )
|
||||
{
|
||||
auto summaryCase = ensemble->allSummaryCases()[caseIdx];
|
||||
if ( activeCases.count( summaryCase ) == 0 ) continue;
|
||||
|
||||
RifSummaryReaderInterface* reader = summaryCase->summaryReader();
|
||||
if ( !reader ) continue;
|
||||
|
@ -98,6 +98,8 @@ CAF_PDM_SOURCE_INIT( RimEnsembleCurveSet, "RimEnsembleCurveSet" );
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
RimEnsembleCurveSet::RimEnsembleCurveSet()
|
||||
: filterChanged( this )
|
||||
|
||||
{
|
||||
CAF_PDM_InitObject( "Ensemble Curve Set", ":/EnsembleCurveSet16x16.png", "", "" );
|
||||
|
||||
@ -577,6 +579,8 @@ void RimEnsembleCurveSet::updateAllCurves()
|
||||
updateEnsembleCurves( filteredCases );
|
||||
updateStatisticsCurves( m_statistics->basedOnFilteredCases() ? filteredCases : allCases );
|
||||
}
|
||||
|
||||
filterChanged.send();
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
|
@ -82,6 +82,10 @@ public:
|
||||
RimEnsembleCurveSet();
|
||||
~RimEnsembleCurveSet() override;
|
||||
|
||||
caf::Signal<> filterChanged;
|
||||
|
||||
QString name() const;
|
||||
|
||||
bool isCurvesVisible();
|
||||
void setColor( cvf::Color3f color );
|
||||
|
||||
@ -173,7 +177,6 @@ private:
|
||||
|
||||
void updateQwtPlotAxis();
|
||||
|
||||
QString name() const;
|
||||
QString createAutoName() const;
|
||||
|
||||
void updateLegendMappingMode();
|
||||
|
@ -541,9 +541,10 @@ time_t timeDiff( time_t lhs, time_t rhs )
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
std::vector<std::pair<EnsembleParameter, double>>
|
||||
RimSummaryCaseCollection::parameterCorrelations( const RifEclipseSummaryAddress& address,
|
||||
time_t timeStep,
|
||||
const std::vector<QString>& selectedParameters ) const
|
||||
RimSummaryCaseCollection::parameterCorrelations( const RifEclipseSummaryAddress& address,
|
||||
time_t timeStep,
|
||||
const std::vector<QString>& selectedParameters,
|
||||
const std::set<RimSummaryCase*>& selectedCases ) const
|
||||
{
|
||||
auto parameters = variationSortedEnsembleParameters( true );
|
||||
|
||||
@ -568,6 +569,8 @@ std::vector<std::pair<EnsembleParameter, double>>
|
||||
RifSummaryReaderInterface* reader = summaryCase->summaryReader();
|
||||
if ( !reader ) continue;
|
||||
|
||||
if ( !selectedCases.empty() && selectedCases.count( summaryCase ) == 0 ) continue;
|
||||
|
||||
if ( !summaryCase->caseRealizationParameters() ) continue;
|
||||
|
||||
std::vector<double> values;
|
||||
|
@ -123,9 +123,11 @@ public:
|
||||
std::vector<std::pair<EnsembleParameter, double>>
|
||||
correlationSortedEnsembleParameters( const RifEclipseSummaryAddress& address, time_t selectedTimeStep ) const;
|
||||
std::vector<std::pair<EnsembleParameter, double>>
|
||||
parameterCorrelations( const RifEclipseSummaryAddress& address,
|
||||
time_t selectedTimeStep,
|
||||
const std::vector<QString>& selectedParameters = {} ) const;
|
||||
parameterCorrelations( const RifEclipseSummaryAddress& address,
|
||||
time_t selectedTimeStep,
|
||||
const std::vector<QString>& selectedParameters = {},
|
||||
const std::set<RimSummaryCase*>& selectedCases = {} ) const;
|
||||
|
||||
std::vector<std::pair<EnsembleParameter, double>>
|
||||
parameterCorrelationsAllTimeSteps( const RifEclipseSummaryAddress& address,
|
||||
const std::vector<QString>& selectedParameters = {} ) const;
|
||||
|
Loading…
Reference in New Issue
Block a user