Skip to content

Commit

Permalink
#9773 Add support for ensemble import of StimPlan/Reveal summary data.
Browse files Browse the repository at this point in the history
  • Loading branch information
kriben committed Apr 19, 2023
1 parent fea1940 commit e899043
Show file tree
Hide file tree
Showing 13 changed files with 198 additions and 69 deletions.
7 changes: 7 additions & 0 deletions ApplicationLibCode/Application/RiaSummaryDefines.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,13 @@

namespace RiaDefines
{
enum class FileType
{
SMSPEC,
REVEAL_SUMMARY,
STIMPLAN_SUMMARY
};

QString summaryField();
QString summaryAquifer();
QString summaryNetwork();
Expand Down
15 changes: 9 additions & 6 deletions ApplicationLibCode/Commands/RicImportEnsembleFeature.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -70,23 +70,25 @@ bool RicImportEnsembleFeature::isCommandEnabled()
void RicImportEnsembleFeature::onActionTriggered( bool isChecked )
{
QString pathCacheName = "ENSEMBLE_FILES";
auto [fileNames, ensembleGroupingMode] =
RicImportSummaryCasesFeature::runRecursiveSummaryCaseFileSearchDialogWithGrouping( "Import Ensemble", pathCacheName );
auto result = RicImportSummaryCasesFeature::runRecursiveSummaryCaseFileSearchDialogWithGrouping( "Import Ensemble", pathCacheName );
QStringList fileNames = result.files;
RiaEnsembleNameTools::EnsembleGroupingMode ensembleGroupingMode = result.groupingMode;
RiaDefines::FileType fileType = RicRecursiveFileSearchDialog::mapSummaryFileType( result.fileType );

if ( fileNames.isEmpty() ) return;

if ( ensembleGroupingMode == RiaEnsembleNameTools::EnsembleGroupingMode::NONE )
{
bool useEnsembleNameDialog = true;
importSingleEnsemble( fileNames, useEnsembleNameDialog, ensembleGroupingMode );
importSingleEnsemble( fileNames, useEnsembleNameDialog, ensembleGroupingMode, fileType );
}
else
{
std::vector<QStringList> groupedByEnsemble = RiaEnsembleNameTools::groupFilesByEnsemble( fileNames, ensembleGroupingMode );
for ( const QStringList& groupedFileNames : groupedByEnsemble )
{
bool useEnsembleNameDialog = false;
importSingleEnsemble( groupedFileNames, useEnsembleNameDialog, ensembleGroupingMode );
importSingleEnsemble( groupedFileNames, useEnsembleNameDialog, ensembleGroupingMode, fileType );
}
}
}
Expand All @@ -96,7 +98,8 @@ void RicImportEnsembleFeature::onActionTriggered( bool isChecked )
//--------------------------------------------------------------------------------------------------
void RicImportEnsembleFeature::importSingleEnsemble( const QStringList& fileNames,
bool useEnsembleNameDialog,
RiaEnsembleNameTools::EnsembleGroupingMode groupingMode )
RiaEnsembleNameTools::EnsembleGroupingMode groupingMode,
RiaDefines::FileType fileType )
{
QString ensembleName = RiaEnsembleNameTools::findSuitableEnsembleName( fileNames, groupingMode );

Expand All @@ -105,7 +108,7 @@ void RicImportEnsembleFeature::importSingleEnsemble( const QStringList&
if ( ensembleName.isEmpty() ) return;

std::vector<RimSummaryCase*> cases;
RicImportSummaryCasesFeature::createSummaryCasesFromFiles( fileNames, &cases, true );
RicImportSummaryCasesFeature::createSummaryCasesFromFiles( fileNames, &cases, fileType, true );

if ( cases.empty() ) return;

Expand Down
4 changes: 3 additions & 1 deletion ApplicationLibCode/Commands/RicImportEnsembleFeature.h
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
#pragma once

#include "RiaEnsembleNameTools.h"
#include "RiaSummaryDefines.h"

#include "cafCmdFeature.h"

Expand All @@ -41,5 +42,6 @@ class RicImportEnsembleFeature : public caf::CmdFeature
static QString askForEnsembleName( const QString& suggestion );
static void importSingleEnsemble( const QStringList& fileNames,
bool useEnsembleNameDialog,
RiaEnsembleNameTools::EnsembleGroupingMode groupingMode );
RiaEnsembleNameTools::EnsembleGroupingMode groupingMode,
RiaDefines::FileType fileType );
};
66 changes: 41 additions & 25 deletions ApplicationLibCode/Commands/RicImportSummaryCasesFeature.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@

#include "RicImportSummaryCasesFeature.h"

#include "RiaSummaryDefines.h"
#include "SummaryPlotCommands/RicNewSummaryCurveFeature.h"

#include "RiaGuiApplication.h"
Expand Down Expand Up @@ -73,12 +74,14 @@ bool RicImportSummaryCasesFeature::isCommandEnabled()
//--------------------------------------------------------------------------------------------------
void RicImportSummaryCasesFeature::onActionTriggered( bool isChecked )
{
RiaGuiApplication* app = RiaGuiApplication::instance();
QString pathCacheName = "INPUT_FILES";
QStringList fileNames = runRecursiveSummaryCaseFileSearchDialog( "Import Summary Cases", pathCacheName );
RiaGuiApplication* app = RiaGuiApplication::instance();
QString pathCacheName = "INPUT_FILES";
auto result = runRecursiveSummaryCaseFileSearchDialog( "Import Summary Cases", pathCacheName );
QStringList fileNames = result.files;
RiaDefines::FileType fileType = RicRecursiveFileSearchDialog::mapSummaryFileType( result.fileType );

std::vector<RimSummaryCase*> cases;
if ( !fileNames.isEmpty() ) createSummaryCasesFromFiles( fileNames, &cases );
if ( !fileNames.isEmpty() ) createSummaryCasesFromFiles( fileNames, &cases, fileType );

addSummaryCases( cases );
if ( !cases.empty() )
Expand Down Expand Up @@ -129,7 +132,7 @@ bool RicImportSummaryCasesFeature::createAndAddSummaryCasesFromFiles( const QStr

std::vector<RimSummaryCase*> temp;
std::vector<RimSummaryCase*>* cases = newCases ? newCases : &temp;
if ( createSummaryCasesFromFiles( fileNames, cases ) )
if ( createSummaryCasesFromFiles( fileNames, cases, RiaDefines::FileType::SMSPEC ) )
{
addSummaryCases( *cases );
if ( !cases->empty() && doCreateDefaultPlot )
Expand Down Expand Up @@ -171,6 +174,7 @@ bool RicImportSummaryCasesFeature::createAndAddSummaryCasesFromFiles( const QStr
//--------------------------------------------------------------------------------------------------
bool RicImportSummaryCasesFeature::createSummaryCasesFromFiles( const QStringList& fileNames,
std::vector<RimSummaryCase*>* newCases,
RiaDefines::FileType fileType,
bool ensembleOrGroup,
bool allowDialogs )
{
Expand All @@ -182,28 +186,40 @@ bool RicImportSummaryCasesFeature::createSummaryCasesFromFiles( const QStringLis
if ( newCases ) newCases->clear();
if ( !sumCaseColl ) return false;

RifSummaryCaseRestartSelector fileSelector;

if ( !RiaGuiApplication::isRunning() || !allowDialogs )
std::vector<RifSummaryCaseFileResultInfo> importFileInfos;
if ( fileType == RiaDefines::FileType::SMSPEC )
{
fileSelector.showDialog( false );
}
RifSummaryCaseRestartSelector fileSelector;

if ( !RiaGuiApplication::isRunning() || !allowDialogs )
{
fileSelector.showDialog( false );
}

fileSelector.setEnsembleOrGroupMode( ensembleOrGroup );
fileSelector.determineFilesToImportFromSummaryFiles( fileNames );
fileSelector.setEnsembleOrGroupMode( ensembleOrGroup );
fileSelector.determineFilesToImportFromSummaryFiles( fileNames );

std::vector<RifSummaryCaseFileResultInfo> importFileInfos = fileSelector.summaryFileInfos();
importFileInfos = fileSelector.summaryFileInfos();

if ( !importFileInfos.empty() )
if ( fileSelector.foundErrors() )
{
QString errorMessage = fileSelector.createCombinedErrorMessage();
RiaLogging::error( errorMessage );
}
}
else
{
std::vector<RimSummaryCase*> sumCases = sumCaseColl->createSummaryCasesFromFileInfos( importFileInfos, true );
if ( newCases ) newCases->insert( newCases->end(), sumCases.begin(), sumCases.end() );
// No restart files for these file types: just copy to result info
for ( auto f : fileNames )
{
importFileInfos.push_back( RifSummaryCaseFileResultInfo( f, false, fileType ) );
}
}

if ( fileSelector.foundErrors() )
if ( !importFileInfos.empty() )
{
QString errorMessage = fileSelector.createCombinedErrorMessage();
RiaLogging::error( errorMessage );
std::vector<RimSummaryCase*> sumCases = sumCaseColl->createSummaryCasesFromFileInfos( importFileInfos, true );
if ( newCases ) newCases->insert( newCases->end(), sumCases.begin(), sumCases.end() );
}

return true;
Expand Down Expand Up @@ -258,7 +274,7 @@ void RicImportSummaryCasesFeature::addCasesToGroupIfRelevant( const std::vector<
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
std::pair<QStringList, RiaEnsembleNameTools::EnsembleGroupingMode>
RicRecursiveFileSearchDialogResult
RicImportSummaryCasesFeature::runRecursiveSummaryCaseFileSearchDialogWithGrouping( const QString& dialogTitle, const QString& pathCacheName )
{
RiaApplication* app = RiaApplication::instance();
Expand All @@ -275,19 +291,19 @@ std::pair<QStringList, RiaEnsembleNameTools::EnsembleGroupingMode>
m_pathFilter = result.pathFilter;
m_fileNameFilter = result.fileNameFilter;

if ( !result.ok ) return std::make_pair( QStringList(), RiaEnsembleNameTools::EnsembleGroupingMode::NONE );
if ( !result.ok ) return result;

// Remember the path to next time
app->setLastUsedDialogDirectory( pathCacheName, QFileInfo( result.rootDir ).absoluteFilePath() );

return std::make_pair( result.files, result.groupingMode );
return result;
}

//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
QStringList RicImportSummaryCasesFeature::runRecursiveSummaryCaseFileSearchDialog( const QString& dialogTitle, const QString& pathCacheName )
RicRecursiveFileSearchDialogResult RicImportSummaryCasesFeature::runRecursiveSummaryCaseFileSearchDialog( const QString& dialogTitle,
const QString& pathCacheName )
{
auto result = runRecursiveSummaryCaseFileSearchDialogWithGrouping( dialogTitle, pathCacheName );
return result.first;
return runRecursiveSummaryCaseFileSearchDialogWithGrouping( dialogTitle, pathCacheName );
}
10 changes: 7 additions & 3 deletions ApplicationLibCode/Commands/RicImportSummaryCasesFeature.h
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,9 @@
#pragma once

#include "RiaEnsembleNameTools.h"
#include "RiaSummaryDefines.h"

#include "RicRecursiveFileSearchDialog.h"
#include "cafCmdFeature.h"

#include <QString>
Expand All @@ -43,15 +45,17 @@ class RicImportSummaryCasesFeature : public caf::CmdFeature
std::vector<RimSummaryCase*>* newCases = nullptr );
static bool createSummaryCasesFromFiles( const QStringList& fileName,
std::vector<RimSummaryCase*>* newCases,
RiaDefines::FileType fileType,
bool ensembleOrGroup = false,
bool allowDialogs = true );
static void addSummaryCases( const std::vector<RimSummaryCase*>& cases );
static void addCasesToGroupIfRelevant( const std::vector<RimSummaryCase*>& cases );

static QStringList runRecursiveSummaryCaseFileSearchDialog( const QString& dialogTitle, const QString& pathCacheName );
static RicRecursiveFileSearchDialogResult runRecursiveSummaryCaseFileSearchDialog( const QString& dialogTitle,
const QString& pathCacheName );

static std::pair<QStringList, RiaEnsembleNameTools::EnsembleGroupingMode>
runRecursiveSummaryCaseFileSearchDialogWithGrouping( const QString& dialogTitle, const QString& pathCacheName );
static RicRecursiveFileSearchDialogResult runRecursiveSummaryCaseFileSearchDialogWithGrouping( const QString& dialogTitle,
const QString& pathCacheName );

protected:
bool isCommandEnabled() override;
Expand Down
9 changes: 6 additions & 3 deletions ApplicationLibCode/Commands/RicImportSummaryGroupFeature.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
#include "RiaGuiApplication.h"
#include "RiaPreferences.h"

#include "RiaSummaryDefines.h"
#include "RicCreateSummaryCaseCollectionFeature.h"
#include "RicImportSummaryCasesFeature.h"

Expand Down Expand Up @@ -55,12 +56,14 @@ void RicImportSummaryGroupFeature::onActionTriggered( bool isChecked )
{
RiaGuiApplication* app = RiaGuiApplication::instance();
QString pathCacheName = "INPUT_FILES";
QStringList fileNames = RicImportSummaryCasesFeature::runRecursiveSummaryCaseFileSearchDialog( "Import Summary Case Group", pathCacheName );

auto result = RicImportSummaryCasesFeature::runRecursiveSummaryCaseFileSearchDialog( "Import Summary Case Group", pathCacheName );
QStringList fileNames = result.files;
if ( fileNames.isEmpty() ) return;

RiaDefines::FileType fileType = RicRecursiveFileSearchDialog::mapSummaryFileType( result.fileType );

std::vector<RimSummaryCase*> cases;
RicImportSummaryCasesFeature::createSummaryCasesFromFiles( fileNames, &cases, true );
RicImportSummaryCasesFeature::createSummaryCasesFromFiles( fileNames, &cases, fileType, true );

RicImportSummaryCasesFeature::addSummaryCases( cases );
RicCreateSummaryCaseCollectionFeature::groupSummaryCases( cases, "", false );
Expand Down
37 changes: 34 additions & 3 deletions ApplicationLibCode/Commands/RicRecursiveFileSearchDialog.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,7 @@ RicRecursiveFileSearchDialogResult RicRecursiveFileSearchDialog::runRecursiveSea
if ( !fileTypes.empty() )
{
dialog.m_fileExtensions = QStringList( fileExtensionForType( fileTypes.front() ) );
dialog.m_fileType = fileTypes.front();
}

for ( const auto& s : caf::AppEnum<RiaEnsembleNameTools::EnsembleGroupingMode>::uiTexts() )
Expand Down Expand Up @@ -151,6 +152,7 @@ RicRecursiveFileSearchDialogResult RicRecursiveFileSearchDialog::runRecursiveSea
dialog.rootDirWithEndSeparator(),
dialog.pathFilterWithoutStartSeparator(),
dialog.fileNameFilter(),
dialog.fileType(),
dialog.ensembleGroupingMode() );
}

Expand Down Expand Up @@ -399,6 +401,14 @@ QStringList RicRecursiveFileSearchDialog::fileExtensions() const
return exts;
}

//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RicRecursiveFileSearchDialog::FileType RicRecursiveFileSearchDialog::fileType() const
{
return m_fileType;
}

//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
Expand Down Expand Up @@ -738,9 +748,9 @@ void RicRecursiveFileSearchDialog::slotFileFilterChanged( const QString& text )
//--------------------------------------------------------------------------------------------------
void RicRecursiveFileSearchDialog::slotFileTypeChanged( int index )
{
FileType fileType = static_cast<FileType>( m_fileTypeField->itemData( index ).toInt() );
m_fileType = static_cast<FileType>( m_fileTypeField->itemData( index ).toInt() );

QString extension = fileExtensionForType( fileType );
QString extension = fileExtensionForType( m_fileType );
m_fileExtensions = QStringList( extension );

m_fileExtensionField->setText( extension );
Expand Down Expand Up @@ -1142,4 +1152,25 @@ QString RicRecursiveFileSearchDialog::fileNameForType( FileType fileType )
default:
return "*";
}
};
}

//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RiaDefines::FileType RicRecursiveFileSearchDialog::mapSummaryFileType( RicRecursiveFileSearchDialog::FileType fileType )
{
switch ( fileType )
{
case RicRecursiveFileSearchDialog::FileType::SMSPEC:
return RiaDefines::FileType::SMSPEC;
case RicRecursiveFileSearchDialog::FileType::REVEAL_SUMMARY:
return RiaDefines::FileType::REVEAL_SUMMARY;
case RicRecursiveFileSearchDialog::FileType::STIMPLAN_SUMMARY:
return RiaDefines::FileType::STIMPLAN_SUMMARY;
default:
{
CAF_ASSERT( false && "Unsupported file type" );
return RiaDefines::FileType::SMSPEC;
}
}
}
Loading

0 comments on commit e899043

Please sign in to comment.