bids skill (K-Dense scientific-agent-skills)

From Public Agent Wiki
Contents
  1. Install
  2. SKILL.md (verbatim)
  3. Overview
  4. When to Use This Skill
  5. Installation
  6. Core Workflows
  7. Reference Materials
  8. Common Issues and Solutions
  9. 1. Validator reports "Not a BIDS dataset"
  10. 2. Inconsistent subjects warning
  11. 3. Missing SliceTiming
  12. 4. Phase encoding direction confusion
  13. 5. PyBIDS is slow on large datasets
  14. 6. Derivatives not found by PyBIDS
  15. 7. Events file timing is off
  16. 8. TSV files fail validation
  17. Best Practices
  18. BIDS Extension Proposals (BEPs)
  19. Related Tools Ecosystem
  20. Documentation
  21. Other files in this skill
  22. references/bidsspecification.md (verbatim)
  23. Entity Table
  24. Datatypes (Top-Level Directories)
  25. File Extensions
  26. Required Files
  27. Dataset-level (always required)
  28. Dataset-level (recommended)
  29. Run-level (recommended)
  30. Modality-specific required files
  31. Directory Structure Rules
  32. Metadata Inheritance
  33. Standard Template Spaces
  34. Specification Changelog (Selected)
  35. Entity Label Rules
  36. references/conversiontools.md (verbatim)
  37. HeuDiConv
  38. Installation
  39. Mode 1: ReproIn (Turnkey Conversion — Recommended for New Studies)
  40. Mode 2: Custom Heuristic Mapping into ReproIn (For Existing Data)
  41. Mode 3: Custom Heuristic (Full Flexibility)
  42. The .heudiconv Directory
  43. HeuDiConv Tips
  44. dcm2bids (Configuration-File-Based)
  45. Installation
  46. Workflow
  47. dcm2bids Tips
  48. BIDScoin (GUI + YAML Configuration)
  49. Installation
  50. Workflow
  51. BIDScoin Tips
  52. Comparison
  53. Post-Conversion Checklist
  54. Common DICOM-to-BIDS Pitfalls
  55. Multiband/SMS sequences
  56. Dual-echo fieldmaps
  57. Phase encoding direction
  58. Multi-run numbering
  59. Derived/processed series
  60. references/metadatafields.md (verbatim)
  61. Common MRI Fields (All MRI Modalities)
  62. Anatomical MRI (anat/)
  63. T1w, T2w, FLAIR, T2star, PDw
  64. Quantitative MRI (T1map, T2map, etc.)
  65. Functional MRI (func/)
  66. BOLD
  67. Multi-echo BOLD
  68. BOLD Timing Details
  69. Diffusion-Weighted Imaging (dwi/)
  70. DWI Gradient Files
  71. Fieldmaps (fmap/)
  72. Case 1: Phase-difference map (phasediff)
  73. Case 2: Two phase maps (phase1, phase2)
  74. Case 3: Direct fieldmap (fieldmap)
  75. Case 4: "Pepolar" fieldmaps (epi)
  76. IntendedFor Syntax
  77. Perfusion Imaging (perf/)
  78. ASL
  79. aslcontext.tsv
  80. EEG (eeg/)
  81. channels.tsv (EEG)
  82. electrodes.tsv (EEG)
  83. MEG (meg/)
  84. PET (pet/)
  85. Microscopy (micr/)
  86. NIRS (nirs/)
  87. Motion (motion/)

What it does. Use this skill when working with Brain Imaging Data Structure (BIDS) datasets: organizing neuroscience and biomedical data (MRI, EEG, MEG, iEEG, PET, microscopy, NIRS, motion capture, EMG, MR spectroscopy, behavioral), querying BIDS layouts, validating compliance, converting DICOM to BIDS, writing metadata sidecars, or creating BIDS derivatives. Part of K-Dense-AI/scientific-agent-skills (AI Scientist skills) (K-Dense-AI/scientific-agent-skills).

Upstream K-Dense-AI/scientific-agent-skills
Skill file skills/bids/SKILL.md
License MIT
Author K-Dense Inc.
Fetched 2026-09-10

Install

  • npx skills add K-Dense-AI/scientific-agent-skills --skill bids, or copy the skill folder into ~/.claude/skills/bids/.
  • Raw file: curl -sL https://raw.githubusercontent.com/K-Dense-AI/scientific-agent-skills/HEAD/skills/bids/SKILL.md

SKILL.md (verbatim)

name: bids
description: >
  Use this skill when working with Brain Imaging Data Structure (BIDS) datasets:
  organizing neuroscience and biomedical data (MRI, EEG, MEG, iEEG, PET, microscopy,
  NIRS, motion capture, EMG, MR spectroscopy, behavioral), querying BIDS layouts,
  validating compliance, converting DICOM to BIDS, writing metadata sidecars, or
  creating BIDS derivatives.
license: https://creativecommons.org/licenses/by/4.0/
metadata:
  version: "1.1"
  skill-author: Yaroslav Halchenko

Brain Imaging Data Structure (BIDS)

Overview

The Brain Imaging Data Structure (BIDS) is a community standard for organizing and describing neuroscience and biomedical research datasets. It defines a consistent file naming convention, directory hierarchy, and metadata schema so that datasets are immediately understandable by humans and software tools alike. BIDS is governed by the BIDS Specification (currently v1.11.x) and is maintained by the community via the BIDS-Standard GitHub organization.

While BIDS originated for MRI, it has grown well beyond neuroimaging. The specification now covers 11 modalities spanning imaging, electrophysiology, and behavioral data:

  • Imaging: MRI (structural, functional, diffusion, fieldmaps, perfusion/ASL), PET, microscopy
  • Electrophysiology: EEG, MEG, iEEG (intracranial EEG), EMG
  • Other: NIRS (near-infrared spectroscopy), motion capture, behavioral data (without imaging), MR spectroscopy

Active BEPs are extending BIDS further — notably BEP032 (microelectrode electrophysiology) will add support for extracellular recordings including Neuropixels probes, bringing BIDS to a prevalent methodology in animal neuroscience research (see also the neuropixels-analysis skill).

Adoption is required or strongly encouraged by major data repositories (OpenNeuro, DANDI), leading journals (NeuroImage, Human Brain Mapping, Scientific Data), and funding agencies (NIH, ERC).

The Python ecosystem for BIDS centers on PyBIDS (pybids) for querying and indexing BIDS datasets, and the bids-validator (Deno-based, available as PyPI package bids-validator-deno or via Deno directly) for compliance checking. Conversion from DICOM is typically done with HeuDiConv, dcm2bids, or BIDScoin.

When to Use This Skill

