///////////////////////////////////////////////////////////////////////////////// // // 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 // for more details. // ///////////////////////////////////////////////////////////////////////////////// #include "RimWellMeasurementFilter.h" #include "RimWellMeasurement.h" #include "RimWellMeasurementCollection.h" #include "RimWellPath.h" #include "RimWellPathCollection.h" #include //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- std::vector RimWellMeasurementFilter::filterMeasurements( const std::vector& measurements, const RimWellPathCollection& wellPathCollection, const RimWellPath& wellPath, const std::vector& measurementKinds ) { std::vector filteredMeasurementsByKinds = filterMeasurements( measurements, measurementKinds ); std::vector filteredMeasurements; for ( auto& measurement : filteredMeasurementsByKinds ) { RimWellPath* matchedWellPath = wellPathCollection.tryFindMatchingWellPath( measurement->wellName() ); if ( matchedWellPath && matchedWellPath == &wellPath ) { filteredMeasurements.push_back( measurement ); } } return filteredMeasurements; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- std::vector RimWellMeasurementFilter::filterMeasurements( const std::vector& measurements, const RimWellPathCollection& wellPathCollection, const RimWellPath& wellPath, const std::vector& measurementKinds, double lowerBound, double upperBound, const std::vector& qualityFilter ) { std::vector filteredMeasurementsByKindsAndWellPath = filterMeasurements( measurements, wellPathCollection, wellPath, measurementKinds ); std::vector filteredMeasurements; for ( auto& measurement : filteredMeasurementsByKindsAndWellPath ) { if ( RimWellMeasurementFilter::isInsideRange( measurement->value(), lowerBound, upperBound ) && RimWellMeasurementFilter::hasQuality( measurement->quality(), qualityFilter ) ) { filteredMeasurements.push_back( measurement ); } } return filteredMeasurements; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- std::vector RimWellMeasurementFilter::filterMeasurements( const std::vector& measurements, const std::vector& measurementKinds ) { std::vector filteredMeasurements; for ( auto& measurement : measurements ) { if ( std::find( measurementKinds.begin(), measurementKinds.end(), measurement->kind() ) != measurementKinds.end() ) { filteredMeasurements.push_back( measurement ); } } return filteredMeasurements; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- bool RimWellMeasurementFilter::isInsideRange( double value, double lowerBound, double upperBound ) { // Invalid range: everything is inside if ( lowerBound == std::numeric_limits::infinity() || std::numeric_limits::infinity() == upperBound ) { return true; } if ( lowerBound <= value && value <= upperBound ) { return true; } return false; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- bool RimWellMeasurementFilter::hasQuality( int quality, const std::vector& qualityFilter ) { return std::find( qualityFilter.begin(), qualityFilter.end(), quality ) != qualityFilter.end(); }