#6479 Update analysis and correlation plots when closing derived cases

This commit is contained in:
Gaute Lindkvist
2020-09-11 13:55:04 +02:00
parent 81b2bd1720
commit b4aaaa98e9
22 changed files with 269 additions and 60 deletions

View File

@@ -144,7 +144,7 @@ std::set<RifEclipseSummaryAddress> RimDerivedEnsembleCaseCollection::ensembleSum
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimDerivedEnsembleCaseCollection::updateDerivedEnsembleCases()
void RimDerivedEnsembleCaseCollection::createDerivedEnsembleCases()
{
if ( !m_ensemble1 || !m_ensemble2 ) return;
@@ -194,7 +194,7 @@ void RimDerivedEnsembleCaseCollection::updateDerivedEnsembleCases()
// If other derived ensembles are referring to this ensemble, update their cases as well
for ( auto referring : findReferringEnsembles() )
{
referring->updateDerivedEnsembleCases();
referring->createDerivedEnsembleCases();
}
deleteCasesNoInUse();
@@ -343,7 +343,7 @@ void RimDerivedEnsembleCaseCollection::fieldChangedByUi( const caf::PdmFieldHand
if ( doUpdateCases )
{
updateDerivedEnsembleCases();
createDerivedEnsembleCases();
updateConnectedEditors();
if ( doShowDialog && m_ensemble1 != nullptr && m_ensemble2 != nullptr && allSummaryCases().empty() )
@@ -521,6 +521,27 @@ void RimDerivedEnsembleCaseCollection::updateAutoName()
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimDerivedEnsembleCaseCollection::updateDerivedEnsembleCases()
{
for ( auto& derivedCase : allDerivedCases( true ) )
{
derivedCase->createSummaryReaderInterface();
auto crp = derivedCase->summaryCase1()->caseRealizationParameters();
if ( !crp ) continue;
derivedCase->setCaseRealizationParameters( crp );
}
// If other derived ensembles are referring to this ensemble, update their cases as well
for ( auto referring : findReferringEnsembles() )
{
referring->updateDerivedEnsembleCases();
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------

View File

@@ -62,8 +62,10 @@ public:
std::vector<RimSummaryCase*> allSummaryCases() const override;
std::set<RifEclipseSummaryAddress> ensembleSummaryAddresses() const override;
void createDerivedEnsembleCases();
void updateDerivedEnsembleCases();
bool hasCaseReference( const RimSummaryCase* sumCase ) const;
bool hasCaseReference( const RimSummaryCase* sumCase ) const;
void onLoadDataAndUpdate() override;

View File

@@ -71,10 +71,9 @@ RimDerivedSummaryCase::RimDerivedSummaryCase()
CAF_PDM_InitFieldNoDefault( &m_useFixedTimeStep, "UseFixedTimeStep", "Use Fixed Time Step", "", "", "" );
CAF_PDM_InitField( &m_fixedTimeStepIndex, "FixedTimeStepIndex", 0, "Time Step", "", "", "" );
CAF_PDM_InitField( &m_inUse, "InUse", false, "In Use", "", "", "" );
m_fixedTimeStepIndex.uiCapability()->setUiEditorTypeName( caf::PdmUiTreeSelectionEditor::uiEditorTypeName() );
m_fixedTimeStepIndex.uiCapability()->setUiLabelPosition( caf::PdmUiItemInfo::HIDDEN );
m_inUse = false;
}
//--------------------------------------------------------------------------------------------------
@@ -427,6 +426,22 @@ void RimDerivedSummaryCase::updateDisplayNameFromCases()
m_displayName = name;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RimSummaryCase* RimDerivedSummaryCase::summaryCase1() const
{
return m_summaryCase1;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RimSummaryCase* RimDerivedSummaryCase::summaryCase2() const
{
return m_summaryCase2;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------

View File

@@ -83,6 +83,9 @@ public:
void updateDisplayNameFromCases();
RimSummaryCase* summaryCase1() const;
RimSummaryCase* summaryCase2() const;
protected:
QString caseName() const override;
@@ -107,7 +110,7 @@ private:
caf::PdmField<caf::AppEnum<FixedTimeStepMode>> m_useFixedTimeStep;
caf::PdmField<int> m_fixedTimeStepIndex;
bool m_inUse;
caf::PdmField<bool> m_inUse;
std::unique_ptr<RifDerivedEnsembleReader> m_reader;
std::map<RifEclipseSummaryAddress, std::pair<std::vector<time_t>, std::vector<double>>> m_dataCache;

View File

@@ -24,6 +24,7 @@
#include "RicfCommandObject.h"
#include "RimAnalysisPlotDataEntry.h"
#include "RimDerivedEnsembleCaseCollection.h"
#include "RimEnsembleCurveSet.h"
#include "RimGridSummaryCase.h"
@@ -187,6 +188,7 @@ QString EnsembleParameter::uiName() const
//--------------------------------------------------------------------------------------------------
RimSummaryCaseCollection::RimSummaryCaseCollection()
: caseNameChanged( this )
, caseRemoved( this )
{
CAF_PDM_InitScriptableObject( "Summary Case Group", ":/SummaryGroup16x16.png", "", "" );
@@ -233,6 +235,8 @@ void RimSummaryCaseCollection::removeCase( RimSummaryCase* summaryCase )
m_cachedSortedEnsembleParameters.clear();
caseRemoved.send( summaryCase );
updateReferringCurveSets();
if ( m_isEnsemble && m_cases.size() != caseCountBeforeRemove )
@@ -245,7 +249,7 @@ void RimSummaryCaseCollection::removeCase( RimSummaryCase* summaryCase )
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimSummaryCaseCollection::addCase( RimSummaryCase* summaryCase, bool updateCurveSets )
void RimSummaryCaseCollection::addCase( RimSummaryCase* summaryCase )
{
summaryCase->nameChanged.connect( this, &RimSummaryCaseCollection::onCaseNameChanged );
@@ -255,12 +259,12 @@ void RimSummaryCaseCollection::addCase( RimSummaryCase* summaryCase, bool update
// Update derived ensemble cases (if any)
std::vector<RimDerivedEnsembleCaseCollection*> referringObjects;
objectsWithReferringPtrFieldsOfType( referringObjects );
for ( auto derEnsemble : referringObjects )
for ( auto derivedEnsemble : referringObjects )
{
if ( !derEnsemble ) continue;
if ( !derivedEnsemble ) continue;
derEnsemble->updateDerivedEnsembleCases();
if ( updateCurveSets ) derEnsemble->updateReferringCurveSets();
derivedEnsemble->createDerivedEnsembleCases();
derivedEnsemble->updateReferringCurveSets();
}
if ( m_isEnsemble )
@@ -269,7 +273,7 @@ void RimSummaryCaseCollection::addCase( RimSummaryCase* summaryCase, bool update
calculateEnsembleParametersIntersectionHash();
}
if ( updateCurveSets ) updateReferringCurveSets();
updateReferringCurveSets();
}
//--------------------------------------------------------------------------------------------------
@@ -924,13 +928,18 @@ void RimSummaryCaseCollection::onLoadDataAndUpdate()
void RimSummaryCaseCollection::updateReferringCurveSets()
{
// Update curve set referring to this group
std::vector<RimEnsembleCurveSet*> referringObjects;
std::vector<caf::PdmObject*> referringObjects;
objectsWithReferringPtrFieldsOfType( referringObjects );
for ( auto curveSet : referringObjects )
for ( auto object : referringObjects )
{
RimEnsembleCurveSet* curveSet = dynamic_cast<RimEnsembleCurveSet*>( object );
bool updateParentPlot = true;
if ( curveSet ) curveSet->loadDataAndUpdate( updateParentPlot );
if ( curveSet )
{
curveSet->loadDataAndUpdate( updateParentPlot );
}
}
}

View File

@@ -92,14 +92,15 @@ class RimSummaryCaseCollection : public caf::PdmObject
CAF_PDM_HEADER_INIT;
public:
caf::Signal<> caseNameChanged;
caf::Signal<> caseNameChanged;
caf::Signal<RimSummaryCase*> caseRemoved;
public:
RimSummaryCaseCollection();
~RimSummaryCaseCollection() override;
void removeCase( RimSummaryCase* summaryCase );
void addCase( RimSummaryCase* summaryCase, bool updateCurveSets = true );
void addCase( RimSummaryCase* summaryCase );
virtual std::vector<RimSummaryCase*> allSummaryCases() const;
void setName( const QString& name );
QString name() const;

View File

@@ -251,7 +251,7 @@ void RimSummaryCaseMainCollection::removeCase( RimSummaryCase* summaryCase )
// Update derived ensemble cases (if any)
for ( auto derEnsemble : derivedEnsembles )
{
derEnsemble->updateDerivedEnsembleCases();
derEnsemble->createDerivedEnsembleCases();
}
}

View File

@@ -263,7 +263,7 @@ void RimSummaryPlotFilterTextCurveSetEditor::fieldChangedByUi( const caf::PdmFie
for ( const auto& filteredAddress : filteredAddressesFromSource )
{
curveDefinitions.insert( RiaSummaryCurveDefinition( sumCase, filteredAddress, ensemble ) );
curveDefinitions.insert( RiaSummaryCurveDefinition( sumCase, filteredAddress, ensemble, true ) );
}
}