From 6264eb49c8707fde822f6713d7e836c1d2a510ac Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Tue, 26 Nov 2019 13:42:51 +0100 Subject: [PATCH] #5095 Summary Statistics : Guard vector acces when calculating statistics curves --- .../Summary/RimEnsembleStatisticsCase.cpp | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/ApplicationCode/ProjectDataModel/Summary/RimEnsembleStatisticsCase.cpp b/ApplicationCode/ProjectDataModel/Summary/RimEnsembleStatisticsCase.cpp index a73ae26d7d..29330e1c9f 100644 --- a/ApplicationCode/ProjectDataModel/Summary/RimEnsembleStatisticsCase.cpp +++ b/ApplicationCode/ProjectDataModel/Summary/RimEnsembleStatisticsCase.cpp @@ -133,18 +133,18 @@ void RimEnsembleStatisticsCase::calculate( const std::vector su const RifEclipseSummaryAddress& inputAddress ) { std::vector allTimeSteps; - std::vector> allValues; + std::vector> caseAndTimeStepValues; if ( !inputAddress.isValid() ) return; - allValues.reserve( sumCases.size() ); + caseAndTimeStepValues.reserve( sumCases.size() ); for ( const auto& sumCase : sumCases ) { const auto& reader = sumCase->summaryReader(); if ( reader ) { - std::vector timeSteps = reader->timeSteps( inputAddress ); - std::vector values; + const std::vector& timeSteps = reader->timeSteps( inputAddress ); + std::vector values; reader->values( inputAddress, &values ); if ( timeSteps.size() != values.size() ) continue; @@ -157,7 +157,7 @@ void RimEnsembleStatisticsCase::calculate( const std::vector su resampler.resampleAndComputeWeightedMeanValues( DateTimePeriod::DAY ); if ( allTimeSteps.empty() ) allTimeSteps = resampler.resampledTimeSteps(); - allValues.push_back( + caseAndTimeStepValues.push_back( std::vector( resampler.resampledValues().begin(), resampler.resampledValues().end() ) ); } } @@ -165,14 +165,17 @@ void RimEnsembleStatisticsCase::calculate( const std::vector su clearData(); m_timeSteps = allTimeSteps; - for ( int t = 0; t < (int)allTimeSteps.size(); t++ ) + for ( size_t timeStepIndex = 0; timeStepIndex < allTimeSteps.size(); timeStepIndex++ ) { std::vector valuesAtTimeStep; valuesAtTimeStep.reserve( sumCases.size() ); - for ( int c = 0; c < (int)sumCases.size(); c++ ) + for ( const std::vector& caseValues : caseAndTimeStepValues ) { - valuesAtTimeStep.push_back( allValues[c][t] ); + if ( timeStepIndex < caseValues.size() ) + { + valuesAtTimeStep.push_back( caseValues[timeStepIndex] ); + } } double p10, p50, p90, mean;