Physiological data alongside neuroimaging data
This guide explains how to create BIDS-compliant physiological recordings (*_physio.tsv.gz
+ *_physio.json
) together with neural recordings following the BIDS specification.
1. Create the TSV file (compressed)
- Save your physio data as a tab-separated values file.
- Do not include a header line.
- Each row = one time point
- each column = one channel (pulse, respiration, trigger, etc.).
- Compress the file with
gzip
:
gzip sub-01_task-rest_physio.tsv
2. Create the JSON sidecar (required fields)
Each *_physio.tsv.gz
must have a matching *_physio.json
with:
- SamplingFrequency: sampling frequency in Hz
- StartTime: time (s) relative to acquisition start (can be negative). Please make sure you align the physio recordings to the timings of the neural recording.
- Columns: array listing column names in order
{
"SamplingFrequency": 100.0,
"StartTime": -22.345,
"Columns": ["cardiac", "respiratory", "trigger"]
}
3. Add descriptions and units for each column
Example of a full *_physio.json
:
{
"SamplingFrequency": 100.0,
"StartTime": -22.345,
"Columns": ["cardiac", "respiratory", "trigger"],
"cardiac": {
"Description": "continuous pulse measurement",
"Units": "mV"
},
"respiratory": {
"Description": "respiration belt signal",
"Units": "mV"
},
"trigger": {
"Description": "scanner trigger signal",
"Units": "a.u."
}
}
4. Handle multiple sampling frequencies or recording devices
Note
This applies in case channels were acquired at different sampling rates or with different devices.
- Split them into separate files
- Distinguish with
_recording-<label>
in the filename
sub-01_task-rest_recording-cardiac_physio.tsv.gz
sub-01_task-rest_recording-respiratory_physio.tsv.gz
5. Place your files in the correct folder
Use the same structure as your imaging data:
sub-<label>/ses-<label>/<datatype>/
<matches>[_recording-<label>]_physio.tsv.gz
<matches>[_recording-<label>]_physio.json
<datatype>
:func
,anat
,meg
,eeg
,ieeg
,dwi
,beh
, etc.<matches>
: filename part matching the imaging file (e.g.,sub-01_task-rest_run-1
).- when to use the
[_recording-<label>]
you can find in section 4.