Apply this skill when:

  • Organizing raw neuroscience data (imaging, electrophysiology, behavioral) into BIDS-compliant directory structures
  • Querying an existing BIDS dataset to find specific files by subject, session, task, run, or modality
  • Validating a dataset against the BIDS specification before sharing or submission
  • Converting DICOM data from scanners into BIDS format
  • Writing or editing JSON sidecar metadata files
  • Creating BIDS-compliant derivatives (preprocessed data, analysis outputs)
  • Setting up a dataset_description.json for a new dataset
  • Working with BIDS entities (subject, session, task, acquisition, run, etc.)
  • Configuring .bidsignore to exclude files from validation
  • Preparing data for upload to OpenNeuro, DANDI, or other BIDS-aware repositories

Installation

# Core BIDS querying library
uv pip install pybids

# BIDS validator (Deno-based, installed via PyPI wrapper)
uv pip install bids-validator-deno
# Alternative: install directly via Deno
# deno install -g -A npm:bids-validator

# DICOM-to-BIDS converters (install as needed)
uv pip install heudiconv       # HeuDiConv - heuristic-based DICOM conversion
uv pip install dcm2bids        # dcm2bids - config-file-based conversion
# BIDScoin: uv pip install bidscoin

# Useful companions
uv pip install nibabel          # NIfTI/other neuroimaging file I/O
uv pip install pydicom          # DICOM file reading (used by converters)

Core Workflows

Twelve workflow areas, each with worked code, are documented in references/core_workflows.md:

  1. BIDS directory structure — the required layout and where each modality belongs.
  2. dataset_description.json — the required fields and how to generate it.
  3. Querying with PyBIDSBIDSLayout, entity filters, sidecar metadata with automatic inheritance, and building paths from entities.
  4. Validationbids-validator via the PyPI wrapper (recommended), via Deno directly, the legacy Node validator, and using .bidsignore to exclude files.
  5. Entities and file naming — the entity order and naming grammar.
  6. DICOM to BIDS conversion — HeuDiConv (including the turnkey ReproIn path and the reconnaissance → heuristic → convert sequence) and dcm2bids (config-file based).
  7. Metadata sidecars — required and recommended JSON fields per modality.
  8. Events files — task fMRI event timing and column conventions.
  9. Participants fileparticipants.tsv and its data dictionary.
  10. Derivatives — the derivatives layout and its dataset_description.json.
  11. Advanced PyBIDS — index caching, including derivatives, confound regressors, and DataFrame output.
  12. BIDS-Apps — the standard invocation pattern, and fMRIPrep, MRIQC, and QSIPrep.

Validate early and often: PyBIDS validates structure when it indexes a dataset, so an indexing failure usually means a naming or metadata problem rather than a code bug.

Reference Materials

