diff --git a/+tests/+system/NwbTestInterface.m b/+tests/+system/NwbTestInterface.m
index 76462840..f2b45a4c 100644
--- a/+tests/+system/NwbTestInterface.m
+++ b/+tests/+system/NwbTestInterface.m
@@ -15,12 +15,8 @@ function setupClass(testCase)
methods (TestMethodSetup)
function setupMethod(testCase)
- testCase.applyFixture(matlab.unittest.fixtures.WorkingFolderFixture);
- schemaPath = fullfile(testCase.root, 'nwb-schema');
-
- generateCore(...
- fullfile(schemaPath, 'hdmf-common-schema', 'common', 'namespace.yaml'),...
- fullfile(schemaPath, 'core', 'nwb.namespace.yaml'));
+ testCase.applyFixture(matlab.unittest.fixtures.WorkingFolderFixture);
+ generateCore();
testCase.file = NwbFile( ...
'session_description', 'a test NWB File', ...
'identifier', 'TEST123', ...
diff --git a/.gitmodules b/.gitmodules
new file mode 100644
index 00000000..eb953a23
--- /dev/null
+++ b/.gitmodules
@@ -0,0 +1,18 @@
+[submodule "nwb-schema/2.2.5"]
+ path = nwb-schema/2.2.5
+ url = https://github.com/NeurodataWithoutBorders/nwb-schema
+[submodule "nwb-schema/2.2.4"]
+ path = nwb-schema/2.2.4
+ url = https://github.com/NeurodataWithoutBorders/nwb-schema
+[submodule "nwb-schema/2.2.3"]
+ path = nwb-schema/2.2.3
+ url = https://github.com/NeurodataWithoutBorders/nwb-schema
+[submodule "nwb-schema/2.2.2"]
+ path = nwb-schema/2.2.2
+ url = https://github.com/NeurodataWithoutBorders/nwb-schema
+[submodule "nwb-schema/2.2.1"]
+ path = nwb-schema/2.2.1
+ url = https://github.com/NeurodataWithoutBorders/nwb-schema
+[submodule "nwb-schema/2.2.0"]
+ path = nwb-schema/2.2.0
+ url = https://github.com/NeurodataWithoutBorders/nwb-schema
diff --git a/README.md b/README.md
index 47a9be5b..8f88575f 100644
--- a/README.md
+++ b/README.md
@@ -9,7 +9,7 @@ A Matlab interface for reading and writing Neurodata Without Borders (NWB) 2.0 f
Download the current release of MatNWB from the [MatNWB releases page](https://github.com/NeurodataWithoutBorders/matnwb/releases) or from the [![View NeurodataWithoutBorders/matnwb on File Exchange](https://www.mathworks.com/matlabcentral/images/matlab-file-exchange.svg)](https://www.mathworks.com/matlabcentral/fileexchange/67741-neurodatawithoutborders-matnwb). You can also check out the latest development version via
```bash
-git clone https://github.com/NeurodataWithoutBorders/matnwb.git
+git clone --recurse-submodules https://github.com/NeurodataWithoutBorders/matnwb.git
```
### Step 2: Generate the API
@@ -19,37 +19,32 @@ From the Matlab command line, add MatNWB to the Matlab path and generate the cor
```matlab
cd matnwb
addpath(genpath(pwd));
-generateCore(); % generate core namespace located in the repository.
+generateCore(); % generate the most recent nwb-schema release.
```
### Optional: Generate MatNWB code for extensions
-The `generateCore` command also takes variable arguments from any extensions.
+The `generateExtension` command generates extension classes given a file path to the extension's namespace.
```matlab
-generateCore('schema/core/nwb.namespace.yaml', '.../my_extensions1.namespace.yaml',...);
-```
-
-You can also generate extensions without generating the core classes in this way:
-
-```matlab
-generateExtension('my_extension.namespace.yaml');
+generateExtension('schema/core/nwb.namespace.yaml', '.../my_extensions1.namespace.yaml',...);
```
Generated Matlab code will be put a `+types` subdirectory. This is a Matlab package. When the `+types` folder is accessible to the Matlab path, the generated code will be used for reading NWBFiles.
```matlab
-nwb=nwbRead('data.nwb');
+nwb = nwbRead('data.nwb');
```
-### Optional: Download the NWB format schema
+### Optional: Generate an older core schema
-Download the current release of the NWB format schema from the [nwb-schema releases page](https://github.com/NeurodataWithoutBorders/nwb-schema/releases) or check out the latest development via
+The `generateCore` command can generate older versions of the nwb schema.
-```bash
-git clone --recursive https://github.com/NeurodataWithoutBorders/nwb-schema.git
+```matlab
+generateCore('2.2.1'); % generate schema 2.2.1
```
-Then re-run `generateCore()` to update the API from the updated schema.
+
+Currently, only schemas 2.2.x are supported (2.1.0 and 2.0.1 are not supported at this time).
## Tutorials
diff --git a/generateCore.m b/generateCore.m
index c83d6f15..08ccbd40 100644
--- a/generateCore.m
+++ b/generateCore.m
@@ -1,11 +1,11 @@
-function generateCore(varargin)
+function generateCore(version)
% GENERATECORE Generate Matlab classes from NWB core schema files
% GENERATECORE() Generate classes (Matlab m-files) from the
-% NWB:N core namespace file.
+% NWB:N core namespace file. By default, generates off of the most recent nwb-schema
+% release.
%
-% GENERATECORE(core_or_extension_paths,...) Generate classes for the
-% core namespace as well as one or more extenstions. Each input filename
-% should be an NWB namespace file.
+% GENERATECORE(version) Generate classes for the
+% core namespace of that version
%
% A cache of schema data is generated in the 'namespaces' subdirectory in
% the current working directory. This is for allowing cross-referencing
@@ -16,25 +16,30 @@ function generateCore(varargin)
%
% Example:
% generateCore();
-% generateCore('schema/core/nwb.namespace.yaml');
-% generateCore('schema/my_ext/myext.namespace.yaml');
+% generateCore('2.2.3');
%
% See also GENERATEEXTENSION
+
if nargin == 0
- [nwbLocation, ~, ~] = fileparts(mfilename('fullpath'));
- schemaPath = fullfile(nwbLocation, 'nwb-schema');
- corePath = fullfile(schemaPath, 'core', 'nwb.namespace.yaml');
- commonPath = fullfile(schemaPath, 'hdmf-common-schema', ...
- 'common', 'namespace.yaml');
-
- if 2 == exist(commonPath, 'file')
- generateExtension(commonPath);
- end
-
- generateExtension(corePath);
+ version = '2.2.5';
else
- for i=1:length(varargin)
- generateExtension(varargin{i});
- end
+ validateattributes(version, {'char'}, {'scalartext'});
end
+
+[nwbLocation, ~, ~] = fileparts(mfilename('fullpath'));
+schemaPath = fullfile(nwbLocation, 'nwb-schema', version);
+corePath = fullfile(schemaPath, 'core', 'nwb.namespace.yaml');
+commonPath = fullfile(schemaPath,...
+ 'hdmf-common-schema', ...
+ 'common',...
+ 'namespace.yaml');
+assert(2 == exist(corePath, 'file'),...
+ 'MATNWB:nwbread:missingSpec',...
+ 'Cannot find suitable core namespace for schema version `%s`',...
+ version);
+
+if 2 == exist(commonPath, 'file')
+ generateExtension(commonPath);
+end
+generateExtension(corePath);
end
\ No newline at end of file
diff --git a/generateExtension.m b/generateExtension.m
index 0023fa2a..2062bdf0 100644
--- a/generateExtension.m
+++ b/generateExtension.m
@@ -1,6 +1,6 @@
-function generateExtension(source)
+function generateExtension(varargin)
% GENERATEEXTENSION Generate Matlab classes from NWB extension schema file
-% GENERATECORE(extension_path...) Generate classes
+% GENERATEEXTENSION(extension_path...) Generate classes
% (Matlab m-files) from one or more NWB:N schema extension namespace
% files. A registry of already generated core types is used to resolve
% dependent types.
@@ -13,19 +13,22 @@ function generateExtension(source)
% current working directory.
%
% Example:
-% generateCore('schema\core\nwb.namespace.yaml');
-% generateExtension('schema\myext\myextension.namespace.yaml')
+% generateExtension('schema\myext\myextension.namespace.yaml', 'schema\myext2\myext2.namespace.yaml');
%
% See also GENERATECORE
-validateattributes(source, {'char', 'string'}, {'scalartext'});
-
-[localpath, ~, ~] = fileparts(source);
-assert(2 == exist(source, 'file'),...
- 'MATNWB:FILE', 'Path to file `%s` could not be found.', source);
-fid = fopen(source);
-namespaceText = fread(fid, '*char') .';
-fclose(fid);
-
-Namespace = spec.generate(namespaceText, localpath);
-file.writeNamespace(Namespace.name);
+for i = 1:length(varargin)
+ source = varargin{i};
+ validateattributes(source, {'char', 'string'}, {'scalartext'});
+
+ [localpath, ~, ~] = fileparts(source);
+ assert(2 == exist(source, 'file'),...
+ 'MATNWB:FILE', 'Path to file `%s` could not be found.', source);
+ fid = fopen(source);
+ namespaceText = fread(fid, '*char') .';
+ fclose(fid);
+
+ Namespace = spec.generate(namespaceText, localpath);
+ file.writeNamespace(Namespace.name);
+ rehash();
+end
end
\ No newline at end of file
diff --git a/nwb-schema/2.2.0 b/nwb-schema/2.2.0
new file mode 160000
index 00000000..62c73400
--- /dev/null
+++ b/nwb-schema/2.2.0
@@ -0,0 +1 @@
+Subproject commit 62c73400565afc28f67ede4f2e86023c33167cf8
diff --git a/nwb-schema/2.2.1 b/nwb-schema/2.2.1
new file mode 160000
index 00000000..5d6160ec
--- /dev/null
+++ b/nwb-schema/2.2.1
@@ -0,0 +1 @@
+Subproject commit 5d6160eccc6e4c786fc328c8f1d227420f933bda
diff --git a/nwb-schema/2.2.2 b/nwb-schema/2.2.2
new file mode 160000
index 00000000..7931e59a
--- /dev/null
+++ b/nwb-schema/2.2.2
@@ -0,0 +1 @@
+Subproject commit 7931e59ad1e97433ce4a450fa5bc2dab81af6f8d
diff --git a/nwb-schema/2.2.3 b/nwb-schema/2.2.3
new file mode 160000
index 00000000..6b2ca916
--- /dev/null
+++ b/nwb-schema/2.2.3
@@ -0,0 +1 @@
+Subproject commit 6b2ca91695929866b7de257b79a316788eece1ae
diff --git a/nwb-schema/2.2.4 b/nwb-schema/2.2.4
new file mode 160000
index 00000000..24fba617
--- /dev/null
+++ b/nwb-schema/2.2.4
@@ -0,0 +1 @@
+Subproject commit 24fba6174ddbad171ee5bb824edfa31f86b1b16d
diff --git a/nwb-schema/2.2.5 b/nwb-schema/2.2.5
new file mode 160000
index 00000000..aa7702e1
--- /dev/null
+++ b/nwb-schema/2.2.5
@@ -0,0 +1 @@
+Subproject commit aa7702e1cc5be2b85f19206e0d1d50bc4bd7e296
diff --git a/nwb-schema/core/UpdateFromUpstream.sh b/nwb-schema/core/UpdateFromUpstream.sh
deleted file mode 100755
index 759570fb..00000000
--- a/nwb-schema/core/UpdateFromUpstream.sh
+++ /dev/null
@@ -1,19 +0,0 @@
-#!/usr/bin/env bash
-
-thirdparty_module_name='nwb-schema'
-
-upstream_git_url='git://github.com/NeurodataWithoutBorders/nwb-schema'
-upstream_git_branch='dev'
-github_compare=true
-
-snapshot_author_name='nwb-schema Upstream'
-snapshot_author_email='neurodatawithoutborders@googlegroups.com'
-
-snapshot_redact_cmd=''
-snapshot_relative_path='schema'
-snapshot_paths='
- core
- '
-
-source "${BASH_SOURCE%/*}/../../utilities/maintenance/UpdateThirdPartyFromUpstream.sh"
-update_from_upstream
diff --git a/nwb-schema/core/nwb.base.yaml b/nwb-schema/core/nwb.base.yaml
deleted file mode 100644
index f926cab3..00000000
--- a/nwb-schema/core/nwb.base.yaml
+++ /dev/null
@@ -1,206 +0,0 @@
-datasets:
-- neurodata_type_def: NWBData
- neurodata_type_inc: Data
- doc: An abstract data type for a dataset.
-
-- neurodata_type_def: Image
- neurodata_type_inc: NWBData
- dtype: numeric
- dims:
- - - x
- - y
- - - x
- - y
- - r, g, b
- - - x
- - y
- - r, g, b, a
- shape:
- - - null
- - null
- - - null
- - null
- - 3
- - - null
- - null
- - 4
- doc: An abstract data type for an image. Shape can be 2-D (x, y), or 3-D where the
- third dimension can have three or four elements, e.g. (x, y, (r, g, b)) or
- (x, y, (r, g, b, a)).
- attributes:
- - name: resolution
- dtype: float32
- doc: Pixel resolution of the image, in pixels per centimeter.
- required: false
- - name: description
- dtype: text
- doc: Description of the image.
- required: false
-
-groups:
-- neurodata_type_def: NWBContainer
- neurodata_type_inc: Container
- doc: An abstract data type for a generic container storing collections of data and
- metadata. Base type for all data and metadata containers.
-
-- neurodata_type_def: NWBDataInterface
- neurodata_type_inc: NWBContainer
- doc: An abstract data type for a generic container storing collections of data,
- as opposed to metadata.
-
-- neurodata_type_def: TimeSeries
- neurodata_type_inc: NWBDataInterface
- doc: General purpose time series.
- attributes:
- - name: description
- dtype: text
- default_value: no description
- doc: Description of the time series.
- required: false
- - name: comments
- dtype: text
- default_value: no comments
- doc: Human-readable comments about the TimeSeries. This second descriptive field
- can be used to store additional information, or descriptive information if the
- primary description field is populated with a computer-readable string.
- required: false
- datasets:
- - name: data
- dims:
- - - num_times
- - - num_times
- - num_DIM2
- - - num_times
- - num_DIM2
- - num_DIM3
- - - num_times
- - num_DIM2
- - num_DIM3
- - num_DIM4
- shape:
- - - null
- - - null
- - null
- - - null
- - null
- - null
- - - null
- - null
- - null
- - null
- doc: Data values. Data can be in 1-D, 2-D, 3-D, or 4-D. The first dimension
- should always represent time. This can also be used to store binary data
- (e.g., image frames). This can also be a link to data stored in an external file.
- attributes:
- - name: conversion
- dtype: float32
- default_value: 1.0
- doc: Scalar to multiply each element in data to convert it to the specified 'unit'.
- If the data are stored in acquisition system units or other units
- that require a conversion to be interpretable, multiply the data by 'conversion'
- to convert the data to the specified 'unit'. e.g. if the data acquisition system
- stores values in this object as signed 16-bit integers (int16 range
- -32,768 to 32,767) that correspond to a 5V range (-2.5V to 2.5V), and the data
- acquisition system gain is 8000X, then the 'conversion' multiplier to get from
- raw data acquisition values to recorded volts is 2.5/32768/8000 = 9.5367e-9.
- required: false
- - name: resolution
- dtype: float32
- default_value: -1.0
- doc: Smallest meaningful difference between values in data, stored in the specified
- by unit, e.g., the change in value of the least significant bit, or a larger
- number if signal noise is known to be present. If unknown, use -1.0.
- required: false
- - name: unit
- dtype: text
- doc: Base unit of measurement for working with the data. Actual stored values are
- not necessarily stored in these units. To access the data in these units,
- multiply 'data' by 'conversion'.
- - name: starting_time
- dtype: float64
- doc: Timestamp of the first sample in seconds. When timestamps are uniformly
- spaced, the timestamp of the first sample can be specified and all subsequent
- ones calculated from the sampling rate attribute.
- quantity: '?'
- attributes:
- - name: rate
- dtype: float32
- doc: Sampling rate, in Hz.
- - name: unit
- dtype: text
- value: seconds
- doc: Unit of measurement for time, which is fixed to 'seconds'.
- - name: timestamps
- dtype: float64
- dims:
- - num_times
- shape:
- - null
- doc: Timestamps for samples stored in data, in seconds, relative to the
- common experiment master-clock stored in NWBFile.timestamps_reference_time.
- quantity: '?'
- attributes:
- - name: interval
- dtype: int32
- value: 1
- doc: Value is '1'
- - name: unit
- dtype: text
- value: seconds
- doc: Unit of measurement for timestamps, which is fixed to 'seconds'.
- - name: control
- dtype: uint8
- dims:
- - num_times
- shape:
- - null
- doc: Numerical labels that apply to each time point in data for the purpose of
- querying and slicing data by these values. If present, the length of this
- array should be the same size as the first dimension of data.
- quantity: '?'
- - name: control_description
- dtype: text
- dims:
- - num_control_values
- shape:
- - null
- doc: Description of each control value. Must be present if control is present.
- If present, control_description[0] should describe time points where control == 0.
- quantity: '?'
- groups:
- - name: sync
- doc: Lab-specific time and sync information as provided directly from hardware
- devices and that is necessary for aligning all acquired time information to
- a common timebase. The timestamp array stores time in the common timebase.
- This group will usually only be populated in TimeSeries that are
- stored external to the NWB file, in files storing raw data. Once timestamp
- data is calculated, the contents of 'sync' are mostly for archival purposes.
- quantity: '?'
-
-- neurodata_type_def: ProcessingModule
- neurodata_type_inc: NWBContainer
- doc: A collection of processed data.
- attributes:
- - name: description
- dtype: text
- doc: Description of this collection of processed data.
- groups:
- - neurodata_type_inc: NWBDataInterface
- doc: Data objects stored in this collection.
- quantity: '*'
- - neurodata_type_inc: DynamicTable
- doc: Tables stored in this collection.
- quantity: '*'
-
-- neurodata_type_def: Images
- neurodata_type_inc: NWBDataInterface
- default_name: Images
- doc: A collection of images.
- attributes:
- - name: description
- dtype: text
- doc: Description of this collection of images.
- datasets:
- - neurodata_type_inc: Image
- doc: Images stored in this collection.
- quantity: '+'
diff --git a/nwb-schema/core/nwb.behavior.yaml b/nwb-schema/core/nwb.behavior.yaml
deleted file mode 100644
index 300b48db..00000000
--- a/nwb-schema/core/nwb.behavior.yaml
+++ /dev/null
@@ -1,116 +0,0 @@
-groups:
-- neurodata_type_def: SpatialSeries
- neurodata_type_inc: TimeSeries
- doc: "Direction, e.g., of gaze or travel, or position. The TimeSeries::data field\
- \ is a 2D array storing position or direction relative to some reference frame.\
- \ Array structure: [num measurements] [num dimensions]. Each SpatialSeries has\
- \ a text dataset reference_frame that indicates the zero-position, or the zero-axes\
- \ for direction. For example, if representing gaze direction, 'straight-ahead'\
- \ might be a specific pixel on the monitor, or some other point in space. For\
- \ position data, the 0,0 point might be the top-left corner of an enclosure, as\
- \ viewed from the tracking camera. The unit of data will indicate how to interpret\
- \ SpatialSeries values."
- datasets:
- - name: data
- dtype: numeric
- dims:
- - - num_times
- - - num_times
- - num_features
- shape:
- - - null
- - - null
- - null
- doc: 1-D or 2-D array storing position or direction relative to some reference frame.
- attributes:
- - name: unit
- dtype: text
- default_value: meters
- doc: Base unit of measurement for working with the data. The default value
- is 'meters'. Actual stored values are not necessarily stored in these units.
- To access the data in these units, multiply 'data' by 'conversion'.
- required: false
- - name: reference_frame
- dtype: text
- doc: Description defining what exactly 'straight-ahead' means.
- quantity: '?'
-
-- neurodata_type_def: BehavioralEpochs
- neurodata_type_inc: NWBDataInterface
- default_name: BehavioralEpochs
- doc: TimeSeries for storing behavioral epochs. The objective of this and the other
- two Behavioral interfaces (e.g. BehavioralEvents and BehavioralTimeSeries) is
- to provide generic hooks for software tools/scripts. This allows a tool/script
- to take the output one specific interface (e.g., UnitTimes) and plot that data
- relative to another data modality (e.g., behavioral events) without having to
- define all possible modalities in advance. Declaring one of these interfaces means
- that one or more TimeSeries of the specified type is published. These TimeSeries
- should reside in a group having the same name as the interface. For example, if
- a BehavioralTimeSeries interface is declared, the module will have one or more
- TimeSeries defined in the module sub-group 'BehavioralTimeSeries'. BehavioralEpochs
- should use IntervalSeries. BehavioralEvents is used for irregular events. BehavioralTimeSeries
- is for continuous data.
- groups:
- - neurodata_type_inc: IntervalSeries
- doc: IntervalSeries object containing start and stop times of epochs.
- quantity: '*'
-
-- neurodata_type_def: BehavioralEvents
- neurodata_type_inc: NWBDataInterface
- default_name: BehavioralEvents
- doc: TimeSeries for storing behavioral events. See description of BehavioralEpochs
- for more details.
- groups:
- - neurodata_type_inc: TimeSeries
- doc: TimeSeries object containing behavioral events.
- quantity: '*'
-
-- neurodata_type_def: BehavioralTimeSeries
- neurodata_type_inc: NWBDataInterface
- default_name: BehavioralTimeSeries
- doc: TimeSeries for storing Behavoioral time series data. See description of BehavioralEpochs
- for more details.
- groups:
- - neurodata_type_inc: TimeSeries
- doc: TimeSeries object containing continuous behavioral data.
- quantity: '*'
-
-- neurodata_type_def: PupilTracking
- neurodata_type_inc: NWBDataInterface
- default_name: PupilTracking
- doc: Eye-tracking data, representing pupil size.
- groups:
- - neurodata_type_inc: TimeSeries
- doc: TimeSeries object containing time series data on pupil size.
- quantity: '+'
-
-- neurodata_type_def: EyeTracking
- neurodata_type_inc: NWBDataInterface
- default_name: EyeTracking
- doc: Eye-tracking data, representing direction of gaze.
- groups:
- - neurodata_type_inc: SpatialSeries
- doc: SpatialSeries object containing data measuring direction of gaze.
- quantity: '*'
-
-- neurodata_type_def: CompassDirection
- neurodata_type_inc: NWBDataInterface
- default_name: CompassDirection
- doc: With a CompassDirection interface, a module publishes a SpatialSeries object
- representing a floating point value for theta. The SpatialSeries::reference_frame
- field should indicate what direction corresponds to 0 and which is the direction
- of rotation (this should be clockwise). The si_unit for the SpatialSeries should
- be radians or degrees.
- groups:
- - neurodata_type_inc: SpatialSeries
- doc: SpatialSeries object containing direction of gaze travel.
- quantity: '*'
-
-- neurodata_type_def: Position
- neurodata_type_inc: NWBDataInterface
- default_name: Position
- doc: Position data, whether along the x, x/y or x/y/z axis.
- groups:
- - neurodata_type_inc: SpatialSeries
- doc: SpatialSeries object containing position data.
- quantity: '+'
diff --git a/nwb-schema/core/nwb.device.yaml b/nwb-schema/core/nwb.device.yaml
deleted file mode 100644
index d883e59a..00000000
--- a/nwb-schema/core/nwb.device.yaml
+++ /dev/null
@@ -1,14 +0,0 @@
-groups:
-- neurodata_type_def: Device
- neurodata_type_inc: NWBContainer
- doc: Metadata about a data acquisition device, e.g., recording system, electrode, microscope.
- attributes:
- - name: description
- dtype: text
- doc: Description of the device (e.g., model, firmware version, processing software version, etc.)
- as free-form text.
- required: false
- - name: manufacturer
- dtype: text
- doc: The name of the manufacturer of the device.
- required: false
diff --git a/nwb-schema/core/nwb.ecephys.yaml b/nwb-schema/core/nwb.ecephys.yaml
deleted file mode 100644
index 90c8655d..00000000
--- a/nwb-schema/core/nwb.ecephys.yaml
+++ /dev/null
@@ -1,324 +0,0 @@
-groups:
-- neurodata_type_def: ElectricalSeries
- neurodata_type_inc: TimeSeries
- doc: A time series of acquired voltage data from extracellular recordings.
- The data field is an int or float array storing data in volts. The first
- dimension should always represent time. The second dimension, if present,
- should represent channels.
- datasets:
- - name: data
- dtype: numeric
- dims:
- - - num_times
- - - num_times
- - num_channels
- - - num_times
- - num_channels
- - num_samples
- shape:
- - - null
- - - null
- - null
- - - null
- - null
- - null
- doc: Recorded voltage data.
- attributes:
- - name: unit
- dtype: text
- value: volts
- doc: Base unit of measurement for working with the data. This value is fixed to
- 'volts'. Actual stored values are not necessarily stored in these units. To
- access the data in these units, multiply 'data' by 'conversion' and
- 'channel_conversion' (if present).
- - name: electrodes
- neurodata_type_inc: DynamicTableRegion
- doc: DynamicTableRegion pointer to the electrodes that this time series was generated from.
- - name: channel_conversion
- dtype: float32
- dims:
- - num_channels
- shape:
- - null
- doc: Channel-specific conversion factor. Multiply the data in the 'data' dataset by these
- values along the channel axis (as indicated by axis attribute) AND by the global
- conversion factor in the 'conversion' attribute of 'data' to get the data values in
- Volts, i.e, data in Volts = data * data.conversion * channel_conversion. This
- approach allows for both global and per-channel data conversion factors needed
- to support the storage of electrical recordings as native values generated by data
- acquisition systems. If this dataset is not present, then there is no channel-specific
- conversion factor, i.e. it is 1 for all channels.
- quantity: '?'
- attributes:
- - name: axis
- dtype: int32
- value: 1
- doc: The zero-indexed axis of the 'data' dataset that the channel-specific conversion
- factor corresponds to. This value is fixed to 1.
-
-- neurodata_type_def: SpikeEventSeries
- neurodata_type_inc: ElectricalSeries
- doc: "Stores snapshots/snippets of recorded spike events (i.e., threshold crossings). This
- may also be raw data, as reported by ephys hardware. If so, the TimeSeries::description
- field should describe how events were detected. All SpikeEventSeries should
- reside in a module (under EventWaveform interface) even if the spikes were reported
- and stored by hardware. All events span the same recording channels and store
- snapshots of equal duration. TimeSeries::data array structure: [num events]
- [num channels] [num samples] (or [num events] [num samples] for single electrode)."
- datasets:
- - name: data
- dtype: numeric
- dims:
- - - num_events
- - num_samples
- - - num_events
- - num_channels
- - num_samples
- shape:
- - - null
- - null
- - - null
- - null
- - null
- doc: Spike waveforms.
- attributes:
- - name: unit
- dtype: text
- value: volts
- doc: Unit of measurement for waveforms, which is fixed to 'volts'.
- - name: timestamps
- dtype: float64
- dims:
- - num_times
- shape:
- - null
- doc: Timestamps for samples stored in data, in seconds, relative to the
- common experiment master-clock stored in NWBFile.timestamps_reference_time.
- Timestamps are required for the events. Unlike for TimeSeries, timestamps are
- required for SpikeEventSeries and are thus re-specified here.
- attributes:
- - name: interval
- dtype: int32
- value: 1
- doc: Value is '1'
- - name: unit
- dtype: text
- value: seconds
- doc: Unit of measurement for timestamps, which is fixed to 'seconds'.
-
-- neurodata_type_def: FeatureExtraction
- neurodata_type_inc: NWBDataInterface
- default_name: FeatureExtraction
- doc: Features, such as PC1 and PC2, that are extracted from signals stored in a
- SpikeEventSeries or other source.
- datasets:
- - name: description
- dtype: text
- dims:
- - num_features
- shape:
- - null
- doc: Description of features (eg, ''PC1'') for each of the extracted features.
- - name: features
- dtype: float32
- dims:
- - num_events
- - num_channels
- - num_features
- shape:
- - null
- - null
- - null
- doc: Multi-dimensional array of features extracted from each event.
- - name: times
- dtype: float64
- dims:
- - num_events
- shape:
- - null
- doc: Times of events that features correspond to (can be a link).
- - name: electrodes
- neurodata_type_inc: DynamicTableRegion
- doc: DynamicTableRegion pointer to the electrodes that this time series was generated from.
-
-- neurodata_type_def: EventDetection
- neurodata_type_inc: NWBDataInterface
- default_name: EventDetection
- doc: Detected spike events from voltage trace(s).
- datasets:
- - name: detection_method
- dtype: text
- doc: Description of how events were detected, such as voltage threshold, or dV/dT
- threshold, as well as relevant values.
- - name: source_idx
- dtype: int32
- dims:
- - num_events
- shape:
- - null
- doc: Indices (zero-based) into source ElectricalSeries::data array corresponding
- to time of event. ''description'' should define what is meant by time of
- event (e.g., .25 ms before action potential peak, zero-crossing time, etc).
- The index points to each event from the raw data.
- - name: times
- dtype: float64
- dims:
- - num_events
- shape:
- - null
- doc: Timestamps of events, in seconds.
- attributes:
- - name: unit
- dtype: text
- value: seconds
- doc: Unit of measurement for event times, which is fixed to 'seconds'.
- links:
- - name: source_electricalseries
- target_type: ElectricalSeries
- doc: Link to the ElectricalSeries that this data was calculated from. Metadata
- about electrodes and their position can be read from that ElectricalSeries so
- it's not necessary to include that information here.
-
-- neurodata_type_def: EventWaveform
- neurodata_type_inc: NWBDataInterface
- default_name: EventWaveform
- doc: Represents either the waveforms of detected events, as extracted from a raw
- data trace in /acquisition, or the event waveforms that were stored during experiment
- acquisition.
- groups:
- - neurodata_type_inc: SpikeEventSeries
- doc: SpikeEventSeries object(s) containing detected spike event waveforms.
- quantity: '*'
-
-- neurodata_type_def: FilteredEphys
- neurodata_type_inc: NWBDataInterface
- default_name: FilteredEphys
- doc: Electrophysiology data from one or more channels that has been subjected to filtering.
- Examples of filtered data include Theta and Gamma (LFP has its own interface).
- FilteredEphys modules publish an ElectricalSeries for each filtered channel or
- set of channels. The name of each ElectricalSeries is arbitrary but should be
- informative. The source of the filtered data, whether this is from analysis of
- another time series or as acquired by hardware, should be noted in each's TimeSeries::description
- field. There is no assumed 1::1 correspondence between filtered ephys signals
- and electrodes, as a single signal can apply to many nearby electrodes, and one
- electrode may have different filtered (e.g., theta and/or gamma) signals represented.
- Filter properties should be noted in the ElectricalSeries.
- groups:
- - neurodata_type_inc: ElectricalSeries
- doc: ElectricalSeries object(s) containing filtered electrophysiology data.
- quantity: '+'
-
-- neurodata_type_def: LFP
- neurodata_type_inc: NWBDataInterface
- default_name: LFP
- doc: LFP data from one or more channels. The electrode map in each published ElectricalSeries
- will identify which channels are providing LFP data. Filter properties should
- be noted in the ElectricalSeries description or comments field.
- groups:
- - neurodata_type_inc: ElectricalSeries
- doc: ElectricalSeries object(s) containing LFP data for one or more channels.
- quantity: '+'
-
-- neurodata_type_def: ElectrodeGroup
- neurodata_type_inc: NWBContainer
- doc: A physical grouping of electrodes, e.g. a shank of an array.
- attributes:
- - name: description
- dtype: text
- doc: Description of this electrode group.
- - name: location
- dtype: text
- doc: Location of electrode group. Specify the area, layer, comments on estimation
- of area/layer, etc. Use standard atlas names for anatomical regions when possible.
- datasets:
- - name: position
- dtype:
- - name: x
- dtype: float32
- doc: x coordinate
- - name: y
- dtype: float32
- doc: y coordinate
- - name: z
- dtype: float32
- doc: z coordinate
- doc: stereotaxic or common framework coordinates
- quantity: '?'
- links:
- - name: device
- target_type: Device
- doc: Link to the device that was used to record from this electrode group.
-
-# The types below have been deprecated
-- neurodata_type_def: ClusterWaveforms
- neurodata_type_inc: NWBDataInterface
- default_name: ClusterWaveforms
- doc: DEPRECATED The mean waveform shape, including standard deviation, of the different
- clusters. Ideally, the waveform analysis should be performed on data that is only
- high-pass filtered. This is a separate module because it is expected to require
- updating. For example, IMEC probes may require different storage requirements
- to store/display mean waveforms, requiring a new interface or an extension of
- this one.
- datasets:
- - name: waveform_filtering
- dtype: text
- doc: Filtering applied to data before generating mean/sd
- - name: waveform_mean
- dtype: float32
- dims:
- - num_clusters
- - num_samples
- shape:
- - null
- - null
- doc: The mean waveform for each cluster, using the same indices for each wave
- as cluster numbers in the associated Clustering module (i.e, cluster 3 is in
- array slot [3]). Waveforms corresponding to gaps in cluster sequence should
- be empty (e.g., zero- filled)
- - name: waveform_sd
- dtype: float32
- dims:
- - num_clusters
- - num_samples
- shape:
- - null
- - null
- doc: Stdev of waveforms for each cluster, using the same indices as in mean
- links:
- - name: clustering_interface
- target_type: Clustering
- doc: Link to Clustering interface that was the source of the clustered data
-
-- neurodata_type_def: Clustering
- neurodata_type_inc: NWBDataInterface
- default_name: Clustering
- doc: DEPRECATED Clustered spike data, whether from automatic clustering tools (e.g.,
- klustakwik) or as a result of manual sorting.
- datasets:
- - name: description
- dtype: text
- doc: Description of clusters or clustering, (e.g. cluster 0 is noise, clusters
- curated using Klusters, etc)
- - name: num
- dtype: int32
- dims:
- - num_events
- shape:
- - null
- doc: Cluster number of each event
- - name: peak_over_rms
- dtype: float32
- dims:
- - num_clusters
- shape:
- - null
- doc: Maximum ratio of waveform peak to RMS on any channel in the cluster (provides
- a basic clustering metric).
- - name: times
- dtype: float64
- dims:
- - num_events
- shape:
- - null
- doc: Times of clustered events, in seconds. This may be a link to times field
- in associated FeatureExtraction module.
diff --git a/nwb-schema/core/nwb.epoch.yaml b/nwb-schema/core/nwb.epoch.yaml
deleted file mode 100644
index c4164691..00000000
--- a/nwb-schema/core/nwb.epoch.yaml
+++ /dev/null
@@ -1,44 +0,0 @@
-groups:
-- neurodata_type_def: TimeIntervals
- neurodata_type_inc: DynamicTable
- doc: A container for aggregating epoch data and the TimeSeries that each epoch applies
- to.
- datasets:
- - name: start_time
- neurodata_type_inc: VectorData
- dtype: float32
- doc: Start time of epoch, in seconds.
- - name: stop_time
- neurodata_type_inc: VectorData
- dtype: float32
- doc: Stop time of epoch, in seconds.
- - name: tags
- neurodata_type_inc: VectorData
- dtype: text
- doc: User-defined tags that identify or categorize events.
- quantity: '?'
- - name: tags_index
- neurodata_type_inc: VectorIndex
- doc: Index for tags.
- quantity: '?'
- - name: timeseries
- neurodata_type_inc: VectorData
- dtype:
- - name: idx_start
- dtype: int32
- doc: Start index into the TimeSeries 'data' and 'timestamp' datasets of the
- referenced TimeSeries. The first dimension of those arrays is always time.
- - name: count
- dtype: int32
- doc: Number of data samples available in this time series, during this epoch.
- - name: timeseries
- dtype:
- target_type: TimeSeries
- reftype: object
- doc: the TimeSeries that this index applies to.
- doc: An index into a TimeSeries object.
- quantity: '?'
- - name: timeseries_index
- neurodata_type_inc: VectorIndex
- doc: Index for timeseries.
- quantity: '?'
diff --git a/nwb-schema/core/nwb.file.yaml b/nwb-schema/core/nwb.file.yaml
deleted file mode 100644
index 2376f36d..00000000
--- a/nwb-schema/core/nwb.file.yaml
+++ /dev/null
@@ -1,439 +0,0 @@
-groups:
-- neurodata_type_def: NWBFile
- neurodata_type_inc: NWBContainer
- name: root
- doc: An NWB:N file storing cellular-based neurophysiology data from a single
- experimental session.
- attributes:
- - name: nwb_version
- dtype: text
- value: 2.2.5
- doc: File version string. Use semantic versioning, e.g. 1.2.1. This will be the
- name of the format with trailing major, minor and patch numbers.
- datasets:
- - name: file_create_date
- dtype: isodatetime
- dims:
- - num_modifications
- shape:
- - null
- doc: 'A record of the date the file was created and of subsequent modifications.
- The date is stored in UTC with local timezone offset as ISO 8601
- extended formatted strings: 2018-09-28T14:43:54.123+02:00. Dates stored in
- UTC end in "Z" with no timezone offset. Date accuracy is up to milliseconds.
- The file can be created after the experiment was run, so this may differ from
- the experiment start time. Each modification to the nwb file adds a new entry
- to the array.'
- - name: identifier
- dtype: text
- doc: A unique text identifier for the file. For example, concatenated lab name,
- file creation date/time and experimentalist, or a hash of these and/or other
- values. The goal is that the string should be unique to all other files.
- - name: session_description
- dtype: text
- doc: A description of the experimental session and data in the file.
- - name: session_start_time
- dtype: isodatetime
- doc: 'Date and time of the experiment/session start. The date is stored
- in UTC with local timezone offset as ISO 8601 extended formatted string:
- 2018-09-28T14:43:54.123+02:00.
- Dates stored in UTC end in "Z" with no timezone offset. Date accuracy is
- up to milliseconds.'
- - name: timestamps_reference_time
- dtype: isodatetime
- doc: 'Date and time corresponding to time zero of all timestamps. The
- date is stored in UTC with local timezone offset as ISO 8601 extended formatted
- string: 2018-09-28T14:43:54.123+02:00. Dates stored in UTC end in "Z" with
- no timezone offset. Date accuracy is up to milliseconds. All times stored
- in the file use this time as reference (i.e., time zero).'
- groups:
- - name: acquisition
- doc: Data streams recorded from the system, including ephys, ophys, tracking,
- etc. This group should be read-only after the experiment is completed and
- timestamps are corrected to a common timebase. The data stored here may be links
- to raw data stored in external NWB files. This will allow keeping bulky raw
- data out of the file while preserving the option of keeping some/all in the
- file. Acquired data includes tracking and experimental data streams
- (i.e., everything measured from the system). If bulky data is stored in the /acquisition
- group, the data can exist in a separate NWB file that is linked to by the file
- being used for processing and analysis.
- groups:
- - neurodata_type_inc: NWBDataInterface
- doc: Acquired, raw data.
- quantity: '*'
- - neurodata_type_inc: DynamicTable
- doc: Tabular data that is relevent to acquisition
- quantity: '*'
- - name: analysis
- doc: Lab-specific and custom scientific analysis of data. There is no defined
- format for the content of this group - the format is up to the individual user/lab.
- To facilitate sharing analysis data between labs, the contents here
- should be stored in standard types (e.g., neurodata_types) and appropriately documented.
- The file can store lab-specific and custom data analysis without
- restriction on its form or schema, reducing data formatting restrictions on
- end users. Such data should be placed in the analysis group. The analysis data
- should be documented so that it could be shared with other labs.
- groups:
- - neurodata_type_inc: NWBContainer
- doc: Custom analysis results.
- quantity: '*'
- - neurodata_type_inc: DynamicTable
- doc: Tabular data that is relevent to data stored in analysis
- quantity: '*'
- - name: scratch
- doc: 'A place to store one-off analysis results. Data placed here is not intended for
- sharing. By placing data here, users acknowledge that there is no guarantee that
- their data meets any standard.'
- quantity: '?'
- groups:
- - neurodata_type_inc: NWBContainer
- doc: Any one-off containers
- quantity: '*'
- - neurodata_type_inc: DynamicTable
- doc: Any one-off tables
- quantity: '*'
- datasets:
- - neurodata_type_inc: ScratchData
- doc: Any one-off datasets
- quantity: '*'
- - name: processing
- doc: "The home for ProcessingModules. These modules perform intermediate analysis\
- \ of data that is necessary to perform before scientific analysis. Examples\
- \ include spike clustering, extracting position from tracking data, stitching\
- \ together image slices. ProcessingModules can be large\
- \ and express many data sets from relatively complex analysis (e.g., spike detection\
- \ and clustering) or small, representing extraction of position information\
- \ from tracking video, or even binary lick/no-lick decisions. Common software\
- \ tools (e.g., klustakwik, MClust) are expected to read/write data here. \
- \ 'Processing' refers to intermediate analysis of the acquired data to make\
- \ it more amenable to scientific analysis."
- groups:
- - neurodata_type_inc: ProcessingModule
- doc: Intermediate analysis of acquired data.
- quantity: '*'
- - name: stimulus
- doc: 'Data pushed into the system (eg, video stimulus, sound, voltage, etc) and
- secondary representations of that data (eg, measurements of something used as
- a stimulus). This group should be made read-only after experiment complete and timestamps
- are corrected to common timebase. Stores both presented stimuli and stimulus
- templates, the latter in case the same stimulus is presented multiple times,
- or is pulled from an external stimulus library. Stimuli are here
- defined as any signal that is pushed into the system as part of the experiment
- (eg, sound, video, voltage, etc). Many different experiments can use the same
- stimuli, and stimuli can be re-used during an experiment. The stimulus group
- is organized so that one version of template stimuli can be stored and these
- be used multiple times. These templates can exist in the present file or can
- be linked to a remote library file.'
- groups:
- - name: presentation
- doc: Stimuli presented during the experiment.
- groups:
- - neurodata_type_inc: TimeSeries
- doc: TimeSeries objects containing data of presented stimuli.
- quantity: '*'
- - name: templates
- doc: 'Template stimuli. Timestamps in templates are based on stimulus
- design and are relative to the beginning of the stimulus. When templates are
- used, the stimulus instances must convert presentation times to the experiment`s
- time reference frame.'
- groups:
- - neurodata_type_inc: TimeSeries
- doc: TimeSeries objects containing template data of presented stimuli.
- quantity: '*'
- - name: general
- doc: "Experimental metadata, including protocol, notes and description of hardware\
- \ device(s). The metadata stored in this section should be used to\
- \ describe the experiment. Metadata necessary for interpreting the data is stored\
- \ with the data. General experimental metadata, including animal\
- \ strain, experimental protocols, experimenter, devices, etc, are stored under\
- \ 'general'. Core metadata (e.g., that required to interpret data fields) is\
- \ stored with the data itself, and implicitly defined by the file specification\
- \ (e.g., time is in seconds). The strategy used here for storing non-core metadata\
- \ is to use free-form text fields, such as would appear in sentences or paragraphs\
- \ from a Methods section. Metadata fields are text to enable them to be more\
- \ general, for example to represent ranges instead of numerical values. Machine-readable\
- \ metadata is stored as attributes to these free-form datasets. All entries\
- \ in the below table are to be included when data is present. Unused groups\
- \ (e.g., intracellular_ephys in an optophysiology experiment) should not be\
- \ created unless there is data to store within them."
- datasets:
- - name: data_collection
- dtype: text
- doc: Notes about data collection and analysis.
- quantity: '?'
- - name: experiment_description
- dtype: text
- doc: General description of the experiment.
- quantity: '?'
- - name: experimenter
- dtype: text
- doc: Name of person(s) who performed the experiment. Can also specify roles
- of different people involved.
- quantity: '?'
- dims:
- - num_experimenters
- shape:
- - null
- - name: institution
- dtype: text
- doc: Institution(s) where experiment was performed.
- quantity: '?'
- - name: keywords
- dtype: text
- dims:
- - num_keywords
- shape:
- - null
- doc: Terms to search over.
- quantity: '?'
- - name: lab
- dtype: text
- doc: Laboratory where experiment was performed.
- quantity: '?'
- - name: notes
- dtype: text
- doc: Notes about the experiment.
- quantity: '?'
- - name: pharmacology
- dtype: text
- doc: Description of drugs used, including how and when they were administered.
- Anesthesia(s), painkiller(s), etc., plus dosage, concentration, etc.
- quantity: '?'
- - name: protocol
- dtype: text
- doc: Experimental protocol, if applicable. e.g., include IACUC protocol number.
- quantity: '?'
- - name: related_publications
- dtype: text
- doc: Publication information. PMID, DOI, URL, etc.
- dims:
- - num_publications
- shape:
- - null
- quantity: '?'
- - name: session_id
- dtype: text
- doc: Lab-specific ID for the session.
- quantity: '?'
- - name: slices
- dtype: text
- doc: Description of slices, including information about preparation thickness,
- orientation, temperature, and bath solution.
- quantity: '?'
- - name: source_script
- dtype: text
- doc: Script file or link to public source code used to create this NWB file.
- quantity: '?'
- attributes:
- - name: file_name
- dtype: text
- doc: Name of script file.
- - name: stimulus
- dtype: text
- doc: Notes about stimuli, such as how and where they were presented.
- quantity: '?'
- - name: surgery
- dtype: text
- doc: Narrative description about surgery/surgeries, including date(s) and who
- performed surgery.
- quantity: '?'
- - name: virus
- dtype: text
- doc: Information about virus(es) used in experiments, including virus ID, source,
- date made, injection location, volume, etc.
- quantity: '?'
- groups:
- - neurodata_type_inc: LabMetaData
- doc: Place-holder than can be extended so that lab-specific meta-data can be
- placed in /general.
- quantity: '*'
- - name: devices
- doc: Description of hardware devices used during experiment, e.g., monitors,
- ADC boards, microscopes, etc.
- quantity: '?'
- groups:
- - neurodata_type_inc: Device
- doc: Data acquisition devices.
- quantity: '*'
- - name: subject
- neurodata_type_inc: Subject
- doc: Information about the animal or person from which the data was measured.
- quantity: '?'
- - name: extracellular_ephys
- doc: Metadata related to extracellular electrophysiology.
- quantity: '?'
- groups:
- - neurodata_type_inc: ElectrodeGroup
- doc: Physical group of electrodes.
- quantity: '*'
- - name: electrodes
- neurodata_type_inc: DynamicTable
- doc: A table of all electrodes (i.e. channels) used for recording.
- quantity: '?'
- datasets:
- - name: x
- neurodata_type_inc: VectorData
- dtype: float32
- doc: x coordinate of the channel location in the brain (+x is posterior).
- - name: y
- neurodata_type_inc: VectorData
- dtype: float32
- doc: y coordinate of the channel location in the brain (+y is inferior).
- - name: z
- neurodata_type_inc: VectorData
- dtype: float32
- doc: z coordinate of the channel location in the brain (+z is right).
- - name: imp
- neurodata_type_inc: VectorData
- dtype: float32
- doc: Impedance of the channel.
- - name: location
- neurodata_type_inc: VectorData
- dtype: text
- doc: Location of the electrode (channel). Specify the area, layer, comments
- on estimation of area/layer, stereotaxic coordinates if in vivo, etc. Use
- standard atlas names for anatomical regions when possible.
- - name: filtering
- neurodata_type_inc: VectorData
- dtype: float32
- doc: Description of hardware filtering.
- - name: group
- neurodata_type_inc: VectorData
- dtype:
- target_type: ElectrodeGroup
- reftype: object
- doc: Reference to the ElectrodeGroup this electrode is a part of.
- - name: group_name
- neurodata_type_inc: VectorData
- dtype: text
- doc: Name of the ElectrodeGroup this electrode is a part of.
- - name: rel_x
- neurodata_type_inc: VectorData
- dtype: float32
- doc: x coordinate in electrode group
- quantity: '?'
- - name: rel_y
- neurodata_type_inc: VectorData
- dtype: float32
- doc: y coordinate in electrode group
- quantity: '?'
- - name: rel_z
- neurodata_type_inc: VectorData
- dtype: float32
- doc: z coordinate in electrode group
- quantity: '?'
- - name: reference
- neurodata_type_inc: VectorData
- dtype: text
- doc: Description of the reference used for this electrode.
- quantity: '?'
- - name: intracellular_ephys
- doc: Metadata related to intracellular electrophysiology.
- quantity: '?'
- datasets:
- - name: filtering
- dtype: text
- doc: Description of filtering used. Includes filtering type and
- parameters, frequency fall-off, etc. If this changes between TimeSeries,
- filter description should be stored as a text attribute for each TimeSeries.
- quantity: '?'
- groups:
- - neurodata_type_inc: IntracellularElectrode
- doc: An intracellular electrode.
- quantity: '*'
- - name: sweep_table
- neurodata_type_inc: SweepTable
- doc: The table which groups different PatchClampSeries together.
- quantity: '?'
- - name: optogenetics
- doc: Metadata describing optogenetic stimuluation.
- quantity: '?'
- groups:
- - neurodata_type_inc: OptogeneticStimulusSite
- doc: An optogenetic stimulation site.
- quantity: '*'
- - name: optophysiology
- doc: Metadata related to optophysiology.
- quantity: '?'
- groups:
- - neurodata_type_inc: ImagingPlane
- doc: An imaging plane.
- quantity: '*'
- - name: intervals
- doc: Experimental intervals, whether that be logically distinct sub-experiments
- having a particular scientific goal, trials (see trials subgroup) during an
- experiment, or epochs (see epochs subgroup) deriving from analysis of data.
- quantity: '?'
- groups:
- - name: epochs
- neurodata_type_inc: TimeIntervals
- doc: Divisions in time marking experimental stages or sub-divisions of a single
- recording session.
- quantity: '?'
- - name: trials
- neurodata_type_inc: TimeIntervals
- doc: Repeated experimental events that have a logical grouping.
- quantity: '?'
- - name: invalid_times
- neurodata_type_inc: TimeIntervals
- doc: Time intervals that should be removed from analysis.
- quantity: '?'
- - neurodata_type_inc: TimeIntervals
- doc: Optional additional table(s) for describing other experimental time intervals.
- quantity: '*'
- - name: units
- neurodata_type_inc: Units
- doc: Data about sorted spike units.
- quantity: '?'
-
-- neurodata_type_def: LabMetaData
- neurodata_type_inc: NWBContainer
- doc: Lab-specific meta-data.
-
-- neurodata_type_def: Subject
- neurodata_type_inc: NWBContainer
- doc: Information about the animal or person from which the data was measured.
- datasets:
- - name: age
- dtype: text
- doc: Age of subject. Can be supplied instead of 'date_of_birth'.
- quantity: '?'
- - name: date_of_birth
- dtype: isodatetime
- doc: Date of birth of subject. Can be supplied instead of 'age'.
- quantity: '?'
- - name: description
- dtype: text
- doc: Description of subject and where subject came from (e.g., breeder, if
- animal).
- quantity: '?'
- - name: genotype
- dtype: text
- doc: Genetic strain. If absent, assume Wild Type (WT).
- quantity: '?'
- - name: sex
- dtype: text
- doc: Gender of subject.
- quantity: '?'
- - name: species
- dtype: text
- doc: Species of subject.
- quantity: '?'
- - name: subject_id
- dtype: text
- doc: ID of animal/person used/participating in experiment (lab convention).
- quantity: '?'
- - name: weight
- dtype: text
- doc: Weight at time of experiment, at time of surgery and at other important
- times.
- quantity: '?'
-
-datasets:
-- neurodata_type_def: ScratchData
- neurodata_type_inc: NWBData
- doc: Any one-off datasets
- attributes:
- - name: notes
- doc: 'Any notes the user has about the dataset being stored'
- dtype: text
diff --git a/nwb-schema/core/nwb.icephys.yaml b/nwb-schema/core/nwb.icephys.yaml
deleted file mode 100644
index a3065166..00000000
--- a/nwb-schema/core/nwb.icephys.yaml
+++ /dev/null
@@ -1,247 +0,0 @@
-groups:
-- neurodata_type_def: PatchClampSeries
- neurodata_type_inc: TimeSeries
- doc: An abstract base class for patch-clamp data - stimulus or response,
- current or voltage.
- attributes:
- - name: stimulus_description
- dtype: text
- doc: Protocol/stimulus name for this patch-clamp dataset.
- - name: sweep_number
- dtype: uint32
- doc: Sweep number, allows to group different PatchClampSeries together.
- required: false
- datasets:
- - name: data
- dtype: numeric
- dims:
- - num_times
- shape:
- - null
- doc: Recorded voltage or current.
- attributes:
- - name: unit
- dtype: text
- doc: Base unit of measurement for working with the data. Actual stored values are
- not necessarily stored in these units. To access the data in these units,
- multiply 'data' by 'conversion'.
- - name: gain
- dtype: float32
- doc: Gain of the recording, in units Volt/Amp (v-clamp) or Volt/Volt (c-clamp).
- quantity: '?'
- links:
- - name: electrode
- target_type: IntracellularElectrode
- doc: Link to IntracellularElectrode object that describes the electrode that was
- used to apply or record this data.
-
-- neurodata_type_def: CurrentClampSeries
- neurodata_type_inc: PatchClampSeries
- doc: Voltage data from an intracellular current-clamp recording. A
- corresponding CurrentClampStimulusSeries (stored separately as a stimulus) is
- used to store the current injected.
- datasets:
- - name: data
- doc: Recorded voltage.
- attributes:
- - name: unit
- dtype: text
- value: volts
- doc: Base unit of measurement for working with the data. which is fixed to 'volts'.
- Actual stored values are not necessarily stored in these units. To access the data in these units,
- multiply 'data' by 'conversion'.
- - name: bias_current
- dtype: float32
- doc: Bias current, in amps.
- quantity: '?'
- - name: bridge_balance
- dtype: float32
- doc: Bridge balance, in ohms.
- quantity: '?'
- - name: capacitance_compensation
- dtype: float32
- doc: Capacitance compensation, in farads.
- quantity: '?'
-
-- neurodata_type_def: IZeroClampSeries
- neurodata_type_inc: CurrentClampSeries
- doc: Voltage data from an intracellular recording when all current
- and amplifier settings are off (i.e., CurrentClampSeries fields will be zero).
- There is no CurrentClampStimulusSeries associated with an IZero series because
- the amplifier is disconnected and no stimulus can reach the cell.
- datasets:
- - name: bias_current
- dtype: float32
- value: 0.0
- doc: Bias current, in amps, fixed to 0.0.
- - name: bridge_balance
- dtype: float32
- value: 0.0
- doc: Bridge balance, in ohms, fixed to 0.0.
- - name: capacitance_compensation
- dtype: float32
- value: 0.0
- doc: Capacitance compensation, in farads, fixed to 0.0.
-
-- neurodata_type_def: CurrentClampStimulusSeries
- neurodata_type_inc: PatchClampSeries
- doc: Stimulus current applied during current clamp recording.
- datasets:
- - name: data
- doc: Stimulus current applied.
- attributes:
- - name: unit
- dtype: text
- value: amperes
- doc: Base unit of measurement for working with the data. which is fixed to 'amperes'.
- Actual stored values are not necessarily stored in these units. To access the data in these units,
- multiply 'data' by 'conversion'.
-
-- neurodata_type_def: VoltageClampSeries
- neurodata_type_inc: PatchClampSeries
- doc: Current data from an intracellular voltage-clamp recording. A
- corresponding VoltageClampStimulusSeries (stored separately as a stimulus) is
- used to store the voltage injected.
- datasets:
- - name: data
- doc: Recorded current.
- attributes:
- - name: unit
- dtype: text
- value: amperes
- doc: Base unit of measurement for working with the data. which is fixed to 'amperes'.
- Actual stored values are not necessarily stored in these units. To access the data in these units,
- multiply 'data' by 'conversion'.
- - name: capacitance_fast
- dtype: float32
- doc: Fast capacitance, in farads.
- quantity: '?'
- attributes:
- - name: unit
- dtype: text
- value: farads
- doc: Unit of measurement for capacitance_fast, which is fixed to 'farads'.
- - name: capacitance_slow
- dtype: float32
- doc: Slow capacitance, in farads.
- quantity: '?'
- attributes:
- - name: unit
- dtype: text
- value: farads
- doc: Unit of measurement for capacitance_fast, which is fixed to 'farads'.
- - name: resistance_comp_bandwidth
- dtype: float32
- doc: Resistance compensation bandwidth, in hertz.
- quantity: '?'
- attributes:
- - name: unit
- dtype: text
- value: hertz
- doc: Unit of measurement for resistance_comp_bandwidth, which is fixed to 'hertz'.
- - name: resistance_comp_correction
- dtype: float32
- doc: Resistance compensation correction, in percent.
- quantity: '?'
- attributes:
- - name: unit
- dtype: text
- value: percent
- doc: Unit of measurement for resistance_comp_correction, which is fixed to 'percent'.
- - name: resistance_comp_prediction
- dtype: float32
- doc: Resistance compensation prediction, in percent.
- quantity: '?'
- attributes:
- - name: unit
- dtype: text
- value: percent
- doc: Unit of measurement for resistance_comp_prediction, which is fixed to 'percent'.
- - name: whole_cell_capacitance_comp
- dtype: float32
- doc: Whole cell capacitance compensation, in farads.
- quantity: '?'
- attributes:
- - name: unit
- dtype: text
- value: farads
- doc: Unit of measurement for whole_cell_capacitance_comp, which is fixed to 'farads'.
- - name: whole_cell_series_resistance_comp
- dtype: float32
- doc: Whole cell series resistance compensation, in ohms.
- quantity: '?'
- attributes:
- - name: unit
- dtype: text
- value: ohms
- doc: Unit of measurement for whole_cell_series_resistance_comp, which is fixed to 'ohms'.
-
-- neurodata_type_def: VoltageClampStimulusSeries
- neurodata_type_inc: PatchClampSeries
- doc: Stimulus voltage applied during a voltage clamp recording.
- datasets:
- - name: data
- doc: Stimulus voltage applied.
- attributes:
- - name: unit
- dtype: text
- value: volts
- doc: Base unit of measurement for working with the data. which is fixed to 'volts'.
- Actual stored values are not necessarily stored in these units. To access the data in these units,
- multiply 'data' by 'conversion'.
-
-- neurodata_type_def: IntracellularElectrode
- neurodata_type_inc: NWBContainer
- doc: An intracellular electrode and its metadata.
- datasets:
- - name: description
- dtype: text
- doc: Description of electrode (e.g., whole-cell, sharp, etc.).
- - name: filtering
- dtype: text
- doc: Electrode specific filtering.
- quantity: '?'
- - name: initial_access_resistance
- dtype: text
- doc: Initial access resistance.
- quantity: '?'
- - name: location
- dtype: text
- doc: Location of the electrode. Specify the area, layer, comments on estimation
- of area/layer, stereotaxic coordinates if in vivo, etc. Use standard atlas
- names for anatomical regions when possible.
- quantity: '?'
- - name: resistance
- dtype: text
- doc: Electrode resistance, in ohms.
- quantity: '?'
- - name: seal
- dtype: text
- doc: Information about seal used for recording.
- quantity: '?'
- - name: slice
- dtype: text
- doc: Information about slice used for recording.
- quantity: '?'
- links:
- - name: device
- target_type: Device
- doc: Device that was used to record from this electrode.
-
-- neurodata_type_def: SweepTable
- neurodata_type_inc: DynamicTable
- doc: The table which groups different PatchClampSeries together.
- datasets:
- - name: sweep_number
- neurodata_type_inc: VectorData
- dtype: uint32
- doc: Sweep number of the PatchClampSeries in that row.
- - name: series
- neurodata_type_inc: VectorData
- dtype:
- target_type: PatchClampSeries
- reftype: object
- doc: The PatchClampSeries with the sweep number in that row.
- - name: series_index
- neurodata_type_inc: VectorIndex
- doc: Index for series.
diff --git a/nwb-schema/core/nwb.image.yaml b/nwb-schema/core/nwb.image.yaml
deleted file mode 100644
index 50d3367a..00000000
--- a/nwb-schema/core/nwb.image.yaml
+++ /dev/null
@@ -1,192 +0,0 @@
-datasets:
-- neurodata_type_def: GrayscaleImage
- neurodata_type_inc: Image
- dims:
- - x
- - y
- shape:
- - null
- - null
- doc: A grayscale image.
- dtype: numeric
-
-- neurodata_type_def: RGBImage
- neurodata_type_inc: Image
- dims:
- - x
- - y
- - r, g, b
- shape:
- - null
- - null
- - 3
- doc: A color image.
- dtype: numeric
-
-- neurodata_type_def: RGBAImage
- neurodata_type_inc: Image
- dims:
- - x
- - y
- - r, g, b, a
- shape:
- - null
- - null
- - 4
- doc: A color image with transparency.
- dtype: numeric
-
-groups:
-- neurodata_type_def: ImageSeries
- neurodata_type_inc: TimeSeries
- doc: General image data that is common between acquisition and stimulus time series.
- Sometimes the image data is stored in the file in a raw format while other
- times it will be stored as a series of external image files in the host file system.
- The data field will either be binary data, if the data is stored in the NWB file, or
- empty, if the data is stored in an external image stack. [frame][x][y] or [frame][x][y][z].
- datasets:
- - name: data
- dtype: numeric
- dims:
- - - frame
- - x
- - y
- - - frame
- - x
- - y
- - z
- shape:
- - - null
- - null
- - null
- - - null
- - null
- - null
- - null
- doc: Binary data representing images across frames.
- quantity: '?'
- - name: dimension
- dtype: int32
- dims:
- - rank
- shape:
- - null
- doc: Number of pixels on x, y, (and z) axes.
- quantity: '?'
- - name: external_file
- dtype: text
- dims:
- - num_files
- shape:
- - null
- doc: Paths to one or more external file(s). The field is only present if format='external'.
- This is only relevant if the image series is stored in the file system as one
- or more image file(s). This field should NOT be used if the image is stored
- in another NWB file and that file is linked to this file.
- quantity: '?'
- attributes:
- - name: starting_frame
- dtype: int32
- dims:
- - num_files
- shape:
- - null
- doc: Each external image may contain one or more consecutive frames of the full
- ImageSeries. This attribute serves as an index to indicate which frames each file
- contains, to faciliate random access. The 'starting_frame' attribute, hence,
- contains a list of frame numbers within the full ImageSeries of the first frame
- of each file listed in the parent 'external_file' dataset. Zero-based indexing is
- used (hence, the first element will always be zero). For example, if the
- 'external_file' dataset has three paths to files and the first file has 5 frames,
- the second file has 10 frames, and the third file has 20 frames, then this
- attribute will have values [0, 5, 15]. If there is a single external file that
- holds all of the frames of the ImageSeries (and so there is a single element in
- the 'external_file' dataset), then this attribute should have value [0].
- - name: format
- dtype: text
- default_value: raw
- doc: Format of image. If this is 'external', then the attribute 'external_file'
- contains the path information to the image files. If this is 'raw', then the raw
- (single-channel) binary data is stored in the 'data' dataset. If this attribute
- is not present, then the default format='raw' case is assumed.
- quantity: '?'
-
-- neurodata_type_def: ImageMaskSeries
- neurodata_type_inc: ImageSeries
- doc: An alpha mask that is applied to a presented visual stimulus. The 'data' array
- contains an array of mask values that are applied to the displayed image. Mask
- values are stored as RGBA. Mask can vary with time. The timestamps array indicates
- the starting time of a mask, and that mask pattern continues until it's explicitly
- changed.
- links:
- - name: masked_imageseries
- target_type: ImageSeries
- doc: Link to ImageSeries object that this image mask is applied to.
-
-- neurodata_type_def: OpticalSeries
- neurodata_type_inc: ImageSeries
- doc: Image data that is presented or recorded. A stimulus template movie will be
- stored only as an image. When the image is presented as stimulus, additional data
- is required, such as field of view (e.g., how much of the visual field the image
- covers, or how what is the area of the target being imaged). If the OpticalSeries
- represents acquired imaging data, orientation is also important.
- datasets:
- - name: distance
- dtype: float32
- doc: Distance from camera/monitor to target/eye.
- quantity: '?'
- - name: field_of_view
- dtype: float32
- dims:
- - - width, height
- - - width, height, depth
- shape:
- - - 2
- - - 3
- doc: Width, height and depth of image, or imaged area, in meters.
- quantity: '?'
- - name: data
- dtype: numeric
- dims:
- - - frame
- - x
- - y
- - - frame
- - x
- - y
- - r, g, b
- shape:
- - - null
- - null
- - null
- - - null
- - null
- - null
- - 3
- doc: Images presented to subject, either grayscale or RGB
- - name: orientation
- dtype: text
- doc: Description of image relative to some reference frame (e.g., which way is
- up). Must also specify frame of reference.
- quantity: '?'
-
-- neurodata_type_def: IndexSeries
- neurodata_type_inc: TimeSeries
- doc: Stores indices to image frames stored in an ImageSeries. The purpose of the
- ImageIndexSeries is to allow a static image stack to be stored somewhere, and
- the images in the stack to be referenced out-of-order. This can be for the display
- of individual images, or of movie segments (as a movie is simply a series of images).
- The data field stores the index of the frame in the referenced ImageSeries, and
- the timestamps array indicates when that image was displayed.
- datasets:
- - name: data
- dtype: int32
- dims:
- - num_times
- shape:
- - null
- doc: Index of the frame in the referenced ImageSeries.
- links:
- - name: indexed_timeseries
- target_type: ImageSeries
- doc: Link to ImageSeries object containing images that are indexed.
diff --git a/nwb-schema/core/nwb.misc.yaml b/nwb-schema/core/nwb.misc.yaml
deleted file mode 100644
index c8723ba3..00000000
--- a/nwb-schema/core/nwb.misc.yaml
+++ /dev/null
@@ -1,279 +0,0 @@
-groups:
-- neurodata_type_def: AbstractFeatureSeries
- neurodata_type_inc: TimeSeries
- doc: Abstract features, such as quantitative descriptions of sensory stimuli. The
- TimeSeries::data field is a 2D array, storing those features (e.g., for visual
- grating stimulus this might be orientation, spatial frequency and contrast). Null
- stimuli (eg, uniform gray) can be marked as being an independent feature (eg,
- 1.0 for gray, 0.0 for actual stimulus) or by storing NaNs for feature values,
- or through use of the TimeSeries::control fields. A set of features is considered
- to persist until the next set of features is defined. The final set of features
- stored should be the null set. This is useful when storing the raw stimulus
- is impractical.
- datasets:
- - name: data
- dtype: numeric
- dims:
- - - num_times
- - - num_times
- - num_features
- shape:
- - - null
- - - null
- - null
- doc: Values of each feature at each time.
- attributes:
- - name: unit
- dtype: text
- default_value: see 'feature_units'
- doc: Since there can be different units for different features, store the units
- in 'feature_units'. The default value for this attribute is "see 'feature_units'".
- required: false
- - name: feature_units
- dtype: text
- dims:
- - num_features
- shape:
- - null
- doc: Units of each feature.
- quantity: '?'
- - name: features
- dtype: text
- dims:
- - num_features
- shape:
- - null
- doc: Description of the features represented in TimeSeries::data.
-
-- neurodata_type_def: AnnotationSeries
- neurodata_type_inc: TimeSeries
- doc: Stores user annotations made during an experiment. The data[]
- field stores a text array, and timestamps are stored for each annotation (ie,
- interval=1). This is largely an alias to a standard TimeSeries storing a text
- array but that is identifiable as storing annotations in a machine-readable way.
- datasets:
- - name: data
- dtype: text
- dims:
- - num_times
- shape:
- - null
- doc: Annotations made during an experiment.
- attributes:
- - name: resolution
- dtype: float32
- value: -1.0
- doc: Smallest meaningful difference between values in data. Annotations have
- no units, so the value is fixed to -1.0.
- - name: unit
- dtype: text
- value: n/a
- doc: Base unit of measurement for working with the data. Annotations have
- no units, so the value is fixed to 'n/a'.
-
-- neurodata_type_def: IntervalSeries
- neurodata_type_inc: TimeSeries
- doc: Stores intervals of data. The timestamps field stores the beginning and end
- of intervals. The data field stores whether the interval just started (>0 value)
- or ended (<0 value). Different interval types can be represented in the same series
- by using multiple key values (eg, 1 for feature A, 2 for feature B, 3 for feature
- C, etc). The field data stores an 8-bit integer. This is largely an alias of a
- standard TimeSeries but that is identifiable as representing time intervals in
- a machine-readable way.
- datasets:
- - name: data
- dtype: int8
- dims:
- - num_times
- shape:
- - null
- doc: Use values >0 if interval started, <0 if interval ended.
- attributes:
- - name: resolution
- dtype: float32
- value: -1.0
- doc: Smallest meaningful difference between values in data. Annotations have
- no units, so the value is fixed to -1.0.
- - name: unit
- dtype: text
- value: n/a
- doc: Base unit of measurement for working with the data. Annotations have
- no units, so the value is fixed to 'n/a'.
-
-- neurodata_type_def: DecompositionSeries
- neurodata_type_inc: TimeSeries
- doc: Spectral analysis of a time series, e.g. of an LFP or a speech signal.
- datasets:
- - name: data
- dtype: numeric
- dims:
- - num_times
- - num_channels
- - num_bands
- shape:
- - null
- - null
- - null
- doc: Data decomposed into frequency bands.
- attributes:
- - name: unit
- dtype: text
- default_value: no unit
- doc: Base unit of measurement for working with the data. Actual stored values are
- not necessarily stored in these units. To access the data in these units,
- multiply 'data' by 'conversion'.
- - name: metric
- dtype: text
- doc: The metric used, e.g. phase, amplitude, power.
- groups:
- - name: bands
- neurodata_type_inc: DynamicTable
- doc: Table for describing the bands that this series was generated from. There
- should be one row in this table for each band.
- datasets:
- - name: band_name
- neurodata_type_inc: VectorData
- dtype: text
- doc: Name of the band, e.g. theta.
- - name: band_limits
- neurodata_type_inc: VectorData
- dtype: float32
- dims:
- - num_bands
- - low, high
- shape:
- - null
- - 2
- doc: Low and high limit of each band in Hz. If it is a Gaussian filter, use
- 2 SD on either side of the center.
- - name: band_mean
- neurodata_type_inc: VectorData
- dtype: float32
- dims:
- - num_bands
- shape:
- - null
- doc: The mean Gaussian filters, in Hz.
- - name: band_stdev
- neurodata_type_inc: VectorData
- dtype: float32
- dims:
- - num_bands
- shape:
- - null
- doc: The standard deviation of Gaussian filters, in Hz.
- links:
- - name: source_timeseries
- target_type: TimeSeries
- doc: Link to TimeSeries object that this data was calculated from. Metadata about
- electrodes and their position can be read from that ElectricalSeries so it is
- not necessary to store that information here.
- quantity: '?'
-
-- neurodata_type_def: Units
- neurodata_type_inc: DynamicTable
- default_name: Units
- doc: Data about spiking units. Event times of observed units (e.g. cell, synapse,
- etc.) should be concatenated and stored in spike_times.
- datasets:
- - name: spike_times_index
- neurodata_type_inc: VectorIndex
- doc: Index into the spike_times dataset.
- quantity: '?'
- - name: spike_times
- neurodata_type_inc: VectorData
- dtype: float64
- doc: Spike times for each unit.
- quantity: '?'
- attributes:
- - name: resolution
- dtype: float64
- doc: The smallest possible difference between two spike times. Usually 1 divided by the acquisition sampling rate
- from which spike times were extracted, but could be larger if the acquisition time series was downsampled or
- smaller if the acquisition time series was smoothed/interpolated and it is possible for the spike time to be
- between samples.
- required: false
- - name: obs_intervals_index
- neurodata_type_inc: VectorIndex
- doc: Index into the obs_intervals dataset.
- quantity: '?'
- - name: obs_intervals
- neurodata_type_inc: VectorData
- dtype: float64
- dims:
- - num_intervals
- - start|end
- shape:
- - null
- - 2
- doc: Observation intervals for each unit.
- quantity: '?'
- - name: electrodes_index
- neurodata_type_inc: VectorIndex
- doc: Index into electrodes.
- quantity: '?'
- - name: electrodes
- neurodata_type_inc: DynamicTableRegion
- doc: Electrode that each spike unit came from, specified using a DynamicTableRegion.
- quantity: '?'
- - name: electrode_group
- neurodata_type_inc: VectorData
- dtype:
- target_type: ElectrodeGroup
- reftype: object
- doc: Electrode group that each spike unit came from.
- quantity: '?'
- - name: waveform_mean
- neurodata_type_inc: VectorData
- dtype: float32
- dims:
- - - num_units
- - num_samples
- - - num_units
- - num_samples
- - num_electrodes
- shape:
- - - null
- - null
- - - null
- - null
- - null
- doc: Spike waveform mean for each spike unit.
- quantity: '?'
- attributes:
- - name: sampling_rate
- dtype: float32
- doc: Sampling rate, in hertz.
- required: false
- - name: unit
- dtype: text
- value: volts
- doc: Unit of measurement. This value is fixed to 'volts'.
- required: false
- - name: waveform_sd
- neurodata_type_inc: VectorData
- dtype: float32
- dims:
- - - num_units
- - num_samples
- - - num_units
- - num_samples
- - num_electrodes
- shape:
- - - null
- - null
- - - null
- - null
- - null
- doc: Spike waveform standard deviation for each spike unit.
- quantity: '?'
- attributes:
- - name: sampling_rate
- dtype: float32
- doc: Sampling rate, in hertz.
- required: false
- - name: unit
- dtype: text
- value: volts
- doc: Unit of measurement. This value is fixed to 'volts'.
- required: false
diff --git a/nwb-schema/core/nwb.namespace.yaml b/nwb-schema/core/nwb.namespace.yaml
deleted file mode 100644
index c3ec78ad..00000000
--- a/nwb-schema/core/nwb.namespace.yaml
+++ /dev/null
@@ -1,60 +0,0 @@
-namespaces:
-- name: core
- doc: NWB namespace
- author:
- - Andrew Tritt
- - Oliver Ruebel
- - Ryan Ly
- - Ben Dichter
- - Keith Godfrey
- - Jeff Teeters
- contact:
- - ajtritt@lbl.gov
- - oruebel@lbl.gov
- - rly@lbl.gov
- - bdichter@lbl.gov
- - keithg@alleninstitute.org
- - jteeters@berkeley.edu
- full_name: NWB core
- schema:
- - namespace: hdmf-common
- - doc: This source module contains base data types used throughout the NWB:N data
- format.
- source: nwb.base.yaml
- title: Base data types
- - doc: This source module contains neurodata_types for device data.
- source: nwb.device.yaml
- title: Devices
- - doc: This source module contains neurodata_types for epoch data.
- source: nwb.epoch.yaml
- title: Epochs
- - doc: This source module contains neurodata_types for image data.
- source: nwb.image.yaml
- title: Image data
- - doc: Main NWB:N file specification.
- source: nwb.file.yaml
- title: NWB:N file
- - doc: Miscellaneous types.
- source: nwb.misc.yaml
- title: Miscellaneous neurodata_types.
- - doc: This source module contains neurodata_types for behavior data.
- source: nwb.behavior.yaml
- title: Behavior
- - doc: This source module contains neurodata_types for extracellular electrophysiology
- data.
- source: nwb.ecephys.yaml
- title: Extracellular electrophysiology
- - doc: This source module contains neurodata_types for intracellular electrophysiology
- data.
- source: nwb.icephys.yaml
- title: Intracellular electrophysiology
- - doc: This source module contains neurodata_types for opto-genetics data.
- source: nwb.ogen.yaml
- title: Optogenetics
- - doc: This source module contains neurodata_types for optical physiology data.
- source: nwb.ophys.yaml
- title: Optical physiology
- - doc: This source module contains neurodata_type for retinotopy data.
- source: nwb.retinotopy.yaml
- title: Retinotopy
- version: 2.2.5
diff --git a/nwb-schema/core/nwb.ogen.yaml b/nwb-schema/core/nwb.ogen.yaml
deleted file mode 100644
index 1756ba85..00000000
--- a/nwb-schema/core/nwb.ogen.yaml
+++ /dev/null
@@ -1,43 +0,0 @@
-groups:
-- neurodata_type_def: OptogeneticSeries
- neurodata_type_inc: TimeSeries
- doc: An optogenetic stimulus.
- datasets:
- - name: data
- dtype: numeric
- dims:
- - num_times
- shape:
- - null
- doc: Applied power for optogenetic stimulus, in watts.
- attributes:
- - name: unit
- dtype: text
- value: watts
- doc: Unit of measurement for data, which is fixed to 'watts'.
- links:
- - name: site
- target_type: OptogeneticStimulusSite
- doc: Link to OptogeneticStimulusSite object that describes the site to which this
- stimulus was applied.
-
-- neurodata_type_def: OptogeneticStimulusSite
- neurodata_type_inc: NWBContainer
- doc: A site of optogenetic stimulation.
- quantity: '*'
- datasets:
- - name: description
- dtype: text
- doc: Description of stimulation site.
- - name: excitation_lambda
- dtype: float32
- doc: Excitation wavelength, in nm.
- - name: location
- dtype: text
- doc: Location of the stimulation site. Specify the area, layer, comments on estimation
- of area/layer, stereotaxic coordinates if in vivo, etc. Use standard atlas
- names for anatomical regions when possible.
- links:
- - name: device
- target_type: Device
- doc: Device that generated the stimulus.
diff --git a/nwb-schema/core/nwb.ophys.yaml b/nwb-schema/core/nwb.ophys.yaml
deleted file mode 100644
index 386dca9b..00000000
--- a/nwb-schema/core/nwb.ophys.yaml
+++ /dev/null
@@ -1,326 +0,0 @@
-groups:
-- neurodata_type_def: TwoPhotonSeries
- neurodata_type_inc: ImageSeries
- doc: Image stack recorded over time from 2-photon microscope.
- attributes:
- - name: pmt_gain
- dtype: float32
- doc: Photomultiplier gain.
- required: false
- - name: scan_line_rate
- dtype: float32
- doc: Lines imaged per second. This is also stored in /general/optophysiology but
- is kept here as it is useful information for analysis, and so good to be stored
- w/ the actual data.
- required: false
- datasets:
- - name: field_of_view
- dtype: float32
- dims:
- - - width|height
- - - width|height|depth
- shape:
- - - 2
- - - 3
- doc: Width, height and depth of image, or imaged area, in meters.
- quantity: '?'
- links:
- - name: imaging_plane
- target_type: ImagingPlane
- doc: Link to ImagingPlane object from which this TimeSeries data was generated.
-
-- neurodata_type_def: RoiResponseSeries
- neurodata_type_inc: TimeSeries
- doc: ROI responses over an imaging plane. The first dimension represents time.
- The second dimension, if present, represents ROIs.
- datasets:
- - name: data
- dtype: numeric
- dims:
- - - num_times
- - - num_times
- - num_ROIs
- shape:
- - - null
- - - null
- - null
- doc: Signals from ROIs.
- - name: rois
- neurodata_type_inc: DynamicTableRegion
- doc: DynamicTableRegion referencing into an ROITable containing information on the ROIs
- stored in this timeseries.
-
-- neurodata_type_def: DfOverF
- neurodata_type_inc: NWBDataInterface
- default_name: DfOverF
- doc: dF/F information about a region of interest (ROI). Storage hierarchy of dF/F
- should be the same as for segmentation (i.e., same names for ROIs and for image
- planes).
- groups:
- - neurodata_type_inc: RoiResponseSeries
- doc: RoiResponseSeries object(s) containing dF/F for a ROI.
- quantity: '+'
-
-- neurodata_type_def: Fluorescence
- neurodata_type_inc: NWBDataInterface
- default_name: Fluorescence
- doc: Fluorescence information about a region of interest (ROI). Storage hierarchy
- of fluorescence should be the same as for segmentation (ie, same names for ROIs
- and for image planes).
- groups:
- - neurodata_type_inc: RoiResponseSeries
- doc: RoiResponseSeries object(s) containing fluorescence data for a ROI.
- quantity: '+'
-
-- neurodata_type_def: ImageSegmentation
- neurodata_type_inc: NWBDataInterface
- default_name: ImageSegmentation
- doc: Stores pixels in an image that represent different regions of interest (ROIs)
- or masks. All segmentation for a given imaging plane is stored together, with
- storage for multiple imaging planes (masks) supported. Each ROI is stored in its
- own subgroup, with the ROI group containing both a 2D mask and a list of pixels
- that make up this mask. Segments can also be used for masking neuropil. If segmentation
- is allowed to change with time, a new imaging plane (or module) is required and
- ROI names should remain consistent between them.
- groups:
- - neurodata_type_inc: PlaneSegmentation
- doc: Results from image segmentation of a specific imaging plane.
- quantity: '+'
-
-- neurodata_type_def: PlaneSegmentation
- neurodata_type_inc: DynamicTable
- doc: Results from image segmentation of a specific imaging plane.
- datasets:
- - name: image_mask
- neurodata_type_inc: VectorData
- dims:
- - - num_roi
- - num_x
- - num_y
- - - num_roi
- - num_x
- - num_y
- - num_z
- shape:
- - - null
- - null
- - null
- - - null
- - null
- - null
- - null
- doc: ROI masks for each ROI. Each image mask is the size of the original imaging
- plane (or volume) and members of the ROI are finite non-zero.
- quantity: '?'
- - name: pixel_mask_index
- neurodata_type_inc: VectorIndex
- doc: Index into pixel_mask.
- quantity: '?'
- - name: pixel_mask
- neurodata_type_inc: VectorData
- dtype:
- - name: x
- dtype: uint32
- doc: Pixel x-coordinate.
- - name: y
- dtype: uint32
- doc: Pixel y-coordinate.
- - name: weight
- dtype: float32
- doc: Weight of the pixel.
- doc: 'Pixel masks for each ROI: a list of indices and weights for the ROI. Pixel
- masks are concatenated and parsing of this dataset is maintained by the PlaneSegmentation'
- quantity: '?'
- - name: voxel_mask_index
- neurodata_type_inc: VectorIndex
- doc: Index into voxel_mask.
- quantity: '?'
- - name: voxel_mask
- neurodata_type_inc: VectorData
- dtype:
- - name: x
- dtype: uint32
- doc: Voxel x-coordinate.
- - name: y
- dtype: uint32
- doc: Voxel y-coordinate.
- - name: z
- dtype: uint32
- doc: Voxel z-coordinate.
- - name: weight
- dtype: float32
- doc: Weight of the voxel.
- doc: 'Voxel masks for each ROI: a list of indices and weights for the ROI. Voxel
- masks are concatenated and parsing of this dataset is maintained by the PlaneSegmentation'
- quantity: '?'
- groups:
- - name: reference_images
- doc: Image stacks that the segmentation masks apply to.
- groups:
- - neurodata_type_inc: ImageSeries
- doc: One or more image stacks that the masks apply to (can be one-element
- stack).
- quantity: '*'
- links:
- - name: imaging_plane
- target_type: ImagingPlane
- doc: Link to ImagingPlane object from which this data was generated.
-
-- neurodata_type_def: ImagingPlane
- neurodata_type_inc: NWBContainer
- doc: An imaging plane and its metadata.
- quantity: '*'
- datasets:
- - name: description
- dtype: text
- doc: Description of the imaging plane.
- quantity: '?'
- - name: excitation_lambda
- dtype: float32
- doc: Excitation wavelength, in nm.
- - name: imaging_rate
- dtype: float32
- doc: Rate that images are acquired, in Hz. If the corresponding TimeSeries is present, the rate should be stored
- there instead.
- quantity: '?'
- - name: indicator
- dtype: text
- doc: Calcium indicator.
- - name: location
- dtype: text
- doc: Location of the imaging plane. Specify the area, layer, comments on estimation
- of area/layer, stereotaxic coordinates if in vivo, etc. Use standard atlas
- names for anatomical regions when possible.
- - name: manifold
- dtype: float32
- dims:
- - - height
- - width
- - x, y, z
- - - height
- - width
- - depth
- - x, y, z
- shape:
- - - null
- - null
- - 3
- - - null
- - null
- - null
- - 3
- doc: "DEPRECATED Physical position of each pixel. 'xyz' represents the position\
- \ of the pixel relative to the defined coordinate space. Deprecated in favor of origin_coords and grid_spacing."
- quantity: '?'
- attributes:
- - name: conversion
- dtype: float32
- default_value: 1.0
- doc: Scalar to multiply each element in data to convert it to the specified 'unit'.
- If the data are stored in acquisition system units or other units
- that require a conversion to be interpretable, multiply the data by 'conversion'
- to convert the data to the specified 'unit'. e.g. if the data acquisition system
- stores values in this object as pixels from x = -500 to 499, y = -500 to 499
- that correspond to a 2 m x 2 m range, then the 'conversion' multiplier to get
- from raw data acquisition pixel units to meters is 2/1000.
- required: false
- - name: unit
- dtype: text
- default_value: meters
- doc: Base unit of measurement for working with the data. The default value is 'meters'.
- required: false
- - name: origin_coords
- dtype: float32
- dims:
- - - x, y
- - - x, y, z
- shape:
- - - 2
- - - 3
- doc: Physical location of the first element of the imaging plane (0, 0) for 2-D data or (0, 0, 0) for 3-D data.
- See also reference_frame for what the physical location is relative to (e.g., bregma).
- quantity: '?'
- attributes:
- - name: unit
- dtype: text
- default_value: meters
- doc: Measurement units for origin_coords. The default value is 'meters'.
- - name: grid_spacing
- dtype: float32
- dims:
- - - x, y
- - - x, y, z
- shape:
- - - 2
- - - 3
- doc: Space between pixels in (x, y) or voxels in (x, y, z) directions, in the specified unit.
- Assumes imaging plane is a regular grid. See also reference_frame to interpret the grid.
- quantity: '?'
- attributes:
- - name: unit
- dtype: text
- default_value: meters
- doc: Measurement units for grid_spacing. The default value is 'meters'.
- - name: reference_frame
- dtype: text
- doc: Describes reference frame of origin_coords and grid_spacing.
- For example, this can be a text description of the anatomical location and orientation of the grid
- defined by origin_coords and grid_spacing or the vectors needed to transform or rotate the grid to
- a common anatomical axis (e.g., AP/DV/ML). This field is necessary to interpret origin_coords and grid_spacing.
- If origin_coords and grid_spacing are not present, then this field is not required.
- For example, if the microscope takes 10 x 10 x 2 images, where the first value of the data matrix
- (index (0, 0, 0)) corresponds to (-1.2, -0.6, -2) mm relative to bregma, the spacing between pixels is 0.2 mm in
- x, 0.2 mm in y and 0.5 mm in z, and larger numbers in x means more anterior, larger numbers in y means more
- rightward, and larger numbers in z means more ventral, then enter the following --
- origin_coords = (-1.2, -0.6, -2)
- grid_spacing = (0.2, 0.2, 0.5)
- reference_frame = "Origin coordinates are relative to bregma. First dimension corresponds to anterior-posterior
- axis (larger index = more anterior). Second dimension corresponds to medial-lateral axis (larger index = more
- rightward). Third dimension corresponds to dorsal-ventral axis (larger index = more ventral)."
- quantity: '?'
- groups:
- - neurodata_type_inc: OpticalChannel
- doc: An optical channel used to record from an imaging plane.
- quantity: '+'
- links:
- - name: device
- target_type: Device
- doc: Link to the Device object that was used to record from this electrode.
-
-- neurodata_type_def: OpticalChannel
- neurodata_type_inc: NWBContainer
- doc: An optical channel used to record from an imaging plane.
- datasets:
- - name: description
- dtype: text
- doc: Description or other notes about the channel.
- - name: emission_lambda
- dtype: float32
- doc: Emission wavelength for channel, in nm.
-
-- neurodata_type_def: MotionCorrection
- neurodata_type_inc: NWBDataInterface
- default_name: MotionCorrection
- doc: 'An image stack where all frames are shifted (registered) to a common coordinate
- system, to account for movement and drift between frames. Note: each frame at
- each point in time is assumed to be 2-D (has only x & y dimensions).'
- groups:
- - neurodata_type_inc: CorrectedImageStack
- doc: Reuslts from motion correction of an image stack.
- quantity: '+'
-
-- neurodata_type_def: CorrectedImageStack
- neurodata_type_inc: NWBDataInterface
- doc: Reuslts from motion correction of an image stack.
- groups:
- - name: corrected
- neurodata_type_inc: ImageSeries
- doc: Image stack with frames shifted to the common coordinates.
- - name: xy_translation
- neurodata_type_inc: TimeSeries
- doc: Stores the x,y delta necessary to align each frame to the common coordinates,
- for example, to align each frame to a reference image.
- links:
- - name: original
- target_type: ImageSeries
- doc: Link to ImageSeries object that is being registered.
diff --git a/nwb-schema/core/nwb.retinotopy.yaml b/nwb-schema/core/nwb.retinotopy.yaml
deleted file mode 100644
index e8972395..00000000
--- a/nwb-schema/core/nwb.retinotopy.yaml
+++ /dev/null
@@ -1,234 +0,0 @@
-groups:
-- neurodata_type_def: ImagingRetinotopy
- neurodata_type_inc: NWBDataInterface
- default_name: ImagingRetinotopy
- doc: 'Intrinsic signal optical imaging or widefield imaging for measuring retinotopy.
- Stores orthogonal maps (e.g., altitude/azimuth; radius/theta) of responses to
- specific stimuli and a combined polarity map from which to identify visual areas.
- This group does not store the raw responses imaged during retinotopic mapping or the
- stimuli presented, but rather the resulting phase and power maps after applying a Fourier
- transform on the averaged responses.
- Note: for data consistency, all images and arrays are stored in the format [row][column]
- and [row, col], which equates to [y][x]. Field of view and dimension arrays may
- appear backward (i.e., y before x).'
- datasets:
- - name: axis_1_phase_map
- dtype: float32
- dims:
- - num_rows
- - num_cols
- shape:
- - null
- - null
- doc: Phase response to stimulus on the first measured axis.
- attributes:
- - name: dimension
- dtype: int32
- dims:
- - num_rows, num_cols
- shape:
- - 2
- doc: 'Number of rows and columns in the image. NOTE: row, column representation
- is equivalent to height, width.'
- - name: field_of_view
- dtype: float32
- dims:
- - height, width
- shape:
- - 2
- doc: Size of viewing area, in meters.
- - name: unit
- dtype: text
- doc: Unit that axis data is stored in (e.g., degrees).
- - name: axis_1_power_map
- dtype: float32
- dims:
- - num_rows
- - num_cols
- shape:
- - null
- - null
- doc: Power response on the first measured axis. Response is scaled so 0.0 is no
- power in the response and 1.0 is maximum relative power.
- quantity: '?'
- attributes:
- - name: dimension
- dtype: int32
- dims:
- - num_rows, num_cols
- shape:
- - 2
- doc: 'Number of rows and columns in the image. NOTE: row, column representation
- is equivalent to height, width.'
- - name: field_of_view
- dtype: float32
- dims:
- - height, width
- shape:
- - 2
- doc: Size of viewing area, in meters.
- - name: unit
- dtype: text
- doc: Unit that axis data is stored in (e.g., degrees).
- - name: axis_2_phase_map
- dtype: float32
- dims:
- - num_rows
- - num_cols
- shape:
- - null
- - null
- doc: Phase response to stimulus on the second measured axis.
- attributes:
- - name: dimension
- dtype: int32
- dims:
- - num_rows, num_cols
- shape:
- - 2
- doc: 'Number of rows and columns in the image. NOTE: row, column representation
- is equivalent to height, width.'
- - name: field_of_view
- dtype: float32
- dims:
- - height, width
- shape:
- - 2
- doc: Size of viewing area, in meters.
- - name: unit
- dtype: text
- doc: Unit that axis data is stored in (e.g., degrees).
- - name: axis_2_power_map
- dtype: float32
- dims:
- - num_rows
- - num_cols
- shape:
- - null
- - null
- doc: Power response on the second measured axis. Response is scaled so 0.0 is
- no power in the response and 1.0 is maximum relative power.
- quantity: '?'
- attributes:
- - name: dimension
- dtype: int32
- dims:
- - num_rows, num_cols
- shape:
- - 2
- doc: 'Number of rows and columns in the image. NOTE: row, column representation
- is equivalent to height, width.'
- - name: field_of_view
- dtype: float32
- dims:
- - height, width
- shape:
- - 2
- doc: Size of viewing area, in meters.
- - name: unit
- dtype: text
- doc: Unit that axis data is stored in (e.g., degrees).
- - name: axis_descriptions
- dtype: text
- dims:
- - axis_1, axis_2
- shape:
- - 2
- doc: Two-element array describing the contents of the two response axis fields.
- Description should be something like ['altitude', 'azimuth'] or '['radius',
- 'theta'].
- - name: focal_depth_image
- dtype: uint16
- dims:
- - num_rows
- - num_cols
- shape:
- - null
- - null
- doc: 'Gray-scale image taken with same settings/parameters (e.g., focal depth,
- wavelength) as data collection. Array format: [rows][columns].'
- quantity: '?'
- attributes:
- - name: bits_per_pixel
- dtype: int32
- doc: Number of bits used to represent each value. This is necessary to determine
- maximum (white) pixel value.
- - name: dimension
- dtype: int32
- dims:
- - num_rows, num_cols
- shape:
- - 2
- doc: 'Number of rows and columns in the image. NOTE: row, column representation
- is equivalent to height, width.'
- - name: field_of_view
- dtype: float32
- dims:
- - height, width
- shape:
- - 2
- doc: Size of viewing area, in meters.
- - name: focal_depth
- dtype: float32
- doc: Focal depth offset, in meters.
- - name: format
- dtype: text
- doc: Format of image. Right now only 'raw' is supported.
- - name: sign_map
- dtype: float32
- dims:
- - num_rows
- - num_cols
- shape:
- - null
- - null
- doc: Sine of the angle between the direction of the gradient in axis_1 and axis_2.
- quantity: '?'
- attributes:
- - name: dimension
- dtype: int32
- dims:
- - num_rows, num_cols
- shape:
- - 2
- doc: 'Number of rows and columns in the image. NOTE: row, column representation
- is equivalent to height, width.'
- - name: field_of_view
- dtype: float32
- dims:
- - height, width
- shape:
- - 2
- doc: Size of viewing area, in meters.
- - name: vasculature_image
- dtype: uint16
- dims:
- - num_rows
- - num_cols
- shape:
- - null
- - null
- doc: 'Gray-scale anatomical image of cortical surface. Array structure: [rows][columns]'
- attributes:
- - name: bits_per_pixel
- dtype: int32
- doc: Number of bits used to represent each value. This is necessary to determine
- maximum (white) pixel value
- - name: dimension
- dtype: int32
- dims:
- - num_rows, num_cols
- shape:
- - 2
- doc: 'Number of rows and columns in the image. NOTE: row, column representation
- is equivalent to height, width.'
- - name: field_of_view
- dtype: float32
- dims:
- - height, width
- shape:
- - 2
- doc: Size of viewing area, in meters.
- - name: format
- dtype: text
- doc: Format of image. Right now only 'raw' is supported.
diff --git a/nwb-schema/hdmf-common-schema/common/namespace.yaml b/nwb-schema/hdmf-common-schema/common/namespace.yaml
deleted file mode 100644
index 42df23e4..00000000
--- a/nwb-schema/hdmf-common-schema/common/namespace.yaml
+++ /dev/null
@@ -1,21 +0,0 @@
-namespaces:
-- name: hdmf-common
- doc: Common data structures provided by HDMF
- author:
- - Andrew Tritt
- - Oliver Ruebel
- - Ryan Ly
- - Ben Dichter
- contact:
- - ajtritt@lbl.gov
- - oruebel@lbl.gov
- - rly@lbl.gov
- - bdichter@lbl.gov
- full_name: HDMF Common
- schema:
- - doc: data types for a column-based table
- source: table.yaml
- title: Table data types
- - doc: data types for different types of sparse matrices
- source: sparse.yaml
- version: 1.1.3
diff --git a/nwb-schema/hdmf-common-schema/common/sparse.yaml b/nwb-schema/hdmf-common-schema/common/sparse.yaml
deleted file mode 100644
index 49f9a526..00000000
--- a/nwb-schema/hdmf-common-schema/common/sparse.yaml
+++ /dev/null
@@ -1,24 +0,0 @@
-groups:
-- data_type_def: CSRMatrix
- doc: a compressed sparse row matrix
- attributes:
- - name: shape
- dtype: int
- shape:
- - 2
- doc: the shape of this sparse matrix
- datasets:
- - name: indices
- dtype: int
- shape:
- - null
- doc: column indices
- - name: indptr
- dtype: int
- shape:
- - null
- doc: index pointer
- - name: data
- shape:
- - null
- doc: values in the matrix
diff --git a/nwb-schema/hdmf-common-schema/common/table.yaml b/nwb-schema/hdmf-common-schema/common/table.yaml
deleted file mode 100644
index 9ed2ff0e..00000000
--- a/nwb-schema/hdmf-common-schema/common/table.yaml
+++ /dev/null
@@ -1,155 +0,0 @@
-datasets:
-- data_type_def: Data
- doc: An abstract data type for a dataset.
-
-- data_type_def: Index
- data_type_inc: Data
- doc: Pointers that index data values.
- attributes:
- - name: target
- dtype:
- target_type: Data
- reftype: object
- doc: Target dataset that this index applies to.
-
-- data_type_def: VectorData
- data_type_inc: Data
- doc: An n-dimensional dataset representing a column of a DynamicTable.
- If used without an accompanying VectorIndex, first dimension is
- along the rows of the DynamicTable and each step along the first
- dimension is a cell of the larger table. VectorData can also be
- used to represent a ragged array if paired with a VectorIndex.
- This allows for storing arrays of varying length in a single cell
- of the DynamicTable by indexing into this VectorData. The first
- vector is at VectorData[0:VectorIndex(0)+1]. The second vector is at
- VectorData[VectorIndex(0)+1:VectorIndex(1)+1], and so on.
- dims:
- - - dim0
- - - dim0
- - dim1
- - - dim0
- - dim1
- - dim2
- - - dim0
- - dim1
- - dim2
- - dim3
- shape:
- - - null
- - - null
- - null
- - - null
- - null
- - null
- - - null
- - null
- - null
- - null
- attributes:
- - name: description
- dtype: text
- doc: Description of what these vectors represent.
-
-- data_type_def: VectorIndex
- data_type_inc: Index
- doc: Used with VectorData to encode a ragged array. An array of indices
- into the first dimension of the target VectorData, and forming a map
- between the rows of a DynamicTable and the indices of the VectorData.
- dims:
- - num_rows
- shape:
- - null
- attributes:
- - name: target
- dtype:
- target_type: VectorData
- reftype: object
- doc: Reference to the target dataset that this index applies to.
-
-- data_type_def: ElementIdentifiers
- data_type_inc: Data
- default_name: element_id
- dtype: int
- dims:
- - num_elements
- shape:
- - null
- doc: A list of unique identifiers for values within a dataset, e.g. rows of a DynamicTable.
-
-- data_type_def: DynamicTableRegion
- data_type_inc: VectorData
- dtype: int
- doc: DynamicTableRegion provides a link from one table to an index or region of another. The `table` attribute is a
- link to another `DynamicTable`, indicating which table is referenced, and the data is int(s) indicating the row(s)
- (0-indexed) of the target array. `DynamicTableRegion`s can be used to associate rows with repeated meta-data without
- data duplication. They can also be used to create hierarchical relationships between multiple `DynamicTable`s.
- `DynamicTableRegion` objects may be paired with a `VectorIndex` object to create ragged references, so a single cell
- of a `DynamicTable` can reference many rows of another `DynamicTable`.
- dims:
- - num_rows
- shape:
- - null
- attributes:
- - name: table
- dtype:
- target_type: DynamicTable
- reftype: object
- doc: Reference to the DynamicTable object that this region applies to.
- - name: description
- dtype: text
- doc: Description of what this table region points to.
-
-groups:
-- data_type_def: Container
- doc: An abstract data type for a generic container storing collections of data and
- metadata. Base type for all data and metadata containers.
-
-- data_type_def: DynamicTable
- data_type_inc: Container
- doc: A group containing multiple datasets that are aligned on the first dimension
- (Currently, this requirement if left up to APIs to check and enforce). Apart from
- a column that contains unique identifiers for each row there are no other required
- datasets. Users are free to add any number of VectorData objects here. Table functionality
- is already supported through compound types, which is analogous to storing an
- array-of-structs. DynamicTable can be thought of as a struct-of-arrays. This provides
- an alternative structure to choose from when optimizing storage for anticipated
- access patterns. Additionally, this type provides a way of creating a table without
- having to define a compound type up front. Although this convenience may be attractive,
- users should think carefully about how data will be accessed. DynamicTable is
- more appropriate for column-centric access, whereas a dataset with a compound
- type would be more appropriate for row-centric access. Finally, data size should
- also be taken into account. For small tables, performance loss may be an acceptable
- trade-off for the flexibility of a DynamicTable. For example, DynamicTable was
- originally developed for storing trial data and spike unit metadata. Both of these
- use cases are expected to produce relatively small tables, so the spatial locality
- of multiple datasets present in a DynamicTable is not expected to have a significant
- performance impact. Additionally, requirements of trial and unit metadata tables
- are sufficiently diverse that performance implications can be overlooked in favor
- of usability.
- attributes:
- - name: colnames
- dtype: text
- dims:
- - num_columns
- shape:
- - null
- doc: The names of the columns in this table. This should be used to specify
- an order to the columns.
- - name: description
- dtype: text
- doc: Description of what is in this dynamic table.
- datasets:
- - name: id
- data_type_inc: ElementIdentifiers
- dtype: int
- dims:
- - num_rows
- shape:
- - null
- doc: Array of unique identifiers for the rows of this dynamic table.
- - data_type_inc: VectorData
- doc: Vector columns of this dynamic table.
- quantity: '*'
- - data_type_inc: VectorIndex
- doc: Indices for the vector columns of this dynamic table.
- quantity: '*'
diff --git a/nwbRead.m b/nwbRead.m
index fccb847e..975ea24b 100644
--- a/nwbRead.m
+++ b/nwbRead.m
@@ -1,19 +1,18 @@
function nwb = nwbRead(filename, varargin)
%NWBREAD Reads an NWB file.
-% nwb = nwbRead(filename) Reads the nwb file at filename and returns an
+% nwb = NWBREAD(filename) Reads the nwb file at filename and returns an
% NWBFile object representing its contents.
% nwb = nwbRead(filename, 'ignorecache') Reads the nwb file without generating classes
% off of the cached schema if one exists.
%
+% nwb = NWBREAD(filename, options)
+%
% Requires that core and extension NWB types have been generated
% and reside in a 'types' package on the matlab path.
%
% Example:
-% %Generate Matlab code for the NWB objects from the core schema.
-% %This only needs to be done once.
-% generateCore('schema\core\nwb.namespace.yaml');
-% %Now we can read nwb files!
-% nwb=nwbRead('data.nwb');
+% nwb = nwbRead('data.nwb');
+% nwb = nwbRead('data.nwb',
%
% See also GENERATECORE, GENERATEEXTENSION, NWBFILE, NWBEXPORT
ignoreCache = ~isempty(varargin) && ischar(varargin{1}) &&...
@@ -35,25 +34,27 @@
function specLocation = checkEmbeddedSpec(filename)
specLocation = '';
+fid = H5F.open(filename);
try
%check for .specloc
- fid = H5F.open(filename);
attributeId = H5A.open(fid, '.specloc');
referenceRawData = H5A.read(attributeId);
specLocation = H5R.get_name(attributeId, 'H5R_OBJECT', referenceRawData);
- generateSpec(fid, h5info(filename, specLocation));
- rehash(); %required if we want parseGroup to read the right files.
H5A.close(attributeId);
- H5F.close(fid);
+ generateSpec(fid, h5info(filename, specLocation));
catch ME
if ~strcmp(ME.identifier, 'MATLAB:imagesci:hdf5lib:libraryError')
rethrow(ME);
end
- warning('MatNWB:NWBRead:NoSpec',...
- ['No embedded specification found. Ensure your environment is accurate to what '...
- 'is stored in this NWB file.'...
- '\nTo disable this warning run: `warning(''off'', ''MatNWB:NWBRead:NoSpec'')`']);
+
+ attributeId = H5A.open(fid, 'nwb_version');
+ version = H5A.read(attributeId);
+ H5A.close(attributeId);
+
+ generateCore(version);
end
+rehash(); % required if we want parseGroup to read the right files.
+H5F.close(fid);
end
function generateSpec(fid, specinfo)