mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
Refactoring to access pr timestep data from the statistics calculation.
This commit is contained in:
@@ -92,53 +92,48 @@ void RigFemNativeStatCalc::posNegClosestToZero(size_t timeStepIndex, double& pos
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
void RigFemNativeStatCalc::valueSumAndSampleCount(double& valueSum, size_t& sampleCount)
|
void RigFemNativeStatCalc::valueSumAndSampleCount(size_t timeStepIndex, double& valueSum, size_t& sampleCount)
|
||||||
{
|
{
|
||||||
int timestepCount = (int)(this->timeStepCount());
|
int tsIdx = static_cast<int>(timeStepIndex);
|
||||||
int partCount = static_cast<int>(m_resultsData->m_femPartResults.size());
|
int partCount = static_cast<int>(m_resultsData->m_femPartResults.size());
|
||||||
|
|
||||||
for (int pIdx = 0; pIdx < partCount; ++pIdx)
|
for (int pIdx = 0; pIdx < partCount; ++pIdx)
|
||||||
{
|
{
|
||||||
for (int tIdx = 0; tIdx < timestepCount; tIdx++)
|
const std::vector<float>& values = m_resultsData->resultValues(m_resVarAddr, pIdx, tsIdx);
|
||||||
{
|
size_t undefValueCount = 0;
|
||||||
const std::vector<float>& values = m_resultsData->resultValues(m_resVarAddr, pIdx, tIdx);
|
for (size_t cIdx = 0; cIdx < values.size(); ++cIdx)
|
||||||
size_t undefValueCount = 0;
|
{
|
||||||
for (size_t cIdx = 0; cIdx < values.size(); ++cIdx)
|
double value = values[cIdx];
|
||||||
{
|
if (value == HUGE_VAL || value != value)
|
||||||
double value = values[cIdx];
|
{
|
||||||
if (value == HUGE_VAL || value != value)
|
++undefValueCount;
|
||||||
{
|
continue;
|
||||||
++undefValueCount;
|
}
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
valueSum += value;
|
valueSum += value;
|
||||||
}
|
}
|
||||||
|
|
||||||
sampleCount += values.size();
|
sampleCount += values.size();
|
||||||
sampleCount -= undefValueCount;
|
sampleCount -= undefValueCount;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
void RigFemNativeStatCalc::addDataToHistogramCalculator(RigHistogramCalculator& histogramCalculator)
|
void RigFemNativeStatCalc::addDataToHistogramCalculator(size_t timeStepIndex, RigHistogramCalculator& histogramCalculator)
|
||||||
{
|
{
|
||||||
int timestepCount = (int)(this->timeStepCount());
|
|
||||||
int partCount = static_cast<int>(m_resultsData->m_femPartResults.size());
|
int partCount = static_cast<int>(m_resultsData->m_femPartResults.size());
|
||||||
for (int pIdx = 0; pIdx < partCount; ++pIdx)
|
for (int pIdx = 0; pIdx < partCount; ++pIdx)
|
||||||
{
|
{
|
||||||
for (int tIdx = 0; tIdx < timestepCount; tIdx++)
|
const std::vector<float>& values = m_resultsData->resultValues(m_resVarAddr, pIdx, static_cast<int>(timeStepIndex));
|
||||||
{
|
|
||||||
const std::vector<float>& values = m_resultsData->resultValues(m_resVarAddr, pIdx, tIdx);
|
|
||||||
|
|
||||||
histogramCalculator.addData(values);
|
histogramCalculator.addData(values);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -37,9 +37,11 @@ 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(double& valueSum, size_t& sampleCount);
|
|
||||||
|
|
||||||
virtual void addDataToHistogramCalculator(RigHistogramCalculator& histogramCalculator);
|
virtual void valueSumAndSampleCount(size_t timeStepIndex, double& valueSum, size_t& sampleCount);
|
||||||
|
|
||||||
|
virtual void addDataToHistogramCalculator(size_t timeStepIndex, RigHistogramCalculator& histogramCalculator);
|
||||||
|
|
||||||
virtual size_t timeStepCount();
|
virtual size_t timeStepCount();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|||||||
@@ -41,7 +41,37 @@
|
|||||||
#include "RigFemResultAddress.h"
|
#include "RigFemResultAddress.h"
|
||||||
#include "RigFemPartResultsCollection.h"
|
#include "RigFemPartResultsCollection.h"
|
||||||
|
|
||||||
|
#include "RigStatisticsDataCache.h"
|
||||||
|
|
||||||
CAF_PDM_SOURCE_INIT(Rim3dOverlayInfoConfig, "View3dOverlayInfoConfig");
|
CAF_PDM_SOURCE_INIT(Rim3dOverlayInfoConfig, "View3dOverlayInfoConfig");
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
namespace caf
|
||||||
|
{
|
||||||
|
template<>
|
||||||
|
void caf::AppEnum<Rim3dOverlayInfoConfig::StatisticsTimeRangeType>::setUp()
|
||||||
|
{
|
||||||
|
addItem(Rim3dOverlayInfoConfig::ALL_TIMESTEPS, "ALL_TIMESTEPS", "All Time Steps");
|
||||||
|
addItem(Rim3dOverlayInfoConfig::CURRENT_TIMESTEP, "CURRENT_TIMESTEP", "Current Time Step");
|
||||||
|
setDefault(Rim3dOverlayInfoConfig::ALL_TIMESTEPS);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
namespace caf
|
||||||
|
{
|
||||||
|
template<>
|
||||||
|
void caf::AppEnum<Rim3dOverlayInfoConfig::StatisticsCellRangeType>::setUp()
|
||||||
|
{
|
||||||
|
addItem(Rim3dOverlayInfoConfig::ALL_CELLS, "ALL_CELLS", "All Active Cells");
|
||||||
|
addItem(Rim3dOverlayInfoConfig::VISIBLE_CELLS, "VISIBLE_CELLS", "Visible Cells");
|
||||||
|
setDefault(Rim3dOverlayInfoConfig::ALL_CELLS);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
@@ -56,6 +86,9 @@ Rim3dOverlayInfoConfig::Rim3dOverlayInfoConfig()
|
|||||||
CAF_PDM_InitField(&showInfoText, "ShowInfoText", true, "Info Text", "", "", "");
|
CAF_PDM_InitField(&showInfoText, "ShowInfoText", true, "Info Text", "", "", "");
|
||||||
CAF_PDM_InitField(&showAnimProgress, "ShowAnimProgress", true, "Animation progress", "", "", "");
|
CAF_PDM_InitField(&showAnimProgress, "ShowAnimProgress", true, "Animation progress", "", "", "");
|
||||||
CAF_PDM_InitField(&showHistogram, "ShowHistogram", true, "Histogram", "", "", "");
|
CAF_PDM_InitField(&showHistogram, "ShowHistogram", true, "Histogram", "", "", "");
|
||||||
|
|
||||||
|
CAF_PDM_InitFieldNoDefault(&m_statisticsTimeRange, "StatisticsTimeRange", "Statistics Time Range", "", "", "");
|
||||||
|
CAF_PDM_InitFieldNoDefault(&m_statisticsCellRange, "StatisticsCellRange", "Statistics Cell Range", "", "", "");
|
||||||
}
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
@@ -111,7 +144,7 @@ void Rim3dOverlayInfoConfig::update3DInfo()
|
|||||||
m_viewDef->viewer()->showAnimationProgress(showAnimProgress());
|
m_viewDef->viewer()->showAnimationProgress(showAnimProgress());
|
||||||
|
|
||||||
RimEclipseView * reservoirView = dynamic_cast<RimEclipseView*>(m_viewDef.p());
|
RimEclipseView * reservoirView = dynamic_cast<RimEclipseView*>(m_viewDef.p());
|
||||||
if (reservoirView) updateReservoir3DInfo(reservoirView);
|
if (reservoirView) updateEclipse3DInfo(reservoirView);
|
||||||
RimGeoMechView * geoMechView = dynamic_cast<RimGeoMechView*>(m_viewDef.p());
|
RimGeoMechView * geoMechView = dynamic_cast<RimGeoMechView*>(m_viewDef.p());
|
||||||
if (geoMechView) updateGeoMech3DInfo(geoMechView);
|
if (geoMechView) updateGeoMech3DInfo(geoMechView);
|
||||||
}
|
}
|
||||||
@@ -135,7 +168,7 @@ void Rim3dOverlayInfoConfig::setReservoirView(RimView* ownerReservoirView)
|
|||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
void Rim3dOverlayInfoConfig::updateReservoir3DInfo(RimEclipseView * reservoirView)
|
void Rim3dOverlayInfoConfig::updateEclipse3DInfo(RimEclipseView * reservoirView)
|
||||||
{
|
{
|
||||||
if (showInfoText())
|
if (showInfoText())
|
||||||
{
|
{
|
||||||
@@ -183,19 +216,38 @@ void Rim3dOverlayInfoConfig::updateReservoir3DInfo(RimEclipseView * reservoirVie
|
|||||||
if (reservoirView->hasUserRequestedAnimation() && reservoirView->cellResult()->hasResult())
|
if (reservoirView->hasUserRequestedAnimation() && reservoirView->cellResult()->hasResult())
|
||||||
{
|
{
|
||||||
infoText += QString("<b>Cell Property:</b> %1 ").arg(propName);
|
infoText += QString("<b>Cell Property:</b> %1 ").arg(propName);
|
||||||
|
// Wait until regression tests confirm new statisticks is ok infoText += QString("<br>Statistics for: ") + m_statisticsTimeRange().uiText() + " and " + m_statisticsCellRange().uiText();
|
||||||
|
|
||||||
double min, max;
|
if (m_statisticsCellRange == ALL_CELLS)
|
||||||
double p10, p90;
|
{
|
||||||
double mean;
|
double min, max;
|
||||||
size_t scalarIndex = reservoirView->cellResult()->scalarResultIndex();
|
double p10, p90;
|
||||||
reservoirView->currentGridCellResults()->cellResults()->minMaxCellScalarValues(scalarIndex, min, max);
|
double mean;
|
||||||
reservoirView->currentGridCellResults()->cellResults()->p10p90CellScalarValues(scalarIndex, p10, p90);
|
|
||||||
reservoirView->currentGridCellResults()->cellResults()->meanCellScalarValues(scalarIndex, mean);
|
size_t scalarIndex = reservoirView->cellResult()->scalarResultIndex();
|
||||||
|
|
||||||
//infoText += QString("<blockquote><b>Min:</b> %1 <b>P10:</b> %2 <b>Mean:</b> %3 <b>P90:</b> %4 <b>Max:</b> %5 </blockquote>").arg(min).arg(p10).arg(mean).arg(p90).arg(max);
|
if (m_statisticsTimeRange == ALL_TIMESTEPS)
|
||||||
//infoText += QString("<blockquote><pre>Min: %1 P10: %2 Mean: %3 \n P90: %4 Max: %5 </pre></blockquote>").arg(min).arg(p10).arg(mean).arg(p90).arg(max);
|
{
|
||||||
infoText += QString("<table border=0 cellspacing=5 ><tr><td>Min</td><td>P10</td> <td>Mean</td> <td>P90</td> <td>Max</td> </tr>"
|
reservoirView->currentGridCellResults()->cellResults()->minMaxCellScalarValues(scalarIndex, min, max);
|
||||||
"<tr><td>%1</td><td> %2</td><td> %3</td><td> %4</td><td> %5 </td></tr></table>").arg(min).arg(p10).arg(mean).arg(p90).arg(max);
|
reservoirView->currentGridCellResults()->cellResults()->p10p90CellScalarValues(scalarIndex, p10, p90);
|
||||||
|
reservoirView->currentGridCellResults()->cellResults()->meanCellScalarValues(scalarIndex, mean);
|
||||||
|
}
|
||||||
|
else if (m_statisticsTimeRange == CURRENT_TIMESTEP)
|
||||||
|
{
|
||||||
|
int timeStepIdx = reservoirView->currentTimeStep();
|
||||||
|
reservoirView->currentGridCellResults()->cellResults()->minMaxCellScalarValues(scalarIndex, timeStepIdx, min, max);
|
||||||
|
//reservoirView->currentGridCellResults()->cellResults()->p10p90CellScalarValues(scalarIndex, timeStepIdx, p10, p90);
|
||||||
|
//reservoirView->currentGridCellResults()->cellResults()->meanCellScalarValues(scalarIndex, timeStepIdx, mean);
|
||||||
|
p10 = HUGE_VAL;
|
||||||
|
p90 = HUGE_VAL;
|
||||||
|
mean = HUGE_VAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
infoText += QString("<table border=0 cellspacing=5 >"
|
||||||
|
"<tr> <td>Min</td> <td>P10</td> <td>Mean</td> <td>P90</td> <td>Max</td> </tr>"
|
||||||
|
"<tr> <td>%1</td> <td> %2</td> <td> %3</td> <td> %4</td> <td> %5 </td></tr>"
|
||||||
|
"</table>").arg(min).arg(p10).arg(mean).arg(p90).arg(max);
|
||||||
|
}
|
||||||
|
|
||||||
if (reservoirView->faultResultSettings()->hasValidCustomResult())
|
if (reservoirView->faultResultSettings()->hasValidCustomResult())
|
||||||
{
|
{
|
||||||
@@ -257,6 +309,8 @@ void Rim3dOverlayInfoConfig::updateReservoir3DInfo(RimEclipseView * reservoirVie
|
|||||||
{
|
{
|
||||||
if (reservoirView->hasUserRequestedAnimation() && reservoirView->cellResult()->hasResult())
|
if (reservoirView->hasUserRequestedAnimation() && reservoirView->cellResult()->hasResult())
|
||||||
{
|
{
|
||||||
|
if (m_statisticsCellRange == ALL_CELLS && m_statisticsTimeRange == ALL_TIMESTEPS)
|
||||||
|
{
|
||||||
double min, max;
|
double min, max;
|
||||||
double p10, p90;
|
double p10, p90;
|
||||||
double mean;
|
double mean;
|
||||||
@@ -269,6 +323,7 @@ void Rim3dOverlayInfoConfig::updateReservoir3DInfo(RimEclipseView * reservoirVie
|
|||||||
reservoirView->viewer()->showHistogram(true);
|
reservoirView->viewer()->showHistogram(true);
|
||||||
reservoirView->viewer()->setHistogram(min, max, reservoirView->currentGridCellResults()->cellResults()->cellScalarValuesHistogram(scalarIndex));
|
reservoirView->viewer()->setHistogram(min, max, reservoirView->currentGridCellResults()->cellResults()->cellScalarValuesHistogram(scalarIndex));
|
||||||
reservoirView->viewer()->setHistogramPercentiles(p10, p90, mean);
|
reservoirView->viewer()->setHistogramPercentiles(p10, p90, mean);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -322,8 +377,7 @@ void Rim3dOverlayInfoConfig::updateGeoMech3DInfo(RimGeoMechView * geoMechView)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
infoText += QString(
|
infoText += QString("<b>Cell result:</b> %1, %2, %3").arg(resultPos).arg(fieldName).arg(compName);
|
||||||
"<b>Cell result:</b> %1, %2, %3").arg(resultPos).arg(fieldName).arg(compName);
|
|
||||||
|
|
||||||
double min = 0, max = 0;
|
double min = 0, max = 0;
|
||||||
double p10 = 0, p90 = 0;
|
double p10 = 0, p90 = 0;
|
||||||
@@ -332,13 +386,12 @@ void Rim3dOverlayInfoConfig::updateGeoMech3DInfo(RimGeoMechView * geoMechView)
|
|||||||
RigFemResultAddress resAddress = geoMechView->cellResult()->resultAddress();
|
RigFemResultAddress resAddress = geoMechView->cellResult()->resultAddress();
|
||||||
caseData->femPartResults()->meanScalarValue(resAddress, &mean);
|
caseData->femPartResults()->meanScalarValue(resAddress, &mean);
|
||||||
caseData->femPartResults()->minMaxScalarValues(resAddress,&min, &max);
|
caseData->femPartResults()->minMaxScalarValues(resAddress,&min, &max);
|
||||||
|
|
||||||
// ToDo: Implement statistics for geomech data
|
|
||||||
|
|
||||||
caseData->femPartResults()->p10p90ScalarValues(resAddress, &p10, &p90);
|
caseData->femPartResults()->p10p90ScalarValues(resAddress, &p10, &p90);
|
||||||
|
|
||||||
infoText += QString("<table border=0 cellspacing=5 ><tr><td>Min</td><td>P10</td> <td>Mean</td> <td>P90</td> <td>Max</td> </tr>"
|
infoText += QString("<table border=0 cellspacing=5 >"
|
||||||
"<tr><td>%1</td><td> %2</td><td> %3</td><td> %4</td><td> %5 </td></tr></table>").arg(min).arg(p10).arg(mean).arg(p90).arg(max);
|
"<tr> <td>Min</td> <td>P10</td> <td>Mean</td> <td>P90</td> <td>Max</td> </tr>"
|
||||||
|
"<tr> <td>%1</td> <td> %2</td> <td> %3</td> <td> %4</td> <td> %5</td> </tr>"
|
||||||
|
"</table>").arg(min).arg(p10).arg(mean).arg(p90).arg(max);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -24,12 +24,14 @@
|
|||||||
#include "cafAppEnum.h"
|
#include "cafAppEnum.h"
|
||||||
|
|
||||||
#include "cvfAssert.h"
|
#include "cvfAssert.h"
|
||||||
|
#include "cvfObject.h"
|
||||||
|
|
||||||
#include "cvfVector2.h"
|
#include "cvfVector2.h"
|
||||||
|
|
||||||
class RimEclipseView;
|
class RimEclipseView;
|
||||||
class RimGeoMechView;
|
class RimGeoMechView;
|
||||||
class RimView;
|
class RimView;
|
||||||
|
class RigStatisticsDataCache;
|
||||||
|
|
||||||
//==================================================================================================
|
//==================================================================================================
|
||||||
///
|
///
|
||||||
@@ -51,18 +53,34 @@ public:
|
|||||||
caf::PdmField<bool> showInfoText;
|
caf::PdmField<bool> showInfoText;
|
||||||
caf::PdmField<bool> showAnimProgress;
|
caf::PdmField<bool> showAnimProgress;
|
||||||
caf::PdmField<bool> showHistogram;
|
caf::PdmField<bool> showHistogram;
|
||||||
|
|
||||||
|
enum StatisticsTimeRangeType
|
||||||
|
{
|
||||||
|
ALL_TIMESTEPS,
|
||||||
|
CURRENT_TIMESTEP
|
||||||
|
};
|
||||||
|
|
||||||
|
enum StatisticsCellRangeType
|
||||||
|
{
|
||||||
|
ALL_CELLS,
|
||||||
|
VISIBLE_CELLS
|
||||||
|
};
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue);
|
virtual void fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue);
|
||||||
virtual caf::PdmFieldHandle* objectToggleField();
|
virtual caf::PdmFieldHandle* objectToggleField();
|
||||||
private:
|
private:
|
||||||
|
|
||||||
void updateReservoir3DInfo(RimEclipseView * reservoirView);
|
void updateEclipse3DInfo(RimEclipseView * reservoirView);
|
||||||
void updateGeoMech3DInfo(RimGeoMechView * geoMechView);
|
void updateGeoMech3DInfo(RimGeoMechView * geoMechView);
|
||||||
|
|
||||||
|
caf::PdmField<caf::AppEnum<StatisticsTimeRangeType> > m_statisticsTimeRange;
|
||||||
|
caf::PdmField<caf::AppEnum<StatisticsCellRangeType> > m_statisticsCellRange;
|
||||||
|
|
||||||
caf::PdmPointer<RimView> m_viewDef;
|
caf::PdmPointer<RimView> m_viewDef;
|
||||||
|
|
||||||
cvf::Vec2ui m_position;
|
cvf::Vec2ui m_position;
|
||||||
|
|
||||||
|
cvf::ref<RigStatisticsDataCache> m_visibleCellStatistics;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -67,30 +67,32 @@ void RigMultipleDatasetStatCalc::posNegClosestToZero(size_t timeStepIndex, doubl
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
|
||||||
///
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
|
||||||
void RigMultipleDatasetStatCalc::valueSumAndSampleCount(double& valueSum, size_t& sampleCount)
|
|
||||||
{
|
|
||||||
for (size_t i = 0; i < m_nativeStatisticsCalculators.size(); i++)
|
|
||||||
{
|
|
||||||
if (m_nativeStatisticsCalculators.at(i))
|
|
||||||
{
|
|
||||||
m_nativeStatisticsCalculators.at(i)->valueSumAndSampleCount(valueSum, sampleCount);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
void RigMultipleDatasetStatCalc::addDataToHistogramCalculator(RigHistogramCalculator& histogramCalculator)
|
void RigMultipleDatasetStatCalc::valueSumAndSampleCount(size_t timeStepIndex, double& valueSum, size_t& sampleCount)
|
||||||
{
|
{
|
||||||
for (size_t i = 0; i < m_nativeStatisticsCalculators.size(); i++)
|
for (size_t i = 0; i < m_nativeStatisticsCalculators.size(); i++)
|
||||||
{
|
{
|
||||||
if (m_nativeStatisticsCalculators.at(i))
|
if (m_nativeStatisticsCalculators.at(i))
|
||||||
{
|
{
|
||||||
m_nativeStatisticsCalculators.at(i)->addDataToHistogramCalculator(histogramCalculator);
|
m_nativeStatisticsCalculators.at(i)->valueSumAndSampleCount(timeStepIndex, valueSum, sampleCount);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
void RigMultipleDatasetStatCalc::addDataToHistogramCalculator(size_t timeStepIndex, RigHistogramCalculator& histogramCalculator)
|
||||||
|
{
|
||||||
|
for (size_t i = 0; i < m_nativeStatisticsCalculators.size(); i++)
|
||||||
|
{
|
||||||
|
if (m_nativeStatisticsCalculators.at(i))
|
||||||
|
{
|
||||||
|
m_nativeStatisticsCalculators.at(i)->addDataToHistogramCalculator(timeStepIndex, histogramCalculator);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -44,8 +44,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(double& valueSum, size_t& sampleCount);
|
virtual void valueSumAndSampleCount(size_t timeStepIndex, double& valueSum, size_t& sampleCount);
|
||||||
virtual void addDataToHistogramCalculator(RigHistogramCalculator& histogramCalculator);
|
|
||||||
|
virtual void addDataToHistogramCalculator(size_t timeStepIndex, RigHistogramCalculator& histogramCalculator);
|
||||||
|
|
||||||
virtual size_t timeStepCount();
|
virtual size_t timeStepCount();
|
||||||
|
|
||||||
|
|||||||
@@ -94,40 +94,36 @@ void RigNativeStatCalc::posNegClosestToZero(size_t timeStepIndex, double& pos, d
|
|||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
void RigNativeStatCalc::addDataToHistogramCalculator(RigHistogramCalculator& histogramCalculator)
|
void RigNativeStatCalc::addDataToHistogramCalculator(size_t timeStepIndex, RigHistogramCalculator& histogramCalculator)
|
||||||
{
|
{
|
||||||
for (size_t tIdx = 0; tIdx < m_resultsData->timeStepCount(m_scalarResultIndex); tIdx++)
|
std::vector<double>& values = m_resultsData->cellScalarResults(m_scalarResultIndex, timeStepIndex);
|
||||||
{
|
|
||||||
std::vector<double>& values = m_resultsData->cellScalarResults(m_scalarResultIndex, tIdx);
|
|
||||||
|
|
||||||
histogramCalculator.addData(values);
|
histogramCalculator.addData(values);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
void RigNativeStatCalc::valueSumAndSampleCount(double& valueSum, size_t& sampleCount)
|
void RigNativeStatCalc::valueSumAndSampleCount(size_t timeStepIndex, double& valueSum, size_t& sampleCount)
|
||||||
{
|
{
|
||||||
for (size_t tIdx = 0; tIdx < m_resultsData->timeStepCount(m_scalarResultIndex); tIdx++)
|
std::vector<double>& values = m_resultsData->cellScalarResults(m_scalarResultIndex, timeStepIndex);
|
||||||
|
size_t undefValueCount = 0;
|
||||||
|
for (size_t cIdx = 0; cIdx < values.size(); ++cIdx)
|
||||||
{
|
{
|
||||||
std::vector<double>& values = m_resultsData->cellScalarResults(m_scalarResultIndex, tIdx);
|
double value = values[cIdx];
|
||||||
size_t undefValueCount = 0;
|
if (value == HUGE_VAL || value != value)
|
||||||
for (size_t cIdx = 0; cIdx < values.size(); ++cIdx)
|
|
||||||
{
|
{
|
||||||
double value = values[cIdx];
|
++undefValueCount;
|
||||||
if (value == HUGE_VAL || value != value)
|
continue;
|
||||||
{
|
|
||||||
++undefValueCount;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
valueSum += value;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sampleCount += values.size();
|
valueSum += value;
|
||||||
sampleCount -= undefValueCount;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sampleCount += values.size();
|
||||||
|
sampleCount -= undefValueCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
|||||||
@@ -38,9 +38,11 @@ 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(double& valueSum, size_t& sampleCount);
|
|
||||||
|
|
||||||
virtual void addDataToHistogramCalculator(RigHistogramCalculator& histogramCalculator);
|
virtual void valueSumAndSampleCount(size_t timeStepIndex, double& valueSum, size_t& sampleCount);
|
||||||
|
|
||||||
|
virtual void addDataToHistogramCalculator(size_t timeStepIndex, RigHistogramCalculator& histogramCalculator);
|
||||||
|
|
||||||
virtual size_t timeStepCount();
|
virtual size_t timeStepCount();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|||||||
@@ -42,3 +42,48 @@ void RigStatisticsCalculator::meanCellScalarValue(double& meanValue)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
void RigStatisticsCalculator::meanCellScalarValue(size_t timeStepIndex, double& meanValue)
|
||||||
|
{
|
||||||
|
double valueSum = 0.0;
|
||||||
|
size_t sampleCount = 0;
|
||||||
|
|
||||||
|
this->valueSumAndSampleCount(timeStepIndex, valueSum, sampleCount);
|
||||||
|
|
||||||
|
if (sampleCount == 0)
|
||||||
|
{
|
||||||
|
meanValue = HUGE_VAL;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
meanValue = valueSum / sampleCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
void RigStatisticsCalculator::valueSumAndSampleCount(double& valueSum, size_t& sampleCount)
|
||||||
|
{
|
||||||
|
size_t tsCount = this->timeStepCount();
|
||||||
|
for (size_t tIdx = 0; tIdx < tsCount; tIdx++)
|
||||||
|
{
|
||||||
|
this->valueSumAndSampleCount(tIdx, valueSum, sampleCount);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
void RigStatisticsCalculator::addDataToHistogramCalculator(RigHistogramCalculator& histogramCalculator)
|
||||||
|
{
|
||||||
|
size_t tsCount = this->timeStepCount();
|
||||||
|
for (size_t tIdx = 0; tIdx < tsCount; tIdx++)
|
||||||
|
{
|
||||||
|
this->addDataToHistogramCalculator(tIdx, histogramCalculator);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -37,8 +37,13 @@ public:
|
|||||||
virtual void posNegClosestToZero(size_t timeStepIndex, double& pos, double& neg) = 0;
|
virtual void posNegClosestToZero(size_t timeStepIndex, double& pos, double& neg) = 0;
|
||||||
|
|
||||||
void meanCellScalarValue(double& meanValue);
|
void meanCellScalarValue(double& meanValue);
|
||||||
virtual void valueSumAndSampleCount(double& valueSum, size_t& sampleCount) = 0;
|
void meanCellScalarValue(size_t timeStepIndex, double& meanValue);
|
||||||
virtual void addDataToHistogramCalculator(RigHistogramCalculator& histogramCalculator) = 0;
|
|
||||||
|
void valueSumAndSampleCount(double& valueSum, size_t& sampleCount);
|
||||||
|
virtual void valueSumAndSampleCount(size_t timeStepIndex, double& valueSum, size_t& sampleCount) = 0;
|
||||||
|
|
||||||
|
void addDataToHistogramCalculator(RigHistogramCalculator& histogramCalculator);
|
||||||
|
virtual void addDataToHistogramCalculator(size_t timeStepIndex, RigHistogramCalculator& histogramCalculator) = 0;
|
||||||
|
|
||||||
virtual size_t timeStepCount() = 0;
|
virtual size_t timeStepCount() = 0;
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user