Fill missing values from a station, using another station as reference.
For this algorithm, a supportive station is needed for each station, which is used to fill missing data. Using the data from the support station, a linear regression is performed, and with this linear relation between the two stations, the missing values are filled using the data from the second station.
- Note
- As the resampling algorithm is specified for each parameter, but not station, when the parameter of a station for which no support station is specified is tried to be resampled, it will not do anything, so it is advised to set linear as a backup algorithm in the resampling stack.
Parameters
- VERBOSE: If set to true, the algorithm will print out information about the state of the resampling.
- ADDITIONAL_STATIONS#: Specifiy which station should be used to support which station. In the form of StationID1–StationID2, where 2 will be used to fill in 1. To specify multiple stations, use ADDITIONAL_STATIONS1, ADDITIONAL_STATIONS2, etc. It is also possible to use "CLOSEST" as the second station, which will use the closest station to the first one.
- TYPE: The type of regression to be used. Currently not implemented, i.e. only LINEAR is implemented.
[Interpolations1D]
TA::resample = REGFILL
TA::REGFILL::VERBOSE = true
TA::ADDITIONAL_STATIONS1 = StationID1--StationID2
TA::ADDITIONAL_STATIONS2 = StationID2--WFJ2
- Author
- Patrick Leibersperger
- Date
- 2024-03-20
- Todo:
Implement other regression types.
Make it possible to use multiple stations to support a single station.
|
| RegressionFill (const std::string &i_algoname, const std::string &i_parname, const double &dflt_window_size, const std::vector< std::pair< std::string, std::string > > &vecArgs) |
|
void | resample (const std::string &stationHash, const size_t &index, const ResamplingPosition &position, const size_t ¶mindex, const std::vector< MeteoData > &vecM, MeteoData &md) |
|
void | resample (const std::string &stationHash, const size_t &index, const ResamplingPosition &position, const size_t ¶mindex, const std::vector< MeteoData > &vecM, MeteoData &md, const std::vector< METEO_SET > &additional_stations) |
|
std::string | toString () const |
|
bool | findValueAt (const std::vector< MeteoData > &support_station, const Date &date, const size_t ¶mindex, double &value) |
|
void | getRegressionData (const size_t index, const size_t paramindex, const std::vector< MeteoData > &vecM, const std::vector< METEO_SET > &additional_stations, std::vector< double > &x, std::vector< double > &y, std::vector< Date > &dates) |
|
double | linear (double julian_date, const std::vector< double > &coefficients) |
|
| ResamplingAlgorithms (const std::string &i_algoname, const std::string &i_parname, const double &dflt_window_size, const std::vector< std::pair< std::string, std::string > > &) |
|
virtual | ~ResamplingAlgorithms () |
|
const std::string | getAlgo () const |
|
virtual void | resample (const std::string &stationHash, const size_t &index, const ResamplingPosition &position, const size_t ¶mindex, const std::vector< MeteoData > &vecM, MeteoData &md)=0 |
|
void | resetResampling () |
|
virtual std::string | toString () const =0 |
|
|
static size_t | searchBackward (gap_info &last_gap, const size_t &pos, const size_t ¶mindex, const std::vector< MeteoData > &vecM, const Date &resampling_date, const double &i_window_size) |
|
static size_t | searchForward (gap_info &last_gap, const size_t &pos, const size_t ¶mindex, const std::vector< MeteoData > &vecM, const Date &resampling_date, const double &i_window_size, const size_t &indexP1) |
|
static gap_info | findGap (const size_t &pos, const size_t ¶mindex, const std::vector< MeteoData > &vecM, const Date &resampling_date, const double &i_window_size) |
|
void | getNearestValidPts (const std::string &stationHash, const size_t &pos, const size_t ¶mindex, const std::vector< MeteoData > &vecM, const Date &resampling_date, const double &i_window_size, size_t &indexP1, size_t &indexP2) |
| This function returns the last and next valid points around a given position. More...
|
|
static double | partialAccumulateAtLeft (const std::vector< MeteoData > &vecM, const size_t ¶mindex, const size_t &pos, const Date &curr_date) |
|
static double | partialAccumulateAtRight (const std::vector< MeteoData > &vecM, const size_t ¶mindex, const size_t &pos, const Date &curr_date) |
|
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. More...
|
|
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! (as is necessary for daily averages, sums, etc that can be provided at midnight for the day before) More...
|
|
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, daily sum, etc. More...
|
|
const std::string | algo |
|
const std::string | parname |
|
double | window_size |
|
static const double | soil_albedo = .23 |
| grass albedo More...
|
|
static const double | snow_albedo = .85 |
| snow albedo More...
|
|
static const double | snow_thresh = .1 |
| These thresholds are used to handle solar radiation. More...
|
|