mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
parent
62cf62b9a2
commit
d854a3d3e7
@ -30,4 +30,12 @@ QString segmentNumberResultName();
|
|||||||
QString allBranches();
|
QString allBranches();
|
||||||
QString segmentBranchNumberResultName();
|
QString segmentBranchNumberResultName();
|
||||||
|
|
||||||
|
enum class RftBranchType
|
||||||
|
{
|
||||||
|
RFT_TUBING,
|
||||||
|
RFT_ANNULAR,
|
||||||
|
RFT_DEVICE,
|
||||||
|
RFT_UNKNOWN
|
||||||
|
};
|
||||||
|
|
||||||
}; // namespace RiaDefines
|
}; // namespace RiaDefines
|
||||||
|
@ -299,3 +299,26 @@ RimSummaryCaseCollection* RiaSummaryTools::ensembleById( int ensembleId )
|
|||||||
|
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
QList<caf::PdmOptionItemInfo> RiaSummaryTools::optionsForAllSummaryCases()
|
||||||
|
{
|
||||||
|
return optionsForSummaryCases( RimProject::current()->allSummaryCases() );
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
QList<caf::PdmOptionItemInfo> RiaSummaryTools::optionsForSummaryCases( const std::vector<RimSummaryCase*>& cases )
|
||||||
|
{
|
||||||
|
QList<caf::PdmOptionItemInfo> options;
|
||||||
|
|
||||||
|
for ( RimSummaryCase* c : cases )
|
||||||
|
{
|
||||||
|
options.push_back( caf::PdmOptionItemInfo( c->displayCaseName(), c, false, c->uiIconProvider() ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
return options;
|
||||||
|
}
|
||||||
|
@ -40,7 +40,8 @@ class QStringList;
|
|||||||
namespace caf
|
namespace caf
|
||||||
{
|
{
|
||||||
class PdmObject;
|
class PdmObject;
|
||||||
}
|
class PdmOptionItemInfo;
|
||||||
|
} // namespace caf
|
||||||
|
|
||||||
//==================================================================================================
|
//==================================================================================================
|
||||||
//
|
//
|
||||||
@ -75,4 +76,7 @@ public:
|
|||||||
|
|
||||||
static RimSummaryCase* summaryCaseById( int caseId );
|
static RimSummaryCase* summaryCaseById( int caseId );
|
||||||
static RimSummaryCaseCollection* ensembleById( int ensembleId );
|
static RimSummaryCaseCollection* ensembleById( int ensembleId );
|
||||||
|
|
||||||
|
static QList<caf::PdmOptionItemInfo> optionsForAllSummaryCases();
|
||||||
|
static QList<caf::PdmOptionItemInfo> optionsForSummaryCases( const std::vector<RimSummaryCase*>& cases );
|
||||||
};
|
};
|
||||||
|
@ -18,6 +18,8 @@
|
|||||||
|
|
||||||
#include "RicSelectCaseOrEnsembleUi.h"
|
#include "RicSelectCaseOrEnsembleUi.h"
|
||||||
|
|
||||||
|
#include "RiaSummaryTools.h"
|
||||||
|
|
||||||
#include "RimProject.h"
|
#include "RimProject.h"
|
||||||
#include "RimSummaryCase.h"
|
#include "RimSummaryCase.h"
|
||||||
#include "RimSummaryCaseCollection.h"
|
#include "RimSummaryCaseCollection.h"
|
||||||
@ -78,14 +80,7 @@ QList<caf::PdmOptionItemInfo>
|
|||||||
|
|
||||||
if ( fieldNeedingOptions == &m_selectedSummaryCase )
|
if ( fieldNeedingOptions == &m_selectedSummaryCase )
|
||||||
{
|
{
|
||||||
RimProject* proj = RimProject::current();
|
options = RiaSummaryTools::optionsForAllSummaryCases();
|
||||||
|
|
||||||
std::vector<RimSummaryCase*> cases = proj->allSummaryCases();
|
|
||||||
|
|
||||||
for ( RimSummaryCase* rimCase : cases )
|
|
||||||
{
|
|
||||||
options.push_back( caf::PdmOptionItemInfo( rimCase->displayCaseName(), rimCase ) );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else if ( fieldNeedingOptions == &m_selectedEnsemble )
|
else if ( fieldNeedingOptions == &m_selectedEnsemble )
|
||||||
{
|
{
|
||||||
|
@ -29,6 +29,7 @@
|
|||||||
#include "RimEclipseResultCase.h"
|
#include "RimEclipseResultCase.h"
|
||||||
#include "RimProject.h"
|
#include "RimProject.h"
|
||||||
#include "RimSimWellInView.h"
|
#include "RimSimWellInView.h"
|
||||||
|
#include "RimSummaryCase.h"
|
||||||
#include "RimWellLogCurveCommonDataSource.h"
|
#include "RimWellLogCurveCommonDataSource.h"
|
||||||
#include "RimWellLogExtractionCurve.h"
|
#include "RimWellLogExtractionCurve.h"
|
||||||
#include "RimWellLogFile.h"
|
#include "RimWellLogFile.h"
|
||||||
@ -378,6 +379,23 @@ RimWellLogRftCurve*
|
|||||||
curve->setDefaultAddress( wellName );
|
curve->setDefaultAddress( wellName );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
auto sumCases = RimProject::current()->allSummaryCases();
|
||||||
|
|
||||||
|
for ( auto sc : sumCases )
|
||||||
|
{
|
||||||
|
if ( sc->rftReader() )
|
||||||
|
{
|
||||||
|
auto rftReader = sc->rftReader();
|
||||||
|
|
||||||
|
curve->setSummaryCase( sc );
|
||||||
|
|
||||||
|
auto addresses = rftReader->eclipseRftAddresses();
|
||||||
|
if ( !addresses.empty() ) curve->setRftAddress( *addresses.begin() );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
cvf::Color3f curveColor = RicWellLogPlotCurveFeatureImpl::curveColorFromTable( plotTrack->curveCount() );
|
cvf::Color3f curveColor = RicWellLogPlotCurveFeatureImpl::curveColorFromTable( plotTrack->curveCount() );
|
||||||
curve->setColor( curveColor );
|
curve->setColor( curveColor );
|
||||||
|
@ -91,7 +91,7 @@ void RifReaderOpmRft::values( const RifEclipseRftAddress& rftAddress, std::vecto
|
|||||||
}
|
}
|
||||||
else if ( rftAddress.segmentResultName() == RiaDefines::segmentBranchNumberResultName() )
|
else if ( rftAddress.segmentResultName() == RiaDefines::segmentBranchNumberResultName() )
|
||||||
{
|
{
|
||||||
auto branchNumbers = segment.branchIds();
|
auto branchNumbers = segment.tubingBranchIds();
|
||||||
for ( const auto& branchNumber : branchNumbers )
|
for ( const auto& branchNumber : branchNumbers )
|
||||||
{
|
{
|
||||||
values->push_back( branchNumber );
|
values->push_back( branchNumber );
|
||||||
@ -156,6 +156,9 @@ std::set<QDateTime>
|
|||||||
RifReaderOpmRft::availableTimeSteps( const QString& wellName,
|
RifReaderOpmRft::availableTimeSteps( const QString& wellName,
|
||||||
const RifEclipseRftAddress::RftWellLogChannelType& wellLogChannelName )
|
const RifEclipseRftAddress::RftWellLogChannelType& wellLogChannelName )
|
||||||
{
|
{
|
||||||
|
if ( wellLogChannelName == RifEclipseRftAddress::RftWellLogChannelType::SEGMENT_VALUES )
|
||||||
|
return m_rftSegmentTimeSteps;
|
||||||
|
|
||||||
std::set<QDateTime> timeSteps;
|
std::set<QDateTime> timeSteps;
|
||||||
|
|
||||||
for ( const auto& address : m_addresses )
|
for ( const auto& address : m_addresses )
|
||||||
@ -301,6 +304,8 @@ void RifReaderOpmRft::buildMetaData()
|
|||||||
|
|
||||||
auto dt = RiaQDateTimeTools::createUtcDateTime( QDate( y, m, d ) );
|
auto dt = RiaQDateTimeTools::createUtcDateTime( QDate( y, m, d ) );
|
||||||
|
|
||||||
|
m_rftSegmentTimeSteps.insert( dt );
|
||||||
|
|
||||||
auto segmentCount = segmentData.topology().size();
|
auto segmentCount = segmentData.topology().size();
|
||||||
|
|
||||||
for ( const auto& resultNameAndSize : resultNameAndSizes )
|
for ( const auto& resultNameAndSize : resultNameAndSizes )
|
||||||
@ -394,9 +399,10 @@ void RifReaderOpmRft::buildSegmentData()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
auto wellDateKey = std::make_pair( wellName, date );
|
auto wellDateKey = std::make_pair( wellName, date );
|
||||||
|
|
||||||
m_rftWellDateSegments[wellDateKey] = segment;
|
m_rftWellDateSegments[wellDateKey] = segment;
|
||||||
|
|
||||||
|
buildSegmentBranchTypes( wellDateKey );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -445,6 +451,69 @@ void RifReaderOpmRft::importWellNames()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
void RifReaderOpmRft::buildSegmentBranchTypes( const RftSegmentKey& segmentKey )
|
||||||
|
{
|
||||||
|
auto wellName = segmentKey.first;
|
||||||
|
auto date = segmentKey.second;
|
||||||
|
RifRftSegment& segmentRef = m_rftWellDateSegments[segmentKey];
|
||||||
|
|
||||||
|
int y = std::get<0>( date );
|
||||||
|
int m = std::get<1>( date );
|
||||||
|
int d = std::get<2>( date );
|
||||||
|
|
||||||
|
auto dt = RiaQDateTimeTools::createUtcDateTime( QDate( y, m, d ) );
|
||||||
|
|
||||||
|
std::vector<double> seglenstValues;
|
||||||
|
std::vector<double> seglenenValues;
|
||||||
|
{
|
||||||
|
auto resultName =
|
||||||
|
RifEclipseRftAddress::createSegmentAddress( QString::fromStdString( wellName ), dt, "SEGLENST", -1 );
|
||||||
|
|
||||||
|
values( resultName, &seglenstValues );
|
||||||
|
|
||||||
|
if ( seglenstValues.size() > 2 )
|
||||||
|
{
|
||||||
|
seglenstValues[0] = seglenstValues[1];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
{
|
||||||
|
auto resultName =
|
||||||
|
RifEclipseRftAddress::createSegmentAddress( QString::fromStdString( wellName ), dt, "SEGLENEN", -1 );
|
||||||
|
|
||||||
|
values( resultName, &seglenenValues );
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( !seglenenValues.empty() && !seglenstValues.empty() )
|
||||||
|
{
|
||||||
|
auto branchIds = segmentRef.branchIds();
|
||||||
|
for ( auto id : branchIds )
|
||||||
|
{
|
||||||
|
double minimumMD = std::numeric_limits<double>::max();
|
||||||
|
double maximumMD = std::numeric_limits<double>::min();
|
||||||
|
|
||||||
|
auto indices = segmentRef.indicesForBranchNumber( id );
|
||||||
|
for ( auto i : indices )
|
||||||
|
{
|
||||||
|
minimumMD = std::min( minimumMD, seglenstValues[i] );
|
||||||
|
maximumMD = std::max( maximumMD, seglenenValues[i] );
|
||||||
|
}
|
||||||
|
|
||||||
|
double length = maximumMD - minimumMD;
|
||||||
|
|
||||||
|
segmentRef.setBranchLength( id, length );
|
||||||
|
|
||||||
|
const double tubingThreshold = 1.0;
|
||||||
|
RiaDefines::RftBranchType branchType = RiaDefines::RftBranchType::RFT_UNKNOWN;
|
||||||
|
if ( length > tubingThreshold ) branchType = RiaDefines::RftBranchType::RFT_TUBING;
|
||||||
|
|
||||||
|
segmentRef.setBranchType( id, branchType );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
@ -63,6 +63,7 @@ private:
|
|||||||
void segmentDataDebugLog() const;
|
void segmentDataDebugLog() const;
|
||||||
bool isOpen() const;
|
bool isOpen() const;
|
||||||
void importWellNames();
|
void importWellNames();
|
||||||
|
void buildSegmentBranchTypes( const RftSegmentKey& segmentKey );
|
||||||
|
|
||||||
std::vector<int> importWellData( const std::string& wellName, const std::string& propertyName, const RftDate& date ) const;
|
std::vector<int> importWellData( const std::string& wellName, const std::string& propertyName, const RftDate& date ) const;
|
||||||
|
|
||||||
@ -77,4 +78,5 @@ private:
|
|||||||
std::set<QString> m_wellNames;
|
std::set<QString> m_wellNames;
|
||||||
|
|
||||||
std::map<RftSegmentKey, RifRftSegment> m_rftWellDateSegments;
|
std::map<RftSegmentKey, RifRftSegment> m_rftWellDateSegments;
|
||||||
|
std::set<QDateTime> m_rftSegmentTimeSteps;
|
||||||
};
|
};
|
||||||
|
@ -110,6 +110,27 @@ std::vector<Opm::EclIO::EclFile::EclEntry> RifRftSegment::resultNameAndSize() co
|
|||||||
return m_resultNameAndSize;
|
return m_resultNameAndSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
std::vector<int> RifRftSegment::tubingBranchIds() const
|
||||||
|
{
|
||||||
|
std::vector<int> filteredBranchIds;
|
||||||
|
|
||||||
|
for ( auto branchId : branchIds() )
|
||||||
|
{
|
||||||
|
if ( m_branchType.count( branchId ) )
|
||||||
|
{
|
||||||
|
if ( m_branchType.at( branchId ) == RiaDefines::RftBranchType::RFT_TUBING )
|
||||||
|
{
|
||||||
|
filteredBranchIds.push_back( branchId );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return filteredBranchIds;
|
||||||
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
@ -128,6 +149,22 @@ std::vector<int> RifRftSegment::branchIds() const
|
|||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
void RifRftSegment::setBranchLength( int branchId, double length )
|
||||||
|
{
|
||||||
|
m_branchLength[branchId] = length;
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
void RifRftSegment::setBranchType( int branchId, RiaDefines::RftBranchType branchType )
|
||||||
|
{
|
||||||
|
m_branchType[branchId] = branchType;
|
||||||
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
@ -22,6 +22,7 @@
|
|||||||
#include <tuple>
|
#include <tuple>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
|
#include "RiaRftDefines.h"
|
||||||
#include "opm/io/eclipse/EclFile.hpp"
|
#include "opm/io/eclipse/EclFile.hpp"
|
||||||
|
|
||||||
class RifRftSegmentData
|
class RifRftSegmentData
|
||||||
@ -52,11 +53,18 @@ public:
|
|||||||
void addResultNameAndSize( const Opm::EclIO::EclFile::EclEntry& resultNameAndSize );
|
void addResultNameAndSize( const Opm::EclIO::EclFile::EclEntry& resultNameAndSize );
|
||||||
std::vector<Opm::EclIO::EclFile::EclEntry> resultNameAndSize() const;
|
std::vector<Opm::EclIO::EclFile::EclEntry> resultNameAndSize() const;
|
||||||
|
|
||||||
|
std::vector<int> tubingBranchIds() const;
|
||||||
std::vector<int> branchIds() const;
|
std::vector<int> branchIds() const;
|
||||||
|
|
||||||
|
void setBranchLength( int branchId, double length );
|
||||||
|
void setBranchType( int branchId, RiaDefines::RftBranchType branchType );
|
||||||
|
|
||||||
std::vector<size_t> indicesForBranchNumber( int branchNumber ) const;
|
std::vector<size_t> indicesForBranchNumber( int branchNumber ) const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::vector<RifRftSegmentData> m_topology;
|
std::vector<RifRftSegmentData> m_topology;
|
||||||
std::vector<Opm::EclIO::EclFile::EclEntry> m_resultNameAndSize;
|
std::vector<Opm::EclIO::EclFile::EclEntry> m_resultNameAndSize;
|
||||||
|
|
||||||
|
std::map<int, double> m_branchLength;
|
||||||
|
std::map<int, RiaDefines::RftBranchType> m_branchType;
|
||||||
};
|
};
|
||||||
|
@ -29,6 +29,7 @@
|
|||||||
#include "RifProjectSummaryDataWriter.h"
|
#include "RifProjectSummaryDataWriter.h"
|
||||||
#include "RifReaderEclipseRft.h"
|
#include "RifReaderEclipseRft.h"
|
||||||
#include "RifReaderEclipseSummary.h"
|
#include "RifReaderEclipseSummary.h"
|
||||||
|
#include "RifReaderOpmRft.h"
|
||||||
#include "RifSummaryReaderMultipleFiles.h"
|
#include "RifSummaryReaderMultipleFiles.h"
|
||||||
|
|
||||||
#include "RimProject.h"
|
#include "RimProject.h"
|
||||||
@ -185,7 +186,7 @@ RifSummaryReaderInterface* RimFileSummaryCase::findRelatedFilesAndCreateReader(
|
|||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
RifReaderEclipseRft* RimFileSummaryCase::findRftDataAndCreateReader( const QString& headerFileName )
|
RifReaderOpmRft* RimFileSummaryCase::findRftDataAndCreateReader( const QString& headerFileName )
|
||||||
{
|
{
|
||||||
QFileInfo fileInfo( headerFileName );
|
QFileInfo fileInfo( headerFileName );
|
||||||
QString folder = fileInfo.absolutePath();
|
QString folder = fileInfo.absolutePath();
|
||||||
@ -195,8 +196,7 @@ RifReaderEclipseRft* RimFileSummaryCase::findRftDataAndCreateReader( const QStri
|
|||||||
|
|
||||||
if ( rftFileInfo.exists() )
|
if ( rftFileInfo.exists() )
|
||||||
{
|
{
|
||||||
std::unique_ptr<RifReaderEclipseRft> rftReader( new RifReaderEclipseRft( rftFileInfo.filePath() ) );
|
return new RifReaderOpmRft( rftFileInfo.filePath() );
|
||||||
return rftReader.release();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return nullptr;
|
return nullptr;
|
||||||
@ -211,7 +211,7 @@ void RimFileSummaryCase::defineEditorAttribute( const caf::PdmFieldHandle* field
|
|||||||
{
|
{
|
||||||
if ( field == &m_additionalSummaryFilePath )
|
if ( field == &m_additionalSummaryFilePath )
|
||||||
{
|
{
|
||||||
caf::PdmUiFilePathEditorAttribute* myAttr = dynamic_cast<caf::PdmUiFilePathEditorAttribute*>( attribute );
|
auto* myAttr = dynamic_cast<caf::PdmUiFilePathEditorAttribute*>( attribute );
|
||||||
if ( myAttr )
|
if ( myAttr )
|
||||||
{
|
{
|
||||||
myAttr->m_selectSaveFileName = true;
|
myAttr->m_selectSaveFileName = true;
|
||||||
|
@ -23,7 +23,7 @@
|
|||||||
#include "cvfObject.h"
|
#include "cvfObject.h"
|
||||||
|
|
||||||
class RifReaderRftInterface;
|
class RifReaderRftInterface;
|
||||||
class RifReaderEclipseRft;
|
class RifReaderOpmRft;
|
||||||
class RifReaderEclipseSummary;
|
class RifReaderEclipseSummary;
|
||||||
class RiaThreadSafeLogger;
|
class RiaThreadSafeLogger;
|
||||||
class RifOpmCommonEclipseSummary;
|
class RifOpmCommonEclipseSummary;
|
||||||
@ -61,8 +61,6 @@ public:
|
|||||||
bool includeRestartFiles,
|
bool includeRestartFiles,
|
||||||
RiaThreadSafeLogger* threadSafeLogger );
|
RiaThreadSafeLogger* threadSafeLogger );
|
||||||
|
|
||||||
static RifReaderEclipseRft* findRftDataAndCreateReader( const QString& headerFileName );
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void defineEditorAttribute( const caf::PdmFieldHandle* field,
|
void defineEditorAttribute( const caf::PdmFieldHandle* field,
|
||||||
QString uiConfigName,
|
QString uiConfigName,
|
||||||
@ -73,10 +71,12 @@ private:
|
|||||||
QString additionalSummaryDataFilePath() const;
|
QString additionalSummaryDataFilePath() const;
|
||||||
static QString createAdditionalSummaryFileName();
|
static QString createAdditionalSummaryFileName();
|
||||||
|
|
||||||
|
static RifReaderOpmRft* findRftDataAndCreateReader( const QString& headerFileName );
|
||||||
|
|
||||||
private:
|
private:
|
||||||
cvf::ref<RifSummaryReaderInterface> m_fileSummaryReader;
|
cvf::ref<RifSummaryReaderInterface> m_fileSummaryReader;
|
||||||
cvf::ref<RifMultipleSummaryReaders> m_multiSummaryReader;
|
cvf::ref<RifMultipleSummaryReaders> m_multiSummaryReader;
|
||||||
cvf::ref<RifReaderEclipseRft> m_summaryEclipseRftReader;
|
cvf::ref<RifReaderOpmRft> m_summaryEclipseRftReader;
|
||||||
caf::PdmField<bool> m_includeRestartFiles;
|
caf::PdmField<bool> m_includeRestartFiles;
|
||||||
|
|
||||||
caf::PdmField<caf::FilePath> m_additionalSummaryFilePath;
|
caf::PdmField<caf::FilePath> m_additionalSummaryFilePath;
|
||||||
|
@ -484,10 +484,7 @@ QList<caf::PdmOptionItemInfo> RimSummaryCurve::calculateValueOptions( const caf:
|
|||||||
|
|
||||||
cases.push_back( proj->calculationCollection->calculationSummaryCase() );
|
cases.push_back( proj->calculationCollection->calculationSummaryCase() );
|
||||||
|
|
||||||
for ( RimSummaryCase* rimCase : cases )
|
options = RiaSummaryTools::optionsForSummaryCases( cases );
|
||||||
{
|
|
||||||
options.push_back( caf::PdmOptionItemInfo( rimCase->displayCaseName(), rimCase ) );
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( options.size() > 0 )
|
if ( options.size() > 0 )
|
||||||
{
|
{
|
||||||
|
@ -18,6 +18,9 @@
|
|||||||
|
|
||||||
#include "RimWellLogCurveCommonDataSource.h"
|
#include "RimWellLogCurveCommonDataSource.h"
|
||||||
|
|
||||||
|
#include "RiaSimWellBranchTools.h"
|
||||||
|
#include "RiaSummaryTools.h"
|
||||||
|
|
||||||
#include "RimCase.h"
|
#include "RimCase.h"
|
||||||
#include "RimDataSourceSteppingTools.h"
|
#include "RimDataSourceSteppingTools.h"
|
||||||
#include "RimEclipseCase.h"
|
#include "RimEclipseCase.h"
|
||||||
@ -26,6 +29,7 @@
|
|||||||
#include "RimOilField.h"
|
#include "RimOilField.h"
|
||||||
#include "RimProject.h"
|
#include "RimProject.h"
|
||||||
#include "RimRftTools.h"
|
#include "RimRftTools.h"
|
||||||
|
#include "RimSummaryCase.h"
|
||||||
#include "RimTools.h"
|
#include "RimTools.h"
|
||||||
#include "RimWellFlowRateCurve.h"
|
#include "RimWellFlowRateCurve.h"
|
||||||
#include "RimWellLogExtractionCurve.h"
|
#include "RimWellLogExtractionCurve.h"
|
||||||
@ -39,8 +43,6 @@
|
|||||||
#include "RimWellPath.h"
|
#include "RimWellPath.h"
|
||||||
#include "RimWellPathCollection.h"
|
#include "RimWellPathCollection.h"
|
||||||
|
|
||||||
#include "RiaSimWellBranchTools.h"
|
|
||||||
|
|
||||||
#include "cafPdmUiCheckBoxTristateEditor.h"
|
#include "cafPdmUiCheckBoxTristateEditor.h"
|
||||||
#include "cafPdmUiComboBoxEditor.h"
|
#include "cafPdmUiComboBoxEditor.h"
|
||||||
#include "cafPdmUiLineEditor.h"
|
#include "cafPdmUiLineEditor.h"
|
||||||
@ -75,9 +77,10 @@ RimWellLogCurveCommonDataSource::RimWellLogCurveCommonDataSource()
|
|||||||
CAF_PDM_InitObject( "Change Data Source" );
|
CAF_PDM_InitObject( "Change Data Source" );
|
||||||
|
|
||||||
CAF_PDM_InitFieldNoDefault( &m_case, "CurveCase", "Case" );
|
CAF_PDM_InitFieldNoDefault( &m_case, "CurveCase", "Case" );
|
||||||
|
CAF_PDM_InitFieldNoDefault( &m_summaryCase, "SummaryCase", "Summary Case" );
|
||||||
CAF_PDM_InitFieldNoDefault( &m_trajectoryType, "TrajectoryType", "Trajectory Type" );
|
CAF_PDM_InitFieldNoDefault( &m_trajectoryType, "TrajectoryType", "Trajectory Type" );
|
||||||
|
|
||||||
CAF_PDM_InitFieldNoDefault( &m_wellPath, "CurveWellPath", "Well Name" );
|
CAF_PDM_InitFieldNoDefault( &m_wellPath, "CurveWellPath", "Well Path" );
|
||||||
|
|
||||||
CAF_PDM_InitFieldNoDefault( &m_simWellName, "SimulationWellName", "Well Name" );
|
CAF_PDM_InitFieldNoDefault( &m_simWellName, "SimulationWellName", "Well Name" );
|
||||||
CAF_PDM_InitFieldNoDefault( &m_branchDetection,
|
CAF_PDM_InitFieldNoDefault( &m_branchDetection,
|
||||||
@ -122,6 +125,14 @@ RimCase* RimWellLogCurveCommonDataSource::caseToApply() const
|
|||||||
return m_case;
|
return m_case;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
void RimWellLogCurveCommonDataSource::setSummaryCaseToApply( RimSummaryCase* val )
|
||||||
|
{
|
||||||
|
m_summaryCase = val;
|
||||||
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
@ -130,6 +141,14 @@ void RimWellLogCurveCommonDataSource::setCaseToApply( RimCase* val )
|
|||||||
m_case = val;
|
m_case = val;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
RimSummaryCase* RimWellLogCurveCommonDataSource::summaryCaseToApply() const
|
||||||
|
{
|
||||||
|
return m_summaryCase();
|
||||||
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
@ -264,6 +283,7 @@ void RimWellLogCurveCommonDataSource::setTimeStepToApply( int val )
|
|||||||
void RimWellLogCurveCommonDataSource::resetDefaultOptions()
|
void RimWellLogCurveCommonDataSource::resetDefaultOptions()
|
||||||
{
|
{
|
||||||
setCaseToApply( nullptr );
|
setCaseToApply( nullptr );
|
||||||
|
setSummaryCaseToApply( nullptr );
|
||||||
setTrajectoryTypeToApply( -1 );
|
setTrajectoryTypeToApply( -1 );
|
||||||
setWellPathToApply( nullptr );
|
setWellPathToApply( nullptr );
|
||||||
setBranchIndexToApply( -1 );
|
setBranchIndexToApply( -1 );
|
||||||
@ -274,6 +294,7 @@ void RimWellLogCurveCommonDataSource::resetDefaultOptions()
|
|||||||
setWbsSmoothingThreshold( -1.0 );
|
setWbsSmoothingThreshold( -1.0 );
|
||||||
|
|
||||||
m_uniqueCases.clear();
|
m_uniqueCases.clear();
|
||||||
|
m_uniqueSummaryCases.clear();
|
||||||
m_uniqueTrajectoryTypes.clear();
|
m_uniqueTrajectoryTypes.clear();
|
||||||
m_uniqueWellPaths.clear();
|
m_uniqueWellPaths.clear();
|
||||||
m_uniqueWellNames.clear();
|
m_uniqueWellNames.clear();
|
||||||
@ -355,8 +376,9 @@ void RimWellLogCurveCommonDataSource::analyseCurvesAndTracks( const std::vector<
|
|||||||
}
|
}
|
||||||
else if ( rftCurve )
|
else if ( rftCurve )
|
||||||
{
|
{
|
||||||
|
if ( rftCurve->summaryCase() ) m_uniqueSummaryCases.insert( rftCurve->summaryCase() );
|
||||||
|
if ( rftCurve->eclipseResultCase() ) m_uniqueCases.insert( rftCurve->eclipseResultCase() );
|
||||||
m_uniqueWellNames.insert( rftCurve->wellName() );
|
m_uniqueWellNames.insert( rftCurve->wellName() );
|
||||||
m_uniqueCases.insert( rftCurve->eclipseResultCase() );
|
|
||||||
|
|
||||||
auto adr = rftCurve->rftAddress();
|
auto adr = rftCurve->rftAddress();
|
||||||
if ( adr.wellLogChannel() == RifEclipseRftAddress::RftWellLogChannelType::SEGMENT_VALUES &&
|
if ( adr.wellLogChannel() == RifEclipseRftAddress::RftWellLogChannelType::SEGMENT_VALUES &&
|
||||||
@ -399,6 +421,11 @@ void RimWellLogCurveCommonDataSource::analyseCurvesAndTracks( const std::vector<
|
|||||||
setCaseToApply( *m_uniqueCases.begin() );
|
setCaseToApply( *m_uniqueCases.begin() );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ( m_uniqueSummaryCases.size() == 1u )
|
||||||
|
{
|
||||||
|
setSummaryCaseToApply( *m_uniqueSummaryCases.begin() );
|
||||||
|
}
|
||||||
|
|
||||||
if ( m_uniqueTrajectoryTypes.size() == 1u )
|
if ( m_uniqueTrajectoryTypes.size() == 1u )
|
||||||
{
|
{
|
||||||
m_trajectoryType = *m_uniqueTrajectoryTypes.begin();
|
m_trajectoryType = *m_uniqueTrajectoryTypes.begin();
|
||||||
@ -745,14 +772,18 @@ std::vector<caf::PdmFieldHandle*> RimWellLogCurveCommonDataSource::fieldsToShowI
|
|||||||
analyseCurvesAndTracks();
|
analyseCurvesAndTracks();
|
||||||
|
|
||||||
std::vector<caf::PdmFieldHandle*> fieldsToDisplay;
|
std::vector<caf::PdmFieldHandle*> fieldsToDisplay;
|
||||||
fieldsToDisplay.push_back( &m_case );
|
|
||||||
if ( trajectoryTypeToApply() == RimWellLogExtractionCurve::WELL_PATH )
|
if ( !m_uniqueCases.empty() )
|
||||||
{
|
{
|
||||||
fieldsToDisplay.push_back( &m_wellPath );
|
fieldsToDisplay.push_back( &m_case );
|
||||||
}
|
if ( trajectoryTypeToApply() == RimWellLogExtractionCurve::WELL_PATH )
|
||||||
else if ( trajectoryTypeToApply() == RimWellLogExtractionCurve::SIMULATION_WELL )
|
{
|
||||||
{
|
fieldsToDisplay.push_back( &m_wellPath );
|
||||||
fieldsToDisplay.push_back( &m_simWellName );
|
}
|
||||||
|
else if ( trajectoryTypeToApply() == RimWellLogExtractionCurve::SIMULATION_WELL )
|
||||||
|
{
|
||||||
|
fieldsToDisplay.push_back( &m_simWellName );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( m_uniqueRftWellNames.size() == 1u ) fieldsToDisplay.push_back( &m_rftWellName );
|
if ( m_uniqueRftWellNames.size() == 1u ) fieldsToDisplay.push_back( &m_rftWellName );
|
||||||
@ -829,17 +860,11 @@ QList<caf::PdmOptionItemInfo>
|
|||||||
RimTools::caseOptionItems( &options );
|
RimTools::caseOptionItems( &options );
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( caseToApply() == nullptr )
|
options.push_front( caf::PdmOptionItemInfo( "None", nullptr ) );
|
||||||
{
|
}
|
||||||
if ( !m_uniqueCases.empty() )
|
if ( fieldNeedingOptions == &m_summaryCase )
|
||||||
{
|
{
|
||||||
options.push_front( caf::PdmOptionItemInfo( "Mixed Cases", nullptr ) );
|
options = RiaSummaryTools::optionsForAllSummaryCases();
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
options.push_front( caf::PdmOptionItemInfo( "None", nullptr ) );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else if ( fieldNeedingOptions == &m_trajectoryType )
|
else if ( fieldNeedingOptions == &m_trajectoryType )
|
||||||
{
|
{
|
||||||
@ -880,17 +905,20 @@ QList<caf::PdmOptionItemInfo>
|
|||||||
}
|
}
|
||||||
else if ( fieldNeedingOptions == &m_timeStep )
|
else if ( fieldNeedingOptions == &m_timeStep )
|
||||||
{
|
{
|
||||||
RimTools::timeStepsForCase( m_case, &options );
|
if ( m_case() )
|
||||||
|
|
||||||
if ( timeStepToApply() == -1 )
|
|
||||||
{
|
{
|
||||||
if ( !m_uniqueTimeSteps.empty() )
|
RimTools::timeStepsForCase( m_case, &options );
|
||||||
|
|
||||||
|
if ( timeStepToApply() == -1 )
|
||||||
{
|
{
|
||||||
options.push_front( caf::PdmOptionItemInfo( "Mixed Time Steps", -1 ) );
|
if ( !m_uniqueTimeSteps.empty() )
|
||||||
}
|
{
|
||||||
else
|
options.push_front( caf::PdmOptionItemInfo( "Mixed Time Steps", -1 ) );
|
||||||
{
|
}
|
||||||
options.push_front( caf::PdmOptionItemInfo( "No Time Steps", -1 ) );
|
else
|
||||||
|
{
|
||||||
|
options.push_front( caf::PdmOptionItemInfo( "No Time Steps", -1 ) );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -945,27 +973,16 @@ QList<caf::PdmOptionItemInfo>
|
|||||||
}
|
}
|
||||||
else if ( fieldNeedingOptions == &m_rftTimeStep )
|
else if ( fieldNeedingOptions == &m_rftTimeStep )
|
||||||
{
|
{
|
||||||
auto eclipseCase = dynamic_cast<RimEclipseResultCase*>( m_case() );
|
if ( !m_uniqueRftWellNames.empty() )
|
||||||
if ( eclipseCase && eclipseCase->rftReader() && !m_uniqueRftWellNames.empty() )
|
options = RimRftTools::segmentTimeStepOptions( rftReader(), *( m_uniqueRftWellNames.begin() ) );
|
||||||
{
|
|
||||||
options = RimRftTools::segmentTimeStepOptions( eclipseCase->rftReader(), *( m_uniqueRftWellNames.begin() ) );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else if ( fieldNeedingOptions == &m_rftWellName )
|
else if ( fieldNeedingOptions == &m_rftWellName )
|
||||||
{
|
{
|
||||||
auto eclipseCase = dynamic_cast<RimEclipseResultCase*>( m_case() );
|
options = RimRftTools::wellNameOptions( rftReader() );
|
||||||
if ( eclipseCase && eclipseCase->rftReader() )
|
|
||||||
{
|
|
||||||
options = RimRftTools::wellNameOptions( eclipseCase->rftReader() );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else if ( fieldNeedingOptions == &m_rftSegmentBranchId )
|
else if ( fieldNeedingOptions == &m_rftSegmentBranchId )
|
||||||
{
|
{
|
||||||
auto eclipseCase = dynamic_cast<RimEclipseResultCase*>( m_case() );
|
options = RimRftTools::segmentBranchIdOptions( rftReader(), m_rftWellName(), m_rftTimeStep() );
|
||||||
if ( eclipseCase && eclipseCase->rftReader() )
|
|
||||||
{
|
|
||||||
options = RimRftTools::segmentBranchIdOptions( eclipseCase->rftReader(), m_rftWellName(), m_rftTimeStep() );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return options;
|
return options;
|
||||||
@ -979,7 +996,8 @@ void RimWellLogCurveCommonDataSource::defineUiOrdering( QString uiConfigName, ca
|
|||||||
analyseCurvesAndTracks();
|
analyseCurvesAndTracks();
|
||||||
|
|
||||||
caf::PdmUiGroup* group = uiOrdering.addNewGroup( "Data Source" );
|
caf::PdmUiGroup* group = uiOrdering.addNewGroup( "Data Source" );
|
||||||
group->add( &m_case );
|
if ( m_case() ) group->add( &m_case );
|
||||||
|
if ( m_summaryCase() ) group->add( &m_summaryCase );
|
||||||
|
|
||||||
auto* eclipseCase = dynamic_cast<RimEclipseCase*>( m_case() );
|
auto* eclipseCase = dynamic_cast<RimEclipseCase*>( m_case() );
|
||||||
if ( eclipseCase )
|
if ( eclipseCase )
|
||||||
@ -1006,12 +1024,13 @@ void RimWellLogCurveCommonDataSource::defineUiOrdering( QString uiConfigName, ca
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
group->add( &m_timeStep );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
group->add( &m_wellPath );
|
if ( m_wellPath() ) group->add( &m_wellPath );
|
||||||
}
|
}
|
||||||
group->add( &m_timeStep );
|
|
||||||
|
|
||||||
if ( uiConfigName == smoothingUiOrderinglabel() )
|
if ( uiConfigName == smoothingUiOrderinglabel() )
|
||||||
{
|
{
|
||||||
@ -1037,7 +1056,7 @@ void RimWellLogCurveCommonDataSource::defineEditorAttribute( const caf::PdmField
|
|||||||
if ( myAttr )
|
if ( myAttr )
|
||||||
{
|
{
|
||||||
if ( field == &m_case || field == &m_simWellName || field == &m_wellPath || field == &m_timeStep ||
|
if ( field == &m_case || field == &m_simWellName || field == &m_wellPath || field == &m_timeStep ||
|
||||||
field == &m_rftTimeStep || field == &m_rftSegmentBranchId )
|
field == &m_rftTimeStep || field == &m_rftSegmentBranchId || field == &m_rftWellName )
|
||||||
{
|
{
|
||||||
myAttr->showPreviousAndNextButtons = true;
|
myAttr->showPreviousAndNextButtons = true;
|
||||||
myAttr->nextIcon = QIcon( ":/ComboBoxDown.svg" );
|
myAttr->nextIcon = QIcon( ":/ComboBoxDown.svg" );
|
||||||
@ -1091,3 +1110,16 @@ void RimWellLogCurveCommonDataSource::modifyCurrentIndex( caf::PdmValueField* fi
|
|||||||
QList<caf::PdmOptionItemInfo> options = calculateValueOptions( field );
|
QList<caf::PdmOptionItemInfo> options = calculateValueOptions( field );
|
||||||
RimDataSourceSteppingTools::modifyCurrentIndex( field, options, indexOffset );
|
RimDataSourceSteppingTools::modifyCurrentIndex( field, options, indexOffset );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
RifReaderRftInterface* RimWellLogCurveCommonDataSource::rftReader()
|
||||||
|
{
|
||||||
|
auto eclipseCase = dynamic_cast<RimEclipseResultCase*>( m_case() );
|
||||||
|
if ( eclipseCase && eclipseCase->rftReader() ) return eclipseCase->rftReader();
|
||||||
|
|
||||||
|
if ( m_summaryCase() && m_summaryCase()->rftReader() ) return m_summaryCase->rftReader();
|
||||||
|
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
@ -33,6 +33,8 @@ class RimWellLogCurve;
|
|||||||
class RimWellLogPlot;
|
class RimWellLogPlot;
|
||||||
class RimWellLogTrack;
|
class RimWellLogTrack;
|
||||||
class RimWellPath;
|
class RimWellPath;
|
||||||
|
class RimSummaryCase;
|
||||||
|
class RifReaderRftInterface;
|
||||||
|
|
||||||
//==================================================================================================
|
//==================================================================================================
|
||||||
///
|
///
|
||||||
@ -56,20 +58,22 @@ public:
|
|||||||
|
|
||||||
void setCaseType( RiaDefines::CaseType caseType );
|
void setCaseType( RiaDefines::CaseType caseType );
|
||||||
|
|
||||||
RimCase* caseToApply() const;
|
RimCase* caseToApply() const;
|
||||||
void setCaseToApply( RimCase* val );
|
void setCaseToApply( RimCase* val );
|
||||||
int trajectoryTypeToApply() const;
|
RimSummaryCase* summaryCaseToApply() const;
|
||||||
void setTrajectoryTypeToApply( int val );
|
void setSummaryCaseToApply( RimSummaryCase* val );
|
||||||
RimWellPath* wellPathToApply() const;
|
int trajectoryTypeToApply() const;
|
||||||
void setWellPathToApply( RimWellPath* val );
|
void setTrajectoryTypeToApply( int val );
|
||||||
int branchIndexToApply() const;
|
RimWellPath* wellPathToApply() const;
|
||||||
void setBranchIndexToApply( int val );
|
void setWellPathToApply( RimWellPath* val );
|
||||||
caf::Tristate branchDetectionToApply() const;
|
int branchIndexToApply() const;
|
||||||
void setBranchDetectionToApply( caf::Tristate::State val );
|
void setBranchIndexToApply( int val );
|
||||||
caf::Tristate wbsSmoothingToApply() const;
|
caf::Tristate branchDetectionToApply() const;
|
||||||
void setWbsSmoothingToApply( caf::Tristate::State val );
|
void setBranchDetectionToApply( caf::Tristate::State val );
|
||||||
double wbsSmoothingThreshold() const;
|
caf::Tristate wbsSmoothingToApply() const;
|
||||||
void setWbsSmoothingThreshold( double smoothingThreshold );
|
void setWbsSmoothingToApply( caf::Tristate::State val );
|
||||||
|
double wbsSmoothingThreshold() const;
|
||||||
|
void setWbsSmoothingThreshold( double smoothingThreshold );
|
||||||
|
|
||||||
QString simWellNameToApply() const;
|
QString simWellNameToApply() const;
|
||||||
void setSimWellNameToApply( const QString& val );
|
void setSimWellNameToApply( const QString& val );
|
||||||
@ -93,7 +97,7 @@ public:
|
|||||||
|
|
||||||
static QString smoothingUiOrderinglabel();
|
static QString smoothingUiOrderinglabel();
|
||||||
|
|
||||||
protected:
|
private:
|
||||||
void fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue ) override;
|
void fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue ) override;
|
||||||
QList<caf::PdmOptionItemInfo> calculateValueOptions( const caf::PdmFieldHandle* fieldNeedingOptions ) override;
|
QList<caf::PdmOptionItemInfo> calculateValueOptions( const caf::PdmFieldHandle* fieldNeedingOptions ) override;
|
||||||
void defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering ) override;
|
void defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering ) override;
|
||||||
@ -102,24 +106,28 @@ protected:
|
|||||||
caf::PdmUiEditorAttribute* attribute ) override;
|
caf::PdmUiEditorAttribute* attribute ) override;
|
||||||
void modifyCurrentIndex( caf::PdmValueField* field, int indexOffset );
|
void modifyCurrentIndex( caf::PdmValueField* field, int indexOffset );
|
||||||
|
|
||||||
|
RifReaderRftInterface* rftReader();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
RiaDefines::CaseType m_caseType;
|
RiaDefines::CaseType m_caseType;
|
||||||
|
|
||||||
caf::PdmPtrField<RimCase*> m_case;
|
caf::PdmPtrField<RimCase*> m_case;
|
||||||
caf::PdmField<int> m_trajectoryType;
|
caf::PdmPtrField<RimSummaryCase*> m_summaryCase;
|
||||||
caf::PdmPtrField<RimWellPath*> m_wellPath;
|
caf::PdmField<int> m_trajectoryType;
|
||||||
caf::PdmField<QString> m_simWellName;
|
caf::PdmPtrField<RimWellPath*> m_wellPath;
|
||||||
caf::PdmField<int> m_branchIndex;
|
caf::PdmField<QString> m_simWellName;
|
||||||
caf::PdmField<caf::Tristate> m_branchDetection;
|
caf::PdmField<int> m_branchIndex;
|
||||||
caf::PdmField<int> m_timeStep;
|
caf::PdmField<caf::Tristate> m_branchDetection;
|
||||||
caf::PdmField<caf::Tristate> m_wbsSmoothing;
|
caf::PdmField<int> m_timeStep;
|
||||||
caf::PdmField<double> m_wbsSmoothingThreshold;
|
caf::PdmField<caf::Tristate> m_wbsSmoothing;
|
||||||
|
caf::PdmField<double> m_wbsSmoothingThreshold;
|
||||||
|
|
||||||
caf::PdmField<QDateTime> m_rftTimeStep;
|
caf::PdmField<QDateTime> m_rftTimeStep;
|
||||||
caf::PdmField<QString> m_rftWellName;
|
caf::PdmField<QString> m_rftWellName;
|
||||||
caf::PdmField<int> m_rftSegmentBranchId;
|
caf::PdmField<int> m_rftSegmentBranchId;
|
||||||
|
|
||||||
std::set<RimCase*> m_uniqueCases;
|
std::set<RimCase*> m_uniqueCases;
|
||||||
|
std::set<RimSummaryCase*> m_uniqueSummaryCases;
|
||||||
std::set<int> m_uniqueTrajectoryTypes;
|
std::set<int> m_uniqueTrajectoryTypes;
|
||||||
std::set<RimWellPath*> m_uniqueWellPaths;
|
std::set<RimWellPath*> m_uniqueWellPaths;
|
||||||
std::set<QString> m_uniqueWellNames;
|
std::set<QString> m_uniqueWellNames;
|
||||||
|
@ -24,6 +24,7 @@
|
|||||||
#include "RiaResultNames.h"
|
#include "RiaResultNames.h"
|
||||||
#include "RiaRftDefines.h"
|
#include "RiaRftDefines.h"
|
||||||
#include "RiaSimWellBranchTools.h"
|
#include "RiaSimWellBranchTools.h"
|
||||||
|
#include "RiaSummaryTools.h"
|
||||||
|
|
||||||
#include "RifEclipseRftAddress.h"
|
#include "RifEclipseRftAddress.h"
|
||||||
#include "RifReaderEclipseRft.h"
|
#include "RifReaderEclipseRft.h"
|
||||||
@ -308,8 +309,9 @@ RimObservedFmuRftData* RimWellLogRftCurve::observedFmuRftData() const
|
|||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
void RimWellLogRftCurve::setRftAddress( RifEclipseRftAddress address )
|
void RimWellLogRftCurve::setRftAddress( RifEclipseRftAddress address )
|
||||||
{
|
{
|
||||||
m_timeStep = address.timeStep();
|
m_timeStep = address.timeStep();
|
||||||
m_wellName = address.wellName();
|
m_wellName = address.wellName();
|
||||||
|
m_wellLogChannelName = address.wellLogChannel();
|
||||||
|
|
||||||
if ( address.wellLogChannel() == RifEclipseRftAddress::RftWellLogChannelType::SEGMENT_VALUES )
|
if ( address.wellLogChannel() == RifEclipseRftAddress::RftWellLogChannelType::SEGMENT_VALUES )
|
||||||
{
|
{
|
||||||
@ -319,8 +321,7 @@ void RimWellLogRftCurve::setRftAddress( RifEclipseRftAddress address )
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_rftDataType = RftDataType::RFT_DATA;
|
m_rftDataType = RftDataType::RFT_DATA;
|
||||||
m_wellLogChannelName = address.wellLogChannel();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -508,7 +509,7 @@ void RimWellLogRftCurve::onLoadDataAndUpdate( bool updateParentPlot )
|
|||||||
|
|
||||||
if ( values.empty() || values.size() != tvDepthVector.size() )
|
if ( values.empty() || values.size() != tvDepthVector.size() )
|
||||||
{
|
{
|
||||||
this->detach();
|
this->detach( true );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -676,6 +677,7 @@ void RimWellLogRftCurve::defineUiOrdering( QString uiConfigName, caf::PdmUiOrder
|
|||||||
|
|
||||||
caf::PdmUiGroup* curveDataGroup = uiOrdering.addNewGroup( "Curve Data" );
|
caf::PdmUiGroup* curveDataGroup = uiOrdering.addNewGroup( "Curve Data" );
|
||||||
curveDataGroup->add( &m_eclipseResultCase );
|
curveDataGroup->add( &m_eclipseResultCase );
|
||||||
|
curveDataGroup->add( &m_summaryCase );
|
||||||
curveDataGroup->add( &m_wellName );
|
curveDataGroup->add( &m_wellName );
|
||||||
curveDataGroup->add( &m_timeStep );
|
curveDataGroup->add( &m_timeStep );
|
||||||
curveDataGroup->add( &m_rftDataType );
|
curveDataGroup->add( &m_rftDataType );
|
||||||
@ -726,6 +728,11 @@ QList<caf::PdmOptionItemInfo> RimWellLogRftCurve::calculateValueOptions( const c
|
|||||||
|
|
||||||
options.push_front( caf::PdmOptionItemInfo( "None", nullptr ) );
|
options.push_front( caf::PdmOptionItemInfo( "None", nullptr ) );
|
||||||
}
|
}
|
||||||
|
else if ( fieldNeedingOptions == &m_summaryCase )
|
||||||
|
{
|
||||||
|
options = RiaSummaryTools::optionsForSummaryCases( RimProject::current()->allSummaryCases() );
|
||||||
|
options.push_front( caf::PdmOptionItemInfo( "None", nullptr ) );
|
||||||
|
}
|
||||||
else if ( fieldNeedingOptions == &m_wellName )
|
else if ( fieldNeedingOptions == &m_wellName )
|
||||||
{
|
{
|
||||||
options = RimRftTools::wellNameOptions( reader );
|
options = RimRftTools::wellNameOptions( reader );
|
||||||
@ -736,7 +743,10 @@ QList<caf::PdmOptionItemInfo> RimWellLogRftCurve::calculateValueOptions( const c
|
|||||||
}
|
}
|
||||||
else if ( fieldNeedingOptions == &m_timeStep )
|
else if ( fieldNeedingOptions == &m_timeStep )
|
||||||
{
|
{
|
||||||
options = RimRftTools::timeStepOptions( reader, m_wellName, m_wellLogChannelName() );
|
if ( m_rftDataType == RimWellLogRftCurve::RftDataType::RFT_SEGMENT_DATA )
|
||||||
|
options = RimRftTools::segmentTimeStepOptions( reader, m_wellName );
|
||||||
|
else
|
||||||
|
options = RimRftTools::timeStepOptions( reader, m_wellName, m_wellLogChannelName() );
|
||||||
}
|
}
|
||||||
else if ( fieldNeedingOptions == &m_branchIndex )
|
else if ( fieldNeedingOptions == &m_branchIndex )
|
||||||
{
|
{
|
||||||
@ -1104,6 +1114,12 @@ std::vector<double> RimWellLogRftCurve::measuredDepthValues()
|
|||||||
segmentBranchId() );
|
segmentBranchId() );
|
||||||
|
|
||||||
reader->values( depthAddress, &values );
|
reader->values( depthAddress, &values );
|
||||||
|
|
||||||
|
// Special handling of first segment
|
||||||
|
if ( values.size() > 2 && values.front() < 0.001 )
|
||||||
|
{
|
||||||
|
values[0] = values[1];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return values;
|
return values;
|
||||||
}
|
}
|
||||||
|
@ -89,6 +89,7 @@
|
|||||||
#include "cafPdmFieldReorderCapability.h"
|
#include "cafPdmFieldReorderCapability.h"
|
||||||
#include "cafPdmFieldScriptingCapability.h"
|
#include "cafPdmFieldScriptingCapability.h"
|
||||||
#include "cafPdmObjectScriptingCapability.h"
|
#include "cafPdmObjectScriptingCapability.h"
|
||||||
|
#include "cafPdmUiDoubleValueEditor.h"
|
||||||
#include "cafPdmUiSliderEditor.h"
|
#include "cafPdmUiSliderEditor.h"
|
||||||
#include "cafSelectionManager.h"
|
#include "cafSelectionManager.h"
|
||||||
|
|
||||||
@ -191,7 +192,10 @@ RimWellLogTrack::RimWellLogTrack()
|
|||||||
reorderability->orderChanged.connect( this, &RimWellLogTrack::curveDataChanged );
|
reorderability->orderChanged.connect( this, &RimWellLogTrack::curveDataChanged );
|
||||||
|
|
||||||
CAF_PDM_InitField( &m_visiblePropertyValueRangeMin, "VisibleXRangeMin", RI_LOGPLOTTRACK_MINX_DEFAULT, "Min" );
|
CAF_PDM_InitField( &m_visiblePropertyValueRangeMin, "VisibleXRangeMin", RI_LOGPLOTTRACK_MINX_DEFAULT, "Min" );
|
||||||
|
m_visiblePropertyValueRangeMin.uiCapability()->setUiEditorTypeName( caf::PdmUiDoubleValueEditor::uiEditorTypeName() );
|
||||||
CAF_PDM_InitField( &m_visiblePropertyValueRangeMax, "VisibleXRangeMax", RI_LOGPLOTTRACK_MAXX_DEFAULT, "Max" );
|
CAF_PDM_InitField( &m_visiblePropertyValueRangeMax, "VisibleXRangeMax", RI_LOGPLOTTRACK_MAXX_DEFAULT, "Max" );
|
||||||
|
m_visiblePropertyValueRangeMax.uiCapability()->setUiEditorTypeName( caf::PdmUiDoubleValueEditor::uiEditorTypeName() );
|
||||||
|
|
||||||
CAF_PDM_InitField( &m_visibleDepthRangeMin, "VisibleYRangeMin", RI_LOGPLOTTRACK_MINX_DEFAULT, "Min" );
|
CAF_PDM_InitField( &m_visibleDepthRangeMin, "VisibleYRangeMin", RI_LOGPLOTTRACK_MINX_DEFAULT, "Min" );
|
||||||
CAF_PDM_InitField( &m_visibleDepthRangeMax, "VisibleYRangeMax", RI_LOGPLOTTRACK_MAXX_DEFAULT, "Max" );
|
CAF_PDM_InitField( &m_visibleDepthRangeMax, "VisibleYRangeMax", RI_LOGPLOTTRACK_MAXX_DEFAULT, "Max" );
|
||||||
m_visibleDepthRangeMin.uiCapability()->setUiHidden( true );
|
m_visibleDepthRangeMin.uiCapability()->setUiHidden( true );
|
||||||
@ -203,6 +207,7 @@ RimWellLogTrack::RimWellLogTrack()
|
|||||||
m_isAutoScalePropertyValuesEnabled.uiCapability()->setUiHidden( true );
|
m_isAutoScalePropertyValuesEnabled.uiCapability()->setUiHidden( true );
|
||||||
|
|
||||||
CAF_PDM_InitField( &m_isLogarithmicScaleEnabled, "LogarithmicScaleX", false, "Logarithmic Scale" );
|
CAF_PDM_InitField( &m_isLogarithmicScaleEnabled, "LogarithmicScaleX", false, "Logarithmic Scale" );
|
||||||
|
CAF_PDM_InitField( &m_invertPropertyValueAxis, "InvertPropertyValueAxis", false, "Invert Axis Range" );
|
||||||
|
|
||||||
CAF_PDM_InitFieldNoDefault( &m_propertyValueAxisGridVisibility, "ShowXGridLines", "Show Grid Lines" );
|
CAF_PDM_InitFieldNoDefault( &m_propertyValueAxisGridVisibility, "ShowXGridLines", "Show Grid Lines" );
|
||||||
|
|
||||||
@ -403,14 +408,11 @@ void RimWellLogTrack::calculatePropertyValueZoomRange()
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
auto range = std::fabs( maxValue - minValue );
|
double adjustmentFactor = 0.1;
|
||||||
maxValue += 0.1 * range;
|
auto [adjustedMin, adjustedMax] = extendMinMaxRange( minValue, maxValue, adjustmentFactor );
|
||||||
|
|
||||||
auto candidateMinValue = minValue - 0.1 * range;
|
minValue = adjustedMin;
|
||||||
if ( std::signbit( minValue ) == std::signbit( candidateMinValue ) )
|
maxValue = adjustedMax;
|
||||||
{
|
|
||||||
minValue = candidateMinValue;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
m_availablePropertyValueRangeMin = minValue;
|
m_availablePropertyValueRangeMin = minValue;
|
||||||
@ -465,8 +467,11 @@ void RimWellLogTrack::calculateDepthZoomRange()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
m_availableDepthRangeMin = minDepth;
|
double adjustmentFactor = 0.02;
|
||||||
m_availableDepthRangeMax = maxDepth;
|
auto [adjustedMin, adjustedMax] = extendMinMaxRange( minDepth, maxDepth, adjustmentFactor );
|
||||||
|
|
||||||
|
m_availableDepthRangeMin = adjustedMin;
|
||||||
|
m_availableDepthRangeMax = adjustedMax;
|
||||||
}
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
@ -509,7 +514,18 @@ void RimWellLogTrack::updatePropertyValueZoom()
|
|||||||
componentRangeMax *= 1.5;
|
componentRangeMax *= 1.5;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_plotWidget->setAxisRange( RiuPlotAxis::defaultBottom(), componentRangeMin, componentRangeMax );
|
RimDepthTrackPlot* wellLogPlot;
|
||||||
|
this->firstAncestorOrThisOfTypeAsserted( wellLogPlot );
|
||||||
|
|
||||||
|
// Attribute components use the opposite axis to the property values
|
||||||
|
if ( wellLogPlot->depthOrientation() == RimDepthTrackPlot::DepthOrientation::VERTICAL )
|
||||||
|
{
|
||||||
|
m_plotWidget->setAxisRange( RiuPlotAxis::defaultBottom(), componentRangeMin, componentRangeMax );
|
||||||
|
}
|
||||||
|
else if ( wellLogPlot->depthOrientation() == RimDepthTrackPlot::DepthOrientation::VERTICAL )
|
||||||
|
{
|
||||||
|
m_plotWidget->setAxisRange( RiuPlotAxis::defaultRight(), componentRangeMin, componentRangeMax );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
@ -578,7 +594,8 @@ void RimWellLogTrack::fieldChangedByUi( const caf::PdmFieldHandle* changedField,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if ( changedField == &m_propertyValueAxisGridVisibility || changedField == &m_majorTickInterval ||
|
else if ( changedField == &m_propertyValueAxisGridVisibility || changedField == &m_majorTickInterval ||
|
||||||
changedField == &m_minorTickInterval || changedField == &m_minAndMaxTicksOnly )
|
changedField == &m_minorTickInterval || changedField == &m_minAndMaxTicksOnly ||
|
||||||
|
changedField == &m_invertPropertyValueAxis )
|
||||||
{
|
{
|
||||||
updatePropertyValueAxisAndGridTickIntervals();
|
updatePropertyValueAxisAndGridTickIntervals();
|
||||||
}
|
}
|
||||||
@ -796,6 +813,11 @@ void RimWellLogTrack::updatePropertyValueAxisAndGridTickIntervals()
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_plotWidget->setAxisLabelsAndTicksEnabled( valueAxis(), true, true );
|
m_plotWidget->setAxisLabelsAndTicksEnabled( valueAxis(), true, true );
|
||||||
|
|
||||||
|
auto rangeBoundaryA = m_visiblePropertyValueRangeMin();
|
||||||
|
auto rangeBoundaryB = m_visiblePropertyValueRangeMax();
|
||||||
|
if ( m_invertPropertyValueAxis() ) std::swap( rangeBoundaryA, rangeBoundaryB );
|
||||||
|
|
||||||
if ( m_minAndMaxTicksOnly )
|
if ( m_minAndMaxTicksOnly )
|
||||||
{
|
{
|
||||||
auto roundToDigits = []( double value, int numberOfDigits, bool useFloor ) {
|
auto roundToDigits = []( double value, int numberOfDigits, bool useFloor ) {
|
||||||
@ -813,16 +835,16 @@ void RimWellLogTrack::updatePropertyValueAxisAndGridTickIntervals()
|
|||||||
return std::ceil( value * factor ) / factor;
|
return std::ceil( value * factor ) / factor;
|
||||||
};
|
};
|
||||||
|
|
||||||
auto div = QwtScaleDiv( m_visiblePropertyValueRangeMin(), m_visiblePropertyValueRangeMax() );
|
auto div = QwtScaleDiv( rangeBoundaryA, rangeBoundaryB );
|
||||||
|
|
||||||
QList<double> majorTicks;
|
QList<double> majorTicks;
|
||||||
|
|
||||||
auto min = roundToDigits( m_visiblePropertyValueRangeMin(), 2, false );
|
auto min = roundToDigits( rangeBoundaryA, 2, false );
|
||||||
auto max = roundToDigits( m_visiblePropertyValueRangeMax(), 2, true );
|
auto max = roundToDigits( rangeBoundaryB, 2, true );
|
||||||
if ( min == max )
|
if ( min == max )
|
||||||
{
|
{
|
||||||
min = roundToDigits( m_visiblePropertyValueRangeMin(), 3, false );
|
min = roundToDigits( rangeBoundaryA, 3, false );
|
||||||
max = roundToDigits( m_visiblePropertyValueRangeMax(), 3, true );
|
max = roundToDigits( rangeBoundaryB, 3, true );
|
||||||
}
|
}
|
||||||
|
|
||||||
majorTicks.push_back( min );
|
majorTicks.push_back( min );
|
||||||
@ -846,15 +868,15 @@ void RimWellLogTrack::updatePropertyValueAxisAndGridTickIntervals()
|
|||||||
m_plotWidget->setMajorAndMinorTickIntervals( valueAxis(),
|
m_plotWidget->setMajorAndMinorTickIntervals( valueAxis(),
|
||||||
m_majorTickInterval(),
|
m_majorTickInterval(),
|
||||||
m_minorTickInterval(),
|
m_minorTickInterval(),
|
||||||
m_visiblePropertyValueRangeMin(),
|
rangeBoundaryA,
|
||||||
m_visiblePropertyValueRangeMax() );
|
rangeBoundaryB );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
int majorTickIntervals = 5;
|
int majorTickIntervals = 5;
|
||||||
int minorTickIntervals = 10;
|
int minorTickIntervals = 10;
|
||||||
m_plotWidget->setAutoTickIntervalCounts( valueAxis(), majorTickIntervals, minorTickIntervals );
|
m_plotWidget->setAutoTickIntervalCounts( valueAxis(), majorTickIntervals, minorTickIntervals );
|
||||||
m_plotWidget->setAxisRange( valueAxis(), m_visiblePropertyValueRangeMin, m_visiblePropertyValueRangeMax );
|
m_plotWidget->setAxisRange( valueAxis(), rangeBoundaryA, rangeBoundaryB );
|
||||||
}
|
}
|
||||||
|
|
||||||
m_plotWidget->enableGridLines( valueAxis(),
|
m_plotWidget->enableGridLines( valueAxis(),
|
||||||
@ -986,13 +1008,10 @@ QString RimWellLogTrack::asciiDataForPlotExport() const
|
|||||||
|
|
||||||
const std::vector<double>& allDepths = curveMerger.allXValues();
|
const std::vector<double>& allDepths = curveMerger.allXValues();
|
||||||
curveDepths = allDepths;
|
curveDepths = allDepths;
|
||||||
for ( size_t depthIdx = 0; depthIdx < allDepths.size(); depthIdx++ )
|
for ( size_t curveIdx = 0; curveIdx < curveMerger.curveCount(); ++curveIdx )
|
||||||
{
|
{
|
||||||
for ( size_t curveIdx = 0; curveIdx < curveMerger.curveCount(); ++curveIdx )
|
const std::vector<double>& curveValues = curveMerger.lookupYValuesForAllXValues( curveIdx );
|
||||||
{
|
curvesPlotXValues.push_back( curveValues );
|
||||||
const std::vector<double>& curveValues = curveMerger.lookupYValuesForAllXValues( curveIdx );
|
|
||||||
curvesPlotXValues.push_back( curveValues );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2098,6 +2117,27 @@ std::pair<double, double> RimWellLogTrack::adjustXRange( double minValue, double
|
|||||||
return std::make_pair( adjustedMin, adjustedMax );
|
return std::make_pair( adjustedMin, adjustedMax );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
std::pair<double, double> RimWellLogTrack::extendMinMaxRange( double minValue, double maxValue, double factor )
|
||||||
|
{
|
||||||
|
auto modifiedMin = minValue;
|
||||||
|
auto modifiedMax = maxValue;
|
||||||
|
|
||||||
|
auto range = std::fabs( maxValue - minValue );
|
||||||
|
modifiedMax += factor * range;
|
||||||
|
|
||||||
|
auto candidateMinValue = minValue - factor * range;
|
||||||
|
if ( std::signbit( minValue ) == std::signbit( candidateMinValue ) )
|
||||||
|
{
|
||||||
|
// Leave minimum unchanged if the changes causes change of sign to make sure that zero is located properly
|
||||||
|
modifiedMin = candidateMinValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
return { modifiedMin, modifiedMax };
|
||||||
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
@ -2349,6 +2389,7 @@ void RimWellLogTrack::uiOrderingForXAxisSettings( caf::PdmUiOrdering& uiOrdering
|
|||||||
gridGroup->add( &m_isLogarithmicScaleEnabled );
|
gridGroup->add( &m_isLogarithmicScaleEnabled );
|
||||||
gridGroup->add( &m_visiblePropertyValueRangeMin );
|
gridGroup->add( &m_visiblePropertyValueRangeMin );
|
||||||
gridGroup->add( &m_visiblePropertyValueRangeMax );
|
gridGroup->add( &m_visiblePropertyValueRangeMax );
|
||||||
|
gridGroup->add( &m_invertPropertyValueAxis );
|
||||||
gridGroup->add( &m_propertyValueAxisGridVisibility );
|
gridGroup->add( &m_propertyValueAxisGridVisibility );
|
||||||
gridGroup->add( &m_minAndMaxTicksOnly );
|
gridGroup->add( &m_minAndMaxTicksOnly );
|
||||||
|
|
||||||
|
@ -298,6 +298,8 @@ private:
|
|||||||
|
|
||||||
std::pair<double, double> adjustXRange( double minValue, double maxValue, double tickInterval );
|
std::pair<double, double> adjustXRange( double minValue, double maxValue, double tickInterval );
|
||||||
|
|
||||||
|
std::pair<double, double> extendMinMaxRange( double minValue, double maxValue, double factor );
|
||||||
|
|
||||||
void updateWellPathAttributesCollection();
|
void updateWellPathAttributesCollection();
|
||||||
|
|
||||||
RimDepthTrackPlot* parentWellLogPlot() const;
|
RimDepthTrackPlot* parentWellLogPlot() const;
|
||||||
@ -324,6 +326,7 @@ private:
|
|||||||
|
|
||||||
caf::PdmField<bool> m_isAutoScalePropertyValuesEnabled;
|
caf::PdmField<bool> m_isAutoScalePropertyValuesEnabled;
|
||||||
caf::PdmField<bool> m_isLogarithmicScaleEnabled;
|
caf::PdmField<bool> m_isLogarithmicScaleEnabled;
|
||||||
|
caf::PdmField<bool> m_invertPropertyValueAxis;
|
||||||
caf::PdmField<RimWellLogPlot::AxisGridEnum> m_propertyValueAxisGridVisibility;
|
caf::PdmField<RimWellLogPlot::AxisGridEnum> m_propertyValueAxisGridVisibility;
|
||||||
|
|
||||||
caf::PdmField<bool> m_explicitTickIntervals;
|
caf::PdmField<bool> m_explicitTickIntervals;
|
||||||
@ -373,5 +376,4 @@ private:
|
|||||||
double m_availablePropertyValueRangeMax;
|
double m_availablePropertyValueRangeMax;
|
||||||
double m_availableDepthRangeMin;
|
double m_availableDepthRangeMin;
|
||||||
double m_availableDepthRangeMax;
|
double m_availableDepthRangeMax;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user