aqnwb 0.3.0
Loading...
Searching...
No Matches
TimeSeries.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <cstdint>
4#include <map>
5#include <string>
6
7#include "Utils.hpp"
8#include "io/BaseIO.hpp"
9#include "io/ReadIO.hpp"
11#include "spec/core.hpp"
12
13namespace AQNWB::NWB
14{
19{
20public:
21 // Register the TimeSeries as a subclass of NWBDataInterface
25
26
41
55 static std::map<ContinuityType, std::string> ContinuityTypeNames;
56
60 ~TimeSeries() override;
61
73 Status writeData(const SizeArray& dataShape,
74 const SizeArray& positionOffset,
75 const void* dataInput,
76 const void* timestampsInput = nullptr,
77 const void* controlInput = nullptr);
78
111 const IO::BaseArrayDataSetConfig& dataConfig,
112 const std::string& unit,
113 const std::string& description = "no description",
114 const std::string& comments = "no comments",
115 const float& conversion = 1.0f,
116 const float& resolution = -1.0f,
117 const float& offset = 0.0f,
118 const ContinuityType& continuity = ContinuityType::Undefined,
119 const double& startingTime = -1.0,
120 const float& startingTimeRate = 1.0f,
121 const std::vector<std::string>& controlDescription = {});
122
127
132
137
138 // Define the data fields to expose for lazy read access
140 std::string,
141 "description",
142 Description of the series)
143
145 std::string,
146 "comments",
147 Human - readable comments about the TimeSeries)
148
149 DEFINE_DATASET_FIELD(readData, recordData, std::any, "data", The main data)
150
152 float,
153 "data/conversion",
154 Scalar to multiply each element in data to convert it
155 to the specified unit)
156
158 float,
159 "data/offset",
160 Scalar to add to the data after scaling by conversion
161 to finalize its coercion to the specified unit)
162
164 float,
165 "data/resolution",
166 Smallest meaningful difference between values in data)
167
169 std::string,
170 "data/unit",
171 Base unit of measurement for working with the data)
172
174 std::string,
175 "data/continuity",
176 Continuity of the data)
177
180 double,
181 "starting_time",
182 Timestamp of the first sample in seconds)
183
185 float,
186 "starting_time/rate",
187 Sampling rate in Hz)
188
190 std::string,
191 "starting_time/unit",
192 Unit of measurement for time fixed to seconds)
193
196 double,
197 "timestamps",
198 Timestamps offset in seconds relative to the master time for samples stored in data)
199
201 int,
202 "timestamps/interval",
203 Interval value is 1)
204
206 std::string,
207 "timestamps/unit",
208 Unit of measurement for timestamps fixed to seconds)
209
212 uint8_t,
213 "control",
214 Numerical labels that apply to each time point in data)
215
218 std::string,
219 "control_description",
220 Description of each control value)
221
222protected:
228 TimeSeries(const std::string& path, std::shared_ptr<IO::BaseIO> io);
229
230private:
236 Status createTimestampsAttributes(const std::string& path);
237
250 Status createDataAttributes(const std::string& path,
251 const float& conversion,
252 const float& resolution,
253 const float& offset,
254 const std::string& unit,
255 const ContinuityType& continuity);
256};
257} // namespace AQNWB::NWB
AQNWB::Types::Status Status
Definition BaseIO.hpp:21
AQNWB::Types::SizeArray SizeArray
Definition BaseIO.hpp:22
#define REGISTER_SUBCLASS(T, BASE, NAMESPACE)
Macro to register a subclass with the RegisteredType class registry.
Definition RegisteredType.hpp:501
#define DEFINE_ATTRIBUTE_FIELD(name, default_type, fieldPath, description)
Defines a lazy-loaded attribute field accessor function.
Definition RegisteredType.hpp:534
#define DEFINE_DATASET_FIELD(readName, writeName, default_type, fieldPath, description)
Defines a lazy-loaded dataset field accessor function.
Definition RegisteredType.hpp:573
Base class for array dataset configuration.
Definition BaseIO.hpp:205
Represents a base data type.
Definition BaseIO.hpp:47
static const BaseDataType F64
Accessor for 64-bit floating point.
Definition BaseIO.hpp:89
static const BaseDataType U8
Accessor for unsigned 8-bit integer.
Definition BaseIO.hpp:80
NWBDataInterface(const std::string &path, std::shared_ptr< AQNWB::IO::BaseIO > io)
Constructor.
Definition NWBDataInterface.cpp:11
Status initialize()
Initialize the object.
Definition NWBDataInterface.cpp:17
virtual AQNWB::Types::Status finalize()
Finalize the RegisteredType object.
Definition RegisteredType.cpp:148
std::unique_ptr< AQNWB::IO::ReadDataWrapper< AQNWB::NWB::AttributeField, VTYPE > > readStartingTimeUnit() const
std::unique_ptr< AQNWB::IO::ReadDataWrapper< AQNWB::NWB::AttributeField, VTYPE > > readDataResolution() const
static std::map< ContinuityType, std::string > ContinuityTypeNames
String names corresponding to the ContinuityType enum.
Definition TimeSeries.hpp:55
std::unique_ptr< AQNWB::IO::ReadDataWrapper< AQNWB::NWB::DatasetField, VTYPE > > readData() const
IO::BaseDataType controlType
Data type of the control (uint8).
Definition TimeSeries.hpp:136
~TimeSeries() override
Destructor.
Definition TimeSeries.cpp:28
std::unique_ptr< AQNWB::IO::ReadDataWrapper< AQNWB::NWB::AttributeField, VTYPE > > readDataConversion() const
std::unique_ptr< AQNWB::IO::ReadDataWrapper< AQNWB::NWB::DatasetField, VTYPE > > readStartingTime() const
std::shared_ptr< AQNWB::IO::BaseRecordingData > recordTimestamps(bool reset=false)
TimeSeries(const std::string &path, std::shared_ptr< IO::BaseIO > io)
Constructor.
Definition TimeSeries.cpp:22
std::shared_ptr< AQNWB::IO::BaseRecordingData > recordControlDescription(bool reset=false)
std::unique_ptr< AQNWB::IO::ReadDataWrapper< AQNWB::NWB::AttributeField, VTYPE > > readDataOffset() const
IO::BaseDataType timestampsType
Data type of the timestamps (float64).
Definition TimeSeries.hpp:131
Status createTimestampsAttributes(const std::string &path)
Convenience function for creating timestamp related attributes.
Definition TimeSeries.cpp:64
std::unique_ptr< AQNWB::IO::ReadDataWrapper< AQNWB::NWB::AttributeField, VTYPE > > readComments() const
std::unique_ptr< AQNWB::IO::ReadDataWrapper< AQNWB::NWB::AttributeField, VTYPE > > readTimestampsUnit() const
std::unique_ptr< AQNWB::IO::ReadDataWrapper< AQNWB::NWB::DatasetField, VTYPE > > readControlDescription() const
std::shared_ptr< AQNWB::IO::BaseRecordingData > recordData(bool reset=false)
std::unique_ptr< AQNWB::IO::ReadDataWrapper< AQNWB::NWB::AttributeField, VTYPE > > readDataUnit() const
std::unique_ptr< AQNWB::IO::ReadDataWrapper< AQNWB::NWB::AttributeField, VTYPE > > readTimestampsInterval() const
ContinuityType
Definition TimeSeries.hpp:30
@ Continuous
Definition TimeSeries.hpp:32
@ Undefined
Definition TimeSeries.hpp:39
@ Instantaneous
Definition TimeSeries.hpp:34
@ Step
Definition TimeSeries.hpp:37
std::shared_ptr< AQNWB::IO::BaseRecordingData > recordStartingTime(bool reset=false)
IO::BaseDataType m_dataType
Data type of the data.
Definition TimeSeries.hpp:126
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< AQNWB::IO::ReadDataWrapper< AQNWB::NWB::DatasetField, VTYPE > > readTimestamps() const
std::unique_ptr< AQNWB::IO::ReadDataWrapper< AQNWB::NWB::AttributeField, VTYPE > > readDataContinuity() const
std::unique_ptr< AQNWB::IO::ReadDataWrapper< AQNWB::NWB::AttributeField, VTYPE > > readDescription() const
std::unique_ptr< AQNWB::IO::ReadDataWrapper< AQNWB::NWB::DatasetField, VTYPE > > readControl() const
std::unique_ptr< AQNWB::IO::ReadDataWrapper< AQNWB::NWB::AttributeField, VTYPE > > readStartingTimeRate() const
std::shared_ptr< AQNWB::IO::BaseRecordingData > recordControl(bool reset=false)
Status writeData(const SizeArray &dataShape, const SizeArray &positionOffset, const void *dataInput, const void *timestampsInput=nullptr, const void *controlInput=nullptr)
Writes a timeseries data block to the file.
Definition TimeSeries.cpp:246
The namespace for IO components of AqNWB.
Namespace for all classes related to the NWB data standard.
const std::string namespaceName
Definition core.hpp:21