Backup of idea

This commit is contained in:
Jørgen Herje
2023-05-11 08:53:04 +02:00
parent 05a822f33a
commit 5937394b57
2 changed files with 56 additions and 30 deletions
@@ -27,6 +27,8 @@
#include <cmath> #include <cmath>
#pragma optimize( "", off )
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@@ -345,6 +347,9 @@ cvf::ref<RigWellLogCurveData> RigWellLogCurveData::calculateResampledCurveData(
return reSampledData; return reSampledData;
} }
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RigWellLogCurveData::interpolateSegment( RiaDefines::DepthTypeEnum resamplingDepthType, void RigWellLogCurveData::interpolateSegment( RiaDefines::DepthTypeEnum resamplingDepthType,
double depthValue, double depthValue,
size_t firstIndex, size_t firstIndex,
@@ -380,43 +385,27 @@ void RigWellLogCurveData::interpolateSegment( RiaDefines::DepthTypeEnum
} }
} }
bool isLeftOf( double x1, double x2, bool reverseOrder, double eps )
{
if ( reverseOrder )
{
return x1 - x2 > eps;
}
return x2 - x1 > eps;
}
bool isRightOf( double x1, double x2, bool reverseOrder, double eps )
{
return isLeftOf( x2, x1, reverseOrder, eps );
}
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
cvf::ref<RigWellLogCurveData> RigWellLogCurveData::calculateResampledCurveData( RiaDefines::DepthTypeEnum resamplingDepthType, std::pair<std::vector<double>, std::map<RiaDefines::DepthTypeEnum, std::vector<double>>>
const std::vector<double>& depths ) const RigWellLogCurveData::createResampledValuesAndDepths( RiaDefines::DepthTypeEnum resamplingDepthType,
const std::vector<double>& targetDepths,
const std::map<RiaDefines::DepthTypeEnum, std::vector<double>>& originalDepths,
const std::vector<double>& propertyValues )
{ {
const double eps = 1.0e-8; const double eps = 1.0e-8;
auto depthIt = originalDepths.find( resamplingDepthType );
if ( depthIt == originalDepths.end() || depthIt->second.empty() ) return {};
std::vector<double> xValues; std::vector<double> xValues;
std::map<RiaDefines::DepthTypeEnum, std::vector<double>> resampledDepths; std::map<RiaDefines::DepthTypeEnum, std::vector<double>> resampledDepths;
resampledDepths.insert( std::make_pair( resamplingDepthType, depths ) ); resampledDepths.insert( std::make_pair( resamplingDepthType, targetDepths ) );
auto depthIt = m_depths.find( resamplingDepthType );
cvf::ref<RigWellLogCurveData> reSampledData = new RigWellLogCurveData;
if ( depthIt == m_depths.end() || depthIt->second.empty() ) return reSampledData;
bool reverseOrder = resamplingDepthType == RiaDefines::DepthTypeEnum::CONNECTION_NUMBER; bool reverseOrder = resamplingDepthType == RiaDefines::DepthTypeEnum::CONNECTION_NUMBER;
size_t segmentSearchStartIdx = 0; size_t segmentSearchStartIdx = 0;
for ( auto depth : depths ) for ( auto depth : targetDepths )
{ {
bool foundPoint = false; bool foundPoint = false;
for ( size_t segmentStartIdx = segmentSearchStartIdx; segmentStartIdx < depthIt->second.size(); ++segmentStartIdx ) for ( size_t segmentStartIdx = segmentSearchStartIdx; segmentStartIdx < depthIt->second.size(); ++segmentStartIdx )
@@ -424,16 +413,16 @@ cvf::ref<RigWellLogCurveData> RigWellLogCurveData::calculateResampledCurveData(
if ( std::fabs( depthIt->second[segmentStartIdx] - depth ) < eps ) // already have this depth point, if ( std::fabs( depthIt->second[segmentStartIdx] - depth ) < eps ) // already have this depth point,
// reuse it // reuse it
{ {
xValues.push_back( m_propertyValues[segmentStartIdx] ); xValues.push_back( propertyValues[segmentStartIdx] );
// Copy all depth types for this segment // Copy all depth types for this segment
for ( auto depthTypeValuesPair : m_depths ) for ( const auto& depthTypeValuesPair : originalDepths )
{ {
if ( depthTypeValuesPair.first != resamplingDepthType ) if ( depthTypeValuesPair.first != resamplingDepthType )
{ {
resampledDepths[depthTypeValuesPair.first].push_back( depthTypeValuesPair.second[segmentStartIdx] ); resampledDepths[depthTypeValuesPair.first].push_back( depthTypeValuesPair.second[segmentStartIdx] );
} }
} }
segmentSearchStartIdx = segmentStartIdx + 1; segmentSearchStartIdx = segmentStartIdx; /* + 1;*/
foundPoint = true; foundPoint = true;
break; break;
} }
@@ -469,7 +458,38 @@ cvf::ref<RigWellLogCurveData> RigWellLogCurveData::calculateResampledCurveData(
CAF_ASSERT( foundPoint ); CAF_ASSERT( foundPoint );
} }
return std::make_pair( xValues, resampledDepths );
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
bool isLeftOf( double x1, double x2, bool reverseOrder, double eps )
{
if ( reverseOrder )
{
return x1 - x2 > eps;
}
return x2 - x1 > eps;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
bool isRightOf( double x1, double x2, bool reverseOrder, double eps )
{
return isLeftOf( x2, x1, reverseOrder, eps );
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
cvf::ref<RigWellLogCurveData> RigWellLogCurveData::calculateResampledCurveData( RiaDefines::DepthTypeEnum resamplingDepthType,
const std::vector<double>& depths ) const
{
const auto [xValues, resampledDepths] = createResampledValuesAndDepths( resamplingDepthType, depths, m_depths, m_propertyValues );
cvf::ref<RigWellLogCurveData> reSampledData = new RigWellLogCurveData;
reSampledData->setValuesAndDepths( xValues, resampledDepths, m_rkbDiff, m_depthUnit, true, m_useLogarithmicScale ); reSampledData->setValuesAndDepths( xValues, resampledDepths, m_rkbDiff, m_depthUnit, true, m_useLogarithmicScale );
return reSampledData; return reSampledData;
} }
@@ -89,6 +89,12 @@ public:
std::map<RiaDefines::DepthTypeEnum, std::vector<double>>& resampledDepths, std::map<RiaDefines::DepthTypeEnum, std::vector<double>>& resampledDepths,
const double eps ) const; const double eps ) const;
static std::pair<std::vector<double>, std::map<RiaDefines::DepthTypeEnum, std::vector<double>>>
createResampledValuesAndDepths( RiaDefines::DepthTypeEnum resamplingDepthType,
const std::vector<double>& targetDepths,
const std::map<RiaDefines::DepthTypeEnum, std::vector<double>>& originalDepths,
const std::vector<double>& propertyValues );
private: private:
void calculateIntervalsOfContinousValidValues(); void calculateIntervalsOfContinousValidValues();