#4763 Derived Ensemble: Allow matching of cases when parameters differs

This commit is contained in:
Magne Sjaastad 2020-03-06 15:37:49 +01:00
parent 7c9a09a40c
commit 226ff16063
3 changed files with 34 additions and 5 deletions

View File

@ -59,6 +59,8 @@ RimDerivedEnsembleCaseCollection::RimDerivedEnsembleCaseCollection()
CAF_PDM_InitField( &m_caseCount, "CaseCount", QString( "" ), "Matching Cases", "", "", "" ); CAF_PDM_InitField( &m_caseCount, "CaseCount", QString( "" ), "Matching Cases", "", "", "" );
m_caseCount.uiCapability()->setUiReadOnly( true ); m_caseCount.uiCapability()->setUiReadOnly( true );
CAF_PDM_InitField( &m_matchOnParameters, "MatchOnParameters", false, "Match On Parameters", "", "", "" );
// Do not show child cases // Do not show child cases
uiCapability()->setUiTreeChildrenHidden( true ); uiCapability()->setUiTreeChildrenHidden( true );
@ -136,11 +138,19 @@ void RimDerivedEnsembleCaseCollection::updateDerivedEnsembleCases()
auto crp = sumCase1->caseRealizationParameters(); auto crp = sumCase1->caseRealizationParameters();
if ( !crp ) continue; if ( !crp ) continue;
const auto& sumCase2 = findCaseByParametersHash( cases2, crp->parametersHash() ); RimSummaryCase* summaryCase2 = nullptr;
if ( !sumCase2 ) continue; if ( m_matchOnParameters )
{
summaryCase2 = findCaseByParametersHash( cases2, crp->parametersHash() );
}
else
{
summaryCase2 = findCaseByRealizationNumber( cases2, crp->realizationNumber() );
}
if ( !summaryCase2 ) continue;
auto derivedCase = firstCaseNotInUse(); auto derivedCase = firstCaseNotInUse();
derivedCase->setSummaryCases( sumCase1, sumCase2 ); derivedCase->setSummaryCases( sumCase1, summaryCase2 );
derivedCase->setOperator( m_operator() ); derivedCase->setOperator( m_operator() );
derivedCase->createSummaryReaderInterface(); derivedCase->createSummaryReaderInterface();
derivedCase->setCaseRealizationParameters( crp ); derivedCase->setCaseRealizationParameters( crp );
@ -220,6 +230,7 @@ void RimDerivedEnsembleCaseCollection::defineUiOrdering( QString uiConfigName, c
uiOrdering.add( &m_operator ); uiOrdering.add( &m_operator );
uiOrdering.add( &m_ensemble2 ); uiOrdering.add( &m_ensemble2 );
uiOrdering.add( &m_swapEnsemblesButton ); uiOrdering.add( &m_swapEnsemblesButton );
uiOrdering.add( &m_matchOnParameters );
uiOrdering.skipRemainingFields( true ); uiOrdering.skipRemainingFields( true );
@ -238,7 +249,7 @@ void RimDerivedEnsembleCaseCollection::fieldChangedByUi( const caf::PdmFieldHand
bool doUpdateCases = false; bool doUpdateCases = false;
bool doShowDialog = false; bool doShowDialog = false;
if ( changedField == &m_ensemble1 || changedField == &m_ensemble2 ) if ( changedField == &m_ensemble1 || changedField == &m_ensemble2 || m_matchOnParameters )
{ {
doUpdate = true; doUpdate = true;
doUpdateCases = true; doUpdateCases = true;
@ -408,6 +419,20 @@ RimSummaryCase* RimDerivedEnsembleCaseCollection::findCaseByParametersHash( cons
return nullptr; return nullptr;
} }
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RimSummaryCase* RimDerivedEnsembleCaseCollection::findCaseByRealizationNumber( const std::vector<RimSummaryCase*>& cases,
int realizationNumber ) const
{
for ( auto sumCase : cases )
{
auto ensembleParameters = sumCase->caseRealizationParameters();
if ( ensembleParameters && ensembleParameters->realizationNumber() == realizationNumber ) return sumCase;
}
return nullptr;
}
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------

View File

@ -73,7 +73,10 @@ private:
RimDerivedSummaryCase* firstCaseNotInUse(); RimDerivedSummaryCase* firstCaseNotInUse();
std::vector<RimDerivedSummaryCase*> allDerivedCases( bool activeOnly ) const; std::vector<RimDerivedSummaryCase*> allDerivedCases( bool activeOnly ) const;
void updateAutoName(); void updateAutoName();
RimSummaryCase* findCaseByParametersHash( const std::vector<RimSummaryCase*>& cases, size_t hash ) const; RimSummaryCase* findCaseByParametersHash( const std::vector<RimSummaryCase*>& cases, size_t hash ) const;
RimSummaryCase* findCaseByRealizationNumber( const std::vector<RimSummaryCase*>& cases, int realizationNumber ) const;
std::vector<RimDerivedEnsembleCaseCollection*> findReferringEnsembles() const; std::vector<RimDerivedEnsembleCaseCollection*> findReferringEnsembles() const;
private: private:
@ -85,4 +88,5 @@ private:
caf::PdmField<caf::AppEnum<DerivedSummaryOperator>> m_operator; caf::PdmField<caf::AppEnum<DerivedSummaryOperator>> m_operator;
caf::PdmField<bool> m_swapEnsemblesButton; caf::PdmField<bool> m_swapEnsemblesButton;
caf::PdmField<QString> m_caseCount; caf::PdmField<QString> m_caseCount;
caf::PdmField<bool> m_matchOnParameters;
}; };

View File

@ -66,7 +66,7 @@ void addCaseRealizationParametersIfFound( RimSummaryCase& sumCase, const QString
int realizationNumber = RifCaseRealizationParametersFileLocator::realizationNumber( modelFolderOrFile ); int realizationNumber = RifCaseRealizationParametersFileLocator::realizationNumber( modelFolderOrFile );
parameters->setRealizationNumber( realizationNumber ); parameters->setRealizationNumber( realizationNumber );
parameters->addParameter( "REALIZATION_NUM", realizationNumber ); parameters->addParameter( "RI:REALIZATION_NUM", realizationNumber );
sumCase.setCaseRealizationParameters( parameters ); sumCase.setCaseRealizationParameters( parameters );
} }