mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
#5217 Filter well measurements by quality
This commit is contained in:
parent
2a0ba626d7
commit
ed19f41586
@ -286,13 +286,16 @@ void RivWellPathPartMgr::appendWellMeasurementsToModel( cvf::ModelBasicList*
|
|||||||
double lowerBound = 0.0;
|
double lowerBound = 0.0;
|
||||||
double upperBound = 0.0;
|
double upperBound = 0.0;
|
||||||
wellMeasurementInView->rangeValues( &lowerBound, &upperBound );
|
wellMeasurementInView->rangeValues( &lowerBound, &upperBound );
|
||||||
|
std::vector<int> qualityFilter = wellMeasurementInView->qualityFilter();
|
||||||
|
|
||||||
std::vector<RimWellMeasurement*> wellMeasurements =
|
std::vector<RimWellMeasurement*> wellMeasurements =
|
||||||
RimWellMeasurementFilter::filterMeasurements( wellMeasurementCollection->measurements(),
|
RimWellMeasurementFilter::filterMeasurements( wellMeasurementCollection->measurements(),
|
||||||
*wellPathCollection,
|
*wellPathCollection,
|
||||||
*m_rimWellPath,
|
*m_rimWellPath,
|
||||||
measurementKinds,
|
measurementKinds,
|
||||||
lowerBound,
|
lowerBound,
|
||||||
upperBound );
|
upperBound,
|
||||||
|
qualityFilter );
|
||||||
|
|
||||||
RivPipeGeometryGenerator geoGenerator;
|
RivPipeGeometryGenerator geoGenerator;
|
||||||
for ( RimWellMeasurement* wellMeasurement : wellMeasurements )
|
for ( RimWellMeasurement* wellMeasurement : wellMeasurements )
|
||||||
|
@ -57,7 +57,8 @@ std::vector<RimWellMeasurement*>
|
|||||||
const RimWellPath& wellPath,
|
const RimWellPath& wellPath,
|
||||||
const std::vector<QString>& measurementKinds,
|
const std::vector<QString>& measurementKinds,
|
||||||
double lowerBound,
|
double lowerBound,
|
||||||
double upperBound )
|
double upperBound,
|
||||||
|
const std::vector<int>& qualityFilter )
|
||||||
{
|
{
|
||||||
std::vector<RimWellMeasurement*> filteredMeasurementsByKindsAndWellPath = filterMeasurements( measurements,
|
std::vector<RimWellMeasurement*> filteredMeasurementsByKindsAndWellPath = filterMeasurements( measurements,
|
||||||
wellPathCollection,
|
wellPathCollection,
|
||||||
@ -67,7 +68,8 @@ std::vector<RimWellMeasurement*>
|
|||||||
std::vector<RimWellMeasurement*> filteredMeasurements;
|
std::vector<RimWellMeasurement*> filteredMeasurements;
|
||||||
for ( auto& measurement : filteredMeasurementsByKindsAndWellPath )
|
for ( auto& measurement : filteredMeasurementsByKindsAndWellPath )
|
||||||
{
|
{
|
||||||
if ( RimWellMeasurementFilter::isInsideRange( measurement->value(), lowerBound, upperBound ) )
|
if ( RimWellMeasurementFilter::isInsideRange( measurement->value(), lowerBound, upperBound ) &&
|
||||||
|
RimWellMeasurementFilter::hasQuality( measurement->quality(), qualityFilter ) )
|
||||||
{
|
{
|
||||||
filteredMeasurements.push_back( measurement );
|
filteredMeasurements.push_back( measurement );
|
||||||
}
|
}
|
||||||
@ -114,3 +116,11 @@ bool RimWellMeasurementFilter::isInsideRange( double value, double lowerBound, d
|
|||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
bool RimWellMeasurementFilter::hasQuality( int quality, const std::vector<int>& qualityFilter )
|
||||||
|
{
|
||||||
|
return std::find( qualityFilter.begin(), qualityFilter.end(), quality ) != qualityFilter.end();
|
||||||
|
}
|
||||||
|
@ -38,7 +38,8 @@ public:
|
|||||||
const RimWellPath& rimWellPath,
|
const RimWellPath& rimWellPath,
|
||||||
const std::vector<QString>& measurementKinds,
|
const std::vector<QString>& measurementKinds,
|
||||||
double lowerBound,
|
double lowerBound,
|
||||||
double upperBound );
|
double upperBound,
|
||||||
|
const std::vector<int>& qualityFilter );
|
||||||
|
|
||||||
static std::vector<RimWellMeasurement*> filterMeasurements( const std::vector<RimWellMeasurement*>& measurements,
|
static std::vector<RimWellMeasurement*> filterMeasurements( const std::vector<RimWellMeasurement*>& measurements,
|
||||||
const std::vector<QString>& measurementKinds );
|
const std::vector<QString>& measurementKinds );
|
||||||
@ -47,4 +48,6 @@ private:
|
|||||||
RimWellMeasurementFilter();
|
RimWellMeasurementFilter();
|
||||||
|
|
||||||
static bool isInsideRange( double value, double lowerBound, double upperBound );
|
static bool isInsideRange( double value, double lowerBound, double upperBound );
|
||||||
|
|
||||||
|
static bool hasQuality( int quality, const std::vector<int>& qualityFilter );
|
||||||
};
|
};
|
||||||
|
@ -65,6 +65,10 @@ RimWellMeasurementInView::RimWellMeasurementInView()
|
|||||||
CAF_PDM_InitField( &m_upperBound, "UpperBound", HUGE_VAL, "Max", "", "", "" );
|
CAF_PDM_InitField( &m_upperBound, "UpperBound", HUGE_VAL, "Max", "", "", "" );
|
||||||
m_upperBound.uiCapability()->setUiEditorTypeName( caf::PdmUiDoubleSliderEditor::uiEditorTypeName() );
|
m_upperBound.uiCapability()->setUiEditorTypeName( caf::PdmUiDoubleSliderEditor::uiEditorTypeName() );
|
||||||
|
|
||||||
|
CAF_PDM_InitFieldNoDefault( &m_qualityFilter, "QualityFilter", "Quality Filter", "", "", "" );
|
||||||
|
m_qualityFilter.uiCapability()->setAutoAddingOptionFromValue( false );
|
||||||
|
m_qualityFilter.uiCapability()->setUiEditorTypeName( caf::PdmUiTreeSelectionEditor::uiEditorTypeName() );
|
||||||
|
|
||||||
this->setName( "Well Measurement" );
|
this->setName( "Well Measurement" );
|
||||||
|
|
||||||
m_minimumResultValue = cvf::UNDEFINED_DOUBLE;
|
m_minimumResultValue = cvf::UNDEFINED_DOUBLE;
|
||||||
@ -104,6 +108,8 @@ void RimWellMeasurementInView::defineUiOrdering( QString uiConfigName, caf::PdmU
|
|||||||
filterGroup.add( &m_upperBound );
|
filterGroup.add( &m_upperBound );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uiOrdering.add( &m_qualityFilter );
|
||||||
|
|
||||||
uiOrdering.skipRemainingFields();
|
uiOrdering.skipRemainingFields();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -154,6 +160,14 @@ void RimWellMeasurementInView::rangeValues( double* lowerBound, double* upperBou
|
|||||||
*upperBound = m_upperBound;
|
*upperBound = m_upperBound;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
std::vector<int> RimWellMeasurementInView::qualityFilter() const
|
||||||
|
{
|
||||||
|
return m_qualityFilter;
|
||||||
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
@ -296,6 +310,26 @@ QList<caf::PdmOptionItemInfo>
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if ( fieldNeedingOptions == &m_qualityFilter )
|
||||||
|
{
|
||||||
|
RimWellPathCollection* wellPathCollection = RimTools::wellPathCollection();
|
||||||
|
if ( wellPathCollection )
|
||||||
|
{
|
||||||
|
std::vector<RimWellMeasurement*> measurements = wellPathCollection->measurementCollection()->measurements();
|
||||||
|
|
||||||
|
// Find possible quality values for a given measurement kind
|
||||||
|
std::set<int> qualityValues;
|
||||||
|
for ( const auto& measurement : measurements )
|
||||||
|
{
|
||||||
|
if ( measurement->kind() == m_measurementKind ) qualityValues.insert( measurement->quality() );
|
||||||
|
}
|
||||||
|
|
||||||
|
for ( const auto& quality : qualityValues )
|
||||||
|
{
|
||||||
|
options.push_back( caf::PdmOptionItemInfo( QString::number( quality ), quality ) );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return options;
|
return options;
|
||||||
}
|
}
|
||||||
@ -356,3 +390,27 @@ void RimWellMeasurementInView::setAllWellsSelected()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
void RimWellMeasurementInView::setAllQualitiesSelected()
|
||||||
|
{
|
||||||
|
RimWellPathCollection* wellPathCollection = RimTools::wellPathCollection();
|
||||||
|
if ( wellPathCollection )
|
||||||
|
{
|
||||||
|
std::vector<RimWellMeasurement*> measurements = wellPathCollection->measurementCollection()->measurements();
|
||||||
|
|
||||||
|
// Find possible quality values for a given measurement kind
|
||||||
|
std::set<int> qualityValues;
|
||||||
|
for ( const auto& measurement : measurements )
|
||||||
|
{
|
||||||
|
if ( measurement->kind() == m_measurementKind ) qualityValues.insert( measurement->quality() );
|
||||||
|
}
|
||||||
|
|
||||||
|
for ( const auto& quality : qualityValues )
|
||||||
|
{
|
||||||
|
m_qualityFilter.v().push_back( quality );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -46,12 +46,14 @@ public:
|
|||||||
void setMeasurementKind( const QString& measurementKind );
|
void setMeasurementKind( const QString& measurementKind );
|
||||||
bool isWellChecked( const QString& wellName ) const;
|
bool isWellChecked( const QString& wellName ) const;
|
||||||
void setAllWellsSelected();
|
void setAllWellsSelected();
|
||||||
|
void setAllQualitiesSelected();
|
||||||
|
|
||||||
void updateLegendRangesTextAndVisibility( RiuViewer* nativeOrOverrideViewer, bool isUsingOverrideViewer );
|
void updateLegendRangesTextAndVisibility( RiuViewer* nativeOrOverrideViewer, bool isUsingOverrideViewer );
|
||||||
|
|
||||||
bool hasCategoryResult() const;
|
bool hasCategoryResult() const;
|
||||||
|
|
||||||
void rangeValues( double* lowerBound, double* upperBound ) const;
|
void rangeValues( double* lowerBound, double* upperBound ) const;
|
||||||
|
std::vector<int> qualityFilter() const;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void defineUiTreeOrdering( caf::PdmUiTreeOrdering& uiTreeOrdering, QString uiConfigName = "" ) override;
|
void defineUiTreeOrdering( caf::PdmUiTreeOrdering& uiTreeOrdering, QString uiConfigName = "" ) override;
|
||||||
@ -79,6 +81,7 @@ private:
|
|||||||
caf::PdmField<std::vector<QString>> m_wells;
|
caf::PdmField<std::vector<QString>> m_wells;
|
||||||
caf::PdmField<double> m_lowerBound;
|
caf::PdmField<double> m_lowerBound;
|
||||||
caf::PdmField<double> m_upperBound;
|
caf::PdmField<double> m_upperBound;
|
||||||
|
caf::PdmField<std::vector<int>> m_qualityFilter;
|
||||||
|
|
||||||
double m_minimumResultValue;
|
double m_minimumResultValue;
|
||||||
double m_maximumResultValue;
|
double m_maximumResultValue;
|
||||||
|
@ -135,6 +135,7 @@ void RimWellMeasurementInViewCollection::syncWithChangesInWellMeasurementCollect
|
|||||||
measurementInView->setName( kind );
|
measurementInView->setName( kind );
|
||||||
measurementInView->setMeasurementKind( kind );
|
measurementInView->setMeasurementKind( kind );
|
||||||
measurementInView->setAllWellsSelected();
|
measurementInView->setAllWellsSelected();
|
||||||
|
measurementInView->setAllQualitiesSelected();
|
||||||
|
|
||||||
m_measurementsInView.push_back( measurementInView );
|
m_measurementsInView.push_back( measurementInView );
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user