19#ifndef RESAMPLINGALGORITHMS_H
20#define RESAMPLINGALGORITHMS_H
29 #pragma warning(disable:4512)
78 void setBefore(
const size_t& idx,
const std::vector<MeteoData>& vecM) {
79 if (idx>=vecM.size())
return;
81 scannedBeforeLimit = idx;
89 void setAfter(
const size_t& idx,
const std::vector<MeteoData>& vecM) {
90 if (idx>=vecM.size())
return;
92 scannedAfterLimit = idx;
96 std::ostringstream os;
100 std::string type_str(
"INTERPOLATION" );
112 size_t searchBackward(
const size_t& pos,
const size_t& paramindex,
const std::vector<MeteoData>& vecM,
113 const Date& resampling_date,
const double& max_gap_size);
114 size_t searchForward(
const size_t& pos,
const size_t& paramindex,
const std::vector<MeteoData>& vecM,
115 const Date& resampling_date,
const double& max_gap_size);
125 size_t scannedBeforeLimit;
126 size_t scannedAfterLimit;
153 ResamplingAlgorithms(
const std::string& i_algoname,
const std::string& i_parname,
const double& dflt_max_gap_size,
const std::vector< std::pair<std::string, std::string> >& )
159 gap_info findGap(
const std::string& stationHash,
const size_t& pos,
const size_t& paramindex,
const std::vector<MeteoData>& vecM,
const Date& resampling_date,
const double& i_max_gap_size);
163 const std::vector<MeteoData>& vecM,
MeteoData& md,
const gap_info& gap,
const bool& exactMatch) = 0;
175 const size_t& pos,
const Date& curr_date);
177 const size_t& pos,
const Date& curr_date);
179 const double& x2,
const double& y2,
const double& x3);
181 static size_t getDailyValue(
const std::vector<MeteoData>& vecM,
const size_t& paramindex,
size_t pos,
const Date& intervalStart,
const Date& intervalEnd);
187 std::map<std::string, gap_info> gaps;
193 static ResamplingAlgorithms*
getAlgorithm(
const std::string& i_algoname,
const std::string& parname,
const double& max_gap_size,
const std::vector< std::pair<std::string, std::string> >& vecArgs,
const Config &cfg);
A class that reads a key/value file. These files (typically named *.ini) follow the INI file format s...
Definition Config.h:79
A class to handle timestamps. This class handles conversion between different time display formats (I...
Definition Date.h:86
const std::string toString(const FORMATS &type, const bool &gmt=false) const
Return a nicely formated string.
Definition Date.cc:1177
@ ISO
ISO 8601 extended format combined date: YYYY-MM-DDTHH:mm:SS.sss (fields might be dropped,...
Definition Date.h:90
void setUndef(const bool &flag=true)
Definition Date.cc:195
bool isUndef() const
Definition Date.h:143
Stores information about a data gap in a time series.
Definition ResamplingAlgorithms.h:46
std::string toString() const
Definition ResamplingAlgorithms.h:95
size_t searchForward(const size_t &pos, const size_t ¶mindex, const std::vector< MeteoData > &vecM, const Date &resampling_date, const double &max_gap_size)
Search forward from pos to find the first valid point after a gap.
Definition ResamplingAlgorithms.cc:173
void setAfter(const size_t &idx, const std::vector< MeteoData > &vecM)
Setter for the 'after' anchor point of the gap.
Definition ResamplingAlgorithms.h:89
size_t afterIdx
Index of the first valid point after the gap.
Definition ResamplingAlgorithms.h:120
GapInfo()
Definition ResamplingAlgorithms.h:59
GapType gapType
Definition ResamplingAlgorithms.h:121
bool isUndef() const
Test if the gap is properly defined.
Definition ResamplingAlgorithms.h:66
Date after
Date of the first valid point after the gap.
Definition ResamplingAlgorithms.h:118
size_t beforeIdx
Index of the last valid point before the gap.
Definition ResamplingAlgorithms.h:119
Date before
Definition ResamplingAlgorithms.h:117
void setBefore(const size_t &idx, const std::vector< MeteoData > &vecM)
Setter for the 'before' anchor point of the gap.
Definition ResamplingAlgorithms.h:78
size_t searchBackward(const size_t &pos, const size_t ¶mindex, const std::vector< MeteoData > &vecM, const Date &resampling_date, const double &max_gap_size)
Search backward from pos to find the last valid point before a gap.
Definition ResamplingAlgorithms.cc:121
double size() const
Return the size (in days) of the current gap or IOUtils::nodata if at least one boundary is unknown.
Definition ResamplingAlgorithms.cc:106
void reset()
Reset all members of the gap so, making it undefined.
Definition ResamplingAlgorithms.h:71
A class to represent a singular measurement received from one station at a certain time (represented ...
Definition MeteoData.h:110
Definition ResamplingAlgorithms.h:191
static ResamplingAlgorithms * getAlgorithm(const std::string &i_algoname, const std::string &parname, const double &max_gap_size, const std::vector< std::pair< std::string, std::string > > &vecArgs, const Config &cfg)
Definition ResamplingAlgorithms.cc:221
Interface class for the temporal resampling algorithms.
Definition ResamplingAlgorithms.h:141
static double partialAccumulateAtRight(const std::vector< MeteoData > &vecM, const size_t ¶mindex, const size_t &pos, const Date &curr_date)
Definition ResamplingAlgorithms.cc:266
virtual ~ResamplingAlgorithms()
Definition ResamplingAlgorithms.h:156
const std::string parname
Definition ResamplingAlgorithms.h:183
ResamplingAlgorithms(const std::string &i_algoname, const std::string &i_parname, const double &dflt_max_gap_size, const std::vector< std::pair< std::string, std::string > > &)
Definition ResamplingAlgorithms.h:153
GapInfo gap_info
Definition ResamplingAlgorithms.h:144
virtual std::string toString() const =0
void resetResampling()
Definition ResamplingAlgorithms.h:165
const std::string getAlgo() const
Definition ResamplingAlgorithms.h:167
static double partialAccumulateAtLeft(const std::vector< MeteoData > &vecM, const size_t ¶mindex, const size_t &pos, const Date &curr_date)
For algorithms that support extrapolations, this could be set to true in the ini file
Definition ResamplingAlgorithms.cc:247
virtual bool resample(const std::string &stationHash, const size_t &index, const ResamplingPosition &position, const size_t ¶mindex, const std::vector< MeteoData > &vecM, MeteoData &md, const gap_info &gap, const bool &exactMatch)=0
const std::string algo
Definition ResamplingAlgorithms.h:183
static Date getDailyStart(const Date &resampling_date)
For a given date, find the start of the day, considering that for midnight we return the day before!...
Definition ResamplingAlgorithms.cc:349
ResamplingPosition
Definition ResamplingAlgorithms.h:146
@ end
Definition ResamplingAlgorithms.h:150
@ inGap
Definition ResamplingAlgorithms.h:148
@ hasTimestamp
Definition ResamplingAlgorithms.h:147
@ begin
Definition ResamplingAlgorithms.h:149
double getMaxGapSize() const
Definition ResamplingAlgorithms.h:168
bool allowExtrapolate
Definition ResamplingAlgorithms.h:173
static double linearInterpolation(const double &x1, const double &y1, const double &x2, const double &y2, const double &x3)
This function solves the equation y = ax + b for two given points and returns y for a given x.
Definition ResamplingAlgorithms.cc:332
static size_t getDailyValue(const std::vector< MeteoData > &vecM, const size_t ¶mindex, size_t pos, const Date &intervalStart, const Date &intervalEnd)
Find a unique value in a given time interval. This is useful for retrieving a unique daily average,...
Definition ResamplingAlgorithms.cc:369
gap_info findGap(const std::string &stationHash, const size_t &pos, const size_t ¶mindex, const std::vector< MeteoData > &vecM, const Date &resampling_date, const double &i_max_gap_size)
Find a data gap around a given position.
Definition ResamplingAlgorithms.cc:298
double max_gap_size
Maximum extend of a data gap over which to interpolate.
Definition ResamplingAlgorithms.h:184
GapType
Gap type enumeration for temporal resampling.
Definition ResamplingAlgorithms.h:52
@ NO_VALID_POINTS
No valid points at all for this parameter.
Definition ResamplingAlgorithms.h:56
@ EXTRAPOLATION_END
No valid points after the gap (extrapolate backward)
Definition ResamplingAlgorithms.h:55
@ EXTRAPOLATION_BEGIN
No valid points before the gap (extrapolate forward)
Definition ResamplingAlgorithms.h:54
@ INTERPOLATION
Valid data points on both sides of the gap.
Definition ResamplingAlgorithms.h:53
const size_t npos
npos is the out-of-range value
Definition IOUtils.h:82