Refactor: Make a copy of histogram data.

This commit is contained in:
Kristian Bendiksen 2021-05-03 10:16:25 +02:00
parent 01d88030d4
commit 359df8360e
7 changed files with 26 additions and 28 deletions

View File

@ -178,10 +178,10 @@ void RicGridStatisticsDialog::setHistogramData( RimGridView* view )
{
QVector<QwtIntervalSample> histSamples;
QVector<QPointF> aggrSamples;
double xStep = ( histogramData.max - histogramData.min ) / ( *histogramData.histogram ).size();
double xStep = ( histogramData.max - histogramData.min ) / histogramData.histogram.size();
double xCurr = histogramData.min;
double aggrValue = 0.0;
for ( size_t value : *histogramData.histogram )
for ( size_t value : histogramData.histogram )
{
double xNext = xCurr + xStep;
histSamples.push_back( QwtIntervalSample( value, xCurr, xNext ) );

View File

@ -862,7 +862,7 @@ void Rim3dOverlayInfoConfig::updateEclipse3DInfo( RimEclipseView* eclipseView )
if ( isResultsInfoRelevant && histData.isHistogramVectorValid() )
{
eclipseView->viewer()->showHistogram( true );
eclipseView->viewer()->setHistogram( histData.min, histData.max, *histData.histogram );
eclipseView->viewer()->setHistogram( histData.min, histData.max, histData.histogram );
eclipseView->viewer()->setHistogramPercentiles( histData.p10, histData.p90, histData.mean );
}
}
@ -911,7 +911,7 @@ void Rim3dOverlayInfoConfig::updateGeoMech3DInfo( RimGeoMechView* geoMechView )
if ( isResultsInfoRelevant && histData.isHistogramVectorValid() )
{
geoMechView->viewer()->showHistogram( true );
geoMechView->viewer()->setHistogram( histData.min, histData.max, *histData.histogram );
geoMechView->viewer()->setHistogram( histData.min, histData.max, histData.histogram );
geoMechView->viewer()->setHistogramPercentiles( histData.p10, histData.p90, histData.mean );
}
}

View File

@ -187,7 +187,7 @@ RigHistogramData RimHistogramCalculator::histogramData( RimEclipseView*
fldResults->sumScalarValue( resAddr, timeStep, &histData.sum );
fldResults->mobileVolumeWeightedMean( resAddr, timeStep, &histData.weightedMean );
histData.histogram = &( fldResults->scalarValuesHistogram( resAddr, timeStep ) );
histData.histogram = fldResults->scalarValuesHistogram( resAddr, timeStep );
}
else if ( cellRange == StatisticsCellRangeType::VISIBLE_CELLS )
{
@ -201,7 +201,7 @@ RigHistogramData RimHistogramCalculator::histogramData( RimEclipseView*
m_visibleCellStatistics->sumCellScalarValues( timeStep, histData.sum );
m_visibleCellStatistics->mobileVolumeWeightedMean( timeStep, histData.weightedMean );
histData.histogram = &( m_visibleCellStatistics->cellScalarValuesHistogram( timeStep ) );
histData.histogram = m_visibleCellStatistics->cellScalarValuesHistogram( timeStep );
}
}
}
@ -216,7 +216,7 @@ RigHistogramData RimHistogramCalculator::histogramData( RimEclipseView*
cellResults->meanCellScalarValues( eclResAddr, histData.mean );
cellResults->sumCellScalarValues( eclResAddr, histData.sum );
cellResults->mobileVolumeWeightedMean( eclResAddr, histData.weightedMean );
histData.histogram = &( cellResults->cellScalarValuesHistogram( eclResAddr ) );
histData.histogram = cellResults->cellScalarValuesHistogram( eclResAddr );
}
else if ( timeRange == StatisticsTimeRangeType::CURRENT_TIMESTEP )
{
@ -225,7 +225,7 @@ RigHistogramData RimHistogramCalculator::histogramData( RimEclipseView*
cellResults->meanCellScalarValues( eclResAddr, timeStep, histData.mean );
cellResults->sumCellScalarValues( eclResAddr, timeStep, histData.sum );
cellResults->mobileVolumeWeightedMean( eclResAddr, timeStep, histData.weightedMean );
histData.histogram = &( cellResults->cellScalarValuesHistogram( eclResAddr, timeStep ) );
histData.histogram = cellResults->cellScalarValuesHistogram( eclResAddr, timeStep );
}
}
else if ( cellRange == StatisticsCellRangeType::VISIBLE_CELLS )
@ -241,7 +241,7 @@ RigHistogramData RimHistogramCalculator::histogramData( RimEclipseView*
m_visibleCellStatistics->sumCellScalarValues( histData.sum );
m_visibleCellStatistics->mobileVolumeWeightedMean( histData.weightedMean );
histData.histogram = &( m_visibleCellStatistics->cellScalarValuesHistogram() );
histData.histogram = m_visibleCellStatistics->cellScalarValuesHistogram();
}
else if ( timeRange == StatisticsTimeRangeType::CURRENT_TIMESTEP )
{
@ -251,7 +251,7 @@ RigHistogramData RimHistogramCalculator::histogramData( RimEclipseView*
m_visibleCellStatistics->sumCellScalarValues( timeStep, histData.sum );
m_visibleCellStatistics->mobileVolumeWeightedMean( timeStep, histData.weightedMean );
histData.histogram = &( m_visibleCellStatistics->cellScalarValuesHistogram( timeStep ) );
histData.histogram = m_visibleCellStatistics->cellScalarValuesHistogram( timeStep );
}
}
return histData;
@ -285,7 +285,7 @@ RigHistogramData RimHistogramCalculator::histogramData( RimGeoMechView*
caseData->femPartResults()->p10p90ScalarValues( resAddress, &histData.p10, &histData.p90 );
caseData->femPartResults()->sumScalarValue( resAddress, &histData.sum );
histData.histogram = &( caseData->femPartResults()->scalarValuesHistogram( resAddress ) );
histData.histogram = caseData->femPartResults()->scalarValuesHistogram( resAddress );
}
else if ( timeRange == StatisticsTimeRangeType::CURRENT_TIMESTEP )
{
@ -295,7 +295,7 @@ RigHistogramData RimHistogramCalculator::histogramData( RimGeoMechView*
caseData->femPartResults()->p10p90ScalarValues( resAddress, timeStepIdx, &histData.p10, &histData.p90 );
caseData->femPartResults()->sumScalarValue( resAddress, timeStepIdx, &histData.sum );
histData.histogram = &( caseData->femPartResults()->scalarValuesHistogram( resAddress, timeStepIdx ) );
histData.histogram = caseData->femPartResults()->scalarValuesHistogram( resAddress, timeStepIdx );
}
}
else if ( cellRange == StatisticsCellRangeType::VISIBLE_CELLS )
@ -310,7 +310,7 @@ RigHistogramData RimHistogramCalculator::histogramData( RimGeoMechView*
m_visibleCellStatistics->p10p90CellScalarValues( histData.p10, histData.p90 );
m_visibleCellStatistics->sumCellScalarValues( histData.sum );
histData.histogram = &( m_visibleCellStatistics->cellScalarValuesHistogram() );
histData.histogram = m_visibleCellStatistics->cellScalarValuesHistogram();
}
else if ( timeRange == StatisticsTimeRangeType::CURRENT_TIMESTEP )
{
@ -320,7 +320,7 @@ RigHistogramData RimHistogramCalculator::histogramData( RimGeoMechView*
m_visibleCellStatistics->p10p90CellScalarValues( timeStepIdx, histData.p10, histData.p90 );
m_visibleCellStatistics->sumCellScalarValues( timeStepIdx, histData.sum );
histData.histogram = &( m_visibleCellStatistics->cellScalarValuesHistogram( timeStepIdx ) );
histData.histogram = m_visibleCellStatistics->cellScalarValuesHistogram( timeStepIdx );
}
}
}

