MeteoIODoc 20260811.aeb9aef5
Environmental timeseries pre-processing
Loading...
Searching...
No Matches
DataEditingAlgorithms.h
Go to the documentation of this file.
1// SPDX-License-Identifier: LGPL-3.0-or-later
2/***********************************************************************************/
3/* Copyright 2020 WSL Institute for Snow and Avalanche Research SLF-DAVOS */
4/***********************************************************************************/
5/* This file is part of MeteoIO.
6 MeteoIO is free software: you can redistribute it and/or modify
7 it under the terms of the GNU Lesser General Public License as published by
8 the Free Software Foundation, either version 3 of the License, or
9 (at your option) any later version.
10
11 MeteoIO is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU Lesser General Public License for more details.
15
16 You should have received a copy of the GNU Lesser General Public License
17 along with MeteoIO. If not, see <http://www.gnu.org/licenses/>.
18*/
19#ifndef DATAEDITINGALGS_H
20#define DATAEDITINGALGS_H
21
22#include <meteoio/IOInterface.h>
24
25#include <set>
26#include <string>
27#include <vector>
28#include <utility>
29
30namespace mio {
31
37 public:
38 EditingBlock(const std::string& i_stationID, const std::vector< std::pair<std::string, std::string> >& vecArgs, const std::string& name, const Config& cfg);
39
40 virtual ~EditingBlock() {}
41
48 virtual void editTimeSeries(std::vector<METEO_SET>& vecMeteo) {(void)vecMeteo;}
49
56 virtual void editTimeSeries(STATIONS_SET& vecStation) {(void)vecStation;}
57
62 virtual std::set<std::string> requiredIDs() const {return std::set<std::string>();}
63
68 virtual std::set<std::string> providedIDs() const {return std::set<std::string>();}
69
74 virtual std::set<std::string> purgeIDs() const {return requiredIDs();}
75
76 const std::string toString() const;
77
78 protected:
79 std::string getName() const {return block_name;}
80 static std::set<std::string> initStationSet(const std::vector< std::pair<std::string, std::string> >& vecArgs, const std::string& keyword);
81 bool skipStation(const std::vector<MeteoData>& vecMeteo) const;
82 METEO_SET timeFilterFromStation(const METEO_SET& vecMeteo) const; //merge and automerge need this method
83
84 const std::set<std::string> excluded_stations, kept_stations;
85 const std::vector<DateRange> time_restrictions;
86 const std::string stationID, block_name;
87};
88
104class EditingSwap : public EditingBlock {
105 public:
106 EditingSwap(const std::string& i_stationID, const std::vector< std::pair<std::string, std::string> >& vecArgs, const std::string& name, const Config& cfg);
107
108 virtual void editTimeSeries(std::vector<METEO_SET>& vecMeteo) override;
109
110 private:
111 void parse_args(const std::vector< std::pair<std::string, std::string> >& vecArgs);
112 std::string dest_param, src_param;
113};
114
115
141 public:
142 EditingRename(const std::string& i_stationID, const std::vector< std::pair<std::string, std::string> >& vecArgs, const std::string& name, const Config& cfg);
143
144 virtual void editTimeSeries(std::vector<METEO_SET>& vecMeteo) override;
145
146 private:
147 void parse_args(const std::vector< std::pair<std::string, std::string> >& vecArgs);
148 std::set< std::string > src_params;
149 std::string dest_param;
150};
151
172 public:
173 EditingExclude(const std::string& i_stationID, const std::vector< std::pair<std::string, std::string> >& vecArgs, const std::string& name, const Config& cfg);
174
175 virtual void editTimeSeries(std::vector<METEO_SET>& vecMeteo) override;
176
177 private:
178 void parse_args(const std::vector< std::pair<std::string, std::string> >& vecArgs);
179 void processStation(METEO_SET& vecMeteo, const size_t& startIdx, const size_t& endIdx, const std::set< std::string >& params) const;
180 std::set< std::string > exclude_params;
181 bool wildcard;
182};
183
202class EditingKeep : public EditingBlock {
203 public:
204 EditingKeep(const std::string& i_stationID, const std::vector< std::pair<std::string, std::string> >& vecArgs, const std::string& name, const Config& cfg);
205
206 virtual void editTimeSeries(std::vector<METEO_SET>& vecMeteo) override;
207 static void processStation(METEO_SET& vecMeteo, const size_t& startIdx, const size_t& endIdx, const std::set< std::string >& params); //for use in DataEditingAlgorithms
208
209 private:
210 void parse_args(const std::vector< std::pair<std::string, std::string> >& vecArgs);
211 std::set< std::string > keep_params;
212};
213
258 public:
265 public:
266 EditingCombine(const std::string& i_stationID, const std::vector< std::pair<std::string, std::string> >& vecArgs, const std::string& name, const Config& cfg);
267
268 virtual void editTimeSeries(std::vector<METEO_SET>& vecMeteo) override;
269 private:
270 void parse_args(const std::vector< std::pair<std::string, std::string> >& vecArgs);
271 void processFIRST(METEO_SET& vecMeteo, const size_t& startIdx, const size_t& endIdx) const;
272 void processMIN(METEO_SET& vecMeteo, const size_t& startIdx, const size_t& endIdx) const;
273 void processAVG(METEO_SET& vecMeteo, const size_t& startIdx, const size_t& endIdx) const;
274 void processMAX(METEO_SET& vecMeteo, const size_t& startIdx, const size_t& endIdx) const;
275 std::vector< std::string > merged_params; //as vector since order is important
276 std::string dest_param;
277 CombineType type;
278 bool replace;
279};
280
331 public:
332 EditingMerge(const std::string& i_stationID, const std::vector< std::pair<std::string, std::string> >& vecArgs, const std::string& name, const Config& cfg);
333
334 virtual void editTimeSeries(std::vector<METEO_SET>& vecMeteo) override;
335 virtual void editTimeSeries(STATIONS_SET& vecStation) override;
336
337 std::set<std::string> requiredIDs() const override;
338 private:
339 void parse_args(const std::vector< std::pair<std::string, std::string> >& vecArgs);
340 std::vector< std::string > merged_stations;
341 std::set< std::string > merged_params;
342 MeteoData::Merge_Type merge_strategy;
343 MeteoData::MERGE_CONFLICTS merge_conflicts;
344};
345
364 public:
365 EditingAutoMerge(const std::string& i_stationID, const std::vector< std::pair<std::string, std::string> >& vecArgs, const std::string& name, const Config& cfg);
366
367 virtual void editTimeSeries(std::vector<METEO_SET>& vecMeteo) override;
368 virtual void editTimeSeries(STATIONS_SET& vecStation) override;
369
370 private:
371 void parse_args(const std::vector< std::pair<std::string, std::string> >& vecArgs);
372 static void mergeStations(const size_t& toStationIdx, STATIONS_SET& vecStation);
373 void mergeMeteo(const size_t& toStationIdx, std::vector<METEO_SET>& vecMeteo) const;
374 MeteoData::Merge_Type merge_strategy;
375 MeteoData::MERGE_CONFLICTS merge_conflicts;
376};
377
396class EditingCopy : public EditingBlock {
397 public:
398 EditingCopy(const std::string& i_stationID, const std::vector< std::pair<std::string, std::string> >& vecArgs, const std::string& name, const Config& cfg);
399
400 virtual void editTimeSeries(std::vector<METEO_SET>& vecMeteo) override;
401
402 private:
403 void parse_args(const std::vector< std::pair<std::string, std::string> >& vecArgs);
404 std::string dest_param, src_param;
405};
406
438 public:
439 EditingCreate(const std::string& i_stationID, const std::vector< std::pair<std::string, std::string> >& vecArgs, const std::string& name, const Config& cfg);
440
441 virtual void editTimeSeries(std::vector<METEO_SET>& vecMeteo) override;
442
443 private:
444 static const std::vector< std::pair<std::string, std::string> > cleanGeneratorArgs(const std::vector< std::pair<std::string, std::string> >& vecArgs);
445 void parse_args(const std::vector< std::pair<std::string, std::string> >& vecArgs);
446
447 const Config& cfg_copy;
448 const std::vector< std::pair<std::string, std::string> > vecArgs_copy;
449 std::string algorithm, dest_param;
450};
451
491 public:
492 EditingMetadata(const std::string& i_stationID, const std::vector< std::pair<std::string, std::string> >& vecArgs, const std::string& name, const Config& cfg);
493
494 virtual void editTimeSeries(std::vector<METEO_SET>& vecMeteo) override;
495 virtual void editTimeSeries(STATIONS_SET& vecStation) override;
496
497 std::set<std::string> providedIDs() const override;
498
499 private:
500 void parse_args(const std::vector< std::pair<std::string, std::string> >& vecArgs);
501 void mergeMigratedData(std::vector<METEO_SET>& vecMeteo, const std::vector<METEO_SET>& vecTmp) const;
502
503 std::string new_name, new_id;
504 double lat, lon, alt, slope, azi;
505 bool edit_in_place;
506};
507
545 public:
551
552 public:
553 EditingRegFill(const std::string& i_stationID, const std::vector< std::pair<std::string, std::string> >& vecArgs, const std::string& name, const Config& cfg);
554
555 virtual void editTimeSeries(std::vector<METEO_SET>& vecMeteo) override;
556
557 private:
558 void parse_args(const std::vector< std::pair<std::string, std::string> >& vecArgs);
559 void fillTimeseries(METEO_SET& vecMeteo1, const METEO_SET& vecMeteo2);
560 std::vector< std::string > source_stations;
561 std::set< std::string > params_to_merge;
562 RegressionType regtype;
563 bool print_regression_info;
564};
565
594class EditingMove : public EditingBlock {
595 public:
596
597 public:
598 EditingMove(const std::string& i_stationID, const std::vector< std::pair<std::string, std::string> >& vecArgs, const std::string& name, const Config& cfg);
599
600 virtual void editTimeSeries(std::vector<METEO_SET>& vecMeteo) override;
601
602 private:
603 void parse_args(const std::vector< std::pair<std::string, std::string> >& vecArgs);
604 std::set<std::string> dest_stations;
605 std::set< std::string > params_to_move;
606
607 std::vector<MeteoData> createFullTimeSeries(const std::vector<MeteoData>& source, const std::vector<MeteoData>& dest) const;
608 bool isDestination(const std::string& stationID) const;
609
610 bool param_wildcard;
611 bool station_wildcard;
612 bool station_glob;
613};
614
644 public:
645
646 public:
647 EditingSplit(const std::string& i_stationID, const std::vector< std::pair<std::string, std::string> >& vecArgs, const std::string& name, const Config& cfg);
648
649 virtual void editTimeSeries(std::vector<METEO_SET>& vecMeteo) override;
650
651 private:
652 void parse_args(const std::vector< std::pair<std::string, std::string> >& vecArgs);
653 std::string dest_station_id;
654 std::set< std::string > params_to_move;
655
656 std::vector<MeteoData> splitTimeSeries(std::vector<MeteoData>& source);
657};
658
660 public:
661 static EditingBlock* getBlock(const std::string& i_stationID, const std::vector< std::pair<std::string, std::string> >& vecArgs, const std::string& name, const Config& cfg);
662};
663
664} //namespace
665
666#endif
A class that reads a key/value file. These files (typically named *.ini) follow the INI file format s...
Definition Config.h:79
AUTOMERGE input editing command.
Definition DataEditingAlgorithms.h:363
virtual void editTimeSeries(std::vector< METEO_SET > &vecMeteo) override
Apply this editing block.
Definition DataEditingAlgorithms.cc:488
Definition DataEditingAlgorithms.h:659
static EditingBlock * getBlock(const std::string &i_stationID, const std::vector< std::pair< std::string, std::string > > &vecArgs, const std::string &name, const Config &cfg)
Definition DataEditingAlgorithms.cc:136
Base class for DataEditing algorithms.
Definition DataEditingAlgorithms.h:36
virtual void editTimeSeries(std::vector< METEO_SET > &vecMeteo)
Apply this editing block.
Definition DataEditingAlgorithms.h:48
std::string getName() const
Definition DataEditingAlgorithms.h:79
virtual ~EditingBlock()
Definition DataEditingAlgorithms.h:40
const std::vector< DateRange > time_restrictions
Definition DataEditingAlgorithms.h:85
virtual std::set< std::string > requiredIDs() const
Get the station IDs this editing block depends on for this station.
Definition DataEditingAlgorithms.h:62
const std::set< std::string > kept_stations
Definition DataEditingAlgorithms.h:84
const std::string toString() const
Definition DataEditingAlgorithms.cc:129
METEO_SET timeFilterFromStation(const METEO_SET &vecMeteo) const
Prepare a station that will be merged in case of time restrictions.
Definition DataEditingAlgorithms.cc:179
const std::string stationID
Definition DataEditingAlgorithms.h:86
bool skipStation(const std::vector< MeteoData > &vecMeteo) const
Return true if this station ID should be skipped.
Definition DataEditingAlgorithms.cc:117
const std::string block_name
Definition DataEditingAlgorithms.h:86
virtual void editTimeSeries(STATIONS_SET &vecStation)
Apply this editing block to the StationData.
Definition DataEditingAlgorithms.h:56
static std::set< std::string > initStationSet(const std::vector< std::pair< std::string, std::string > > &vecArgs, const std::string &keyword)
Definition DataEditingAlgorithms.cc:92
const std::set< std::string > excluded_stations
Definition DataEditingAlgorithms.h:84
virtual std::set< std::string > purgeIDs() const
Get the station IDs to purge after using them for this station ID.
Definition DataEditingAlgorithms.h:74
virtual std::set< std::string > providedIDs() const
Get the station IDs this editing block provides based on this station.
Definition DataEditingAlgorithms.h:68
COMBINE input editing command.
Definition DataEditingAlgorithms.h:257
CombineType
Definition DataEditingAlgorithms.h:259
@ AVG
take the average of all valid data
Definition DataEditingAlgorithms.h:262
@ FIRST
take the first valid data
Definition DataEditingAlgorithms.h:260
@ MAX
take the MAX of all valid data
Definition DataEditingAlgorithms.h:263
@ MIN
take the MIN of all valid data
Definition DataEditingAlgorithms.h:261
virtual void editTimeSeries(std::vector< METEO_SET > &vecMeteo) override
Apply this editing block.
Definition DataEditingAlgorithms.cc:658
COPY input editing command.
Definition DataEditingAlgorithms.h:396
virtual void editTimeSeries(std::vector< METEO_SET > &vecMeteo) override
Apply this editing block.
Definition DataEditingAlgorithms.cc:816
CREATE input editing command.
Definition DataEditingAlgorithms.h:437
virtual void editTimeSeries(std::vector< METEO_SET > &vecMeteo) override
Apply this editing block.
Definition DataEditingAlgorithms.cc:873
EXCLUDE input editing command.
Definition DataEditingAlgorithms.h:171
virtual void editTimeSeries(std::vector< METEO_SET > &vecMeteo) override
Apply this editing block.
Definition DataEditingAlgorithms.cc:339
KEEP input editing command.
Definition DataEditingAlgorithms.h:202
virtual void editTimeSeries(std::vector< METEO_SET > &vecMeteo) override
Apply this editing block.
Definition DataEditingAlgorithms.cc:395
static void processStation(METEO_SET &vecMeteo, const size_t &startIdx, const size_t &endIdx, const std::set< std::string > &params)
Definition DataEditingAlgorithms.cc:377
MERGE input editing command.
Definition DataEditingAlgorithms.h:330
virtual void editTimeSeries(std::vector< METEO_SET > &vecMeteo) override
Apply this editing block.
Definition DataEditingAlgorithms.cc:740
std::set< std::string > requiredIDs() const override
Get the station IDs this editing block depends on for this station.
Definition DataEditingAlgorithms.cc:781
METADATA input editing command.
Definition DataEditingAlgorithms.h:490
virtual void editTimeSeries(std::vector< METEO_SET > &vecMeteo) override
Apply this editing block.
Definition DataEditingAlgorithms.cc:978
std::set< std::string > providedIDs() const override
Get the station IDs this editing block provides based on this station.
Definition DataEditingAlgorithms.cc:930
MOVE input editing command.
Definition DataEditingAlgorithms.h:594
virtual void editTimeSeries(std::vector< METEO_SET > &vecMeteo) override
Apply this editing block.
Definition DataEditingAlgorithms.cc:1355
RegFill input editing command.
Definition DataEditingAlgorithms.h:544
RegressionType
Definition DataEditingAlgorithms.h:546
@ QUADRATIC
Definition DataEditingAlgorithms.h:548
@ CUBIC
Definition DataEditingAlgorithms.h:549
@ LINEAR
Definition DataEditingAlgorithms.h:547
virtual void editTimeSeries(std::vector< METEO_SET > &vecMeteo) override
Apply this editing block.
Definition DataEditingAlgorithms.cc:1092
RENAME input editing command.
Definition DataEditingAlgorithms.h:140
virtual void editTimeSeries(std::vector< METEO_SET > &vecMeteo) override
Apply this editing block.
Definition DataEditingAlgorithms.cc:274
Split input editing command.
Definition DataEditingAlgorithms.h:643
virtual void editTimeSeries(std::vector< METEO_SET > &vecMeteo) override
Apply this editing block.
Definition DataEditingAlgorithms.cc:1497
SWAP input editing command.
Definition DataEditingAlgorithms.h:104
virtual void editTimeSeries(std::vector< METEO_SET > &vecMeteo) override
Apply this editing block.
Definition DataEditingAlgorithms.cc:223
Merge_Type
Available MeteoData merging strategies. When the two stations both have data at a given time step,...
Definition MeteoData.h:126
Definition Config.cc:34
std::vector< MeteoData > METEO_SET
Definition MeteoData.h:32
std::vector< StationData > STATIONS_SET
Definition StationData.h:144