aqnwb 0.1.0
Loading...
Searching...
No Matches
NWBFile.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <array>
4#include <cstdint>
5#include <memory>
6#include <string>
7#include <string_view>
8#include <vector>
9
10#include "Types.hpp"
11#include "Utils.hpp"
12#include "io/BaseIO.hpp"
13#include "io/ReadIO.hpp"
18
23namespace AQNWB::NWB
24{
25
30class NWBFile : public Container
31{
32public:
33 // Register the ElectrodeTable as a subclass of Container
35
36
40 NWBFile(std::shared_ptr<IO::BaseIO> io);
41
45 NWBFile(const std::string& path, std::shared_ptr<IO::BaseIO> io);
46
50 NWBFile(const NWBFile&) = delete;
51
55 NWBFile& operator=(const NWBFile&) = delete;
56
60 ~NWBFile();
61
75 Status initialize(const std::string& identifierText,
76 const std::string& description = "a recording session",
77 const std::string& dataCollection = "",
78 const std::string& sessionStartTime = "",
79 const std::string& timestampsReferenceTime = "");
80
88 bool isInitialized() const;
89
94
113 std::vector<Types::ChannelVector> recordingArrays,
114 std::vector<std::string> recordingNames,
115 const IO::BaseDataType& dataType = IO::BaseDataType::I16,
116 RecordingContainers* recordingContainers = nullptr,
117 std::vector<SizeType>& containerIndexes = emptyContainerIndexes);
118
134 std::vector<Types::ChannelVector> recordingArrays,
135 std::vector<std::string> recordingNames,
136 const IO::BaseDataType& dataType = IO::BaseDataType::I16,
137 RecordingContainers* recordingContainers = nullptr,
138 std::vector<SizeType>& containerIndexes = emptyContainerIndexes);
139
150 std::vector<std::string> recordingNames,
151 RecordingContainers* recordingContainers = nullptr,
152 std::vector<SizeType>& containerIndexes = emptyContainerIndexes);
153
154protected:
170 Status createFileStructure(const std::string& identifierText,
171 const std::string& description,
172 const std::string& dataCollection,
173 const std::string& sessionStartTime,
174 const std::string& timestampsReferenceTime);
175
176private:
186 std::unique_ptr<IO::BaseRecordingData> createRecordingData(
187 IO::BaseDataType type,
188 const SizeArray& size,
189 const SizeArray& chunking,
190 const std::string& path);
191
200 template<SizeType N>
202 const std::string& specPath,
203 const std::string& versionNumber,
204 const std::array<std::pair<std::string_view, std::string_view>, N>&
205 specVariables);
206
207 inline const static std::string acquisitionPath = "/acquisition";
208 static std::vector<SizeType> emptyContainerIndexes;
209
212 std::string,
213 "nwb_version",
214 File version string)
215
218 std::any,
219 "file_create_date",
220 A record of the date the file was created and of subsequent
221 modifications)
222
225 std::string,
226 "identifier",
227 A unique text identifier for the file)
228
231 std::string,
232 "session_description",
233 A description of the experimental session and data in the file)
234
237 std::any,
238 "session_start_time",
239 Date and time of the experiment or session start)
240
243 std::any,
244 "timestamps_reference_time",
245 Date and time corresponding to time zero of all timestamps)
246
247private:
251 std::unique_ptr<ElectrodeTable> m_electrodeTable;
252};
253
254} // 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 I16
Accessor for signed 16-bit integer.
Definition BaseIO.hpp:78
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
Status createElectricalSeries(std::vector< Types::ChannelVector > recordingArrays, std::vector< std::string > recordingNames, const IO::BaseDataType &dataType=IO::BaseDataType::I16, RecordingContainers *recordingContainers=nullptr, std::vector< SizeType > &containerIndexes=emptyContainerIndexes)
Create ElectricalSeries objects to record data into. Created objects are stored in recordingContainer...
Definition NWBFile.cpp:175
NWBFile(std::shared_ptr< IO::BaseIO > io)
Constructor for NWBFile class.
Definition NWBFile.cpp:36
void cacheSpecifications(const std::string &specPath, const std::string &versionNumber, const std::array< std::pair< std::string_view, std::string_view >, N > &specVariables)
Saves the specification files for the schema.
Definition NWBFile.cpp:362
NWBFile(const NWBFile &)=delete
Deleted copy constructor to prevent construction-copying.
std::unique_ptr< IO::ReadDataWrapper< DatasetField, VTYPE > > readSessionDescription() const
Status createAnnotationSeries(std::vector< std::string > recordingNames, RecordingContainers *recordingContainers=nullptr, std::vector< SizeType > &containerIndexes=emptyContainerIndexes)
Create AnnotationSeries objects to record data into. Created objects are stored in recordingContainer...
Definition NWBFile.cpp:332
Status createFileStructure(const std::string &identifierText, const std::string &description, const std::string &dataCollection, const std::string &sessionStartTime, const std::string &timestampsReferenceTime)
Creates the default file structure. Note, this function will fail if the file is in a mode where new ...
Definition NWBFile.cpp:130
Status createSpikeEventSeries(std::vector< Types::ChannelVector > recordingArrays, std::vector< std::string > recordingNames, const IO::BaseDataType &dataType=IO::BaseDataType::I16, RecordingContainers *recordingContainers=nullptr, std::vector< SizeType > &containerIndexes=emptyContainerIndexes)
Create SpikeEventSeries objects to record data into. Created objects are stored in recordingContainer...
Definition NWBFile.cpp:249
static const std::string acquisitionPath
Definition NWBFile.hpp:207
std::unique_ptr< IO::BaseRecordingData > createRecordingData(IO::BaseDataType type, const SizeArray &size, const SizeArray &chunking, const std::string &path)
Factory method for creating recording data.
Definition NWBFile.cpp:382
NWBFile & operator=(const NWBFile &)=delete
Deleted copy assignment operator to prevent copying.
std::unique_ptr< IO::ReadDataWrapper< DatasetField, VTYPE > > readTimestampsReferenceTime() const
~NWBFile()
Destructor for NWBFile class.
Definition NWBFile.cpp:48
std::unique_ptr< IO::ReadDataWrapper< DatasetField, VTYPE > > readFileCreateDate() const
std::unique_ptr< IO::ReadDataWrapper< AttributeField, VTYPE > > readNWBVersion() const
std::unique_ptr< ElectrodeTable > m_electrodeTable
The ElectrodeTable for the file.
Definition NWBFile.hpp:251
static std::vector< SizeType > emptyContainerIndexes
Definition NWBFile.hpp:208
bool isInitialized() const
Check if the NWB file is initialized.
Definition NWBFile.cpp:94
std::unique_ptr< IO::ReadDataWrapper< DatasetField, VTYPE > > readIdentifier() const
std::unique_ptr< IO::ReadDataWrapper< DatasetField, VTYPE > > readSessionStartTime() const
Status finalize()
Finalizes the NWB file by closing it.
Definition NWBFile.cpp:125
The RecordingContainers class provides an interface for managing and holding groups of Containers acq...
Definition RecordingContainers.hpp:16
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