aqnwb 0.4.0
Loading...
Searching...
No Matches
VectorData.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <memory>
4#include <string>
5#include <variant>
6#include <vector>
7
8#include "Types.hpp"
9#include "Utils.hpp"
10#include "io/ReadIO.hpp"
12#include "spec/hdmf_common.hpp"
13
14namespace AQNWB::NWB
15{
16
17using CellValue = AQNWB::Types::CellValue;
18
22class VectorData : public Data
23{
24public:
29 struct DataSpec : public Data::DataSpec<VectorData>
30 {
31 DataSpec(const std::string& datasetName,
32 const IO::ArrayDataSetConfig& dataConfig,
33 const std::string& columnDescription);
34
35 virtual ~DataSpec() = default;
36
37 std::string description;
38
39 Status initialize(Data& data) const override;
40 };
41
43
44protected:
51 VectorData(const std::string& path, std::shared_ptr<IO::BaseIO> io);
52
53public:
57 virtual ~VectorData() override {}
58
69 static std::shared_ptr<VectorData> createReferenceVectorData(
70 const std::string& path,
71 std::shared_ptr<IO::BaseIO> io,
72 const std::string& description,
73 const std::vector<std::string>& references);
74
84 static std::shared_ptr<DataSpec> createDataSpec(
85 const std::string& name,
86 const IO::ArrayDataSetConfig& dataConfig,
87 const std::string& description);
88
99 const std::string& description);
100
109 virtual Status appendData(const AQNWB::Types::CellValue& cellValue,
110 size_t& elementsAppended);
111
118 virtual Status appendBuffer(
120
122 std::string,
123 "description",
124 Description of what these vectors represent)
125};
126
141template<typename DTYPE = std::any>
143{
144 friend class AQNWB::NWB::RegisteredType; /* base can call constructor */
145
146protected:
153 VectorDataTyped(const std::string& path, std::shared_ptr<IO::BaseIO> io)
154 : VectorData(path, io)
155 {
156 }
157
158 using VectorData::VectorData; /* inherit from immediate base */
159
160public:
171 static std::shared_ptr<VectorDataTyped> create(
172 const std::string& path, std::shared_ptr<AQNWB::IO::BaseIO> io);
173
177 virtual ~VectorDataTyped() override {}
178
193 static std::shared_ptr<VectorDataTyped<DTYPE>> fromVectorData(
194 const std::shared_ptr<VectorData>& data)
195 {
196 return VectorDataTyped<DTYPE>::create(data->getPath(), data->getIO());
197 }
198
201
202 // Define the data fields to expose for lazy read access
203 DEFINE_DATASET_FIELD(readData, recordData, DTYPE, "", The main data)
204};
205} // namespace AQNWB::NWB
AQNWB::Types::Status Status
Definition BaseIO.hpp:21
#define REGISTER_SUBCLASS(T, BASE, NAMESPACE)
Macro to register a subclass with the RegisteredType class registry.
Definition RegisteredType.hpp:547
#define DEFINE_ATTRIBUTE_FIELD(name, default_type, fieldPath, description)
Defines a lazy-loaded attribute field accessor function.
Definition RegisteredType.hpp:580
#define DEFINE_DATASET_FIELD(readName, writeName, default_type, fieldPath, description)
Defines a lazy-loaded dataset field accessor function.
Definition RegisteredType.hpp:619
The configuration for an array dataset.
Definition BaseIO.hpp:321
Base class for array dataset configuration.
Definition BaseIO.hpp:277
AQNWB::Types::VectorDataVariant BaseDataVectorVariant
Definition BaseIO.hpp:104
Data(const std::string &path, std::shared_ptr< IO::BaseIO > io)
Constructor.
Definition Data.cpp:13
Base class for types defined in the NWB schema.
Definition RegisteredType.hpp:48
const std::string & getPath() const
Gets the path of the registered type.
Definition RegisteredType.hpp:59
std::shared_ptr< AQNWB::IO::BaseIO > getIO() const
Get a shared pointer to the IO object.
Definition RegisteredType.hpp:77
virtual Status appendBuffer(const IO::BaseDataType::BaseDataVectorVariant &buffer)
Appends a buffer of values to the dataset.
Definition VectorData.cpp:209
std::unique_ptr< AQNWB::IO::ReadDataWrapper< AQNWB::NWB::AttributeField, VTYPE > > readDescription() const
virtual Status appendData(const AQNWB::Types::CellValue &cellValue, size_t &elementsAppended)
Appends a cell value (scalar or vector) to the dataset.
Definition VectorData.cpp:92
Status initialize(const IO::BaseArrayDataSetConfig &dataConfig, const std::string &description)
Initialize the dataset for the VectorData object.
Definition VectorData.cpp:66
static std::shared_ptr< DataSpec > createDataSpec(const std::string &name, const IO::ArrayDataSetConfig &dataConfig, const std::string &description)
Create a ColumnSpec for configuring this type as a DynamicTable column.
Definition VectorData.cpp:58
VectorData(const std::string &path, std::shared_ptr< IO::BaseIO > io)
Constructor.
Definition VectorData.cpp:10
static std::shared_ptr< VectorData > createReferenceVectorData(const std::string &path, std::shared_ptr< IO::BaseIO > io, const std::string &description, const std::vector< std::string > &references)
Create a VectorData object with a reference dataset.
Definition VectorData.cpp:36
virtual ~VectorData() override
Virtual destructor.
Definition VectorData.hpp:57
std::shared_ptr< AQNWB::IO::BaseRecordingData > recordData(bool reset=false)
std::unique_ptr< AQNWB::IO::ReadDataWrapper< AQNWB::NWB::DatasetField, VTYPE > > readData() const
VectorData(const std::string &path, std::shared_ptr< IO::BaseIO > io)
Constructor.
Definition VectorData.cpp:10
static std::shared_ptr< VectorDataTyped< DTYPE > > fromVectorData(const std::shared_ptr< VectorData > &data)
Create a VectorDataTyped object from a Data object.
Definition VectorData.hpp:193
static std::shared_ptr< VectorDataTyped > create(const std::string &path, std::shared_ptr< AQNWB::IO::BaseIO > io)
Factor method to create a VectorDataTyped object.
Definition VectorData.cpp:268
VectorDataTyped(const std::string &path, std::shared_ptr< IO::BaseIO > io)
Constructor.
Definition VectorData.hpp:153
virtual ~VectorDataTyped() override
Virtual destructor.
Definition VectorData.hpp:177
Namespace for all classes related to the NWB data standard.
AQNWB::Types::CellValue CellValue
Definition Data.hpp:14
const std::string namespaceName
Definition hdmf_common.hpp:21
Typed runtime configuration for a concrete Data subclass.
Definition Data.hpp:79
Status initialize(Data &data) const override
Initialize the created concrete Data object from this spec.
Definition VectorData.cpp:23
std::string description
Definition VectorData.hpp:37
DataSpec(const std::string &datasetName, const IO::ArrayDataSetConfig &dataConfig, const std::string &columnDescription)
Definition VectorData.cpp:15
Represents a single cell value in a DynamicTable row.
Definition Types.hpp:190