MeteoIODoc 20250905.f67af007
 
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
28namespace mio {
29
35 public:
36 EditingBlock(const std::string& i_stationID, const std::vector< std::pair<std::string, std::string> >& vecArgs, const std::string& name, const Config &cfg);
37
38 virtual ~EditingBlock() {}
39
46 virtual void editTimeSeries(std::vector<METEO_SET>& vecMeteo) {(void)vecMeteo;}
47
54 virtual void editTimeSeries(STATIONS_SET& vecStation) {(void)vecStation;}
55
60 virtual std::set<std::string> requiredIDs() const {return std::set<std::string>();}
61
66 virtual std::set<std::string> providedIDs() const {return std::set<std::string>();}
67
72 virtual std::set<std::string> purgeIDs() const {return requiredIDs();}
73
74 const std::string toString() const;
75
76 protected:
77 std::string getName() const {return block_name;}
78 static std::set<std::string> initStationSet(const std::vector< std::pair<std::string, std::string> >& vecArgs, const std::string& keyword);
79 bool skipStation(const std::vector<MeteoData>& vecMeteo) const;
80 METEO_SET timeFilterFromStation(const METEO_SET& vecMeteo) const; //merge and automerge need this method
81
82 const std::set<std::string> excluded_stations, kept_stations;
83 const std::vector<DateRange> time_restrictions;
84 const std::string stationID, block_name;
85};
86
102class EditingSwap : public EditingBlock {
103 public:
104 EditingSwap(const std::string& i_stationID, const std::vector< std::pair<std::string, std::string> >& vecArgs, const std::string& name, const Config &cfg);
105
106 virtual void editTimeSeries(std::vector<METEO_SET>& vecMeteo) override;
107
108 private:
109 void parse_args(const std::vector< std::pair<std::string, std::string> >& vecArgs);
110 std::string dest_param, src_param;
111};
112
113
139 public:
140 EditingRename(const std::string& i_stationID, const std::vector< std::pair<std::string, std::string> >& vecArgs, const std::string& name, const Config &cfg);
141
142 virtual void editTimeSeries(std::vector<METEO_SET>& vecMeteo) override;
143
144 private:
145 void parse_args(const std::vector< std::pair<std::string, std::string> >& vecArgs);
146 std::set< std::string > src_params;
147 std::string dest_param;
148};
149
170 public:
171 EditingExclude(const std::string& i_stationID, const std::vector< std::pair<std::string, std::string> >& vecArgs, const std::string& name, const Config &cfg);
172
173 virtual void editTimeSeries(std::vector<METEO_SET>& vecMeteo) override;
174
175 private:
176 void parse_args(const std::vector< std::pair<std::string, std::string> >& vecArgs);
177 void processStation(METEO_SET& vecMeteo, const size_t& startIdx, const size_t& endIdx, const std::set< std::string >& params) const;
178 std::set< std::string > exclude_params;
179 bool wildcard;
180};
181
200class EditingKeep : public EditingBlock {
201 public:
202 EditingKeep(const std::string& i_stationID, const std::vector< std::pair<std::string, std::string> >& vecArgs, const std::string& name, const Config &cfg);
203
204 virtual void editTimeSeries(std::vector<METEO_SET>& vecMeteo) override;
205 static void processStation(METEO_SET& vecMeteo, const size_t& startIdx, const size_t& endIdx, const std::set< std::string >& params); //for use in DataEditingAlgorithms
206
207 private:
208 void parse_args(const std::vector< std::pair<std::string, std::string> >& vecArgs);
209 std::set< std::string > keep_params;
210};
211
256 public:
263 public:
264 EditingCombine(const std::string& i_stationID, const std::vector< std::pair<std::string, std::string> >& vecArgs, const std::string& name, const Config &cfg);
265
266 virtual void editTimeSeries(std::vector<METEO_SET>& vecMeteo) override;
267 private:
268 void parse_args(const std::vector< std::pair<std::string, std::string> >& vecArgs);
269 void processFIRST(METEO_SET& vecMeteo, const size_t& startIdx, const size_t& endIdx) const;
270 void processMIN(METEO_SET& vecMeteo, const size_t& startIdx, const size_t& endIdx) const;
271 void processAVG(METEO_SET& vecMeteo, const size_t& startIdx, const size_t& endIdx) const;
272 void processMAX(METEO_SET& vecMeteo, const size_t& startIdx, const size_t& endIdx) const;
273 std::vector< std::string > merged_params; //as vector since order is important
274 std::string dest_param;
275 CombineType type;
276 bool replace;
277};
278
329 public:
330 EditingMerge(const std::string& i_stationID, const std::vector< std::pair<std::string, std::string> >& vecArgs, const std::string& name, const Config &cfg);
331
332 virtual void editTimeSeries(std::vector<METEO_SET>& vecMeteo) override;
333 virtual void editTimeSeries(STATIONS_SET& vecStation) override;
334
335 std::set<std::string> requiredIDs() const override;
336 private:
337 void parse_args(const std::vector< std::pair<std::string, std::string> >& vecArgs);
338 std::vector< std::string > merged_stations;
339 std::set< std::string > merged_params;
340 MeteoData::Merge_Type merge_strategy;
341 MeteoData::MERGE_CONFLICTS merge_conflicts;
342};
343
362 public:
363 EditingAutoMerge(const std::string& i_stationID, const std::vector< std::pair<std::string, std::string> >& vecArgs, const std::string& name, const Config &cfg);
364
365 virtual void editTimeSeries(std::vector<METEO_SET>& vecMeteo) override;
366 virtual void editTimeSeries(STATIONS_SET& vecStation) override;
367
368 private:
369 void parse_args(const std::vector< std::pair<std::string, std::string> >& vecArgs);
370 static void mergeStations(const size_t& toStationIdx, STATIONS_SET& vecStation);
371 void mergeMeteo(const size_t& toStationIdx, std::vector<METEO_SET>& vecMeteo) const;
372 MeteoData::Merge_Type merge_strategy;
373 MeteoData::MERGE_CONFLICTS merge_conflicts;
374};
375
394class EditingCopy : public EditingBlock {
395 public:
396 EditingCopy(const std::string& i_stationID, const std::vector< std::pair<std::string, std::string> >& vecArgs, const std::string& name, const Config &cfg);
397
398 virtual void editTimeSeries(std::vector<METEO_SET>& vecMeteo) override;
399
400 private:
401 void parse_args(const std::vector< std::pair<std::string, std::string> >& vecArgs);
402 std::string dest_param, src_param;
403};
404
436 public:
437 EditingCreate(const std::string& i_stationID, const std::vector< std::pair<std::string, std::string> >& vecArgs, const std::string& name, const Config &cfg);
438
439 virtual void editTimeSeries(std::vector<METEO_SET>& vecMeteo) override;
440
441 private:
442 static const std::vector< std::pair<std::string, std::string> > cleanGeneratorArgs(const std::vector< std::pair<std::string, std::string> >& vecArgs);
443 void parse_args(const std::vector< std::pair<std::string, std::string> >& vecArgs);
444
445 const Config &cfg_copy;
446 const std::vector< std::pair<std::string, std::string> > vecArgs_copy;
447 std::string algorithm, dest_param;
448};
449
489 public:
490 EditingMetadata(const std::string& i_stationID, const std::vector< std::pair<std::string, std::string> >& vecArgs, const std::string& name, const Config &cfg);
491
492 virtual void editTimeSeries(std::vector<METEO_SET>& vecMeteo) override;
493 virtual void editTimeSeries(STATIONS_SET& vecStation) override;
494
495 std::set<std::string> providedIDs() const override;
496
497 private:
498 void parse_args(const std::vector< std::pair<std::string, std::string> >& vecArgs);
499 void mergeMigratedData(std::vector<METEO_SET>& vecMeteo, const std::vector<METEO_SET>& vecTmp) const;
500
501 std::string new_name, new_id;
502 double lat, lon, alt, slope, azi;
503 bool edit_in_place;
504};
505
543 public:
549
550 public:
551 EditingRegFill(const std::string& i_stationID, const std::vector< std::pair<std::string, std::string> >& vecArgs, const std::string& name, const Config &cfg);
552
553 virtual void editTimeSeries(std::vector<METEO_SET>& vecMeteo) override;
554
555 private:
556 void parse_args(const std::vector< std::pair<std::string, std::string> >& vecArgs);
557 void fillTimeseries(METEO_SET& vecMeteo1, const METEO_SET& vecMeteo2);
558 std::vector< std::string > source_stations;
559 std::set< std::string > params_to_merge;
560 RegressionType regtype;
561 bool print_regression_info;
562};
563
592class EditingMove : public EditingBlock {
593 public:
594
595 public:
596 EditingMove(const std::string& i_stationID, const std::vector< std::pair<std::string, std::string> >& vecArgs, const std::string& name, const Config &cfg);
597
598 virtual void editTimeSeries(std::vector<METEO_SET>& vecMeteo) override;
599
600 private:
601 void parse_args(const std::vector< std::pair<std::string, std::string> >& vecArgs);
602 std::set<std::string> dest_stations;
603 std::set< std::string > params_to_move;
604
605 std::vector<MeteoData> createFullTimeSeries(const std::vector<MeteoData>& source, const std::vector<MeteoData>& dest) const;
606 bool isDestination(const std::string& stationID) const;
607
608 bool param_wildcard;
609 bool station_wildcard;
610 bool station_glob;
611};
612
642 public:
643
644 public:
645 EditingSplit(const std::string& i_stationID, const std::vector< std::pair<std::string, std::string> >& vecArgs, const std::string& name, const Config &cfg);
646
647 virtual void editTimeSeries(std::vector<METEO_SET>& vecMeteo) override;
648
649 private:
650 void parse_args(const std::vector< std::pair<std::string, std::string> >& vecArgs);
651 std::string dest_station_id;
652 std::set< std::string > params_to_move;
653
654 std::vector<MeteoData> splitTimeSeries(std::vector<MeteoData>& source);
655};
656
658 public:
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);
660};
661
662} //namespace
663
664#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:361
virtual void editTimeSeries(std::vector< METEO_SET > &vecMeteo) override
Apply this editing block.
Definition DataEditingAlgorithms.cc:488
Definition DataEditingAlgorithms.h:657
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:34
virtual void editTimeSeries(std::vector< METEO_SET > &vecMeteo)
Apply this editing block.
Definition DataEditingAlgorithms.h:46
std::string getName() const
Definition DataEditingAlgorithms.h:77
virtual ~EditingBlock()
Definition DataEditingAlgorithms.h:38
const std::vector< DateRange > time_restrictions
Definition DataEditingAlgorithms.h:83
virtual std::set< std::string > requiredIDs() const
Get the station IDs this editing block depends on for this station.
Definition DataEditingAlgorithms.h:60
const std::set< std::string > kept_stations
Definition DataEditingAlgorithms.h:82
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:84
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:84
virtual void editTimeSeries(STATIONS_SET &vecStation)
Apply this editing block to the StationData.
Definition DataEditingAlgorithms.h:54
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:82
virtual std::set< std::string > purgeIDs() const
Get the station IDs to purge after using them for this station ID.
Definition DataEditingAlgorithms.h:72
virtual std::set< std::string > providedIDs() const
Get the station IDs this editing block provides based on this station.
Definition DataEditingAlgorithms.h:66
COMBINE input editing command.
Definition DataEditingAlgorithms.h:255
CombineType
Definition DataEditingAlgorithms.h:257
@ AVG
take the average of all valid data
Definition DataEditingAlgorithms.h:260
@ FIRST
take the first valid data
Definition DataEditingAlgorithms.h:258
@ MAX
take the MAX of all valid data
Definition DataEditingAlgorithms.h:261
@ MIN
take the MIN of all valid data
Definition DataEditingAlgorithms.h:259
virtual void editTimeSeries(std::vector< METEO_SET > &vecMeteo) override
Apply this editing block.
Definition DataEditingAlgorithms.cc:658
COPY input editing command.
Definition DataEditingAlgorithms.h:394
virtual void editTimeSeries(std::vector< METEO_SET > &vecMeteo) override
Apply this editing block.
Definition DataEditingAlgorithms.cc:816
CREATE input editing command.
Definition DataEditingAlgorithms.h:435
virtual void editTimeSeries(std::vector< METEO_SET > &vecMeteo) override
Apply this editing block.
Definition DataEditingAlgorithms.cc:873
EXCLUDE input editing command.
Definition DataEditingAlgorithms.h:169
virtual void editTimeSeries(std::vector< METEO_SET > &vecMeteo) override
Apply this editing block.
Definition DataEditingAlgorithms.cc:339
KEEP input editing command.
Definition DataEditingAlgorithms.h:200
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:328
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:488
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:592
virtual void editTimeSeries(std::vector< METEO_SET > &vecMeteo) override
Apply this editing block.
Definition DataEditingAlgorithms.cc:1355
RegFill input editing command.
Definition DataEditingAlgorithms.h:542
RegressionType
Definition DataEditingAlgorithms.h:544
@ QUADRATIC
Definition DataEditingAlgorithms.h:546
@ CUBIC
Definition DataEditingAlgorithms.h:547
@ LINEAR
Definition DataEditingAlgorithms.h:545
virtual void editTimeSeries(std::vector< METEO_SET > &vecMeteo) override
Apply this editing block.
Definition DataEditingAlgorithms.cc:1092
RENAME input editing command.
Definition DataEditingAlgorithms.h:138
virtual void editTimeSeries(std::vector< METEO_SET > &vecMeteo) override
Apply this editing block.
Definition DataEditingAlgorithms.cc:274
Split input editing command.
Definition DataEditingAlgorithms.h:641
virtual void editTimeSeries(std::vector< METEO_SET > &vecMeteo) override
Apply this editing block.
Definition DataEditingAlgorithms.cc:1497
SWAP input editing command.
Definition DataEditingAlgorithms.h:102
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