#6253 Support creating analysis plots directly from an ensemble plot

This commit is contained in:
Gaute Lindkvist
2020-07-31 12:51:36 +02:00
parent b7e1d6e377
commit 698677f3ac
11 changed files with 144 additions and 38 deletions

View File

@@ -214,6 +214,18 @@ void RimAnalysisPlot::setCurveDefinitions( const std::vector<RiaSummaryCurveDefi
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimAnalysisPlot::setTimeSteps( const std::vector<time_t>& timeSteps )
{
m_selectedTimeSteps.v().clear();
for ( auto time : timeSteps )
{
m_selectedTimeSteps.v().push_back( RiaQDateTimeTools::fromTime_t( time ) );
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------

View File

@@ -79,6 +79,7 @@ public:
RimPlotDataFilterCollection* plotDataFilterCollection() const;
void setCurveDefinitions( const std::vector<RiaSummaryCurveDefinition>& curveDefinitions );
void setTimeSteps( const std::vector<time_t>& timeSteps );
std::set<RifEclipseSummaryAddress> unfilteredAddresses();
std::set<EnsembleParameter> ensembleParameters();

View File

@@ -60,6 +60,27 @@ RimAnalysisPlot* RimAnalysisPlotCollection::createAnalysisPlot()
return plot;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RimAnalysisPlot* RimAnalysisPlotCollection::createAnalysisPlot( RimSummaryCaseCollection* ensemble,
const QString& quantityName,
std::time_t timeStep )
{
RimAnalysisPlot* plot = new RimAnalysisPlot();
plot->setAsPlotMdiWindow();
applyEnsembleFieldAndTimeStepToPlot( plot, ensemble, quantityName.toStdString(), timeStep );
// plot->enableAutoPlotTitle( true );
m_analysisPlots.push_back( plot );
plot->loadDataAndUpdate();
plot->updateConnectedEditors();
return plot;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
@@ -123,3 +144,30 @@ void RimAnalysisPlotCollection::applyFirstEnsembleFieldAddressesToPlot( RimAnaly
plot->setCurveDefinitions( curveDefs );
}
}
void RimAnalysisPlotCollection::applyEnsembleFieldAndTimeStepToPlot( RimAnalysisPlot* plot,
RimSummaryCaseCollection* ensemble,
const std::string& quantityName,
std::time_t timeStep )
{
if ( ensemble )
{
std::set<RifEclipseSummaryAddress> allAddresses = ensemble->ensembleSummaryAddresses();
std::vector<RiaSummaryCurveDefinition> curveDefs;
for ( auto address : allAddresses )
{
if ( address.category() == RifEclipseSummaryAddress::SUMMARY_FIELD )
{
if ( quantityName.empty() || quantityName == address.quantityName() )
{
for ( auto summaryCase : ensemble->allSummaryCases() )
{
curveDefs.push_back( RiaSummaryCurveDefinition( summaryCase, address, nullptr ) );
}
}
}
}
plot->setCurveDefinitions( curveDefs );
plot->setTimeSteps( {timeStep} );
}
}

View File

@@ -21,7 +21,10 @@
#include "cafPdmChildArrayField.h"
#include "cafPdmObject.h"
#include <ctime>
class RimAnalysisPlot;
class RimSummaryCaseCollection;
//==================================================================================================
///
@@ -36,8 +39,11 @@ public:
~RimAnalysisPlotCollection() override;
RimAnalysisPlot* createAnalysisPlot();
void updateSummaryNameHasChanged();
void removeSummaryPlot( RimAnalysisPlot* analysisPlot );
RimAnalysisPlot*
createAnalysisPlot( RimSummaryCaseCollection* ensemble, const QString& quantityName, std::time_t timeStep );
void updateSummaryNameHasChanged();
void removeSummaryPlot( RimAnalysisPlot* analysisPlot );
std::vector<RimAnalysisPlot*> plots();
@@ -45,6 +51,10 @@ public:
private:
void applyFirstEnsembleFieldAddressesToPlot( RimAnalysisPlot* plot, const std::string& quantityName = "" );
void applyEnsembleFieldAndTimeStepToPlot( RimAnalysisPlot* plot,
RimSummaryCaseCollection* ensemble,
const std::string& quantityName,
std::time_t timeStep );
private:
caf::PdmChildArrayField<RimAnalysisPlot*> m_analysisPlots;