Refactors RFT plot source storage

Store data sources and time steps directly to project file. Previously, this information was derived from existing curves in the plot, an approach that is fragile.

Import of previous file format is still supported.
This commit is contained in:
Magne Sjaastad committed 2025-07-21 16:46:54 +02:00
1 parent 4240a199a9
commit 41c6035ca8
2 files changed
+63 -22

No files matched your search

@@ -29,6 +29,7 @@
#include "RigCaseCellResultsData.h"
#include "RigEclipseCaseData.h"
#include "RimDataSourceForRftPlt.h"
#include "RimEclipseCase.h"
#include "RimEclipseResultCase.h"
#include "RimEnsembleCurveSetColorManager.h"
@@ -108,9 +109,10 @@ RimWellRftPlot::RimWellRftPlot()
m_selectedSources.uiCapability()->setUiLabelPosition( caf::PdmUiItemInfo::HIDDEN );
m_selectedSources.uiCapability()->setAutoAddingOptionFromValue( false );
CAF_PDM_InitFieldNoDefault( &m_selectedSourcesForIo, "SourcesForIo", "SourcesForIo" );
CAF_PDM_InitFieldNoDefault( &m_selectedTimeSteps, "TimeSteps", "Time Steps" );
m_selectedTimeSteps.uiCapability()->setUiEditorTypeName( caf::PdmUiTreeSelectionEditor::uiEditorTypeName() );
m_selectedTimeSteps.xmlCapability()->disableIO();
m_selectedTimeSteps.uiCapability()->setUiLabelPosition( caf::PdmUiItemInfo::HIDDEN );
m_selectedTimeSteps.uiCapability()->setAutoAddingOptionFromValue( false );
@@ -386,31 +388,45 @@ void RimWellRftPlot::updateEditorsFromPreviousSelection()
//--------------------------------------------------------------------------------------------------
void RimWellRftPlot::setSelectedSourcesFromCurves()
{
std::set<RifDataSourceForRftPlt> selectedSources;
std::set<QDateTime> selectedTimeSteps;
std::map<QDateTime, std::set<RifDataSourceForRftPlt>> selectedTimeStepsMap;
for ( const RiaRftPltCurveDefinition& curveDef : curveDefsFromCurves() )
if ( RimProject::current()->isProjectFileVersionEqualOrOlderThan( "2025.04.3" ) )
{
if ( curveDef.address().sourceType() == RifDataSourceForRftPlt::SourceType::OBSERVED_LAS_FILE )
{
selectedSources.insert( RifDataSourceForRftPlt( curveDef.address().wellLogFile() ) );
}
else if ( ( curveDef.address().sourceType() == RifDataSourceForRftPlt::SourceType::SUMMARY_RFT ) && curveDef.address().ensemble() )
{
selectedSources.insert( RifDataSourceForRftPlt( curveDef.address().ensemble() ) );
}
else
selectedSources.insert( curveDef.address() );
std::set<RifDataSourceForRftPlt> selectedSources;
std::set<QDateTime> selectedTimeSteps;
std::map<QDateTime, std::set<RifDataSourceForRftPlt>> selectedTimeStepsMap;
auto newTimeStepMap = std::map<QDateTime, std::set<RifDataSourceForRftPlt>>{
{ curveDef.timeStep(), std::set<RifDataSourceForRftPlt>{ curveDef.address() } } };
RimWellPlotTools::addTimeStepsToMap( selectedTimeStepsMap, newTimeStepMap );
selectedTimeSteps.insert( curveDef.timeStep() );
for ( const RiaRftPltCurveDefinition& curveDef : curveDefsFromCurves() )
{
if ( curveDef.address().sourceType() == RifDataSourceForRftPlt::SourceType::OBSERVED_LAS_FILE )
{
selectedSources.insert( RifDataSourceForRftPlt( curveDef.address().wellLogFile() ) );
}
else if ( ( curveDef.address().sourceType() == RifDataSourceForRftPlt::SourceType::SUMMARY_RFT ) && curveDef.address().ensemble() )
{
selectedSources.insert( RifDataSourceForRftPlt( curveDef.address().ensemble() ) );
}
else
selectedSources.insert( curveDef.address() );
auto newTimeStepMap = std::map<QDateTime, std::set<RifDataSourceForRftPlt>>{
{ curveDef.timeStep(), std::set<RifDataSourceForRftPlt>{ curveDef.address() } } };
RimWellPlotTools::addTimeStepsToMap( selectedTimeStepsMap, newTimeStepMap );
selectedTimeSteps.insert( curveDef.timeStep() );
}
// Storage of time steps to the project file was changed in 2025.04.3
m_selectedSources = std::vector<RifDataSourceForRftPlt>( selectedSources.begin(), selectedSources.end() );
m_selectedTimeSteps = std::vector<QDateTime>( selectedTimeSteps.begin(), selectedTimeSteps.end() );
return;
}
m_selectedSources = std::vector<RifDataSourceForRftPlt>( selectedSources.begin(), selectedSources.end() );
m_selectedTimeSteps = std::vector<QDateTime>( selectedTimeSteps.begin(), selectedTimeSteps.end() );
std::vector<RifDataSourceForRftPlt> selectedSources;
for ( RimDataSourceForRftPlt* addr : m_selectedSourcesForIo )
{
selectedSources.push_back( addr->address() );
}
m_selectedSources = selectedSources;
}
//--------------------------------------------------------------------------------------------------
@@ -1247,6 +1263,14 @@ void RimWellRftPlot::onLoadDataAndUpdate()
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimWellRftPlot::setupBeforeSave()
{
syncSourcesIoFieldFromGuiField();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
@@ -1316,6 +1340,19 @@ void RimWellRftPlot::assignWellPathToExtractionCurves()
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimWellRftPlot::syncSourcesIoFieldFromGuiField()
{
m_selectedSourcesForIo.deleteChildren();
for ( const RifDataSourceForRftPlt& addr : m_selectedSources() )
{
m_selectedSourcesForIo.push_back( new RimDataSourceForRftPlt( addr ) );
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
@@ -54,6 +54,7 @@ class RiaRftPltCurveDefinition;
class RifDataSourceForRftPlt;
class RifEclipseRftAddress;
class RiuDraggableOverlayFrame;
class RimDataSourceForRftPlt;
namespace cvf
{
@@ -108,6 +109,7 @@ protected:
void defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering ) override;
void onLoadDataAndUpdate() override;
void setupBeforeSave() override;
void initAfterRead() override;
bool useUndoRedoForFieldChanged() override;
@@ -117,6 +119,7 @@ private:
void setSelectedSourcesFromCurves();
void syncCurvesFromUiSelection();
void assignWellPathToExtractionCurves();
void syncSourcesIoFieldFromGuiField();
RimObservedFmuRftData* findObservedFmuData( const QString& wellPathName, const QDateTime& timeStep ) const;
@@ -157,6 +160,7 @@ private:
caf::PdmField<bool> m_showErrorInObservedData;
caf::PdmField<std::vector<RifDataSourceForRftPlt>> m_selectedSources;
caf::PdmChildArrayField<RimDataSourceForRftPlt*> m_selectedSourcesForIo;
caf::PdmField<std::vector<QDateTime>> m_selectedTimeSteps;
caf::PdmChildArrayField<RimWellRftEnsembleCurveSet*> m_ensembleCurveSets;