mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
#1035 Adjusted the statistics calculators a bit.
This commit is contained in:
parent
8f145da725
commit
3c55a86650
@ -21,16 +21,13 @@
|
|||||||
|
|
||||||
#include "RigStatisticsCalculator.h"
|
#include "RigStatisticsCalculator.h"
|
||||||
|
|
||||||
#include "cvfBase.h"
|
|
||||||
#include "cvfObject.h"
|
|
||||||
#include "cvfCollection.h"
|
|
||||||
|
|
||||||
class RigHistogramCalculator;
|
class RigHistogramCalculator;
|
||||||
class RigCaseCellResultsData;
|
class RigCaseCellResultsData;
|
||||||
|
|
||||||
//==================================================================================================
|
//==================================================================================================
|
||||||
///
|
///
|
||||||
//==================================================================================================
|
//==================================================================================================
|
||||||
|
|
||||||
class RigEclipseNativeStatCalc : public RigStatisticsCalculator
|
class RigEclipseNativeStatCalc : public RigStatisticsCalculator
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -38,13 +35,9 @@ public:
|
|||||||
|
|
||||||
virtual void minMaxCellScalarValues(size_t timeStepIndex, double& min, double& max);
|
virtual void minMaxCellScalarValues(size_t timeStepIndex, double& min, double& max);
|
||||||
virtual void posNegClosestToZero(size_t timeStepIndex, double& pos, double& neg);
|
virtual void posNegClosestToZero(size_t timeStepIndex, double& pos, double& neg);
|
||||||
|
|
||||||
virtual void valueSumAndSampleCount(size_t timeStepIndex, double& valueSum, size_t& sampleCount);
|
virtual void valueSumAndSampleCount(size_t timeStepIndex, double& valueSum, size_t& sampleCount);
|
||||||
|
|
||||||
virtual void addDataToHistogramCalculator(size_t timeStepIndex, RigHistogramCalculator& histogramCalculator);
|
virtual void addDataToHistogramCalculator(size_t timeStepIndex, RigHistogramCalculator& histogramCalculator);
|
||||||
|
|
||||||
virtual void uniqueValues(size_t timeStepIndex, std::set<int>& values);
|
virtual void uniqueValues(size_t timeStepIndex, std::set<int>& values);
|
||||||
|
|
||||||
virtual size_t timeStepCount();
|
virtual size_t timeStepCount();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -262,7 +262,17 @@ const std::vector<int>& RigStatisticsDataCache::uniqueCellScalarValues()
|
|||||||
{
|
{
|
||||||
computeUniqueValuesIfNeeded();
|
computeUniqueValuesIfNeeded();
|
||||||
|
|
||||||
return m_uniqueValues;
|
return m_statsAllTimesteps.m_uniqueValues;
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
const std::vector<int>& RigStatisticsDataCache::uniqueCellScalarValues(size_t timeStepIndex)
|
||||||
|
{
|
||||||
|
computeUniqueValuesIfNeeded(timeStepIndex);
|
||||||
|
|
||||||
|
return m_statsPrTs[timeStepIndex].m_uniqueValues;
|
||||||
}
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
@ -334,15 +344,31 @@ void RigStatisticsDataCache::computeHistogramStatisticsIfNeeded(size_t timeStepI
|
|||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
void RigStatisticsDataCache::computeUniqueValuesIfNeeded()
|
void RigStatisticsDataCache::computeUniqueValuesIfNeeded()
|
||||||
{
|
{
|
||||||
if (m_uniqueValues.size() == 0)
|
if (m_statsAllTimesteps.m_uniqueValues.size() == 0)
|
||||||
{
|
{
|
||||||
std::set<int> setValues;
|
std::set<int> setValues;
|
||||||
m_statisticsCalculator->uniqueValues(0, setValues);
|
m_statisticsCalculator->uniqueValues(0, setValues); // This is a Hack ! Only using first timestep. Ok for Static eclipse results but beware !
|
||||||
|
|
||||||
for (auto val : setValues)
|
for (auto val : setValues)
|
||||||
{
|
{
|
||||||
m_uniqueValues.push_back(val);
|
m_statsAllTimesteps.m_uniqueValues.push_back(val);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
void RigStatisticsDataCache::computeUniqueValuesIfNeeded(size_t timeStepIndex)
|
||||||
|
{
|
||||||
|
if ( m_statsPrTs[timeStepIndex].m_uniqueValues.size() == 0 )
|
||||||
|
{
|
||||||
|
std::set<int> setValues;
|
||||||
|
m_statisticsCalculator->uniqueValues(timeStepIndex, setValues);
|
||||||
|
|
||||||
|
for ( auto val : setValues )
|
||||||
|
{
|
||||||
|
m_statsPrTs[timeStepIndex].m_uniqueValues.push_back(val);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -56,12 +56,14 @@ public:
|
|||||||
const std::vector<size_t>& cellScalarValuesHistogram(size_t timeStepIndex);
|
const std::vector<size_t>& cellScalarValuesHistogram(size_t timeStepIndex);
|
||||||
|
|
||||||
const std::vector<int>& uniqueCellScalarValues();
|
const std::vector<int>& uniqueCellScalarValues();
|
||||||
|
const std::vector<int>& uniqueCellScalarValues(size_t timeStepIndex);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void computeHistogramStatisticsIfNeeded();
|
void computeHistogramStatisticsIfNeeded();
|
||||||
void computeHistogramStatisticsIfNeeded(size_t timeStepIndex);
|
void computeHistogramStatisticsIfNeeded(size_t timeStepIndex);
|
||||||
|
|
||||||
void computeUniqueValuesIfNeeded();
|
void computeUniqueValuesIfNeeded();
|
||||||
|
void computeUniqueValuesIfNeeded(size_t timeStepIndex);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
struct StatisticsValues
|
struct StatisticsValues
|
||||||
@ -100,11 +102,12 @@ private:
|
|||||||
bool m_isValueSumCalculated;
|
bool m_isValueSumCalculated;
|
||||||
|
|
||||||
std::vector<size_t> m_histogram;
|
std::vector<size_t> m_histogram;
|
||||||
|
std::vector<int> m_uniqueValues;
|
||||||
};
|
};
|
||||||
|
|
||||||
StatisticsValues m_statsAllTimesteps;
|
StatisticsValues m_statsAllTimesteps;
|
||||||
std::vector<StatisticsValues> m_statsPrTs;
|
std::vector<StatisticsValues> m_statsPrTs;
|
||||||
std::vector<int> m_uniqueValues;
|
|
||||||
|
|
||||||
cvf::ref<RigStatisticsCalculator> m_statisticsCalculator;
|
cvf::ref<RigStatisticsCalculator> m_statisticsCalculator;
|
||||||
};
|
};
|
||||||
|
@ -62,7 +62,24 @@ private:
|
|||||||
class MinMaxAccumulator
|
class MinMaxAccumulator
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
MinMaxAccumulator(double initMin, double initMax): max(initMax), min(initMin) {}
|
MinMaxAccumulator(double initMin = -HUGE_VAL, double initMax = HUGE_VAL): max(initMax), min(initMin) {}
|
||||||
|
|
||||||
|
void addData(const std::vector<double>& values)
|
||||||
|
{
|
||||||
|
for ( double val : values )
|
||||||
|
{
|
||||||
|
addValue(val);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void addData(const std::vector<float>& values)
|
||||||
|
{
|
||||||
|
for ( float val : values )
|
||||||
|
{
|
||||||
|
addValue(val);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void addValue(double value)
|
void addValue(double value)
|
||||||
{
|
{
|
||||||
if (value == HUGE_VAL) // TODO
|
if (value == HUGE_VAL) // TODO
|
||||||
@ -89,7 +106,24 @@ public:
|
|||||||
class PosNegAccumulator
|
class PosNegAccumulator
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
PosNegAccumulator(double initPos, double initNeg): pos(initPos), neg(initNeg) {}
|
PosNegAccumulator(double initPos = HUGE_VAL, double initNeg = -HUGE_VAL): pos(initPos), neg(initNeg) {}
|
||||||
|
|
||||||
|
void addData(const std::vector<double>& values)
|
||||||
|
{
|
||||||
|
for (double val : values)
|
||||||
|
{
|
||||||
|
addValue(val);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void addData(const std::vector<float>& values)
|
||||||
|
{
|
||||||
|
for ( float val : values )
|
||||||
|
{
|
||||||
|
addValue(val);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void addValue(double value)
|
void addValue(double value)
|
||||||
{
|
{
|
||||||
if (value == HUGE_VAL)
|
if (value == HUGE_VAL)
|
||||||
@ -116,7 +150,23 @@ public:
|
|||||||
class SumCountAccumulator
|
class SumCountAccumulator
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
SumCountAccumulator(double initSum, size_t initCount): valueSum(initSum), sampleCount(initCount) {}
|
SumCountAccumulator(double initSum = 0.0, size_t initCount = 0): valueSum(initSum), sampleCount(initCount) {}
|
||||||
|
|
||||||
|
void addData(const std::vector<double>& values)
|
||||||
|
{
|
||||||
|
for ( double val : values )
|
||||||
|
{
|
||||||
|
addValue(val);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void addData(const std::vector<float>& values)
|
||||||
|
{
|
||||||
|
for ( float val : values )
|
||||||
|
{
|
||||||
|
addValue(val);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void addValue(double value)
|
void addValue(double value)
|
||||||
{
|
{
|
||||||
@ -140,6 +190,22 @@ public:
|
|||||||
UniqueValueAccumulator()
|
UniqueValueAccumulator()
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
void addData(const std::vector<double>& values)
|
||||||
|
{
|
||||||
|
for ( double val : values )
|
||||||
|
{
|
||||||
|
addValue(val);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void addData(const std::vector<float>& values)
|
||||||
|
{
|
||||||
|
for ( float val : values )
|
||||||
|
{
|
||||||
|
addValue(val);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void addValue(double value)
|
void addValue(double value)
|
||||||
{
|
{
|
||||||
uniqueValues.insert(static_cast<int>(value));
|
uniqueValues.insert(static_cast<int>(value));
|
||||||
|
Loading…
Reference in New Issue
Block a user