RENEWLab  1.1.0
RENEW project
hdf5_lib.h
Go to the documentation of this file.
1 /*
2 Copyright (c) 2018-2022
3  RENEW OPEN SOURCE LICENSE: http://renew-wireless.org/license
4 
5 ----------------------------------------------------------------------
6  API to read and write hdf5 file
7 ---------------------------------------------------------------------
8 */
9 
10 #ifndef SOUNDER_HDF5LIB_H_
11 #define SOUNDER_HDF5LIB_H_
12 
13 #include <algorithm>
14 #include <array>
15 #include <complex>
16 #include <map>
17 
18 #include "H5Cpp.h"
19 #include "macros.h"
20 
21 namespace Sounder {
22 class Hdf5Lib {
23  public:
24  Hdf5Lib(H5std_string file_name, H5std_string group_name);
25  ~Hdf5Lib();
26  void closeFile();
27  int createDataset(std::string dataset_name,
28  std::array<hsize_t, kDsDimsNum> tot_dims,
29  std::array<hsize_t, kDsDimsNum> chunk_dims);
30  void removeDataset(std::string dataset_name);
31  void openDataset();
32  void closeDataset();
33  bool extendDataset(std::string dataset_name, size_t prim_dim_size);
34  herr_t writeDataset(std::string dataset_name,
35  std::array<hsize_t, kDsDimsNum> target_id,
36  std::array<hsize_t, kDsDimsNum> wrt_dim, short* wrt_data);
37  std::vector<short> readDataset(std::string dataset_name,
38  std::array<hsize_t, kDsDimsNum> target_id,
39  std::array<hsize_t, kDsDimsNum> read_dim);
40  void setTargetPrimaryDimSize(hsize_t dim_size) {
41  target_prim_dim_size = dim_size;
42  }
44  void setMaxPrimaryDimSize(hsize_t dim_size) { max_prim_dim_size = dim_size; }
46  void write_attribute(const char name[], double val);
47  void write_attribute(const char name[], const std::vector<double>& val);
48  void write_attribute(const char name[],
49  const std::vector<std::complex<int16_t>>& val);
50  void write_attribute(const char name[],
51  const std::vector<std::complex<float>>& val);
52  void write_attribute(const char name[], size_t val);
53  void write_attribute(const char name[], int val);
54  void write_attribute(const char name[], const std::vector<size_t>& val);
55  void write_attribute(const char name[], const std::string& val);
56  void write_attribute(const char name[], const std::vector<std::string>& val);
57 
58  private:
59  H5std_string hdf5_name_;
60  H5std_string group_name_;
61  H5::H5File* file_;
62  H5::Group group_;
63 
64  std::vector<std::string> dataset_str_;
65  std::vector<H5::DSetCreatPropList> prop_list_;
66  std::vector<H5::DataSpace> dataspace_;
67  std::vector<H5::DataSet*> datasets_;
68  std::vector<std::array<hsize_t, kDsDimsNum>> dims_;
71 
72  std::map<std::string, size_t> ds_name_id;
73 };
74 }; // namespace Sounder
75 #endif
Sounder::Hdf5Lib::group_name_
H5std_string group_name_
Definition: hdf5_lib.h:60
Sounder::Hdf5Lib::file_
H5::H5File * file_
Definition: hdf5_lib.h:61
Sounder::Hdf5Lib::getMaxPrimaryDimSize
hsize_t getMaxPrimaryDimSize()
Definition: hdf5_lib.h:45
Sounder::Hdf5Lib::setTargetPrimaryDimSize
void setTargetPrimaryDimSize(hsize_t dim_size)
Definition: hdf5_lib.h:40
Sounder::Hdf5Lib::dataset_str_
std::vector< std::string > dataset_str_
Definition: hdf5_lib.h:64
Sounder::Hdf5Lib::readDataset
std::vector< short > readDataset(std::string dataset_name, std::array< hsize_t, kDsDimsNum > target_id, std::array< hsize_t, kDsDimsNum > read_dim)
Definition: hdf5_lib.cc:229
Sounder::Hdf5Lib::getTargetPrimaryDimSize
hsize_t getTargetPrimaryDimSize()
Definition: hdf5_lib.h:43
Sounder::Hdf5Lib::prop_list_
std::vector< H5::DSetCreatPropList > prop_list_
Definition: hdf5_lib.h:65
Sounder::Hdf5Lib::hdf5_name_
H5std_string hdf5_name_
Definition: hdf5_lib.h:59
macros.h
Sounder::Hdf5Lib::closeDataset
void closeDataset()
Definition: hdf5_lib.cc:130
Sounder::Hdf5Lib::dims_
std::vector< std::array< hsize_t, kDsDimsNum > > dims_
Definition: hdf5_lib.h:68
Sounder::Hdf5Lib::openDataset
void openDataset()
Definition: hdf5_lib.cc:86
Sounder::Hdf5Lib::ds_name_id
std::map< std::string, size_t > ds_name_id
Definition: hdf5_lib.h:72
Sounder::Hdf5Lib::~Hdf5Lib
~Hdf5Lib()
Definition: hdf5_lib.cc:28
Sounder::Hdf5Lib::write_attribute
void write_attribute(const char name[], double val)
Definition: hdf5_lib.cc:279
Sounder::Hdf5Lib::datasets_
std::vector< H5::DataSet * > datasets_
Definition: hdf5_lib.h:67
Sounder::Hdf5Lib::extendDataset
bool extendDataset(std::string dataset_name, size_t prim_dim_size)
Definition: hdf5_lib.cc:157
Sounder::Hdf5Lib::group_
H5::Group group_
Definition: hdf5_lib.h:62
Sounder::Hdf5Lib::createDataset
int createDataset(std::string dataset_name, std::array< hsize_t, kDsDimsNum > tot_dims, std::array< hsize_t, kDsDimsNum > chunk_dims)
Definition: hdf5_lib.cc:43
Sounder
Definition: hdf5_lib.cc:20
Sounder::Hdf5Lib::dataspace_
std::vector< H5::DataSpace > dataspace_
Definition: hdf5_lib.h:66
Sounder::Hdf5Lib::max_prim_dim_size
hsize_t max_prim_dim_size
Definition: hdf5_lib.h:70
vector
Maybe you need to transpose bits_matrix before reshaping it to a vector
Definition: syms2bits.m:62
Sounder::Hdf5Lib::setMaxPrimaryDimSize
void setMaxPrimaryDimSize(hsize_t dim_size)
Definition: hdf5_lib.h:44
Sounder::Hdf5Lib::removeDataset
void removeDataset(std::string dataset_name)
Definition: hdf5_lib.cc:120
Sounder::Hdf5Lib::Hdf5Lib
Hdf5Lib(H5std_string file_name, H5std_string group_name)
Definition: hdf5_lib.cc:21
Sounder::Hdf5Lib
Definition: hdf5_lib.h:22
Sounder::Hdf5Lib::closeFile
void closeFile()
Definition: hdf5_lib.cc:35
Sounder::Hdf5Lib::target_prim_dim_size
hsize_t target_prim_dim_size
Definition: hdf5_lib.h:69
Sounder::Hdf5Lib::writeDataset
herr_t writeDataset(std::string dataset_name, std::array< hsize_t, kDsDimsNum > target_id, std::array< hsize_t, kDsDimsNum > wrt_dim, short *wrt_data)
Definition: hdf5_lib.cc:177