View File

@ -207,7 +207,7 @@ void RimStatisticsPlot::updatePlots()
QBarSet* set0 = new QBarSet( m_plotWindowTitle );
double minValue = std::numeric_limits<double>::max();
double maxValue = -std::numeric_limits<double>::max();
for ( double value : *histogramData.histogram )
for ( double value : histogramData.histogram )
{
*set0 << value;
minValue = std::min( minValue, value );

View File

@ -106,9 +106,8 @@ RigHistogramData RigEnsembleFractureStatisticsCalculator::createStatisticsData(
double mean;
RigStatisticsMath::calculateStatisticsCurves( samples, &histogramData.p10, &p50, &histogramData.p90, &mean );
// TODO: this leaks memory: api assume the the histogram is owned by someone else (which is kind-of-strange)
std::vector<size_t>* histogram = new std::vector<size_t>();
RigHistogramCalculator histogramCalculator( histogramData.min, histogramData.max, 20, histogram );
std::vector<size_t> histogram;
RigHistogramCalculator histogramCalculator( histogramData.min, histogramData.max, 20, &histogram );
for ( auto s : samples )
histogramCalculator.addValue( s );

View File

@ -31,7 +31,6 @@ RigHistogramData::RigHistogramData()
, mean( std::numeric_limits<double>::infinity() )
, weightedMean( std::numeric_limits<double>::infinity() )
, sum( 0.0 )
, histogram( nullptr )
{
}
@ -56,5 +55,5 @@ bool RigHistogramData::isValid( double parameter ) const
//--------------------------------------------------------------------------------------------------
bool RigHistogramData::isHistogramVectorValid() const
{
return histogram && histogram->size() > 0 && isMinMaxValid();
return histogram.size() > 0 && isMinMaxValid();
}

View File

@ -29,14 +29,14 @@ class RigHistogramData
public:
RigHistogramData();
double min;
double max;
double p10;
double p90;
double mean;
double sum;
double weightedMean;
const std::vector<size_t>* histogram;
double min;
double max;
double p10;
double p90;
double mean;
double sum;
double weightedMean;
std::vector<size_t> histogram;
bool isMinMaxValid() const;
bool isHistogramVectorValid() const;