MeteoIODoc  MeteoIODoc-2.9.0
MeteoData.h
Go to the documentation of this file.
1 /***********************************************************************************/
2 /* Copyright 2009 WSL Institute for Snow and Avalanche Research SLF-DAVOS */
3 /***********************************************************************************/
4 /* This file is part of MeteoIO.
5  MeteoIO is free software: you can redistribute it and/or modify
6  it under the terms of the GNU Lesser General Public License as published by
7  the Free Software Foundation, either version 3 of the License, or
8  (at your option) any later version.
9 
10  MeteoIO is distributed in the hope that it will be useful,
11  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  GNU Lesser General Public License for more details.
14 
15  You should have received a copy of the GNU Lesser General Public License
16  along with MeteoIO. If not, see <http://www.gnu.org/licenses/>.
17 */
18 #ifndef METEODATA_H
19 #define METEODATA_H
20 
23 
24 #include <string>
25 #include <vector>
26 #include <set>
27 
28 namespace mio {
29 
30 class MeteoData; //forward declaration
31 typedef std::vector<MeteoData> METEO_SET;
32 
42 class MeteoGrids {
43  public:
47  RH,
48  QI,
49  TD,
50  VW,
51  DW,
53  ISWR,
54  RSWR,
57  ILWR,
58  OLWR,
60  HS,
61  PSUM,
65  TSG,
66  TSS,
68  P,
70  U,
71  V,
72  W,
73  SWE,
74  RSNO,
75  ROT,
76  ALB,
77  DEM,
80  AZI,
82 
83  static const size_t nrOfParameters;
84  static size_t getParameterIndex(const std::string& parname);
85  static const std::string getParameterName(const size_t& parindex);
86  static const std::string getParameterDescription(const size_t& parindex, const bool& allow_ws=true);
87  static const std::string getParameterUnits(const size_t& parindex);
88 
89  private:
90  //static methods
91  static std::vector<std::string> paramname, description, units;
92  static const bool __init;
93  static bool initStaticData();
94 };
95 
105 class MeteoData {
106  public:
108  typedef enum {
110  COMPACT
111  } FORMATS;
112 
122  typedef enum MERGE_TYPE {
123  STRICT_MERGE=0,
124  EXPAND_MERGE=1,
125  FULL_MERGE=2
126  } Merge_Type;
127 
131  TA,
132  RH,
133  TSG,
134  TSS,
135  HS,
136  VW,
137  DW,
146 
147  static const std::string& getParameterName(const size_t& parindex);
148 
149  static size_t getStaticParameterIndex(const std::string& parname);
150 
154  MeteoData(void);
155 
160  MeteoData(const Date& in_date);
161 
167  MeteoData(const Date& date_in, const StationData& meta_in);
168 
173  void setDate(const Date& in_date) {date = in_date;}
174 
181  size_t addParameter(const std::string& i_paramname);
182 
188  bool param_exists(const std::string& parname) const;
189 
194  void reset();
195 
200  bool isNodata() const;
201 
202  bool isResampled() const {return resampled;}
203  void setResampled(const bool& in_resampled) {resampled = in_resampled;}
204 
205  bool isFiltered(const size_t& param) const;
206  void setFiltered(const size_t& param, const bool& in_filtered = true);
207  bool isGenerated(const size_t& param) const;
208  void setGenerated(const size_t& param, const bool& in_generated = true);
209  bool isResampledParam(const size_t& param) const;
210  void setResampledParam(const size_t& param, const bool& in_resampled = true);
211 
212  void standardizeNodata(const double& plugin_nodata);
213 
214  double& operator()(const size_t& parindex);
215  const double& operator()(const size_t& parindex) const;
216  double& operator()(const std::string& parname);
217  const double& operator()(const std::string& parname) const;
218 
219  const std::string& getNameForParameter(const size_t& parindex) const;
220  size_t getParameterIndex(const std::string& parname) const;
221  size_t getNrOfParameters() const {return nrOfAllParameters;}
222 
233  static void mergeTimeSeries(std::vector<MeteoData>& vec1, const std::vector<MeteoData>& vec2, const Merge_Type& strategy=STRICT_MERGE);
234 
248  static void merge(std::vector<MeteoData>& vec1, const std::vector<MeteoData>& vec2, const bool& simple_merge=false);
249 
262  static void merge(std::vector<MeteoData>& vec, const MeteoData& meteo2, const bool& simple_merge=false);
263 
275  static void merge(std::vector<MeteoData>& vec);
276 
285  static MeteoData merge(MeteoData meteo1, const MeteoData& meteo2);
286 
294  void merge(const MeteoData& meteo2);
295 
301  static MeteoData::Merge_Type getMergeType(std::string merge_type);
302 
308  static std::set<std::string> listAvailableParameters(const std::vector<MeteoData>& vecMeteo);
309 
315  const std::string toString(const FORMATS format=DFLT) const;
316  friend std::ostream& operator<<(std::ostream& os, const MeteoData& data);
317  friend std::istream& operator>>(std::istream& is, MeteoData& data);
318 
319  //Comparison operators
320  bool operator==(const MeteoData&) const;
321  inline bool operator!=(const MeteoData& in) const {return !(*this==in);}
322  inline bool operator<(const MeteoData& in) const {return (this->date < in.date);}
323  inline bool operator>(const MeteoData& in) const {return (this->date > in.date);}
324 
325  //direct access allowed
328 
329  static const size_t nrOfParameters;
330 
331  const std::string getStationID() const {return meta.stationID;}
332 
333  private:
334 
335  struct flag_field { //object to hold all data quality / datapoint meta flags
336  bool filtered : 1;
337  bool resampled : 1;
338  bool generated : 1;
339  bool created : 1; //TODO: not yet filled in the creators!
340  bool : 1; //leave one empty for future flag
341  unsigned int extra_flag : 3; //rest of byte space could be any 3-bit-value
342  float offset; //an offset that has been applied to the data at this time step
343  };
344 
345  //static methods
346  static std::vector<std::string> s_default_paramname;
347  static const double epsilon;
348  static const bool __init;
349  static bool initStaticData();
350 
351  //private data members, please keep the order consistent with declaration lists and logic!
352  std::vector<std::string> extra_param_name;
353  std::vector<double> data;
354 
355  size_t nrOfAllParameters;
356 
357  //data qa containers:
358  bool resampled;
359  std::vector<flag_field> flags;
360  static flag_field zero_flag; //TODO: is there a way to make this const?
361 };
362 
363 } //end namespace
364 
365 #endif
bool isResampled() const
Definition: MeteoData.h:202
Dew Point temperature.
Definition: MeteoData.h:49
Incoming short wave, diffuse.
Definition: MeteoData.h:55
bool operator>(const MeteoData &in) const
so vectors can be sorted by timestamps
Definition: MeteoData.h:323
std::istream & operator>>(std::istream &is, Config &cfg)
Definition: Config.cc:358
Height of snow.
Definition: MeteoData.h:135
Snow mean density.
Definition: MeteoData.h:74
North component of wind.
Definition: MeteoData.h:71
Definition: Config.cc:28
FORMATS
Keywords for selecting the toString formats.
Definition: MeteoData.h:108
Maximum wind velocity.
Definition: MeteoData.h:52
Cloud transmissivity or ISWR/ISWR_clear_sky.
Definition: MeteoData.h:59
static size_t getParameterIndex(const std::string &parname)
Definition: MeteoData.cc:109
Definition: MeteoData.h:45
std::string stationID
ID of the Station, typically a short string.
Definition: StationData.h:131
std::vector< MeteoData > METEO_SET
Definition: MeteoData.h:30
std::ostream & operator<<(std::ostream &os, const Config &cfg)
Definition: Config.cc:323
Precipitation phase: between 0 (fully solid) and 1(fully liquid)
Definition: MeteoData.h:144
Cloud transmissivity or ISWR/ISWR_clear_sky.
Definition: MeteoData.h:142
Relative humidity.
Definition: MeteoData.h:47
StationData meta
The meta data of the measurement.
Definition: MeteoData.h:327
Reflected short wave radiation.
Definition: MeteoData.h:139
Temperature within the soil, at a given depth.
Definition: MeteoData.h:67
Water equivalent of precipitations, either solid or liquid.
Definition: MeteoData.h:143
Definition: IOUtils.h:56
Definition: IOUtils.h:57
T standardizeNodata(const T &value, const double &plugin_nodata)
Standardize a given value to use MeteoIO&#39;s internal nodata value (if applicable)
Definition: IOUtils.h:399
Temperature snow surface.
Definition: MeteoData.h:66
bool operator<(const MeteoData &in) const
so vectors can be sorted by timestamps
Definition: MeteoData.h:322
Wind direction.
Definition: MeteoData.h:51
size_t getNrOfParameters() const
Definition: MeteoData.h:221
static const std::string getParameterUnits(const size_t &parindex)
Definition: MeteoData.cc:101
Albedo.
Definition: MeteoData.h:76
Air pressure.
Definition: MeteoData.h:68
Specific humidity.
Definition: MeteoData.h:48
Water equivalent of precipitations, either solid or liquid.
Definition: MeteoData.h:61
Incoming short wave radiation.
Definition: MeteoData.h:140
bool operator!=(const MeteoData &in) const
Operator that tests for inequality.
Definition: MeteoData.h:321
static const size_t nrOfParameters
holds the number of meteo parameters stored in MeteoData
Definition: MeteoData.h:329
Parameters
Definition: MeteoData.h:129
void setDate(const Date &in_date)
A setter function for the measurement date.
Definition: MeteoData.h:173
Water equivalent of solid precipitation.
Definition: MeteoData.h:64
Hillshade.
Definition: MeteoData.h:78
A class to represent the meteorological parameters that could be contained in a grid. This should be very close to MeteoData with a few additions (like the wind u,v,w)
Definition: MeteoData.h:42
Temperature of the snow surface.
Definition: MeteoData.h:134
Sea level air pressure.
Definition: MeteoData.h:69
Definition: IOUtils.h:55
East component of wind.
Definition: MeteoData.h:70
Vertical component of wind.
Definition: MeteoData.h:72
Air temperature.
Definition: MeteoData.h:46
Digital Elevation Model.
Definition: MeteoData.h:77
Total generated runoff.
Definition: MeteoData.h:75
Incoming short wave radiation.
Definition: MeteoData.h:53
Merge_Type
Available MeteoData merging strategies. When the two stations both have data at a given time step...
Definition: MeteoData.h:122
const std::string getStationID() const
Definition: MeteoData.h:331
Date date
Timestamp of the measurement.
Definition: MeteoData.h:326
Water equivalent of liquid precipitation.
Definition: MeteoData.h:63
static const size_t nrOfParameters
holds the number of meteo parameters stored in MeteoData
Definition: MeteoData.h:83
Precipitation phase, between 0 (fully solid) and 1 (fully liquid)
Definition: MeteoData.h:62
Snow Water Equivalent.
Definition: MeteoData.h:73
Maximum wind velocity.
Definition: MeteoData.h:138
Height of snow.
Definition: MeteoData.h:60
Air temperature.
Definition: MeteoData.h:131
A class to handle timestamps. This class handles conversion between different time display formats (I...
Definition: Date.h:82
Wind direction.
Definition: MeteoData.h:137
Relative humidity.
Definition: MeteoData.h:132
A class to represent meteo stations with attributes like longitude, latitude, etc.
Definition: StationData.h:40
std::string toString(const T &t)
Definition: IOUtils.h:277
Incoming short wave, direct.
Definition: MeteoData.h:56
Definition: MeteoData.h:81
Outgoing long wave radiation.
Definition: MeteoData.h:58
Incoming long wave radiation (downwelling)
Definition: MeteoData.h:141
Wind velocity.
Definition: MeteoData.h:136
A class to represent a singular measurement received from one station at a certain time (represented ...
Definition: MeteoData.h:105
Wind velocity.
Definition: MeteoData.h:50
Reflected short wave radiation.
Definition: MeteoData.h:54
DEM slope azimuth.
Definition: MeteoData.h:80
static const std::string getParameterName(const size_t &parindex)
Definition: MeteoData.cc:79
Shows detailed information, skipping nodata fields.
Definition: MeteoData.h:109
static const std::string getParameterDescription(const size_t &parindex, const bool &allow_ws=true)
Definition: MeteoData.cc:87
Incoming long wave radiation.
Definition: MeteoData.h:57
Temperature of the ground surface.
Definition: MeteoData.h:133
DEM slope angle.
Definition: MeteoData.h:79
Parameters
Definition: MeteoData.h:45
void setResampled(const bool &in_resampled)
Definition: MeteoData.h:203
Temperature ground surface.
Definition: MeteoData.h:65