1 #ifndef MHO_HDF5Datasets_HH__
2 #define MHO_HDF5Datasets_HH__
37 template<
typename XValueType >
40 hid_t TYPE_CODE = MHO_HDF5TypeCode< XValueType >();
41 hid_t space_id = H5Screate(H5S_SCALAR);
42 dataset_id = H5Dcreate(group_id, name.c_str(), TYPE_CODE, space_id, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
43 H5Dwrite(dataset_id, TYPE_CODE, H5S_ALL, H5S_ALL, H5P_DEFAULT, &
value);
50 const std::string&
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());
64 template<
typename XDataType >
65 herr_t
inline make_scale(hid_t group_id, hid_t dataset_id, std::size_t axis_idx,
const std::string& parent_name,
66 const std::string& name,
const std::vector< XDataType >*
data,
const mho_json& metadata)
70 dims[0] =
data->size();
71 hid_t dataspace_id = H5Screate_simple(1, dims, NULL);
74 hid_t TYPE_CODE = MHO_HDF5TypeCode< XDataType >();
76 hid_t axis_dset_id = H5Dcreate(group_id, name.c_str(), TYPE_CODE, dataspace_id, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
78 status = H5Dwrite(axis_dset_id, TYPE_CODE, H5S_ALL, H5S_ALL, H5P_DEFAULT,
data->data());
80 H5DSset_scale(axis_dset_id, name.c_str());
81 H5DSattach_scale(dataset_id, axis_dset_id, axis_idx);
84 if(metadata.contains(
"tags"))
86 for(
auto it = metadata[
"tags"].begin(); it != metadata[
"tags"].end(); ++it)
88 const std::string& key = it.key();
90 if(key ==
"index_labels")
92 hid_t tmp_dset_id = -1;
93 std::string tmp_key = parent_name +
"/" + key;
94 std::string sval =
value.dump();
97 else if(key ==
"interval_labels")
100 std::string tmp_key = parent_name +
"/" + key;
101 std::string sval =
value.dump();
111 if(metadata.contains(
"class_uuid"))
113 std::string key =
"class_uuid";
117 if(metadata.contains(
"class_name"))
119 std::string key =
"class_name";
130 const std::string& name,
const std::vector< std::string >*
data,
135 dims[0] =
data->size();
136 hid_t TYPE_CODE = H5Tcopy(H5T_C_S1);
137 H5Tset_size(TYPE_CODE, H5T_VARIABLE);
140 std::vector< const char* > cstrs;
141 for(
const auto& s : *
data)
143 cstrs.push_back(s.c_str());
146 hid_t dataspace_id = H5Screate_simple(1, dims, NULL);
149 hid_t axis_dset_id = H5Dcreate(group_id, name.c_str(), TYPE_CODE, dataspace_id, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
150 status = H5Dwrite(axis_dset_id, TYPE_CODE, H5S_ALL, H5S_ALL, H5P_DEFAULT, cstrs.data());
152 H5DSset_scale(axis_dset_id, name.c_str());
153 H5DSattach_scale(dataset_id, axis_dset_id, axis_idx);
156 if(metadata.contains(
"tags"))
158 for(
auto it = metadata[
"tags"].begin(); it != metadata[
"tags"].end(); ++it)
160 const std::string& key = it.key();
162 if(key ==
"index_labels")
164 hid_t tmp_dset_id = -1;
165 std::string tmp_key = parent_name +
"/" + key;
166 std::string sval =
value.dump();
169 else if(key ==
"interval_labels")
171 hid_t tmp_dset_id = -1;
172 std::string tmp_key = parent_name +
"/" + key;
173 std::string sval =
value.dump();
183 if(metadata.contains(
"class_uuid"))
185 std::string key =
"class_uuid";
189 if(metadata.contains(
"class_name"))
191 std::string key =
"class_name";
200 template<
typename XDataType >
201 herr_t
inline make_dataset(hid_t group_id, hid_t& dataset_id,
const std::string& name, hsize_t rank, hsize_t* dims,
205 hid_t dataspace_id = -1;
209 dataspace_id = H5Screate_simple(rank, dims, NULL);
212 msg_error(
"main",
"could not create dataspace" << eom);
216 hid_t TYPE_CODE = MHO_HDF5TypeCode< XDataType >();
218 dataset_id = H5Dcreate(group_id, name.c_str(), TYPE_CODE, dataspace_id, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
221 msg_error(
"main",
"could not create data set" << eom);
222 H5Sclose(dataspace_id);
227 status = H5Dwrite(dataset_id, TYPE_CODE, H5S_ALL, H5S_ALL, H5P_DEFAULT,
data);
230 if(metadata.contains(
"tags"))
232 for(
auto it = metadata[
"tags"].begin(); it != metadata[
"tags"].end(); ++it)
234 const std::string& key = it.key();
240 if(metadata.contains(
"class_uuid"))
242 std::string key =
"class_uuid";
246 if(metadata.contains(
"class_name"))
248 std::string key =
"class_name";
254 H5Dclose(dataset_id);
255 H5Sclose(dataspace_id);
262 const std::vector< std::string >*
data,
const mho_json& metadata)
266 dims[0] =
data->size();
267 hid_t TYPE_CODE = H5Tcopy(H5T_C_S1);
268 H5Tset_size(TYPE_CODE, H5T_VARIABLE);
271 std::vector< const char* > cstrs;
272 for(
const auto& s : *
data)
274 cstrs.push_back(s.c_str());
277 hid_t dataspace_id = H5Screate_simple(1, dims, NULL);
279 dataset_id = H5Dcreate(group_id, name.c_str(), TYPE_CODE, dataspace_id, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
280 status = H5Dwrite(dataset_id, TYPE_CODE, H5S_ALL, H5S_ALL, H5P_DEFAULT, cstrs.data());
283 for(
auto it = metadata.begin(); it != metadata.end(); ++it)
285 const std::string& key = it.key();
287 if(key !=
"plot_data" && key !=
"parameters")
295 H5Dclose(dataset_id);
296 H5Sclose(dataspace_id);
#define msg_error(xKEY, xCONTENT)
Definition: MHO_Message.hh:238
struct type_status status
Definition: fourfit3.c:53
Definition: MHO_AdhocFlagging.hh:18
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:49
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:65
void make_attribute(const std::string &key, XValueType value, hid_t parent_dataset_id)
Definition: MHO_HDF5Attributes.hh:37
void make_scalar_dataset(hid_t group_id, hid_t &dataset_id, const std::string &name, const XValueType &value)
Definition: MHO_HDF5Datasets.hh:38
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:261
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:201
herr_t make_scale< std::string >(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< std::string > *data, const mho_json &metadata)
specialization a dimension/coordinate axis which contains strings
Definition: MHO_HDF5Datasets.hh:129