#3173 Summary plot export. Include error data in plot export

This commit is contained in:
Bjørn Erik Jensen 2018-07-10 13:55:54 +02:00
parent f50497ea72
commit 532cbe01e9
4 changed files with 54 additions and 7 deletions

View File

@ -17,6 +17,8 @@
/////////////////////////////////////////////////////////////////////////////////
#pragma once
#include "RifEclipseSummaryAddress.h"
#include "cafPdmField.h"
#include "cafPdmFieldCvfColor.h"
#include "cafPdmObject.h"
@ -94,7 +96,7 @@ public:
void updateCurveNameNoLegendUpdate();
QString curveName() const { return m_curveName; }
virtual QString curveExportDescription() const { return m_curveName; }
virtual QString curveExportDescription(const RifEclipseSummaryAddress& address = RifEclipseSummaryAddress()) const { return m_curveName; }
void setCustomName(const QString& customName);
void updateCurveVisibility(bool updateParentPlot);
void updateLegendEntryVisibilityAndPlotLegend();

View File

@ -256,6 +256,33 @@ std::vector<double> RimSummaryCurve::valuesY() const
return values;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RifEclipseSummaryAddress RimSummaryCurve::errorSummaryAddressY() const
{
auto addr = summaryAddressY();
addr.setAsErrorResult();
return addr;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
std::vector<double> RimSummaryCurve::errorValuesY() const
{
std::vector<double> values;
RifSummaryReaderInterface* reader = valuesSummaryReaderY();
if (!reader) return values;
RifEclipseSummaryAddress addr = errorSummaryAddressY();
reader->values(addr, &values);
return values;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
@ -652,9 +679,9 @@ void RimSummaryCurve::applyCurveAutoNameSettings(const RimSummaryCurveAutoName&
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
QString RimSummaryCurve::curveExportDescription() const
QString RimSummaryCurve::curveExportDescription(const RifEclipseSummaryAddress& address) const
{
auto address = m_yValuesCurveVariable->address();
auto addr = address.isValid() ? address : m_yValuesCurveVariable->address();
RimEnsembleCurveSetCollection* coll;
firstAncestorOrThisOfType(coll);
@ -665,14 +692,14 @@ QString RimSummaryCurve::curveExportDescription() const
if (group && group->isEnsemble())
{
return QString("%1.%2.%3")
.arg(QString::fromStdString(address.uiText()))
.arg(QString::fromStdString(addr.uiText()))
.arg(m_yValuesSummaryCase->caseName())
.arg(group->name());
}
else
{
return QString("%1.%2")
.arg(QString::fromStdString(address.uiText()))
.arg(QString::fromStdString(addr.uiText()))
.arg(m_yValuesSummaryCase->caseName());
}
}

View File

@ -58,6 +58,8 @@ public:
RifEclipseSummaryAddress summaryAddressY() const;
std::string unitNameY() const;
std::vector<double> valuesY() const;
RifEclipseSummaryAddress errorSummaryAddressY() const;
std::vector<double> errorValuesY() const;
void setLeftOrRightAxisY(RiaDefines::PlotAxis plotAxis);
RiaDefines::PlotAxis axisY() const;
const std::vector<time_t>& timeStepsY() const;
@ -74,7 +76,7 @@ public:
void updateQwtPlotAxis();
void applyCurveAutoNameSettings(const RimSummaryCurveAutoName& autoNameSettings);
virtual QString curveExportDescription() const override;
virtual QString curveExportDescription(const RifEclipseSummaryAddress& address = RifEclipseSummaryAddress()) const override;
void forceUpdateCurveAppearanceFromCaseType();
protected:

View File

@ -1734,16 +1734,32 @@ void populateSummaryCurvesData(std::vector<RimSummaryCurve*> curves, SummaryCurv
}
CurveData curveData = { curve->curveExportDescription(), curve->summaryAddressY(), curve->valuesY() };
CurveData errorCurveData;
// Error data
auto errorValues = curve->errorValuesY();
bool hasErrorData = !errorValues.empty();
if (hasErrorData)
{
errorCurveData.name = curve->curveExportDescription(curve->errorSummaryAddressY());
errorCurveData.address = curve->errorSummaryAddressY();
errorCurveData.values = errorValues;
}
if (casePosInList == cvf::UNDEFINED_SIZE_T)
{
auto curveDataList = std::vector<CurveData>({ curveData });
if (hasErrorData) curveDataList.push_back(errorCurveData);
curvesData->caseNames.push_back(curveCaseName);
curvesData->timeSteps.push_back(curve->timeStepsY());
curvesData->allCurveData.push_back(std::vector<CurveData>({ curveData }));
curvesData->allCurveData.push_back(curveDataList);
}
else
{
curvesData->allCurveData[casePosInList].push_back(curveData);
if(hasErrorData) curvesData->allCurveData[casePosInList].push_back(errorCurveData);
}
}
}