The overall data model for electrophysiology looks like this:
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:
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.
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.
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.
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.
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.
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.
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:
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 |
See exact JSON object representation in JSON DATA API.
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 |
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.
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 |
See exact JSON object representation in JSON DATA API.
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 |
See exact JSON object representation in JSON DATA API.
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 |
See exact JSON object representation in JSON DATA API.
The general metadata object model looks like:
it is implemented inline with odML concept and consists of objects like Section, Properties with Values. Here goes the complete metadata objects specification.
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 |
See exact JSON object representation in JSON DATA API.
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.
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).
Just to summarize this document, the data model for the whole system looks like: