mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-10 15:36:09 -06:00
#3057 Resampled plot export. Add more resample periods. Add unit tests
This commit is contained in:
parent
ef5ef6d9ca
commit
d5ec3b1db3
@ -32,7 +32,10 @@
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
const DateTimeSpan RiaQDateTimeTools::TIMESPAN_DECADE = DateTimeSpan(10, 0, 0);
|
||||
const DateTimeSpan RiaQDateTimeTools::TIMESPAN_YEAR = DateTimeSpan(1, 0, 0);
|
||||
const DateTimeSpan RiaQDateTimeTools::TIMESPAN_HALFYEAR = DateTimeSpan(0, 6, 0);
|
||||
const DateTimeSpan RiaQDateTimeTools::TIMESPAN_QUARTER = DateTimeSpan(0, 3, 0);
|
||||
const DateTimeSpan RiaQDateTimeTools::TIMESPAN_MONTH = DateTimeSpan(0, 1, 0);
|
||||
const DateTimeSpan RiaQDateTimeTools::TIMESPAN_WEEK = DateTimeSpan(0, 0, 7);
|
||||
const DateTimeSpan RiaQDateTimeTools::TIMESPAN_DAY = DateTimeSpan(0, 0, 1);
|
||||
|
||||
|
||||
@ -260,7 +263,10 @@ const DateTimeSpan RiaQDateTimeTools::timeSpan(DateTimePeriod period)
|
||||
{
|
||||
case DateTimePeriod::DECADE: return TIMESPAN_DECADE;
|
||||
case DateTimePeriod::YEAR: return TIMESPAN_YEAR;
|
||||
case DateTimePeriod::HALFYEAR: return TIMESPAN_HALFYEAR;
|
||||
case DateTimePeriod::QUARTER: return TIMESPAN_QUARTER;
|
||||
case DateTimePeriod::MONTH: return TIMESPAN_MONTH;
|
||||
case DateTimePeriod::WEEK: return TIMESPAN_WEEK;
|
||||
case DateTimePeriod::DAY: return TIMESPAN_DAY;
|
||||
}
|
||||
CVF_ASSERT(false);
|
||||
@ -272,12 +278,20 @@ const DateTimeSpan RiaQDateTimeTools::timeSpan(DateTimePeriod period)
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
QDateTime RiaQDateTimeTools::truncateTime(const QDateTime& dt, DateTimePeriod period)
|
||||
{
|
||||
int y = dt.date().year();
|
||||
int m = dt.date().month();
|
||||
int d = dt.date().day();
|
||||
int dow = dt.date().dayOfWeek();
|
||||
|
||||
switch (period)
|
||||
{
|
||||
case DateTimePeriod::DECADE: return createUtcDateTime(QDate((dt.date().year() / 10) * 10, 1, 1));
|
||||
case DateTimePeriod::YEAR: return createUtcDateTime(QDate(dt.date().year(), 1, 1));
|
||||
case DateTimePeriod::MONTH: return createUtcDateTime(QDate(dt.date().year(), dt.date().month(), 1));
|
||||
case DateTimePeriod::DAY: return createUtcDateTime(QDate(dt.date().year(), dt.date().month(), dt.date().day()));
|
||||
case DateTimePeriod::DECADE: return createUtcDateTime(QDate((y / 10) * 10, 1, 1));
|
||||
case DateTimePeriod::YEAR: return createUtcDateTime(QDate(y, 1, 1));
|
||||
case DateTimePeriod::HALFYEAR: return createUtcDateTime(QDate(y, ((m - 1) / 6) * 6 + 1, 1));
|
||||
case DateTimePeriod::QUARTER: return createUtcDateTime(QDate(y, ((m - 1) / 3) * 3 + 1, 1));
|
||||
case DateTimePeriod::MONTH: return createUtcDateTime(QDate(y, m, 1));
|
||||
case DateTimePeriod::WEEK: return createUtcDateTime(QDate(y, m, d).addDays(-dow + 1));
|
||||
case DateTimePeriod::DAY: return createUtcDateTime(QDate(y, m, d));
|
||||
}
|
||||
CVF_ASSERT(false);
|
||||
return createUtcDateTime();
|
||||
|
@ -35,7 +35,10 @@ enum class DateTimePeriod
|
||||
{
|
||||
DECADE,
|
||||
YEAR,
|
||||
HALFYEAR,
|
||||
QUARTER,
|
||||
MONTH,
|
||||
WEEK,
|
||||
DAY
|
||||
};
|
||||
|
||||
@ -46,7 +49,10 @@ class RiaQDateTimeTools
|
||||
{
|
||||
static const DateTimeSpan TIMESPAN_DECADE;
|
||||
static const DateTimeSpan TIMESPAN_YEAR;
|
||||
static const DateTimeSpan TIMESPAN_HALFYEAR;
|
||||
static const DateTimeSpan TIMESPAN_QUARTER;
|
||||
static const DateTimeSpan TIMESPAN_MONTH;
|
||||
static const DateTimeSpan TIMESPAN_WEEK;
|
||||
static const DateTimeSpan TIMESPAN_DAY;
|
||||
|
||||
public:
|
||||
|
@ -192,10 +192,9 @@ void RiaTimeHistoryCurveResampler::computeResampledTimeSteps(DateTimePeriod peri
|
||||
|
||||
clearData();
|
||||
auto currTimeStep = firstResampledTimeStep(firstOriginalTimeStep, period);
|
||||
|
||||
while (QDT::lessThanOrEqualTo(currTimeStep, lastOriginalTimeStep))
|
||||
{
|
||||
auto ss1 = currTimeStep.toString();
|
||||
|
||||
m_timeSteps.push_back(currTimeStep.toTime_t());
|
||||
currTimeStep = QDT::addPeriod(currTimeStep, period);
|
||||
}
|
||||
|
@ -46,6 +46,205 @@ TEST(RiaTimeHistoryCurveResampler, Test_Resampling_NoPeriod)
|
||||
EXPECT_EQ(0, (int)resampler.resampledTimeSteps().size());
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
TEST(RiaTimeHistoryCurveResampler, Test_Resampling_Decade)
|
||||
{
|
||||
std::vector<QString> timeStrings(
|
||||
{
|
||||
"1989-02-03",
|
||||
"2005-06-06",
|
||||
"2012-02-07"
|
||||
}
|
||||
);
|
||||
|
||||
std::vector<double> dataValues(
|
||||
{
|
||||
0.0,
|
||||
0.0,
|
||||
0.0
|
||||
}
|
||||
);
|
||||
|
||||
RiaTimeHistoryCurveResampler resampler;
|
||||
resampler.setCurveData(dataValues, toTime_tVector(timeStrings));
|
||||
resampler.resampleAndComputeWeightedMeanValues(DateTimePeriod::DECADE);
|
||||
|
||||
EXPECT_EQ(3, (int)resampler.resampledTimeSteps().size());
|
||||
EXPECT_EQ(toTime_t("1990-01-01"), resampler.resampledTimeSteps()[0]);
|
||||
EXPECT_EQ(toTime_t("2000-01-01"), resampler.resampledTimeSteps()[1]);
|
||||
EXPECT_EQ(toTime_t("2010-01-01"), resampler.resampledTimeSteps()[2]);
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
TEST(RiaTimeHistoryCurveResampler, Test_Resampling_Year)
|
||||
{
|
||||
std::vector<QString> timeStrings(
|
||||
{
|
||||
"2014-06-06",
|
||||
"2015-12-02",
|
||||
"2018-02-07"
|
||||
}
|
||||
);
|
||||
|
||||
std::vector<double> dataValues(
|
||||
{
|
||||
0.0,
|
||||
0.0,
|
||||
0.0
|
||||
}
|
||||
);
|
||||
|
||||
RiaTimeHistoryCurveResampler resampler;
|
||||
resampler.setCurveData(dataValues, toTime_tVector(timeStrings));
|
||||
resampler.resampleAndComputeWeightedMeanValues(DateTimePeriod::YEAR);
|
||||
|
||||
EXPECT_EQ(4, (int)resampler.resampledTimeSteps().size());
|
||||
EXPECT_EQ(toTime_t("2015-01-01"), resampler.resampledTimeSteps()[0]);
|
||||
EXPECT_EQ(toTime_t("2016-01-01"), resampler.resampledTimeSteps()[1]);
|
||||
EXPECT_EQ(toTime_t("2017-01-01"), resampler.resampledTimeSteps()[2]);
|
||||
EXPECT_EQ(toTime_t("2018-01-01"), resampler.resampledTimeSteps()[3]);
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
TEST(RiaTimeHistoryCurveResampler, Test_Resampling_HalfYear)
|
||||
{
|
||||
std::vector<QString> timeStrings(
|
||||
{
|
||||
"2016-06-06",
|
||||
"2017-03-02",
|
||||
"2018-02-07"
|
||||
}
|
||||
);
|
||||
|
||||
std::vector<double> dataValues(
|
||||
{
|
||||
0.0,
|
||||
0.0,
|
||||
0.0
|
||||
}
|
||||
);
|
||||
|
||||
RiaTimeHistoryCurveResampler resampler;
|
||||
resampler.setCurveData(dataValues, toTime_tVector(timeStrings));
|
||||
resampler.resampleAndComputeWeightedMeanValues(DateTimePeriod::HALFYEAR);
|
||||
|
||||
EXPECT_EQ(4, (int)resampler.resampledTimeSteps().size());
|
||||
EXPECT_EQ(toTime_t("2016-07-01"), resampler.resampledTimeSteps()[0]);
|
||||
EXPECT_EQ(toTime_t("2017-01-01"), resampler.resampledTimeSteps()[1]);
|
||||
EXPECT_EQ(toTime_t("2017-07-01"), resampler.resampledTimeSteps()[2]);
|
||||
EXPECT_EQ(toTime_t("2018-01-01"), resampler.resampledTimeSteps()[3]);
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
TEST(RiaTimeHistoryCurveResampler, Test_Resampling_Quarter)
|
||||
{
|
||||
std::vector<QString> timeStrings(
|
||||
{
|
||||
"2016-09-06",
|
||||
"2017-03-02",
|
||||
"2018-02-07"
|
||||
}
|
||||
);
|
||||
|
||||
std::vector<double> dataValues(
|
||||
{
|
||||
0.0,
|
||||
0.0,
|
||||
0.0
|
||||
}
|
||||
);
|
||||
|
||||
RiaTimeHistoryCurveResampler resampler;
|
||||
resampler.setCurveData(dataValues, toTime_tVector(timeStrings));
|
||||
resampler.resampleAndComputeWeightedMeanValues(DateTimePeriod::QUARTER);
|
||||
|
||||
EXPECT_EQ(6, (int)resampler.resampledTimeSteps().size());
|
||||
EXPECT_EQ(toTime_t("2016-10-01"), resampler.resampledTimeSteps()[0]);
|
||||
EXPECT_EQ(toTime_t("2017-01-01"), resampler.resampledTimeSteps()[1]);
|
||||
EXPECT_EQ(toTime_t("2017-04-01"), resampler.resampledTimeSteps()[2]);
|
||||
EXPECT_EQ(toTime_t("2017-07-01"), resampler.resampledTimeSteps()[3]);
|
||||
EXPECT_EQ(toTime_t("2017-10-01"), resampler.resampledTimeSteps()[4]);
|
||||
EXPECT_EQ(toTime_t("2018-01-01"), resampler.resampledTimeSteps()[5]);
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
TEST(RiaTimeHistoryCurveResampler, Test_Resampling_Month)
|
||||
{
|
||||
std::vector<QString> timeStrings(
|
||||
{
|
||||
"2017-09-06",
|
||||
"2017-12-02",
|
||||
"2018-02-07"
|
||||
}
|
||||
);
|
||||
|
||||
std::vector<double> dataValues(
|
||||
{
|
||||
0.0,
|
||||
0.0,
|
||||
0.0
|
||||
}
|
||||
);
|
||||
|
||||
RiaTimeHistoryCurveResampler resampler;
|
||||
resampler.setCurveData(dataValues, toTime_tVector(timeStrings));
|
||||
resampler.resampleAndComputeWeightedMeanValues(DateTimePeriod::MONTH);
|
||||
|
||||
EXPECT_EQ(5, (int)resampler.resampledTimeSteps().size());
|
||||
EXPECT_EQ(toTime_t("2017-10-01"), resampler.resampledTimeSteps()[0]);
|
||||
EXPECT_EQ(toTime_t("2017-11-01"), resampler.resampledTimeSteps()[1]);
|
||||
EXPECT_EQ(toTime_t("2017-12-01"), resampler.resampledTimeSteps()[2]);
|
||||
EXPECT_EQ(toTime_t("2018-01-01"), resampler.resampledTimeSteps()[3]);
|
||||
EXPECT_EQ(toTime_t("2018-02-01"), resampler.resampledTimeSteps()[4]);
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
TEST(RiaTimeHistoryCurveResampler, Test_Resampling_Week)
|
||||
{
|
||||
std::vector<QString> timeStrings(
|
||||
{
|
||||
"2017-11-02",
|
||||
"2017-12-24",
|
||||
"2018-01-07"
|
||||
}
|
||||
);
|
||||
|
||||
std::vector<double> dataValues(
|
||||
{
|
||||
0.0,
|
||||
0.0,
|
||||
0.0
|
||||
}
|
||||
);
|
||||
|
||||
RiaTimeHistoryCurveResampler resampler;
|
||||
resampler.setCurveData(dataValues, toTime_tVector(timeStrings));
|
||||
resampler.resampleAndComputeWeightedMeanValues(DateTimePeriod::WEEK);
|
||||
|
||||
EXPECT_EQ(9, (int)resampler.resampledTimeSteps().size());
|
||||
EXPECT_EQ(toTime_t("2017-11-06"), resampler.resampledTimeSteps()[0]);
|
||||
EXPECT_EQ(toTime_t("2017-11-13"), resampler.resampledTimeSteps()[1]);
|
||||
EXPECT_EQ(toTime_t("2017-11-20"), resampler.resampledTimeSteps()[2]);
|
||||
EXPECT_EQ(toTime_t("2017-11-27"), resampler.resampledTimeSteps()[3]);
|
||||
EXPECT_EQ(toTime_t("2017-12-04"), resampler.resampledTimeSteps()[4]);
|
||||
EXPECT_EQ(toTime_t("2017-12-11"), resampler.resampledTimeSteps()[5]);
|
||||
EXPECT_EQ(toTime_t("2017-12-18"), resampler.resampledTimeSteps()[6]);
|
||||
EXPECT_EQ(toTime_t("2017-12-25"), resampler.resampledTimeSteps()[7]);
|
||||
EXPECT_EQ(toTime_t("2018-01-01"), resampler.resampledTimeSteps()[8]);
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
|
Loading…
Reference in New Issue
Block a user