diff --git a/ApplicationCode/ProjectDataModel/Summary/RimEnsembleCurveSet.cpp b/ApplicationCode/ProjectDataModel/Summary/RimEnsembleCurveSet.cpp index bee72a7a5a..81faa8ffaa 100644 --- a/ApplicationCode/ProjectDataModel/Summary/RimEnsembleCurveSet.cpp +++ b/ApplicationCode/ProjectDataModel/Summary/RimEnsembleCurveSet.cpp @@ -1055,7 +1055,7 @@ void RimEnsembleCurveSet::updateStatisticsCurves( const std::vectorallSummaryCases(); } - m_ensembleStatCase->calculate( statCases ); + m_ensembleStatCase->calculate( statCases, m_statistics->includeIncompleteCurves() ); } RimSummaryPlot* plot = nullptr; diff --git a/ApplicationCode/ProjectDataModel/Summary/RimEnsembleStatistics.cpp b/ApplicationCode/ProjectDataModel/Summary/RimEnsembleStatistics.cpp index 85664b4d98..43fb09566e 100644 --- a/ApplicationCode/ProjectDataModel/Summary/RimEnsembleStatistics.cpp +++ b/ApplicationCode/ProjectDataModel/Summary/RimEnsembleStatistics.cpp @@ -43,6 +43,8 @@ RimEnsembleStatistics::RimEnsembleStatistics() CAF_PDM_InitField( &m_showP90Curve, "ShowP90Curve", true, "P10", "", "", "" ); // Yes, P10 CAF_PDM_InitField( &m_showMeanCurve, "ShowMeanCurve", true, "Mean", "", "", "" ); CAF_PDM_InitField( &m_showCurveLabels, "ShowCurveLabels", true, "Show Curve Labels", "", "", "" ); + CAF_PDM_InitField( &m_includeIncompleteCurves, "IncludeIncompleteCurves", false, "Include Incomplete Curves", "", "", "" ); + CAF_PDM_InitField( &m_warningLabel, "WarningLabel", QString( "Warning: Ensemble time range mismatch" ), "", "", "", "" ); CAF_PDM_InitField( &m_color, "Color", cvf::Color3f( cvf::Color3::BLACK ), "Color", "", "", "" ); @@ -100,7 +102,7 @@ void RimEnsembleStatistics::fieldChangedByUi( const caf::PdmFieldHandle* changed { if ( changedField == &m_active || changedField == &m_basedOnFilteredCases || changedField == &m_showP10Curve || changedField == &m_showP50Curve || changedField == &m_showP90Curve || changedField == &m_showMeanCurve || - changedField == &m_showCurveLabels || changedField == &m_color ) + changedField == &m_showCurveLabels || changedField == &m_color || changedField == &m_includeIncompleteCurves ) { auto curveSet = parentCurveSet(); if ( !curveSet ) return; @@ -129,6 +131,7 @@ void RimEnsembleStatistics::defineUiOrdering( QString uiConfigName, caf::PdmUiOr uiOrdering.add( &m_active ); uiOrdering.add( &m_hideEnsembleCurves ); uiOrdering.add( &m_basedOnFilteredCases ); + uiOrdering.add( &m_includeIncompleteCurves ); uiOrdering.add( &m_showCurveLabels ); uiOrdering.add( &m_color ); diff --git a/ApplicationCode/ProjectDataModel/Summary/RimEnsembleStatistics.h b/ApplicationCode/ProjectDataModel/Summary/RimEnsembleStatistics.h index c373e2a063..9a20dd769a 100644 --- a/ApplicationCode/ProjectDataModel/Summary/RimEnsembleStatistics.h +++ b/ApplicationCode/ProjectDataModel/Summary/RimEnsembleStatistics.h @@ -72,6 +72,11 @@ public: return m_color; } + bool includeIncompleteCurves() const + { + return m_includeIncompleteCurves; + } + void disableP10Curve( bool disable ); void disableP50Curve( bool disable ); void disableP90Curve( bool disable ); @@ -93,6 +98,7 @@ private: caf::PdmField m_showP90Curve; caf::PdmField m_showMeanCurve; caf::PdmField m_showCurveLabels; + caf::PdmField m_includeIncompleteCurves; caf::PdmField m_warningLabel; diff --git a/ApplicationCode/ProjectDataModel/Summary/RimEnsembleStatisticsCase.cpp b/ApplicationCode/ProjectDataModel/Summary/RimEnsembleStatisticsCase.cpp index 29330e1c9f..928b28ebb2 100644 --- a/ApplicationCode/ProjectDataModel/Summary/RimEnsembleStatisticsCase.cpp +++ b/ApplicationCode/ProjectDataModel/Summary/RimEnsembleStatisticsCase.cpp @@ -117,12 +117,16 @@ const RimEnsembleCurveSet* RimEnsembleStatisticsCase::curveSet() const //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RimEnsembleStatisticsCase::calculate( const std::vector& sumCases ) +void RimEnsembleStatisticsCase::calculate( const std::vector& sumCases, bool includeIncompleteCurves ) { auto inputAddress = m_curveSet->summaryAddress(); if ( m_statisticsReader && inputAddress.isValid() ) { - calculate( validSummaryCases( sumCases, inputAddress ), inputAddress ); + const std::vector& validCases = validSummaryCases( sumCases, + inputAddress, + includeIncompleteCurves ); + + calculate( validCases, inputAddress, includeIncompleteCurves ); } } @@ -130,7 +134,8 @@ void RimEnsembleStatisticsCase::calculate( const std::vector& s /// //-------------------------------------------------------------------------------------------------- void RimEnsembleStatisticsCase::calculate( const std::vector sumCases, - const RifEclipseSummaryAddress& inputAddress ) + const RifEclipseSummaryAddress& inputAddress, + bool includeIncompleteCurves ) { std::vector allTimeSteps; std::vector> caseAndTimeStepValues; @@ -147,7 +152,7 @@ void RimEnsembleStatisticsCase::calculate( const std::vector su std::vector values; reader->values( inputAddress, &values ); - if ( timeSteps.size() != values.size() ) continue; + if ( !includeIncompleteCurves && timeSteps.size() != values.size() ) continue; RiaTimeHistoryCurveResampler resampler; resampler.setCurveData( values, timeSteps ); @@ -216,7 +221,8 @@ void RimEnsembleStatisticsCase::clearData() /// //-------------------------------------------------------------------------------------------------- std::vector RimEnsembleStatisticsCase::validSummaryCases( const std::vector allSumCases, - const RifEclipseSummaryAddress& inputAddress ) + const RifEclipseSummaryAddress& inputAddress, + bool includeIncompleteCurves ) { std::vector validCases; std::vector> times; @@ -248,8 +254,13 @@ std::vector RimEnsembleStatisticsCase::validSummaryCases( const time_t firstTimeStep = std::get<1>( item ); time_t lastTimeStep = std::get<2>( item ); - if ( firstTimeStep == minTimeStep && lastTimeStep == maxTimeStep ) + if ( firstTimeStep == minTimeStep ) { + if ( !includeIncompleteCurves && lastTimeStep != maxTimeStep ) + { + continue; + } + validCases.push_back( sumCase ); } } diff --git a/ApplicationCode/ProjectDataModel/Summary/RimEnsembleStatisticsCase.h b/ApplicationCode/ProjectDataModel/Summary/RimEnsembleStatisticsCase.h index 3e3ebf54a1..348de9f3f4 100644 --- a/ApplicationCode/ProjectDataModel/Summary/RimEnsembleStatisticsCase.h +++ b/ApplicationCode/ProjectDataModel/Summary/RimEnsembleStatisticsCase.h @@ -65,14 +65,17 @@ public: const RimEnsembleCurveSet* curveSet() const; - void calculate( const std::vector& sumCases ); + void calculate( const std::vector& sumCases, bool includeIncompleteCurves ); RiaEclipseUnitTools::UnitSystem unitSystem() const; private: - void calculate( const std::vector sumCases, const RifEclipseSummaryAddress& inputAddress ); - void clearData(); + void calculate( const std::vector sumCases, + const RifEclipseSummaryAddress& inputAddress, + bool includeIncompleteCurves ); + void clearData(); std::vector validSummaryCases( const std::vector allSumCases, - const RifEclipseSummaryAddress& inputAddress ); + const RifEclipseSummaryAddress& inputAddress, + bool includeIncompleteCurves ); private: std::unique_ptr m_statisticsReader;