#1957 Observed Data : Add handling of custom well name

This commit is contained in:
Magne Sjaastad 2017-10-03 22:07:07 +02:00
parent 2546dc631a
commit 54063aece2
9 changed files with 109 additions and 17 deletions

View File

@ -49,7 +49,7 @@ RifColumnBasedUserData::~RifColumnBasedUserData()
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
bool RifColumnBasedUserData::parse(const QString& data)
bool RifColumnBasedUserData::parse(const QString& data, const QString& customWellName, const QString& customWellGroupName)
{
m_allResultAddresses.clear();
m_timeSteps.clear();
@ -129,6 +129,17 @@ bool RifColumnBasedUserData::parse(const QString& data)
if (ci.isAVector)
{
RifEclipseSummaryAddress sumAddress = ci.summaryAddress;
if (customWellName.size() > 0)
{
sumAddress.setWellName(customWellName.toStdString());
}
if (customWellGroupName.size() > 0)
{
sumAddress.setWellGroupName(customWellGroupName.toStdString());
}
m_allResultAddresses.push_back(sumAddress);
m_mapFromAddressToTimeStepIndex[sumAddress] = m_timeSteps.size() - 1;

View File

@ -42,7 +42,7 @@ public:
RifColumnBasedUserData();
~RifColumnBasedUserData();
bool parse(const QString& data);
bool parse(const QString& data, const QString& customWellName, const QString& customWellGroupName);
virtual const std::vector<time_t>& timeSteps(const RifEclipseSummaryAddress& resultAddress) const override;

View File

@ -53,7 +53,7 @@ RifKeywordVectorUserData::~RifKeywordVectorUserData()
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
bool RifKeywordVectorUserData::parse(const QString& data)
bool RifKeywordVectorUserData::parse(const QString& data, const QString& customWellName)
{
m_allResultAddresses.clear();
m_timeSteps.clear();
@ -87,6 +87,9 @@ bool RifKeywordVectorUserData::parse(const QString& data)
// Find all time vectors
std::map<QString, size_t> mapFromOriginToTimeStepIndex;
for (size_t i = 0; i < keyValuePairVector.size(); i++)
{
const std::map<QString, QString>& keyValuePairs = keyValuePairVector[i];
@ -136,7 +139,7 @@ bool RifKeywordVectorUserData::parse(const QString& data)
QString originText = valueForKey(keyValuePairs, "ORIGIN");
m_mapFromOriginToTimeStepIndex[originText] = m_timeSteps.size() - 1;
mapFromOriginToTimeStepIndex[originText] = m_timeSteps.size() - 1;
}
}
@ -151,17 +154,23 @@ bool RifKeywordVectorUserData::parse(const QString& data)
if (isVectorHeader(keyValuePairs))
{
QString originText = valueForKey(keyValuePairs, "ORIGIN");
auto timeStepIndexIterator = m_mapFromOriginToTimeStepIndex.find(originText);
if (timeStepIndexIterator != m_mapFromOriginToTimeStepIndex.end())
auto timeStepIndexIterator = mapFromOriginToTimeStepIndex.find(originText);
if (timeStepIndexIterator != mapFromOriginToTimeStepIndex.end())
{
QString vectorText = valueForKey(keyValuePairs, "VECTOR");
QString wellName = originText;
if (customWellName.size() > 0)
{
wellName = customWellName;
}
RifEclipseSummaryAddress addr(RifEclipseSummaryAddress::SUMMARY_WELL,
vectorText.toStdString(),
-1,
-1,
"",
originText.toStdString(),
wellName.toStdString(),
-1,
"",
-1,

View File

@ -42,7 +42,7 @@ public:
RifKeywordVectorUserData();
~RifKeywordVectorUserData();
bool parse(const QString& data);
bool parse(const QString& data, const QString& customWellName);
virtual const std::vector<time_t>& timeSteps(const RifEclipseSummaryAddress& resultAddress) const override;
@ -61,7 +61,6 @@ private:
std::vector< std::vector<time_t> > m_timeSteps;
std::map<QString, size_t> m_mapFromOriginToTimeStepIndex;
std::map<RifEclipseSummaryAddress, size_t> m_mapFromAddressToVectorIndex;
std::map<RifEclipseSummaryAddress, size_t> m_mapFromAddressToTimeIndex;
};

View File

@ -34,13 +34,14 @@ RimObservedData::RimObservedData()
{
m_isObservedData = true;
CAF_PDM_InitFieldNoDefault(&m_summaryCategory, "SummaryType", "Summary Type", "", "", "");
CAF_PDM_InitFieldNoDefault(&m_identifierName, "IdentifierName", "Identifier Name", "", "", "");
CAF_PDM_InitFieldNoDefault(&m_importedSummaryData, "ImportedSummaryData", "Imported Summary Data", "", "", "");
m_importedSummaryData.uiCapability()->setUiEditorTypeName(caf::PdmUiTextEditor::uiEditorTypeName());
m_importedSummaryData.uiCapability()->setUiReadOnly(true);
m_importedSummaryData.xmlCapability()->disableIO();
CAF_PDM_InitFieldNoDefault(&m_useCustomIdentifier, "UseCustomIdentifier", "Use Custom Identifier", "", "", "");
CAF_PDM_InitField(&m_summaryCategory, "SummaryType", caf::AppEnum<RifEclipseSummaryAddress::SummaryVarCategory>(RifEclipseSummaryAddress::SUMMARY_WELL), "Summary Type", "", "", "");
CAF_PDM_InitFieldNoDefault(&m_identifierName, "IdentifierName", "Identifier Name", "", "", "");
}
//--------------------------------------------------------------------------------------------------
@ -96,3 +97,67 @@ void RimObservedData::updateMetaData()
m_importedSummaryData = QString::fromStdString(metaDataString);
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
QString RimObservedData::customWellName() const
{
if (m_useCustomIdentifier() && m_summaryCategory() == RifEclipseSummaryAddress::SUMMARY_WELL)
{
return m_identifierName();
}
return "";
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
QString RimObservedData::customWellGroupName() const
{
if (m_useCustomIdentifier() && m_summaryCategory() == RifEclipseSummaryAddress::SUMMARY_WELL_GROUP)
{
return m_identifierName();
}
return "";
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
QList<caf::PdmOptionItemInfo> RimObservedData::calculateValueOptions(const caf::PdmFieldHandle* fieldNeedingOptions, bool* useOptionsOnly)
{
if (fieldNeedingOptions == &m_summaryCategory)
{
QList<caf::PdmOptionItemInfo> options;
using AddressAppEnum = caf::AppEnum<RifEclipseSummaryAddress::SummaryVarCategory>;
options.push_back(caf::PdmOptionItemInfo(AddressAppEnum::uiText(RifEclipseSummaryAddress::SUMMARY_WELL), RifEclipseSummaryAddress::SUMMARY_WELL));
options.push_back(caf::PdmOptionItemInfo(AddressAppEnum::uiText(RifEclipseSummaryAddress::SUMMARY_WELL_GROUP), RifEclipseSummaryAddress::SUMMARY_WELL_GROUP));
return options;
}
return RimSummaryCase::calculateValueOptions(fieldNeedingOptions, useOptionsOnly);
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimObservedData::fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue)
{
if (changedField == &m_useCustomIdentifier ||
changedField == &m_summaryCategory ||
changedField == &m_identifierName)
{
createSummaryReaderInterface();
updateMetaData();
return;
}
RimSummaryCase::fieldChangedByUi(changedField, oldValue, newValue);
}

View File

@ -44,9 +44,18 @@ public:
void updateMetaData();
protected:
QString customWellName() const;
QString customWellGroupName() const;
private:
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;
private:
caf::PdmField<caf::AppEnum<RifEclipseSummaryAddress::SummaryVarCategory> > m_summaryCategory;
caf::PdmField<QString> m_identifierName;
caf::PdmField<bool> m_useCustomIdentifier;
caf::PdmField<QString> m_importedSummaryData;
};

View File

@ -74,7 +74,7 @@ void RimObservedEclipseUserData::createSummaryReaderInterface()
if (RifKeywordVectorParser::canBeParsed(fileContents))
{
RifKeywordVectorUserData* keywordVectorUserData = new RifKeywordVectorUserData();
if (keywordVectorUserData->parse(fileContents))
if (keywordVectorUserData->parse(fileContents, customWellName()))
{
m_summeryReader = keywordVectorUserData;
}
@ -82,7 +82,7 @@ void RimObservedEclipseUserData::createSummaryReaderInterface()
else
{
RifColumnBasedUserData* columnBaseUserData = new RifColumnBasedUserData();
if (!columnBaseUserData->parse(fileContents))
if (!columnBaseUserData->parse(fileContents, customWellName(), customWellGroupName()))
{
columnBaseUserData = nullptr;
}

View File

@ -52,6 +52,7 @@ public:
bool isObservedData();
protected:
virtual void fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue);
void updateTreeItemName();
caf::PdmField<QString> m_shortName;
@ -60,7 +61,5 @@ protected:
bool m_isObservedData;
private:
// Overridden PDM methods
virtual void fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue);
virtual void initAfterRead() override;
};

View File

@ -644,7 +644,7 @@ TEST(RifKeywordBasedRsmspecParserTest, TestTimeSteps)
RifColumnBasedUserData columnBasedUserdata;
columnBasedUserdata.parse(data);
columnBasedUserdata.parse(data, "", "");
std::vector<time_t> timeSteps = columnBasedUserdata.timeSteps(address);
QDateTime startDate = QDateTime::fromString("01012004", "ddMMyyyy");