12#include <highfive/H5Easy.hpp>
13#include <highfive/H5File.hpp>
48 : impl_(std::make_unique<Impl>(filename)) {}
65 std::vector<double>
times()
const {
return impl_->times(); }
68 std::vector<double>
read_double(
const std::string &signal)
const {
69 return impl_->read_double(signal);
73 std::vector<int32_t>
read_int32(
const std::string &signal)
const {
74 return impl_->read_int32(signal);
78 std::vector<int64_t>
read_int64(
const std::string &signal)
const {
79 return impl_->read_int64(signal);
83 std::vector<double>
read_double(
const std::string &signal,
size_t start,
85 return impl_->read_double_slice(signal, start, count);
89 std::vector<Eigen::Vector3d>
read_vec3(
const std::string &signal)
const {
94 std::vector<Eigen::Vector3d> result;
95 result.reserve(x.size());
96 for (
size_t i = 0; i < x.size(); ++i) {
97 result.emplace_back(x[i], y[i], z[i]);
103 std::vector<Eigen::Quaterniond>
read_quat(
const std::string &signal)
const {
109 std::vector<Eigen::Quaterniond> result;
110 result.reserve(w.size());
111 for (
size_t i = 0; i < w.size(); ++i) {
112 result.emplace_back(w[i], x[i], y[i], z[i]);
119 return impl_->signal_names();
125 mutable std::optional<TelemetrySchema> cached_schema;
127 explicit Impl(
const std::string &filename)
128 : file(filename, HighFive::File::ReadOnly) {}
130 TelemetrySchema
schema()
const {
131 if (!cached_schema) {
132 auto metadata = file.getGroup(
"metadata");
134 metadata.getAttribute(
"schema").read(json);
137 return *cached_schema;
141 return file.getDataSet(
"time").getDimensions()[0];
144 std::vector<double>
times()
const {
145 std::vector<double> result;
146 file.getDataSet(
"time").read(result);
150 std::vector<double> read_double(
const std::string &signal)
const {
151 std::vector<double> result;
152 file.getDataSet(
"signals/" + signal).read(result);
156 std::vector<int32_t> read_int32(
const std::string &signal)
const {
157 std::vector<int32_t> result;
158 file.getDataSet(
"signals/" + signal).read(result);
162 std::vector<int64_t> read_int64(
const std::string &signal)
const {
163 std::vector<int64_t> result;
164 file.getDataSet(
"signals/" + signal).read(result);
168 std::vector<double> read_double_slice(
const std::string &signal,
170 size_t count)
const {
171 auto ds = file.getDataSet(
"signals/" + signal);
172 std::vector<double> result(count);
173 ds.select({start}, {count}).read(result);
178 auto signals = file.getGroup(
"signals");
179 return signals.listObjectNames();
183 std::unique_ptr<Impl> impl_;
Telemetry signal schema definition for Vulcan I/O.
std::vector< double > times() const
Read all timestamps.
Definition HDF5Reader.hpp:65
std::vector< double > read_double(const std::string &signal) const
Read double signal.
Definition HDF5Reader.hpp:68
TelemetrySchema schema() const
Get schema from file metadata.
Definition HDF5Reader.hpp:59
std::vector< std::string > signal_names() const
Get all signal names.
Definition HDF5Reader.hpp:118
HDF5Reader(const std::string &filename)
Open HDF5 file for reading.
Definition HDF5Reader.hpp:47
HDF5Reader & operator=(const HDF5Reader &)=delete
HDF5Reader(HDF5Reader &&) noexcept=default
std::vector< double > read_double(const std::string &signal, size_t start, size_t count) const
Read double signal slice.
Definition HDF5Reader.hpp:83
std::vector< Eigen::Quaterniond > read_quat(const std::string &signal) const
Read quaternion signal (reads .w, .x, .y, .z).
Definition HDF5Reader.hpp:103
size_t frame_count() const
Get number of frames in file.
Definition HDF5Reader.hpp:62
std::vector< Eigen::Vector3d > read_vec3(const std::string &signal) const
Read 3-component vector signal (reads .x, .y, .z).
Definition HDF5Reader.hpp:89
std::vector< int32_t > read_int32(const std::string &signal) const
Read int32 signal.
Definition HDF5Reader.hpp:73
std::vector< int64_t > read_int64(const std::string &signal) const
Read int64 signal.
Definition HDF5Reader.hpp:78
HDF5Reader(const HDF5Reader &)=delete
Telemetry schema builder and container.
Definition TelemetrySchema.hpp:41
static TelemetrySchema from_json(const std::string &json)
Deserialize from JSON string (basic parser).
Definition CSVExport.hpp:20