NWB version 2

Recent NWB (version 2) schema specifications are tracked in a separate repository. The schema is implemented in version 2.2.0 (62c73400565afc28f67ede4f2e86023c33167cf8).

The complete schema tree is described in a hdmf compatible format and replicated in this repository under namespace/{schema}/{yaml,json}/*. The JSON files are stored in the nwb file upon storage. A build script exists to generate the JSON files from their YAML files: update_specifications.sh.

The following deviations from NWB schema 2.2.0 were recorded:

 991ab801aae626710a8ec710869bb1b4508e91b7 ndx-MIES (heads/first-steps)
 24fba6174ddbad171ee5bb824edfa31f86b1b16d specifications (2.2.4)

# diff namespace core upstream vs IPNWB specifications for nwb.base
# diff namespace core upstream vs IPNWB specifications for nwb.behavior
# diff namespace core upstream vs IPNWB specifications for nwb.device
# diff namespace core upstream vs IPNWB specifications for nwb.ecephys
# diff namespace core upstream vs IPNWB specifications for nwb.epoch
# diff namespace core upstream vs IPNWB specifications for nwb.file
# diff namespace core upstream vs IPNWB specifications for nwb.icephys
# diff namespace core upstream vs IPNWB specifications for nwb.image
# diff namespace core upstream vs IPNWB specifications for nwb.misc
# diff namespace core upstream vs IPNWB specifications for nwb.namespace
2,4c2
< - name: core
<   doc: NWB namespace
<   author:
---
> - author:
17a16
>   doc: NWB namespace
18a18
>   name: core
23c23
<     source: nwb.base.yaml
---
>     source: nwb.base
26c26
<     source: nwb.device.yaml
---
>     source: nwb.device
29c29
<     source: nwb.epoch.yaml
---
>     source: nwb.epoch
32c32
<     source: nwb.image.yaml
---
>     source: nwb.image
35c35
<     source: nwb.file.yaml
---
>     source: nwb.file
38c38
<     source: nwb.misc.yaml
---
>     source: nwb.misc
41c41
<     source: nwb.behavior.yaml
---
>     source: nwb.behavior
45c45
<     source: nwb.ecephys.yaml
---
>     source: nwb.ecephys
49c49
<     source: nwb.icephys.yaml
---
>     source: nwb.icephys
52c52
<     source: nwb.ogen.yaml
---
>     source: nwb.ogen
55c55
<     source: nwb.ophys.yaml
---
>     source: nwb.ophys
58c58
<     source: nwb.retinotopy.yaml
---
>     source: nwb.retinotopy
# diff namespace core upstream vs IPNWB specifications for nwb.ogen
# diff namespace core upstream vs IPNWB specifications for nwb.ophys
# diff namespace core upstream vs IPNWB specifications for nwb.retinotopy
# diff namespace hdmf-common upstream vs IPNWB specifications for namespace
2,4c2
< - name: hdmf-common
<   doc: Common data structures provided by HDMF
<   author:
---
> - author:
13a12
>   doc: Common data structures provided by HDMF
14a14
>   name: hdmf-common
17c17
<     source: table.yaml
---
>     source: table
20c20
<     source: sparse.yaml
---
>     source: sparse
# diff namespace hdmf-common upstream vs IPNWB specifications for sparse
# diff namespace hdmf-common upstream vs IPNWB specifications for table
# diff namespace ndx-mies upstream vs IPNWB specifications for namespace
# diff namespace ndx-mies upstream vs IPNWB specifications for ndx-mies.extensions

The most important core properties are for intracellular ephys.

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.

The includes a Dynamic Table at /general/intracellular_ephys/sweep_table to store the sweep numbers of a list of data sets. The table is column centric and consists of the two columns sweep_number and series. Series contains links to datasets. The sweep_number for a dataset is stored under the same row index, specified either by the Dataset id (zero-based indices) or by series_index (one-based indices). The sweep_table is intended to easily find datasets that belong to a given sweep number. A sweep table is loaded by LoadSweepTable and created using AppendToSweepTable