Import and plot of FMU RFT data works

This commit is contained in:
Gaute Lindkvist
2019-08-20 15:09:13 +02:00
parent f76c67dab3
commit 2c5ca4ce46
51 changed files with 862 additions and 237 deletions

View File

@@ -41,8 +41,9 @@ ${CMAKE_CURRENT_LIST_DIR}/RicImportGeoMechCaseTimeStepFilterFeature.h
${CMAKE_CURRENT_LIST_DIR}/RicImportSummaryCaseFeature.h
${CMAKE_CURRENT_LIST_DIR}/RicImportSummaryCasesFeature.h
${CMAKE_CURRENT_LIST_DIR}/RicImportObservedDataFeature.h
${CMAKE_CURRENT_LIST_DIR}/RicImportFmuObservedDataFeature.h
${CMAKE_CURRENT_LIST_DIR}/RicImportObservedDataInMenuFeature.h
${CMAKE_CURRENT_LIST_DIR}/RicImportObservedFmuDataFeature.h
${CMAKE_CURRENT_LIST_DIR}/RicImportObservedFmuDataInMenuFeature.h
${CMAKE_CURRENT_LIST_DIR}/RicImportGeneralDataFeature.h
${CMAKE_CURRENT_LIST_DIR}/RicExportFeatureImpl.h
@@ -122,8 +123,9 @@ ${CMAKE_CURRENT_LIST_DIR}/RicImportGeoMechCaseTimeStepFilterFeature.cpp
${CMAKE_CURRENT_LIST_DIR}/RicImportSummaryCaseFeature.cpp
${CMAKE_CURRENT_LIST_DIR}/RicImportSummaryCasesFeature.cpp
${CMAKE_CURRENT_LIST_DIR}/RicImportObservedDataFeature.cpp
${CMAKE_CURRENT_LIST_DIR}/RicImportFmuObservedDataFeature.cpp
${CMAKE_CURRENT_LIST_DIR}/RicImportObservedDataInMenuFeature.cpp
${CMAKE_CURRENT_LIST_DIR}/RicImportObservedFmuDataFeature.cpp
${CMAKE_CURRENT_LIST_DIR}/RicImportObservedFmuDataInMenuFeature.cpp
${CMAKE_CURRENT_LIST_DIR}/RicImportGeneralDataFeature.cpp
${CMAKE_CURRENT_LIST_DIR}/RicExportFeatureImpl.cpp

View File

