aqnwb 0.2.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{
18{
19public:
20 // Register the TimeSeries as a subclass of NWBDataInterface
24
25
40
54 static std::map<ContinuityType, std::string> ContinuityTypeNames;
55
60
72 Status writeData(const std::vector<SizeType>& dataShape,
73 const std::vector<SizeType>& positionOffset,
74 const void* dataInput,
75 const void* timestampsInput = nullptr,
76 const void* controlInput = nullptr);
77
110 const IO::ArrayDataSetConfig& dataConfig,
111 const std::string& unit,
112 const std::string& description = "no description",
113 const std::string& comments = "no comments",
114 const float& conversion = 1.0f,
115 const float& resolution = -1.0f,
116 const float& offset = 0.0f,
117 const ContinuityType& continuity = ContinuityType::Undefined,
118 const double& startingTime = -1.0,
119 const float& startingTimeRate = 1.0f,
120 const std::vector<std::string>& controlDescription = {});
121
126
131
136
137 // Define the data fields to expose for lazy read access
139 std::string,
140 "description",
141 Description of the series)
142
144 std::string,
145 "comments",
146 Human - readable comments about the TimeSeries)
147
148 DEFINE_DATASET_FIELD(readData, recordData, std::any, "data", The main data)
149
151 float,
152 "data/conversion",
153 Scalar to multiply each element in data to convert it
154 to the specified unit)
155
157 float,
158 "data/offset",
159 Scalar to add to the data after scaling by conversion
160 to finalize its coercion to the specified unit)
161
163 float,
164 "data/resolution",
165 Smallest meaningful difference between values in data)
166
168 std::string,
169 "data/unit",
170 Base unit of measurement for working with the data)
171
173 std::string,
174 "data/continuity",
175 Continuity of the data)
176
179 double,
180 "starting_time",
181 Timestamp of the first sample in seconds)
182
184 float,
185 "starting_time/rate",
186 Sampling rate in Hz)
187
189 std::string,
190 "starting_time/unit",
191 Unit of measurement for time fixed to seconds)
192
195 double,
196 "timestamps",
197 Timestamps offset in seconds relative to the master time for samples stored in data)
198
200 int,
201 "timestamps/interval",
202 Interval value is 1)
203
205 std::string,
206 "timestamps/unit",
207 Unit of measurement for timestamps fixed to seconds)
208
211 uint8_t,
212 "control",
213 Numerical labels that apply to each time point in data)
214
217 std::string,
218 "control_description",
219 Description of each control value)
220
221protected:
227 TimeSeries(const std::string& path, std::shared_ptr<IO::BaseIO> io);
228
229private:
235 Status createTimestampsAttributes(const std::string& path);
236
249 Status createDataAttributes(const std::string& path,
250 const float& conversion,
251 const float& resolution,
252 const float& offset,
253 const std::string& unit,
254 const ContinuityType& continuity);
255};
256} // namespace AQNWB::NWB
AQNWB::Types::Status Status
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
The configuration for an array dataset.
Definition BaseIO.hpp:204
Represents a base data type.
Definition BaseIO.hpp:47
static const BaseDataType F64
Accessor for 64-bit floating point.
Definition BaseIO.hpp:88
static const BaseDataType U8
Accessor for unsigned 8-bit integer.
Definition BaseIO.hpp:79
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:54
std::unique_ptr< AQNWB::IO::ReadDataWrapper< AQNWB::NWB::DatasetField, VTYPE > > readData() const
IO::BaseDataType controlType
Data type of the control (uint8).
Definition TimeSeries.hpp:135
~TimeSeries()
Destructor.
Definition TimeSeries.cpp:26
std::unique_ptr< AQNWB::IO::ReadDataWrapper< AQNWB::NWB::AttributeField, VTYPE > > readDataConversion() const
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:174
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:20
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:130
Status createTimestampsAttributes(const std::string &path)
Convenience function for creating timestamp related attributes.
Definition TimeSeries.cpp:62
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:29
@ Continuous
Definition TimeSeries.hpp:31
@ Undefined
Definition TimeSeries.hpp:38
@ Instantaneous
Definition TimeSeries.hpp:33
@ Step
Definition TimeSeries.hpp:36
std::shared_ptr< AQNWB::IO::BaseRecordingData > recordStartingTime(bool reset=false)
IO::BaseDataType m_dataType
Data type of the data.
Definition TimeSeries.hpp:125
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< 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)
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