nwb-linkml/nwb_linkml/schema/core.nwb.ecephys.yaml

501 lines
17 KiB
YAML

name: core.nwb.ecephys
id: core.nwb.ecephys
imports:
- core.nwb.base
- hdmf-common.table
- core.nwb.device
- nwb.language
default_prefix: core.nwb.ecephys/
classes:
ElectricalSeries:
name: ElectricalSeries
description: 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.
is_a: TimeSeries
attributes:
name:
name: name
range: string
required: true
filtering:
name: filtering
description: Filtering applied to all channels of the data. For example, if
this ElectricalSeries represents high-pass-filtered data (also known as
AP Band), then this value could be "High-pass 4-pole Bessel filter at 500
Hz". If this ElectricalSeries represents low-pass-filtered LFP data and
the type of filter is unknown, then this value could be "Low-pass filter
at 300 Hz". If a non-standard filter type is used, provide as much detail
about the filter properties as possible.
range: text
data:
name: data
description: Recorded voltage data.
multivalued: false
range: ElectricalSeries__data
required: true
electrodes:
name: electrodes
description: DynamicTableRegion pointer to the electrodes that this time series
was generated from.
multivalued: false
range: ElectricalSeries__electrodes
required: true
channel_conversion:
name: channel_conversion
description: 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.
multivalued: true
range: float32
required: false
tree_root: true
ElectricalSeries__data:
name: ElectricalSeries__data
description: Recorded voltage data.
attributes:
name:
name: name
ifabsent: string(data)
range: string
required: true
equals_string: data
unit:
name: unit
description: 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',
followed by 'channel_conversion' (if present), and then add 'offset'.
range: text
array:
name: array
range: ElectricalSeries__data__Array
ElectricalSeries__data__Array:
name: ElectricalSeries__data__Array
is_a: Arraylike
attributes:
num_times:
name: num_times
range: numeric
required: true
num_channels:
name: num_channels
range: numeric
required: false
num_samples:
name: num_samples
range: numeric
required: false
ElectricalSeries__electrodes:
name: ElectricalSeries__electrodes
description: DynamicTableRegion pointer to the electrodes that this time series
was generated from.
is_a: DynamicTableRegion
attributes:
name:
name: name
ifabsent: string(electrodes)
range: string
required: true
equals_string: electrodes
SpikeEventSeries:
name: SpikeEventSeries
description: '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).'
is_a: ElectricalSeries
attributes:
name:
name: name
range: string
required: true
data:
name: data
description: Spike waveforms.
multivalued: false
range: SpikeEventSeries__data
required: true
timestamps:
name: timestamps
description: 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.
multivalued: true
range: float64
required: true
tree_root: true
SpikeEventSeries__data:
name: SpikeEventSeries__data
description: Spike waveforms.
attributes:
name:
name: name
ifabsent: string(data)
range: string
required: true
equals_string: data
unit:
name: unit
description: Unit of measurement for waveforms, which is fixed to 'volts'.
range: text
array:
name: array
range: SpikeEventSeries__data__Array
SpikeEventSeries__data__Array:
name: SpikeEventSeries__data__Array
is_a: Arraylike
attributes:
num_events:
name: num_events
range: numeric
required: true
num_samples:
name: num_samples
range: numeric
required: true
num_channels:
name: num_channels
range: numeric
required: false
FeatureExtraction:
name: FeatureExtraction
description: Features, such as PC1 and PC2, that are extracted from signals stored
in a SpikeEventSeries or other source.
is_a: NWBDataInterface
attributes:
name:
name: name
range: string
required: true
description:
name: description
description: Description of features (eg, ''PC1'') for each of the extracted
features.
multivalued: true
range: text
required: true
features:
name: features
description: Multi-dimensional array of features extracted from each event.
multivalued: false
range: FeatureExtraction__features
required: true
times:
name: times
description: Times of events that features correspond to (can be a link).
multivalued: true
range: float64
required: true
electrodes:
name: electrodes
description: DynamicTableRegion pointer to the electrodes that this time series
was generated from.
multivalued: false
range: FeatureExtraction__electrodes
required: true
tree_root: true
FeatureExtraction__features:
name: FeatureExtraction__features
description: Multi-dimensional array of features extracted from each event.
attributes:
name:
name: name
ifabsent: string(features)
range: string
required: true
equals_string: features
array:
name: array
range: FeatureExtraction__features__Array
FeatureExtraction__features__Array:
name: FeatureExtraction__features__Array
is_a: Arraylike
attributes:
num_events:
name: num_events
range: float32
required: true
num_channels:
name: num_channels
range: float32
required: true
num_features:
name: num_features
range: float32
required: true
FeatureExtraction__electrodes:
name: FeatureExtraction__electrodes
description: DynamicTableRegion pointer to the electrodes that this time series
was generated from.
is_a: DynamicTableRegion
attributes:
name:
name: name
ifabsent: string(electrodes)
range: string
required: true
equals_string: electrodes
EventDetection:
name: EventDetection
description: Detected spike events from voltage trace(s).
is_a: NWBDataInterface
attributes:
name:
name: name
range: string
required: true
detection_method:
name: detection_method
description: Description of how events were detected, such as voltage threshold,
or dV/dT threshold, as well as relevant values.
multivalued: false
range: text
required: true
source_idx:
name: source_idx
description: 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.
multivalued: true
range: int32
required: true
times:
name: times
description: Timestamps of events, in seconds.
multivalued: true
range: float64
required: true
tree_root: true
EventWaveform:
name: EventWaveform
description: 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.
is_a: NWBDataInterface
attributes:
name:
name: name
range: string
required: true
spike_event_series:
name: spike_event_series
description: SpikeEventSeries object(s) containing detected spike event waveforms.
multivalued: true
range: SpikeEventSeries
required: false
tree_root: true
FilteredEphys:
name: FilteredEphys
description: 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 'filtering' attribute.
is_a: NWBDataInterface
attributes:
name:
name: name
range: string
required: true
electrical_series:
name: electrical_series
description: ElectricalSeries object(s) containing filtered electrophysiology
data.
multivalued: true
range: ElectricalSeries
required: true
tree_root: true
LFP:
name: LFP
description: 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 'filtering' attribute.
is_a: NWBDataInterface
attributes:
name:
name: name
range: string
required: true
electrical_series:
name: electrical_series
description: ElectricalSeries object(s) containing LFP data for one or more
channels.
multivalued: true
range: ElectricalSeries
required: true
tree_root: true
ElectrodeGroup:
name: ElectrodeGroup
description: A physical grouping of electrodes, e.g. a shank of an array.
is_a: NWBContainer
attributes:
name:
name: name
range: string
required: true
description:
name: description
description: Description of this electrode group.
range: text
location:
name: location
description: Location of electrode group. Specify the area, layer, comments
on estimation of area/layer, etc. Use standard atlas names for anatomical
regions when possible.
range: text
position:
name: position
description: stereotaxic or common framework coordinates
multivalued: false
range: AnyType
required: false
tree_root: true
ClusterWaveforms:
name: ClusterWaveforms
description: 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.
is_a: NWBDataInterface
attributes:
name:
name: name
range: string
required: true
waveform_filtering:
name: waveform_filtering
description: Filtering applied to data before generating mean/sd
multivalued: false
range: text
required: true
waveform_mean:
name: waveform_mean
description: 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)
multivalued: false
range: ClusterWaveforms__waveform_mean
required: true
waveform_sd:
name: waveform_sd
description: Stdev of waveforms for each cluster, using the same indices as
in mean
multivalued: false
range: ClusterWaveforms__waveform_sd
required: true
tree_root: true
ClusterWaveforms__waveform_mean:
name: ClusterWaveforms__waveform_mean
description: 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)
attributes:
name:
name: name
ifabsent: string(waveform_mean)
range: string
required: true
equals_string: waveform_mean
array:
name: array
range: ClusterWaveforms__waveform_mean__Array
ClusterWaveforms__waveform_mean__Array:
name: ClusterWaveforms__waveform_mean__Array
is_a: Arraylike
attributes:
num_clusters:
name: num_clusters
range: float32
required: true
num_samples:
name: num_samples
range: float32
required: true
ClusterWaveforms__waveform_sd:
name: ClusterWaveforms__waveform_sd
description: Stdev of waveforms for each cluster, using the same indices as in
mean
attributes:
name:
name: name
ifabsent: string(waveform_sd)
range: string
required: true
equals_string: waveform_sd
array:
name: array
range: ClusterWaveforms__waveform_sd__Array
ClusterWaveforms__waveform_sd__Array:
name: ClusterWaveforms__waveform_sd__Array
is_a: Arraylike
attributes:
num_clusters:
name: num_clusters
range: float32
required: true
num_samples:
name: num_samples
range: float32
required: true
Clustering:
name: Clustering
description: DEPRECATED Clustered spike data, whether from automatic clustering
tools (e.g., klustakwik) or as a result of manual sorting.
is_a: NWBDataInterface
attributes:
name:
name: name
range: string
required: true
description:
name: description
description: Description of clusters or clustering, (e.g. cluster 0 is noise,
clusters curated using Klusters, etc)
multivalued: false
range: text
required: true
num:
name: num
description: Cluster number of each event
multivalued: true
range: int32
required: true
peak_over_rms:
name: peak_over_rms
description: Maximum ratio of waveform peak to RMS on any channel in the cluster
(provides a basic clustering metric).
multivalued: true
range: float32
required: true
times:
name: times
description: Times of clustered events, in seconds. This may be a link to
times field in associated FeatureExtraction module.
multivalued: true
range: float64
required: true
tree_root: true