@@ -21,11 +21,15 @@
#include "RiaApplication.h"
#include "RiaSummaryTools.h"
#include "RimObservedData.h"
#include "RimMainPlotCollection.h"
#include "RimObservedFmuRftData.h"
#include "RimObservedSummaryData.h"
#include "RimObservedDataCollection.h"
#include "RimProject.h"
#include "RimRftPlotCollection.h"
#include "RimSummaryPlot.h"
#include "RimSummaryPlotCollection.h"
#include "RimWellRftPlot.h"
#include "cafSelectionManager.h"
@@ -47,11 +51,11 @@ void RicCloseObservedDataFeature::setupActionLook(QAction* actionToSetup)
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RicCloseObservedDataFeature::deleteObservedData(const std::vector<RimObservedData*>& data)
void RicCloseObservedDataFeature::deleteObservedSummaryData(const std::vector<RimObservedSummaryData*>& data)
{
RimSummaryPlotCollection* summaryPlotColl = RiaSummaryTools::summaryPlotCollection();
for (RimObservedData* observedData : data)
for (RimObservedSummaryData* observedData : data)
{
for (RimSummaryPlot* summaryPlot : summaryPlotColl->summaryPlots)
{
@@ -62,7 +66,30 @@ void RicCloseObservedDataFeature::deleteObservedData(const std::vector<RimObserv
RimObservedDataCollection* observedDataCollection = nullptr;
observedData->firstAncestorOrThisOfTypeAsserted(observedDataCollection);
observedDataCollection->removeObservedData(observedData);
observedDataCollection->removeObservedSummaryData(observedData);
delete observedData;
observedDataCollection->updateConnectedEditors();
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RicCloseObservedDataFeature::deleteObservedRmuRftData(const std::vector<RimObservedFmuRftData*>& data)
{
RimProject* proj = RiaApplication::instance()->project();
RimRftPlotCollection* rftPlotColl = proj->mainPlotCollection()->rftPlotCollection();
for (RimObservedFmuRftData* observedData : data)
{
RimObservedDataCollection* observedDataCollection = nullptr;
observedData->firstAncestorOrThisOfTypeAsserted(observedDataCollection);
for (RimWellRftPlot* plot : rftPlotColl->rftPlots())
{
plot->deleteCurvesAssosicatedWithObservedData(observedData);
}
observedDataCollection->removeObservedFmuRftData(observedData);
delete observedData;
observedDataCollection->updateConnectedEditors();
}
@@ -73,14 +100,17 @@ void RicCloseObservedDataFeature::deleteObservedData(const std::vector<RimObserv
//--------------------------------------------------------------------------------------------------
bool RicCloseObservedDataFeature::isCommandEnabled()
{
std::vector<RimObservedData*> selection;
caf::SelectionManager::instance()->objectsByType(&selection);
std::vector<RimObservedSummaryData*> summarySelection;
caf::SelectionManager::instance()->objectsByType(&summarySelection);
if (selection.size() == 0)
std::vector<RimObservedFmuRftData*> fmuRftSelection;
caf::SelectionManager::instance()->objectsByType(&fmuRftSelection);
if (summarySelection.size() == 0 && fmuRftSelection.size() == 0)
{
return false;
}
for (RimObservedData* data : selection)
for (RimObservedSummaryData* data : summarySelection)
{
if (!data->isObservedData())
{
@@ -96,9 +126,14 @@ bool RicCloseObservedDataFeature::isCommandEnabled()
//--------------------------------------------------------------------------------------------------
void RicCloseObservedDataFeature::onActionTriggered(bool isChecked)
{
std::vector<RimObservedData*> selection;
caf::SelectionManager::instance()->objectsByType(&selection);
CVF_ASSERT(selection.size() > 0);
std::vector<RimObservedSummaryData*> summarySelection;
caf::SelectionManager::instance()->objectsByType(&summarySelection);
std::vector<RimObservedFmuRftData*> fmuRftSelection;
caf::SelectionManager::instance()->objectsByType(&fmuRftSelection);
CVF_ASSERT(!(summarySelection.empty() && fmuRftSelection.empty()));
RicCloseObservedDataFeature::deleteObservedData(selection);
RicCloseObservedDataFeature::deleteObservedSummaryData(summarySelection);
RicCloseObservedDataFeature::deleteObservedRmuRftData(fmuRftSelection);
}

View File

@@ -22,7 +22,8 @@
#include <vector>
class RimObservedData;
class RimObservedFmuRftData;
class RimObservedSummaryData;
//==================================================================================================
///
@@ -31,7 +32,8 @@ class RicCloseObservedDataFeature : public caf::CmdFeature
{
CAF_CMD_HEADER_INIT;
public:
static void deleteObservedData(const std::vector<RimObservedData*>& data);
static void deleteObservedSummaryData(const std::vector<RimObservedSummaryData*>& data);
static void deleteObservedRmuRftData(const std::vector<RimObservedFmuRftData*>& data);
protected:
// Overrides

View File

@@ -20,7 +20,7 @@
#include "RiaApplication.h"
#include "RimObservedData.h"
#include "RimObservedSummaryData.h"
#include "RimObservedDataCollection.h"
#include "RimOilField.h"
#include "RimProject.h"
@@ -55,7 +55,7 @@ void RicImportObservedDataFeature::selectObservedDataFileInDialog()
RimObservedDataCollection* observedDataCollection = proj->activeOilField() ? proj->activeOilField()->observedDataCollection() : nullptr;
if (!observedDataCollection) return;
RimObservedData* observedData = nullptr;
RimObservedSummaryData* observedData = nullptr;
for (const QString& fileName : fileNames)
{
@@ -67,13 +67,13 @@ void RicImportObservedDataFeature::selectObservedDataFileInDialog()
if (fileName.endsWith(".rsm", Qt::CaseInsensitive))
{
observedData = observedDataCollection->createAndAddRsmObservedDataFromFile(fileName, &errorText);
observedData = observedDataCollection->createAndAddRsmObservedSummaryDataFromFile(fileName, &errorText);
retryImport = false;
}
else if (fileName.endsWith(".txt", Qt::CaseInsensitive) || fileName.endsWith(".csv", Qt::CaseInsensitive))
{
bool useSavedFieldValuesInDialog = retryImport;
observedData = observedDataCollection->createAndAddCvsObservedDataFromFile(fileName, useSavedFieldValuesInDialog, &errorText);
observedData = observedDataCollection->createAndAddCvsObservedSummaryDataFromFile(fileName, useSavedFieldValuesInDialog, &errorText);
retryImport = !errorText.isEmpty();
}
else
@@ -105,7 +105,7 @@ bool RicImportObservedDataFeature::isCommandEnabled()
std::vector<RimObservedDataCollection*> selectionObservedDataCollection;
caf::SelectionManager::instance()->objectsByType(&selectionObservedDataCollection);
std::vector<RimObservedData*> selectionObservedData;
std::vector<RimObservedSummaryData*> selectionObservedData;
caf::SelectionManager::instance()->objectsByType(&selectionObservedData);
return (selectionObservedDataCollection.size() > 0 || selectionObservedData.size() > 0);

View File

@@ -15,45 +15,68 @@
// for more details.
//
/////////////////////////////////////////////////////////////////////////////////
#include "RicImportFmuObservedDataFeature.h"
#include "RicImportObservedFmuDataFeature.h"
#include "RiaApplication.h"
#include "RifReaderFmuRft.h"
#include "RimObservedData.h"
#include "RimObservedFmuRftData.h"
#include "RimObservedSummaryData.h"
#include "RimObservedDataCollection.h"
#include "RimOilField.h"
#include "RimProject.h"
#include "RiuPlotMainWindowTools.h"
#include "cafPdmObject.h"
#include "cafSelectionManager.h"
#include <QAction>
#include <QFileDialog>
#include <QMessageBox>
CAF_CMD_SOURCE_INIT(RicImportObservedFmuDataFeature, "RicImportObservedFmuDataFeature");
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RicImportFmuObservedDataFeature::selectObservedDataPathInDialog()
void RicImportObservedFmuDataFeature::selectObservedDataPathInDialog()
{
RiaApplication* app = RiaApplication::instance();
QString defaultDir = app->lastUsedDialogDirectory("SUMMARY_CASE_DIR");
QString directory = QFileDialog::getExistingDirectory(
nullptr, "Import Fmu Observed Data Recursively from Directory", defaultDir, QFileDialog::ShowDirsOnly);
nullptr, "Import Observed FMU Data Recursively from Directory", defaultDir, QFileDialog::ShowDirsOnly);
QStringList subDirsWithFmuData = RifReaderFmuRft::findSubDirectoriesWithFmuRftData(directory);
if (subDirsWithFmuData.empty()) return;
RimProject* proj = app->project();
RimObservedDataCollection* observedDataCollection =
proj->activeOilField() ? proj->activeOilField()->observedDataCollection() : nullptr;
if (!observedDataCollection) return;
const RimObservedFmuRftData* importedData = nullptr;
for (const QString& subDir : subDirsWithFmuData)
{
importedData = observedDataCollection->createAndAddFmuRftDataFromPath(subDir);
}
if (importedData != nullptr)
{
RiuPlotMainWindowTools::showPlotMainWindow();
RiuPlotMainWindowTools::selectAsCurrentItem(importedData);
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
bool RicImportFmuObservedDataFeature::isCommandEnabled()
bool RicImportObservedFmuDataFeature::isCommandEnabled()
{
std::vector<RimObservedDataCollection*> selectionObservedDataCollection;
caf::SelectionManager::instance()->objectsByType(&selectionObservedDataCollection);
std::vector<RimObservedData*> selectionObservedData;
std::vector<RimObservedSummaryData*> selectionObservedData;
caf::SelectionManager::instance()->objectsByType(&selectionObservedData);
return (selectionObservedDataCollection.size() > 0 || selectionObservedData.size() > 0);
@@ -62,9 +85,16 @@ bool RicImportFmuObservedDataFeature::isCommandEnabled()
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RicImportFmuObservedDataFeature::onActionTriggered(bool isChecked) {}
void RicImportObservedFmuDataFeature::onActionTriggered(bool isChecked)
{
selectObservedDataPathInDialog();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RicImportFmuObservedDataFeature::setupActionLook(QAction* actionToSetup) {}
void RicImportObservedFmuDataFeature::setupActionLook(QAction* actionToSetup)
{
actionToSetup->setIcon(QIcon(":/ObservedDataFile16x16.png"));
actionToSetup->setText("Import Observed FMU Data");
}

View File

@@ -26,7 +26,7 @@
//
//
//==================================================================================================
class RicImportFmuObservedDataFeature : public caf::CmdFeature
class RicImportObservedFmuDataFeature : public caf::CmdFeature
{
CAF_CMD_HEADER_INIT;

View File

@@ -0,0 +1,63 @@
/////////////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2017 Statoil ASA
//
// ResInsight is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE.
//
// See the GNU General Public License at <http://www.gnu.org/licenses/gpl.html>
// for more details.
//
/////////////////////////////////////////////////////////////////////////////////
#include "RicImportObservedFmuDataInMenuFeature.h"
#include "RiaApplication.h"
#include "RicImportObservedFmuDataFeature.h"
#include "RimObservedDataCollection.h"
#include "RimOilField.h"
#include "RimProject.h"
#include "RimSummaryObservedDataFile.h"
#include <QAction>
#include <QFileDialog>
CAF_CMD_SOURCE_INIT(RicImportObservedFmuDataInMenuFeature, "RicImportObservedFmuDataInMenuFeature");
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RicImportObservedFmuDataInMenuFeature::RicImportObservedFmuDataInMenuFeature() {}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
bool RicImportObservedFmuDataInMenuFeature::isCommandEnabled()
{
return true;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RicImportObservedFmuDataInMenuFeature::onActionTriggered(bool isChecked)
{
RicImportObservedFmuDataFeature::selectObservedDataPathInDialog();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RicImportObservedFmuDataInMenuFeature::setupActionLook(QAction* actionToSetup)
{
actionToSetup->setIcon(QIcon(":/ObservedDataFile16x16.png"));
actionToSetup->setText("Import Observed FMU Data");
}

View File

@@ -0,0 +1,41 @@
/////////////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2019- Equinor ASA
//
// ResInsight is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE.
//
// See the GNU General Public License at <http://www.gnu.org/licenses/gpl.html>
// for more details.
//
/////////////////////////////////////////////////////////////////////////////////
#pragma once
#include "cafCmdFeature.h"
#include "cafPdmField.h"
//==================================================================================================
//
//
//
//==================================================================================================
class RicImportObservedFmuDataInMenuFeature : public caf::CmdFeature
{
CAF_CMD_HEADER_INIT;
public:
RicImportObservedFmuDataInMenuFeature();
private:
bool isCommandEnabled() override;
void onActionTriggered(bool isChecked) override;
void setupActionLook(QAction* actionToSetup) override;
};

View File

@@ -23,7 +23,7 @@
#include "RiaSummaryTools.h"
#include "RimMainPlotCollection.h"
#include "RimObservedData.h"
#include "RimObservedSummaryData.h"
#include "RimObservedDataCollection.h"
#include "RimProject.h"
#include "RimSummaryCase.h"
@@ -60,6 +60,7 @@ void RicReloadSummaryCaseFeature::onActionTriggered(bool isChecked)
for (RimSummaryCase* summaryCase : caseSelection)
{
summaryCase->createSummaryReaderInterface();
summaryCase->createRftReaderInterface();
RiaLogging::info(QString("Reloaded data for %1").arg(summaryCase->summaryHeaderFilename()));
}
@@ -112,7 +113,7 @@ std::vector<RimSummaryCase*> RicReloadSummaryCaseFeature::selectedSummaryCases()
for (auto collection : collectionSelection)
{
std::vector<RimObservedData*> observedCases = collection->allObservedData();
std::vector<RimObservedSummaryData*> observedCases = collection->allObservedSummaryData();
caseSelection.insert(caseSelection.end(), observedCases.begin(), observedCases.end());
}
}

View File

@@ -33,7 +33,7 @@
#include "RimEnsembleCurveSetCollection.h"
#include "RimEnsembleCurveSetColorManager.h"
#include "RimMainPlotCollection.h"
#include "RimObservedData.h"
#include "RimObservedSummaryData.h"
#include "RimObservedDataCollection.h"
#include "RimOilField.h"
#include "RimProject.h"
@@ -873,7 +873,7 @@ void RicSummaryCurveCreator::updateCurveNames()
//--------------------------------------------------------------------------------------------------
bool RicSummaryCurveCreator::isObservedData(RimSummaryCase* sumCase) const
{
return dynamic_cast<RimObservedData*>(sumCase) != nullptr;
return dynamic_cast<RimObservedSummaryData*>(sumCase) != nullptr;
}
//--------------------------------------------------------------------------------------------------