#6359 Improve context menu creation of correlation plots

This commit is contained in:
Gaute Lindkvist
2020-08-25 13:56:46 +02:00
parent 9eb79fbb0e
commit daf24c773b
10 changed files with 155 additions and 89 deletions

View File

@@ -85,7 +85,7 @@ void RicNewAnalysisPlotFeature::onActionTriggered( bool isChecked )
EnsemblePlotParams params = userData.value<EnsemblePlotParams>(); EnsemblePlotParams params = userData.value<EnsemblePlotParams>();
ensemble = params.ensemble; ensemble = params.ensemble;
quantityName = params.quantityName; quantityName = params.mainQuantityName;
timeStep = params.timeStep; timeStep = params.timeStep;
newPlot = analysisPlotColl->createAnalysisPlot( ensemble, quantityName, timeStep ); newPlot = analysisPlotColl->createAnalysisPlot( ensemble, quantityName, timeStep );

View File

@@ -70,6 +70,7 @@ void RicNewCorrelationMatrixPlotFeature::onActionTriggered( bool isChecked )
} }
RimSummaryCaseCollection* ensemble = nullptr; RimSummaryCaseCollection* ensemble = nullptr;
std::vector<QString> includedQuantityNames;
std::time_t timeStep = 0; std::time_t timeStep = 0;
RimCorrelationMatrixPlot* newPlot = nullptr; RimCorrelationMatrixPlot* newPlot = nullptr;
@@ -84,10 +85,13 @@ void RicNewCorrelationMatrixPlotFeature::onActionTriggered( bool isChecked )
correlationPlotColl = correlationPlotCollections.front(); correlationPlotColl = correlationPlotCollections.front();
EnsemblePlotParams params = userData.value<EnsemblePlotParams>(); EnsemblePlotParams params = userData.value<EnsemblePlotParams>();
ensemble = params.ensemble;
timeStep = params.timeStep;
newPlot = correlationPlotColl->createCorrelationMatrixPlot( ensemble, timeStep ); includedQuantityNames =
std::vector<QString>( params.includedQuantityNames.begin(), params.includedQuantityNames.end() );
ensemble = params.ensemble;
timeStep = params.timeStep;
newPlot = correlationPlotColl->createCorrelationMatrixPlot( ensemble, includedQuantityNames, timeStep );
} }
} }
else else

View File

