IODA
src/io/IodaIO.h
Go to the documentation of this file.
1 /*
2  * (C) Copyright 2017-2019 UCAR
3  *
4  * This software is licensed under the terms of the Apache Licence Version 2.0
5  * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
6  */
7 
8 #ifndef IO_IODAIO_H_
9 #define IO_IODAIO_H_
10 
11 #include <map>
12 #include <memory>
13 #include <string>
14 #include <vector>
15 
16 #include "eckit/mpi/Comm.h"
17 
18 #include "oops/util/Printable.h"
19 
20 #include "ioda/distribution/Distribution.h"
21 
22 // Forward declarations
23 namespace eckit {
24  class Configuration;
25 }
26 
27 namespace ioda {
28 
29 //---------------------------------------------------------------------------------------
30 /*! \brief frame data map
31  *
32  * \details This class contains the current frame data
33  *
34  */
35 template<typename FrameType>
36 class FrameDataMap {
37  private:
38  typedef std::map<std::string, std::vector<FrameType>> FrameStore;
39 
40  public:
41  typedef typename FrameStore::iterator FrameStoreIter;
42  FrameStoreIter begin() { return frame_container_.begin(); }
43  FrameStoreIter end() { return frame_container_.end(); }
44  size_t size() { return frame_container_.size(); }
45 
46  bool has(const std::string & GroupName, const std::string & VarName) {
47  std::string VarGrpName = VarName + "@" + GroupName;
48  return (frame_container_.find(VarGrpName) != frame_container_.end());
49  }
50 
51  std::string get_gname(FrameStoreIter & Iframe) {
52  std::string GrpVarName = Iframe->first;
53  std::size_t Spos = GrpVarName.find("@");
54  return GrpVarName.substr(Spos+1);
55  }
56  std::string get_vname(FrameStoreIter & Iframe) {
57  std::string GrpVarName = Iframe->first;
58  std::size_t Spos = GrpVarName.find("@");
59  return GrpVarName.substr(0, Spos);
60  }
61  std::vector<FrameType> get_data(FrameStoreIter & Iframe) { return Iframe->second; }
62 
63  void get_data(const std::string & GroupName, const std::string & VarName,
64  std::vector<FrameType> & VarData) {
65  std::string VarGrpName = VarName + "@" + GroupName;
66  VarData = frame_container_.at(VarGrpName);
67  }
68  void put_data(const std::string & GroupName, const std::string & VarName,
69  const std::vector<FrameType> & VarData) {
70  std::string VarGrpName = VarName + "@" + GroupName;
71  frame_container_[VarGrpName] = VarData;
72  }
73 
74  private:
76 };
77 
78 //---------------------------------------------------------------------------------------
79 /*!
80  * \brief File access class for IODA
81  *
82  * \details The IodaIO class provides the interface for file access. Note that IodaIO is an
83  * abstract base class.
84  *
85  * There are two dimensions defined in the file:
86  *
87  * nlocs: number of locations
88  * nvars: number of variables
89  *
90  * Files are logically organized as a 2D array (table) where the rows are locations (nlocs)
91  * and the columns are variables (nvars). To avoid reading in the entire file into a table,
92  * and then selecting observations, the selection process is done on the fly. The table in
93  * the file is partitioned into "frames" where a frame is cut along a row. For example, the
94  * first frame consists of the first n rows; the second frame, the next n rows; etc.
95  *
96  * The frame idea is taken from ODB file organization. It is possible to treat a netcdf
97  * file as consisting of frames using the netcdf hyperslab access scheme. Treating both
98  * ODB and netcdf files as sets of frames allows IodaIO to remain file agnostic, making
99  * it easier to handle both ODB and netcdf files.
100  *
101  * Missing values are allowed for variable data. The native scheme for each file type is
102  * recognized and when reading/writing file data, the missing values are converted to the
103  * JEDI in-memory missing values. This again aids in keeping IodaIO file agnostic.
104  *
105  * IodaIO provides access to files via a frame object. The idea, when reading, is to iterate
106  * over frames where the first action of each iteration is to read the frame from the
107  * file (frame_read method) then walk through the frame to read the individual variable
108  * data values (for that frame). Similarly, when writing, the first action is to fill in
109  * a frame object with the individual variable values (for that frame) and then write
110  * that frame to the file (frame_write method). For details see the code examples in the
111  * test_ioda_io test and the ObsData class methods InitFromFile and SaveToFile.
112  *
113  * \author Stephen Herbener (JCSDA)
114  */
115 
116 class IodaIO : public util::Printable {
117  protected:
118  // typedefs - these need to defined here before the public typedefs that use them
119 
120  // Container for information about a variable. Use a nested map structure with the group
121  // name for the key in the outer nest, and the variable name for the key in the inner
122  // nest. var_id relates to the variable's id in the file. file_shape relates to the
123  // variable's shape in the file, whereas shape relates to the variable's shape internally.
124  //
125  // The place where file_shape and shape are different, for example, are strings in netcdf
126  // files. In the file, a vector of strings is stored as a character array (2D) whereas
127  // internally, a vector of strings is stored in the std::vector<std::string> container
128  // which is 1D.
129  struct VarInfoRec {
130  std::string dtype;
131  std::size_t var_id;
132  std::vector<std::size_t> file_shape;
133  std::string file_name;
134  std::string file_type;
135  std::vector<std::size_t> shape;
136  std::vector<std::string> dim_names;
137  };
138 
139  /*!
140  * \brief variable information map
141  *
142  * \details This typedef is part of the group-variable map which is a nested map
143  * containing information about the variables in the input file (see
144  * GroupVarInfoMap typedef for details).
145  */
146  typedef std::map<std::string, VarInfoRec> VarInfoMap;
147 
148  /*!
149  * \brief group-variable information map
150  *
151  * \details This typedef is defining the group-variable map which is a nested map
152  * containing information about the variables in the input file.
153  * This map is keyed first by group name, then by variable name and is
154  * used to pass information to the caller so that the caller can iterate
155  * through the contents of the input file.
156  */
157  typedef std::map<std::string, VarInfoMap> GroupVarInfoMap;
158 
159  // Container for information about a dimension. Holds dimension id and size.
160  struct DimInfoRec {
161  std::size_t size;
162  int id;
163  };
164 
165  /*!
166  * \brief dimension information map
167  *
168  * \details This typedef is dimension information map which containes
169  * information about the dimensions of the variables.
170  */
171  typedef std::map<std::string, DimInfoRec> DimInfoMap;
172 
173  // Container for information about frames.
174  struct FrameInfoRec {
175  std::size_t start;
176  std::size_t size;
177 
178  // Constructor
179  FrameInfoRec(const std::size_t Start, const std::size_t Size) :
180  start(Start), size(Size) {}
181  };
182 
183  /*!
184  * \brief frame information map
185  *
186  * \details This typedef contains information about the frames in the file
187  */
188  typedef std::vector<FrameInfoRec> FrameInfo;
189 
190  public:
191  static void ExtractGrpVarName(const std::string & Name, std::string & GroupName,
192  std::string & VarName);
193 
194  IodaIO(const std::string & FileName, const std::string & FileMode,
195  const std::size_t MaxFrameSize);
196 
197  virtual ~IodaIO() = 0;
198 
199  // Methods provided by subclasses
200 
201  // Methods defined in base class
202  std::string fname() const;
203  std::string fmode() const;
204 
205  std::size_t nlocs() const;
206  std::size_t nvars() const;
207 
208  bool unexpected_data_types() const;
209  bool excess_dims() const;
210 
211  // Group level iterator
212  /*!
213  * \brief group-variable map, group iterator
214  *
215  * \details This typedef is defining the iterator for the group key in the
216  * group-variable map. See the GrpVarInfoMap typedef for details.
217  */
218  typedef GroupVarInfoMap::const_iterator GroupIter;
221  std::string group_name(GroupIter);
222 
223  // Variable level iterator
224  /*!
225  * \brief group-variable map, variable iterator
226  *
227  * \details This typedef is defining the iterator for the variable key in the
228  * group-variable map. See the GrpVarInfoMap typedef for details.
229  */
230  typedef VarInfoMap::const_iterator VarIter;
233  std::string var_name(VarIter);
234 
235  // Access to variable information
236  bool grp_var_exists(const std::string &, const std::string &);
237  std::string var_dtype(VarIter);
238  std::string var_dtype(const std::string &, const std::string &);
239  std::vector<std::size_t> var_shape(VarIter);
240  std::vector<std::size_t> var_shape(const std::string &, const std::string &);
241  std::vector<std::size_t> file_shape(VarIter);
242  std::vector<std::size_t> file_shape(const std::string &, const std::string &);
243  std::string file_name(VarIter);
244  std::string file_name(const std::string &, const std::string &);
245  std::string file_type(VarIter);
246  std::string file_type(const std::string &, const std::string &);
247  std::size_t var_id(VarIter);
248  std::size_t var_id(const std::string &, const std::string &);
249 
250  void grp_var_insert(const std::string & GroupName, const std::string & VarName,
251  const std::string & VarType, const std::vector<std::size_t> & VarShape,
252  const std::string & FileVarName, const std::string & FileType,
253  const std::size_t MaxStringSize = 0);
254 
255  // Access to dimension information
256  typedef DimInfoMap::const_iterator DimIter;
257  DimIter dim_begin();
258  DimIter dim_end();
259 
260  bool dim_exists(const std::string &);
261 
262  std::string dim_name(DimIter);
263  int dim_id(DimIter);
264  std::size_t dim_size(DimIter);
265 
266  std::size_t dim_id_size(const int &);
267  std::string dim_id_name(const int &);
268 
269  std::size_t dim_name_size(const std::string &);
270  int dim_name_id(const std::string &);
271 
272  void dim_insert(const std::string &, const std::size_t);
273 
274  // Access to data frames
275  typedef FrameInfo::const_iterator FrameIter;
278  void frame_initialize();
279  void frame_finalize();
280 
281  std::size_t frame_start(FrameIter &);
282  std::size_t frame_size(FrameIter &);
283 
284  void frame_info_init(std::size_t MaxVarSize);
285  void frame_info_insert(std::size_t Start, std::size_t Size);
286  void frame_data_init();
287  void frame_read(FrameIter &);
288  void frame_write(FrameIter &);
289 
290  // Integer frame access
294  bool frame_int_has(std::string & GroupName, std::string& VarName) {
295  return int_frame_data_->has(GroupName, VarName);
296  }
297  std::vector<int> frame_int_get_data(FrameIntIter & iframe) {
298  return int_frame_data_->get_data(iframe);
299  }
300  std::string frame_int_get_gname(FrameIntIter & iframe) {
301  return int_frame_data_->get_gname(iframe);
302  }
303  std::string frame_int_get_vname(FrameIntIter & iframe) {
304  return int_frame_data_->get_vname(iframe);
305  }
306  void frame_int_get_data(std::string & GroupName, std::string& VarName,
307  std::vector<int> & VarData) {
308  int_frame_data_->get_data(GroupName, VarName, VarData);
309  }
310  void frame_int_put_data(std::string & GroupName, std::string& VarName,
311  std::vector<int> & VarData) {
312  int_frame_data_->put_data(GroupName, VarName, VarData);
313  }
314 
315  // Float frame access
319  bool frame_float_has(std::string & GroupName, std::string& VarName) {
320  return float_frame_data_->has(GroupName, VarName);
321  }
322  std::vector<float> frame_float_get_data(FrameFloatIter & iframe) {
323  return float_frame_data_->get_data(iframe);
324  }
325  std::string frame_float_get_gname(FrameFloatIter & iframe) {
326  return float_frame_data_->get_gname(iframe);
327  }
328  std::string frame_float_get_vname(FrameFloatIter & iframe) {
329  return float_frame_data_->get_vname(iframe);
330  }
331  void frame_float_get_data(std::string & GroupName, std::string& VarName,
332  std::vector<float> & VarData) {
333  float_frame_data_->get_data(GroupName, VarName, VarData);
334  }
335  void frame_float_put_data(std::string & GroupName, std::string& VarName,
336  std::vector<float> & VarData) {
337  float_frame_data_->put_data(GroupName, VarName, VarData);
338  }
339 
340  // String frame access
344  bool frame_string_has(std::string & GroupName, std::string& VarName) {
345  return string_frame_data_->has(GroupName, VarName);
346  }
347  std::vector<std::string> frame_string_get_data(FrameStringIter & iframe) {
348  return string_frame_data_->get_data(iframe);
349  }
350  std::string frame_string_get_gname(FrameStringIter & iframe) {
351  return string_frame_data_->get_gname(iframe);
352  }
353  std::string frame_string_get_vname(FrameStringIter & iframe) {
354  return string_frame_data_->get_vname(iframe);
355  }
356  void frame_string_get_data(std::string & GroupName, std::string& VarName,
357  std::vector<std::string> & VarData) {
358  string_frame_data_->get_data(GroupName, VarName, VarData);
359  }
360  void frame_string_put_data(std::string & GroupName, std::string& VarName,
361  std::vector<std::string> & VarData) {
362  string_frame_data_->put_data(GroupName, VarName, VarData);
363  }
364 
365 
366  protected:
367  // Methods provided by subclasses
368  virtual void DimInsert(const std::string & Name, const std::size_t Size) = 0;
369 
370  virtual void InitializeFrame() = 0;
371  virtual void FinalizeFrame() = 0;
372  virtual void ReadFrame(IodaIO::FrameIter & iframe) = 0;
373  virtual void WriteFrame(IodaIO::FrameIter & iframe) = 0;
374 
375  virtual void GrpVarInsert(const std::string & GroupName, const std::string & VarName,
376  const std::string & VarType, const std::vector<std::size_t> & VarShape,
377  const std::string & FileVarName, const std::string & FileType,
378  const std::size_t MaxStringSize) = 0;
379 
380  // Data members
381 
382  /*! \brief file name */
383  std::string fname_;
384 
385  /*!
386  * \brief file mode
387  *
388  * \details File modes that are accepted are: "r" -> read, "w" -> overwrite,
389  and "W" -> create and write.
390  */
391  std::string fmode_;
392 
393  /*! \brief number of unique locations */
394  std::size_t nlocs_;
395 
396  /*! \brief number of unique variables */
397  std::size_t nvars_;
398 
399  /*! \brief count of unexpected data types */
400  std::size_t num_unexpect_dtypes_;
401 
402  /*! \brief count of too many dimensions */
403  std::size_t num_excess_dims_;
404 
405  /*! \brief group-variable information map */
407 
408  /*! \brief dimension information map */
410 
411  /*! \brief frame information vector */
413 
414  /*! \brief maximum frame size */
415  std::size_t max_frame_size_;
416 
417  /*! \brief Containers for file frame */
418  std::unique_ptr<FrameDataMap<int>> int_frame_data_;
419  std::unique_ptr<FrameDataMap<float>> float_frame_data_;
420  std::unique_ptr<FrameDataMap<std::string>> string_frame_data_;
421 };
422 
423 } // namespace ioda
424 
425 #endif // IO_IODAIO_H_
ioda::FrameDataMap::end
FrameStoreIter end()
Definition: src/io/IodaIO.h:43
ioda::IodaIO::frame_int_get_data
std::vector< int > frame_int_get_data(FrameIntIter &iframe)
Definition: src/io/IodaIO.h:297
ioda::IodaIO::VarIter
VarInfoMap::const_iterator VarIter
group-variable map, variable iterator
Definition: src/io/IodaIO.h:230
ioda::IodaIO::frame_float_get_data
void frame_float_get_data(std::string &GroupName, std::string &VarName, std::vector< float > &VarData)
Definition: src/io/IodaIO.h:331
ioda::IodaIO::DimInfoRec
Definition: src/io/IodaIO.h:160
ioda::IodaIO::grp_var_insert
void grp_var_insert(const std::string &GroupName, const std::string &VarName, const std::string &VarType, const std::vector< std::size_t > &VarShape, const std::string &FileVarName, const std::string &FileType, const std::size_t MaxStringSize=0)
Definition: IodaIO.cc:394
ioda::IodaIO::num_unexpect_dtypes_
std::size_t num_unexpect_dtypes_
count of unexpected data types
Definition: src/io/IodaIO.h:400
ioda::IodaIO::VarInfoRec
Definition: src/io/IodaIO.h:129
ioda::IodaIO::dim_insert
void dim_insert(const std::string &, const std::size_t)
Definition: IodaIO.cc:551
ioda::FrameDataMap::get_vname
std::string get_vname(FrameStoreIter &Iframe)
Definition: src/io/IodaIO.h:56
ioda::IodaIO::VarInfoRec::file_shape
std::vector< std::size_t > file_shape
Definition: src/io/IodaIO.h:132
ioda::IodaIO::DimInfoRec::id
int id
Definition: src/io/IodaIO.h:162
ioda::IodaIO::fname
std::string fname() const
Definition: IodaIO.cc:34
ioda::IodaIO::dim_exists
bool dim_exists(const std::string &)
Definition: IodaIO.cc:410
ioda::IodaIO::frame_string_has
bool frame_string_has(std::string &GroupName, std::string &VarName)
Definition: src/io/IodaIO.h:344
ioda::IodaIO::frame_int_has
bool frame_int_has(std::string &GroupName, std::string &VarName)
Definition: src/io/IodaIO.h:294
ioda::IodaIO::FrameIntIter
FrameDataMap< int >::FrameStoreIter FrameIntIter
Definition: src/io/IodaIO.h:291
ioda::IodaIO::GroupIter
GroupVarInfoMap::const_iterator GroupIter
group-variable map, group iterator
Definition: src/io/IodaIO.h:218
ioda::IodaIO::group_end
GroupIter group_end()
Definition: IodaIO.cc:99
ioda::IodaIO::frame_string_get_vname
std::string frame_string_get_vname(FrameStringIter &iframe)
Definition: src/io/IodaIO.h:353
ioda::IodaIO::nlocs
std::size_t nlocs() const
Definition: IodaIO.cc:52
ioda::IodaIO::frame_info_
FrameInfo frame_info_
frame information vector
Definition: src/io/IodaIO.h:412
ioda::IodaIO::frame_string_end
FrameStringIter frame_string_end()
Definition: src/io/IodaIO.h:343
ioda::FrameDataMap::size
size_t size()
Definition: src/io/IodaIO.h:44
ioda::IodaIO::max_frame_size_
std::size_t max_frame_size_
maximum frame size
Definition: src/io/IodaIO.h:415
ioda::FrameDataMap::begin
FrameStoreIter begin()
Definition: src/io/IodaIO.h:42
ioda::IodaIO::FrameIter
FrameInfo::const_iterator FrameIter
Definition: src/io/IodaIO.h:275
ioda::IodaIO::fmode_
std::string fmode_
file mode
Definition: src/io/IodaIO.h:391
ioda::IodaIO::frame_string_get_data
void frame_string_get_data(std::string &GroupName, std::string &VarName, std::vector< std::string > &VarData)
Definition: src/io/IodaIO.h:356
ioda::IodaIO::FrameInfo
std::vector< FrameInfoRec > FrameInfo
frame information map
Definition: src/io/IodaIO.h:188
ioda::IodaIO::int_frame_data_
std::unique_ptr< FrameDataMap< int > > int_frame_data_
Containers for file frame.
Definition: src/io/IodaIO.h:418
ioda::FrameDataMap::has
bool has(const std::string &GroupName, const std::string &VarName)
Definition: src/io/IodaIO.h:46
ioda::IodaIO::frame_int_get_gname
std::string frame_int_get_gname(FrameIntIter &iframe)
Definition: src/io/IodaIO.h:300
ioda::IodaIO::frame_int_begin
FrameIntIter frame_int_begin()
Definition: src/io/IodaIO.h:292
ioda::IodaIO::frame_start
std::size_t frame_start(FrameIter &)
start value of current frame
Definition: IodaIO.cc:595
ioda::IodaIO::dim_info_
DimInfoMap dim_info_
dimension information map
Definition: src/io/IodaIO.h:409
ioda::IodaIO::InitializeFrame
virtual void InitializeFrame()=0
ioda::IodaIO::var_name
std::string var_name(VarIter)
Definition: IodaIO.cc:147
ioda::IodaIO::GrpVarInsert
virtual void GrpVarInsert(const std::string &GroupName, const std::string &VarName, const std::string &VarType, const std::vector< std::size_t > &VarShape, const std::string &FileVarName, const std::string &FileType, const std::size_t MaxStringSize)=0
ioda::IodaIO::fmode
std::string fmode() const
Definition: IodaIO.cc:43
ioda::IodaIO::frame_write
void frame_write(FrameIter &)
write from the frame containers into the file
Definition: IodaIO.cc:664
ioda::FrameDataMap::get_data
std::vector< FrameType > get_data(FrameStoreIter &Iframe)
Definition: src/io/IodaIO.h:61
ioda::IodaIO::dim_name_size
std::size_t dim_name_size(const std::string &)
Definition: IodaIO.cc:520
ioda::IodaIO::frame_int_get_data
void frame_int_get_data(std::string &GroupName, std::string &VarName, std::vector< int > &VarData)
Definition: src/io/IodaIO.h:306
ioda::IodaIO::frame_float_put_data
void frame_float_put_data(std::string &GroupName, std::string &VarName, std::vector< float > &VarData)
Definition: src/io/IodaIO.h:335
ioda::IodaIO::frame_read
void frame_read(FrameIter &)
read from the file into the frame containers
Definition: IodaIO.cc:655
ioda::IodaIO::FinalizeFrame
virtual void FinalizeFrame()=0
ioda::IodaIO::frame_int_end
FrameIntIter frame_int_end()
Definition: src/io/IodaIO.h:293
ioda::IodaIO::frame_float_has
bool frame_float_has(std::string &GroupName, std::string &VarName)
Definition: src/io/IodaIO.h:319
ioda::IodaIO::var_id
std::size_t var_id(VarIter)
Definition: IodaIO.cc:360
ioda
Definition: IodaUtils.cc:13
ioda::IodaIO::float_frame_data_
std::unique_ptr< FrameDataMap< float > > float_frame_data_
Definition: src/io/IodaIO.h:419
ioda::FrameDataMap::FrameStore
std::map< std::string, std::vector< FrameType > > FrameStore
Definition: src/io/IodaIO.h:38
ioda::FrameDataMap::get_gname
std::string get_gname(FrameStoreIter &Iframe)
Definition: src/io/IodaIO.h:51
ioda::IodaIO::dim_id_name
std::string dim_id_name(const int &)
Definition: IodaIO.cc:496
ioda::IodaIO::var_end
VarIter var_end(GroupIter)
Definition: IodaIO.cc:135
ioda::IodaIO::frame_finalize
void frame_finalize()
finalize frame access
Definition: IodaIO.cc:586
ioda::IodaIO::FrameInfoRec
Definition: src/io/IodaIO.h:174
ioda::IodaIO::VarInfoRec::dtype
std::string dtype
Definition: src/io/IodaIO.h:130
ioda::IodaIO::dim_name_id
int dim_name_id(const std::string &)
Definition: IodaIO.cc:536
ioda::IodaIO::DimInsert
virtual void DimInsert(const std::string &Name, const std::size_t Size)=0
ioda::IodaIO::num_excess_dims_
std::size_t num_excess_dims_
count of too many dimensions
Definition: src/io/IodaIO.h:403
ioda::IodaIO::frame_float_begin
FrameFloatIter frame_float_begin()
Definition: src/io/IodaIO.h:317
ioda::IodaIO::unexpected_data_types
bool unexpected_data_types() const
Definition: IodaIO.cc:70
ioda::IodaIO::nvars_
std::size_t nvars_
number of unique variables
Definition: src/io/IodaIO.h:397
ioda::IodaIO::dim_end
DimIter dim_end()
Definition: IodaIO.cc:428
ioda::IodaIO::frame_data_init
void frame_data_init()
initialize the frame data container
Definition: IodaIO.cc:644
ioda::FrameDataMap::frame_container_
FrameStore frame_container_
Definition: src/io/IodaIO.h:75
ioda::IodaIO::frame_int_get_vname
std::string frame_int_get_vname(FrameIntIter &iframe)
Definition: src/io/IodaIO.h:303
ioda::IodaIO::frame_float_get_vname
std::string frame_float_get_vname(FrameFloatIter &iframe)
Definition: src/io/IodaIO.h:328
ioda::IodaIO::frame_end
FrameIter frame_end()
ending frame iterator
Definition: IodaIO.cc:568
ioda::IodaIO::file_name
std::string file_name(VarIter)
Definition: IodaIO.cc:294
ioda::FrameDataMap::get_data
void get_data(const std::string &GroupName, const std::string &VarName, std::vector< FrameType > &VarData)
Definition: src/io/IodaIO.h:63
eckit
Definition: LocalObsSpaceParameters.h:24
ioda::IodaIO::frame_info_init
void frame_info_init(std::size_t MaxVarSize)
initialize the frame info container
Definition: IodaIO.cc:613
ioda::IodaIO::VarInfoRec::file_type
std::string file_type
Definition: src/io/IodaIO.h:134
ioda::IodaIO::file_type
std::string file_type(VarIter)
Definition: IodaIO.cc:327
ioda::IodaIO::dim_id_size
std::size_t dim_id_size(const int &)
Definition: IodaIO.cc:472
ioda::IodaIO::frame_string_get_data
std::vector< std::string > frame_string_get_data(FrameStringIter &iframe)
Definition: src/io/IodaIO.h:347
ioda::IodaIO::grp_var_info_
GroupVarInfoMap grp_var_info_
group-variable information map
Definition: src/io/IodaIO.h:406
ioda::IodaIO::frame_float_get_gname
std::string frame_float_get_gname(FrameFloatIter &iframe)
Definition: src/io/IodaIO.h:325
ioda::IodaIO::FrameInfoRec::FrameInfoRec
FrameInfoRec(const std::size_t Start, const std::size_t Size)
Definition: src/io/IodaIO.h:179
ioda::IodaIO::FrameInfoRec::size
std::size_t size
Definition: src/io/IodaIO.h:176
ioda::IodaIO::frame_float_end
FrameFloatIter frame_float_end()
Definition: src/io/IodaIO.h:318
ioda::IodaIO::~IodaIO
virtual ~IodaIO()=0
Definition: IodaIO.cc:27
ioda::IodaIO::frame_begin
FrameIter frame_begin()
beginning frame iterator
Definition: IodaIO.cc:559
ioda::IodaIO::frame_float_get_data
std::vector< float > frame_float_get_data(FrameFloatIter &iframe)
Definition: src/io/IodaIO.h:322
ioda::IodaIO::frame_initialize
void frame_initialize()
initialize frame access
Definition: IodaIO.cc:577
ioda::IodaIO::DimInfoMap
std::map< std::string, DimInfoRec > DimInfoMap
dimension information map
Definition: src/io/IodaIO.h:171
ioda::IodaIO::frame_size
std::size_t frame_size(FrameIter &)
size value of current frame
Definition: IodaIO.cc:604
ioda::IodaIO::FrameStringIter
FrameDataMap< std::string >::FrameStoreIter FrameStringIter
Definition: src/io/IodaIO.h:341
ioda::IodaIO::VarInfoRec::file_name
std::string file_name
Definition: src/io/IodaIO.h:133
ioda::IodaIO::frame_string_put_data
void frame_string_put_data(std::string &GroupName, std::string &VarName, std::vector< std::string > &VarData)
Definition: src/io/IodaIO.h:360
ioda::IodaIO::dim_id
int dim_id(DimIter)
Definition: IodaIO.cc:450
ioda::IodaIO::excess_dims
bool excess_dims() const
Definition: IodaIO.cc:79
ioda::IodaIO::var_begin
VarIter var_begin(GroupIter)
Definition: IodaIO.cc:123
ioda::FrameDataMap::FrameStoreIter
FrameStore::iterator FrameStoreIter
Definition: src/io/IodaIO.h:41
ioda::IodaIO::FrameFloatIter
FrameDataMap< float >::FrameStoreIter FrameFloatIter
Definition: src/io/IodaIO.h:316
ioda::IodaIO::group_begin
GroupIter group_begin()
Definition: IodaIO.cc:89
ioda::IodaIO::var_dtype
std::string var_dtype(VarIter)
Definition: IodaIO.cc:159
ioda::IodaIO::WriteFrame
virtual void WriteFrame(IodaIO::FrameIter &iframe)=0
ioda::IodaIO::dim_size
std::size_t dim_size(DimIter)
Definition: IodaIO.cc:461
ioda::IodaIO::fname_
std::string fname_
file name
Definition: src/io/IodaIO.h:383
ioda::IodaIO::dim_name
std::string dim_name(DimIter)
Definition: IodaIO.cc:439
ioda::IodaIO::grp_var_exists
bool grp_var_exists(const std::string &, const std::string &)
Definition: IodaIO.cc:172
ioda::IodaIO::ReadFrame
virtual void ReadFrame(IodaIO::FrameIter &iframe)=0
ioda::IodaIO::VarInfoRec::dim_names
std::vector< std::string > dim_names
Definition: src/io/IodaIO.h:136
ioda::IodaIO::IodaIO
IodaIO(const std::string &FileName, const std::string &FileMode, const std::size_t MaxFrameSize)
Definition: IodaIO.cc:20
ioda::IodaIO::var_shape
std::vector< std::size_t > var_shape(VarIter)
Definition: IodaIO.cc:226
ioda::IodaIO::DimIter
DimInfoMap::const_iterator DimIter
Definition: src/io/IodaIO.h:256
ioda::IodaIO::frame_string_get_gname
std::string frame_string_get_gname(FrameStringIter &iframe)
Definition: src/io/IodaIO.h:350
ioda::IodaIO::FrameInfoRec::start
std::size_t start
Definition: src/io/IodaIO.h:175
ioda::IodaIO::VarInfoMap
std::map< std::string, VarInfoRec > VarInfoMap
variable information map
Definition: src/io/IodaIO.h:146
ioda::IodaIO::VarInfoRec::shape
std::vector< std::size_t > shape
Definition: src/io/IodaIO.h:135
ioda::IodaIO::nvars
std::size_t nvars() const
Definition: IodaIO.cc:61
ioda::FrameDataMap::put_data
void put_data(const std::string &GroupName, const std::string &VarName, const std::vector< FrameType > &VarData)
Definition: src/io/IodaIO.h:68
ioda::IodaIO::frame_string_begin
FrameStringIter frame_string_begin()
Definition: src/io/IodaIO.h:342
ioda::IodaIO::string_frame_data_
std::unique_ptr< FrameDataMap< std::string > > string_frame_data_
Definition: src/io/IodaIO.h:420
ioda::IodaIO::frame_int_put_data
void frame_int_put_data(std::string &GroupName, std::string &VarName, std::vector< int > &VarData)
Definition: src/io/IodaIO.h:310
ioda::IodaIO
File access class for IODA.
Definition: src/io/IodaIO.h:116
ioda::IodaIO::ExtractGrpVarName
static void ExtractGrpVarName(const std::string &Name, std::string &GroupName, std::string &VarName)
Definition: IodaIO.cc:678
ioda::IodaIO::group_name
std::string group_name(GroupIter)
Definition: IodaIO.cc:111
ioda::IodaIO::VarInfoRec::var_id
std::size_t var_id
Definition: src/io/IodaIO.h:131
ioda::IodaIO::DimInfoRec::size
std::size_t size
Definition: src/io/IodaIO.h:161
ioda::IodaIO::nlocs_
std::size_t nlocs_
number of unique locations
Definition: src/io/IodaIO.h:394
ioda::FrameDataMap
frame data map
Definition: src/io/IodaIO.h:36
ioda::IodaIO::frame_info_insert
void frame_info_insert(std::size_t Start, std::size_t Size)
insert item into the frame info container
Definition: IodaIO.cc:634
ioda::IodaIO::file_shape
std::vector< std::size_t > file_shape(VarIter)
Definition: IodaIO.cc:260
ioda::IodaIO::GroupVarInfoMap
std::map< std::string, VarInfoMap > GroupVarInfoMap
group-variable information map
Definition: src/io/IodaIO.h:157
ioda::IodaIO::dim_begin
DimIter dim_begin()
Definition: IodaIO.cc:419