DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
HDF5FileLayout.hpp
Go to the documentation of this file.
1
14#ifndef HDF5LIBS_INCLUDE_HDF5LIBS_HDF5FILELAYOUT_HPP_
15#define HDF5LIBS_INCLUDE_HDF5LIBS_HDF5FILELAYOUT_HPP_
16
18
23#include "logging/Logging.hpp" // NOTE: if ISSUES ARE DECLARED BEFORE include logging/Logging.hpp, TLOG_DEBUG<<issue wont work.
24
25#include "nlohmann/json.hpp"
26
27#include <cstdint>
28#include <iomanip>
29#include <limits>
30#include <map>
31#include <memory>
32#include <sstream>
33#include <string>
34#include <vector>
35
36namespace dunedaq {
37
38ERS_DECLARE_ISSUE(hdf5libs, InvalidRecordName, "Record name " << name << " is unknown.", ((std::string)name))
39
42 "Record name of type " << name << " must have sequence digits" << digits << ". Resetting that now.",
43 ((std::string)name)((int32_t)digits))
44
46 FileLayoutSequenceIDsCannotBeZero,
47 "Cannot specify 0 digits for sequence IDs in TriggerRecords. Reverting to " << digits,
48 ((uint64_t)digits)) // NOLINT(build/unsigned)
49
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)) // NOLINT(build/unsigned)
55
57 FileLayoutInvalidSubsystem,
58 "Bad File Layout cofiguration: subsystem name " << subsys_name << " is invalid.",
59 ((std::string)subsys_name))
60
62 FileLayoutUnconfiguredSubsystem,
63 "Requested File Layout for unconfigured subsystem type " << subsys_type << " (" << subsys_name << ")",
64 ((daqdataformats::SourceID::Subsystem)subsys_type)((std::string)subsys_name))
65
66namespace hdf5libs {
67
68class HDF5FileLayout
69{
70public:
74 explicit HDF5FileLayout(HDF5FileLayoutParameters conf, uint32_t version = 7); // NOLINT(build/unsigned)
75
76 uint32_t get_version() const noexcept // NOLINT(build/unsigned)
77 {
78 return m_version;
79 }
80
81 std::string get_record_name_prefix() const noexcept { return m_conf_params.record_name_prefix; }
82
83 int get_digits_for_record_number() const noexcept { return m_conf_params.digits_for_record_number; }
84
85 int get_digits_for_sequence_number() const noexcept { return m_conf_params.digits_for_sequence_number; }
86
87 std::string get_record_header_dataset_name() const noexcept { return m_conf_params.record_header_dataset_name; }
88
89 std::map<daqdataformats::SourceID::Subsystem, HDF5PathParameters> get_path_params_map() const
90 {
91 return m_path_params_map;
92 }
93
94 HDF5PathParameters get_path_params(daqdataformats::SourceID::Subsystem type) const;
95
96 HDF5FileLayoutParameters get_file_layout_params() const { return m_conf_params; }
97
101 std::string get_record_number_string(uint64_t record_number, // NOLINT(build/unsigned)
102 daqdataformats::sequence_number_t seq_num = 0) const;
103
107 std::string get_trigger_number_string(daqdataformats::trigger_number_t trig_num,
108 daqdataformats::sequence_number_t seq_num = 0) const;
109
113 std::string get_timeslice_number_string(daqdataformats::timeslice_number_t ts_num) const;
114
118 std::vector<std::string> get_path_elements(const daqdataformats::TriggerRecordHeader& trh) const;
119
123 std::vector<std::string> get_path_elements(const daqdataformats::TimeSliceHeader& tsh) const;
124
128 std::vector<std::string> get_path_elements(const daqdataformats::FragmentHeader& fh) const;
129
133 std::string get_path_string(const daqdataformats::TimeSliceHeader& tsh) const;
134
138 daqdataformats::SourceID get_source_id_from_path_elements(std::vector<std::string> const& path_elements) const;
139
143 std::string get_record_header_path(uint64_t rec_num, // NOLINT (build/unsigned)
144 daqdataformats::sequence_number_t seq_num = 0) const;
145
149 std::string get_trigger_record_header_path(daqdataformats::trigger_number_t trig_num,
150 daqdataformats::sequence_number_t seq_num = 0) const;
151
155 std::string get_timeslice_header_path(daqdataformats::timeslice_number_t ts_num) const;
156
160 std::string get_fragment_path(uint64_t trig_num, // NOLINT(build/unsigned)
162 daqdataformats::SourceID element_id) const;
166 std::string get_fragment_path(uint64_t trig_num, // NOLINT(build/unsigned)
169 uint32_t element_id) const; // NOLINT(build/unsigned)
170
174 std::string get_fragment_path(uint64_t trig_num, // NOLINT(build/unsigned)
176 const std::string& typestring,
177 uint32_t element_id) const; // NOLINT(build/unsigned)
178
182 std::string get_fragment_type_path(uint64_t trig_num, // NOLINT(build/unsigned)
185
189 std::string get_fragment_type_path(uint64_t trig_num, // NOLINT(build/unsigned)
191 std::string typestring) const;
192
193private:
197 HDF5FileLayoutParameters m_conf_params;
198
202 uint32_t m_version; // NOLINT(build/unsigned)
203
207 std::map<daqdataformats::SourceID::Subsystem, HDF5PathParameters> m_path_params_map;
208
212 std::map<std::string, daqdataformats::SourceID::Subsystem> m_detector_group_name_to_type_map;
213
217 void fill_path_params_maps(HDF5FileLayoutParameters const& flp);
218
222 HDF5FileLayoutParameters get_v0_file_layout_params();
223
227 void check_config();
228};
229
230} // namespace hdf5libs
231} // namespace dunedaq
232
233#endif // HDF5LIBS_INCLUDE_HDF5LIBS_HDF5FILELAYOUT_HPP_
#define ERS_DECLARE_ISSUE(namespace_name, class_name, message, attributes)
C++ representation of a TriggerRecordHeader, which wraps a flat array that is the TriggerRecordHeader...
uint64_t trigger_number_t
Type used to represent trigger number.
Definition Types.hpp:24
uint16_t sequence_number_t
Type used to represent sequence within a trigger record.
Definition Types.hpp:45
uint64_t timeslice_number_t
Type used to represent timeslice number.
Definition Types.hpp:49
Including Qt Headers.
The header for a DUNE Fragment.
SourceID is a generalized representation of the source of a piece of data in the DAQ....
Definition SourceID.hpp:32
Subsystem
The Subsystem enum describes the kind of source we're dealing with.
Definition SourceID.hpp:43
Additional data fields associated with a TimeSliceHeader.