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:
@@ -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 "RimAbstractCorrelationPlot.h"
|
||||||
|
|
||||||
#include "RiaPreferences.h"
|
#include "RiaPreferences.h"
|
||||||
@@ -7,18 +25,22 @@
|
|||||||
#include "RifSummaryReaderInterface.h"
|
#include "RifSummaryReaderInterface.h"
|
||||||
|
|
||||||
#include "RimAnalysisPlotDataEntry.h"
|
#include "RimAnalysisPlotDataEntry.h"
|
||||||
|
#include "RimEnsembleCurveFilter.h"
|
||||||
|
#include "RimEnsembleCurveFilterCollection.h"
|
||||||
#include "RimEnsembleCurveSet.h"
|
#include "RimEnsembleCurveSet.h"
|
||||||
#include "RimProject.h"
|
#include "RimProject.h"
|
||||||
#include "RimSummaryAddress.h"
|
#include "RimSummaryAddress.h"
|
||||||
#include "RimSummaryCase.h"
|
#include "RimSummaryCase.h"
|
||||||
#include "RimSummaryCaseCollection.h"
|
#include "RimSummaryCaseCollection.h"
|
||||||
|
|
||||||
|
#include "RiuPlotMainWindowTools.h"
|
||||||
#include "RiuQwtPlotWidget.h"
|
#include "RiuQwtPlotWidget.h"
|
||||||
#include "RiuSummaryVectorSelectionDialog.h"
|
#include "RiuSummaryVectorSelectionDialog.h"
|
||||||
|
|
||||||
#include "cafPdmUiComboBoxEditor.h"
|
#include "cafPdmUiComboBoxEditor.h"
|
||||||
#include "cafPdmUiLineEditor.h"
|
#include "cafPdmUiLineEditor.h"
|
||||||
#include "cafPdmUiPushButtonEditor.h"
|
#include "cafPdmUiPushButtonEditor.h"
|
||||||
|
#include "cafPdmUiToolButtonEditor.h"
|
||||||
|
|
||||||
CAF_PDM_ABSTRACT_SOURCE_INIT( RimAbstractCorrelationPlot, "AbstractCorrelationPlot" );
|
CAF_PDM_ABSTRACT_SOURCE_INIT( RimAbstractCorrelationPlot, "AbstractCorrelationPlot" );
|
||||||
|
|
||||||
@@ -36,9 +58,9 @@ RimAbstractCorrelationPlot::RimAbstractCorrelationPlot()
|
|||||||
m_selectedVarsUiField.uiCapability()->setUiReadOnly( true );
|
m_selectedVarsUiField.uiCapability()->setUiReadOnly( true );
|
||||||
m_selectedVarsUiField.uiCapability()->setUiEditorTypeName( caf::PdmUiLineEditor::uiEditorTypeName() );
|
m_selectedVarsUiField.uiCapability()->setUiEditorTypeName( caf::PdmUiLineEditor::uiEditorTypeName() );
|
||||||
|
|
||||||
CAF_PDM_InitFieldNoDefault( &m_analysisPlotDataSelection, "AnalysisPlotData", "", "", "", "" );
|
CAF_PDM_InitFieldNoDefault( &m_dataSources, "AnalysisPlotData", "", "", "", "" );
|
||||||
m_analysisPlotDataSelection.uiCapability()->setUiTreeChildrenHidden( true );
|
m_dataSources.uiCapability()->setUiTreeChildrenHidden( true );
|
||||||
m_analysisPlotDataSelection.uiCapability()->setUiTreeHidden( true );
|
m_dataSources.uiCapability()->setUiTreeHidden( true );
|
||||||
|
|
||||||
CAF_PDM_InitFieldNoDefault( &m_pushButtonSelectSummaryAddress, "SelectAddress", "", "", "", "" );
|
CAF_PDM_InitFieldNoDefault( &m_pushButtonSelectSummaryAddress, "SelectAddress", "", "", "", "" );
|
||||||
caf::PdmUiPushButtonEditor::configureEditorForField( &m_pushButtonSelectSummaryAddress );
|
caf::PdmUiPushButtonEditor::configureEditorForField( &m_pushButtonSelectSummaryAddress );
|
||||||
@@ -61,6 +83,12 @@ RimAbstractCorrelationPlot::RimAbstractCorrelationPlot()
|
|||||||
m_axisValueFontSize = caf::FontTools::RelativeSize::XSmall;
|
m_axisValueFontSize = caf::FontTools::RelativeSize::XSmall;
|
||||||
|
|
||||||
m_legendFontSize = 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 )
|
void RimAbstractCorrelationPlot::setCurveDefinitions( const std::vector<RiaSummaryCurveDefinition>& curveDefinitions )
|
||||||
{
|
{
|
||||||
m_analysisPlotDataSelection.deleteAllChildObjects();
|
m_dataSources.deleteAllChildObjects();
|
||||||
for ( auto curveDef : curveDefinitions )
|
for ( auto curveDef : curveDefinitions )
|
||||||
{
|
{
|
||||||
auto dataEntry = new RimAnalysisPlotDataEntry();
|
auto dataEntry = new RimAnalysisPlotDataEntry();
|
||||||
dataEntry->setFromCurveDefinition( curveDef );
|
dataEntry->setFromCurveDefinition( curveDef );
|
||||||
m_analysisPlotDataSelection.push_back( dataEntry );
|
m_dataSources.push_back( dataEntry );
|
||||||
}
|
}
|
||||||
connectAllCaseSignals();
|
connectAllCaseSignals();
|
||||||
|
|
||||||
@@ -125,12 +153,12 @@ void RimAbstractCorrelationPlot::fieldChangedByUi( const caf::PdmFieldHandle* ch
|
|||||||
if ( !curveSelection.empty() )
|
if ( !curveSelection.empty() )
|
||||||
{
|
{
|
||||||
std::vector<RiaSummaryCurveDefinition> summaryVectorDefinitions = dlg.curveSelection();
|
std::vector<RiaSummaryCurveDefinition> summaryVectorDefinitions = dlg.curveSelection();
|
||||||
m_analysisPlotDataSelection.deleteAllChildObjects();
|
m_dataSources.deleteAllChildObjects();
|
||||||
for ( const RiaSummaryCurveDefinition& vectorDef : summaryVectorDefinitions )
|
for ( const RiaSummaryCurveDefinition& vectorDef : summaryVectorDefinitions )
|
||||||
{
|
{
|
||||||
auto plotEntry = new RimAnalysisPlotDataEntry();
|
auto plotEntry = new RimAnalysisPlotDataEntry();
|
||||||
plotEntry->setFromCurveDefinition( vectorDef );
|
plotEntry->setFromCurveDefinition( vectorDef );
|
||||||
m_analysisPlotDataSelection.push_back( plotEntry );
|
m_dataSources.push_back( plotEntry );
|
||||||
}
|
}
|
||||||
connectAllCaseSignals();
|
connectAllCaseSignals();
|
||||||
this->loadDataAndUpdate();
|
this->loadDataAndUpdate();
|
||||||
@@ -170,6 +198,31 @@ void RimAbstractCorrelationPlot::fieldChangedByUi( const caf::PdmFieldHandle* ch
|
|||||||
|
|
||||||
this->updateConnectedEditors();
|
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() );
|
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;
|
return options;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -279,7 +360,7 @@ std::set<time_t> RimAbstractCorrelationPlot::allAvailableTimeSteps()
|
|||||||
std::vector<RiaSummaryCurveDefinition> RimAbstractCorrelationPlot::curveDefinitions() const
|
std::vector<RiaSummaryCurveDefinition> RimAbstractCorrelationPlot::curveDefinitions() const
|
||||||
{
|
{
|
||||||
std::vector<RiaSummaryCurveDefinition> curveDefs;
|
std::vector<RiaSummaryCurveDefinition> curveDefs;
|
||||||
for ( auto dataEntry : m_analysisPlotDataSelection )
|
for ( auto dataEntry : m_dataSources )
|
||||||
{
|
{
|
||||||
curveDefs.push_back( dataEntry->curveDefinition() );
|
curveDefs.push_back( dataEntry->curveDefinition() );
|
||||||
}
|
}
|
||||||
@@ -309,7 +390,7 @@ std::set<RifEclipseSummaryAddress> RimAbstractCorrelationPlot::addresses()
|
|||||||
{
|
{
|
||||||
std::set<RifEclipseSummaryAddress> addresses;
|
std::set<RifEclipseSummaryAddress> addresses;
|
||||||
|
|
||||||
for ( auto dataEntry : m_analysisPlotDataSelection )
|
for ( auto dataEntry : m_dataSources )
|
||||||
{
|
{
|
||||||
addresses.insert( dataEntry->summaryAddress() );
|
addresses.insert( dataEntry->summaryAddress() );
|
||||||
}
|
}
|
||||||
@@ -326,6 +407,65 @@ std::set<RimSummaryCaseCollection*> RimAbstractCorrelationPlot::ensembles()
|
|||||||
return analyserOfSelectedCurveDefs->m_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()
|
void RimAbstractCorrelationPlot::initAfterRead()
|
||||||
{
|
{
|
||||||
connectAllCaseSignals();
|
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()
|
void RimAbstractCorrelationPlot::connectAllCaseSignals()
|
||||||
{
|
{
|
||||||
for ( auto dataEntry : m_analysisPlotDataSelection )
|
for ( auto dataEntry : m_dataSources )
|
||||||
{
|
{
|
||||||
if ( dataEntry->ensemble() )
|
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
|
#pragma once
|
||||||
|
|
||||||
#include "RifEclipseSummaryAddress.h"
|
|
||||||
#include "RifEclipseSummaryAddressQMetaType.h"
|
|
||||||
|
|
||||||
#include "RimPlot.h"
|
#include "RimPlot.h"
|
||||||
#include "RimSummaryCaseCollection.h"
|
|
||||||
#include "RimTimeStepFilter.h"
|
#include "RimTimeStepFilter.h"
|
||||||
|
|
||||||
#include "cafPdmPtrField.h"
|
#include "cafPdmPtrField.h"
|
||||||
|
|
||||||
|
#include <QDateTime>
|
||||||
#include <QString>
|
#include <QString>
|
||||||
|
|
||||||
#include <ctime>
|
#include <ctime>
|
||||||
@@ -34,6 +31,11 @@ class RiaSummaryCurveDefinition;
|
|||||||
class RiaSummaryCurveDefinitionAnalyser;
|
class RiaSummaryCurveDefinitionAnalyser;
|
||||||
class RimAnalysisPlotDataEntry;
|
class RimAnalysisPlotDataEntry;
|
||||||
class RimSummaryAddress;
|
class RimSummaryAddress;
|
||||||
|
class RimEnsembleCurveSet;
|
||||||
|
class RimSummaryCaseCollection;
|
||||||
|
class RimSummaryCase;
|
||||||
|
class EnsembleParameter;
|
||||||
|
class RifEclipseSummaryAddress;
|
||||||
|
|
||||||
class RimAbstractCorrelationPlot : public RimPlot
|
class RimAbstractCorrelationPlot : public RimPlot
|
||||||
{
|
{
|
||||||
@@ -51,6 +53,14 @@ public:
|
|||||||
void setCurveDefinitions( const std::vector<RiaSummaryCurveDefinition>& curveDefinitions );
|
void setCurveDefinitions( const std::vector<RiaSummaryCurveDefinition>& curveDefinitions );
|
||||||
void setTimeStep( std::time_t timeStep );
|
void setTimeStep( std::time_t timeStep );
|
||||||
std::set<RimSummaryCaseCollection*> ensembles();
|
std::set<RimSummaryCaseCollection*> ensembles();
|
||||||
|
|
||||||
|
// 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;
|
RiuQwtPlotWidget* viewer() override;
|
||||||
void detachAllCurves() override;
|
void detachAllCurves() override;
|
||||||
QDateTime timeStep() const;
|
QDateTime timeStep() const;
|
||||||
@@ -115,9 +125,15 @@ protected:
|
|||||||
|
|
||||||
void initAfterRead() final;
|
void initAfterRead() final;
|
||||||
|
|
||||||
|
void appendDataSourceFields( QString uiConfigName, caf::PdmUiOrdering& uiOrdering );
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void onCaseRemoved( const SignalEmitter* emitter, RimSummaryCase* summaryCase );
|
void onCaseRemoved( const SignalEmitter* emitter, RimSummaryCase* summaryCase );
|
||||||
void connectAllCaseSignals();
|
void connectAllCaseSignals();
|
||||||
|
void connectCurveFilterSignals();
|
||||||
|
void onFilterSourceChanged( const caf::SignalEmitter* emitter );
|
||||||
|
|
||||||
|
RiaSummaryCurveDefinitionAnalyser* getOrCreateSelectedCurveDefAnalyser();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
std::unique_ptr<RiaSummaryCurveDefinitionAnalyser> m_analyserOfSelectedCurveDefs;
|
std::unique_ptr<RiaSummaryCurveDefinitionAnalyser> m_analyserOfSelectedCurveDefs;
|
||||||
@@ -125,9 +141,6 @@ protected:
|
|||||||
|
|
||||||
bool m_selectMultipleVectors;
|
bool m_selectMultipleVectors;
|
||||||
|
|
||||||
// Fields
|
|
||||||
caf::PdmChildArrayField<RimAnalysisPlotDataEntry*> m_analysisPlotDataSelection;
|
|
||||||
|
|
||||||
caf::PdmField<QString> m_selectedVarsUiField;
|
caf::PdmField<QString> m_selectedVarsUiField;
|
||||||
caf::PdmField<bool> m_pushButtonSelectSummaryAddress;
|
caf::PdmField<bool> m_pushButtonSelectSummaryAddress;
|
||||||
caf::PdmField<TimeStepFilterEnum> m_timeStepFilter;
|
caf::PdmField<TimeStepFilterEnum> m_timeStepFilter;
|
||||||
@@ -141,5 +154,8 @@ protected:
|
|||||||
caf::PdmField<caf::FontTools::RelativeSizeEnum> m_axisValueFontSize;
|
caf::PdmField<caf::FontTools::RelativeSizeEnum> m_axisValueFontSize;
|
||||||
|
|
||||||
private:
|
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" );
|
appendDataSourceFields( uiConfigName, uiOrdering );
|
||||||
m_selectedVarsUiField = selectedQuantitiesText();
|
|
||||||
|
|
||||||
curveDataGroup->add( &m_selectedVarsUiField );
|
|
||||||
curveDataGroup->add( &m_pushButtonSelectSummaryAddress, { false, 1, 0 } );
|
|
||||||
curveDataGroup->add( &m_timeStepFilter );
|
|
||||||
curveDataGroup->add( &m_timeStep );
|
|
||||||
|
|
||||||
if ( uiConfigName != "report" )
|
if ( uiConfigName != "report" )
|
||||||
{
|
{
|
||||||
@@ -522,6 +516,8 @@ void RimCorrelationMatrixPlot::createMatrix()
|
|||||||
|
|
||||||
if ( ensemble )
|
if ( ensemble )
|
||||||
{
|
{
|
||||||
|
std::set<RimSummaryCase*> activeCases = filterEnsembleCases( ensemble );
|
||||||
|
|
||||||
std::vector<double> caseValuesAtTimestep;
|
std::vector<double> caseValuesAtTimestep;
|
||||||
std::vector<double> parameterValues;
|
std::vector<double> parameterValues;
|
||||||
|
|
||||||
@@ -534,6 +530,8 @@ void RimCorrelationMatrixPlot::createMatrix()
|
|||||||
for ( size_t caseIdx = 0u; caseIdx < ensemble->allSummaryCases().size(); ++caseIdx )
|
for ( size_t caseIdx = 0u; caseIdx < ensemble->allSummaryCases().size(); ++caseIdx )
|
||||||
{
|
{
|
||||||
auto summaryCase = ensemble->allSummaryCases()[caseIdx];
|
auto summaryCase = ensemble->allSummaryCases()[caseIdx];
|
||||||
|
if ( activeCases.count( summaryCase ) == 0 ) continue;
|
||||||
|
|
||||||
RifSummaryReaderInterface* reader = summaryCase->summaryReader();
|
RifSummaryReaderInterface* reader = summaryCase->summaryReader();
|
||||||
if ( reader )
|
if ( reader )
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -18,7 +18,8 @@
|
|||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "RimCorrelationPlot.h"
|
#include "RimAbstractCorrelationPlot.h"
|
||||||
|
|
||||||
#include "cafAppEnum.h"
|
#include "cafAppEnum.h"
|
||||||
|
|
||||||
#include <QDateTime>
|
#include <QDateTime>
|
||||||
|
|||||||
@@ -130,12 +130,7 @@ void RimCorrelationPlot::defineUiOrdering( QString uiConfigName, caf::PdmUiOrder
|
|||||||
correlationGroup->add( &m_topNFilterCount );
|
correlationGroup->add( &m_topNFilterCount );
|
||||||
}
|
}
|
||||||
|
|
||||||
caf::PdmUiGroup* curveDataGroup = uiOrdering.addNewGroup( "Summary Vector" );
|
appendDataSourceFields( uiConfigName, uiOrdering );
|
||||||
|
|
||||||
curveDataGroup->add( &m_selectedVarsUiField );
|
|
||||||
curveDataGroup->add( &m_pushButtonSelectSummaryAddress, { false, 1, 0 } );
|
|
||||||
curveDataGroup->add( &m_timeStepFilter );
|
|
||||||
curveDataGroup->add( &m_timeStep );
|
|
||||||
|
|
||||||
caf::PdmUiGroup* plotGroup = uiOrdering.addNewGroup( "Plot Settings" );
|
caf::PdmUiGroup* plotGroup = uiOrdering.addNewGroup( "Plot Settings" );
|
||||||
plotGroup->add( &m_showPlotTitle );
|
plotGroup->add( &m_showPlotTitle );
|
||||||
@@ -190,7 +185,6 @@ void RimCorrelationPlot::onLoadDataAndUpdate()
|
|||||||
|
|
||||||
RiuGroupedBarChartBuilder chartBuilder;
|
RiuGroupedBarChartBuilder chartBuilder;
|
||||||
|
|
||||||
// buildTestPlot( chartBuilder );
|
|
||||||
addDataToChartBuilder( chartBuilder );
|
addDataToChartBuilder( chartBuilder );
|
||||||
|
|
||||||
chartBuilder.addBarChartToPlot( m_plotWidget,
|
chartBuilder.addBarChartToPlot( m_plotWidget,
|
||||||
@@ -246,8 +240,10 @@ void RimCorrelationPlot::addDataToChartBuilder( RiuGroupedBarChartBuilder& chart
|
|||||||
auto ensemble = *ensembles().begin();
|
auto ensemble = *ensembles().begin();
|
||||||
auto address = *addresses().begin();
|
auto address = *addresses().begin();
|
||||||
|
|
||||||
|
std::set<RimSummaryCase*> activeCases = filterEnsembleCases( ensemble );
|
||||||
|
|
||||||
std::vector<std::pair<EnsembleParameter, double>> correlations =
|
std::vector<std::pair<EnsembleParameter, double>> correlations =
|
||||||
ensemble->parameterCorrelations( address, selectedTimestep, m_selectedParametersList() );
|
ensemble->parameterCorrelations( address, selectedTimestep, m_selectedParametersList(), activeCases );
|
||||||
|
|
||||||
for ( auto parameterCorrPair : correlations )
|
for ( auto parameterCorrPair : correlations )
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -21,7 +21,6 @@
|
|||||||
#include "RiaSummaryCurveDefinition.h" // use of caf::Signal requires this include
|
#include "RiaSummaryCurveDefinition.h" // use of caf::Signal requires this include
|
||||||
|
|
||||||
#include "RimAbstractCorrelationPlot.h"
|
#include "RimAbstractCorrelationPlot.h"
|
||||||
#include "RimSummaryCaseCollection.h"
|
|
||||||
|
|
||||||
#include "cafAppEnum.h"
|
#include "cafAppEnum.h"
|
||||||
|
|
||||||
|
|||||||
@@ -296,38 +296,46 @@ void RimCorrelationReportPlot::deleteViewWidget()
|
|||||||
void RimCorrelationReportPlot::onLoadDataAndUpdate()
|
void RimCorrelationReportPlot::onLoadDataAndUpdate()
|
||||||
{
|
{
|
||||||
updateMdiWindowVisibility();
|
updateMdiWindowVisibility();
|
||||||
|
|
||||||
if ( m_showWindow )
|
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->setLabelFontSize( m_labelFontSize() );
|
||||||
m_correlationMatrixPlot->setAxisTitleFontSize( m_axisTitleFontSize() );
|
m_correlationMatrixPlot->setAxisTitleFontSize( m_axisTitleFontSize() );
|
||||||
m_correlationMatrixPlot->setAxisValueFontSize( m_axisValueFontSize() );
|
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->setLabelFontSize( m_labelFontSize() );
|
||||||
m_correlationPlot->setAxisTitleFontSize( m_axisTitleFontSize() );
|
m_correlationPlot->setAxisTitleFontSize( m_axisTitleFontSize() );
|
||||||
m_correlationPlot->setAxisValueFontSize( m_axisValueFontSize() );
|
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->setLabelFontSize( m_labelFontSize() );
|
||||||
m_parameterResultCrossPlot->setLegendFontSize( m_legendFontSize() );
|
m_parameterResultCrossPlot->setLegendFontSize( m_legendFontSize() );
|
||||||
m_parameterResultCrossPlot->setAxisTitleFontSize( m_axisTitleFontSize() );
|
m_parameterResultCrossPlot->setAxisTitleFontSize( m_axisTitleFontSize() );
|
||||||
m_parameterResultCrossPlot->setAxisValueFontSize( m_axisValueFontSize() );
|
m_parameterResultCrossPlot->setAxisValueFontSize( m_axisValueFontSize() );
|
||||||
|
|
||||||
m_correlationPlot->setShowAbsoluteValues( m_correlationMatrixPlot->showAbsoluteValues() );
|
|
||||||
m_correlationPlot->setSortByAbsoluteValues( m_correlationMatrixPlot->sortByAbsoluteValues() );
|
|
||||||
|
|
||||||
m_correlationMatrixPlot->loadDataAndUpdate();
|
m_correlationMatrixPlot->loadDataAndUpdate();
|
||||||
m_correlationPlot->loadDataAndUpdate();
|
m_correlationPlot->loadDataAndUpdate();
|
||||||
m_parameterResultCrossPlot->loadDataAndUpdate();
|
m_parameterResultCrossPlot->loadDataAndUpdate();
|
||||||
|
|
||||||
m_viewer->setPlotTitle( m_plotWindowTitle() );
|
m_viewer->setPlotTitle( m_plotWindowTitle() );
|
||||||
}
|
}
|
||||||
|
|
||||||
updateLayout();
|
updateLayout();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -17,7 +17,6 @@
|
|||||||
/////////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////////
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "RimCorrelationPlot.h"
|
|
||||||
#include "RimPlotWindow.h"
|
#include "RimPlotWindow.h"
|
||||||
|
|
||||||
#include "cafPdmChildField.h"
|
#include "cafPdmChildField.h"
|
||||||
|
|||||||
@@ -115,13 +115,7 @@ void RimParameterResultCrossPlot::fieldChangedByUi( const caf::PdmFieldHandle* c
|
|||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
void RimParameterResultCrossPlot::defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering )
|
void RimParameterResultCrossPlot::defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering )
|
||||||
{
|
{
|
||||||
m_selectedVarsUiField = selectedQuantitiesText();
|
appendDataSourceFields( uiConfigName, uiOrdering );
|
||||||
|
|
||||||
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 );
|
|
||||||
|
|
||||||
caf::PdmUiGroup* crossPlotGroup = uiOrdering.addNewGroup( "Cross Plot Parameters" );
|
caf::PdmUiGroup* crossPlotGroup = uiOrdering.addNewGroup( "Cross Plot Parameters" );
|
||||||
crossPlotGroup->add( &m_ensembleParameter );
|
crossPlotGroup->add( &m_ensembleParameter );
|
||||||
@@ -256,9 +250,12 @@ void RimParameterResultCrossPlot::createPoints()
|
|||||||
QStringList caseNames = caseNamesOfValidEnsembleCases( ensemble );
|
QStringList caseNames = caseNamesOfValidEnsembleCases( ensemble );
|
||||||
QString commonCaseRoot = RiaTextStringTools::commonRoot( caseNames );
|
QString commonCaseRoot = RiaTextStringTools::commonRoot( caseNames );
|
||||||
|
|
||||||
|
std::set<RimSummaryCase*> activeCases = filterEnsembleCases( ensemble );
|
||||||
|
|
||||||
for ( size_t caseIdx = 0u; caseIdx < ensemble->allSummaryCases().size(); ++caseIdx )
|
for ( size_t caseIdx = 0u; caseIdx < ensemble->allSummaryCases().size(); ++caseIdx )
|
||||||
{
|
{
|
||||||
auto summaryCase = ensemble->allSummaryCases()[caseIdx];
|
auto summaryCase = ensemble->allSummaryCases()[caseIdx];
|
||||||
|
if ( activeCases.count( summaryCase ) == 0 ) continue;
|
||||||
|
|
||||||
RifSummaryReaderInterface* reader = summaryCase->summaryReader();
|
RifSummaryReaderInterface* reader = summaryCase->summaryReader();
|
||||||
if ( !reader ) continue;
|
if ( !reader ) continue;
|
||||||
|
|||||||
@@ -98,6 +98,8 @@ CAF_PDM_SOURCE_INIT( RimEnsembleCurveSet, "RimEnsembleCurveSet" );
|
|||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
RimEnsembleCurveSet::RimEnsembleCurveSet()
|
RimEnsembleCurveSet::RimEnsembleCurveSet()
|
||||||
|
: filterChanged( this )
|
||||||
|
|
||||||
{
|
{
|
||||||
CAF_PDM_InitObject( "Ensemble Curve Set", ":/EnsembleCurveSet16x16.png", "", "" );
|
CAF_PDM_InitObject( "Ensemble Curve Set", ":/EnsembleCurveSet16x16.png", "", "" );
|
||||||
|
|
||||||
@@ -577,6 +579,8 @@ void RimEnsembleCurveSet::updateAllCurves()
|
|||||||
updateEnsembleCurves( filteredCases );
|
updateEnsembleCurves( filteredCases );
|
||||||
updateStatisticsCurves( m_statistics->basedOnFilteredCases() ? filteredCases : allCases );
|
updateStatisticsCurves( m_statistics->basedOnFilteredCases() ? filteredCases : allCases );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
filterChanged.send();
|
||||||
}
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
|||||||
@@ -82,6 +82,10 @@ public:
|
|||||||
RimEnsembleCurveSet();
|
RimEnsembleCurveSet();
|
||||||
~RimEnsembleCurveSet() override;
|
~RimEnsembleCurveSet() override;
|
||||||
|
|
||||||
|
caf::Signal<> filterChanged;
|
||||||
|
|
||||||
|
QString name() const;
|
||||||
|
|
||||||
bool isCurvesVisible();
|
bool isCurvesVisible();
|
||||||
void setColor( cvf::Color3f color );
|
void setColor( cvf::Color3f color );
|
||||||
|
|
||||||
@@ -173,7 +177,6 @@ private:
|
|||||||
|
|
||||||
void updateQwtPlotAxis();
|
void updateQwtPlotAxis();
|
||||||
|
|
||||||
QString name() const;
|
|
||||||
QString createAutoName() const;
|
QString createAutoName() const;
|
||||||
|
|
||||||
void updateLegendMappingMode();
|
void updateLegendMappingMode();
|
||||||
|
|||||||
@@ -543,7 +543,8 @@ time_t timeDiff( time_t lhs, time_t rhs )
|
|||||||
std::vector<std::pair<EnsembleParameter, double>>
|
std::vector<std::pair<EnsembleParameter, double>>
|
||||||
RimSummaryCaseCollection::parameterCorrelations( const RifEclipseSummaryAddress& address,
|
RimSummaryCaseCollection::parameterCorrelations( const RifEclipseSummaryAddress& address,
|
||||||
time_t timeStep,
|
time_t timeStep,
|
||||||
const std::vector<QString>& selectedParameters ) const
|
const std::vector<QString>& selectedParameters,
|
||||||
|
const std::set<RimSummaryCase*>& selectedCases ) const
|
||||||
{
|
{
|
||||||
auto parameters = variationSortedEnsembleParameters( true );
|
auto parameters = variationSortedEnsembleParameters( true );
|
||||||
|
|
||||||
@@ -568,6 +569,8 @@ std::vector<std::pair<EnsembleParameter, double>>
|
|||||||
RifSummaryReaderInterface* reader = summaryCase->summaryReader();
|
RifSummaryReaderInterface* reader = summaryCase->summaryReader();
|
||||||
if ( !reader ) continue;
|
if ( !reader ) continue;
|
||||||
|
|
||||||
|
if ( !selectedCases.empty() && selectedCases.count( summaryCase ) == 0 ) continue;
|
||||||
|
|
||||||
if ( !summaryCase->caseRealizationParameters() ) continue;
|
if ( !summaryCase->caseRealizationParameters() ) continue;
|
||||||
|
|
||||||
std::vector<double> values;
|
std::vector<double> values;
|
||||||
|
|||||||
@@ -125,7 +125,9 @@ public:
|
|||||||
std::vector<std::pair<EnsembleParameter, double>>
|
std::vector<std::pair<EnsembleParameter, double>>
|
||||||
parameterCorrelations( const RifEclipseSummaryAddress& address,
|
parameterCorrelations( const RifEclipseSummaryAddress& address,
|
||||||
time_t selectedTimeStep,
|
time_t selectedTimeStep,
|
||||||
const std::vector<QString>& selectedParameters = {} ) const;
|
const std::vector<QString>& selectedParameters = {},
|
||||||
|
const std::set<RimSummaryCase*>& selectedCases = {} ) const;
|
||||||
|
|
||||||
std::vector<std::pair<EnsembleParameter, double>>
|
std::vector<std::pair<EnsembleParameter, double>>
|
||||||
parameterCorrelationsAllTimeSteps( const RifEclipseSummaryAddress& address,
|
parameterCorrelationsAllTimeSteps( const RifEclipseSummaryAddress& address,
|
||||||
const std::vector<QString>& selectedParameters = {} ) const;
|
const std::vector<QString>& selectedParameters = {} ) const;
|
||||||
|
|||||||
Reference in New Issue
Block a user