diff --git a/include/aare/Hdf5File.hpp b/include/aare/Hdf5File.hpp index 5c0fbd2..4f16c79 100644 --- a/include/aare/Hdf5File.hpp +++ b/include/aare/Hdf5File.hpp @@ -20,7 +20,7 @@ struct H5Handles { std::vector count; std::vector offset; - H5Handles(const std::string& fname, const std::string& dname, int rank): + H5Handles(const std::string& fname, const std::string& dname): file_name(fname), dataset_name(dname), file(fname, H5F_ACC_RDONLY), @@ -28,9 +28,8 @@ struct H5Handles { dataspace(dataset.getSpace()), datatype(dataset.getDataType()) { - if (dataspace.getSimpleExtentNdims() != rank) { - throw std::runtime_error(LOCATION + "Expected rank of " + dname + " dataset to be " + std::to_string(rank) + ". Got " + std::to_string(dataspace.getSimpleExtentNdims())); - } + // get dimensions + int rank = dataspace.getSimpleExtentNdims(); dims.resize(rank); dataspace.getSimpleExtentDims(dims.data(), nullptr); @@ -41,6 +40,13 @@ struct H5Handles { // header datasets if (rank == 1) { memspace = std::make_unique(H5S_SCALAR); + } + // header virtual datasets + else if (rank == 2) { + hsize_t dimsm[1] = {dims[1]}; + memspace = std::make_unique(1, dimsm); + count.push_back(dims[1]); + offset.push_back(0); } // data dataset else { diff --git a/src/Hdf5File.cpp b/src/Hdf5File.cpp index 635ab02..2eaa360 100644 --- a/src/Hdf5File.cpp +++ b/src/Hdf5File.cpp @@ -87,7 +87,7 @@ DetectorHeader Hdf5File::read_header(const std::filesystem::path &fname) { std::vector> handles; try { for (size_t i = 0; i != header_dataset_names.size(); ++i) { - handles.push_back(std::make_unique(fname.string(), metadata_group_name+ header_dataset_names[i], 1)); + handles.push_back(std::make_unique(fname.string(), metadata_group_name+ header_dataset_names[i])); } handles[0]->get_frame_into(0, reinterpret_cast(&(h.frameNumber))); handles[1]->get_frame_into(0, reinterpret_cast(&(h.expLength))); @@ -213,7 +213,7 @@ void Hdf5File::open_data_file() { throw std::runtime_error(LOCATION + "Unsupported mode. Can only read Hdf5 files."); try { - m_data_file = std::make_unique(m_master.master_fname().string(), metadata_group_name + "/data", 3); + m_data_file = std::make_unique(m_master.master_fname().string(), metadata_group_name + "/data"); m_total_frames = m_data_file->dims[0]; m_rows = m_data_file->dims[1]; @@ -235,7 +235,7 @@ void Hdf5File::open_header_files() { "Unsupported mode. Can only read Hdf5 files."); try { for (size_t i = 0; i != header_dataset_names.size(); ++i) { - m_header_files.push_back(std::make_unique(m_master.master_fname().string(), metadata_group_name + header_dataset_names[i], 1)); + m_header_files.push_back(std::make_unique(m_master.master_fname().string(), metadata_group_name + header_dataset_names[i])); //fmt::print("{} Dataset dimensions: size = {}\n", // header_dataset_names[i], m_header_files[i]->dims[0]); }