diff --git a/ApplicationCode/ProjectDataModel/Summary/RimDerivedEnsembleCaseCollection.cpp b/ApplicationCode/ProjectDataModel/Summary/RimDerivedEnsembleCaseCollection.cpp index 64ef27a63f..3137f12fcf 100644 --- a/ApplicationCode/ProjectDataModel/Summary/RimDerivedEnsembleCaseCollection.cpp +++ b/ApplicationCode/ProjectDataModel/Summary/RimDerivedEnsembleCaseCollection.cpp @@ -59,6 +59,8 @@ RimDerivedEnsembleCaseCollection::RimDerivedEnsembleCaseCollection() CAF_PDM_InitField( &m_caseCount, "CaseCount", QString( "" ), "Matching Cases", "", "", "" ); m_caseCount.uiCapability()->setUiReadOnly( true ); + CAF_PDM_InitField( &m_matchOnParameters, "MatchOnParameters", false, "Match On Parameters", "", "", "" ); + // Do not show child cases uiCapability()->setUiTreeChildrenHidden( true ); @@ -136,11 +138,19 @@ void RimDerivedEnsembleCaseCollection::updateDerivedEnsembleCases() auto crp = sumCase1->caseRealizationParameters(); if ( !crp ) continue; - const auto& sumCase2 = findCaseByParametersHash( cases2, crp->parametersHash() ); - if ( !sumCase2 ) continue; + RimSummaryCase* summaryCase2 = nullptr; + if ( m_matchOnParameters ) + { + summaryCase2 = findCaseByParametersHash( cases2, crp->parametersHash() ); + } + else + { + summaryCase2 = findCaseByRealizationNumber( cases2, crp->realizationNumber() ); + } + if ( !summaryCase2 ) continue; auto derivedCase = firstCaseNotInUse(); - derivedCase->setSummaryCases( sumCase1, sumCase2 ); + derivedCase->setSummaryCases( sumCase1, summaryCase2 ); derivedCase->setOperator( m_operator() ); derivedCase->createSummaryReaderInterface(); derivedCase->setCaseRealizationParameters( crp ); @@ -220,6 +230,7 @@ void RimDerivedEnsembleCaseCollection::defineUiOrdering( QString uiConfigName, c uiOrdering.add( &m_operator ); uiOrdering.add( &m_ensemble2 ); uiOrdering.add( &m_swapEnsemblesButton ); + uiOrdering.add( &m_matchOnParameters ); uiOrdering.skipRemainingFields( true ); @@ -238,7 +249,7 @@ void RimDerivedEnsembleCaseCollection::fieldChangedByUi( const caf::PdmFieldHand bool doUpdateCases = false; bool doShowDialog = false; - if ( changedField == &m_ensemble1 || changedField == &m_ensemble2 ) + if ( changedField == &m_ensemble1 || changedField == &m_ensemble2 || m_matchOnParameters ) { doUpdate = true; doUpdateCases = true; @@ -408,6 +419,20 @@ RimSummaryCase* RimDerivedEnsembleCaseCollection::findCaseByParametersHash( cons return nullptr; } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RimSummaryCase* RimDerivedEnsembleCaseCollection::findCaseByRealizationNumber( const std::vector& cases, + int realizationNumber ) const +{ + for ( auto sumCase : cases ) + { + auto ensembleParameters = sumCase->caseRealizationParameters(); + if ( ensembleParameters && ensembleParameters->realizationNumber() == realizationNumber ) return sumCase; + } + return nullptr; +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationCode/ProjectDataModel/Summary/RimDerivedEnsembleCaseCollection.h b/ApplicationCode/ProjectDataModel/Summary/RimDerivedEnsembleCaseCollection.h index dba659b60c..743ce8c65e 100644 --- a/ApplicationCode/ProjectDataModel/Summary/RimDerivedEnsembleCaseCollection.h +++ b/ApplicationCode/ProjectDataModel/Summary/RimDerivedEnsembleCaseCollection.h @@ -73,7 +73,10 @@ private: RimDerivedSummaryCase* firstCaseNotInUse(); std::vector allDerivedCases( bool activeOnly ) const; void updateAutoName(); + RimSummaryCase* findCaseByParametersHash( const std::vector& cases, size_t hash ) const; + RimSummaryCase* findCaseByRealizationNumber( const std::vector& cases, int realizationNumber ) const; + std::vector findReferringEnsembles() const; private: @@ -85,4 +88,5 @@ private: caf::PdmField> m_operator; caf::PdmField m_swapEnsemblesButton; caf::PdmField m_caseCount; + caf::PdmField m_matchOnParameters; }; diff --git a/ApplicationCode/ProjectDataModel/Summary/RimSummaryCaseMainCollection.cpp b/ApplicationCode/ProjectDataModel/Summary/RimSummaryCaseMainCollection.cpp index 966f487c51..974674e551 100644 --- a/ApplicationCode/ProjectDataModel/Summary/RimSummaryCaseMainCollection.cpp +++ b/ApplicationCode/ProjectDataModel/Summary/RimSummaryCaseMainCollection.cpp @@ -66,7 +66,7 @@ void addCaseRealizationParametersIfFound( RimSummaryCase& sumCase, const QString int realizationNumber = RifCaseRealizationParametersFileLocator::realizationNumber( modelFolderOrFile ); parameters->setRealizationNumber( realizationNumber ); - parameters->addParameter( "REALIZATION_NUM", realizationNumber ); + parameters->addParameter( "RI:REALIZATION_NUM", realizationNumber ); sumCase.setCaseRealizationParameters( parameters ); }