diff --git a/ApplicationCode/ProjectDataModel/RimIdenticalGridCaseGroup.cpp b/ApplicationCode/ProjectDataModel/RimIdenticalGridCaseGroup.cpp index b05b711df2..10981db99b 100644 --- a/ApplicationCode/ProjectDataModel/RimIdenticalGridCaseGroup.cpp +++ b/ApplicationCode/ProjectDataModel/RimIdenticalGridCaseGroup.cpp @@ -405,3 +405,18 @@ bool RimIdenticalGridCaseGroup::isStatisticsCaseCollection(RimCaseCollection* ri return false; } + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RimCase* RimIdenticalGridCaseGroup::mainCase() +{ + if(caseCollection()->reservoirs().size()) + { + return caseCollection()->reservoirs()[0]; + } + else + { + return NULL; + } +} diff --git a/ApplicationCode/ProjectDataModel/RimIdenticalGridCaseGroup.h b/ApplicationCode/ProjectDataModel/RimIdenticalGridCaseGroup.h index 7e379b4a10..c35eedb77e 100644 --- a/ApplicationCode/ProjectDataModel/RimIdenticalGridCaseGroup.h +++ b/ApplicationCode/ProjectDataModel/RimIdenticalGridCaseGroup.h @@ -43,37 +43,38 @@ public: RimIdenticalGridCaseGroup(); virtual ~RimIdenticalGridCaseGroup(); - caf::PdmField name; + caf::PdmField name; + caf::PdmField caseCollection; + caf::PdmField statisticsCaseCollection; - void addCase(RimCase* reservoir); - void removeCase(RimCase* reservoir); - bool contains(RimCase* reservoir) const; + void addCase(RimCase* reservoir); + void removeCase(RimCase* reservoir); + bool contains(RimCase* reservoir) const; - RimStatisticsCase* createAndAppendStatisticsCase(); + RimStatisticsCase* createAndAppendStatisticsCase(); - caf::PdmField caseCollection; - caf::PdmField statisticsCaseCollection; - void loadMainCaseAndActiveCellInfo(); + RimCase* mainCase(); + void loadMainCaseAndActiveCellInfo(); - RigMainGrid* mainGrid(); - RigActiveCellInfo* unionOfActiveCells(RifReaderInterface::PorosityModelResultType porosityType); + RigMainGrid* mainGrid(); - void computeUnionOfActiveCells(); + RigActiveCellInfo* unionOfActiveCells(RifReaderInterface::PorosityModelResultType porosityType); + void computeUnionOfActiveCells(); - static bool isStatisticsCaseCollection(RimCaseCollection* rimCaseCollection); + static bool isStatisticsCaseCollection(RimCaseCollection* rimCaseCollection); protected: - virtual caf::PdmFieldHandle* userDescriptionField(); + virtual caf::PdmFieldHandle* userDescriptionField(); private: - void updateMainGridAndActiveCellsForStatisticsCases(); - void clearStatisticsResults(); - void clearActiveCellUnions(); + void updateMainGridAndActiveCellsForStatisticsCases(); + void clearStatisticsResults(); + void clearActiveCellUnions(); private: - RigMainGrid* m_mainGrid; + RigMainGrid* m_mainGrid; - cvf::ref m_unionOfMatrixActiveCells; - cvf::ref m_unionOfFractureActiveCells; + cvf::ref m_unionOfMatrixActiveCells; + cvf::ref m_unionOfFractureActiveCells; }; diff --git a/ApplicationCode/ProjectDataModel/RimStatisticsCase.cpp b/ApplicationCode/ProjectDataModel/RimStatisticsCase.cpp index 1e2e6248a2..3974e4b491 100644 --- a/ApplicationCode/ProjectDataModel/RimStatisticsCase.cpp +++ b/ApplicationCode/ProjectDataModel/RimStatisticsCase.cpp @@ -58,6 +58,13 @@ RimStatisticsCase::RimStatisticsCase() CAF_PDM_InitFieldNoDefault(&m_selectedGeneratedProperties, "GeneratedPropertiesToCalculate", "", "", "", ""); CAF_PDM_InitFieldNoDefault(&m_selectedInputProperties, "InputPropertiesToCalculate", "", "", "", ""); + CAF_PDM_InitFieldNoDefault(&m_selectedFractureDynamicProperties, "FractureDynamicPropertiesToCalculate", "", "", "", ""); + CAF_PDM_InitFieldNoDefault(&m_selectedFractureStaticProperties, "FractureStaticPropertiesToCalculate", "", "", "", ""); + CAF_PDM_InitFieldNoDefault(&m_selectedFractureGeneratedProperties, "FractureGeneratedPropertiesToCalculate", "", "", "", ""); + CAF_PDM_InitFieldNoDefault(&m_selectedFractureInputProperties, "FractureInputPropertiesToCalculate", "", "", "", ""); + + + CAF_PDM_InitField(&m_calculatePercentiles, "CalculatePercentiles", true, "Calculate Percentiles", "", "", ""); CAF_PDM_InitFieldNoDefault(&m_percentileCalculationType, "PercentileCalculationType", "Method", "", "", ""); @@ -66,6 +73,7 @@ RimStatisticsCase::RimStatisticsCase() CAF_PDM_InitField(&m_highPercentile, "HighPercentile", 90.0, "High", "", "", ""); + updateSelectionListVisibilities(); } //-------------------------------------------------------------------------------------------------- @@ -246,12 +254,74 @@ void RimStatisticsCase::defineUiOrdering(QString uiConfigName, caf::PdmUiOrderin } +QList toOptionList(const QStringList& varList) +{ + QList optionList; + int i; + for (i = 0; i < varList.size(); ++i) + { + optionList.push_back(caf::PdmOptionItemInfo( varList[i], varList[i])); + } + return optionList; +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- QList RimStatisticsCase::calculateValueOptions(const caf::PdmFieldHandle* fieldNeedingOptions, bool * useOptionsOnly) { QList options; + if (useOptionsOnly) *useOptionsOnly = true; + + RimIdenticalGridCaseGroup* idgcg = caseGroup(); + if (!(caseGroup() && caseGroup()->mainCase() && caseGroup()->mainCase()->reservoirData())) + { + return options; + } + + RigCaseData* caseData = idgcg->mainCase()->reservoirData(); + + if (&m_selectedDynamicProperties == fieldNeedingOptions) + { + QStringList varList = caseData->results(RifReaderInterface::MATRIX_RESULTS)->resultNames(RimDefines::DYNAMIC_NATIVE); + return toOptionList(varList); + } + else if (&m_selectedStaticProperties == fieldNeedingOptions) + { + QStringList varList = caseData->results(RifReaderInterface::MATRIX_RESULTS)->resultNames(RimDefines::STATIC_NATIVE); + return toOptionList(varList); + } + else if (&m_selectedGeneratedProperties == fieldNeedingOptions) + { + QStringList varList = caseData->results(RifReaderInterface::MATRIX_RESULTS)->resultNames(RimDefines::GENERATED); + return toOptionList(varList); + } + else if (&m_selectedInputProperties == fieldNeedingOptions) + { + QStringList varList = caseData->results(RifReaderInterface::MATRIX_RESULTS)->resultNames(RimDefines::INPUT_PROPERTY); + return toOptionList(varList); + } + else if (&m_selectedFractureDynamicProperties == fieldNeedingOptions) + { + QStringList varList = caseData->results(RifReaderInterface::FRACTURE_RESULTS)->resultNames(RimDefines::DYNAMIC_NATIVE); + return toOptionList(varList); + } + else if (&m_selectedFractureStaticProperties == fieldNeedingOptions) + { + QStringList varList = caseData->results(RifReaderInterface::FRACTURE_RESULTS)->resultNames(RimDefines::STATIC_NATIVE); + return toOptionList(varList); + } + else if (&m_selectedFractureGeneratedProperties == fieldNeedingOptions) + { + QStringList varList = caseData->results(RifReaderInterface::FRACTURE_RESULTS)->resultNames(RimDefines::GENERATED); + return toOptionList(varList); + } + else if (&m_selectedFractureInputProperties == fieldNeedingOptions) + { + QStringList varList = caseData->results(RifReaderInterface::FRACTURE_RESULTS)->resultNames(RimDefines::INPUT_PROPERTY); + return toOptionList(varList); + } + return options; } @@ -260,5 +330,24 @@ QList RimStatisticsCase::calculateValueOptions(const caf //-------------------------------------------------------------------------------------------------- void RimStatisticsCase::fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue) { - + if (&m_resultType == changedField || &m_porosityModel == changedField) + { + updateSelectionListVisibilities(); + } +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimStatisticsCase::updateSelectionListVisibilities() +{ + m_selectedDynamicProperties.setUiHidden( !(m_porosityModel() == RimDefines::MATRIX_MODEL && m_resultType() == RimDefines::DYNAMIC_NATIVE)); + m_selectedStaticProperties.setUiHidden( !(m_porosityModel() == RimDefines::MATRIX_MODEL && m_resultType() == RimDefines::STATIC_NATIVE)); + m_selectedGeneratedProperties.setUiHidden( !(m_porosityModel() == RimDefines::MATRIX_MODEL && m_resultType() == RimDefines::GENERATED)); + m_selectedInputProperties.setUiHidden( !(m_porosityModel() == RimDefines::MATRIX_MODEL && m_resultType() == RimDefines::INPUT_PROPERTY)); + + m_selectedFractureDynamicProperties.setUiHidden( !(m_porosityModel() == RimDefines::FRACTURE_MODEL && m_resultType() == RimDefines::DYNAMIC_NATIVE)); + m_selectedFractureStaticProperties.setUiHidden( !(m_porosityModel() == RimDefines::FRACTURE_MODEL && m_resultType() == RimDefines::STATIC_NATIVE)); + m_selectedFractureGeneratedProperties.setUiHidden( !(m_porosityModel() == RimDefines::FRACTURE_MODEL && m_resultType() == RimDefines::GENERATED)); + m_selectedFractureInputProperties.setUiHidden( !(m_porosityModel() == RimDefines::FRACTURE_MODEL && m_resultType() == RimDefines::INPUT_PROPERTY)); } diff --git a/ApplicationCode/ProjectDataModel/RimStatisticsCase.h b/ApplicationCode/ProjectDataModel/RimStatisticsCase.h index 2b0e0df5fe..b5b526311f 100644 --- a/ApplicationCode/ProjectDataModel/RimStatisticsCase.h +++ b/ApplicationCode/ProjectDataModel/RimStatisticsCase.h @@ -46,26 +46,7 @@ public: void setMainGrid(RigMainGrid* mainGrid); - caf::PdmField< caf::AppEnum< RimDefines::ResultCatType > > m_resultType; - caf::PdmField< caf::AppEnum< RimDefines::PorosityModelType > > m_porosityModel; - caf::PdmField > m_selectedDynamicProperties; - caf::PdmField > m_selectedStaticProperties; - caf::PdmField > m_selectedGeneratedProperties; - caf::PdmField > m_selectedInputProperties; - - enum PercentileCalcType - { - EXACT, - HISTOGRAM_ESTIMATED - }; - - caf::PdmField< bool > m_calculatePercentiles; - caf::PdmField< caf::AppEnum< PercentileCalcType > > m_percentileCalculationType; - caf::PdmField m_lowPercentile; - caf::PdmField m_midPercentile; - caf::PdmField m_highPercentile; - void computeStatistics(); virtual bool openEclipseGridFile(); @@ -77,9 +58,37 @@ public: virtual QList calculateValueOptions( const caf::PdmFieldHandle* fieldNeedingOptions, bool * useOptionsOnly ); virtual void fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue); + enum PercentileCalcType + { + EXACT, + HISTOGRAM_ESTIMATED + }; + private: RimIdenticalGridCaseGroup* caseGroup(); void getSourceCases(std::vector& sourceCases); + void updateSelectionListVisibilities(); + + caf::PdmField< caf::AppEnum< RimDefines::ResultCatType > > m_resultType; + caf::PdmField< caf::AppEnum< RimDefines::PorosityModelType > > m_porosityModel; + + caf::PdmField > m_selectedDynamicProperties; + caf::PdmField > m_selectedStaticProperties; + caf::PdmField > m_selectedGeneratedProperties; + caf::PdmField > m_selectedInputProperties; + + caf::PdmField > m_selectedFractureDynamicProperties; + caf::PdmField > m_selectedFractureStaticProperties; + caf::PdmField > m_selectedFractureGeneratedProperties; + caf::PdmField > m_selectedFractureInputProperties; + + + caf::PdmField< bool > m_calculatePercentiles; + caf::PdmField< caf::AppEnum< PercentileCalcType > > m_percentileCalculationType; + caf::PdmField m_lowPercentile; + caf::PdmField m_midPercentile; + caf::PdmField m_highPercentile; + };