diff --git a/ApplicationCode/ProjectDataModel/Summary/RimDerivedEnsembleCaseCollection.cpp b/ApplicationCode/ProjectDataModel/Summary/RimDerivedEnsembleCaseCollection.cpp index 7c1622bf4b..805bd86ac4 100644 --- a/ApplicationCode/ProjectDataModel/Summary/RimDerivedEnsembleCaseCollection.cpp +++ b/ApplicationCode/ProjectDataModel/Summary/RimDerivedEnsembleCaseCollection.cpp @@ -120,13 +120,13 @@ std::vector RimDerivedEnsembleCaseCollection::allSummaryCases() //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -std::set RimDerivedEnsembleCaseCollection::calculateUnionOfSummaryAddresses() const +std::set RimDerivedEnsembleCaseCollection::ensembleSummaryAddresses() const { std::set addresses; if (!m_ensemble1 || !m_ensemble2) return addresses; - addresses = m_ensemble1->calculateUnionOfSummaryAddresses(); - auto addrs2 = m_ensemble2->calculateUnionOfSummaryAddresses(); + addresses = m_ensemble1->ensembleSummaryAddresses(); + auto addrs2 = m_ensemble2->ensembleSummaryAddresses(); addresses.insert(addrs2.begin(), addrs2.end()); return addresses; } diff --git a/ApplicationCode/ProjectDataModel/Summary/RimDerivedEnsembleCaseCollection.h b/ApplicationCode/ProjectDataModel/Summary/RimDerivedEnsembleCaseCollection.h index 6681dd0fda..edf77e0834 100644 --- a/ApplicationCode/ProjectDataModel/Summary/RimDerivedEnsembleCaseCollection.h +++ b/ApplicationCode/ProjectDataModel/Summary/RimDerivedEnsembleCaseCollection.h @@ -53,7 +53,7 @@ public: void setEnsemble2(RimSummaryCaseCollection* ensemble); virtual std::vector allSummaryCases() const override; - virtual std::set calculateUnionOfSummaryAddresses() const override; + virtual std::set ensembleSummaryAddresses() const override; void updateDerivedEnsembleCases(); bool hasCaseReference(const RimSummaryCase* sumCase) const; diff --git a/ApplicationCode/ProjectDataModel/Summary/RimSummaryCaseCollection.cpp b/ApplicationCode/ProjectDataModel/Summary/RimSummaryCaseCollection.cpp index c5776a9778..7206c3af90 100644 --- a/ApplicationCode/ProjectDataModel/Summary/RimSummaryCaseCollection.cpp +++ b/ApplicationCode/ProjectDataModel/Summary/RimSummaryCaseCollection.cpp @@ -170,26 +170,34 @@ void RimSummaryCaseCollection::setAsEnsemble(bool isEnsemble) //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -std::set RimSummaryCaseCollection::calculateUnionOfSummaryAddresses() const +std::set RimSummaryCaseCollection::ensembleSummaryAddresses() const { - std::set addressUnion; + std::set addresses; + size_t maxAddrCount = 0; + int maxAddrIndex = -1; - for (RimSummaryCase* currCase: m_cases) + for (int i = 0; i < (int)m_cases.size(); i++) { - if ( !currCase ) continue; - + RimSummaryCase* currCase = m_cases[i]; + if (!currCase) continue; + RifSummaryReaderInterface* reader = currCase->summaryReader(); + if (!reader) continue; - if ( !reader ) continue; + size_t addrCount = reader->allResultAddresses().size(); + if (addrCount > maxAddrCount) + { + maxAddrCount = addrCount; + maxAddrIndex = (int)i; + } + } - const std::set& readerAddresses = reader->allResultAddresses(); - addressUnion.insert(readerAddresses.begin(), readerAddresses.end()); - - // We assume that all cases have the same addresses when they have equal number of addresses. - // In that case there is no need to calculate the union, we only use the addresses from the first case - if (m_commonAddressCount > 0) break; - } - return addressUnion; + if (maxAddrIndex >= 0) + { + const std::set& addrs = m_cases[maxAddrIndex]->summaryReader()->allResultAddresses(); + addresses.insert(addrs.begin(), addrs.end()); + } + return addresses; } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationCode/ProjectDataModel/Summary/RimSummaryCaseCollection.h b/ApplicationCode/ProjectDataModel/Summary/RimSummaryCaseCollection.h index 3fa0e59d6c..fb6939b538 100644 --- a/ApplicationCode/ProjectDataModel/Summary/RimSummaryCaseCollection.h +++ b/ApplicationCode/ProjectDataModel/Summary/RimSummaryCaseCollection.h @@ -72,7 +72,7 @@ public: QString name() const; bool isEnsemble() const; void setAsEnsemble(bool isEnsemble); - virtual std::set calculateUnionOfSummaryAddresses() const; + virtual std::set ensembleSummaryAddresses() const; EnsembleParameter ensembleParameter(const QString& paramName) const; void calculateEnsembleParametersIntersectionHash(); void clearEnsembleParametersHashes(); diff --git a/ApplicationCode/UserInterface/RiuSummaryCurveDefSelection.cpp b/ApplicationCode/UserInterface/RiuSummaryCurveDefSelection.cpp index a3407e15fd..2755cd47ed 100644 --- a/ApplicationCode/UserInterface/RiuSummaryCurveDefSelection.cpp +++ b/ApplicationCode/UserInterface/RiuSummaryCurveDefSelection.cpp @@ -273,7 +273,7 @@ std::vector RiuSummaryCurveDefSelection::allCurveDefi // Build case list if (ensemble) { - auto addresses = ensemble->calculateUnionOfSummaryAddresses(); + auto addresses = ensemble->ensembleSummaryAddresses(); addressesFromSource.insert(addresses.begin(), addresses.end()); auto ensembleCases = ensemble->allSummaryCases(); casesFromSource.insert(casesFromSource.end(), ensembleCases.begin(), ensembleCases.end()); @@ -324,7 +324,7 @@ std::vector RiuSummaryCurveDefSelection::allCurveSetDefin std::set addressesFromSource; // Build case list - auto addresses = ensemble->calculateUnionOfSummaryAddresses(); + auto addresses = ensemble->ensembleSummaryAddresses(); addressesFromSource.insert(addresses.begin(), addresses.end()); for (const auto& addressFromSource : addressesFromSource) @@ -354,7 +354,7 @@ std::vector RiuSummaryCurveDefSelection::selection() if (ensemble) { - std::set addressUnion = ensemble->calculateUnionOfSummaryAddresses(); + std::set addressUnion = ensemble->ensembleSummaryAddresses(); for ( const auto& addr : selectedAddressesFromUi) { if (addressUnion.count(addr)) @@ -978,7 +978,7 @@ std::set RiuSummaryCurveDefSelection::findPossibleSumm } else if (currEnsemble) { - allAddresses = currEnsemble->calculateUnionOfSummaryAddresses(); + allAddresses = currEnsemble->ensembleSummaryAddresses(); } bool applySelections = identifierAndField == nullptr || (!isVectorField && controllingIdentifierAndField != nullptr);