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#include "spec/core.hpp"
11
12namespace AQNWB::NWB
13{
17class TimeSeries : public Container
18{
19public:
20 // Register the TimeSeries as a subclass of Container
22
23
38
52 static std::map<ContinuityType, std::string> ContinuityTypeNames;
53
59 TimeSeries(const std::string& path, std::shared_ptr<IO::BaseIO> io);
60
65
77 Status writeData(const std::vector<SizeType>& dataShape,
78 const std::vector<SizeType>& positionOffset,
79 const void* dataInput,
80 const void* timestampsInput = nullptr,
81 const void* controlInput = nullptr);
82
113 void initialize(const IO::ArrayDataSetConfig& dataConfig,
114 const std::string& unit,
115 const std::string& description = "no description",
116 const std::string& comments = "no comments",
117 const float& conversion = 1.0f,
118 const float& resolution = -1.0f,
119 const float& offset = 0.0f,
120 const ContinuityType& continuity = ContinuityType::Undefined,
121 const double& startingTime = -1.0,
122 const float& startingTimeRate = 1.0f,
123 const std::vector<std::string>& controlDescription = {});
124
129
134
139
140 // Define the data fields to expose for lazy read access
142 std::string,
143 "description",
144 Description of the series)
145
147 std::string,
148 "comments",
149 Human - readable comments about the TimeSeries)
150
151 DEFINE_DATASET_FIELD(readData, recordData, std::any, "data", The main data)
152
154 float,
155 "data/conversion",
156 Scalar to multiply each element in data to convert it
157 to the specified unit)
158
160 float,
161 "data/offset",
162 Scalar to add to the data after scaling by conversion
163 to finalize its coercion to the specified unit)
164
166 float,
167 "data/resolution",
168 Smallest meaningful difference between values in data)
169
171 std::string,
172 "data/unit",
173 Base unit of measurement for working with the data)
174
176 std::string,
177 "data/continuity",
178 Continuity of the data)
179
182 double,
183 "starting_time",
184 Timestamp of the first sample in seconds)
185
187 float,
188 "starting_time/rate",
189 Sampling rate in Hz)
190
192 std::string,
193 "starting_time/unit",
194 Unit of measurement for time fixed to seconds)
195
198 double,
199 "timestamps",
200 Timestamps offset in seconds relative to the master time for samples stored in data)
201
203 int,
204 "timestamps/interval",
205 Interval value is 1)
206
208 std::string,
209 "timestamps/unit",
210 Unit of measurement for timestamps fixed to seconds)
211
214 uint8_t,
215 "control",
216 Numerical labels that apply to each time point in data)
217
220 std::string,
221 "control_description",
222 Description of each control value)
223
224private:
230 Status createTimestampsAttributes(const std::string& path);
231
244 Status createDataAttributes(const std::string& path,
245 const float& conversion,
246 const float& resolution,
247 const float& offset,
248 const std::string& unit,
249 const ContinuityType& continuity);
250};
251} // 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:410
#define DEFINE_ATTRIBUTE_FIELD(name, default_type, fieldPath, description)
Defines a lazy-loaded attribute field accessor function.
Definition RegisteredType.hpp:443
#define DEFINE_DATASET_FIELD(readName, writeName, default_type, fieldPath, description)
Defines a lazy-loaded dataset field accessor function.
Definition RegisteredType.hpp:475
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
std::shared_ptr< IO::BaseRecordingData > recordControl(bool reset=false)
static std::map< ContinuityType, std::string > ContinuityTypeNames
String names corresponding to the ContinuityType enum.
Definition TimeSeries.hpp:52
std::unique_ptr< IO::ReadDataWrapper< DatasetField, VTYPE > > readStartingTime() const
std::unique_ptr< IO::ReadDataWrapper< AttributeField, VTYPE > > readStartingTimeUnit() const
std::shared_ptr< IO::BaseRecordingData > recordTimestamps(bool reset=false)
IO::BaseDataType controlType
Data type of the control (uint8).
Definition TimeSeries.hpp:138
~TimeSeries()
Destructor.
Definition TimeSeries.cpp:26
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:150
std::shared_ptr< IO::BaseRecordingData > recordData(bool reset=false)
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::shared_ptr< IO::BaseRecordingData > recordStartingTime(bool reset=false)
std::unique_ptr< IO::ReadDataWrapper< AttributeField, VTYPE > > readDataUnit() const
IO::BaseDataType timestampsType
Data type of the timestamps (float64).
Definition TimeSeries.hpp:133
Status createTimestampsAttributes(const std::string &path)
Convenience function for creating timestamp related attributes.
Definition TimeSeries.cpp:55
std::unique_ptr< IO::ReadDataWrapper< AttributeField, VTYPE > > readTimestampsInterval() const
std::unique_ptr< IO::ReadDataWrapper< AttributeField, VTYPE > > readDataContinuity() const
std::shared_ptr< IO::BaseRecordingData > recordControlDescription(bool reset=false)
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:27
@ Continuous
Definition TimeSeries.hpp:29
@ Undefined
Definition TimeSeries.hpp:36
@ Instantaneous
Definition TimeSeries.hpp:31
@ Step
Definition TimeSeries.hpp:34
IO::BaseDataType m_dataType
Data type of the data.
Definition TimeSeries.hpp:128
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:28
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:13
const std::string namespaceName
Definition core.hpp:21