14#ifndef HDF5LIBS_INCLUDE_HDF5LIBS_HDF5FILELAYOUT_HPP_
15#define HDF5LIBS_INCLUDE_HDF5LIBS_HDF5FILELAYOUT_HPP_
25#include "nlohmann/json.hpp"
42 "Record name of type " << name <<
" must have sequence digits" << digits <<
". Resetting that now.",
43 ((std::string)name)((int32_t)digits))
46 FileLayoutSequenceIDsCannotBeZero,
47 "Cannot specify 0 digits for sequence IDs in TriggerRecords. Reverting to " << digits,
51 FileLayoutNotEnoughDigitsForPath,
52 "Number " << number <<
" has more digits than the max specified of " << digits
53 <<
". Using natural width.",
54 ((uint64_t)number)((uint64_t)digits))
57 FileLayoutInvalidSubsystem,
58 "Bad File Layout cofiguration: subsystem name " << subsys_name <<
" is invalid.",
59 ((std::string)subsys_name))
62 FileLayoutUnconfiguredSubsystem,
63 "Requested File Layout for unconfigured subsystem type " << subsys_type <<
" (" << subsys_name <<
")",
74 explicit HDF5FileLayout(HDF5FileLayoutParameters conf, uint32_t
version = 7);
76 uint32_t get_version()
const noexcept
81 std::string get_record_name_prefix()
const noexcept {
return m_conf_params.record_name_prefix; }
83 int get_digits_for_record_number()
const noexcept {
return m_conf_params.digits_for_record_number; }
85 int get_digits_for_sequence_number()
const noexcept {
return m_conf_params.digits_for_sequence_number; }
87 std::string get_record_header_dataset_name()
const noexcept {
return m_conf_params.record_header_dataset_name; }
89 std::map<daqdataformats::SourceID::Subsystem, HDF5PathParameters> get_path_params_map()
const
91 return m_path_params_map;
96 HDF5FileLayoutParameters get_file_layout_params()
const {
return m_conf_params; }
101 std::string get_record_number_string(uint64_t record_number,
143 std::string get_record_header_path(uint64_t rec_num,
160 std::string get_fragment_path(uint64_t trig_num,
166 std::string get_fragment_path(uint64_t trig_num,
169 uint32_t element_id)
const;
174 std::string get_fragment_path(uint64_t trig_num,
176 const std::string& typestring,
177 uint32_t element_id)
const;
182 std::string get_fragment_type_path(uint64_t trig_num,
189 std::string get_fragment_type_path(uint64_t trig_num,
191 std::string typestring)
const;
197 HDF5FileLayoutParameters m_conf_params;
207 std::map<daqdataformats::SourceID::Subsystem, HDF5PathParameters> m_path_params_map;
212 std::map<std::string, daqdataformats::SourceID::Subsystem> m_detector_group_name_to_type_map;
217 void fill_path_params_maps(HDF5FileLayoutParameters
const& flp);
222 HDF5FileLayoutParameters get_v0_file_layout_params();
#define ERS_DECLARE_ISSUE(namespace_name, class_name, message, attributes)