From 1cab88e9c5592bfc5c7378dff91ea249e664bde8 Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Fri, 18 Oct 2019 14:22:15 +0200 Subject: [PATCH 1/2] #4877 Detect correct accumulation type for statistics curves --- .../FileInterface/RifEclipseSummaryAddress.cpp | 16 ++++++++++++---- .../FileInterface/RifEclipseSummaryAddress.h | 2 +- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/ApplicationCode/FileInterface/RifEclipseSummaryAddress.cpp b/ApplicationCode/FileInterface/RifEclipseSummaryAddress.cpp index fa8abce8f0..63a71959b4 100644 --- a/ApplicationCode/FileInterface/RifEclipseSummaryAddress.cpp +++ b/ApplicationCode/FileInterface/RifEclipseSummaryAddress.cpp @@ -784,7 +784,14 @@ bool RifEclipseSummaryAddress::hasAccumulatedData() const { if ( !isValidEclipseCategory() ) return false; - QString qBaseName = QString::fromStdString( baseQuantityName( quantityName() ) ); + QString quantityForInspection = QString::fromStdString( quantityName() ); + if ( category() == SUMMARY_ENSEMBLE_STATISTICS ) + { + // Remove statistics text prefix + quantityForInspection = quantityForInspection.mid( quantityForInspection.indexOf( ":" ) + 1 ); + } + + QString qBaseName = baseQuantityName( quantityForInspection ); return qBaseName.endsWith( "T" ) || qBaseName.endsWith( "TH" ); } @@ -809,6 +816,7 @@ bool RifEclipseSummaryAddress::isValidEclipseCategory() const case SUMMARY_WELL_SEGMENT: case SUMMARY_BLOCK: case SUMMARY_BLOCK_LGR: + case SUMMARY_ENSEMBLE_STATISTICS: return true; } return false; @@ -817,13 +825,13 @@ bool RifEclipseSummaryAddress::isValidEclipseCategory() const //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -std::string RifEclipseSummaryAddress::baseQuantityName( const std::string& quantityName ) +QString RifEclipseSummaryAddress::baseQuantityName( const QString& quantityName ) { - QString qBaseName = QString::fromStdString( quantityName ); + QString qBaseName = quantityName; if ( qBaseName.size() == 8 ) qBaseName.chop( 3 ); while ( qBaseName.endsWith( "_" ) ) qBaseName.chop( 1 ); - return qBaseName.toStdString(); + return qBaseName; } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationCode/FileInterface/RifEclipseSummaryAddress.h b/ApplicationCode/FileInterface/RifEclipseSummaryAddress.h index 90cc92fd65..d84e1f438e 100644 --- a/ApplicationCode/FileInterface/RifEclipseSummaryAddress.h +++ b/ApplicationCode/FileInterface/RifEclipseSummaryAddress.h @@ -252,7 +252,7 @@ public: private: bool isValidEclipseCategory() const; - static std::string baseQuantityName( const std::string& quantityName ); + static QString baseQuantityName( const QString& quantityName ); static std::tuple ijkTupleFromUiText( const std::string& s ); std::string formatUiTextRegionToRegion() const; std::pair regionToRegionPairFromUiText( const std::string& s ); From 537184328a77e82aa354cdedbbcd4d7175399234 Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Fri, 18 Oct 2019 14:28:02 +0200 Subject: [PATCH 2/2] #4877 Refactor and rename to RiuSummaryQuantityNameInfoProvider --- .../RifEclipseSummaryAddress.cpp | 6 +-- .../Summary/RimSummaryCurvesCalculator.cpp | 6 +-- .../Summary/RimSummaryPlotNameHelper.cpp | 4 +- .../RiuSummaryVectorDescriptionMap-Test.cpp | 36 ++++++++------ .../UserInterface/CMakeLists_files.cmake | 4 +- .../RiuSummaryCurveDefSelection.cpp | 7 +-- ...=> RiuSummaryQuantityNameInfoProvider.cpp} | 42 ++++++++++------ ...h => RiuSummaryQuantityNameInfoProvider.h} | 49 ++++++++++--------- 8 files changed, 87 insertions(+), 67 deletions(-) rename ApplicationCode/UserInterface/{RiuSummaryVectorDescriptionMap.cpp => RiuSummaryQuantityNameInfoProvider.cpp} (99%) rename ApplicationCode/UserInterface/{RiuSummaryVectorDescriptionMap.h => RiuSummaryQuantityNameInfoProvider.h} (52%) diff --git a/ApplicationCode/FileInterface/RifEclipseSummaryAddress.cpp b/ApplicationCode/FileInterface/RifEclipseSummaryAddress.cpp index 63a71959b4..37b38edac5 100644 --- a/ApplicationCode/FileInterface/RifEclipseSummaryAddress.cpp +++ b/ApplicationCode/FileInterface/RifEclipseSummaryAddress.cpp @@ -20,7 +20,7 @@ #include "RiaStdStringTools.h" -#include "RiuSummaryVectorDescriptionMap.h" +#include "RiuSummaryQuantityNameInfoProvider.h" #include #include @@ -285,8 +285,8 @@ RifEclipseSummaryAddress::SummaryVarCategory RifEclipseSummaryAddress::identifyC if ( !regexp.exactMatch( QString::fromStdString( quantityName ) ) ) return SUMMARY_INVALID; // First, try to lookup vector in vector table - auto vectorInfo = RiuSummaryVectorDescriptionMap::instance()->vectorInfo( quantityName ); - if ( vectorInfo.category != SUMMARY_INVALID ) return vectorInfo.category; + auto category = RiuSummaryQuantityNameInfoProvider::instance()->categoryFromQuantityName( quantityName ); + if ( category != SUMMARY_INVALID ) return category; // Then check LGR categories std::string firstTwoLetters = quantityName.substr( 0, 2 ); diff --git a/ApplicationCode/ProjectDataModel/Summary/RimSummaryCurvesCalculator.cpp b/ApplicationCode/ProjectDataModel/Summary/RimSummaryCurvesCalculator.cpp index 666f88a012..2548e46609 100644 --- a/ApplicationCode/ProjectDataModel/Summary/RimSummaryCurvesCalculator.cpp +++ b/ApplicationCode/ProjectDataModel/Summary/RimSummaryCurvesCalculator.cpp @@ -24,8 +24,8 @@ #include "RimPlotAxisProperties.h" #include "RimSummaryCurve.h" +#include "RiuSummaryQuantityNameInfoProvider.h" #include "RiuSummaryQwtPlot.h" -#include "RiuSummaryVectorDescriptionMap.h" #include "qwt_plot_curve.h" #include "qwt_scale_draw.h" @@ -226,8 +226,8 @@ QString RimSummaryPlotYAxisFormatter::autoAxisTitle() const { if ( m_axisProperties->showDescription() ) { - quantityNameForDisplay = RiuSummaryVectorDescriptionMap::instance()->vectorLongName( quantityName, - true ); + quantityNameForDisplay = RiuSummaryQuantityNameInfoProvider::instance() + ->longNameFromQuantityName( quantityName, true ); } if ( m_axisProperties->showAcronym() ) diff --git a/ApplicationCode/ProjectDataModel/Summary/RimSummaryPlotNameHelper.cpp b/ApplicationCode/ProjectDataModel/Summary/RimSummaryPlotNameHelper.cpp index 396707e64d..d69b55fe01 100644 --- a/ApplicationCode/ProjectDataModel/Summary/RimSummaryPlotNameHelper.cpp +++ b/ApplicationCode/ProjectDataModel/Summary/RimSummaryPlotNameHelper.cpp @@ -23,7 +23,7 @@ #include "RimSummaryCase.h" #include "RimSummaryCaseCollection.h" -#include "RiuSummaryVectorDescriptionMap.h" +#include "RiuSummaryQuantityNameInfoProvider.h" //-------------------------------------------------------------------------------------------------- /// @@ -139,7 +139,7 @@ QString RimSummaryPlotNameHelper::plotTitle() const { if ( !title.isEmpty() ) title += ", "; title += QString::fromStdString( - RiuSummaryVectorDescriptionMap::instance()->vectorLongName( m_titleQuantity, true ) ); + RiuSummaryQuantityNameInfoProvider::instance()->longNameFromQuantityName( m_titleQuantity, true ) ); } if ( title.isEmpty() ) diff --git a/ApplicationCode/UnitTests/RiuSummaryVectorDescriptionMap-Test.cpp b/ApplicationCode/UnitTests/RiuSummaryVectorDescriptionMap-Test.cpp index e8e391fc4e..4aa0d1d353 100644 --- a/ApplicationCode/UnitTests/RiuSummaryVectorDescriptionMap-Test.cpp +++ b/ApplicationCode/UnitTests/RiuSummaryVectorDescriptionMap-Test.cpp @@ -1,45 +1,48 @@ #include "gtest/gtest.h" -#include "RiuSummaryVectorDescriptionMap.h" +#include "RiuSummaryQuantityNameInfoProvider.h" //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -TEST( RiuSummaryVectorDescriptionMap, TestInit ) +TEST( RiuSummaryQuantityNameInfoProvider, TestInit ) { { std::string s( "SRSFC" ); - auto test = RiuSummaryVectorDescriptionMap::instance()->vectorInfo( s ); + auto cat = RiuSummaryQuantityNameInfoProvider::instance()->categoryFromQuantityName( s ); + EXPECT_TRUE( cat == RifEclipseSummaryAddress::SUMMARY_WELL_SEGMENT ); - EXPECT_TRUE( test.category == RifEclipseSummaryAddress::SUMMARY_WELL_SEGMENT ); - EXPECT_TRUE( test.longName == "Reach brine concentration" ); + auto longName = RiuSummaryQuantityNameInfoProvider::instance()->longNameFromQuantityName( s ); + EXPECT_TRUE( longName == "Reach brine concentration" ); } { std::string s( "SRSFC" ); - auto test = RiuSummaryVectorDescriptionMap::instance()->vectorLongName( s ); + auto test = RiuSummaryQuantityNameInfoProvider::instance()->longNameFromQuantityName( s ); EXPECT_TRUE( test == "Reach brine concentration" ); } { std::string s( "does not exist" ); - auto test = RiuSummaryVectorDescriptionMap::instance()->vectorInfo( s ); + auto cat = RiuSummaryQuantityNameInfoProvider::instance()->categoryFromQuantityName( s ); + EXPECT_TRUE( cat == RifEclipseSummaryAddress::SUMMARY_INVALID ); - EXPECT_TRUE( test.category == RifEclipseSummaryAddress::SUMMARY_INVALID ); - EXPECT_TRUE( test.longName == "" ); + auto longName = RiuSummaryQuantityNameInfoProvider::instance()->longNameFromQuantityName( s ); + + EXPECT_TRUE( longName == "" ); } { std::string s( "does not exist" ); - auto test = RiuSummaryVectorDescriptionMap::instance()->vectorLongName( s ); + auto test = RiuSummaryQuantityNameInfoProvider::instance()->longNameFromQuantityName( s ); EXPECT_TRUE( test == "" ); } { std::string s( "does not exist" ); - auto test = RiuSummaryVectorDescriptionMap::instance()->vectorLongName( s, true ); + auto test = RiuSummaryQuantityNameInfoProvider::instance()->longNameFromQuantityName( s, true ); EXPECT_TRUE( test == s ); } @@ -48,19 +51,20 @@ TEST( RiuSummaryVectorDescriptionMap, TestInit ) //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -TEST( RiuSummaryVectorDescriptionMap, TestCustomNaming ) +TEST( RiuSummaryQuantityNameInfoProvider, TestCustomNaming ) { { std::string s( "SRSFCABC" ); - auto test = RiuSummaryVectorDescriptionMap::instance()->vectorInfo( s ); + auto cat = RiuSummaryQuantityNameInfoProvider::instance()->categoryFromQuantityName( s ); + EXPECT_TRUE( cat == RifEclipseSummaryAddress::SUMMARY_WELL_SEGMENT ); - EXPECT_TRUE( test.category == RifEclipseSummaryAddress::SUMMARY_WELL_SEGMENT ); - EXPECT_TRUE( test.longName == "Reach brine concentration" ); + auto longName = RiuSummaryQuantityNameInfoProvider::instance()->longNameFromQuantityName( s ); + EXPECT_TRUE( longName == "Reach brine concentration" ); } { std::string s( "BHD__ABC" ); - auto test = RiuSummaryVectorDescriptionMap::instance()->vectorLongName( s ); + auto test = RiuSummaryQuantityNameInfoProvider::instance()->longNameFromQuantityName( s ); EXPECT_TRUE( test == "Hydraulic head" ); } diff --git a/ApplicationCode/UserInterface/CMakeLists_files.cmake b/ApplicationCode/UserInterface/CMakeLists_files.cmake index 4aaa08a96c..9989e0da46 100644 --- a/ApplicationCode/UserInterface/CMakeLists_files.cmake +++ b/ApplicationCode/UserInterface/CMakeLists_files.cmake @@ -67,7 +67,7 @@ ${CMAKE_CURRENT_LIST_DIR}/RiuSummaryCurveDefinitionKeywords.h ${CMAKE_CURRENT_LIST_DIR}/RiuSummaryCurveDefSelection.h ${CMAKE_CURRENT_LIST_DIR}/RiuSummaryCurveDefSelectionDialog.h ${CMAKE_CURRENT_LIST_DIR}/RiuSummaryCurveDefSelectionEditor.h -${CMAKE_CURRENT_LIST_DIR}/RiuSummaryVectorDescriptionMap.h +${CMAKE_CURRENT_LIST_DIR}/RiuSummaryQuantityNameInfoProvider.h ${CMAKE_CURRENT_LIST_DIR}/RiuExpressionContextMenuManager.h ${CMAKE_CURRENT_LIST_DIR}/RiuCalculationsContextMenuManager.h ${CMAKE_CURRENT_LIST_DIR}/RiuGridStatisticsHistogramWidget.h @@ -151,7 +151,7 @@ ${CMAKE_CURRENT_LIST_DIR}/RiuContextMenuLauncher.cpp ${CMAKE_CURRENT_LIST_DIR}/RiuSummaryCurveDefSelection.cpp ${CMAKE_CURRENT_LIST_DIR}/RiuSummaryCurveDefSelectionDialog.cpp ${CMAKE_CURRENT_LIST_DIR}/RiuSummaryCurveDefSelectionEditor.cpp -${CMAKE_CURRENT_LIST_DIR}/RiuSummaryVectorDescriptionMap.cpp +${CMAKE_CURRENT_LIST_DIR}/RiuSummaryQuantityNameInfoProvider.cpp ${CMAKE_CURRENT_LIST_DIR}/RiuExpressionContextMenuManager.cpp ${CMAKE_CURRENT_LIST_DIR}/RiuCalculationsContextMenuManager.cpp ${CMAKE_CURRENT_LIST_DIR}/RiuGridStatisticsHistogramWidget.cpp diff --git a/ApplicationCode/UserInterface/RiuSummaryCurveDefSelection.cpp b/ApplicationCode/UserInterface/RiuSummaryCurveDefSelection.cpp index dc213565e2..4f2809372a 100644 --- a/ApplicationCode/UserInterface/RiuSummaryCurveDefSelection.cpp +++ b/ApplicationCode/UserInterface/RiuSummaryCurveDefSelection.cpp @@ -38,7 +38,7 @@ #include "RimSummaryCaseMainCollection.h" #include "RiuSummaryCurveDefinitionKeywords.h" -#include "RiuSummaryVectorDescriptionMap.h" +#include "RiuSummaryQuantityNameInfoProvider.h" #include "cafPdmPointer.h" #include "cafPdmUiFieldHandle.h" @@ -1506,8 +1506,9 @@ void RiuSummaryCurveDefSelection::appendOptionItemsForSubCategoriesAndVectors( if ( isVectorField ) { - std::string longVectorName = RiuSummaryVectorDescriptionMap::instance()->vectorLongName( itemName, true ); - displayName = QString::fromStdString( longVectorName ); + std::string longVectorName = RiuSummaryQuantityNameInfoProvider::instance() + ->longNameFromQuantityName( itemName, true ); + displayName = QString::fromStdString( longVectorName ); displayName += QString( " (%1)" ).arg( QString::fromStdString( itemName ) ); } else diff --git a/ApplicationCode/UserInterface/RiuSummaryVectorDescriptionMap.cpp b/ApplicationCode/UserInterface/RiuSummaryQuantityNameInfoProvider.cpp similarity index 99% rename from ApplicationCode/UserInterface/RiuSummaryVectorDescriptionMap.cpp rename to ApplicationCode/UserInterface/RiuSummaryQuantityNameInfoProvider.cpp index 1429bde979..6640d9d2e3 100644 --- a/ApplicationCode/UserInterface/RiuSummaryVectorDescriptionMap.cpp +++ b/ApplicationCode/UserInterface/RiuSummaryQuantityNameInfoProvider.cpp @@ -16,33 +16,45 @@ // ///////////////////////////////////////////////////////////////////////////////// -#include "RiuSummaryVectorDescriptionMap.h" +#include "RiuSummaryQuantityNameInfoProvider.h" //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -RiuSummaryVectorDescriptionMap* RiuSummaryVectorDescriptionMap::instance() +RiuSummaryQuantityNameInfoProvider* RiuSummaryQuantityNameInfoProvider::instance() { - static RiuSummaryVectorDescriptionMap* singleton = new RiuSummaryVectorDescriptionMap; + static RiuSummaryQuantityNameInfoProvider* singleton = new RiuSummaryQuantityNameInfoProvider; return singleton; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -RiuSummaryVectorInfo RiuSummaryVectorDescriptionMap::vectorInfo( const std::string& vectorName ) +RifEclipseSummaryAddress::SummaryVarCategory + RiuSummaryQuantityNameInfoProvider::categoryFromQuantityName( const std::string& quantity ) const { - std::map::iterator it = m_summaryToDescMap.find( vectorName ); + auto info = quantityInfo( quantity ); + + return info.category; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RiuSummaryQuantityNameInfoProvider::RiuSummaryQuantityInfo + RiuSummaryQuantityNameInfoProvider::quantityInfo( const std::string& quantity ) const +{ + auto it = m_summaryToDescMap.find( quantity ); if ( it != m_summaryToDescMap.end() ) { return it->second; } - else if ( vectorName.size() > 1 && vectorName[1] == 'U' ) + else if ( quantity.size() > 1 && quantity[1] == 'U' ) { // User defined vector name - std::string key = vectorName.substr( 0, 2 ); + std::string key = quantity.substr( 0, 2 ); it = m_summaryToDescMap.find( key ); @@ -51,11 +63,11 @@ RiuSummaryVectorInfo RiuSummaryVectorDescriptionMap::vectorInfo( const std::stri return it->second; } } - else if ( vectorName.size() > 5 ) + else if ( quantity.size() > 5 ) { // Check for custom vector naming - std::string baseName = vectorName.substr( 0, 5 ); + std::string baseName = quantity.substr( 0, 5 ); while ( baseName.back() == '_' ) baseName.pop_back(); @@ -67,16 +79,16 @@ RiuSummaryVectorInfo RiuSummaryVectorDescriptionMap::vectorInfo( const std::stri } } - return RiuSummaryVectorInfo(); + return RiuSummaryQuantityInfo(); } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -std::string RiuSummaryVectorDescriptionMap::vectorLongName( const std::string& vectorName, - bool returnVectorNameIfNotFound ) +std::string RiuSummaryQuantityNameInfoProvider::longNameFromQuantityName( const std::string& vectorName, + bool returnVectorNameIfNotFound ) const { - auto info = vectorInfo( vectorName ); + auto info = quantityInfo( vectorName ); return info.category != RifEclipseSummaryAddress::SUMMARY_INVALID || !returnVectorNameIfNotFound ? info.longName : vectorName; } @@ -84,7 +96,7 @@ std::string RiuSummaryVectorDescriptionMap::vectorLongName( const std::string& v //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -RiuSummaryVectorDescriptionMap::RiuSummaryVectorDescriptionMap() +RiuSummaryQuantityNameInfoProvider::RiuSummaryQuantityNameInfoProvider() { populateFieldToInfoMap(); } @@ -92,7 +104,7 @@ RiuSummaryVectorDescriptionMap::RiuSummaryVectorDescriptionMap() //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RiuSummaryVectorDescriptionMap::populateFieldToInfoMap() +void RiuSummaryQuantityNameInfoProvider::populateFieldToInfoMap() { using A = RifEclipseSummaryAddress; diff --git a/ApplicationCode/UserInterface/RiuSummaryVectorDescriptionMap.h b/ApplicationCode/UserInterface/RiuSummaryQuantityNameInfoProvider.h similarity index 52% rename from ApplicationCode/UserInterface/RiuSummaryVectorDescriptionMap.h rename to ApplicationCode/UserInterface/RiuSummaryQuantityNameInfoProvider.h index 9952ee865f..6de324dbc1 100644 --- a/ApplicationCode/UserInterface/RiuSummaryVectorDescriptionMap.h +++ b/ApplicationCode/UserInterface/RiuSummaryQuantityNameInfoProvider.h @@ -23,38 +23,41 @@ #include #include -class RiuSummaryVectorInfo -{ -public: - RiuSummaryVectorInfo() - : category( RifEclipseSummaryAddress::SUMMARY_INVALID ) - { - } - RiuSummaryVectorInfo( RifEclipseSummaryAddress::SummaryVarCategory category, const std::string& longName ) - : category( category ) - , longName( longName ) - { - } - - RifEclipseSummaryAddress::SummaryVarCategory category; - std::string longName; -}; - //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -class RiuSummaryVectorDescriptionMap +class RiuSummaryQuantityNameInfoProvider { public: - static RiuSummaryVectorDescriptionMap* instance(); + static RiuSummaryQuantityNameInfoProvider* instance(); - RiuSummaryVectorInfo vectorInfo( const std::string& vectorName ); - std::string vectorLongName( const std::string& vectorName, bool returnVectorNameIfNotFound = false ); + RifEclipseSummaryAddress::SummaryVarCategory categoryFromQuantityName( const std::string& quantity ) const; + std::string longNameFromQuantityName( const std::string& quantity, bool returnVectorNameIfNotFound = false ) const; private: - RiuSummaryVectorDescriptionMap(); + class RiuSummaryQuantityInfo + { + public: + RiuSummaryQuantityInfo() + : category( RifEclipseSummaryAddress::SUMMARY_INVALID ) + { + } + RiuSummaryQuantityInfo( RifEclipseSummaryAddress::SummaryVarCategory category, const std::string& longName ) + : category( category ) + , longName( longName ) + { + } + + RifEclipseSummaryAddress::SummaryVarCategory category; + std::string longName; + }; + +private: + RiuSummaryQuantityNameInfoProvider(); void populateFieldToInfoMap(); + RiuSummaryQuantityInfo quantityInfo( const std::string& quantity ) const; + private: - std::map m_summaryToDescMap; + std::map m_summaryToDescMap; };