#4732 Support error bars for observed RFT data (#4760)

* #4732 Fix missing refresh for ensemble RFT

* WIP

* #4732 Fix missing refresh for ensemble RFT

* WIP

* Make sure Observed RFT data is loaded on startup

* Make error bars work for RFT plots

* #4761 Add labels with formation and value/error to observed data points

* Changes after review
This commit is contained in:
Gaute Lindkvist
2019-09-25 17:48:19 +02:00
committed by GitHub
parent 931e7dc42d
commit 2a20f84f1f
16 changed files with 240 additions and 58 deletions

View File

@@ -46,7 +46,8 @@ public:
PRESSURE_P10,
PRESSURE_P50,
PRESSURE_P90,
PRESSURE_MEAN
PRESSURE_MEAN,
PRESSURE_ERROR
};
public:
@@ -83,4 +84,4 @@ private:
bool operator==( const RifEclipseRftAddress& first, const RifEclipseRftAddress& second );
bool operator<( const RifEclipseRftAddress& first, const RifEclipseRftAddress& second );
bool operator<( const RifEclipseRftAddress& first, const RifEclipseRftAddress& second );

View File

@@ -82,7 +82,8 @@ void RifReaderEnsembleStatisticsRft::values( const RifEclipseRftAddress& rftAddr
rftAddress.wellLogChannel() == RifEclipseRftAddress::PRESSURE_MEAN ||
rftAddress.wellLogChannel() == RifEclipseRftAddress::PRESSURE_P10 ||
rftAddress.wellLogChannel() == RifEclipseRftAddress::PRESSURE_P50 ||
rftAddress.wellLogChannel() == RifEclipseRftAddress::PRESSURE_P90 );
rftAddress.wellLogChannel() == RifEclipseRftAddress::PRESSURE_P90 ||
rftAddress.wellLogChannel() == RifEclipseRftAddress::PRESSURE_ERROR );
auto it = m_cachedValues.find( rftAddress );
if ( it == m_cachedValues.end() )

View File

@@ -138,6 +138,33 @@ bool RifReaderFmuRft::directoryContainsFmuRftData( const QString& filePath )
return false;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
std::vector<QString> RifReaderFmuRft::labels( const RifEclipseRftAddress& rftAddress )
{
std::vector<QString> formationLabels;
if ( m_allWellObservations.empty() )
{
load();
}
auto it = m_allWellObservations.find( rftAddress.wellName() );
if ( it != m_allWellObservations.end() )
{
const std::vector<Observation>& observations = it->second.observations;
for ( const Observation& observation : observations )
{
formationLabels.push_back( QString( "%1 - Pressure: %2 +/- %3" )
.arg( observation.formation )
.arg( observation.pressure )
.arg( observation.pressureError ) );
}
}
return formationLabels;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
@@ -162,9 +189,11 @@ std::set<RifEclipseRftAddress> RifReaderFmuRft::eclipseRftAddresses()
RifEclipseRftAddress tvdAddress( wellName, dateTime, RifEclipseRftAddress::TVD );
RifEclipseRftAddress mdAddress( wellName, dateTime, RifEclipseRftAddress::MD );
RifEclipseRftAddress pressureAddress( wellName, dateTime, RifEclipseRftAddress::PRESSURE );
RifEclipseRftAddress pressureErrorAddress( wellName, dateTime, RifEclipseRftAddress::PRESSURE_ERROR );
allAddresses.insert( tvdAddress );
allAddresses.insert( mdAddress );
allAddresses.insert( pressureAddress );
allAddresses.insert( pressureErrorAddress );
}
}
}
@@ -202,6 +231,9 @@ void RifReaderFmuRft::values( const RifEclipseRftAddress& rftAddress, std::vecto
case RifEclipseRftAddress::PRESSURE:
values->push_back( observation.pressure );
break;
case RifEclipseRftAddress::PRESSURE_ERROR:
values->push_back( observation.pressureError );
break;
default:
CAF_ASSERT( false && "Wrong channel type sent to Fmu RFT reader" );
}

View File

@@ -68,6 +68,8 @@ public:
static QStringList findSubDirectoriesWithFmuRftData( const QString& filePath );
static bool directoryContainsFmuRftData( const QString& filePath );
std::vector<QString> labels( const RifEclipseRftAddress& rftAddress );
std::set<RifEclipseRftAddress> eclipseRftAddresses() override;
void values( const RifEclipseRftAddress& rftAddress, std::vector<double>* values ) override;