mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
#2660 Ensemble curves filtering. Refactoring
This commit is contained in:
parent
58ba0b2882
commit
3aa7204191
@ -19,6 +19,7 @@
|
||||
#include "RimEnsembleCurveFilter.h"
|
||||
#include "RimEnsembleCurveFilterCollection.h"
|
||||
#include "RimEnsembleCurveSet.h"
|
||||
#include "RimSummaryCase.h"
|
||||
|
||||
#include "cafPdmUiDoubleSliderEditor.h"
|
||||
|
||||
@ -55,30 +56,6 @@ bool RimEnsembleCurveFilter::isActive() const
|
||||
return (!coll || coll->isActive()) && m_active;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
QString RimEnsembleCurveFilter::ensembleParameter() const
|
||||
{
|
||||
return m_ensembleParameter;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
double RimEnsembleCurveFilter::minValue() const
|
||||
{
|
||||
return m_minValue;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
double RimEnsembleCurveFilter::maxValue() const
|
||||
{
|
||||
return m_maxValue;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@ -185,6 +162,52 @@ void RimEnsembleCurveFilter::defineUiOrdering(QString uiConfigName, caf::PdmUiOr
|
||||
uiOrdering.skipRemainingFields(true);
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
std::vector<RimSummaryCase*> RimEnsembleCurveFilter::applyFilter(const std::vector<RimSummaryCase*>& allSumCases)
|
||||
{
|
||||
auto curveSet = parentCurveSet();
|
||||
auto ensemble = curveSet ? curveSet->summaryCaseCollection() : nullptr;
|
||||
if (!ensemble || !isActive()) return allSumCases;
|
||||
|
||||
std::set<RimSummaryCase*> casesToRemove;
|
||||
for (const auto& sumCase : allSumCases)
|
||||
{
|
||||
auto eParam = ensemble->ensembleParameter(m_ensembleParameter());
|
||||
if (!eParam.isValid()) continue;
|
||||
if (!sumCase->caseRealizationParameters()) continue;
|
||||
|
||||
auto crpValue = sumCase->caseRealizationParameters()->parameterValue(m_ensembleParameter());
|
||||
|
||||
if (eParam.isNumeric())
|
||||
{
|
||||
if (!crpValue.isNumeric() ||
|
||||
crpValue.numericValue() < m_minValue() ||
|
||||
crpValue.numericValue() > m_maxValue())
|
||||
{
|
||||
casesToRemove.insert(sumCase);
|
||||
}
|
||||
}
|
||||
else if (eParam.isText())
|
||||
{
|
||||
const auto& filterCategories = categories();
|
||||
if (!crpValue.isText() ||
|
||||
std::count(filterCategories.begin(), filterCategories.end(), crpValue.textValue()) == 0)
|
||||
{
|
||||
casesToRemove.insert(sumCase);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
std::vector<RimSummaryCase*> filteredCases;
|
||||
std::set<RimSummaryCase*> allCasesSet(allSumCases.begin(), allSumCases.end());
|
||||
std::set_difference(allCasesSet.begin(), allCasesSet.end(),
|
||||
casesToRemove.begin(), casesToRemove.end(),
|
||||
std::inserter(filteredCases, filteredCases.end()));
|
||||
return filteredCases;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
|
@ -23,6 +23,7 @@
|
||||
#include "cafPdmObject.h"
|
||||
|
||||
class RimEnsembleCurveSet;
|
||||
class RimSummaryCase;
|
||||
|
||||
//==================================================================================================
|
||||
///
|
||||
@ -35,15 +36,14 @@ public:
|
||||
RimEnsembleCurveFilter();
|
||||
|
||||
bool isActive() const;
|
||||
QString ensembleParameter() const;
|
||||
double minValue() const;
|
||||
double maxValue() const;
|
||||
std::set<QString> categories() const;
|
||||
|
||||
virtual QList<caf::PdmOptionItemInfo> calculateValueOptions(const caf::PdmFieldHandle* fieldNeedingOptions, bool* useOptionsOnly) override;
|
||||
virtual void fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue) override;
|
||||
virtual void defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering) override;
|
||||
|
||||
std::vector<RimSummaryCase*> applyFilter(const std::vector<RimSummaryCase*>& allSumCases);
|
||||
|
||||
protected:
|
||||
virtual caf::PdmFieldHandle* objectToggleField();
|
||||
|
||||
|
@ -930,51 +930,14 @@ std::vector<RimSummaryCase*> RimEnsembleCurveSet::filterEnsembleCases(const RimS
|
||||
{
|
||||
if (!ensemble) return std::vector<RimSummaryCase*>();
|
||||
|
||||
std::set<RimSummaryCase*> notIncludeCases;
|
||||
if (!m_curveFilters->filters().empty())
|
||||
auto sumCases = ensemble->allSummaryCases();
|
||||
|
||||
for (auto& filter : m_curveFilters->filters())
|
||||
{
|
||||
for (const auto& sumCase : ensemble->allSummaryCases())
|
||||
{
|
||||
for (const auto& filter : m_curveFilters()->filters())
|
||||
{
|
||||
if (!filter->isActive()) continue;
|
||||
auto eParam = ensemble->ensembleParameter(filter->ensembleParameter());
|
||||
if (!eParam.isValid()) continue;
|
||||
if (!sumCase->caseRealizationParameters()) continue;
|
||||
|
||||
auto crpValue = sumCase->caseRealizationParameters()->parameterValue(filter->ensembleParameter());
|
||||
|
||||
if (eParam.isNumeric())
|
||||
{
|
||||
if (!crpValue.isNumeric() ||
|
||||
crpValue.numericValue() < filter->minValue() ||
|
||||
crpValue.numericValue() > filter->maxValue())
|
||||
{
|
||||
notIncludeCases.insert(sumCase);
|
||||
break;
|
||||
}
|
||||
}
|
||||
else if (eParam.isText())
|
||||
{
|
||||
const auto& filterCategories = filter->categories();
|
||||
if (!crpValue.isText() ||
|
||||
std::count(filterCategories.begin(), filterCategories.end(), crpValue.textValue()) == 0)
|
||||
{
|
||||
notIncludeCases.insert(sumCase);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
sumCases = filter->applyFilter(sumCases);
|
||||
}
|
||||
|
||||
std::vector<RimSummaryCase*> filteredCases;
|
||||
const auto& allSumCaseVector = ensemble->allSummaryCases();
|
||||
std::set<RimSummaryCase*> allCasesSet(allSumCaseVector.begin(), allSumCaseVector.end());
|
||||
std::set_difference(allCasesSet.begin(), allCasesSet.end(),
|
||||
notIncludeCases.begin(), notIncludeCases.end(),
|
||||
std::inserter(filteredCases, filteredCases.end()));
|
||||
return filteredCases;
|
||||
return sumCases;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
|
Loading…
Reference in New Issue
Block a user