MeteoIODoc  2.10.0
IOManager.h
Go to the documentation of this file.
1 // SPDX-License-Identifier: LGPL-3.0-or-later
2 /***********************************************************************************/
3 /* Copyright 2009 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 IOMANAGER_H
20 #define IOMANAGER_H
21 
22 #include <meteoio/DataGenerator.h>
26 #include <meteoio/GridsManager.h>
27 
28 namespace mio {
29 
30 class TimeSeriesManager;
31 class GridsManager;
32 class Meteo2DInterpolator;
33 
34 class IOManager {
35  public:
36  IOManager(const std::string& filename_in);
37  IOManager(const Config& i_cfg);
38 
39  //Legacy support to support functionality of the IOInterface superclass:
40  void read2DGrid(Grid2DObject& grid_out, const std::string& options="") {gdm1.read2DGrid(grid_out, options);}
41  void read2DGrid(Grid2DObject& grid_out, const MeteoGrids::Parameters& parameter, const Date& date) {gdm1.read2DGrid(grid_out, parameter, date);}
42  void read3DGrid(Grid3DObject& grid_out, const std::string& options="") {gdm1.read3DGrid(grid_out, options);}
43  void read3DGrid(Grid3DObject& grid_out, const MeteoGrids::Parameters& parameter, const Date& date) {gdm1.read3DGrid(grid_out, parameter, date);}
44  void readDEM(DEMObject& dem_out) {gdm1.readDEM(dem_out);}
45  void readAssimilationData(const Date& date_in, Grid2DObject& da_out) {gdm1.readAssimilationData(date_in, da_out);}
46  void readLanduse(Grid2DObject& landuse_out) {gdm1.readLanduse(landuse_out);}
47  void readGlacier(Grid2DObject& glacier_out) {gdm1.readGlacier(glacier_out);}
48  void readPOI(std::vector<Coords>& pts) {iohandler.readPOI(pts);}
49  void write2DGrid(const Grid2DObject& grid_in, const std::string& options="") {gdm1.write2DGrid(grid_in, options);}
50  void write2DGrid(const Grid2DObject& grid_in, const MeteoGrids::Parameters& parameter, const Date& date) {gdm1.write2DGrid(grid_in, parameter, date);}
51  void write3DGrid(const Grid3DObject& grid_in, const std::string& options="") {gdm1.write3DGrid(grid_in, options);}
52  void write3DGrid(const Grid3DObject& grid_in, const MeteoGrids::Parameters& parameter, const Date& date) {gdm1.write3DGrid(grid_in, parameter, date);}
53  bool list2DGrids(const Date& start, const Date& end, std::map<Date, std::set<size_t> > &list){return iohandler.list2DGrids(start,end,list);}
54  //end legacy support
55 
56  size_t getStationData(const Date& date, STATIONS_SET& vecStation);
57 
81  size_t getMeteoData(const Date& dateStart, const Date& dateEnd, std::vector< METEO_SET >& vecVecMeteo);
82 
104  size_t getMeteoData(const Date& i_date, METEO_SET& vecMeteo);
105 
117  void push_meteo_data(const IOUtils::ProcessingLevel& level, const Date& date_start, const Date& date_end,
118  const std::vector< METEO_SET >& vecMeteo) {tsm1.push_meteo_data(level, date_start, date_end, vecMeteo);}
119 
144  bool getMeteoData(const Date& date, const DEMObject& dem, const MeteoData::Parameters& meteoparam,
145  Grid2DObject& result);
146 
147  bool getMeteoData(const Date& date, const DEMObject& dem, const std::string& param_name,
148  Grid2DObject& result);
149 
150  bool getMeteoData(const Date& date, const DEMObject& dem, const MeteoData::Parameters& meteoparam,
151  Grid2DObject& result, std::string& info_string);
152 
153  bool getMeteoData(const Date& date, const DEMObject& dem, const std::string& param_name,
154  Grid2DObject& result, std::string& info_string);
155 
156  void interpolate(const Date& date, const DEMObject& dem, const MeteoData::Parameters& meteoparam,
157  const std::vector<Coords>& in_coords, std::vector<double>& result);
158 
159  void interpolate(const Date& date, const DEMObject& dem, const MeteoData::Parameters& meteoparam,
160  const std::vector<Coords>& in_coords, std::vector<double>& result, std::string& info_string);
161 
162  void interpolate(const Date& date, const DEMObject& dem, const MeteoData::Parameters& meteoparam,
163  const std::vector<StationData>& in_stations, std::vector<double>& result, std::string& info_string);
164 
177  void setProcessingLevel(const unsigned int& i_level);
178 
187  void setMinBufferRequirements(const double& buffer_size, const double& buff_before) {tsm1.setBufferProperties(buffer_size, buff_before);}
188 
198  double getAvgSamplingRate() const;
199 
200  void writeMeteoData(const std::vector< METEO_SET >& vecMeteo, const std::string& option="") {tsm1.writeMeteoData(vecMeteo, option);}
201 
207  const Config getConfig() const {return cfg;}
208 
209  const std::string toString() const;
210 
219  void add_to_points_cache(const Date& i_date, const METEO_SET& vecMeteo);
220 
224  void clear_cache();
225 
226  private:
232  static IOUtils::OperationMode getIOManagerTSMode(const Config& i_cfg);
233 
239  static IOUtils::OperationMode getIOManagerGridMode(const Config& i_cfg);
240 
241  void initVirtualStations();
242  std::vector<METEO_SET> getVirtualStationsData(const DEMObject& dem, const Date& dateStart, const Date& dateEnd);
243  void initIOManager();
244 
245  const Config cfg;
246  const IOUtils::OperationMode ts_mode;
247  IOHandler iohandler;
248  TimeSeriesManager tsm1, tsm2;
249  GridsManager gdm1;
250  Meteo2DInterpolator interpolator;
251  DEMObject source_dem;
252  std::vector<size_t> v_params, grids_params;
253  std::vector<StationData> v_stations, v_gridstations;
254  unsigned int vstations_refresh_rate, vstations_refresh_offset;
255  bool write_resampled_grids = false;
256 };
257 } //end namespace
258 #endif
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 represent DEMs and automatically compute some properties. This class stores elevation grid...
Definition: DEMObject.h:40
A class to handle timestamps. This class handles conversion between different time display formats (I...
Definition: Date.h:87
A class to represent 2D Grids. Typical application as DEM or Landuse Model.
Definition: Grid2DObject.h:42
A class to represent 3D Grids. Typical application: wind field.
Definition: Grid3DObject.h:39
Definition: GridsManager.h:33
void readAssimilationData(const Date &date_in, Grid2DObject &da_out)
Definition: GridsManager.cc:139
void read3DGrid(Grid3DObject &grid_out, const std::string &i_filename="")
Definition: GridsManager.h:42
void read2DGrid(Grid2DObject &grid_out, const std::string &option="")
Read the requested grid, according to the configured processing level.
Definition: GridsManager.cc:70
void readGlacier(Grid2DObject &landuse_out)
Definition: GridsManager.cc:126
void write3DGrid(const Grid3DObject &grid_out, const std::string &options="")
Definition: GridsManager.h:52
void write2DGrid(const Grid2DObject &grid_in, const std::string &options="")
Definition: GridsManager.h:50
void readDEM(DEMObject &dem_out)
Definition: GridsManager.cc:96
void readLanduse(Grid2DObject &landuse_out)
Definition: GridsManager.cc:113
This class is the class to use for raw I/O operations. It is responsible for transparently loading th...
Definition: IOHandler.h:37
virtual bool list2DGrids(const Date &start, const Date &end, std::map< Date, std::set< size_t > > &list)
Return the list of grids within a given time period that could be read by the plugin,...
Definition: IOHandler.cc:365
virtual void readPOI(std::vector< Coords > &pts)
Read a list of points by their grid coordinates This allows for example to get a list of points where...
Definition: IOHandler.cc:478
Definition: IOManager.h:34
void write3DGrid(const Grid3DObject &grid_in, const std::string &options="")
Definition: IOManager.h:51
void write3DGrid(const Grid3DObject &grid_in, const MeteoGrids::Parameters &parameter, const Date &date)
Definition: IOManager.h:52
double getAvgSamplingRate() const
Returns the average sampling rate in the data. This computes the average sampling rate of the data th...
Definition: IOManager.cc:538
void interpolate(const Date &date, const DEMObject &dem, const MeteoData::Parameters &meteoparam, const std::vector< Coords > &in_coords, std::vector< double > &result)
Definition: IOManager.cc:518
bool list2DGrids(const Date &start, const Date &end, std::map< Date, std::set< size_t > > &list)
Definition: IOManager.h:53
void add_to_points_cache(const Date &i_date, const METEO_SET &vecMeteo)
Add a METEO_SET for a specific instance to the point cache. This is a way to manipulate MeteoData var...
Definition: IOManager.cc:543
void setProcessingLevel(const unsigned int &i_level)
Set the desired ProcessingLevel of the IOManager instance The processing level affects the way meteo ...
Definition: IOManager.cc:297
void read2DGrid(Grid2DObject &grid_out, const MeteoGrids::Parameters &parameter, const Date &date)
Definition: IOManager.h:41
void read2DGrid(Grid2DObject &grid_out, const std::string &options="")
Definition: IOManager.h:40
void readDEM(DEMObject &dem_out)
Definition: IOManager.h:44
void readLanduse(Grid2DObject &landuse_out)
Definition: IOManager.h:46
void readAssimilationData(const Date &date_in, Grid2DObject &da_out)
Definition: IOManager.h:45
IOManager(const std::string &filename_in)
Definition: IOManager.cc:225
void write2DGrid(const Grid2DObject &grid_in, const MeteoGrids::Parameters &parameter, const Date &date)
Definition: IOManager.h:50
size_t getStationData(const Date &date, STATIONS_SET &vecStation)
Definition: IOManager.cc:310
const Config getConfig() const
Returns a copy of the internal Config object. This is convenient to clone an iomanager.
Definition: IOManager.h:207
void readPOI(std::vector< Coords > &pts)
Definition: IOManager.h:48
void clear_cache()
Clear the all cache. All raw, filtered and resampled values are dismissed, will need to be re-read an...
Definition: IOManager.cc:303
const std::string toString() const
Definition: IOManager.cc:589
size_t getMeteoData(const Date &dateStart, const Date &dateEnd, std::vector< METEO_SET > &vecVecMeteo)
Fill vecMeteo with a time series of objects corresponding to the interval indicated by dateStart and ...
Definition: IOManager.cc:328
void setMinBufferRequirements(const double &buffer_size, const double &buff_before)
Set buffer window properties requirements as known to the application itself. This will compare these...
Definition: IOManager.h:187
void write2DGrid(const Grid2DObject &grid_in, const std::string &options="")
Definition: IOManager.h:49
void writeMeteoData(const std::vector< METEO_SET > &vecMeteo, const std::string &option="")
Definition: IOManager.h:200
void read3DGrid(Grid3DObject &grid_out, const std::string &options="")
Definition: IOManager.h:42
void read3DGrid(Grid3DObject &grid_out, const MeteoGrids::Parameters &parameter, const Date &date)
Definition: IOManager.h:43
void push_meteo_data(const IOUtils::ProcessingLevel &level, const Date &date_start, const Date &date_end, const std::vector< METEO_SET > &vecMeteo)
Push a vector of time series of MeteoData objects into the IOManager. This overwrites any internal bu...
Definition: IOManager.h:117
void readGlacier(Grid2DObject &glacier_out)
Definition: IOManager.h:47
A class to spatially interpolate meteo parameters. For more, see Spatial interpolations.
Definition: Meteo2DInterpolator.h:97
Parameters
this enum provides indexed access to meteorological fields
Definition: MeteoData.h:144
Parameters
this enum provides names for possible meteogrids (from an ARPS file, etc)
Definition: MeteoData.h:46
Definition: TimeSeriesManager.h:31
void setBufferProperties(const double &buffer_size, const double &buff_before)
Set buffer window properties requirements as known to the application itself.
Definition: TimeSeriesManager.cc:75
void writeMeteoData(const std::vector< METEO_SET > &vecMeteo, const std::string &name="")
Definition: TimeSeriesManager.cc:335
void push_meteo_data(const IOUtils::ProcessingLevel &level, const Date &date_start, const Date &date_end, const std::vector< MeteoData > &vecMeteo, const bool &invalidate_cache=true)
Push a vector of time series of MeteoData objects into the TimeSeriesManager. This overwrites any int...
Definition: TimeSeriesManager.cc:196
Definition: getopt.h:65
OperationMode
Keywords for mode of operation. Please keep all the GRID_xxx last!
Definition: IOUtils.h:63
ProcessingLevel
Definition: IOUtils.h:54
Definition: Config.cc:30
std::vector< MeteoData > METEO_SET
Definition: MeteoData.h:31
std::vector< StationData > STATIONS_SET
Definition: StationData.h:141