diff --git a/ApplicationLibCode/Application/Tools/RiaSummaryTools.cpp b/ApplicationLibCode/Application/Tools/RiaSummaryTools.cpp index 388a0e2f11..b3a13f49bc 100644 --- a/ApplicationLibCode/Application/Tools/RiaSummaryTools.cpp +++ b/ApplicationLibCode/Application/Tools/RiaSummaryTools.cpp @@ -24,6 +24,7 @@ #include "RifEclipseSummaryAddress.h" #include "RimMainPlotCollection.h" +#include "RimObservedDataCollection.h" #include "RimOilField.h" #include "RimProject.h" #include "RimSummaryAddress.h" @@ -81,6 +82,15 @@ RimSummaryCaseMainCollection* RiaSummaryTools::summaryCaseMainCollection() return summaryCaseMainCollection; } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RimObservedDataCollection* RiaSummaryTools::observedDataCollection() +{ + RimProject* project = RimProject::current(); + return project->activeOilField()->observedDataCollection(); +} + //-------------------------------------------------------------------------------------------------- /// Update the summary curves referencing this curve, as the curve is identified by the name //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/Application/Tools/RiaSummaryTools.h b/ApplicationLibCode/Application/Tools/RiaSummaryTools.h index 5fbe0ad213..05aecd0164 100644 --- a/ApplicationLibCode/Application/Tools/RiaSummaryTools.h +++ b/ApplicationLibCode/Application/Tools/RiaSummaryTools.h @@ -19,6 +19,7 @@ #pragma once #include "RiaDateTimeDefines.h" +#include "RimObservedDataCollection.h" #include @@ -32,6 +33,7 @@ class RimSummaryCrossPlotCollection; class RimSummaryCaseMainCollection; class RimSummaryCase; class RimSummaryCaseCollection; +class RimObservedDataCollection; class RifEclipseSummaryAddress; @@ -52,6 +54,7 @@ public: static RimSummaryCrossPlotCollection* summaryCrossPlotCollection(); static RimSummaryCaseMainCollection* summaryCaseMainCollection(); static RimSummaryMultiPlotCollection* summaryMultiPlotCollection(); + static RimObservedDataCollection* observedDataCollection(); static std::vector singleTopLevelSummaryCases(); diff --git a/ApplicationLibCode/FileInterface/RifEclipseSummaryAddress.cpp b/ApplicationLibCode/FileInterface/RifEclipseSummaryAddress.cpp index 2db385a65f..48fec6dd72 100644 --- a/ApplicationLibCode/FileInterface/RifEclipseSummaryAddress.cpp +++ b/ApplicationLibCode/FileInterface/RifEclipseSummaryAddress.cpp @@ -411,11 +411,12 @@ RifEclipseSummaryAddress //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -RifEclipseSummaryAddress RifEclipseSummaryAddress::importedAddress( const std::string& vectorName ) +RifEclipseSummaryAddress RifEclipseSummaryAddress::importedAddress( const std::string& vectorName, int calculationId ) { RifEclipseSummaryAddress addr; addr.m_variableCategory = SUMMARY_IMPORTED; addr.m_vectorName = vectorName; + addr.m_id = calculationId; return addr; } diff --git a/ApplicationLibCode/FileInterface/RifEclipseSummaryAddress.h b/ApplicationLibCode/FileInterface/RifEclipseSummaryAddress.h index 29c283d251..23cb18508e 100644 --- a/ApplicationLibCode/FileInterface/RifEclipseSummaryAddress.h +++ b/ApplicationLibCode/FileInterface/RifEclipseSummaryAddress.h @@ -124,7 +124,7 @@ public: static RifEclipseSummaryAddress blockAddress( const std::string& vectorName, int i, int j, int k, int calculationId = -1 ); static RifEclipseSummaryAddress blockLgrAddress( const std::string& vectorName, const std::string& lgrName, int i, int j, int k, int calculationId = -1 ); - static RifEclipseSummaryAddress importedAddress( const std::string& vectorName ); + static RifEclipseSummaryAddress importedAddress( const std::string& vectorName, int calculationId = -1 ); static RifEclipseSummaryAddress ensembleStatisticsAddress( const std::string& vectorName, const std::string& datavectorName ); static std::string generateStringFromAddresses( const std::vector& addressVector, diff --git a/ApplicationLibCode/ProjectDataModel/RimSummaryCalculation.cpp b/ApplicationLibCode/ProjectDataModel/RimSummaryCalculation.cpp index 76b3d08745..96114203e7 100644 --- a/ApplicationLibCode/ProjectDataModel/RimSummaryCalculation.cpp +++ b/ApplicationLibCode/ProjectDataModel/RimSummaryCalculation.cpp @@ -27,6 +27,8 @@ #include "RifSummaryReaderInterface.h" #include "RimDataSourceSteppingTools.h" +#include "RimObservedDataCollection.h" +#include "RimObservedSummaryData.h" #include "RimProject.h" #include "RimSummaryAddress.h" #include "RimSummaryCalculationCollection.h" @@ -267,7 +269,8 @@ void RimSummaryCalculation::substituteVariables( std::vectorrefreshMetaData(); } + RimObservedDataCollection* observedDataCollection = RiaSummaryTools::observedDataCollection(); + auto observedData = observedDataCollection->allObservedSummaryData(); + for ( auto obs : observedData ) + { + obs->createSummaryReaderInterface(); + obs->createRftReaderInterface(); + obs->refreshMetaData(); + } + auto summaryCaseCollections = summaryCaseCollection->summaryCaseCollections(); for ( RimSummaryCaseCollection* summaryCaseCollection : summaryCaseCollections ) { @@ -559,6 +571,10 @@ std::vector addresses.push_back( RimSummaryCalculationAddress( RifEclipseSummaryAddress::regionToRegionAddress( name, r1, r2, m_id ) ) ); } } + else if ( category == RifEclipseSummaryAddress::SUMMARY_IMPORTED ) + { + addresses.push_back( RimSummaryCalculationAddress( RifEclipseSummaryAddress::importedAddress( name, m_id ) ) ); + } return addresses; } @@ -603,6 +619,10 @@ RimSummaryCalculationAddress RimSummaryCalculation::singleAddressesForCategory( { return RifEclipseSummaryAddress::regionToRegionAddress( name, address.regionNumber(), address.regionNumber2(), m_id ); } + else if ( category == RifEclipseSummaryAddress::SUMMARY_IMPORTED ) + { + return RifEclipseSummaryAddress::importedAddress( name, m_id ); + } return RifEclipseSummaryAddress(); } diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimCsvUserData.cpp b/ApplicationLibCode/ProjectDataModel/Summary/RimCsvUserData.cpp index c0098ac569..e71afd28ed 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimCsvUserData.cpp +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimCsvUserData.cpp @@ -23,7 +23,13 @@ #include "RifColumnBasedUserDataParser.h" #include "RifCsvUserData.h" #include "RifKeywordVectorUserData.h" +#include "RifMultipleSummaryReaders.h" #include "RifSummaryReaderInterface.h" +#include "RifSummaryReaderMultipleFiles.h" + +#include "RimCalculatedSummaryCurveReader.h" +#include "RimProject.h" +#include "RimSummaryCalculationCollection.h" #include "cafUtils.h" @@ -57,7 +63,7 @@ RimCsvUserData::~RimCsvUserData() //-------------------------------------------------------------------------------------------------- void RimCsvUserData::createSummaryReaderInterface() { - m_summaryReader = nullptr; + m_multiSummaryReader = nullptr; if ( caf::Utils::fileExists( this->summaryHeaderFilename() ) ) { @@ -65,12 +71,16 @@ void RimCsvUserData::createSummaryReaderInterface() if ( csvUserData->parse( this->summaryHeaderFilename(), m_parseOptions->parseOptions(), &m_errorText ) ) { m_summaryReader = csvUserData; + + m_multiSummaryReader = new RifMultipleSummaryReaders; + m_multiSummaryReader->addReader( m_summaryReader.p() ); + + RimSummaryCalculationCollection* calcColl = RimProject::current()->calculationCollection(); + m_calculatedSummaryReader = new RifCalculatedSummaryCurveReader( calcColl, this ); + + m_multiSummaryReader->addReader( m_calculatedSummaryReader.p() ); } } - else - { - m_summaryReader = nullptr; - } } //-------------------------------------------------------------------------------------------------- @@ -78,11 +88,11 @@ void RimCsvUserData::createSummaryReaderInterface() //-------------------------------------------------------------------------------------------------- RifSummaryReaderInterface* RimCsvUserData::summaryReader() { - if ( m_summaryReader.isNull() ) + if ( m_multiSummaryReader.isNull() ) { createSummaryReaderInterface(); } - return m_summaryReader.p(); + return m_multiSummaryReader.p(); } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimCsvUserData.h b/ApplicationLibCode/ProjectDataModel/Summary/RimCsvUserData.h index d855ac0e48..b94e34e698 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimCsvUserData.h +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimCsvUserData.h @@ -28,6 +28,8 @@ #include "cvfObject.h" class RifSummaryReaderInterface; +class RifCalculatedSummaryCurveReader; +class RifMultipleSummaryReaders; //================================================================================================== // @@ -51,5 +53,7 @@ public: private: caf::PdmChildField m_parseOptions; cvf::ref m_summaryReader; + cvf::ref m_calculatedSummaryReader; + cvf::ref m_multiSummaryReader; QString m_errorText; }; diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimObservedEclipseUserData.cpp b/ApplicationLibCode/ProjectDataModel/Summary/RimObservedEclipseUserData.cpp index c56306c372..701c3c868f 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimObservedEclipseUserData.cpp +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimObservedEclipseUserData.cpp @@ -24,8 +24,13 @@ #include "RifColumnBasedUserDataParser.h" #include "RifKeywordVectorParser.h" #include "RifKeywordVectorUserData.h" +#include "RifMultipleSummaryReaders.h" #include "RifSummaryReaderInterface.h" +#include "RimCalculatedSummaryCurveReader.h" +#include "RimProject.h" +#include "RimSummaryCalculationCollection.h" + #include "cafUtils.h" #include @@ -53,7 +58,8 @@ RimObservedEclipseUserData::~RimObservedEclipseUserData() //-------------------------------------------------------------------------------------------------- void RimObservedEclipseUserData::createSummaryReaderInterface() { - m_summeryReader = nullptr; + m_multiSummaryReader = nullptr; + m_summaryReader = nullptr; if ( caf::Utils::fileExists( this->summaryHeaderFilename() ) ) { @@ -74,7 +80,7 @@ void RimObservedEclipseUserData::createSummaryReaderInterface() RifKeywordVectorUserData* keywordVectorUserData = new RifKeywordVectorUserData(); if ( keywordVectorUserData->parse( fileContents, customWellName() ) ) { - m_summeryReader = keywordVectorUserData; + m_summaryReader = keywordVectorUserData; } } else @@ -82,13 +88,20 @@ void RimObservedEclipseUserData::createSummaryReaderInterface() RifColumnBasedUserData* columnBaseUserData = new RifColumnBasedUserData(); if ( columnBaseUserData->parse( fileContents, &m_errorText ) ) { - m_summeryReader = columnBaseUserData; + m_summaryReader = columnBaseUserData; } } - } - else - { - m_summeryReader = nullptr; + + if ( m_summaryReader.notNull() ) + { + m_multiSummaryReader = new RifMultipleSummaryReaders; + m_multiSummaryReader->addReader( m_summaryReader.p() ); + + RimSummaryCalculationCollection* calcColl = RimProject::current()->calculationCollection(); + m_calculatedSummaryReader = new RifCalculatedSummaryCurveReader( calcColl, this ); + + m_multiSummaryReader->addReader( m_calculatedSummaryReader.p() ); + } } } @@ -97,11 +110,11 @@ void RimObservedEclipseUserData::createSummaryReaderInterface() //-------------------------------------------------------------------------------------------------- RifSummaryReaderInterface* RimObservedEclipseUserData::summaryReader() { - if ( m_summeryReader.isNull() ) + if ( m_multiSummaryReader.isNull() ) { createSummaryReaderInterface(); } - return m_summeryReader.p(); + return m_multiSummaryReader.p(); } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimObservedEclipseUserData.h b/ApplicationLibCode/ProjectDataModel/Summary/RimObservedEclipseUserData.h index 3dfbcf1d05..d7d7dd625f 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimObservedEclipseUserData.h +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimObservedEclipseUserData.h @@ -25,6 +25,8 @@ #include "cvfObject.h" class RifSummaryReaderInterface; +class RifCalculatedSummaryCurveReader; +class RifMultipleSummaryReaders; //================================================================================================== // @@ -44,6 +46,8 @@ public: QString errorMessagesFromReader() override; private: - cvf::ref m_summeryReader; - QString m_errorText; + cvf::ref m_summaryReader; + cvf::ref m_calculatedSummaryReader; + cvf::ref m_multiSummaryReader; + QString m_errorText; }; diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryAddressCollection.cpp b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryAddressCollection.cpp index 0567137042..268024fa04 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryAddressCollection.cpp +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryAddressCollection.cpp @@ -289,7 +289,7 @@ void RimSummaryAddressCollection::updateFolderStructure( const std::setaddToSubfolder( QString::fromStdString( address.itemUiText() ), CollectionContentType::IMPORTED, address, caseId, ensembleId ); + imported->addAddress( address, caseId, ensembleId ); break; default: diff --git a/ApplicationLibCode/UserInterface/RiuSummaryVectorSelectionUi.cpp b/ApplicationLibCode/UserInterface/RiuSummaryVectorSelectionUi.cpp index 3823e144c6..e51748f84e 100644 --- a/ApplicationLibCode/UserInterface/RiuSummaryVectorSelectionUi.cpp +++ b/ApplicationLibCode/UserInterface/RiuSummaryVectorSelectionUi.cpp @@ -1404,8 +1404,10 @@ void RiuSummaryVectorSelectionUi::appendOptionItemsForCategories( QList