Objects and data model

Electrophysiology

The overall data model for electrophysiology looks like this:

../_images/ephys_om.png

Every object in this context has a set of attributes and data fields, it may also have relationships, like parents and children. For example, a Segment has to have an attribute ‘name’. AnalogSignal should have a ‘sampling_rate’ data field, which consists of the unit (like Hz or KHz) and a value (like 20000). A Block consists of Segment objects, which means the Block has a child Segment, and a Segment has a parent Block. Below for each object you can find its definition, as well as the detailed listing of its attributes and relationships.

Note. Some attributes have units. Here is the list of available units values:

  • in the time domain: * “s”, “ms”, “us”
  • in the signal domain: * “V”, “mV”, “uV”
  • in the signal sampling domain: * “Hz”, “KHz”, “MHz”, “1/s”

Note. Attributes with * asterisk are mandatory.

ePhys Objects consist of:

AnalogSignal

A regular sampling of a continuous, analog signal.
Parameter Type
name* string
sampling_rate* float + units
t_start* float + units
signal* array of floats 1D + units
segment foreign key to Segment
recordingchannel foreign key to RecordingChannel

See exact JSON object representation in JSON DATA API.

IrSaAnalogSignal

An analog signal with non-regular sampling.
Parameter Type
name* string
t_start* float + units
signal* array of floats 1D + units
times* array of floats 1D + units
segment foreign key to Segment
recordingchannel foreign key to RecordingChannel

See exact JSON object representation in JSON DATA API.

AnalogSignalArray

A regular sampling of a multichannel continuous analog signal. This representation (as a 2D array) may be more efficient for subsequent analysis than the equivalent list of individual AnalogSignal objects.
Parameter Type
t_start* float + units
sampling_rate* float + units
signal* array of floats 2D + units
segment foreign key to Segment
recordingchannelgroup foreign key to RecordingChannelGroup

See exact JSON object representation in JSON DATA API.

Spike

One action potential characterized by its time and waveform.
Parameter Type
time* float + units
sampling_rate* float + units
left_sweep float + units
waveform* array of floats 2D + units
segment foreign key to Segment
unit foreign key to Unit

See exact JSON object representation in JSON DATA API.

SpikeTrain

A set of action potentials (spikes) emitted by the same unit in a period of time (with optional waveforms).
Parameter Type
t_start* float + units
t_stop* float + units
times* array of floats 1D + units
waveforms array of floats 3D + units
segment foreign key to Segment
unit foreign key to Unit

See exact JSON object representation in JSON DATA API.

Event and EventArray

A time point representng an event in the data, or an array of such time points.
Parameter Type
label(s)* string/array of strings 1D
time(s)* float/array of floats 1D + units
segment foreign key to Segment

See exact JSON object representation in JSON DATA API.

Epoch and EpochArray

An interval of time representing a period of time in the data, or an array of such intervals.
Parameter Type
label(s)* string/array of strings 1D
time(s)* float/array of floats 1D + units
duration(s)* float/array of floats 1D + units
segment foreign key to Segment

See exact JSON object representation in JSON DATA API.

ePhys Objects comprise a simple hierarchy of containers:

Segment

A container for heterogeneous discrete or continous data sharing a common clock (time basis) but not necessarily the same sampling rate, start time or end time. A Segment can be considered as equivalent to a “trial”, “episode”, “run”, “recording”, etc., depending on the experimental context. May contain any of the ePhys Objects.
Parameter Type
name* string
filedatetime datetime
index int
block foreign key to Block
Segment can contain objects of the following types:

See exact JSON object representation in JSON DATA API.

Block

The top-level container gathering all of the data, discrete and continuous, for a given recording session. Contains Segment and RecordingChannelGroup objects.
Parameter Type
name* string
filedatetime datetime
index int
section foreign key to Section
Block can contain objects of the following types:

See exact JSON object representation in JSON DATA API.

ePhys Objects also include Grouping objects. These objects express the relationships between data items, such as which signals were recorded on which electrodes, which spike trains were obtained from which membrane potential signals, etc. They contain references to data objects that cut across the simple container hierarchy.

RecordingChannel

Links AnalogSignal and/or SpikeTrain objects that come from the same logical and/or physical channel inside a Block, possibly across several Segment objects.
Parameter Type
name* string
index int
recordingchannelgroup foreign key to RecordingChannelGroup
RecordingChannel can contain objects of the following types:

See exact JSON object representation in JSON DATA API.

RecordingChannelGroup

A group for associated RecordingChannel objects. This has several possible uses: for linking several AnalogSignalArray objects across several Segment objects inside a Block, for multielectrode arrays, where spikes may be recorded on more than one recording channel, and so the RecordingChannelGroup can be used to associate each Unit with the group of recording channels from which it was calculated, as well as for grouping several RecordingChannel objects. There are many use cases for this. For instance, for intracellular recording, it is common to record both membrane potentials and currents at the same time, so each RecordingChannelGroup may correspond to the particular property that is being recorded. For multielectrode arrays, RecordingChannelGroup is used to gather all RecordingChannel objects of the same array.
Parameter Type
name* string
block foreign key to Block
RecordingChannelGroup can contain objects of the following types:

See exact JSON object representation in JSON DATA API.

Unit

A Unit gathers all the SpikeTrain objects within a common Block, possibly across several Segments, that have been emitted by the same cell. A Unit is linked to RecordingChannelGroup objects from which it was detected.
Parameter Type
name* string
recordingchannel foreign key to RecordingChannel
Unit can contain objects of the following types:

See exact JSON object representation in JSON DATA API.

Metadata

The general metadata object model looks like:

../_images/metadata_om.png

it is implemented inline with odML concept and consists of objects like Section, Properties with Values. Here goes the complete metadata objects specification.

Section

An element used to group and organize your metadata in a tree structure. Intuitively it’s like a folder in a usual file system. A Section can contain other Sections, Properties with Values, Datafile or Block. The Section is a prototype of the odML® section and is implemented inline with odML concepts and methodology.
Parameter Type
name* string
description string
odml_type int (0-99)
tree_position int
parent_section foreign key to Section
Section can contain objects of the following types:

See exact JSON object representation in JSON DATA API.

Properties and Values

Inspired by the “key-value pairs” concept, Properties and Values used similarly as a flexible way to annotate your data (implemented in line with odML) within any metadata Section. Some good examples could be a model of your recording device, duration of the stimulus, a layer of the cell you’ve recorded from. Properties and Values can be used to “label” your ePhys Objects (AnalogSignal, SpikeTrain etc.) to indicate certain metadata for them.

Property:

Parameter Type
name* string
definition string
dependency string
dependency_value string
mapping string
unit string
dtype string
uncertainty string
comment string
section* foreign key to Section

Property can contain one or several value objects:

Value:

Parameter Type
data* string
parent_property* foreign key to Section

See exact JSON object representation in JSON DATA API.

Files

Datafile

Datafile represents an arbitrary file, uploaded by a user. Some data or metadata can be extracted from the Datafile if it is in one of the supported formats (NEO I/O, Neuroshare, odML). All data-related objects, like AnalogSignal or Spike, have their data part also stored as HDF5 files (what is HDF5?), having array in the file root.
Parameter Type
name* string
caption string
section* foreign key to Section

The system supports data conversion from files to the ePhys and Metadata objects, listed above, if the Datafile is compartible with supported formats (see Datafile above).

Full model overview

Just to summarize this document, the data model for the whole system looks like:

../_images/common_om.png