@@ -83,7 +83,7 @@ void RicNewCorrelationPlotFeature::onActionTriggered( bool isChecked )
EnsemblePlotParams params = userData.value<EnsemblePlotParams>(); EnsemblePlotParams params = userData.value<EnsemblePlotParams>();
ensemble = params.ensemble; ensemble = params.ensemble;
quantityName = params.quantityName; quantityName = params.mainQuantityName;
timeStep = params.timeStep; timeStep = params.timeStep;
newPlot = correlationPlotColl->createCorrelationPlot( ensemble, quantityName, timeStep ); newPlot = correlationPlotColl->createCorrelationPlot( ensemble, quantityName, timeStep );
@@ -116,7 +116,7 @@ void RicNewCorrelationPlotFeature::setupActionLook( QAction* actionToSetup )
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
EnsemblePlotParams::EnsemblePlotParams() EnsemblePlotParams::EnsemblePlotParams()
: ensemble( nullptr ) : ensemble( nullptr )
, quantityName( "" ) , mainQuantityName( "" )
, ensembleParameter( "" ) , ensembleParameter( "" )
, timeStep( 0 ) , timeStep( 0 )
{ {
@@ -126,10 +126,12 @@ EnsemblePlotParams::EnsemblePlotParams()
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
EnsemblePlotParams::EnsemblePlotParams( RimSummaryCaseCollection* ensemble, EnsemblePlotParams::EnsemblePlotParams( RimSummaryCaseCollection* ensemble,
const QString& quantityName, const QStringList& includedQuantityNames,
const QString& mainQuantityName,
const std::time_t& timeStep ) const std::time_t& timeStep )
: ensemble( ensemble ) : ensemble( ensemble )
, quantityName( quantityName ) , includedQuantityNames( includedQuantityNames )
, mainQuantityName( mainQuantityName )
, ensembleParameter( "" ) , ensembleParameter( "" )
, timeStep( timeStep ) , timeStep( timeStep )
{ {

View File

@@ -28,14 +28,18 @@ class EnsemblePlotParams
{ {
public: public:
RimSummaryCaseCollection* ensemble; RimSummaryCaseCollection* ensemble;
QString quantityName; QStringList includedQuantityNames;
QString mainQuantityName;
QString ensembleParameter; QString ensembleParameter;
std::time_t timeStep; std::time_t timeStep;
EnsemblePlotParams(); EnsemblePlotParams();
EnsemblePlotParams( const EnsemblePlotParams& rhs ) = default; EnsemblePlotParams( const EnsemblePlotParams& rhs ) = default;
EnsemblePlotParams( RimSummaryCaseCollection* ensemble, const QString& quantityName, const std::time_t& timeStep ); EnsemblePlotParams( RimSummaryCaseCollection* ensemble,
const QStringList& includedQuantityNames,
const QString& mainQuantityName,
const std::time_t& timeStep );
~EnsemblePlotParams() = default; ~EnsemblePlotParams() = default;
}; };

View File

@@ -68,7 +68,8 @@ void RicNewCorrelationReportPlotFeature::onActionTriggered( bool isChecked )
} }
RimSummaryCaseCollection* ensemble = nullptr; RimSummaryCaseCollection* ensemble = nullptr;
QString quantityName; std::vector<QString> includedQuantityNames;
QString mainQuantityName;
std::time_t timeStep = 0; std::time_t timeStep = 0;
RimCorrelationReportPlot* newPlot = nullptr; RimCorrelationReportPlot* newPlot = nullptr;
@@ -84,10 +85,16 @@ void RicNewCorrelationReportPlotFeature::onActionTriggered( bool isChecked )
EnsemblePlotParams params = userData.value<EnsemblePlotParams>(); EnsemblePlotParams params = userData.value<EnsemblePlotParams>();
ensemble = params.ensemble; ensemble = params.ensemble;
quantityName = params.quantityName; includedQuantityNames =
timeStep = params.timeStep; std::vector<QString>( params.includedQuantityNames.begin(), params.includedQuantityNames.end() );
newPlot = correlationPlotColl->createCorrelationReportPlot( ensemble, quantityName, timeStep ); mainQuantityName = params.mainQuantityName;
timeStep = params.timeStep;
newPlot = correlationPlotColl->createCorrelationReportPlot( ensemble,
includedQuantityNames,
mainQuantityName,
timeStep );
} }
} }
else else

View File

@@ -86,7 +86,7 @@ void RicNewParameterResultCrossPlotFeature::onActionTriggered( bool isChecked )
EnsemblePlotParams params = userData.value<EnsemblePlotParams>(); EnsemblePlotParams params = userData.value<EnsemblePlotParams>();
ensemble = params.ensemble; ensemble = params.ensemble;
quantityName = params.quantityName; quantityName = params.mainQuantityName;
ensembleParameter = params.ensembleParameter; ensembleParameter = params.ensembleParameter;
timeStep = params.timeStep; timeStep = params.timeStep;

View File

@@ -56,7 +56,7 @@ RimCorrelationPlot* RimCorrelationPlotCollection::createCorrelationPlot( bool de
RimCorrelationPlot* plot = new RimCorrelationPlot(); RimCorrelationPlot* plot = new RimCorrelationPlot();
plot->setAsPlotMdiWindow(); plot->setAsPlotMdiWindow();
if ( defaultToFirstEnsembleFopt ) applyFirstEnsembleFieldAddressesToPlot( plot, "FOPT" ); if ( defaultToFirstEnsembleFopt ) applyFirstEnsembleFieldAddressesToPlot( plot, {"FOPT"} );
plot->selectAllParameters(); plot->selectAllParameters();
m_correlationPlots.push_back( plot ); m_correlationPlots.push_back( plot );
@@ -74,7 +74,7 @@ RimCorrelationPlot* RimCorrelationPlotCollection::createCorrelationPlot( RimSumm
RimCorrelationPlot* plot = new RimCorrelationPlot(); RimCorrelationPlot* plot = new RimCorrelationPlot();
plot->setAsPlotMdiWindow(); plot->setAsPlotMdiWindow();
applyEnsembleFieldAndTimeStepToPlot( plot, ensemble, quantityName.toStdString(), timeStep ); applyEnsembleFieldAndTimeStepToPlot( plot, ensemble, {quantityName}, timeStep );
plot->selectAllParameters(); plot->selectAllParameters();
m_correlationPlots.push_back( plot ); m_correlationPlots.push_back( plot );
@@ -101,11 +101,12 @@ RimCorrelationMatrixPlot* RimCorrelationPlotCollection::createCorrelationMatrixP
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
RimCorrelationMatrixPlot* RimCorrelationPlotCollection::createCorrelationMatrixPlot( RimSummaryCaseCollection* ensemble, RimCorrelationMatrixPlot* RimCorrelationPlotCollection::createCorrelationMatrixPlot( RimSummaryCaseCollection* ensemble,
const std::vector<QString>& quantityNames,
std::time_t timeStep ) std::time_t timeStep )
{ {
RimCorrelationMatrixPlot* plot = new RimCorrelationMatrixPlot(); RimCorrelationMatrixPlot* plot = new RimCorrelationMatrixPlot();
plot->setAsPlotMdiWindow(); plot->setAsPlotMdiWindow();
applyEnsembleFieldAndTimeStepToPlot( plot, ensemble, "", timeStep ); applyEnsembleFieldAndTimeStepToPlot( plot, ensemble, quantityNames, timeStep );
plot->selectAllParameters(); plot->selectAllParameters();
m_correlationPlots.push_back( plot ); m_correlationPlots.push_back( plot );
@@ -120,7 +121,7 @@ RimParameterResultCrossPlot* RimCorrelationPlotCollection::createParameterResult
{ {
RimParameterResultCrossPlot* plot = new RimParameterResultCrossPlot; RimParameterResultCrossPlot* plot = new RimParameterResultCrossPlot;
plot->setAsPlotMdiWindow(); plot->setAsPlotMdiWindow();
if ( defaultToFirstEnsembleFopt ) applyFirstEnsembleFieldAddressesToPlot( plot, "FOPT" ); if ( defaultToFirstEnsembleFopt ) applyFirstEnsembleFieldAddressesToPlot( plot, {"FOPT"} );
m_correlationPlots.push_back( plot ); m_correlationPlots.push_back( plot );
return plot; return plot;
@@ -136,7 +137,7 @@ RimParameterResultCrossPlot* RimCorrelationPlotCollection::createParameterResult
{ {
RimParameterResultCrossPlot* plot = new RimParameterResultCrossPlot; RimParameterResultCrossPlot* plot = new RimParameterResultCrossPlot;
plot->setAsPlotMdiWindow(); plot->setAsPlotMdiWindow();
applyEnsembleFieldAndTimeStepToPlot( plot, ensemble, quantityName.toStdString(), timeStep ); applyEnsembleFieldAndTimeStepToPlot( plot, ensemble, {quantityName}, timeStep );
plot->setEnsembleParameter( paramName ); plot->setEnsembleParameter( paramName );
m_correlationPlots.push_back( plot ); m_correlationPlots.push_back( plot );
@@ -151,7 +152,7 @@ RimCorrelationReportPlot*
{ {
RimCorrelationReportPlot* report = new RimCorrelationReportPlot; RimCorrelationReportPlot* report = new RimCorrelationReportPlot;
report->setAsPlotMdiWindow(); report->setAsPlotMdiWindow();
if ( defaultToFirstEnsembleFopt ) applyFirstEnsembleFieldAddressesToReport( report, "FOPT" ); if ( defaultToFirstEnsembleFopt ) applyFirstEnsembleFieldAddressesToReport( report, {"FOPT"}, "FOPT" );
report->matrixPlot()->selectAllParameters(); report->matrixPlot()->selectAllParameters();
report->correlationPlot()->selectAllParameters(); report->correlationPlot()->selectAllParameters();
m_correlationReports.push_back( report ); m_correlationReports.push_back( report );
@@ -161,13 +162,15 @@ RimCorrelationReportPlot*
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
RimCorrelationReportPlot* RimCorrelationPlotCollection::createCorrelationReportPlot( RimSummaryCaseCollection* ensemble, RimCorrelationReportPlot*
const QString& quantityName, RimCorrelationPlotCollection::createCorrelationReportPlot( RimSummaryCaseCollection* ensemble,
std::time_t timeStep ) const std::vector<QString>& matrixQuantityNames,
const QString& tornadoAndCrossPlotQuantityName,
std::time_t timeStep )
{ {
RimCorrelationReportPlot* report = new RimCorrelationReportPlot; RimCorrelationReportPlot* report = new RimCorrelationReportPlot;
report->setAsPlotMdiWindow(); report->setAsPlotMdiWindow();
applyEnsembleFieldAndTimeStepToReport( report, ensemble, quantityName.toStdString(), timeStep ); applyEnsembleFieldAndTimeStepToReport( report, ensemble, matrixQuantityNames, tornadoAndCrossPlotQuantityName, timeStep );
report->matrixPlot()->selectAllParameters(); report->matrixPlot()->selectAllParameters();
report->correlationPlot()->selectAllParameters(); report->correlationPlot()->selectAllParameters();
m_correlationReports.push_back( report ); m_correlationReports.push_back( report );
@@ -211,7 +214,7 @@ void RimCorrelationPlotCollection::deleteAllChildObjects()
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RimCorrelationPlotCollection::applyFirstEnsembleFieldAddressesToPlot( RimAbstractCorrelationPlot* plot, void RimCorrelationPlotCollection::applyFirstEnsembleFieldAddressesToPlot( RimAbstractCorrelationPlot* plot,
const std::string& quantityName /*= "FOPT" */ ) const std::vector<QString>& quantityNames /*= {} */ )
{ {
std::vector<RimSummaryCaseCollection*> ensembles; std::vector<RimSummaryCaseCollection*> ensembles;
RimProject::current()->descendantsIncludingThisOfType( ensembles ); RimProject::current()->descendantsIncludingThisOfType( ensembles );
@@ -221,12 +224,10 @@ void RimCorrelationPlotCollection::applyFirstEnsembleFieldAddressesToPlot( RimAb
std::vector<RiaSummaryCurveDefinition> curveDefs; std::vector<RiaSummaryCurveDefinition> curveDefs;
for ( auto address : allAddresses ) for ( auto address : allAddresses )
{ {
if ( address.category() == RifEclipseSummaryAddress::SUMMARY_FIELD ) auto it = std::find( quantityNames.begin(), quantityNames.end(), QString::fromStdString( address.uiText() ) );
if ( it != quantityNames.end() || quantityNames.empty() )
{ {
if ( quantityName.empty() || quantityName == address.quantityName() ) curveDefs.push_back( RiaSummaryCurveDefinition( nullptr, address, ensembles.front() ) );
{
curveDefs.push_back( RiaSummaryCurveDefinition( nullptr, address, ensembles.front() ) );
}
} }
} }
plot->setCurveDefinitions( curveDefs ); plot->setCurveDefinitions( curveDefs );
@@ -244,7 +245,7 @@ void RimCorrelationPlotCollection::applyFirstEnsembleFieldAddressesToPlot( RimAb
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RimCorrelationPlotCollection::applyEnsembleFieldAndTimeStepToPlot( RimAbstractCorrelationPlot* plot, void RimCorrelationPlotCollection::applyEnsembleFieldAndTimeStepToPlot( RimAbstractCorrelationPlot* plot,
RimSummaryCaseCollection* ensemble, RimSummaryCaseCollection* ensemble,
const std::string& quantityName, const std::vector<QString>& quantityNames,
std::time_t timeStep ) std::time_t timeStep )
{ {
if ( ensemble ) if ( ensemble )
@@ -253,12 +254,10 @@ void RimCorrelationPlotCollection::applyEnsembleFieldAndTimeStepToPlot( RimAbstr
std::vector<RiaSummaryCurveDefinition> curveDefs; std::vector<RiaSummaryCurveDefinition> curveDefs;
for ( auto address : allAddresses ) for ( auto address : allAddresses )
{ {
if ( address.category() == RifEclipseSummaryAddress::SUMMARY_FIELD ) auto it = std::find( quantityNames.begin(), quantityNames.end(), QString::fromStdString( address.uiText() ) );
if ( it != quantityNames.end() || quantityNames.empty() )
{ {
if ( quantityName.empty() || quantityName == address.quantityName() ) curveDefs.push_back( RiaSummaryCurveDefinition( nullptr, address, ensemble ) );
{
curveDefs.push_back( RiaSummaryCurveDefinition( nullptr, address, ensemble ) );
}
} }
} }
plot->setCurveDefinitions( curveDefs ); plot->setCurveDefinitions( curveDefs );
@@ -270,7 +269,8 @@ void RimCorrelationPlotCollection::applyEnsembleFieldAndTimeStepToPlot( RimAbstr
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RimCorrelationPlotCollection::applyFirstEnsembleFieldAddressesToReport( RimCorrelationReportPlot* plot, void RimCorrelationPlotCollection::applyFirstEnsembleFieldAddressesToReport( RimCorrelationReportPlot* plot,
const std::string& quantityName /*= "" */ ) const std::vector<QString>& matrixQuantityNames,
const QString& tornadoAndCrossPlotQuantityName )
{ {
std::vector<RimSummaryCaseCollection*> ensembles; std::vector<RimSummaryCaseCollection*> ensembles;
RimProject::current()->descendantsIncludingThisOfType( ensembles ); RimProject::current()->descendantsIncludingThisOfType( ensembles );
@@ -281,16 +281,21 @@ void RimCorrelationPlotCollection::applyFirstEnsembleFieldAddressesToReport( Rim
std::vector<RiaSummaryCurveDefinition> curveDefsTornadoAndCrossPlot; std::vector<RiaSummaryCurveDefinition> curveDefsTornadoAndCrossPlot;
for ( auto address : allAddresses ) for ( auto address : allAddresses )
{ {
if ( address.category() == RifEclipseSummaryAddress::SUMMARY_FIELD ) auto it = std::find( matrixQuantityNames.begin(),
matrixQuantityNames.end(),
QString::fromStdString( address.uiText() ) );
if ( it != matrixQuantityNames.end() || matrixQuantityNames.empty() )
{ {
curveDefsMatrix.push_back( RiaSummaryCurveDefinition( nullptr, address, ensembles.front() ) ); curveDefsMatrix.push_back( RiaSummaryCurveDefinition( nullptr, address, ensembles.front() ) );
if ( quantityName.empty() || quantityName == address.quantityName() ) }
{
curveDefsTornadoAndCrossPlot.push_back( if ( tornadoAndCrossPlotQuantityName.isEmpty() ||
RiaSummaryCurveDefinition( nullptr, address, ensembles.front() ) ); tornadoAndCrossPlotQuantityName == QString::fromStdString( address.uiText() ) )
} {
curveDefsTornadoAndCrossPlot.push_back( RiaSummaryCurveDefinition( nullptr, address, ensembles.front() ) );
} }
} }
plot->matrixPlot()->setCurveDefinitions( curveDefsMatrix ); plot->matrixPlot()->setCurveDefinitions( curveDefsMatrix );
plot->correlationPlot()->setCurveDefinitions( curveDefsTornadoAndCrossPlot ); plot->correlationPlot()->setCurveDefinitions( curveDefsTornadoAndCrossPlot );
plot->crossPlot()->setCurveDefinitions( curveDefsTornadoAndCrossPlot ); plot->crossPlot()->setCurveDefinitions( curveDefsTornadoAndCrossPlot );
@@ -301,10 +306,11 @@ void RimCorrelationPlotCollection::applyFirstEnsembleFieldAddressesToReport( Rim
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RimCorrelationPlotCollection::applyEnsembleFieldAndTimeStepToReport( RimCorrelationReportPlot* plot, void RimCorrelationPlotCollection::applyEnsembleFieldAndTimeStepToReport( RimCorrelationReportPlot* plot,
RimSummaryCaseCollection* ensemble, RimSummaryCaseCollection* ensemble,
const std::string& quantityName, const std::vector<QString>& matrixQuantityNames,
std::time_t timeStep ) const QString& tornadoAndCrossPlotQuantityName,
std::time_t timeStep )
{ {
if ( ensemble ) if ( ensemble )
{ {
@@ -313,13 +319,18 @@ void RimCorrelationPlotCollection::applyEnsembleFieldAndTimeStepToReport( RimCor
std::vector<RiaSummaryCurveDefinition> curveDefsTornadoAndCrossPlot; std::vector<RiaSummaryCurveDefinition> curveDefsTornadoAndCrossPlot;
for ( auto address : allAddresses ) for ( auto address : allAddresses )
{ {
if ( address.category() == RifEclipseSummaryAddress::SUMMARY_FIELD ) auto it = std::find( matrixQuantityNames.begin(),
matrixQuantityNames.end(),
QString::fromStdString( address.uiText() ) );
if ( it != matrixQuantityNames.end() || matrixQuantityNames.empty() )
{ {
curveDefsMatrix.push_back( RiaSummaryCurveDefinition( nullptr, address, ensemble ) ); curveDefsMatrix.push_back( RiaSummaryCurveDefinition( nullptr, address, ensemble ) );
if ( quantityName.empty() || quantityName == address.quantityName() ) }
{
curveDefsTornadoAndCrossPlot.push_back( RiaSummaryCurveDefinition( nullptr, address, ensemble ) ); if ( tornadoAndCrossPlotQuantityName.isEmpty() ||
} tornadoAndCrossPlotQuantityName == QString::fromStdString( address.uiText() ) )
{
curveDefsTornadoAndCrossPlot.push_back( RiaSummaryCurveDefinition( nullptr, address, ensemble ) );
} }
} }
plot->matrixPlot()->setCurveDefinitions( curveDefsMatrix ); plot->matrixPlot()->setCurveDefinitions( curveDefsMatrix );

View File

@@ -22,6 +22,7 @@
#include "cafPdmObject.h" #include "cafPdmObject.h"
#include <ctime> #include <ctime>
#include <vector>
class RimAbstractCorrelationPlot; class RimAbstractCorrelationPlot;
class RimCorrelationPlot; class RimCorrelationPlot;
@@ -47,7 +48,9 @@ public:
createCorrelationPlot( RimSummaryCaseCollection* ensemble, const QString& quantityName, std::time_t timeStep ); createCorrelationPlot( RimSummaryCaseCollection* ensemble, const QString& quantityName, std::time_t timeStep );
RimCorrelationMatrixPlot* createCorrelationMatrixPlot( bool defaultToFirstEnsembleField = true ); RimCorrelationMatrixPlot* createCorrelationMatrixPlot( bool defaultToFirstEnsembleField = true );
RimCorrelationMatrixPlot* createCorrelationMatrixPlot( RimSummaryCaseCollection* ensemble, std::time_t timeStep ); RimCorrelationMatrixPlot* createCorrelationMatrixPlot( RimSummaryCaseCollection* ensemble,
const std::vector<QString>& quantityNames,
std::time_t timeStep );
RimParameterResultCrossPlot* createParameterResultCrossPlot( bool defaultToFirstEnsembleFopt = true ); RimParameterResultCrossPlot* createParameterResultCrossPlot( bool defaultToFirstEnsembleFopt = true );
RimParameterResultCrossPlot* createParameterResultCrossPlot( RimSummaryCaseCollection* ensemble, RimParameterResultCrossPlot* createParameterResultCrossPlot( RimSummaryCaseCollection* ensemble,
@@ -56,9 +59,10 @@ public:
std::time_t timeStep ); std::time_t timeStep );
RimCorrelationReportPlot* createCorrelationReportPlot( bool defaultToFirstEnsembleFopt = true ); RimCorrelationReportPlot* createCorrelationReportPlot( bool defaultToFirstEnsembleFopt = true );
RimCorrelationReportPlot* createCorrelationReportPlot( RimSummaryCaseCollection* ensemble, RimCorrelationReportPlot* createCorrelationReportPlot( RimSummaryCaseCollection* ensemble,
const QString& quantityName, const std::vector<QString>& matrixQuantityNames,
std::time_t timeStep ); const QString& tornadoAndCrossPlotQuantityName,
std::time_t timeStep );
void removePlot( RimAbstractCorrelationPlot* correlationPlot ); void removePlot( RimAbstractCorrelationPlot* correlationPlot );
void removeReport( RimCorrelationReportPlot* correlationReport ); void removeReport( RimCorrelationReportPlot* correlationReport );
@@ -69,16 +73,20 @@ public:
void deleteAllChildObjects(); void deleteAllChildObjects();
private: private:
void applyFirstEnsembleFieldAddressesToPlot( RimAbstractCorrelationPlot* plot, const std::string& quantityName = "" ); void applyFirstEnsembleFieldAddressesToPlot( RimAbstractCorrelationPlot* plot,
const std::vector<QString>& quantityNames = {} );
void applyEnsembleFieldAndTimeStepToPlot( RimAbstractCorrelationPlot* plot, void applyEnsembleFieldAndTimeStepToPlot( RimAbstractCorrelationPlot* plot,
RimSummaryCaseCollection* ensemble, RimSummaryCaseCollection* ensemble,
const std::string& quantityName, const std::vector<QString>& quantityNames,
std::time_t timeStep ); std::time_t timeStep );
void applyFirstEnsembleFieldAddressesToReport( RimCorrelationReportPlot* plot, const std::string& quantityName = "" ); void applyFirstEnsembleFieldAddressesToReport( RimCorrelationReportPlot* plot,
void applyEnsembleFieldAndTimeStepToReport( RimCorrelationReportPlot* plot, const std::vector<QString>& matrixQuantityNames,
RimSummaryCaseCollection* ensemble, const QString& tornadoAndCrossPlotQuantityName );
const std::string& quantityName, void applyEnsembleFieldAndTimeStepToReport( RimCorrelationReportPlot* plot,
std::time_t timeStep ); RimSummaryCaseCollection* ensemble,
const std::vector<QString>& matrixQuantityNames,
const QString& tornadoAndCrossPlotQuantityName,
std::time_t timeStep );
private: private:
caf::PdmChildArrayField<RimAbstractCorrelationPlot*> m_correlationPlots; caf::PdmChildArrayField<RimAbstractCorrelationPlot*> m_correlationPlots;

View File

@@ -961,7 +961,7 @@ void RimWellPltPlot::fieldChangedByUi( const caf::PdmFieldHandle* changedField,
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RimWellPltPlot::defineUiTreeOrdering( caf::PdmUiTreeOrdering& uiTreeOrdering, QString uiConfigName ) void RimWellPltPlot::defineUiTreeOrdering( caf::PdmUiTreeOrdering& uiTreeOrdering, QString uiConfigName )
{ {
uiTreeOrdering.skipRemainingChildren( true ); // uiTreeOrdering.skipRemainingChildren( true );
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------

View File

@@ -199,18 +199,42 @@ void RiuSummaryQwtPlot::contextMenuEvent( QContextMenuEvent* event )
{ {
std::time_t timeStep = summaryCurve->timeStepsY()[closestCurvePoint]; std::time_t timeStep = summaryCurve->timeStepsY()[closestCurvePoint];
RimEnsembleCurveSet* ensembleCurveSet = nullptr; RimSummaryCaseCollection* ensemble = nullptr;
summaryCurve->firstAncestorOrThisOfType( ensembleCurveSet ); QString clickedQuantityName;
QStringList allQuantityNamesInPlot;
if ( ensembleCurveSet ) RimEnsembleCurveSet* clickedEnsembleCurveSet = nullptr;
summaryCurve->firstAncestorOrThisOfType( clickedEnsembleCurveSet );
if ( clickedEnsembleCurveSet )
{ {
RimSummaryCaseCollection* ensemble = ensembleCurveSet->summaryCaseCollection(); ensemble = clickedEnsembleCurveSet->summaryCaseCollection();
if ( ensemble && ensemble->isEnsemble() ) if ( ensemble && ensemble->isEnsemble() )
{ {
EnsemblePlotParams params( ensemble, clickedQuantityName = QString::fromStdString( clickedEnsembleCurveSet->summaryAddress().uiText() );
QString::fromStdString( }
ensembleCurveSet->summaryAddress().quantityName() ), }
timeStep );
if ( distanceFromClick > 20 )
{
RimSummaryPlot* summaryPlot = static_cast<RimSummaryPlot*>( plotDefinition() );
std::vector<RimEnsembleCurveSet*> allCurveSetsInPlot;
summaryPlot->descendantsOfType( allCurveSetsInPlot );
for ( auto curveSet : allCurveSetsInPlot )
{
allQuantityNamesInPlot.push_back( QString::fromStdString( curveSet->summaryAddress().uiText() ) );
}
}
else
{
allQuantityNamesInPlot.push_back( clickedQuantityName );
}
if ( !clickedQuantityName.isEmpty() || !allQuantityNamesInPlot.isEmpty() )
{
if ( ensemble && ensemble->isEnsemble() )
{
EnsemblePlotParams params( ensemble, allQuantityNamesInPlot, clickedQuantityName, timeStep );
QVariant variant = QVariant::fromValue( params ); QVariant variant = QVariant::fromValue( params );
menuBuilder.addCmdFeatureWithUserData( "RicNewAnalysisPlotFeature", "New Analysis Plot", variant ); menuBuilder.addCmdFeatureWithUserData( "RicNewAnalysisPlotFeature", "New Analysis Plot", variant );
@@ -218,32 +242,38 @@ void RiuSummaryQwtPlot::contextMenuEvent( QContextMenuEvent* event )
menuBuilder.subMenuStart( "Create Correlation Plot From Curve Point", menuBuilder.subMenuStart( "Create Correlation Plot From Curve Point",
*caf::IconProvider( ":/CorrelationPlots16x16.png" ).icon() ); *caf::IconProvider( ":/CorrelationPlots16x16.png" ).icon() );
{ {
menuBuilder.addCmdFeatureWithUserData( "RicNewCorrelationPlotFeature", if ( !clickedQuantityName.isEmpty() )
"New Tornado Plot", {
variant ); menuBuilder.addCmdFeatureWithUserData( "RicNewCorrelationPlotFeature",
"New Tornado Plot",
variant );
}
menuBuilder.addCmdFeatureWithUserData( "RicNewCorrelationMatrixPlotFeature", menuBuilder.addCmdFeatureWithUserData( "RicNewCorrelationMatrixPlotFeature",
"New Matrix Plot", "New Matrix Plot",
variant ); variant );
menuBuilder.addCmdFeatureWithUserData( "RicNewCorrelationReportPlotFeature", menuBuilder.addCmdFeatureWithUserData( "RicNewCorrelationReportPlotFeature",
"New Report Plot", "New Report Plot",
variant ); variant );
menuBuilder.subMenuStart( "Cross Plots", if ( !clickedQuantityName.isEmpty() )
*caf::IconProvider( ":/CorrelationCrossPlot16x16.png" ).icon() );
std::vector<EnsembleParameter> ensembleParameters =
ensemble->variationSortedEnsembleParameters();
for ( const EnsembleParameter& param : ensembleParameters )
{ {
if ( param.variationBin >= (int)EnsembleParameter::LOW_VARIATION ) menuBuilder.subMenuStart( "Cross Plots",
*caf::IconProvider( ":/CorrelationCrossPlot16x16.png" ).icon() );
std::vector<EnsembleParameter> ensembleParameters =
ensemble->variationSortedEnsembleParameters();
for ( const EnsembleParameter& param : ensembleParameters )
{ {
params.ensembleParameter = param.name; if ( param.variationBin >= (int)EnsembleParameter::LOW_VARIATION )
variant = QVariant::fromValue( params ); {
menuBuilder.addCmdFeatureWithUserData( "RicNewParameterResultCrossPlotFeature", params.ensembleParameter = param.name;
QString( "New Cross Plot Against %1" ) variant = QVariant::fromValue( params );
.arg( param.uiName() ), menuBuilder.addCmdFeatureWithUserData( "RicNewParameterResultCrossPlotFeature",
variant ); QString( "New Cross Plot Against %1" )
.arg( param.uiName() ),
variant );
}
} }
menuBuilder.subMenuEnd();
} }
menuBuilder.subMenuEnd();
} }
menuBuilder.subMenuEnd(); menuBuilder.subMenuEnd();
} }