DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
HDF5SourceIDHandler.hpp
Go to the documentation of this file.
1
12#ifndef HDF5LIBS_INCLUDE_HDF5LIBS_HDF5SOURCEIDHANDLER_HPP_
13#define HDF5LIBS_INCLUDE_HDF5LIBS_HDF5SOURCEIDHANDLER_HPP_
14
18#include "confmodel/Session.hpp"
19
20//#include "hdf5libs/hdf5filelayout/Structs.hpp"
21//#include "daqdataformats/TimeSliceHeader.hpp"
22//#include "daqdataformats/TriggerRecordHeader.hpp"
23//#include "logging/Logging.hpp"
24
25#include <highfive/H5File.hpp>
26#include <highfive/H5Group.hpp>
27
28#include <cstdint>
29#include <map>
30#include <set>
31#include <string>
32#include <vector>
33
34namespace dunedaq {
35namespace hdf5libs {
36
46{
47public:
48 typedef std::map<daqdataformats::SourceID, std::string> source_id_path_map_t;
49 typedef std::map<daqdataformats::SourceID, std::vector<uint64_t>> source_id_geo_id_map_t; // NOLINT(build/unsigned)
50 typedef std::map<daqdataformats::SourceID::Subsystem, std::set<daqdataformats::SourceID>> subsystem_source_id_map_t;
51 typedef std::map<daqdataformats::FragmentType, std::set<daqdataformats::SourceID>> fragment_type_source_id_map_t;
52 typedef std::map<detdataformats::DetID::Subdetector, std::set<daqdataformats::SourceID>> subdetector_source_id_map_t;
53
55
59 static void store_file_level_geo_id_info(HighFive::File& h5_file, const source_id_geo_id_map_t& the_map);
60
64 static void store_record_header_source_id(HighFive::Group& record_group, const daqdataformats::SourceID& source_id);
65
69 static void store_record_level_path_info(HighFive::Group& record_group, const source_id_path_map_t& the_map);
70
74 static void store_record_level_fragment_type_map(HighFive::Group& record_group,
75 const fragment_type_source_id_map_t& the_map);
76
80 static void store_record_level_subdetector_map(HighFive::Group& record_group,
81 const subdetector_source_id_map_t& the_map);
82
86 explicit HDF5SourceIDHandler(const uint32_t version); // NOLINT(build/unsigned)
87
92 void fetch_file_level_geo_id_info(const HighFive::File& h5_file, source_id_geo_id_map_t& the_map);
93
98 void fetch_record_level_geo_id_info(const HighFive::Group& record_group, source_id_geo_id_map_t& the_map);
99
104 daqdataformats::SourceID fetch_record_header_source_id(const HighFive::Group& record_group);
105
110 void fetch_source_id_path_info(const HighFive::Group& record_group, source_id_path_map_t& the_map);
111
116 void fetch_fragment_type_source_id_info(const HighFive::Group& record_group, fragment_type_source_id_map_t& the_map);
117
122 void fetch_subdetector_source_id_info(const HighFive::Group& record_group, subdetector_source_id_map_t& the_map);
123
127 static void add_source_id_path_to_map(source_id_path_map_t& source_id_path_map,
128 const daqdataformats::SourceID& source_id,
129 const std::string& hdf5_path);
130
134 static void add_source_id_geo_id_to_map(source_id_geo_id_map_t& source_id_geo_id_map,
135 const daqdataformats::SourceID& source_id,
136 uint64_t geo_id); // NOLINT(build/unsigned)
137
141 static void add_fragment_type_source_id_to_map(fragment_type_source_id_map_t& fragment_type_source_id_map,
142 const daqdataformats::FragmentType fragment_type,
143 const daqdataformats::SourceID& source_id);
144
148 static void add_subdetector_source_id_to_map(subdetector_source_id_map_t& subdetector_source_id_map,
149 const detdataformats::DetID::Subdetector subdetector,
150 const daqdataformats::SourceID& source_id);
151
155 static void add_subsystem_source_id_to_map(subsystem_source_id_map_t& subsystem_source_id_map,
157 const daqdataformats::SourceID& source_id);
158
159private:
163 uint32_t m_version; // NOLINT(build/unsigned)
164
168 static std::string get_json_string(const daqdataformats::SourceID& source_id);
169
173 static std::string get_json_string(const source_id_path_map_t& source_id_path_map);
174
178 static std::string get_json_string(const source_id_geo_id_map_t& source_id_geo_id_map);
179
183 static std::string get_json_string(const fragment_type_source_id_map_t& fragment_type_source_id_map);
184
188 static std::string get_json_string(const subdetector_source_id_map_t& subdetector_source_id_map);
189
193 static void parse_json_string(const std::string& json_string, daqdataformats::SourceID& source_id);
194
198 static void parse_json_string(const std::string& json_string, source_id_path_map_t& source_id_path_map);
199
203 static void parse_json_string(const std::string& json_string, source_id_geo_id_map_t& source_id_geo_id_map);
204
208 static void parse_json_string(const std::string& json_string, fragment_type_source_id_map_t& fragment_type_source_id_map);
209
213 static void parse_json_string(const std::string& json_string, subdetector_source_id_map_t& subdetector_source_id_map);
214
218 template<typename C, typename T>
219 static void write_attribute(HighFive::AnnotateTraits<C>& h5annt, const std::string& name, T value);
220
224 template<typename C, typename T>
225 static T get_attribute(const HighFive::AnnotateTraits<C>& h5annt, const std::string& name);
226};
227
228template<typename C, typename T>
229void
230HDF5SourceIDHandler::write_attribute(HighFive::AnnotateTraits<C>& h5annt, const std::string& name, T value)
231{
232 if (!(h5annt.hasAttribute(name)))
233 h5annt.createAttribute(name, value);
234 // else
235 // ers::warning(HDF5AttributeExists(ERS_HERE, name));
236}
237
238template<typename C, typename T>
239T
240HDF5SourceIDHandler::get_attribute(const HighFive::AnnotateTraits<C>& h5annt, const std::string& name)
241{
242 // if (!h5annt.hasAttribute(name)) {
243 // throw InvalidHDF5Attribute(ERS_HERE, name);
244 // }
245 auto attr = h5annt.getAttribute(name);
246 T value;
247 attr.read(value);
248 return value;
249}
250
251} // namespace hdf5libs
252} // namespace dunedaq
253
254#endif // HDF5LIBS_INCLUDE_HDF5LIBS_HDF5SOURCEIDHANDLER_HPP_
void fetch_source_id_path_info(const HighFive::Group &record_group, source_id_path_map_t &the_map)
static void add_source_id_geo_id_to_map(source_id_geo_id_map_t &source_id_geo_id_map, const daqdataformats::SourceID &source_id, uint64_t geo_id)
std::map< detdataformats::DetID::Subdetector, std::set< daqdataformats::SourceID > > subdetector_source_id_map_t
static void store_record_header_source_id(HighFive::Group &record_group, const daqdataformats::SourceID &source_id)
static T get_attribute(const HighFive::AnnotateTraits< C > &h5annt, const std::string &name)
static void store_file_level_geo_id_info(HighFive::File &h5_file, const source_id_geo_id_map_t &the_map)
static void add_fragment_type_source_id_to_map(fragment_type_source_id_map_t &fragment_type_source_id_map, const daqdataformats::FragmentType fragment_type, const daqdataformats::SourceID &source_id)
static void store_record_level_path_info(HighFive::Group &record_group, const source_id_path_map_t &the_map)
static void write_attribute(HighFive::AnnotateTraits< C > &h5annt, const std::string &name, T value)
static std::string get_json_string(const daqdataformats::SourceID &source_id)
static void parse_json_string(const std::string &json_string, daqdataformats::SourceID &source_id)
static void parse_json_string(const std::string &json_string, subdetector_source_id_map_t &subdetector_source_id_map)
HDF5SourceIDHandler(const uint32_t version)
Constructor.
std::map< daqdataformats::SourceID, std::string > source_id_path_map_t
static std::string get_json_string(const subdetector_source_id_map_t &subdetector_source_id_map)
void fetch_subdetector_source_id_info(const HighFive::Group &record_group, subdetector_source_id_map_t &the_map)
static void store_record_level_subdetector_map(HighFive::Group &record_group, const subdetector_source_id_map_t &the_map)
static source_id_geo_id_map_t make_source_id_geo_id_map(const confmodel::Session *session)
std::map< daqdataformats::SourceID, std::vector< uint64_t > > source_id_geo_id_map_t
daqdataformats::SourceID fetch_record_header_source_id(const HighFive::Group &record_group)
static void store_record_level_fragment_type_map(HighFive::Group &record_group, const fragment_type_source_id_map_t &the_map)
void fetch_file_level_geo_id_info(const HighFive::File &h5_file, source_id_geo_id_map_t &the_map)
std::map< daqdataformats::SourceID::Subsystem, std::set< daqdataformats::SourceID > > subsystem_source_id_map_t
static void parse_json_string(const std::string &json_string, fragment_type_source_id_map_t &fragment_type_source_id_map)
static void add_subdetector_source_id_to_map(subdetector_source_id_map_t &subdetector_source_id_map, const detdataformats::DetID::Subdetector subdetector, const daqdataformats::SourceID &source_id)
static void add_source_id_path_to_map(source_id_path_map_t &source_id_path_map, const daqdataformats::SourceID &source_id, const std::string &hdf5_path)
std::map< daqdataformats::FragmentType, std::set< daqdataformats::SourceID > > fragment_type_source_id_map_t
void fetch_record_level_geo_id_info(const HighFive::Group &record_group, source_id_geo_id_map_t &the_map)
static void add_subsystem_source_id_to_map(subsystem_source_id_map_t &subsystem_source_id_map, const daqdataformats::SourceID::Subsystem subsystem, const daqdataformats::SourceID &source_id)
void fetch_fragment_type_source_id_info(const HighFive::Group &record_group, fragment_type_source_id_map_t &the_map)
static std::string get_json_string(const fragment_type_source_id_map_t &fragment_type_source_id_map)
FragmentType
This enumeration should list all defined Fragment types.
Including Qt Headers.
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
Subdetector
The Subdetector enum describes the kind of source we're dealing with.
Definition DetID.hpp:40