This skill includes detailed reference documentation:

  • bids_schema.json: Machine-readable BIDS schema (from https://bids-specification.readthedocs.io/en/stable/schema.json). This is the authoritative source for entity definitions, ordering rules, filename templates, allowed suffixes per datatype, and metadata field requirements. BEP-specific schemas are at https://github.com/bids-standard/bids-schema/tree/main/BEPs.
  • beps.yml: Current list of all BIDS Extension Proposals with titles, leads, status, and links (from bids-website)
  • bids_specification.md: Human-readable summary of the entity table, datatype reference, directory structure rules, template spaces, and specification changelog
  • metadata_fields.md: Required and recommended JSON sidecar fields for every BIDS modality (anat, func, dwi, fmap, eeg, meg, pet, etc.)
  • conversion_tools.md: Detailed workflows for HeuDiConv, dcm2bids, and BIDScoin including heuristic/config examples and troubleshooting

Update schema and BEPs with: python scripts/update_schema.py

Common Issues and Solutions

1. Validator reports "Not a BIDS dataset"

Cause: Missing dataset_description.json at the root. Fix: Create the file with at minimum {"Name": "...", "BIDSVersion": "1.10.0"}.

2. Inconsistent subjects warning

Cause: Not all subjects have the same set of files (some missing sessions, runs, etc.). Fix: This is a warning, not an error. Use --ignoreSubjectConsistency if intentional. Document missing data in participants.tsv or a scans.tsv.

3. Missing SliceTiming

Cause: dcm2niix couldn't extract slice timing from DICOM headers. Fix: Determine slice order from the scan protocol and add manually to the JSON sidecar. Common patterns: ascending, descending, interleaved (odd-first or even-first).

4. Phase encoding direction confusion

Cause: Axis labels (i/j/k vs x/y/z vs LR/AP/SI) are confusing. Fix: In BIDS, use NIfTI image axes: i=first axis, j=second, k=third. - means negative direction. For standard axial acquisitions: j is typically anterior-posterior. Verify with the acquisition protocol.

5. PyBIDS is slow on large datasets

Cause: Full filesystem indexing on every BIDSLayout() call. Fix: Use database_path to cache the index to an SQLite file:

layout = BIDSLayout("/data", database_path="/data/.pybids_cache.db")

6. Derivatives not found by PyBIDS

Cause: Derivatives directory missing its own dataset_description.json. Fix: Every derivatives directory must have dataset_description.json with "DatasetType": "derivative".

7. Events file timing is off

Cause: onset times are relative to the wrong reference (e.g., trigger time vs first volume). Fix: Onsets must be in seconds relative to the first volume of that run's acquisition. Account for dummy scans if they were discarded.

8. TSV files fail validation

Cause: Encoding or delimiter issues (spaces instead of tabs, BOM characters, Windows line endings). Fix: Ensure tab-separated values with UTF-8 encoding and Unix line endings (\n). Use n/a (not NA, NaN, or empty) for missing values.

Best Practices

  1. Validate early and often - Run the BIDS validator after every conversion or modification. Fix errors before they compound.

  2. Use metadata inheritance - Place shared metadata (e.g., TaskName, scanner parameters) in top-level sidecar files rather than duplicating in every subject's directory.

  3. Keep sourcedata - Store the original DICOM (or other raw) data under sourcedata/ so conversions are reproducible. Add sourcedata/ to .bidsignore.

  4. Use consistent naming from the start - Define your BIDS naming scheme before data collection. Use the ReproIn naming convention for scan protocols to enable automatic conversion.

  5. Document your dataset - Write a thorough README describing the study design, acquisition parameters, known issues, and any deviations from BIDS.

  6. Use scans.tsv for run-level metadata - Record per-run acquisition times and quality notes:

    filename    acq_time    quality
    func/sub-01_task-rest_bold.nii.gz    2025-01-15T10:30:00    good
    
  7. Version your dataset - Use CHANGES to document dataset modifications. Consider DataLad for full version control of large datasets.

  8. Deface anatomical images - Remove facial features from T1w/T2w images before sharing (e.g., using pydeface, mri_deface, or afni_refacer). Store defaced versions as the primary data or use _defacemask files.

  9. Use BIDS URIs for provenance - In derivatives, reference source files using BIDS URIs: bids::sub-01/anat/sub-01_T1w.nii.gz.

  10. Prefer community tools - Use established BIDS-Apps (fMRIPrep, MRIQC, QSIPrep) rather than custom pipelines when possible. They handle BIDS I/O correctly and produce BIDS-compliant derivatives.

  11. Study bids-examples - The bids-examples repository is the canonical collection of prototypical BIDS datasets covering different modalities and use cases (MRI, fMRI, DWI, EEG, MEG, iEEG, PET, ASL, genetics, derivatives, and more). Use it as a reference when structuring your own dataset, as test data for BIDS tools, or to understand how a specific modality should be organized. Each example passes the BIDS validator.

BIDS Extension Proposals (BEPs)

BEPs are community-driven proposals to extend BIDS to new modalities, derivatives, or metadata. The full list with status, leads, and links is in references/beps.yml (fetched from the bids-website). BEP-specific schema previews are rendered at https://github.com/bids-standard/bids-schema/tree/main/BEPs.

Current BEPs (as of schema update):

BEP Title Content Status
004 Susceptibility Weighted Imaging raw Seeking new leader
011 Structural preprocessing derivatives derivative Has PR (#518)
012 Functional preprocessing derivatives derivative Has PR (#519), schema implemented
014 Affine transforms and nonlinear field warps derivative X5 format development
016 Diffusion weighted imaging derivatives derivative Has PR (#2211)
017 Generic BIDS connectivity data schema derivative In development
021 Common Electrophysiological Derivatives derivative In development
023 PET Preprocessing derivatives derivative In development
024 Computed Tomography scan raw Seeking contributors
026 Microelectrode Recordings raw Seeking new leader
028 Provenance metadata Has PR (#2099)
032 Microelectrode electrophysiology raw Has PR (#2307), preview available — covers Neuropixels and other extracellular probes; relates to neuropixels-analysis skill
033 Advanced Diffusion Weighted Imaging raw Seeking contributors
034 Computational modeling derivative Has PR (#967)
035 Mega-analyses with non-compliant derivatives derivative In development
036 Phenotypic Data Guidelines raw Community review
037 Non-Invasive Brain Stimulation raw In development
039 Dimensionality reduction-based networks raw In development
040 Functional Ultrasound raw In development
041 Statistical Model Derivatives derivative Collecting feedback
043 BIDS Term Mapping metadata Collecting feedback
044 Stimuli raw Has PR (#2022), community review
045 Peripheral Physiological Recordings raw Has PR (#2267)
046 Diffusion Tractography derivative In development
047 Audio/video recordings for behavioral experiments raw Has PR (#2231)

Related standards:

  • BIDS-Stats Models: JSON specification for defining GLM-based neuroimaging analyses
  • BIDS-Derivatives (BEP003): Standard for preprocessed/analysis outputs (partially merged into spec)
Tool Purpose
fMRIPrep fMRI preprocessing (produces BIDS derivatives)
MRIQC MRI quality control (produces BIDS derivatives)
QSIPrep Diffusion MRI preprocessing
TemplateFlow Neuroimaging templates and atlases with BIDS-like naming
Fitlins BIDS Stats Models implementation
DataLad Version control for large datasets, integrates with BIDS
OpenNeuro Free BIDS dataset repository
DANDI Neurophysiology data archive (uses BIDS for some modalities)
HeuDiConv DICOM-to-BIDS with heuristic Python files
dcm2bids DICOM-to-BIDS with JSON config
BIDScoin DICOM-to-BIDS with GUI and YAML config
nwb2bids Convert NWB (Neurodata Without Borders) files to BIDS
CuBIDS BIDS dataset curation and harmonization
bids2table Efficient tabular indexing of BIDS datasets
bids-examples Canonical collection of prototypical BIDS datasets for all modalities

Documentation

Other files in this skill

references/bids_specification.md (verbatim)

BIDS Specification Reference

Note: The canonical, machine-readable source of truth is bids_schema.json (in this directory), exported from the BIDS Schema. The tables below are a human-readable summary. When the two disagree, trust the schema.

Entity Table

Complete list of BIDS entities, their keys, and where they apply. Rows are listed in the required filename ordering — entities must appear in this order in BIDS filenames. This order is defined in the schema at rules.entities (see bids_schema.json).

# Entity Key Format Applies to
1 Subject sub- <label> (alphanumeric) All files (required)
2 Template tpl- <label> derivatives (template-based)
3 Session ses- <label> All datatypes
4 Cohort cohort- <label> derivatives (template cohorts)
5 Sample sample- <label> microscopy
6 Task task- <label> func, eeg, meg, ieeg, beh, pet, nirs, motion
7 Tracking system tracksys- <label> motion
8 Acquisition acq- <label> All datatypes
9 Nucleus nuc- <label> MR spectroscopy
10 Volume voi- <label> MR spectroscopy
11 Contrast enhancing agent ce- <label> anat
12 Tracer trc- <label> pet
13 Stain stain- <label> microscopy
14 Reconstruction rec- <label> anat, func, pet
15 Direction dir- <label> fmap, dwi, perf, func
16 Run run- <index> (integer) All datatypes
17 Modality mod- <label> fieldmaps
18 Echo echo- <index> func, fmap
19 Flip flip- <index> anat (quantitative MRI)
20 Inversion inv- <index> anat (quantitative MRI)
21 Magnetization transfer mt- on/off anat (quantitative MRI)
22 Part part- mag/phase/real/imag anat, func
23 Processing proc- <label> eeg, meg, ieeg
24 Hemisphere hemi- L/R derivatives (surface data)
25 Space space- <label> derivatives
26 Split split- <index> func, dwi, eeg, meg, ieeg
27 Recording recording- <label> physio, stim, eeg, meg
28 Chunk chunk- <index> large files split across chunks
29 Atlas atlas- <label> derivatives (atlas-based)
30 Segmentation seg- <label> derivatives
31 Scale scale- <label> derivatives
32 Resolution res- <label> derivatives
33 Density den- <label> derivatives (surface meshes)
34 Label label- <label> derivatives (segmentation labels)
35 Description desc- <label> derivatives only

Datatypes (Top-Level Directories)

Datatype Description Common Suffixes
anat Structural MRI T1w, T2w, FLAIR, T2star, inplaneT1, inplaneT2, PDw, T1map, T2map, T1rho, UNIT1, MP2RAGE, MTR, MTS
func Functional MRI bold, cbv, sbref
dwi Diffusion-weighted imaging dwi, sbref
fmap Fieldmaps phasediff, phase1, phase2, magnitude1, magnitude2, fieldmap, epi
perf Perfusion imaging (ASL) asl, m0scan, aslcontext
eeg Electroencephalography eeg, channels, electrodes, events, coordsystem
meg Magnetoencephalography meg, channels, coordsystem, events, headshape
ieeg Intracranial EEG ieeg, channels, electrodes, events, coordsystem
pet Positron Emission Tomography pet, blood
micr Microscopy 2PE, BF, CARS, CONF, DIC, DF, FLUO, MPE, NLO, OCT, PC, PLI, SRS, TL
beh Behavioral data (no imaging) events, beh, physio, stim
motion Motion capture motion, channels, events
nirs Near-infrared spectroscopy nirs, channels, optodes, coordsystem, events

File Extensions

Extension Description
.nii.gz Compressed NIfTI (standard for MRI/fMRI/DWI)
.nii Uncompressed NIfTI
.json JSON sidecar metadata
.tsv Tab-separated values (events, participants, etc.)
.bvec b-vectors (DWI gradient directions)
.bval b-values (DWI gradient strengths)
.edf European Data Format (EEG)
.bdf BioSemi Data Format (EEG)
.vhdr/.vmrk/.eeg BrainVision format (EEG)
.set EEGLAB format (EEG)
.fif Elekta/MEGIN format (MEG)
.ds CTF dataset (MEG)
.sqd/.con KIT/Yokogawa (MEG)

Required Files

Dataset-level (always required)

  • dataset_description.json
  • README or README.md
  • CHANGES
  • participants.tsv + participants.json
  • LICENSE
  • sub-<label>/[ses-<label>/]sub-<label>[_ses-<label>]_scans.tsv - per-run acquisition metadata

Modality-specific required files

  • func/bold: corresponding _events.tsv for task data; TaskName in JSON sidecar
  • dwi: .bvec and .bval files
  • eeg/meg/ieeg: _channels.tsv, _events.tsv
  • perf/asl: _aslcontext.tsv

Directory Structure Rules

  1. Subject directories are named sub-<label> and sit at dataset root
  2. Session directories ses-<label> are optional; if used, must be used for ALL subjects
  3. Datatype directories (anat/, func/, etc.) sit inside subject (or session) directories
  4. sourcedata/ stores raw unprocessed data (DICOM, etc.) - not validated
  5. derivatives/ stores processed outputs - each pipeline in its own subdirectory
  6. code/ stores analysis scripts
  7. stimuli/ stores stimulus files used during acquisition
  8. phenotype/ stores questionnaire/behavioral data not tied to specific imaging

Metadata Inheritance

JSON metadata cascades from higher to lower directories. If the same key appears at multiple levels, the most specific (closest to the data file) wins.

Resolution order (highest priority first):

  1. File-level sidecar: sub-01/func/sub-01_task-rest_bold.json
  2. Subject-level sidecar: sub-01/sub-01_task-rest_bold.json
  3. Dataset-level sidecar: task-rest_bold.json

This avoids duplicating metadata that is constant across subjects (e.g., RepetitionTime, TaskName).

Standard Template Spaces

Common space- values used in derivatives:

Space Label Description
MNI152NLin2009cAsym MNI 2009c nonlinear asymmetric (fMRIPrep default)
MNI152NLin6Asym MNI 6th-generation nonlinear asymmetric (FSL default)
MNI152Lin MNI linear registration
MNIPediatricAsym Pediatric MNI templates
T1w Individual subject's T1w native space
fsnative FreeSurfer individual surface space
fsaverage FreeSurfer average surface (164k vertices)
fsaverage5 FreeSurfer average surface (10k vertices)
fsaverage6 FreeSurfer average surface (40k vertices)
fsLR HCP fs_LR surface space
OASIS30ANTs OASIS-30 ANTs template
UNCInfant UNC infant templates

Full list managed by TemplateFlow: https://www.templateflow.org/

Specification Changelog (Selected)

Version Key Changes
1.10.0 Motion capture modality; refined derivative entity rules
1.9.0 NIRS modality; Python-based validator reference implementation
1.8.0 Microscopy modality; chunk- entity for large files
1.7.0 PET modality fully specified
1.6.0 EEG/MEG/iEEG matured; _coordsystem.json
1.5.0 Genetic descriptors; ASL perfusion
1.4.0 dataset_description.json expanded; derivatives framework
1.0.0 Initial release: MRI only (anat, func, dwi, fmap)

Entity Label Rules

  • Labels (<label>): alphanumeric only, no special characters, no leading zeros (except run-)
  • Indices (<index>): non-negative integers, zero-padded to equal width within a dataset (e.g., run-01, run-02)
  • Subject labels: typically numeric (01, 02) but can be alphanumeric (CON01, PAT01)
  • Session labels: descriptive (pre, post, baseline, followup) or numeric
  • Task labels: brief, descriptive, no spaces (rest, nback, faces, gonogo)

references/conversion_tools.md (verbatim)

BIDS Conversion Tools Reference

This reference covers detailed workflows for converting DICOM and other raw data formats to BIDS using the three main conversion tools.

HeuDiConv

HeuDiConv is the most flexible DICOM-to-BIDS converter. It supports three usage modes — from fully automatic turnkey conversion to fully custom heuristics — and handles duplicates, provenance tracking, and sourcedata archiving out of the box.

Repository: https://github.com/nipy/heudiconv Docs: https://heudiconv.readthedocs.io/ Tutorials: https://heudiconv.readthedocs.io/en/latest/tutorials.html

Installation

uv pip install heudiconv

# HeuDiConv wraps dcm2niix for the actual conversion
# dcm2niix is usually installed as a dependency, but can also be installed via:
# conda install -c conda-forge dcm2niix
# or: apt-get install dcm2niix

If scanner protocol names follow the ReproIn naming convention, conversion is fully automatic with no heuristic file to write. ReproIn is a setup for automatic generation of sharable, version-controlled BIDS datasets directly from MR scanners.

# Turnkey conversion — just point at DICOMs, HeuDiConv does the rest
heudiconv --files dicom/001 -o data -f reproin --bids --minmeta

ReproIn Protocol Naming Rules

Protocol names encode BIDS entities directly. Format: <seqtype>[-<suffix>][_<entity>-<label>]...

Protocol name at scanner BIDS output
anat-T1w or just anat sub-XX/anat/sub-XX_T1w.nii.gz
func-bold_task-rest or func_task-rest sub-XX/func/sub-XX_task-rest_bold.nii.gz
dwi_dir-AP sub-XX/dwi/sub-XX_dir-AP_dwi.nii.gz
fmap_dir-PA or fmap-epi_dir-PA sub-XX/fmap/sub-XX_dir-PA_epi.nii.gz
fmap_acq-4mm sub-XX/fmap/sub-XX_acq-4mm_epi.nii.gz

Key features:

  • Default suffixes: anat defaults to T1w, func to bold, fmap to epi — so they can be omitted
  • Subject ID: extracted automatically from DICOM metadata (Patient ID)
  • Session: set once on any sequence (e.g., anat-scout_ses-pre) and ReproIn propagates it to all sequences in that scanner Program/Patient
  • Duplicate runs: automatically numbered (run-01, run-02, ...) when the same protocol is run multiple times
  • Locator hierarchy: output is nested under Region/Exam from the scanner's Study Description (customizable with --locator)
  • sourcedata: original DICOMs are archived as .tgz files under sourcedata/ for reproducibility
  • Dashes in names: scanners may strip dashes from protocol names during DICOM export — ReproIn handles this gracefully

ReproIn Overview

See also:

Mode 2: Custom Heuristic Mapping into ReproIn (For Existing Data)

If you already have collected data with non-ReproIn protocol names (or cannot control scanner naming), you can write a thin heuristic that maps your protocol names into ReproIn conventions. This gives you all ReproIn benefits (automatic entity handling, duplicate management, sourcedata archiving) while accommodating arbitrary scanner naming.

See https://github.com/repronim/reproin/issues/18 for a brief HOWTO on this approach.

The idea is to write a heuristic whose infotodict returns keys that follow ReproIn naming patterns, so the ReproIn machinery handles the rest.

Mode 3: Custom Heuristic (Full Flexibility)

For studies with complex mappings or non-standard requirements, write a full Python heuristic file. This is the most common workflow for retrospective conversion of existing datasets.

Step 1: Reconnaissance — Discover DICOM series

# -f convertall: built-in heuristic that lists all series without converting
# -c none: don't convert, just generate dicominfo.tsv
heudiconv \
    --files dicom/219/itbs/*/*.dcm \
    -s 219 \
    -f convertall \
    -c none \
    -o Nifti/

This creates .heudiconv/219/info/dicominfo.tsv containing one row per DICOM series with columns:

  • series_id, sequence_name, protocol_name, series_description
  • dim1-dim4 (image dimensions), TR, TE, image_type
  • is_derived, is_motion_corrected — important for filtering

Review this TSV (open in a spreadsheet) to understand what was acquired and plan the mapping to BIDS names. Step 1 only needs to be done once per project.

Step 2: Write a heuristic file

"""HeuDiConv heuristic for a typical fMRI study.

Study design:
- T1w MPRAGE anatomical
- Resting-state BOLD
- Task BOLD (n-back working memory)
- DWI with two phase-encoding directions
- Fieldmap (phase-difference)
"""

def create_key(template, outtype=('nii.gz',), annotation_classes=None):
    if template is None or not template:
        raise ValueError('Template must be a valid format string')
    return template, outtype, annotation_classes


def infotodict(seqinfo):
    """Heuristic evaluator for determining which runs belong where.

    Parameters
    ----------
    seqinfo : list of namedtuples
        Each namedtuple has fields: .series_id, .sequence_name,
        .protocol_name, .series_description, .dim1, .dim2, .dim3, .dim4,
        .TR, .TE, .is_derived, .is_motion_corrected, .image_type, etc.

    Returns
    -------
    info : dict
        Keys are tuples from create_key(), values are lists of series_id
    """
    # Define BIDS output templates
    t1w = create_key(
        'sub-{subject}/{session}/anat/sub-{subject}_{session}_T1w'
    )
    rest_bold = create_key(
        'sub-{subject}/{session}/func/sub-{subject}_{session}_task-rest_bold'
    )
    # {item:02d} auto-numbers runs when the same protocol is run multiple times
    nback_bold = create_key(
        'sub-{subject}/{session}/func/sub-{subject}_{session}_task-nback_run-{item:02d}_bold'
    )
    dwi_AP = create_key(
        'sub-{subject}/{session}/dwi/sub-{subject}_{session}_dir-AP_dwi'
    )
    dwi_PA = create_key(
        'sub-{subject}/{session}/dwi/sub-{subject}_{session}_dir-PA_dwi'
    )
    fmap_phasediff = create_key(
        'sub-{subject}/{session}/fmap/sub-{subject}_{session}_phasediff'
    )
    fmap_mag1 = create_key(
        'sub-{subject}/{session}/fmap/sub-{subject}_{session}_magnitude1'
    )
    fmap_mag2 = create_key(
        'sub-{subject}/{session}/fmap/sub-{subject}_{session}_magnitude2'
    )

    info = {
        t1w: [], rest_bold: [], nback_bold: [],
        dwi_AP: [], dwi_PA: [],
        fmap_phasediff: [], fmap_mag1: [], fmap_mag2: [],
    }

    for s in seqinfo:
        protocol = s.protocol_name.lower()
        series_desc = s.series_description.lower() if s.series_description else ''

        # Anatomical — filter by dim3 to exclude localizers
        if ('mprage' in protocol or 't1w' in protocol) and s.dim3 > 100:
            info[t1w].append(s.series_id)

        # Functional — filter by dim4 and exclude MOCO series
        elif 'rest' in protocol and s.dim4 > 10 and not s.is_motion_corrected:
            info[rest_bold].append(s.series_id)
        elif 'nback' in protocol and s.dim4 > 10 and not s.is_motion_corrected:
            info[nback_bold].append(s.series_id)

        # Diffusion
        elif ('dti' in protocol or 'dwi' in protocol) and s.dim4 > 1:
            if 'ap' in protocol or 'ap' in series_desc:
                info[dwi_AP].append(s.series_id)
            elif 'pa' in protocol or 'pa' in series_desc:
                info[dwi_PA].append(s.series_id)

        # Fieldmaps
        elif 'field' in protocol or 'fmap' in protocol:
            if 'ph' in s.image_type_text.lower():
                info[fmap_phasediff].append(s.series_id)
            elif s.series_description and 'e1' in s.series_description.lower():
                info[fmap_mag1].append(s.series_id)
            elif s.series_description and 'e2' in s.series_description.lower():
                info[fmap_mag2].append(s.series_id)

    return info

Step 3: Convert

# Convert with custom heuristic
heudiconv \
    --files dicom/219/itbs/*/*.dcm \
    -s 219 \
    -ss itbs \
    -f Nifti/code/heuristic.py \
    -c dcm2niix \
    --bids \
    --minmeta \
    -o Nifti/

# Or using -d template for batch conversion of multiple subjects
heudiconv \
    -d /path/to/dicoms/{subject}/*/*/*.dcm \
    -s 01 02 03 04 05 \
    -f my_heuristic.py \
    -c dcm2niix \
    --bids \
    --minmeta \
    -o /path/to/bids_output

# Key flags:
# --files : point to specific DICOM files/directories
# -d : DICOM path template ({subject}, {session} are replaced)
# -s : subject label(s)
# -ss : session label
# -f : heuristic file path, or built-in name (reproin, convertall)
# -c : converter (dcm2niix, none)
# --bids / -b : output BIDS structure (creates JSON sidecars, etc.)
# --minmeta : prevent excess DICOM metadata from overflowing JSON sidecars
# -o : output directory
# --overwrite : re-run conversion overwriting existing files

The .heudiconv Directory

Every conversion creates/updates a .heudiconv/ hidden directory alongside the output:

  • .heudiconv/<subject>/info/dicominfo.tsv — DICOM series metadata
  • .heudiconv/<subject>/info/<heuristic>.py — copy of the heuristic used
  • Conversion records for each subject/session

Important: If you re-run conversion for a subject/session that was already processed, HeuDiConv silently reuses cached conversion info from .heudiconv/. If troubleshooting, delete the subject's entry from .heudiconv/ (or the whole directory) and re-run.

Keep .heudiconv/ with your data — together with code/ it provides valuable provenance information.

HeuDiConv Tips

  1. Always use --minmeta to prevent excess DICOM metadata from overflowing JSON sidecars — fMRIPrep and MRIQC may crash on bloated JSON files
  2. Use {item:02d} in templates for auto-numbering runs: if multiple series match, they get run-01, run-02, etc. Without this, later runs silently overwrite earlier ones
  3. Filter by dim3/dim4 to exclude localizers (small dim3) and single-volume scouts (dim4 == 1)
  4. Check s.is_motion_corrected to exclude scanner-generated MOCO series (e.g., if not s.is_motion_corrected)
  5. Check s.is_derived to skip other derived/processed series
  6. Store heuristic with dataset under code/ for reproducibility
  7. Use --files when DICOM organization doesn't follow a clean {subject} template pattern
  8. For new studies: prefer ReproIn protocol naming from the start — it eliminates the need for custom heuristics entirely
  9. For existing data with arbitrary names: consider the "map into reproin" approach rather than writing a fully custom heuristic — you get duplicate handling, session propagation, and other ReproIn features for free

dcm2bids (Configuration-File-Based)

dcm2bids uses JSON configuration files instead of Python heuristics. Simpler for straightforward datasets.

Repository: https://github.com/UNFmontreal/Dcm2Bids Docs: https://unfmontreal.github.io/Dcm2Bids/

Installation

uv pip install dcm2bids
# Also installs dcm2niix

Workflow

Step 1: Scaffold a BIDS directory

dcm2bids_scaffold -o /path/to/bids_output

Creates the basic BIDS structure with dataset_description.json, README, .bidsignore, etc.

Step 2: Run helper to inspect DICOM metadata

dcm2bids_helper -d /path/to/dicom_dir -o /path/to/bids_output

Creates tmp_dcm2bids/helper/ with converted NIfTI files and JSON sidecars. Review the JSON files to find distinguishing metadata fields.

Step 3: Write configuration file

{
    "descriptions": [
        {
            "id": "id_t1w",
            "datatype": "anat",
            "suffix": "T1w",
            "criteria": {
                "SeriesDescription": "*MPRAGE*",
                "ImageType": ["ORIGINAL", "PRIMARY", "M", "ND", "NORM"]
            }
        },
        {
            "id": "id_bold_rest",
            "datatype": "func",
            "suffix": "bold",
            "custom_entities": "task-rest",
            "criteria": {
                "SeriesDescription": "*REST*BOLD*",
                "ImageType": ["ORIGINAL", "PRIMARY", "M", "ND", "MOSAIC"]
            },
            "sidecar_changes": {
                "TaskName": "rest"
            }
        },
        {
            "id": "id_bold_nback",
            "datatype": "func",
            "suffix": "bold",
            "custom_entities": "task-nback",
            "criteria": {
                "SeriesDescription": "*NBACK*",
                "EchoTime": 0.03
            },
            "sidecar_changes": {
                "TaskName": "nback"
            }
        },
        {
            "id": "id_dwi",
            "datatype": "dwi",
            "suffix": "dwi",
            "custom_entities": "dir-AP",
            "criteria": {
                "SeriesDescription": "*DTI*AP*"
            }
        },
        {
            "id": "id_fmap_phasediff",
            "datatype": "fmap",
            "suffix": "phasediff",
            "criteria": {
                "SeriesDescription": "*field*map*",
                "EchoTime1": 0.00492,
                "EchoTime2": 0.00738
            },
            "sidecar_changes": {
                "IntendedFor": [
                    "bids::sub-{subject}/func/sub-{subject}_task-rest_bold.nii.gz",
                    "bids::sub-{subject}/func/sub-{subject}_task-nback_bold.nii.gz"
                ]
            }
        }
    ]
}

Configuration file fields:

  • datatype: BIDS datatype (anat, func, dwi, fmap, etc.)
  • suffix: BIDS suffix (T1w, bold, dwi, etc.)
  • custom_entities: additional BIDS entities (task-rest, dir-AP, acq-highres, etc.)
  • criteria: dictionary of DICOM/JSON metadata fields to match (supports wildcards *)
  • sidecar_changes: fields to add/modify in the output JSON sidecar
  • id: arbitrary identifier for the description (for logging)

Step 4: Convert

# Single subject
dcm2bids -d /path/to/dicom_dir -p 01 -c dcm2bids_config.json -o /path/to/bids_output

# With session
dcm2bids -d /path/to/dicom_dir -p 01 -s pre -c dcm2bids_config.json -o /path/to/bids_output

# Flags:
# -d : DICOM source directory
# -p : participant label
# -s : session label (optional)
# -c : configuration file
# -o : output BIDS directory
# --auto_extract_entities : auto-detect run numbers from DICOM
# --force_dcm2bids : overwrite existing conversions

dcm2bids Tips

  1. Use dcm2bids_helper first to see exactly what metadata dcm2niix extracts
  2. Criteria matching uses wildcards (*) and is case-sensitive
  3. Multiple criteria are ANDed together; use the most specific combination
  4. sidecar_changes can inject any BIDS metadata (useful for TaskName, IntendedFor)
  5. Store config file under code/dcm2bids_config.json for reproducibility

BIDScoin (GUI + YAML Configuration)

BIDScoin provides a graphical interface and YAML-based configuration. Good for users who prefer visual mapping.

Repository: https://github.com/Donders-Institute/bidscoin Docs: https://bidscoin.readthedocs.io/

Installation

uv pip install bidscoin
# Optional: install with all plugin dependencies
uv pip install "bidscoin[all]"

Workflow

# Step 1: Create a bidsmap template by scanning DICOMs
bidsmapper /path/to/raw /path/to/bids

# Step 2: Edit the bidsmap (launches GUI)
bidseditor /path/to/bids

# Step 3: Convert using the finalized bidsmap
bidscoiner /path/to/raw /path/to/bids

BIDScoin Tips

  1. GUI-based editing is BIDScoin's strength - the bidseditor shows DICOM metadata alongside BIDS mapping
  2. YAML bidsmap can be edited manually if preferred
  3. Plugin architecture supports custom conversion backends beyond dcm2niix
  4. Good for multi-site studies where protocol names vary - visual mapping makes differences obvious

Comparison

Feature HeuDiConv dcm2bids BIDScoin
Configuration Python heuristic JSON config YAML + GUI
Flexibility Highest (full Python) Medium (criteria matching) Medium (plugin system)
Learning curve Steeper (Python) Moderate Gentlest (GUI)
Batch processing Excellent Good Good
ReproIn support Built-in No No
DataLad integration Built-in No No
Best for Complex studies, automation Simple-to-moderate studies Visual learners, multi-site
Active development Yes Yes Yes

Post-Conversion Checklist

After converting DICOM to BIDS with any tool:

  1. Run the BIDS validator: bids-validator /path/to/bids_output
  2. Check JSON sidecars for critical fields (RepetitionTime, TaskName, SliceTiming, PhaseEncodingDirection)
  3. Verify NIfTI headers match expectations (dimensions, voxel sizes, orientation)
  4. Add missing metadata that dcm2niix couldn't extract from DICOM
  5. Create participants.tsv with demographic data
  6. Write events files for task fMRI
  7. Write README describing the dataset
  8. Deface anatomical images if sharing data
  9. Run bids-validator again after any manual modifications

Common DICOM-to-BIDS Pitfalls

Multiband/SMS sequences

  • dcm2niix may split slices incorrectly for multiband data
  • Check dim4 (number of volumes) matches expectations
  • Verify SliceTiming is correct for the multiband factor

Dual-echo fieldmaps

  • Siemens stores both echoes in one series; dcm2niix splits them
  • GE/Philips may store them as separate series
  • Verify EchoTime1 < EchoTime2 in the phasediff sidecar

Phase encoding direction

  • DICOM InPlanePhaseEncodingDirection → BIDS PhaseEncodingDirection
  • Mapping depends on acquisition orientation and NIfTI axis conventions
  • Always verify by checking the actual distortion pattern in the images

Multi-run numbering

  • Ensure runs are numbered sequentially (run-01, run-02)
  • HeuDiConv: use {item:02d} placeholder
  • dcm2bids: use --auto_extract_entities or manually specify runs

Derived/processed series

  • Scanners may export inline-processed data (e.g., motion-corrected, distortion-corrected)
  • These should NOT be converted to BIDS raw data
  • Filter by ImageType containing DERIVED or is_derived flag in HeuDiConv

references/metadata_fields.md (verbatim)

BIDS Metadata Fields Reference

This reference lists the required and recommended JSON sidecar fields for each BIDS modality.

Legend:

  • R = Required
  • REC = Recommended
  • OPT = Optional

Common MRI Fields (All MRI Modalities)

Field Status Type Description
MagneticFieldStrength REC number Field strength in Tesla
Manufacturer REC string Scanner manufacturer
ManufacturersModelName REC string Scanner model
DeviceSerialNumber REC string Scanner serial number
StationName REC string Scanner station name
SoftwareVersions REC string Scanner software version
InstitutionName REC string Name of institution
InstitutionAddress REC string Address of institution
InstitutionalDepartmentName REC string Department name

Anatomical MRI (anat/)

T1w, T2w, FLAIR, T2star, PDw

Field Status Type Description
RepetitionTime REC number TR in seconds
EchoTime REC number TE in seconds
InversionTime REC number TI in seconds (if applicable)
FlipAngle REC number Flip angle in degrees
SequenceName REC string Pulse sequence name
SequenceVariant REC string Variant of the sequence
ScanningSequence REC string General description
PulseSequenceType REC string Type of pulse sequence
NonlinearGradientCorrection REC boolean Whether applied
ParallelReductionFactorInPlane REC number iPAT/GRAPPA factor
ContrastBolusIngredient REC string Active contrast ingredient

Quantitative MRI (T1map, T2map, etc.)

Field Status Type Description
RepetitionTimeExcitation R number Excitation TR in seconds
RepetitionTimePrepration R number Preparation TR in seconds
FlipAngle R number/array Flip angle(s) in degrees
MTState R boolean Magnetization transfer on/off
SpoilingState REC boolean Whether RF spoiling applied
SpoilingType REC string RF, GRADIENT, or COMBINED
SpoilingRFPhaseIncrement REC number Phase increment in degrees

Functional MRI (func/)

BOLD

Field Status Type Description
RepetitionTime R number TR in seconds (volume acquisition time)
TaskName R string Name of the task (must match task-<label>)
SliceTiming REC array Time each slice was acquired, in seconds
EchoTime REC number TE in seconds
FlipAngle REC number Flip angle in degrees
PhaseEncodingDirection REC string i, i-, j, j-, k, k-
EffectiveEchoSpacing REC number Effective echo spacing in seconds
TotalReadoutTime REC number Total readout time in seconds
MultibandAccelerationFactor REC number Multiband/SMS factor
NumberOfVolumesDiscardedByScanner REC integer Dummy scans removed
NumberOfVolumesDiscardedByUser REC integer Volumes removed post-hoc
TaskDescription REC string Longer description of the task
CogAtlasID REC string Cognitive Atlas ID for the task
CogPOID REC string Cognitive Paradigm Ontology ID
Instructions REC string Instructions given to participants

Multi-echo BOLD

Field Status Type Description
EchoTime R number TE for this echo (each echo in separate file)
EchoTime1, EchoTime2 - - NOT used; use echo-<index> entity

BOLD Timing Details

SliceTiming - Array of times (in seconds) at which each slice was acquired relative to the start of volume acquisition. Length must equal the number of slices.

Example for ascending sequential (3 slices, TR=2s):

{"SliceTiming": [0.0, 0.667, 1.333]}

Example for interleaved (odd-first, 6 slices, TR=2s):

{"SliceTiming": [0.0, 0.667, 1.333, 0.333, 1.0, 1.667]}

PhaseEncodingDirection values:

  • i / i- : along first image axis (typically left-right)
  • j / j- : along second image axis (typically anterior-posterior)
  • k / k- : along third image axis (typically inferior-superior)
  • The - suffix indicates the negative direction along that axis

Diffusion-Weighted Imaging (dwi/)

Field Status Type Description
PhaseEncodingDirection R string Phase encoding direction
TotalReadoutTime R number Total readout time in seconds
EchoTime REC number TE in seconds
RepetitionTime REC number TR in seconds
FlipAngle REC number Flip angle in degrees
EffectiveEchoSpacing REC number Effective echo spacing in seconds
MultibandAccelerationFactor REC number SMS/multiband factor
SliceTiming REC array Slice timing

DWI Gradient Files

.bvec file (3 rows x N columns, N = number of volumes):

0 0.707 -0.707 0 0.577
0 0.707 0.707 0 0.577
0 0 0 1 0.577

.bval file (1 row x N columns):

0 1000 1000 1000 2000
  • b=0 volumes have zero-vectors in .bvec
  • Gradient directions are in the image coordinate system
  • Values are space-separated (not tab-separated)
  • Number of columns must match number of volumes in the NIfTI

Fieldmaps (fmap/)

Case 1: Phase-difference map (_phasediff)

Field Status Type Description
EchoTime1 R number TE of the first echo (shorter)
EchoTime2 R number TE of the second echo (longer)
IntendedFor R string/array BIDS URI(s) of files to correct
B0FieldIdentifier REC string Identifier for this B0 field

Case 2: Two phase maps (_phase1, _phase2)

Field Status Type Description
EchoTime R number TE for this phase image
IntendedFor R string/array Files to correct

Case 3: Direct fieldmap (_fieldmap)

Field Status Type Description
Units R string Must be Hz or rad/s
IntendedFor R string/array Files to correct

Case 4: "Pepolar" fieldmaps (_epi)

Field Status Type Description
PhaseEncodingDirection R string PE direction for this image
TotalReadoutTime R number Total readout time
IntendedFor R string/array Files to correct
B0FieldIdentifier REC string Identifier for this B0 field
B0FieldSource REC string Which B0 field to use

IntendedFor Syntax

BIDS URI format (recommended, v1.7+):

{
    "IntendedFor": [
        "bids::sub-01/func/sub-01_task-rest_bold.nii.gz",
        "bids::sub-01/dwi/sub-01_dwi.nii.gz"
    ]
}

Relative path format (legacy):

{
    "IntendedFor": [
        "func/sub-01_task-rest_bold.nii.gz",
        "dwi/sub-01_dwi.nii.gz"
    ]
}

B0FieldIdentifier/B0FieldSource (preferred in v1.9+):

// In the fieldmap sidecar
{"B0FieldIdentifier": "pepolar_fmap0"}

// In the BOLD sidecar
{"B0FieldSource": "pepolar_fmap0"}

Perfusion Imaging (perf/)

ASL

Field Status Type Description
ArterialSpinLabelingType R string CASL, PCASL, or PASL
PostLabelingDelay R number/array PLD in seconds
BackgroundSuppression R boolean Whether applied
MagneticFieldStrength R number In Tesla
M0Type R string Separate, Included, Estimate, Absent
RepetitionTimePreparation R number Time between ASL pulses
LabelingDuration R number Duration of labeling pulse
BackgroundSuppressionNumberPulses REC integer Number of suppression pulses
BackgroundSuppressionPulseTime REC array Timing of suppression pulses
VascularCrushing REC boolean Whether applied
LabelingOrientation REC string Orientation of labeling plane
LabelingDistance REC number Distance from isocenter (mm)
BolusCutOffFlag R (PASL) boolean Whether QUIPSS applied
BolusCutOffTimingSequence R (PASL) string QUIPSS sequence type
BolusCutOffDelayTime R (PASL) number QUIPSS delay time

aslcontext.tsv

Required file listing the order of volumes (label/control/m0scan):

volume_type
control
label
control
label
m0scan

EEG (eeg/)

Field Status Type Description
TaskName R string Name of the task
SamplingFrequency R number In Hz
EEGReference R string Reference electrode(s)
PowerLineFrequency R number 50 or 60 Hz (or n/a)
SoftwareFilters R object Online filters applied
EEGPlacementScheme REC string e.g., 10-20, 10-10
CapManufacturer REC string Cap manufacturer
CapManufacturersModelName REC string Cap model
EEGChannelCount REC integer Number of EEG channels
EOGChannelCount REC integer Number of EOG channels
ECGChannelCount REC integer Number of ECG channels
EMGChannelCount REC integer Number of EMG channels
MiscChannelCount REC integer Number of misc channels
TriggerChannelCount REC integer Number of trigger channels
RecordingDuration REC number In seconds
RecordingType REC string continuous, epoched, discontinuous

channels.tsv (EEG)

Column Status Description
name R Channel name
type R EEG, EOG, ECG, EMG, MISC, TRIG, etc.
units R V, mV, uV
sampling_frequency OPT Per-channel if different
low_cutoff REC High-pass filter frequency (Hz)
high_cutoff REC Low-pass filter frequency (Hz)
notch REC Notch filter frequency (Hz)
reference REC Reference electrode name
status REC good or bad
status_description OPT Reason for bad status

electrodes.tsv (EEG)

Column Status Description
name R Electrode name
x R X coordinate
y R Y coordinate
z R Z coordinate
type OPT Electrode type
material OPT Electrode material
impedance OPT Impedance in kOhm

MEG (meg/)

Field Status Type Description
TaskName R string Name of the task
SamplingFrequency R number In Hz
PowerLineFrequency R number 50 or 60 Hz
DewarPosition R string Position of the dewar
SoftwareFilters R object Online filters
DigitizedLandmarks R boolean Fiducials digitized
DigitizedHeadPoints R boolean Head shape digitized
MEGChannelCount REC integer Number of MEG channels
MEGREFChannelCount REC integer Reference channels
ContinuousHeadLocalization REC boolean HPI on
HeadCoilFrequency REC array HPI coil frequencies
InstitutionName REC string Institution name

PET (pet/)

Field Status Type Description
TracerName R string Name of the radiotracer
TracerRadionuclide R string e.g., C11, F18, O15
InjectedRadioactivity R number In MBq
InjectedRadioactivityUnits R string Must be MBq
InjectedMass R number Mass of tracer injected
InjectedMassUnits R string e.g., ug
ModeOfAdministration R string bolus, infusion, bolus-infusion
TimeZero R string Time of injection (HH:MM:SS)
ScanStart R number Start time relative to TimeZero
InjectionStart R number Injection time relative to TimeZero
FrameTimesStart R array Frame start times in seconds
FrameDuration R array Frame durations in seconds
Units R string Unit of voxel values (e.g., Bq/mL)
TracerRadLex REC string RadLex ID for tracer
BodyWeight REC number In kg
BodyPart REC string Imaged body part
AttenuationCorrection REC string Method description
ReconMethodName REC string Reconstruction method
ReconMethodParameterLabels REC array Parameter names
ReconMethodParameterValues REC array Parameter values
ReconFilterType REC string Post-recon filter type
ReconFilterSize REC number Filter FWHM in mm

Microscopy (micr/)

Field Status Type Description
Manufacturer R string Microscope manufacturer
ManufacturersModelName R string Microscope model
PixelSize R array [X, Y] or [X, Y, Z] in micrometers
PixelSizeUnits R string um (micrometers)
Magnification REC number Objective magnification
SampleEnvironment R string in vivo, ex vivo, in vitro
SampleFixation REC string Fixation method
SampleStaining REC string Staining protocol
SliceThickness REC number In micrometers
TissueDeformationScaling REC number Scaling factor

NIRS (nirs/)

Field Status Type Description
TaskName R string Name of the task
SamplingFrequency R number In Hz
NIRSSourceOptodeCount R integer Number of sources
NIRSDetectorOptodeCount R integer Number of detectors
ACCELChannelCount REC integer Accelerometer channels
NIRSPlacementScheme REC string e.g., 10-20

Motion (motion/)

Field Status Type Description
TaskName R string Name of the task
SamplingFrequency R number In Hz
TrackingSystemName R string Name of tracking system
ACCELChannelCount REC integer Accelerometer channels
GYROChannelCount REC integer Gyroscope channels
MAGNChannelCount REC integer Magnetometer channels
RotationOrder REC string e.g., XYZ
RotationRule REC string left-hand or right-hand
SpatialAxes REC string e.g., ALS

Back to K-Dense-AI/scientific-agent-skills (AI Scientist skills) or Agent skills.