mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
#1966 Observed Data : Use first item in DATE column as startdate for YEARS
This commit is contained in:
parent
4016681286
commit
56cd53a5f0
@ -66,19 +66,42 @@ bool RifColumnBasedUserData::parse(const QString& data, const QString& customWel
|
|||||||
|
|
||||||
for (size_t tableIndex = 0; tableIndex < m_parser->tables().size(); tableIndex++)
|
for (size_t tableIndex = 0; tableIndex < m_parser->tables().size(); tableIndex++)
|
||||||
{
|
{
|
||||||
size_t timeColumnIndex = m_parser->tables()[tableIndex].size();
|
|
||||||
|
|
||||||
// Find time index
|
// Find time index
|
||||||
|
size_t dateColumnIndex = m_parser->tables()[tableIndex].size();
|
||||||
|
size_t dayOrYearColumnIndex = m_parser->tables()[tableIndex].size();
|
||||||
|
|
||||||
for (size_t columIndex = 0; columIndex < m_parser->tables()[tableIndex].size(); columIndex++)
|
for (size_t columIndex = 0; columIndex < m_parser->tables()[tableIndex].size(); columIndex++)
|
||||||
{
|
{
|
||||||
const ColumnInfo& ci = m_parser->tables()[tableIndex][columIndex];
|
const ColumnInfo& ci = m_parser->tables()[tableIndex][columIndex];
|
||||||
if (!ci.isAVector)
|
if (!ci.isAVector)
|
||||||
{
|
{
|
||||||
timeColumnIndex = columIndex;
|
QString unit = QString::fromStdString(ci.unitName).trimmed().toUpper();
|
||||||
break;
|
if (unit == "DATE" ||
|
||||||
|
unit == "DATES")
|
||||||
|
{
|
||||||
|
dateColumnIndex = columIndex;
|
||||||
|
}
|
||||||
|
else if (unit == "DAY" ||
|
||||||
|
unit == "DAYS" ||
|
||||||
|
unit == "YEAR" ||
|
||||||
|
unit == "YEARS")
|
||||||
|
{
|
||||||
|
dayOrYearColumnIndex = columIndex;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
size_t timeColumnIndex = m_parser->tables()[tableIndex].size();
|
||||||
|
if (dayOrYearColumnIndex < m_parser->tables()[tableIndex].size())
|
||||||
|
{
|
||||||
|
timeColumnIndex = dayOrYearColumnIndex;
|
||||||
|
}
|
||||||
|
else if (dateColumnIndex < m_parser->tables()[tableIndex].size())
|
||||||
|
{
|
||||||
|
timeColumnIndex = dateColumnIndex;
|
||||||
|
}
|
||||||
|
|
||||||
if (timeColumnIndex == m_parser->tables()[tableIndex].size())
|
if (timeColumnIndex == m_parser->tables()[tableIndex].size())
|
||||||
{
|
{
|
||||||
RiaLogging::warning(QString("Failed to find time data for table %1 in file %2").arg(tableIndex));
|
RiaLogging::warning(QString("Failed to find time data for table %1 in file %2").arg(tableIndex));
|
||||||
@ -88,16 +111,23 @@ bool RifColumnBasedUserData::parse(const QString& data, const QString& customWel
|
|||||||
{
|
{
|
||||||
const ColumnInfo& ci = m_parser->tables()[tableIndex][timeColumnIndex];
|
const ColumnInfo& ci = m_parser->tables()[tableIndex][timeColumnIndex];
|
||||||
QDateTime startDate;
|
QDateTime startDate;
|
||||||
QString startDateString = QString::fromStdString(ci.startDate);
|
if (ci.startQDateTime.isValid())
|
||||||
if (!startDateString.isEmpty())
|
|
||||||
{
|
{
|
||||||
QString dateFormatString = "ddMMyyyy";
|
startDate = ci.startQDateTime;
|
||||||
|
|
||||||
startDate = RiaQDateTimeTools::fromString(startDateString, dateFormatString);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
startDate = RiaQDateTimeTools::epoch();
|
QString startDateString = QString::fromStdString(ci.startDateString);
|
||||||
|
if (!startDateString.isEmpty())
|
||||||
|
{
|
||||||
|
QString dateFormatString = "ddMMyyyy";
|
||||||
|
|
||||||
|
startDate = RiaQDateTimeTools::fromString(startDateString, dateFormatString);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
startDate = RiaQDateTimeTools::epoch();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
m_timeSteps.resize(m_timeSteps.size() + 1);
|
m_timeSteps.resize(m_timeSteps.size() + 1);
|
||||||
|
@ -20,6 +20,7 @@
|
|||||||
|
|
||||||
#include "RifEclipseUserDataParserTools.h"
|
#include "RifEclipseUserDataParserTools.h"
|
||||||
|
|
||||||
|
#include "RiaDateStringParser.h"
|
||||||
#include "RiaLogging.h"
|
#include "RiaLogging.h"
|
||||||
|
|
||||||
#include "cvfAssert.h"
|
#include "cvfAssert.h"
|
||||||
@ -62,6 +63,21 @@ void RifColumnBasedUserDataParser::parseData(const QString& data)
|
|||||||
std::string line;
|
std::string line;
|
||||||
std::getline(streamData, line);
|
std::getline(streamData, line);
|
||||||
|
|
||||||
|
size_t dateColumnIndex = table.size();
|
||||||
|
for (size_t i = 0; i < columnCount; i++)
|
||||||
|
{
|
||||||
|
if (table[i].summaryAddress.quantityName() == "DATE" ||
|
||||||
|
table[i].summaryAddress.quantityName() == "DATES")
|
||||||
|
{
|
||||||
|
dateColumnIndex = i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// If a DATE column is present, use the first date as the start date of the samples
|
||||||
|
// This date is then used as basis for times defined by days or years given as double values
|
||||||
|
QDateTime startDate;
|
||||||
|
startDate.setTimeSpec(Qt::UTC);
|
||||||
|
|
||||||
std::vector<double> values;
|
std::vector<double> values;
|
||||||
QString qLine;
|
QString qLine;
|
||||||
do
|
do
|
||||||
@ -73,12 +89,30 @@ void RifColumnBasedUserDataParser::parseData(const QString& data)
|
|||||||
|
|
||||||
for (size_t i = 0; i < columnCount; i++)
|
for (size_t i = 0; i < columnCount; i++)
|
||||||
{
|
{
|
||||||
|
if (dateColumnIndex < columnCount && !startDate.isValid())
|
||||||
|
{
|
||||||
|
QDate candidate = RiaDateStringParser::parseDateString(entries[static_cast<int>(dateColumnIndex)].toStdString());
|
||||||
|
if (candidate.isValid())
|
||||||
|
{
|
||||||
|
startDate.setDate(candidate);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
double entry = entries.at(static_cast<int>(i)).toDouble();
|
double entry = entries.at(static_cast<int>(i)).toDouble();
|
||||||
table[i].values.push_back(entry);
|
table[i].values.push_back(entry);
|
||||||
}
|
}
|
||||||
} while (std::getline(streamData, line));
|
} while (std::getline(streamData, line));
|
||||||
|
|
||||||
|
if (startDate.isValid())
|
||||||
|
{
|
||||||
|
for (auto& ci : table)
|
||||||
|
{
|
||||||
|
ci.startQDateTime = startDate;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
m_tables.push_back(table);
|
m_tables.push_back(table);
|
||||||
|
|
||||||
} while (streamData.good());
|
} while (streamData.good());
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -379,8 +379,8 @@ std::vector<ColumnInfo> RifEclipseUserDataParserTools::columnInfoForTable(std::s
|
|||||||
ColumnInfo columnInfo;
|
ColumnInfo columnInfo;
|
||||||
columnInfo.unitName = unit;
|
columnInfo.unitName = unit;
|
||||||
columnInfo.origin = origin;
|
columnInfo.origin = origin;
|
||||||
columnInfo.dateFormat = dateFormat;
|
columnInfo.dateFormatString = dateFormat;
|
||||||
columnInfo.startDate = startDate;
|
columnInfo.startDateString = startDate;
|
||||||
table.push_back(columnInfo);
|
table.push_back(columnInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -35,9 +35,10 @@ struct ColumnInfo
|
|||||||
std::string unitName;
|
std::string unitName;
|
||||||
double scaleFactor;
|
double scaleFactor;
|
||||||
std::vector<double> values;
|
std::vector<double> values;
|
||||||
std::string dateFormat;
|
|
||||||
std::string startDate;
|
|
||||||
std::string origin;
|
std::string origin;
|
||||||
|
std::string dateFormatString;
|
||||||
|
std::string startDateString;
|
||||||
|
QDateTime startQDateTime;
|
||||||
};
|
};
|
||||||
|
|
||||||
//==================================================================================================
|
//==================================================================================================
|
||||||
|
@ -291,13 +291,13 @@ TEST(RifColumnBasedRsmspecParserTest, TestKeywordsAndMissingUnitName)
|
|||||||
|
|
||||||
std::vector< std::vector<ColumnInfo> > tables = parser.tables();
|
std::vector< std::vector<ColumnInfo> > tables = parser.tables();
|
||||||
ASSERT_EQ(2, tables.size());
|
ASSERT_EQ(2, tables.size());
|
||||||
EXPECT_EQ("112000", tables[0].at(0).startDate);
|
EXPECT_EQ("112000", tables[0].at(0).startDateString);
|
||||||
EXPECT_EQ("OP-1_TR", tables[0].at(0).origin);
|
EXPECT_EQ("OP-1_TR", tables[0].at(0).origin);
|
||||||
EXPECT_EQ("DD/MM/YY", tables[0].at(0).dateFormat);
|
EXPECT_EQ("DD/MM/YY", tables[0].at(0).dateFormatString);
|
||||||
|
|
||||||
EXPECT_EQ("112000", tables[1].at(0).startDate);
|
EXPECT_EQ("112000", tables[1].at(0).startDateString);
|
||||||
EXPECT_EQ("OP-2_TR", tables[1].at(0).origin);
|
EXPECT_EQ("OP-2_TR", tables[1].at(0).origin);
|
||||||
EXPECT_EQ("DD/MM/YY", tables[1].at(0).dateFormat);
|
EXPECT_EQ("DD/MM/YY", tables[1].at(0).dateFormatString);
|
||||||
|
|
||||||
// Assume missing units at start of row
|
// Assume missing units at start of row
|
||||||
EXPECT_EQ("", tables[0].at(0).unitName);
|
EXPECT_EQ("", tables[0].at(0).unitName);
|
||||||
|
Loading…
Reference in New Issue
Block a user