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
113 void initialize(const IO::BaseDataType& dataType,
114 const std::string& unit,
115 const std::string& description = "no description",
116 const std::string& comments = "no comments",
117 const SizeArray& dsetSize = SizeArray {0},
118 const SizeArray& chunkSize = SizeArray {1},
119 const float& conversion = 1.0f,
120 const float& resolution = -1.0f,
121 const float& offset = 0.0f,
122 const ContinuityType& continuity = ContinuityType::Undefined,
123 const double& startingTime = -1.0,
124 const float& startingTimeRate = 1.0f,
125 const std::vector<std::string>& controlDescription = {});
126
130 std::unique_ptr<IO::BaseRecordingData> data;
131
136 std::unique_ptr<IO::BaseRecordingData> timestamps;
137
146 std::unique_ptr<IO::BaseRecordingData> starting_time;
147
152 std::unique_ptr<IO::BaseRecordingData> control;
153
158 std::unique_ptr<IO::BaseRecordingData> control_description;
159
164
169
174
175 // Define the data fields to expose for lazy read access
178 std::string,
179 "description",
180 Description of the series)
181
184 std::string,
185 "comments",
186 Human - readable comments about the TimeSeries)
187
188 DEFINE_FIELD(readData, DatasetField, std::any, "data", The main data)
189
192 float,
193 "data/conversion",
194 Scalar to multiply each element in data to convert it to the
195 specified unit)
196
199 float,
200 "data/offset",
201 Scalar to add to the data after scaling by conversion to finalize
202 its coercion to the specified unit)
203
206 float,
207 "data/resolution",
208 Smallest meaningful difference between values in data)
209
212 std::string,
213 "data/unit",
214 Base unit of measurement for working with the data)
215
218 std::string,
219 "data/continuity",
220 Continuity of the data)
221
224 double,
225 "starting_time",
226 Timestamp of the first sample in seconds)
227
230 float,
231 "starting_time/rate",
232 Sampling rate in Hz)
233
236 std::string,
237 "starting_time/unit",
238 Unit of measurement for time fixed to seconds)
239
242 double,
243 "timestamps",
244 Timestamps offset in seconds relative to the master time for samples stored in data)
245
248 int,
249 "timestamps/interval",
250 Interval value is 1)
251
254 std::string,
255 "timestamps/unit",
256 Unit of measurement for timestamps fixed to seconds)
257
260 uint8_t,
261 "control",
262 Numerical labels that apply to each time point in data)
263
266 std::string,
267 "control_description",
268 Description of each control value)
269
270private:
276 Status createTimestampsAttributes(const std::string& path);
277
290 Status createDataAttributes(const std::string& path,
291 const float& conversion,
292 const float& resolution,
293 const float& offset,
294 const std::string& unit,
295 const ContinuityType& continuity);
296};
297} // namespace AQNWB::NWB
AQNWB::Types::Status Status
Definition BaseIO.hpp:20
AQNWB::Types::SizeArray SizeArray
Definition BaseIO.hpp:21
#define REGISTER_SUBCLASS(T, NAMESPACE)
Macro to register a subclass with the RegisteredType class registry.
Definition RegisteredType.hpp:321
#define DEFINE_FIELD(name, storageObjectType, default_type, fieldPath, description)
Defines a lazy-loaded field accessor function.
Definition RegisteredType.hpp:355
Represents a base data type.
Definition BaseIO.hpp:41
static const BaseDataType F64
Accessor for 64-bit floating point.
Definition BaseIO.hpp:82
static const BaseDataType U8
Accessor for unsigned 8-bit integer.
Definition BaseIO.hpp:73
Container(const std::string &path, std::shared_ptr< IO::BaseIO > io)
Constructor.
Definition Container.cpp:10
void 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:173
~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:159
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:130
std::unique_ptr< IO::BaseRecordingData > control
Pointer to control values. This may be a nullptr if useControl is false.
Definition TimeSeries.hpp:152
std::unique_ptr< IO::ReadDataWrapper< AttributeField, VTYPE > > readDataUnit() const
IO::BaseDataType timestampsType
Data type of the timestamps (float64).
Definition TimeSeries.hpp:168
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:136
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:146
IO::BaseDataType m_dataType
Data type of the data.
Definition TimeSeries.hpp:163
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:158
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:22
constexpr auto DatasetField
Alias for AQNWB::Types::StorageObjectType::Dataset.
Definition RegisteredType.hpp:27