aqnwb 0.1.0
Loading...
Searching...
No Matches
TimeSeries.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <cstdint>
4#include <string>
5
6#include "Utils.hpp"
7#include "io/BaseIO.hpp"
8#include "io/ReadIO.hpp"
10
11namespace AQNWB::NWB
12{
16class TimeSeries : public Container
17{
18public:
19 // Register the TimeSeries as a subclass of Container
21
22
37
51 static std::map<ContinuityType, std::string> ContinuityTypeNames;
52
58 TimeSeries(const std::string& path, std::shared_ptr<IO::BaseIO> io);
59
64
76 Status writeData(const std::vector<SizeType>& dataShape,
77 const std::vector<SizeType>& positionOffset,
78 const void* dataInput,
79 const void* timestampsInput = nullptr,
80 const void* controlInput = nullptr);
81
112 void initialize(const IO::ArrayDataSetConfig& dataConfig,
113 const std::string& unit,
114 const std::string& description = "no description",
115 const std::string& comments = "no comments",
116 const float& conversion = 1.0f,
117 const float& resolution = -1.0f,
118 const float& offset = 0.0f,
119 const ContinuityType& continuity = ContinuityType::Undefined,
120 const double& startingTime = -1.0,
121 const float& startingTimeRate = 1.0f,
122 const std::vector<std::string>& controlDescription = {});
123
127 std::unique_ptr<IO::BaseRecordingData> data;
128
133 std::unique_ptr<IO::BaseRecordingData> timestamps;
134
143 std::unique_ptr<IO::BaseRecordingData> starting_time;
144
149 std::unique_ptr<IO::BaseRecordingData> control;
150
155 std::unique_ptr<IO::BaseRecordingData> control_description;
156
161
166
171
172 // Define the data fields to expose for lazy read access
175 std::string,
176 "description",
177 Description of the series)
178
181 std::string,
182 "comments",
183 Human - readable comments about the TimeSeries)
184
185 DEFINE_FIELD(readData, DatasetField, std::any, "data", The main data)
186
189 float,
190 "data/conversion",
191 Scalar to multiply each element in data to convert it to the
192 specified unit)
193
196 float,
197 "data/offset",
198 Scalar to add to the data after scaling by conversion to finalize
199 its coercion to the specified unit)
200
203 float,
204 "data/resolution",
205 Smallest meaningful difference between values in data)
206
209 std::string,
210 "data/unit",
211 Base unit of measurement for working with the data)
212
215 std::string,
216 "data/continuity",
217 Continuity of the data)
218
221 double,
222 "starting_time",
223 Timestamp of the first sample in seconds)
224
227 float,
228 "starting_time/rate",
229 Sampling rate in Hz)
230
233 std::string,
234 "starting_time/unit",
235 Unit of measurement for time fixed to seconds)
236
239 double,
240 "timestamps",
241 Timestamps offset in seconds relative to the master time for samples stored in data)
242
245 int,
246 "timestamps/interval",
247 Interval value is 1)
248
251 std::string,
252 "timestamps/unit",
253 Unit of measurement for timestamps fixed to seconds)
254
257 uint8_t,
258 "control",
259 Numerical labels that apply to each time point in data)
260
263 std::string,
264 "control_description",
265 Description of each control value)
266
267private:
273 Status createTimestampsAttributes(const std::string& path);
274
287 Status createDataAttributes(const std::string& path,
288 const float& conversion,
289 const float& resolution,
290 const float& offset,
291 const std::string& unit,
292 const ContinuityType& continuity);
293};
294} // namespace AQNWB::NWB
AQNWB::Types::Status Status
Definition BaseIO.hpp:22
#define REGISTER_SUBCLASS(T, NAMESPACE)
Macro to register a subclass with the RegisteredType class registry.
Definition RegisteredType.hpp:373
#define DEFINE_FIELD(name, storageObjectType, default_type, fieldPath, description)
Defines a lazy-loaded field accessor function.
Definition RegisteredType.hpp:407
The configuration for an array dataset.
Definition BaseIO.hpp:200
Represents a base data type.
Definition BaseIO.hpp:43
static const BaseDataType F64
Accessor for 64-bit floating point.
Definition BaseIO.hpp:84
static const BaseDataType U8
Accessor for unsigned 8-bit integer.
Definition BaseIO.hpp:75
Container(const std::string &path, std::shared_ptr< IO::BaseIO > io)
Constructor.
Definition Container.cpp:10
Status initialize()
Initialize the container.
Definition Container.cpp:20
std::unique_ptr< IO::ReadDataWrapper< DatasetField, VTYPE > > readControlDescription() const
std::unique_ptr< IO::ReadDataWrapper< DatasetField, VTYPE > > readControl() const
static std::map< ContinuityType, std::string > ContinuityTypeNames
String names corresponding to the ContinuityType enum.
Definition TimeSeries.hpp:51
std::unique_ptr< IO::ReadDataWrapper< DatasetField, VTYPE > > readStartingTime() const
std::unique_ptr< IO::ReadDataWrapper< AttributeField, VTYPE > > readStartingTimeUnit() const
IO::BaseDataType controlType
Data type of the control (uint8).
Definition TimeSeries.hpp:170
~TimeSeries()
Destructor.
Definition TimeSeries.cpp:28
Status writeData(const std::vector< SizeType > &dataShape, const std::vector< SizeType > &positionOffset, const void *dataInput, const void *timestampsInput=nullptr, const void *controlInput=nullptr)
Writes a timeseries data block to the file.
Definition TimeSeries.cpp:161
std::unique_ptr< IO::ReadDataWrapper< AttributeField, VTYPE > > readStartingTimeRate() const
TimeSeries(const std::string &path, std::shared_ptr< IO::BaseIO > io)
Constructor.
Definition TimeSeries.cpp:20
std::unique_ptr< IO::BaseRecordingData > data
Pointer to data values.
Definition TimeSeries.hpp:127
std::unique_ptr< IO::BaseRecordingData > control
Pointer to control values. This may be a nullptr if useControl is false.
Definition TimeSeries.hpp:149
std::unique_ptr< IO::ReadDataWrapper< AttributeField, VTYPE > > readDataUnit() const
IO::BaseDataType timestampsType
Data type of the timestamps (float64).
Definition TimeSeries.hpp:165
Status createTimestampsAttributes(const std::string &path)
Convenience function for creating timestamp related attributes.
Definition TimeSeries.cpp:57
std::unique_ptr< IO::BaseRecordingData > timestamps
Pointer to timestamp values. This may be a nullptr if starting_time is used.
Definition TimeSeries.hpp:133
std::unique_ptr< IO::ReadDataWrapper< AttributeField, VTYPE > > readTimestampsInterval() const
std::unique_ptr< IO::ReadDataWrapper< AttributeField, VTYPE > > readDataContinuity() const
std::unique_ptr< IO::ReadDataWrapper< DatasetField, VTYPE > > readData() const
std::unique_ptr< IO::ReadDataWrapper< AttributeField, VTYPE > > readDataOffset() const
std::unique_ptr< IO::ReadDataWrapper< DatasetField, VTYPE > > readTimestamps() const
std::unique_ptr< IO::ReadDataWrapper< AttributeField, VTYPE > > readComments() const
ContinuityType
Definition TimeSeries.hpp:26
@ Continuous
Definition TimeSeries.hpp:28
@ Undefined
Definition TimeSeries.hpp:35
@ Instantaneous
Definition TimeSeries.hpp:30
@ Step
Definition TimeSeries.hpp:33
std::unique_ptr< IO::BaseRecordingData > starting_time
Pointer to starting_time values. This may be a nullptr if timestamps are used.
Definition TimeSeries.hpp:143
IO::BaseDataType m_dataType
Data type of the data.
Definition TimeSeries.hpp:160
Status createDataAttributes(const std::string &path, const float &conversion, const float &resolution, const float &offset, const std::string &unit, const ContinuityType &continuity)
Convenience function for creating data related attributes.
Definition TimeSeries.cpp:30
std::unique_ptr< IO::BaseRecordingData > control_description
Pointer to control_description values. This may be a nullptr if useControl is false.
Definition TimeSeries.hpp:155
std::unique_ptr< IO::ReadDataWrapper< AttributeField, VTYPE > > readTimestampsUnit() const
std::unique_ptr< IO::ReadDataWrapper< AttributeField, VTYPE > > readDataResolution() const
std::unique_ptr< IO::ReadDataWrapper< AttributeField, VTYPE > > readDescription() const
std::unique_ptr< IO::ReadDataWrapper< AttributeField, VTYPE > > readDataConversion() const
Namespace for all classes related to the NWB data standard.
Definition TimeSeries.hpp:12
constexpr auto AttributeField
Alias for AQNWB::Types::StorageObjectType::Attribute.
Definition RegisteredType.hpp:23
constexpr auto DatasetField
Alias for AQNWB::Types::StorageObjectType::Dataset.
Definition RegisteredType.hpp:28