mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
#4155 Ensemble Statistics Curves : Add option to include partial curves when computing statistics
This commit is contained in:
parent
6264eb49c8
commit
6969c2f299
@ -1055,7 +1055,7 @@ void RimEnsembleCurveSet::updateStatisticsCurves( const std::vector<RimSummaryCa
|
|||||||
else
|
else
|
||||||
statCases = group->allSummaryCases();
|
statCases = group->allSummaryCases();
|
||||||
}
|
}
|
||||||
m_ensembleStatCase->calculate( statCases );
|
m_ensembleStatCase->calculate( statCases, m_statistics->includeIncompleteCurves() );
|
||||||
}
|
}
|
||||||
|
|
||||||
RimSummaryPlot* plot = nullptr;
|
RimSummaryPlot* plot = nullptr;
|
||||||
|
@ -43,6 +43,8 @@ RimEnsembleStatistics::RimEnsembleStatistics()
|
|||||||
CAF_PDM_InitField( &m_showP90Curve, "ShowP90Curve", true, "P10", "", "", "" ); // Yes, P10
|
CAF_PDM_InitField( &m_showP90Curve, "ShowP90Curve", true, "P10", "", "", "" ); // Yes, P10
|
||||||
CAF_PDM_InitField( &m_showMeanCurve, "ShowMeanCurve", true, "Mean", "", "", "" );
|
CAF_PDM_InitField( &m_showMeanCurve, "ShowMeanCurve", true, "Mean", "", "", "" );
|
||||||
CAF_PDM_InitField( &m_showCurveLabels, "ShowCurveLabels", true, "Show Curve Labels", "", "", "" );
|
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_warningLabel, "WarningLabel", QString( "Warning: Ensemble time range mismatch" ), "", "", "", "" );
|
||||||
CAF_PDM_InitField( &m_color, "Color", cvf::Color3f( cvf::Color3::BLACK ), "Color", "", "", "" );
|
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 ||
|
if ( changedField == &m_active || changedField == &m_basedOnFilteredCases || changedField == &m_showP10Curve ||
|
||||||
changedField == &m_showP50Curve || changedField == &m_showP90Curve || changedField == &m_showMeanCurve ||
|
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();
|
auto curveSet = parentCurveSet();
|
||||||
if ( !curveSet ) return;
|
if ( !curveSet ) return;
|
||||||
@ -129,6 +131,7 @@ void RimEnsembleStatistics::defineUiOrdering( QString uiConfigName, caf::PdmUiOr
|
|||||||
uiOrdering.add( &m_active );
|
uiOrdering.add( &m_active );
|
||||||
uiOrdering.add( &m_hideEnsembleCurves );
|
uiOrdering.add( &m_hideEnsembleCurves );
|
||||||
uiOrdering.add( &m_basedOnFilteredCases );
|
uiOrdering.add( &m_basedOnFilteredCases );
|
||||||
|
uiOrdering.add( &m_includeIncompleteCurves );
|
||||||
uiOrdering.add( &m_showCurveLabels );
|
uiOrdering.add( &m_showCurveLabels );
|
||||||
uiOrdering.add( &m_color );
|
uiOrdering.add( &m_color );
|
||||||
|
|
||||||
|
@ -72,6 +72,11 @@ public:
|
|||||||
return m_color;
|
return m_color;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool includeIncompleteCurves() const
|
||||||
|
{
|
||||||
|
return m_includeIncompleteCurves;
|
||||||
|
}
|
||||||
|
|
||||||
void disableP10Curve( bool disable );
|
void disableP10Curve( bool disable );
|
||||||
void disableP50Curve( bool disable );
|
void disableP50Curve( bool disable );
|
||||||
void disableP90Curve( bool disable );
|
void disableP90Curve( bool disable );
|
||||||
@ -93,6 +98,7 @@ private:
|
|||||||
caf::PdmField<bool> m_showP90Curve;
|
caf::PdmField<bool> m_showP90Curve;
|
||||||
caf::PdmField<bool> m_showMeanCurve;
|
caf::PdmField<bool> m_showMeanCurve;
|
||||||
caf::PdmField<bool> m_showCurveLabels;
|
caf::PdmField<bool> m_showCurveLabels;
|
||||||
|
caf::PdmField<bool> m_includeIncompleteCurves;
|
||||||
|
|
||||||
caf::PdmField<QString> m_warningLabel;
|
caf::PdmField<QString> m_warningLabel;
|
||||||
|
|
||||||
|
@ -117,12 +117,16 @@ const RimEnsembleCurveSet* RimEnsembleStatisticsCase::curveSet() const
|
|||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
void RimEnsembleStatisticsCase::calculate( const std::vector<RimSummaryCase*>& sumCases )
|
void RimEnsembleStatisticsCase::calculate( const std::vector<RimSummaryCase*>& sumCases, bool includeIncompleteCurves )
|
||||||
{
|
{
|
||||||
auto inputAddress = m_curveSet->summaryAddress();
|
auto inputAddress = m_curveSet->summaryAddress();
|
||||||
if ( m_statisticsReader && inputAddress.isValid() )
|
if ( m_statisticsReader && inputAddress.isValid() )
|
||||||
{
|
{
|
||||||
calculate( validSummaryCases( sumCases, inputAddress ), inputAddress );
|
const std::vector<RimSummaryCase*>& validCases = validSummaryCases( sumCases,
|
||||||
|
inputAddress,
|
||||||
|
includeIncompleteCurves );
|
||||||
|
|
||||||
|
calculate( validCases, inputAddress, includeIncompleteCurves );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -130,7 +134,8 @@ void RimEnsembleStatisticsCase::calculate( const std::vector<RimSummaryCase*>& s
|
|||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
void RimEnsembleStatisticsCase::calculate( const std::vector<RimSummaryCase*> sumCases,
|
void RimEnsembleStatisticsCase::calculate( const std::vector<RimSummaryCase*> sumCases,
|
||||||
const RifEclipseSummaryAddress& inputAddress )
|
const RifEclipseSummaryAddress& inputAddress,
|
||||||
|
bool includeIncompleteCurves )
|
||||||
{
|
{
|
||||||
std::vector<time_t> allTimeSteps;
|
std::vector<time_t> allTimeSteps;
|
||||||
std::vector<std::vector<double>> caseAndTimeStepValues;
|
std::vector<std::vector<double>> caseAndTimeStepValues;
|
||||||
@ -147,7 +152,7 @@ void RimEnsembleStatisticsCase::calculate( const std::vector<RimSummaryCase*> su
|
|||||||
std::vector<double> values;
|
std::vector<double> values;
|
||||||
reader->values( inputAddress, &values );
|
reader->values( inputAddress, &values );
|
||||||
|
|
||||||
if ( timeSteps.size() != values.size() ) continue;
|
if ( !includeIncompleteCurves && timeSteps.size() != values.size() ) continue;
|
||||||
|
|
||||||
RiaTimeHistoryCurveResampler resampler;
|
RiaTimeHistoryCurveResampler resampler;
|
||||||
resampler.setCurveData( values, timeSteps );
|
resampler.setCurveData( values, timeSteps );
|
||||||
@ -216,7 +221,8 @@ void RimEnsembleStatisticsCase::clearData()
|
|||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
std::vector<RimSummaryCase*> RimEnsembleStatisticsCase::validSummaryCases( const std::vector<RimSummaryCase*> allSumCases,
|
std::vector<RimSummaryCase*> RimEnsembleStatisticsCase::validSummaryCases( const std::vector<RimSummaryCase*> allSumCases,
|
||||||
const RifEclipseSummaryAddress& inputAddress )
|
const RifEclipseSummaryAddress& inputAddress,
|
||||||
|
bool includeIncompleteCurves )
|
||||||
{
|
{
|
||||||
std::vector<RimSummaryCase*> validCases;
|
std::vector<RimSummaryCase*> validCases;
|
||||||
std::vector<std::tuple<RimSummaryCase*, time_t, time_t>> times;
|
std::vector<std::tuple<RimSummaryCase*, time_t, time_t>> times;
|
||||||
@ -248,8 +254,13 @@ std::vector<RimSummaryCase*> RimEnsembleStatisticsCase::validSummaryCases( const
|
|||||||
time_t firstTimeStep = std::get<1>( item );
|
time_t firstTimeStep = std::get<1>( item );
|
||||||
time_t lastTimeStep = std::get<2>( 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 );
|
validCases.push_back( sumCase );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -65,14 +65,17 @@ public:
|
|||||||
|
|
||||||
const RimEnsembleCurveSet* curveSet() const;
|
const RimEnsembleCurveSet* curveSet() const;
|
||||||
|
|
||||||
void calculate( const std::vector<RimSummaryCase*>& sumCases );
|
void calculate( const std::vector<RimSummaryCase*>& sumCases, bool includeIncompleteCurves );
|
||||||
RiaEclipseUnitTools::UnitSystem unitSystem() const;
|
RiaEclipseUnitTools::UnitSystem unitSystem() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void calculate( const std::vector<RimSummaryCase*> sumCases, const RifEclipseSummaryAddress& inputAddress );
|
void calculate( const std::vector<RimSummaryCase*> sumCases,
|
||||||
void clearData();
|
const RifEclipseSummaryAddress& inputAddress,
|
||||||
|
bool includeIncompleteCurves );
|
||||||
|
void clearData();
|
||||||
std::vector<RimSummaryCase*> validSummaryCases( const std::vector<RimSummaryCase*> allSumCases,
|
std::vector<RimSummaryCase*> validSummaryCases( const std::vector<RimSummaryCase*> allSumCases,
|
||||||
const RifEclipseSummaryAddress& inputAddress );
|
const RifEclipseSummaryAddress& inputAddress,
|
||||||
|
bool includeIncompleteCurves );
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::unique_ptr<RifEnsembleStatisticsReader> m_statisticsReader;
|
std::unique_ptr<RifEnsembleStatisticsReader> m_statisticsReader;
|
||||||
|
Loading…
Reference in New Issue
Block a user