mirror of
https://github.com/paulscherrerinstitute/sf_daq_buffer.git
synced 2026-05-02 08:14:23 +02:00
Improve format writing routines
This commit is contained in:
+60
-13
@@ -7,26 +7,64 @@
|
||||
|
||||
using namespace std;
|
||||
|
||||
void h5_utils::write_attribute(H5::H5Object& target, string name, string value){
|
||||
H5::StrType str_type(0, H5T_VARIABLE);
|
||||
H5::DataSpace att_space(H5S_SCALAR);
|
||||
|
||||
H5::Attribute h5_attribute = target.createAttribute(name, str_type, att_space);
|
||||
h5_attribute.write(str_type, value);
|
||||
H5::Group h5_utils::create_group(H5::CommonFG& target, std::string name)
|
||||
{
|
||||
return target.createGroup(name);
|
||||
}
|
||||
|
||||
void h5_utils::write_attribute(H5::H5Object& target, string name, int32_t value){
|
||||
H5::IntType int_type(H5::PredType::NATIVE_INT32);
|
||||
H5::DataSet h5_utils::write_dataset(H5::Group& target, string name, double value)
|
||||
{
|
||||
H5::DataSpace att_space(H5S_SCALAR);
|
||||
auto data_type = H5::PredType::NATIVE_DOUBLE;
|
||||
|
||||
H5::Attribute h5_attribute = target.createAttribute(name, int_type, att_space);
|
||||
h5_attribute.write(int_type, &value);
|
||||
H5::DataSet dataset = target.createDataSet(name, data_type , att_space);
|
||||
dataset.write(&value, data_type);
|
||||
|
||||
return dataset;
|
||||
}
|
||||
|
||||
void h5_utils::write_attribute(H5::H5Object& target, h5_attr& attribute) {
|
||||
H5::DataSet h5_utils::write_dataset(H5::Group& target, string name, int value)
|
||||
{
|
||||
H5::DataSpace att_space(H5S_SCALAR);
|
||||
auto data_type = H5::PredType::NATIVE_INT;
|
||||
|
||||
cout<< attribute.name << endl;
|
||||
H5::DataSet dataset = target.createDataSet(name, data_type, att_space);
|
||||
dataset.write(&value, data_type);
|
||||
|
||||
return dataset;
|
||||
}
|
||||
|
||||
H5::DataSet h5_utils::write_dataset(H5::Group& target, string name, string value)
|
||||
{
|
||||
H5::DataSpace att_space(H5S_SCALAR);
|
||||
H5::DataType data_type = H5::StrType(0, H5T_VARIABLE);
|
||||
|
||||
H5::DataSet dataset = target.createDataSet(name, data_type ,att_space);
|
||||
dataset.write(&value, data_type);
|
||||
|
||||
return dataset;
|
||||
}
|
||||
|
||||
void h5_utils::write_attribute(H5::H5Object& target, string name, string value)
|
||||
{
|
||||
H5::DataSpace att_space(H5S_SCALAR);
|
||||
H5::DataType data_type = H5::StrType(0, H5T_VARIABLE);
|
||||
|
||||
auto h5_attribute = target.createAttribute(name, data_type, att_space);
|
||||
h5_attribute.write(data_type, value);
|
||||
}
|
||||
|
||||
void h5_utils::write_attribute(H5::H5Object& target, string name, int value)
|
||||
{
|
||||
H5::DataSpace att_space(H5S_SCALAR);
|
||||
auto data_type = H5::PredType::NATIVE_INT;
|
||||
|
||||
auto h5_attribute = target.createAttribute(name, data_type, att_space);
|
||||
h5_attribute.write(data_type, &value);
|
||||
}
|
||||
|
||||
void h5_utils::write_attribute(H5::H5Object& target, h5_attr& attribute)
|
||||
{
|
||||
string name = attribute.name;
|
||||
boost::any value;
|
||||
|
||||
@@ -56,6 +94,15 @@ void h5_utils::write_attribute(H5::H5Object& target, h5_attr& attribute) {
|
||||
throw runtime_error(error_message.str());
|
||||
|
||||
} else if (attribute.data_type == NX_INT) {
|
||||
h5_utils::write_attribute(target, name, boost::any_cast<int32_t>(value));
|
||||
try {
|
||||
h5_utils::write_attribute(target, name, boost::any_cast<int32_t>(value));
|
||||
return;
|
||||
} catch (const boost::bad_any_cast& exception) {}
|
||||
|
||||
// We cannot really convert this attribute.
|
||||
stringstream error_message;
|
||||
error_message << "Cannot convert attribute " << name << " to INT." << endl;
|
||||
|
||||
throw runtime_error(error_message.str());
|
||||
}
|
||||
}
|
||||
+14
-2
@@ -44,8 +44,10 @@ struct h5_group : public h5_base, public h5_parent {
|
||||
};
|
||||
|
||||
struct h5_dataset : public h5_base, public h5_parent, public h5_data_base{
|
||||
h5_dataset(std::string name, std::string value_alias, DATA_TYPE data_type, std::list<h5_base> items={})
|
||||
: h5_base(name), h5_parent(items), h5_data_base(data_type, REFERENCE) {};
|
||||
h5_dataset(std::string name, std::string value, DATA_TYPE data_type, std::list<h5_base> items={})
|
||||
: h5_base(name), h5_parent(items), h5_data_base(data_type, REFERENCE), value(value) {};
|
||||
|
||||
std::string value;
|
||||
};
|
||||
|
||||
struct h5_attr : public h5_base, public h5_data_base {
|
||||
@@ -55,9 +57,19 @@ struct h5_attr : public h5_base, public h5_data_base {
|
||||
};
|
||||
|
||||
namespace h5_utils{
|
||||
H5::Group create_group(H5::CommonFG& target, std::string name);
|
||||
|
||||
H5::DataSet write_dataset(H5::Group& target, h5_dataset& dataset);
|
||||
|
||||
H5::DataSet write_dataset(H5::Group& target, std::string name, double value);
|
||||
H5::DataSet write_dataset(H5::Group& target, std::string name, int value);
|
||||
H5::DataSet write_dataset(H5::Group& target, std::string name, std::string value);
|
||||
|
||||
void write_attribute(H5::H5Object& target, h5_attr& attribute);
|
||||
void write_attribute(H5::H5Object& target, std::string name, std::string value);
|
||||
void write_attribute(H5::H5Object& target, std::string name, int value);
|
||||
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user