1 #ifndef MHO_HDF5Datasets_HH__
2 #define MHO_HDF5Datasets_HH__
38 template <
typename XValueType >
41 hid_t TYPE_CODE = MHO_HDF5TypeCode<XValueType>();
42 hid_t space_id = H5Screate(H5S_SCALAR);
43 dataset_id = H5Dcreate(group_id, name.c_str(), TYPE_CODE, space_id, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
44 H5Dwrite(dataset_id, TYPE_CODE, H5S_ALL, H5S_ALL, H5P_DEFAULT, &
value);
52 hid_t TYPE_CODE = H5Tcopy(H5T_C_S1);
53 H5Tset_size(TYPE_CODE,
value.size());
54 H5Tset_strpad(TYPE_CODE, H5T_STR_NULLTERM);
55 hid_t space_id = H5Screate(H5S_SCALAR);
56 dataset_id = H5Dcreate(group_id, name.c_str(), TYPE_CODE, space_id, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
57 H5Dwrite(dataset_id, TYPE_CODE, H5S_ALL, H5S_ALL, H5P_DEFAULT,
value.c_str());
65 template<
typename XDataType >
67 inline make_scale(hid_t group_id, hid_t dataset_id, std::size_t axis_idx,
68 const std::string& parent_name,
69 const std::string& name,
70 const std::vector< XDataType >* data,
75 dims[0] = data->size();
76 hid_t dataspace_id = H5Screate_simple(1, dims, NULL);
79 hid_t TYPE_CODE = MHO_HDF5TypeCode<XDataType>();
81 hid_t axis_dset_id = H5Dcreate(group_id, name.c_str(), TYPE_CODE, dataspace_id, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
83 status = H5Dwrite(axis_dset_id, TYPE_CODE, H5S_ALL, H5S_ALL, H5P_DEFAULT, data->data() );
85 H5DSset_scale(axis_dset_id, name.c_str());
86 H5DSattach_scale(dataset_id, axis_dset_id, axis_idx);
89 if( metadata.contains(
"tags"))
91 for(
auto it = metadata[
"tags"].begin(); it != metadata[
"tags"].end(); ++it)
93 const std::string& key = it.key();
95 if(key ==
"index_labels")
97 hid_t tmp_dset_id = -1;
98 std::string tmp_key = parent_name +
"/" + key;
99 std::string sval =
value.dump();
102 else if( key ==
"interval_labels")
105 std::string tmp_key = parent_name +
"/" + key;
106 std::string sval =
value.dump();
116 if( metadata.contains(
"class_uuid"))
118 std::string key =
"class_uuid";
122 if( metadata.contains(
"class_name"))
124 std::string key =
"class_name";
135 inline make_scale< std::string>(hid_t group_id, hid_t dataset_id, std::size_t axis_idx,
136 const std::string& parent_name,
137 const std::string& name,
138 const std::vector< std::string >* data,
143 dims[0] = data->size();
144 hid_t TYPE_CODE = H5Tcopy(H5T_C_S1);
145 H5Tset_size(TYPE_CODE, H5T_VARIABLE);
148 std::vector<const char*> cstrs;
149 for(
const auto& s : *data)
151 cstrs.push_back(s.c_str());
154 hid_t dataspace_id = H5Screate_simple(1, dims, NULL);
157 hid_t axis_dset_id = H5Dcreate(group_id, name.c_str(), TYPE_CODE, dataspace_id, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
158 status = H5Dwrite(axis_dset_id, TYPE_CODE, H5S_ALL, H5S_ALL, H5P_DEFAULT, cstrs.data() );
160 H5DSset_scale(axis_dset_id, name.c_str());
161 H5DSattach_scale(dataset_id, axis_dset_id, axis_idx);
164 if( metadata.contains(
"tags"))
166 for(
auto it = metadata[
"tags"].begin(); it != metadata[
"tags"].end(); ++it)
168 const std::string& key = it.key();
170 if(key ==
"index_labels")
172 hid_t tmp_dset_id = -1;
173 std::string tmp_key = parent_name +
"/" + key;
174 std::string sval =
value.dump();
177 else if( key ==
"interval_labels")
179 hid_t tmp_dset_id = -1;
180 std::string tmp_key = parent_name +
"/" + key;
181 std::string sval =
value.dump();
191 if( metadata.contains(
"class_uuid"))
193 std::string key =
"class_uuid";
197 if( metadata.contains(
"class_name"))
199 std::string key =
"class_name";
209 template<
typename XDataType >
212 const std::string& name, hsize_t rank, hsize_t* dims,
213 const XDataType* data,
const mho_json& metadata)
216 hid_t dataspace_id = -1;
220 dataspace_id = H5Screate_simple(rank, dims, NULL);
221 if (dataspace_id < 0)
223 msg_error(
"main",
"could not create dataspace" << eom);
227 hid_t TYPE_CODE = MHO_HDF5TypeCode<XDataType>();
229 dataset_id = H5Dcreate(group_id, name.c_str(), TYPE_CODE, dataspace_id, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
232 msg_error(
"main",
"could not create data set" << eom);
233 H5Sclose(dataspace_id);
238 status = H5Dwrite(dataset_id, TYPE_CODE, H5S_ALL, H5S_ALL, H5P_DEFAULT, data);
241 if( metadata.contains(
"tags"))
243 for(
auto it = metadata[
"tags"].begin(); it != metadata[
"tags"].end(); ++it)
245 const std::string& key = it.key();
251 if( metadata.contains(
"class_uuid"))
253 std::string key =
"class_uuid";
257 if( metadata.contains(
"class_name"))
259 std::string key =
"class_name";
265 H5Dclose(dataset_id);
266 H5Sclose(dataspace_id);
275 const std::string& name,
276 const std::vector< std::string >* data,
281 dims[0] = data->size();
282 hid_t TYPE_CODE = H5Tcopy(H5T_C_S1);
283 H5Tset_size(TYPE_CODE, H5T_VARIABLE);
286 std::vector<const char*> cstrs;
287 for(
const auto& s : *data)
289 cstrs.push_back(s.c_str());
292 hid_t dataspace_id = H5Screate_simple(1, dims, NULL);
294 dataset_id = H5Dcreate(group_id, name.c_str(), TYPE_CODE, dataspace_id, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
295 status = H5Dwrite(dataset_id, TYPE_CODE, H5S_ALL, H5S_ALL, H5P_DEFAULT, cstrs.data() );
298 for(
auto it = metadata.begin(); it != metadata.end(); ++it)
300 const std::string& key = it.key();
302 if(key !=
"plot_data" && key !=
"parameters")
310 H5Dclose(dataset_id);
311 H5Sclose(dataspace_id);
#define msg_error(xKEY, xCONTENT)
Definition: MHO_Message.hh:244
struct type_status status
Definition: fourfit3.c:53
Definition: MHO_ChannelLabeler.hh:17
void make_scalar_dataset< std::string >(hid_t group_id, hid_t &dataset_id, const std::string &name, const std::string &value)
Definition: MHO_HDF5Datasets.hh:50
herr_t make_scale(hid_t group_id, hid_t dataset_id, std::size_t axis_idx, const std::string &parent_name, const std::string &name, const std::vector< XDataType > *data, const mho_json &metadata)
Definition: MHO_HDF5Datasets.hh:67
void make_attribute(const std::string &key, XValueType value, hid_t parent_dataset_id)
Definition: MHO_HDF5Attributes.hh:38
void make_scalar_dataset(hid_t group_id, hid_t &dataset_id, const std::string &name, const XValueType &value)
Definition: MHO_HDF5Datasets.hh:39
herr_t make_string_vector_dataset(hid_t group_id, hid_t dataset_id, const std::string &name, const std::vector< std::string > *data, const mho_json &metadata)
Definition: MHO_HDF5Datasets.hh:274
herr_t make_dataset(hid_t group_id, hid_t &dataset_id, const std::string &name, hsize_t rank, hsize_t *dims, const XDataType *data, const mho_json &metadata)
Definition: MHO_HDF5Datasets.hh:211