diff --git a/.all-contributorsrc b/.all-contributorsrc
index 27f1209d73..7d85506d8a 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -192,6 +192,13 @@
"login": "ali_khan",
"name": "Ali Khan"
},
+ {
+ "contributions": [
+ "tool"
+ ],
+ "login": "alizee_wickenheiser",
+ "name": "Alizee Wickenheiser"
+ },
{
"contributions": [
"userTesting"
@@ -443,6 +450,14 @@
"login": "carlo_miniussi",
"name": "Carlo Miniussi"
},
+ {
+ "contributions": [
+ "data",
+ "tool"
+ ],
+ "login": "cecile_madjar",
+ "name": "Cecile Madjar"
+ },
{
"contributions": [
"doc"
@@ -1002,7 +1017,8 @@
"tool",
"eventOrganizing",
"fundingFinding",
- "infra"
+ "infra",
+ "talk"
],
"login": "francopestilli",
"name": "Franco Pestilli",
@@ -1461,6 +1477,13 @@
"name": "Jeanette Mumford",
"profile": "https://jeanettemumford.org/"
},
+ {
+ "contributions": [
+ "tool"
+ ],
+ "login": "jefferson_casimir",
+ "name": "Jefferson Casimir"
+ },
{
"contributions": [
"doc"
@@ -1799,6 +1822,13 @@
"name": "Kurt Schilling",
"profile": "https://github.com/schillkg"
},
+ {
+ "contributions": [
+ "tool"
+ ],
+ "login": "laetitia_fesselier",
+ "name": "Laetitia Fesselier"
+ },
{
"contributions": [
"financial"
@@ -2728,6 +2758,17 @@
"login": "stephan_bickel",
"name": "Stephan Bickel"
},
+ {
+ "contributions": [
+ "bug",
+ "code",
+ "question",
+ "tool",
+ "userTesting"
+ ],
+ "login": "smeisler",
+ "name": "Steven Meisler"
+ },
{
"avatar_url": "https://avatars.githubusercontent.com/u/11152799?v=4",
"contributions": [
@@ -2987,6 +3028,14 @@
"name": "Tristan Glatard",
"profile": "https://github.com/glatard"
},
+ {
+ "contributions": [
+ "data",
+ "tool"
+ ],
+ "login": "tyler_collins",
+ "name": "Tyler Collins"
+ },
{
"contributions": [
"doc"
@@ -3091,7 +3140,14 @@
"tool",
"question",
"bug",
- "code"
+ "code",
+ "data",
+ "fundingFinding",
+ "ideas",
+ "plugin",
+ "review",
+ "userTesting",
+ "infra"
],
"login": "yarikoptic",
"name": "Yaroslav O. Halchenko",
diff --git a/.circleci/config.yml b/.circleci/config.yml
index 9e6b41fa62..ee82d5b003 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -2,7 +2,7 @@ version: 2.1
jobs:
build_docs:
docker:
- - image: cimg/python:3.8
+ - image: cimg/python:3.12-node
steps:
# checkout code to default ~/project
- checkout
@@ -21,14 +21,15 @@ jobs:
- persist_to_workspace:
# the mkdocs build outputs are in ~/project/site
root: ~/project
- paths: site
+ paths:
+ - site
- store_artifacts:
path: ~/project/site/
destination: dev_docs
check_links:
docker:
- - image: cimg/python:3.8
+ - image: cimg/python:3.12
steps:
# checkout code to default ~/project
- checkout
@@ -131,7 +132,8 @@ jobs:
- persist_to_workspace:
# raw generated changelog in ~/changelog_build/CHANGES.md
root: ~/.
- paths: changelog_build
+ paths:
+ - changelog_build
# Lint and fix the auto generated changes.md file
lint_generated_changelog:
@@ -164,7 +166,8 @@ jobs:
- persist_to_workspace:
# linted and fixed changelog in ~/changelog_build/CHANGES.md
root: ~/.
- paths: changelog_build
+ paths:
+ - changelog_build
# Push built changelog to repo
commit_generated_changelog:
@@ -178,7 +181,7 @@ jobs:
- attach_workspace:
# fixed+linted changelog in ~/changelog_build/CHANGES.md
at: ~/.
- - deploy:
+ - run:
name: Changelog deployment
# $CHANGE_TOKEN is generated via the GitHub web UI, and then securely stored within CircleCI web UI
command: |
@@ -197,7 +200,6 @@ jobs:
fi
workflows:
- version: 2
search_build:
jobs:
- build_docs
diff --git a/.codespellrc b/.codespellrc
index 4092a9a7bf..22cd48ca96 100644
--- a/.codespellrc
+++ b/.codespellrc
@@ -1,6 +1,6 @@
[codespell]
skip = *.js,*.svg,*.eps,.git,node_modules,env,venv,.mypy_cache,package-lock.json,CITATION.cff,tools/new_contributors.tsv,./tools/schemacode/docs/build
-ignore-words-list = fo,te,als,Acknowledgements,acknowledgements,weill,bu,winn
+ignore-words-list = fo,te,als,Acknowledgements,acknowledgements,weill,bu,winn,manuel
builtin = clear,rare,en-GB_to_en-US
# this overloads default dictionaries and I have not yet figured out
# how to have multiple https://github.com/codespell-project/codespell/issues/2727
diff --git a/.github/workflows/schemacode_ci.yml b/.github/workflows/schemacode_ci.yml
index 8188370cdd..6cf4dbcd4c 100644
--- a/.github/workflows/schemacode_ci.yml
+++ b/.github/workflows/schemacode_ci.yml
@@ -26,8 +26,8 @@ jobs:
os: ["ubuntu-latest"]
python-version: ["3.11"]
steps:
- - uses: actions/checkout@v3
- - uses: actions/setup-python@v4
+ - uses: actions/checkout@v4
+ - uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- name: "Install build dependencies"
@@ -44,7 +44,7 @@ jobs:
run: python -m build tools/schemacode
- name: "Check distribution metadata"
run: twine check tools/schemacode/dist/*
- - uses: actions/upload-artifact@v3
+ - uses: actions/upload-artifact@v4
with:
name: dist
path: tools/schemacode/dist/
@@ -56,7 +56,7 @@ jobs:
fail-fast: false
matrix:
os: ["ubuntu-latest"]
- python-version: ["3.8", "3.9", "3.10", "3.11"]
+ python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"]
include:
- os: macos-latest
python-version: 3
@@ -64,18 +64,19 @@ jobs:
python-version: 3
name: ${{ matrix.os }} with Python ${{ matrix.python-version }}
steps:
- - uses: actions/checkout@v3
+ - uses: actions/checkout@v4
- name: "Set up Python"
- uses: actions/setup-python@v4
+ uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
+ allow-prereleases: true
- name: "Display Python version"
run: python -c "import sys; print(sys.version)"
- name: "Fetch packages"
- uses: actions/download-artifact@v3
+ uses: actions/download-artifact@v4
with:
name: dist
path: dist/
@@ -90,7 +91,7 @@ jobs:
--cov-append --cov-report=xml --cov=bidsschematools --doctest-modules
- name: Upload artifacts
- uses: actions/upload-artifact@v3
+ uses: actions/upload-artifact@v4
with:
name: unit_${{ matrix.os }}_${{ matrix.python-version }}
path: coverage.xml
@@ -107,7 +108,7 @@ jobs:
python-version: ["3.11"]
steps:
- name: "Fetch packages"
- uses: actions/download-artifact@v3
+ uses: actions/download-artifact@v4
with:
name: dist
path: dist/
@@ -129,12 +130,12 @@ jobs:
runs-on: ubuntu-latest
name: Validate schema
steps:
- - uses: actions/checkout@v3
+ - uses: actions/checkout@v4
- name: Set Up Python environment
- uses: actions/setup-python@v4
+ uses: actions/setup-python@v5
with:
- python-version: "3.9"
+ python-version: "3.11"
- name: Install the schemacode package
run: |
@@ -145,7 +146,7 @@ jobs:
run: python -m pytest --pyargs bidsschematools -m "validate_schema" --cov-append --cov-report=xml --cov=bidsschematools
- name: Upload artifacts
- uses: actions/upload-artifact@v3
+ uses: actions/upload-artifact@v4
with:
name: schema_validation
path: coverage.xml
@@ -157,13 +158,13 @@ jobs:
needs: [test, validate_schema]
steps:
- name: Checkout
- uses: actions/checkout@v3
+ uses: actions/checkout@v4
- name: Download artifacts
- uses: actions/download-artifact@v3
+ uses: actions/download-artifact@v4
- name: Upload to CodeCov
- uses: codecov/codecov-action@v3
+ uses: codecov/codecov-action@v4
with:
token: ${{ secrets.CODECOV_TOKEN }} # not required but might help API rate limits
fail_ci_if_error: true
diff --git a/.github/workflows/validation.yml b/.github/workflows/validation.yml
index 8e48d85bb6..5be42a5b18 100644
--- a/.github/workflows/validation.yml
+++ b/.github/workflows/validation.yml
@@ -16,15 +16,15 @@ jobs:
codespell:
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v3
+ - uses: actions/checkout@v4
- uses: codespell-project/actions-codespell@master
# Markdown formatting
remark:
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v3
- - uses: actions/setup-node@v3
+ - uses: actions/checkout@v4
+ - uses: actions/setup-node@v4
with:
node-version: 14
- name: Install dependencies
@@ -36,8 +36,8 @@ jobs:
yamllint:
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v3
- - uses: actions/setup-python@v4
+ - uses: actions/checkout@v4
+ - uses: actions/setup-python@v5
with:
python-version: 3
- name: Install dependencies
@@ -49,8 +49,8 @@ jobs:
python-style:
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v3
- - uses: actions/setup-python@v4
+ - uses: actions/checkout@v4
+ - uses: actions/setup-python@v5
with:
python-version: 3
- run: python -m pip install --upgrade flake8 black isort[colors]
@@ -63,8 +63,8 @@ jobs:
latin-phrases:
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v3
- - uses: actions/setup-python@v4
+ - uses: actions/checkout@v4
+ - uses: actions/setup-python@v5
with:
python-version: 3
- name: Install dependencies
@@ -86,8 +86,8 @@ jobs:
validate_cff:
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v3
- - uses: actions/setup-python@v4
+ - uses: actions/checkout@v4
+ - uses: actions/setup-python@v5
with:
python-version: 3
- name: Install dependencies
diff --git a/.gitignore b/.gitignore
index 59fa1a1de3..9e8cf66a91 100644
--- a/.gitignore
+++ b/.gitignore
@@ -7,6 +7,7 @@ venvs
pdf_build_src/bids-spec.pdf
pdf_build_src/bids-spec_pandoc_log.json
pdf_build_src/src_copy
+pdf_build_src/tests/data/output
# JS/NPM
package-lock.json
diff --git a/.lgtm.yml b/.lgtm.yml
deleted file mode 100644
index 0734210407..0000000000
--- a/.lgtm.yml
+++ /dev/null
@@ -1,8 +0,0 @@
----
-# This file contains configuration for the LGTM tool: https://lgtm.com/
-# The bids-specification repository is continuously scanned by the LGTM tool
-# for any security and/or code vulnerabilities. You can find the alert here:
-# https://lgtm.com/projects/g/bids-standard/bids-specification/
-queries:
- # https://lgtm.com/rules/6770079/
- - exclude: py/unused-import
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index a825e940d9..fcf475045e 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -3,7 +3,7 @@
exclude: 'tools/schemacode/bidsschematools/tests/data/broken_dataset_description.json'
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
- rev: v4.4.0
+ rev: v4.6.0
hooks:
- id: trailing-whitespace
- id: end-of-file-fixer
@@ -13,7 +13,7 @@ repos:
- id: check-added-large-files
- id: check-case-conflict
- repo: https://github.com/psf/black
- rev: 23.7.0
+ rev: 24.3.0
hooks:
- id: black
files: ^tools/(?!schemacode)
@@ -23,7 +23,7 @@ repos:
files: tools/schemacode
args: ["--config", "tools/schemacode/pyproject.toml", "--verbose"]
- repo: https://github.com/pyCQA/isort
- rev: 5.12.0
+ rev: 5.13.2
hooks:
- id: isort
files: ^tools/(?!schemacode)
@@ -33,22 +33,23 @@ repos:
files: tools/schemacode
args: ["--settings-file", "tools/schemacode/pyproject.toml"]
- repo: https://github.com/pyCQA/flake8
- rev: 6.1.0
+ rev: 7.0.0
hooks:
- id: flake8
args: [--config=tools/schemacode/setup.cfg]
- repo: https://github.com/pre-commit/mirrors-prettier
- rev: v3.0.2
+ rev: v4.0.0-alpha.8
hooks:
- id: prettier
+ entry: env PRETTIER_LEGACY_CLI=1 prettier # temporary fix for https://github.com/prettier/prettier/issues/15742
files: src/schema/.*/.*\.yaml
- repo: https://github.com/codespell-project/codespell
- rev: v2.2.5
+ rev: v2.2.6
hooks:
- id: codespell
args: ["--config=.codespellrc", "--dictionary=-", "--dictionary=.codespell_dict"]
- repo: https://github.com/pre-commit/mirrors-mypy
- rev: v1.5.1
+ rev: v1.9.0
hooks:
- id: mypy
# Sync with project.optional-dependencies.typing
diff --git a/.remarkrc b/.remarkrc
index fc065759c2..8d6c26487a 100644
--- a/.remarkrc
+++ b/.remarkrc
@@ -10,6 +10,7 @@
["lint-maximum-heading-length", false],
["lint-no-shortcut-reference-link", false],
["lint-no-trailing-spaces"],
+ ["remark-lint-code-block-style", false],
["lint-no-undefined-references", false]
]
}
diff --git a/.tributors b/.tributors
index b325271c22..fa5b1a18f2 100644
--- a/.tributors
+++ b/.tributors
@@ -174,6 +174,14 @@
],
"name": "Ali Khan"
},
+ "alizee_wickenheiser": {
+ "affiliation": "LORIS, MCIN, Montreal Neurological Institute, McGill University",
+ "contributions": [
+ "tool"
+ ],
+ "email": "alizee.wickenheiser@mcin.ca",
+ "name": "Alizee Wickenheiser"
+ },
"ana_fouto": {
"contributions": [
"userTesting"
@@ -407,6 +415,15 @@
"name": "Carlo Miniussi",
"orcid": "0000-0002-5436-4745"
},
+ "cecile_madjar": {
+ "affiliation": "LORIS, MCIN, Montreal Neurological Institute, McGill University",
+ "contributions": [
+ "data",
+ "tool"
+ ],
+ "email": "cecile.madjar@mcin.ca",
+ "name": "Cecile Madjar"
+ },
"chloé_pasturel": {
"contributions": [
"doc"
@@ -953,7 +970,8 @@
"tool",
"eventOrganizing",
"fundingFinding",
- "infra"
+ "infra",
+ "talk"
],
"name": "Franco Pestilli"
},
@@ -1401,6 +1419,14 @@
"name": "Jeanette Mumford",
"publish_email": false
},
+ "jefferson_casimir": {
+ "affiliation": "LORIS, MCIN, Montreal Neurological Institute, McGill University",
+ "contributions": [
+ "tool"
+ ],
+ "email": "jefferson.casimir@mcin.ca",
+ "name": "Jefferson Casimir"
+ },
"jeffrey_g_ojemann": {
"contributions": [
"doc"
@@ -1737,6 +1763,14 @@
],
"name": "Kurt Schilling"
},
+ "laetitia_fesselier": {
+ "affiliation": "LORIS, MCIN, Montreal Neurological Institute, McGill University",
+ "contributions": [
+ "tool"
+ ],
+ "email": "laetitia.fesselier@mcin.ca",
+ "name": "Laetitia Fesselier"
+ },
"laura_and_john_arnold_foundation": {
"contributions": [
"financial"
@@ -2649,6 +2683,20 @@
],
"name": "Stephan Bickel"
},
+ "smeisler": {
+ "affiliation": "Program in Speech and Hearing Bioscience and Technology, Harvard University",
+ "contributions": [
+ "bug",
+ "code",
+ "question",
+ "tool",
+ "userTesting"
+ ],
+ "email": "smeisler@g.harvard.edu",
+ "github": "smeisler",
+ "name": "Steven Meisler",
+ "orcid": "0000-0002-8888-1572"
+ },
"suyashdb": {
"blog": "https://www.linkedin.com/in/suyashb/",
"contributions": [
@@ -2907,6 +2955,15 @@
"name": "Tristan Glatard",
"orcid": "0000-0003-2620-5883"
},
+ "tyler_collins": {
+ "affiliation": "BrockU, LORIS, MCIN, Montreal Neurological Institute, McGill University",
+ "contributions": [
+ "data",
+ "tool"
+ ],
+ "email": "tyler.collins@mcin.ca",
+ "name": "Tyler Collins"
+ },
"ulrike_bingel": {
"contributions": [
"doc"
@@ -3006,7 +3063,14 @@
"tool",
"question",
"bug",
- "code"
+ "code",
+ "data",
+ "fundingFinding",
+ "ideas",
+ "plugin",
+ "review",
+ "userTesting",
+ "infra"
],
"email": "debian@onerussian.com",
"name": "Yaroslav O. Halchenko",
diff --git a/CITATION.cff b/CITATION.cff
index ef9976621b..23f53ad4bd 100644
--- a/CITATION.cff
+++ b/CITATION.cff
@@ -2,22 +2,30 @@
cff-version: 1.2.0
-title: bids-specification
+title: The Brain Imaging Data Structure (BIDS) Specification
-abstract:
- The Brain Imaging Data Structure (BIDS) is a simple and intuitive way to
- organize and describe data.
+abstract: >-
+ The Brain Imaging Data Structure (BIDS) is a simple and intuitive way to organize and describe data.
-version: v1.8.1-dev
+version: 1.10.0-dev
license: CC-BY-4.0
repository-code: https://github.com/bids-standard/bids-specification
-message: Please cite it as below.
+message: >-
+ To cite the BIDS specification, please follow the instructions here:
+ https://bids-specification.rtfd.io/en/latest/introduction.html#citing-bids
+ HTML versions of the BIDS specification can be browsed following this link:
+ https://bids-specification.rtfd.io
+ PDF versions of the BIDS specification can be found in the Zenodo archives
+ listed under "identifiers" below in the present `CITATION.cff` file.
identifiers:
- - description: bids-specification
+ - description: PDFs of the BIDS specification for versions 1.9.0 and above
+ type: doi
+ value: 10.5281/zenodo.10175845
+ - description: PDFs of the BIDS specification for versions 1.0.0 to 1.8.0
type: doi
value: 10.5281/zenodo.3686061
@@ -37,24 +45,20 @@ authors:
family-names: Thomas
website: https://cmn.nimh.nih.gov/dsst
orcid: https://orcid.org/0000-0002-2850-1419
- affiliation:
- NIMH, Intramural Research Program, Bethesda, MD, 20891, United States of
- America
+ affiliation: NIMH, Intramural Research Program, Bethesda, MD, 20891, USA
email: adamt@nih.gov
- given-names: Adeen
family-names: Flinker
website: http://flinkerlab.org
orcid: https://orcid.org/0000-0003-1247-1283
- affiliation:
- New York University, Department of Neurology, New York City, New York,
- 10016, United States of America
+ affiliation: New York University, Department of Neurology, New York City, New
+ York, 10016, USA
email: adeen@nyu.edu
- given-names: Adina S.
family-names: Wagner
website: https://www.adina-wagner.com
orcid: https://orcid.org/0000-0003-2917-3450
- affiliation:
- Institute of Neuroscience and Medicine (INM-7), Research Center Juelich,
+ affiliation: Institute of Neuroscience and Medicine (INM-7), Research Center Juelich,
Juelich, 52428, Germany
email: adina.wagner@t-online.de
- given-names: Agah
@@ -87,9 +91,8 @@ authors:
family-names: Cohen
website: https://bchcohenlab.com
orcid: https://orcid.org/0000-0001-6557-5866
- affiliation:
- Boston Children's Hospital, Department of Neurology, Boston, 02115, United
- States of America
+ affiliation: Boston Children's Hospital, Department of Neurology, Boston, MA,
+ 02115, USA
email: alexander.cohen2@childrens.harvard.edu
- given-names: Alexander
family-names: von Lautz
@@ -111,6 +114,10 @@ authors:
orcid: https://orcid.org/0000-0001-5160-1402
- given-names: Ali
family-names: Khan
+ - given-names: Alizee
+ family-names: Wickenheiser
+ affiliation: LORIS, MCIN, Montreal Neurological Institute, McGill University
+ email: alizee.wickenheiser@mcin.ca
- given-names: Ana
family-names: Fouto
- given-names: Anders
@@ -139,9 +146,8 @@ authors:
family-names: Rokem
website: https://arokem.org/
orcid: https://orcid.org/0000-0003-0679-1985
- affiliation:
- University of Washington, Psychology, Seattle, WA, 98107, United States of
- America
+ affiliation: University of Washington, Psychology, Seattle, WA, 98107, United
+ States of America
email: arokem@uw.edu
- given-names: Arjen
family-names: Stolk
@@ -158,9 +164,7 @@ authors:
family-names: Basavaraj
website: https://github.com/Arshitha
orcid: https://orcid.org/0000-0002-6984-7969
- affiliation:
- NIMH, Data Science and Sharing Team, Bethesda, MD, 20892, United States of
- America
+ affiliation: NIMH, Data Science and Sharing Team, Bethesda, MD, 20892, USA
email: arsh2794@gmail.com
- given-names: Ashley G.
family-names: Gillman
@@ -197,9 +201,8 @@ authors:
family-names: Voytek
website: https://www.voyteklab.com/
orcid: https://orcid.org/0000-0003-1640-2525
- affiliation:
- UC San Diego, Cognitive Science and Data Science, La Jolla, CA, 92093,
- United States of America
+ affiliation: UC San Diego, Cognitive Science and Data Science, La Jolla, CA, 92093,
+ USA
- given-names: Brett L.
family-names: Foster
- given-names: Brian A.
@@ -215,6 +218,10 @@ authors:
family-names: Miniussi
orcid: https://orcid.org/0000-0002-5436-4745
affiliation: University of Trento
+ - given-names: Cecile
+ family-names: Madjar
+ affiliation: LORIS, MCIN, Montreal Neurological Institute, McGill University
+ email: cecile.madjar@mcin.ca
- given-names: Chloé
family-names: Pasturel
- given-names: Chris
@@ -235,9 +242,8 @@ authors:
family-names: Rorden
website: https://www.mricro.com
orcid: https://orcid.org/0000-0002-7554-6142
- affiliation:
- University of South Carolina, Department of Psychology, Columbia, SC,
- 29016, United States of America
+ affiliation: University of South Carolina, Department of Psychology, Columbia,
+ SC, 29016, USA
email: crorden6@gmail.com
- given-names: Christian
family-names: Büchel
@@ -245,29 +251,26 @@ authors:
family-names: Horea
website: http://www.chymera.eu
orcid: https://orcid.org/0000-0001-7037-2449
- affiliation: Dartmouth College, PBS, Hanover, NH, United States of America
+ affiliation: Dartmouth College, PBS, Hanover NH/USA
email: chr@chymera.eu
- given-names: Christine
family-names: Rogers
orcid: https://orcid.org/0000-0002-9893-8448
- affiliation:
- McGill Centre for Integrative Neuroscience, Montreal Neurological
- Institute, Montréal, Québec, Canada
+ affiliation: McGill Centre for Integrative Neuroscience, Montreal Neurological
+ Institute
email: christine.rogers@mcgill.ca
- given-names: Christophe
family-names: Phillips
website: https://www.uliege.be/cms/c_9054334/en/directory/?uid=U016440
orcid: https://orcid.org/0000-0002-4990-425X
- affiliation:
- University of Liège, GIGA CRC in vivo imaging, Liège, 4000, Belgium
+ affiliation: University of Liège, GIGA CRC in vivo imaging, Liège, 4000, Belgium
email: c.phillips@uliege.be
- given-names: Christopher J.
family-names: Honey
website: https://www.honeylab.org
orcid: https://orcid.org/0000-0002-0745-5089
- affiliation:
- Johns Hopkins University, Psychological and Brain Sciences, Baltimore, MD,
- 21218, United States of America
+ affiliation: Johns Hopkins University, Psychological and Brain Sciences, Baltimore,
+ MD, 21218, United States
- given-names: Christopher J.
family-names: Markiewicz
website: https://github.com/effigies
@@ -284,9 +287,8 @@ authors:
family-names: Pernet
website: https://cpernet.github.io/
orcid: https://orcid.org/0000-0003-4010-4632
- affiliation:
- Neurobiology Research Unit, Copenhagen University Hospital
- Rigshospitalet, DK-2100 Copenhagen, Denmark
+ affiliation: Neurobiology Research Unit, Copenhagen University Hospital Rigshospitalet,
+ DK-2100 Copenhagen, Denmark
email: wamcyril@gmail.com
- given-names: Cyrus
family-names: Eierud
@@ -301,9 +303,8 @@ authors:
family-names: Levitas
website: https://github.com/dlevitas
orcid: https://orcid.org/0000-0003-2279-7447
- affiliation:
- Indiana University, Psychological & Brain Sciences, Bloomington, IN,
- 47405, United States of America
+ affiliation: Indiana University, Psychological & Brain Sciences, Bloomington,
+ IN, 47405, USA
email: dlevitas@iu.edu
- given-names: Dan
family-names: Lurie
@@ -316,16 +317,13 @@ authors:
family-names: Boas
website: http://bu.edu/neurophotonics
orcid: https://orcid.org/0000-0002-6709-7711
- affiliation:
- Boston University, Biomedical Engineering, Boston, 02215, United States of
- America
+ affiliation: Boston University, Biomedical Engineering, Boston, MA 02215 USA
email: dboas@bu.edu
- given-names: David
family-names: Groppe
website: https://github.com/dmgroppe
orcid: https://orcid.org/0000-0002-3282-2514
- affiliation:
- Persyst Development Corporation, R&D, Toronto, ON M4K 1W8 Canada
+ affiliation: Persyst Development Corporation, R&D, Toronto, ON M4K 1W8 Canada
email: david.m.groppe@gmail.com
- given-names: David
family-names: Keator
@@ -344,8 +342,7 @@ authors:
family-names: Patterson
website: https://profiles.arizona.edu/person/dkp
orcid: https://orcid.org/0000-0001-7518-3110
- affiliation:
- University of Arizona, RII, Tucson Arizona 85721 United States of America
+ affiliation: University of Arizona, RII, Tucson Arizona 85721 USA
email: dkp@arizona.edu
- given-names: Dimitri
family-names: Papadopoulos Orfanos
@@ -378,23 +375,20 @@ authors:
family-names: Ort
website: https://github.com/eort
orcid: https://orcid.org/0000-0001-5546-3561
- affiliation:
- Heinrich-Heine-University, Department of Experimental Psychology,
+ affiliation: Heinrich-Heine-University, Department of Experimental Psychology,
Dusseldorf, 40224, Germany
- given-names: Eleonora
family-names: Marcantoni
orcid: https://orcid.org/0000-0003-1137-4983
- affiliation:
- IRCCS Istituto Centro San Giovanni di Dio Fatebenefratelli di Brescia
+ affiliation: IRCCS Istituto Centro San Giovanni di Dio Fatebenefratelli di Brescia
- given-names: Elizabeth
family-names: Bock
- given-names: Elizabeth
family-names: DuPre
website: https://elizabeth-dupre.com
orcid: https://orcid.org/0000-0003-1358-196X
- affiliation:
- Stanford University, Department of Psychology, Stanford, CA, 94063, United
- States of America
+ affiliation: Stanford University, Department of Psychology, Stanford, CA, 94063,
+ USA
- given-names: Elke
family-names: Warmerdam
affiliation: Saarland University
@@ -406,9 +400,7 @@ authors:
family-names: Earl
website: https://ericearl.github.io/
orcid: https://orcid.org/0000-0001-5512-0083
- affiliation:
- NIMH Data Science & Sharing Team, Bethesda, MD, 20892, United States of
- America
+ affiliation: NIMH Data Science & Sharing Team, Bethesda, MD, 20892, USA
email: eric.earl@nih.gov
- given-names: Eric
family-names: Achten
@@ -444,8 +436,7 @@ authors:
family-names: Maria Castelli
website: https://github.com/filippocastelli
orcid: https://orcid.org/0000-0001-8170-8905
- affiliation:
- University of Florence, European Laboratory for NonLinear Spectroscopy,
+ affiliation: University of Florence, European Laboratory for NonLinear Spectroscopy,
Sesto Fiorentino, (FI), 50019, Italy
email: castelli@lens.unifi.it
- given-names: Franco
@@ -462,16 +453,14 @@ authors:
family-names: Rizzo
website: http://fair.dei.unipd.it/gaia-rizzo/
orcid: https://orcid.org/0000-0001-7272-8576
- affiliation:
- Invicro, Burlington Danes Building, Imperial College London, Hammersmith
+ affiliation: Invicro, Burlington Danes Building, Imperial College London, Hammersmith
Hospital, Du Cane Road, London, W12 0NN, UK
- given-names: Gang
family-names: Chen
website: https://github.com/afni-gangc
orcid: https://orcid.org/0000-0002-2960-089X
- affiliation:
- National Institutes of Health, Scientific and Statistical Computing Core,
- NIMH, Bethesda, MD 20892, United States of America
+ affiliation: National Institutes of Health, Scientific and Statistical Computing
+ Core, NIMH, Bethesda, MD 20892, USA
email: gangchen@mail.nih.gov
- given-names: Gaël
family-names: Varoquaux
@@ -537,8 +526,7 @@ authors:
family-names: Nilsonne
website: https://nilsonne.net/about/
orcid: https://orcid.org/0000-0001-5273-0150
- affiliation:
- Karolinska Institutet, Department of Clinical Neuroscience, Stockholm,
+ affiliation: Karolinska Institutet, Department of Clinical Neuroscience, Stockholm,
17177, Sweden
email: gustav.nilsonne@ki.se
- given-names: Hamish
@@ -549,9 +537,8 @@ authors:
- given-names: Hanne D.
family-names: Hansen
orcid: https://orcid.org/0000-0001-5564-7627
- affiliation:
- Copenhagen University Hospital, Neurobiology Research Unit, Section 8057,
- Blegdamsvej 9, 2100 Copenhagen, Denmark
+ affiliation: Copenhagen University Hospital, Neurobiology Research Unit, Section
+ 8057, Blegdamsvej 9, 2100 Copenhagen, Denmark
email: hanne.d.hansen@nru.dk
- given-names: Hanzhang
family-names: Lu
@@ -573,8 +560,7 @@ authors:
family-names: Mutsaerts
website: http://www.ExploreASL.org
orcid: https://orcid.org/0000-0003-0894-0307
- affiliation:
- Amsterdam University Medical Centers, Radiology and Nuclear Department,
+ affiliation: Amsterdam University Medical Centers, Radiology and Nuclear Department,
Amsterdam, 1013 EG, The Netherlands
email: h.j.mutsaerts@amsterdamumc.nl
- given-names: Hernando
@@ -615,9 +601,8 @@ authors:
family-names: Mathijs Schoffelen
website: https://github.com/schoffelen
orcid: https://orcid.org/0000-0003-0923-6610
- affiliation:
- Radboud University Nijmegen, Donders Institute, Nijmegen, 6500 HB, The
- Netherlands
+ affiliation: Radboud University Nijmegen, Donders Institute, Nijmegen, 6500 HB,
+ The Netherlands
email: jm.schoffelen@gmail.com
- given-names: Jan
family-names: Petr
@@ -640,9 +625,8 @@ authors:
- given-names: Jean-Dominique
family-names: Gallezot
orcid: https://orcid.org/0000-0003-0399-8374
- affiliation:
- Yale School of Medicine, Department of Radiology and Biomedical Imaging,
- New Haven, CT, 06511, United States of America
+ affiliation: Yale School of Medicine, Department of Radiology and Biomedical Imaging,
+ New Haven, CT, 06511, USA
email: jean-dominique.gallezot@yale.edu
- given-names: Jean-Philippe
family-names: Lachaux
@@ -652,6 +636,10 @@ authors:
family-names: Mumford
website: https://jeanettemumford.org/
affiliation: Stanford, Department of Psychology, Stanford, CA
+ - given-names: Jefferson
+ family-names: Casimir
+ affiliation: LORIS, MCIN, Montreal Neurological Institute, McGill University
+ email: jefferson.casimir@mcin.ca
- given-names: Jeffrey G.
family-names: Ojemann
- given-names: Jeffrey S.
@@ -663,10 +651,8 @@ authors:
family-names: Dalenberg
website: https://github.com/jrdalenberg
orcid: https://orcid.org/0000-0001-8580-5358
- affiliation:
- University of Groningen, University Medical Center Groningen, Department
- of Neurology, Movement Disorders Groningen, Hanzeplein 1, 9713 GZ,
- Groningen
+ affiliation: University of Groningen, University Medical Center Groningen, Department
+ of Neurology, Movement Disorders Groningen, Hanzeplein 1, 9713 GZ, Groningen
email: j.r.dalenberg@umcg.nl
- given-names: Jeremy
family-names: Moreau
@@ -697,8 +683,7 @@ authors:
family-names: Haitz Legarreta Gorroño
website: https://github.com/jhlegarreta
orcid: https://orcid.org/0000-0002-9661-1396
- affiliation:
- Université de Sherbrooke, Department of Computer Science, Sherbrooke,
+ affiliation: Université de Sherbrooke, Department of Computer Science, Sherbrooke,
(Québec), J1K 2R1, Canada
email: jon.haitz.legarreta@gmail.com
- given-names: Jonathan C.
@@ -710,8 +695,7 @@ authors:
family-names: Kuijer
website: https://github.com/wadqc
orcid: https://orcid.org/0000-0002-4181-0427
- affiliation:
- Amsterdam University Medical Centers, Radiology and Nuclear Medicine,
+ affiliation: Amsterdam University Medical Centers, Radiology and Nuclear Medicine,
Amsterdam, 1081 HV, The Netherlands
email: jpa.kuijer@amsterdamumc.nl
- given-names: Jose
@@ -724,8 +708,7 @@ authors:
family-names: Woods
website: https://www.ndcn.ox.ac.uk/team/joseph-woods
orcid: https://orcid.org/0000-0002-0329-824X
- affiliation:
- University of Oxford, Nuffield Department of Clinical Neuroscience,
+ affiliation: University of Oxford, Nuffield Department of Clinical Neuroscience,
Oxford, UK
email: joseph.woods@ndcn.ox.ac.uk
- given-names: Julia
@@ -737,15 +720,13 @@ authors:
family-names: Sprenger
website: https://github.com/juliasprenger
orcid: https://orcid.org/0000-0002-9986-7477
- affiliation:
- Institute de Neuroscience de la Timone, CNRS, Marseille, 13005, France
+ affiliation: Institute de Neuroscience de la Timone, CNRS, Marseille, 13005, France
email: julia.sprenger@univ-amu.fr
- given-names: Julien
family-names: Cohen-Adad
website: https://www.neuro.polymtl.ca
orcid: https://orcid.org/0000-0003-3662-9532
- affiliation:
- Polytechnique Montreal, Department of Electrical Engineering, Montreal,
+ affiliation: Polytechnique Montreal, Department of Electrical Engineering, Montreal,
QC, Canada
- given-names: Julius
family-names: Welzel
@@ -769,9 +750,8 @@ authors:
family-names: Robbins
website: http://www.cs.utsa.edu/~krobbins
orcid: https://orcid.org/0000-0002-7147-5797
- affiliation:
- University of Texas at San Antonio Department of Computer Science San
- Antonio, TX 78249 United States of America
+ affiliation: University of Texas at San Antonio Department of Computer Science
+ San Antonio, TX 78249 USA
email: kay.robbins@utsa.edu
- given-names: Kevin
family-names: Larcher
@@ -806,13 +786,16 @@ authors:
- given-names: Kurt
family-names: Schilling
website: https://github.com/schillkg
+ - given-names: Laetitia
+ family-names: Fesselier
+ affiliation: LORIS, MCIN, Montreal Neurological Institute, McGill University
+ email: laetitia.fesselier@mcin.ca
- given-names: Laura
family-names: and John Arnold Foundation
- given-names: Leandro
family-names: Beltrachini
orcid: https://orcid.org/0000-0003-4602-1416
- affiliation:
- Cardiff University, Cardiff University Brain Research Imaging Centre
+ affiliation: Cardiff University, Cardiff University Brain Research Imaging Centre
(CUBRIC), UK
email: BeltrachiniL@cardiff.ac.uk
- given-names: Lee
@@ -835,9 +818,8 @@ authors:
family-names: Pollonini
website: https://polloninilab.com
orcid: https://orcid.org/0000-0003-2955-6355
- affiliation:
- University of Houston, Dept. of Engineering Technology, Houston TX 77204,
- United States of America
+ affiliation: University of Houston, Dept. of Engineering Technology, Houston TX
+ 77204, USA
email: lpollonini@uh.edu
- given-names: Luis
family-names: Hernandez-Garcia
@@ -849,7 +831,7 @@ authors:
family-names: Zehl
website: https://github.com/lzehl
orcid: https://orcid.org/0000-0002-5947-9939
- affiliation: Forschungszentrum Jülich, Jülich, 52428, Germany
+ affiliation: Forschungszentrum Jülich
- given-names: Mainak
family-names: Jas
website: http://jasmainak.github.io/
@@ -859,8 +841,7 @@ authors:
- given-names: Manuel
family-names: Mercier
orcid: https://orcid.org/0000-0001-6358-4734
- affiliation:
- Dynamics of Cognitive Processes Group Institut de Neurosciences des
+ affiliation: Dynamics of Cognitive Processes Group Institut de Neurosciences des
Systèmes, INS - UMR 1106 Inserm Aix-Marseille Université, France
- given-names: Maqsood
family-names: Yaqub
@@ -870,22 +851,21 @@ authors:
family-names: Lalancette
website: https://github.com/Moo-Marc
orcid: https://orcid.org/0000-0003-1161-3972
- affiliation:
- Montreal Neurological Institute-Hospital, McConnell Brain Imaging Center,
- Montreal, Quebec, H2A
+ affiliation: Montreal Neurological Institute-Hospital, McConnell Brain Imaging
+ Center, Montreal, Quebec, H2A
- given-names: Marco
family-names: Castellaro
website: https://github.com/marcocastellaro
orcid: https://orcid.org/0000-0002-1203-2670
- affiliation:
- University of Padova, Department of Information Engineering, Padova, Italy
+ affiliation: University of Padova, Department of Information Engineering, Padova,
+ Italy
email: marco.castellaro@gmail.com
- given-names: Maria
family-names: de la Iglesia
website: https://bimcv.cipf.es
orcid: https://orcid.org/0000-0003-4505-8399
- affiliation:
- FISABIO, Join Unit Biomedical Imagin, Valencia, Valencia, 46006, Spain
+ affiliation: FISABIO, Join Unit Biomedical Imagin, Valencia, Valencia, 46006,
+ Spain
email: delaiglesia_mar@gva.es
- given-names: Marie-Hélène
family-names: Bourget
@@ -894,9 +874,8 @@ authors:
family-names: Mikkelsen
website: https://vivo.weill.cornell.edu/display/cwid-mam4041
orcid: https://orcid.org/0000-0002-0349-3782
- affiliation:
- Weill Cornell Medicine, Department of Radiology, New York, NY, 10021,
- United States of America
+ affiliation: Weill Cornell Medicine, Department of Radiology, New York, NY, 10021,
+ USA
email: mam4041@med.cornell.edu
- given-names: Markus
family-names: Morawski
@@ -912,16 +891,14 @@ authors:
family-names: Noergaard
website: https://profiles.stanford.edu/martin-noergaard
orcid: https://orcid.org/0000-0003-2131-5688
- affiliation:
- Stanford University, Department of Psychology, CA, 94304, United States of
- America
+ affiliation: Stanford University, Department of Psychology, CA, 94304, USA
email: noergard@stanford.edu
- given-names: Martin
family-names: Szinte
website: http://www.martinszinte.net
orcid: https://orcid.org/0000-0003-2040-4005
- affiliation:
- CNRS, Institut des Neurosciences de la Timone, Marseille, 13008, France
+ affiliation: CNRS, Institut des Neurosciences de la Timone, Marseille, 13008,
+ France
email: mail@martinszinte.net
- given-names: Martin
family-names: Wilson
@@ -937,9 +914,8 @@ authors:
family-names: Goncalves
website: https://github.com/mgxd
orcid: https://orcid.org/0000-0002-7252-7771
- affiliation:
- Psychology Department, Stanford University, Palo Alto, CA, 94305, United
- States of America
+ affiliation: Psychology Department, Stanford University, Palo Alto, CA, 94305,
+ USA
email: mathiasg@stanford.edu
- given-names: Mathieu
family-names: Boudreau
@@ -952,8 +928,7 @@ authors:
family-names: Tonietto
website: https://github.com/matteotonietto
orcid: https://orcid.org/0000-0001-9591-5710
- affiliation:
- Hoffmann-La Roche Ltd, Research and Early Development, Basel, 4070,
+ affiliation: Hoffmann-La Roche Ltd, Research and Early Development, Basel, 4070,
Switzerland
- given-names: Matthias
family-names: Günther
@@ -967,16 +942,13 @@ authors:
family-names: van den Boom
website: https://github.com/MaxvandenBoom
orcid: https://orcid.org/0000-0001-5481-1659
- affiliation:
- Mayo Clinic, Department of neurosurgery, Rochester, MN, United States of
- America
+ affiliation: Mayo Clinic, Department of neurosurgery, Rochester, MN, USA
email: m.a.vandenboom84@gmail.com
- given-names: Melanie
family-names: Ganz-Benjaminsen
website: https://sites.google.com/view/melanieganz/home
orcid: https://orcid.org/0000-0002-9120-8098
- affiliation:
- University of Copenhagen, Department of Computer Science, Copenhagen,
+ affiliation: University of Copenhagen, Department of Computer Science, Copenhagen,
2100, Denmark
- given-names: Michael
family-names: Chappell
@@ -993,8 +965,7 @@ authors:
family-names: Schirner
website: https://www.brainsimulation.org
orcid: https://orcid.org/0000-0001-8227-8476
- affiliation:
- Charité—Universitätsmedizin Berlin, Department of Neurology, Berlin,
+ affiliation: Charité—Universitätsmedizin Berlin, Department of Neurology, Berlin,
10115, Germany
email: michael.schirner@charite.de
- given-names: Mikaël
@@ -1008,8 +979,7 @@ authors:
- given-names: Natalia
family-names: Petridou
orcid: https://orcid.org/0000-0002-0783-0387
- affiliation:
- High Field Dpt, Center for Image Sciences, University Medical Center
+ affiliation: High Field Dpt, Center for Image Sciences, University Medical Center
Utrecht, 3584 CX Utrecht, NL
- given-names: National
family-names: Institute of Mental Health
@@ -1036,9 +1006,8 @@ authors:
family-names: Esteban
website: http://www.axonlab.org
orcid: https://orcid.org/0000-0001-8435-6191
- affiliation:
- Department of Radiology, Lausanne University Hospital, Lausanne, CH-1011,
- Switzerland
+ affiliation: Department of Radiology, Lausanne University Hospital, Lausanne,
+ CH-1011, Switzerland
email: phd@oscaresteban.es
- given-names: Pamela
family-names: LaMontagne
@@ -1050,8 +1019,7 @@ authors:
family-names: Clement
website: https://github.com/patsycle
orcid: https://orcid.org/0000-0001-8546-0134
- affiliation:
- Department of Medical Imaging / Department of Medical Sciences, Ghent
+ affiliation: Department of Medical Imaging / Department of Medical Sciences, Ghent
University Hospital / Ghent University, Ghent, Belgium
email: patricia.clement@ugent.be
- given-names: Patrick
@@ -1060,25 +1028,20 @@ authors:
- given-names: Paule-Joanne
family-names: Toussaint
orcid: https://orcid.org/0000-0002-7446-150X
- affiliation:
- McGill University Faculty of Medicine and Health Sciences, Montréal,
- Québec, Canada
+ affiliation: McGill University Faculty of Medicine and Health Sciences
- given-names: Peer
family-names: Herholz
website: https://peerherholz.github.io/
orcid: https://orcid.org/0000-0002-9840-6257
- affiliation:
- NeuroDataScience - ORIGAMI lab, McConnell Brain Imaging Centre, Montreal
- Neurological Institute and Hospital, McGill University, Montreal, Québec,
- Canada
+ affiliation: NeuroDataScience - ORIGAMI lab, McConnell Brain Imaging Centre, Montreal
+ Neurological Institute and Hospital, McGill University, Montreal, Québec, Canada
email: herholz.peer@gmail.com
- given-names: Petra
family-names: Ritter
website: https://www.brainsimulation.org
orcid: https://orcid.org/0000-0002-4643-4782
- affiliation:
- Charité University Medicine Berlin, Berlin Institute of Health, Berlin,
- 10115, Germany
+ affiliation: Charité University Medicine Berlin, Berlin Institute of Health,
+ Berlin, 10115, Germany
email: petra.ritter@charite.de
- given-names: Pierre
family-names: Rioux
@@ -1116,16 +1079,13 @@ authors:
family-names: Innis
website: https://www.nimh.nih.gov/research/research-conducted-at-nimh/research-areas/clinics-and-labs/mib/molecular-imaging-branch-mib
orcid: https://orcid.org/0000-0003-1238-7209
- affiliation:
- NIMH Intramural Research Program, Bethesda, MD 20850 United States of
- America, MD 20892 United States of America
+ affiliation: NIMH Intramural Research Program, Bethesda, MD 20850 USA, MD 20892 USA
email: robert.innis@nih.gov
- given-names: Robert E.
family-names: Smith
website: http://www.mrtrix.org
orcid: https://orcid.org/0000-0003-3636-4642
- affiliation:
- The Florey Institute of Neuroscience and Mental Health, Epilepsy
+ affiliation: The Florey Institute of Neuroscience and Mental Health, Epilepsy
Neuroinformatics Laboratory, Heidelberg, Victoria, 3084, Australia
email: robert.smith@florey.edu.au
- given-names: Robert
@@ -1137,8 +1097,7 @@ authors:
family-names: Oostenveld
website: https://robertoostenveld.nl
orcid: https://orcid.org/0000-0002-1974-1293
- affiliation:
- Radboud University, Donders Institute, Nijmegen, 6525 EN, The Netherlands
+ affiliation: Radboud University, Donders Institute, Nijmegen, 6525 EN, The Netherlands
email: r.oostenveld@donders.ru.nl
- given-names: Roberto
family-names: Toro
@@ -1152,8 +1111,7 @@ authors:
family-names: Poldrack
website: http://www.poldracklab.org
orcid: https://orcid.org/0000-0001-6755-0259
- affiliation:
- Stanford University, Stanford, CA 94305 United States of America
+ affiliation: Stanford University, Stanford, CA 94305 USA
email: russpold@stanford.edu
- given-names: Rémi
family-names: Adon
@@ -1174,25 +1132,22 @@ authors:
- given-names: Sasha
family-names: D'Ambrosio
orcid: https://orcid.org/0000-0002-6600-6419
- affiliation:
- University of Milan, Department of Biomedical and Clinical Sciences,
+ affiliation: University of Milan, Department of Biomedical and Clinical Sciences,
Milan, 20137, Italy
email: sasha.dambrosio@unimi.it
- given-names: Satrajit S.
family-names: Ghosh
website: https://satra.cogitatum.org
orcid: https://orcid.org/0000-0002-5312-6729
- affiliation:
- MIT, McGovern Institute for Brain Research, Cambridge, 02139, United
- States of America
+ affiliation: MIT, McGovern Institute for Brain Research, Cambridge, MA 02139,
+ USA
email: satra@mit.edu
- given-names: Scott
family-names: Makeig
website: https://sccn.ucsd.edu/~scott
orcid: https://orcid.org/0000-0002-9048-8438
- affiliation:
- Institute for Neural Computation, University of California San Diego, La
- Jolla, CA 92-93-0955, United States of America
+ affiliation: Institute for Neural Computation, University of California San Diego,
+ La Jolla, CA 92-93-0955, USA
email: smakeig@gmail.com
- given-names: Sein
family-names: Jeung
@@ -1206,8 +1161,7 @@ authors:
family-names: Vos
website: https://research-repository.uwa.edu.au/en/persons/sjoerd-vos
orcid: https://orcid.org/0000-0002-8502-4487
- affiliation:
- University of Western Australia;Centre for Microscopy, Characterisation,
+ affiliation: University of Western Australia;Centre for Microscopy, Characterisation,
and Analysis;Perth;WA;6009;Australia
- given-names: Soichi
family-names: Hayashi
@@ -1222,6 +1176,12 @@ authors:
email: stefan.appelhoff@mailbox.org
- given-names: Stephan
family-names: Bickel
+ - given-names: Steven
+ family-names: Meisler
+ orcid: https://orcid.org/0000-0002-8888-1572
+ affiliation: Program in Speech and Hearing Bioscience and Technology, Harvard
+ University
+ email: smeisler@g.harvard.edu
- given-names: Suyash
family-names: Bhogawar
website: https://www.linkedin.com/in/suyashb/
@@ -1232,15 +1192,13 @@ authors:
family-names: Takerkart
website: https://github.com/SylvainTakerkart
orcid: https://orcid.org/0000-0001-8410-0962
- affiliation:
- CNRS, Institut des Neurosciences de la Timone, Marseille, France
+ affiliation: CNRS, Institut de Neurosciences de la Timone (INT), Marseille, France
email: sylvain.takerkart@univ-amu.fr
- given-names: Sébastien
family-names: Tourbier
website: https://github.com/sebastientourbier
orcid: https://orcid.org/0000-0002-4441-899X
- affiliation:
- Lausanne University Hospital (CHUV), Department of Clinical Neurosciences
+ affiliation: Lausanne University Hospital (CHUV), Department of Clinical Neurosciences
(DNC), Lausanne, 1007, Switzerland
email: sebastien.tourbier1@gmail.com
- given-names: Sören
@@ -1258,10 +1216,8 @@ authors:
family-names: Spisak
website: https://pni-lab.github.io/
orcid: https://orcid.org/0000-0002-2942-0821
- affiliation:
- University Hospital Essen, Center for Translational and Behavioral
- Neuroscience, Department of Diagnostic and Interventional Radiology and
- Neuroradiology
+ affiliation: University Hospital Essen, Center for Translational and Behavioral
+ Neuroscience, Department of Diagnostic and Interventional Radiology and Neuroradiology
email: tamas.spisak@uk-essen.de
- given-names: Tamás
family-names: Józsa
@@ -1269,9 +1225,8 @@ authors:
family-names: Salo
website: https://tsalo.github.io
orcid: https://orcid.org/0000-0001-9813-3167
- affiliation:
- University of Pennsylvania, Department of Psychiatry, Philadelphia,
- Pennsylvania, 19104, United States of America
+ affiliation: University of Pennsylvania, Department of Psychiatry, Philadelphia,
+ Pennsylvania, 19104, United States
email: tsalo006@fiu.edu
- given-names: Teon L.
family-names: Brooks
@@ -1297,16 +1252,15 @@ authors:
family-names: Auer
website: https://tiborauer.github.io
orcid: https://orcid.org/0000-0001-5153-1424
- affiliation:
- University of Surrey, School of Psychology, Guildford, GU2 7XH, UK
+ affiliation: University of Surrey, School of Psychology, Guildford, GU2 7XH, United
+ Kingdom
email: tibor.auer@gmail.com
- given-names: Timo
family-names: Dickscheid
website: https://go.fzj.de/dickscheid
orcid: https://orcid.org/0000-0002-9051-3701
- affiliation:
- Forschungszentrum Jülich, Institute of Neuroscience and Medicine, Jülich,
- 52428, Germany
+ affiliation: Forschungszentrum Jülich, Institute of Neuroscience and Medicine
+ (INM-1), Jülich, 52428, Germany
email: t.dickscheid@fz-juelich.de
- given-names: Timotheus
family-names: Berg
@@ -1335,6 +1289,10 @@ authors:
family-names: Glatard
website: https://github.com/glatard
orcid: https://orcid.org/0000-0003-2620-5883
+ - given-names: Tyler
+ family-names: Collins
+ affiliation: BrockU, LORIS, MCIN, Montreal Neurological Institute, McGill University
+ email: tyler.collins@mcin.ca
- given-names: Ulrike
family-names: Bingel
orcid: https://orcid.org/0000-0002-9528-3204
@@ -1347,10 +1305,9 @@ authors:
- given-names: Vince D.
family-names: Calhoun
website: http://trendscenter.org
- affiliation:
- Tri-institutional Center for Translational Research in Neuroimaging and
- Data Science (TReNDS), Georgia State, Georgia Tech, and Emory, Atlanta, GA
- 30030
+ affiliation: Tri-institutional Center for Translational Research in Neuroimaging
+ and Data Science (TReNDS), Georgia State, Georgia Tech, and Emory, Atlanta,
+ GA 30030
email: vcalhoun@gsu.edu
- given-names: Vittorio
family-names: Iacovella
@@ -1372,13 +1329,13 @@ authors:
- given-names: Xiangrui
family-names: Li
website: https://github.com/xiangruili
- affiliation: The Ohio State University, United States of America
+ affiliation: The Ohio State University
email: xiangrui.li@gmail.com
- given-names: Yaroslav O.
family-names: Halchenko
website: http://www.onerussian.com
orcid: https://orcid.org/0000-0003-3456-2493
- affiliation: Dartmouth College, United States of America
+ affiliation: Dartmouth College
email: debian@onerussian.com
- given-names: Yoni
family-names: Ashar
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 40fae2e3ea..c34f9cb514 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -163,7 +163,7 @@ The BIDS specification is written in American English.
We follow certain "soft rules" in the way we format the specification in Markdown.
-These rules are sometimes for internal consistency in terms of styling and aesthetics,
+These rules are sometimes for internal consistency in terms of styling and esthetics,
but several of them are also there because they help the workflow of
tracking changes, reviewing them on GitHub, and making code suggestions.
@@ -226,6 +226,37 @@ That would look like this:
|--------------|----------------------------------------------------------|
| Manufacturer | Manufacturer of the equipment, for example (`"Siemens"`) |
+
+#### MkDocs admonitions
+
+It is possible to use [Mkdocs admonitions](https://squidfunk.github.io/mkdocs-material/reference/admonitions/#inline-blocks-inline-end)
+to highlight certain aspect of the specification.
+
+Admonitions are written like this:
+
+````
+!!! note "displayed heading is preceded by a keyword and 3 `!`"
+
+ Body of the admonition
+ can be written on several lines,
+ but must be always preceded by 4 spaces.
+````
+
+The keyword for the heading must be one of the following:
+
+- note
+- abstract
+- info
+- tip
+- success
+- question
+- warning
+- failure: octicons
+- danger
+- bug
+- example
+- quote
+
## Using macros
We use [mkdocs-macros](https://mkdocs-macros-plugin.readthedocs.io/en/latest/)
@@ -698,6 +729,8 @@ the `master` branch of the specification via a "Merge commit"
see the [GitHub help page](https://help.github.com/en/articles/about-merge-methods-on-github)
for more information on merge methods).
+![merge-commit](release_images/merge_commit.png "merge-commit")
+
Note that for pull requests starting with `REL:`, no changelog is generated.
To exclude pull requests from showing up in the changelog, they have to be labeled with
@@ -709,16 +742,14 @@ BIDS follows the
[all-contributors](https://github.com/kentcdodds/all-contributors)
specification, so we welcome and recognize all contributions from documentation
to testing to code development.
-You can see a list of current contributors in the
-[BIDS specification](https://github.com/bids-standard/bids-specification/blob/master/src/appendices/contributors.md).
-
-If you have made any type of contributions to the BIDS specifications, you can
-either make a change to the
-[contributors document](./src/appendices/contributors.md) and commit as
-part of a pull request or you can edit this
-[page](https://github.com/bids-standard/bids-specification/wiki/Recent-Contributors)
-of the specification WIKI.
-The WIKI is then synced with the specification with every new release of the specifications.
+You can see a list of contributors in the
+[contributors appendix](https://bids-specification.readthedocs.io/en/stable/appendices/contributors.html)
+of the BIDS specification.
+
+If you have made any type of contributions to BIDS,
+we encourage you to enter or update your information in the
+[Contributors wiki page](https://github.com/bids-standard/bids-specification/wiki/Recent-Contributors)
+according to the instructions listed there.
## Thank you!
diff --git a/DECISION-MAKING.md b/DECISION-MAKING.md
index 88474ac82f..a29b4b8632 100644
--- a/DECISION-MAKING.md
+++ b/DECISION-MAKING.md
@@ -53,11 +53,12 @@ Leaders of BIDS Extension Proposals are listed in the
### Contributors Group
-Contributors are listed in the [Contributors appendix](https://bids-specification.readthedocs.io/en/stable/appendices/contributors.html)
-of the BIDS specification. Contributors who have not yet entered their name
-into this list are encouraged to edit the [Contributors WIKI page](https://github.com/bids-standard/bids-specification/wiki/Contributors)
-with their name, using the emojis listed in the WIKI to indicate their
-contributions.
+Contributors are listed in the
+[Contributors appendix](https://bids-specification.readthedocs.io/en/stable/appendices/contributors.html)
+of the BIDS specification.
+Contributors who have not yet entered their name into this list are encouraged to edit the
+[Contributors wiki page](https://github.com/bids-standard/bids-specification/wiki/Recent-Contributors)
+according to the instructions listed there.
### Other groups
diff --git a/LICENSE b/LICENSE
index d591978380..22091e01bb 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,6 +1,6 @@
Attribution 4.0 International
-Copyright (c) 2018-2022, BIDS Contributors.
+Copyright (c) 2018, BIDS Contributors.
=======================================================================
diff --git a/README.md b/README.md
index 54b7bd11d7..6474f470a1 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,7 @@
[![Validation](https://github.com/bids-standard/bids-specification/actions/workflows/validation.yml/badge.svg)](https://github.com/bids-standard/bids-specification/actions/workflows/validation.yml)
[![CircleCI](https://circleci.com/gh/bids-standard/bids-specification.svg?style=shield)](https://circleci.com/gh/bids-standard/bids-specification)
-[![@BIDSstandard](http://img.shields.io/twitter/follow/bidsstandard.svg?style=social)](https://twitter.com/BIDSstandard)
+[![Mastodon Follow](https://img.shields.io/mastodon/follow/109520103085644521?domain=https%3A%2F%2Ffosstodon.org%2F)](https://fosstodon.org/@bidsstandard)
+[![@BIDSstandard](https://img.shields.io/twitter/follow/bidsstandard.svg?style=social)](https://x.com/BIDSstandard)
[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.3686061.svg)](https://doi.org/10.5281/zenodo.3686061)
@@ -12,7 +13,6 @@ organization of neuroimaging data.
In this repository, we develop the
[BIDS specification](https://bids-specification.readthedocs.io/en/latest/).
-
# When to use BIDS
To organize your data in BIDS, all you need is neuro data, a computer, and the
@@ -43,10 +43,7 @@ The specification is provided in the form of a webpage, built using
1. Read some introductory material, most likely the very basic problems have already been addressed!
- [BIDS Starter Kit](https://github.com/bids-standard/bids-starter-kit) for tutorials, wikis, templates, ...
2. Post your question in one of several channels where BIDS members are active
- - the [NeuroStars](https://neurostars.org/tags/bids) discourse forum
- - the [BrainHack Mattermost](https://mattermost.brainhack.org), for instant messaging (see also this [news item](https://bids.neuroimaging.io/2020/06/24/Join-the-BIDS-community-on-the-BrainHack-Mattermost.html))
- - the [Google group](https://groups.google.com/forum/#!forum/bids-discussion), for broader discussions surrounding BIDS
- - the [specification repository issue page](https://github.com/bids-standard/bids-specification/issues), if you found inconsistencies, typos, or other issues with the BIDS specification itself
+ - see: [BIDS communication channels](#bids-communication-channels)
# Contributing to BIDS
@@ -57,11 +54,34 @@ For a current list of our contributors, please see our [Contributors appendix](h
When you're ready to get started, check out [our contributing guidelines](https://github.com/bids-standard/bids-specification/blob/master/CONTRIBUTING.md).
-We ask that all contributions to BIDS across all project-related spaces (including but not limited to:
-[GitHub](https://github.com/bids-standard),
-the [Google group](https://groups.google.com/forum/#!forum/bids-discussion), and newsletter emails),
+We ask that all contributions to BIDS across all project-related spaces
+(including but not limited to:
+[GitHub](https://github.com/bids-standard), and the
+[Google group](https://groups.google.com/forum/#!forum/bids-discussion); see
+[BIDS communication channels](#bids-communication-channels))
adhere to our [code of conduct](https://github.com/bids-standard/bids-specification/blob/master/CODE_OF_CONDUCT.md).
+# BIDS communication channels
+
+## Main communication channels
+
+ - "Issue" pages on the different GitHub repositories of the [`bids-standard` GitHub organization](https://github.com/bids-standard),
+ such as the [BIDS specification repository](https://github.com/bids-standard/bids-specification/issues),
+ for reporting problems or making suggestions
+ - The [NeuroStars Discourse forum](https://neurostars.org/tags/bids), for asking usage questions
+ - The [BrainHack Mattermost](https://mattermost.brainhack.org), for instant messaging
+ (see also this [news item](https://bids.neuroimaging.io/2020/06/24/Join-the-BIDS-community-on-the-BrainHack-Mattermost.html))
+ - The [Google group](https://groups.google.com/forum/#!forum/bids-discussion), for broader discussions and announcements surrounding BIDS
+ - The [BIDS website "news"](https://bids.neuroimaging.io/news.html), similar to the Google group, for broader discussions and announcements
+
+## Social media channels
+
+- [X](https://x.com/BIDSstandard)
+- [Mastodon](https://fosstodon.org/@bidsstandard)
+- [Bluesky](https://bsky.app/profile/bidsstandard.bsky.social)
+- [Youtube](https://www.youtube.com/channel/UCxZUcYfd_nvIVWAbzRB1tlw)
+- [Instagram](https://www.instagram.com/bidsstandard/)
+
## Contributors
Thanks goes to these wonderful people.
@@ -72,415 +92,423 @@ Thanks goes to these wonderful people.
diff --git a/Release_Protocol.md b/Release_Protocol.md
index 5773da78e3..c93c039a48 100644
--- a/Release_Protocol.md
+++ b/Release_Protocol.md
@@ -8,10 +8,14 @@ The protocol assumes that you have a [fork](https://help.github.com/en/articles/
of the bids-standard/bids-specification repository and have [cloned](https://help.github.com/en/articles/cloning-a-repository)
your fork locally to a directory called `bids-specification`.
-NOTE: Before you start a release, you have to ensure that the automatically generated changelog is
-**up to date**. See the relevant [section in CONTRIBUTING.md](CONTRIBUTING.md#how-is-the-changelog-generated)
-for further information. In practice this means ensuring that the most recently merged pull request was
-merged into the `master` branch using the "Merge commit" option.
+### 0. Cleaning up the changelog
+
+Before you start a release, you have to ensure that the automatically generated changelog is **up to date**.
+See the relevant [section in CONTRIBUTING.md](CONTRIBUTING.md#how-is-the-changelog-generated) for further information.
+In practice this means ensuring that the most recently merged pull request
+was merged into the `master` branch using the "Merge commit" option.
+
+![merge-commit](release_images/merge_commit.png.png "merge-commit")
### 1. Fetch the latest version of the [master branch of the BIDS-specification](https://github.com/bids-standard/bids-specification/tree/master)
@@ -48,13 +52,13 @@ Update the version in CITATION.cff.
Change the "Unreleased" heading in
[src/CHANGES.md](https://github.com/bids-standard/bids-specification/blob/master/src/CHANGES.md)
-to `v`, and link to the target ReadTheDocs URL.
+to ``, and link to the target ReadTheDocs URL.
If the target release date is known, include the date in YYYY-MM-DD in parentheses after
the link.
```Diff
- ## Unreleased
-+ ## [v1.2.0](https://bids-specification.readthedocs.io/en/v1.2.0/) (2019-03-04)
++ ## [1.2.0](https://bids-specification.readthedocs.io/en/1.2.0/) (2019-03-04)
```
The date can be changed or added later, so accurate prediction is not necessary.
@@ -63,7 +67,7 @@ Remove the `-dev` from the version in
[mkdocs.yml](https://github.com/bids-standard/bids-specification/blob/master/mkdocs.yml)
configuration, so the title will be correct for the released specification.
If the version preceding the `-dev` is not the target version, update the version as well.
-In the figure below, we update `v1.2.0-dev` to `v1.2.0`.
+In the figure below, we update `1.2.0-dev` to `1.2.0`.
![dev-to-stable](release_images/site_name_release_1.2dev-1.2.png "dev-to-stable")
Additionally, implement the same change in the version name perform above in the `src/schema/BIDS_VERSION` file.
@@ -75,27 +79,35 @@ It will be generated once the GitHub release has been completed.
#### 2.2 Update the contributors list
-Synchronize the [Contributors appendix](https://github.com/bids-standard/bids-specification/blob/master/src/appendices/contributors.md)
-with the [Contributors wiki page](https://github.com/bids-standard/bids-specification/wiki/Contributors)
-to ensure all contributors are duly credited.
-Be sure not to remove credits if both have been edited.
+We want to ensure that all contributors are duly credited.
+To synchronize the
+[Contributors appendix](https://github.com/bids-standard/bids-specification/blob/master/src/appendices/contributors.md)
+with the
+[Contributors wiki page](https://github.com/bids-standard/bids-specification/wiki/Recent-Contributors),
+please follow these steps:
+
+- be sure not to remove credits if both the contributors appendix AND
+ the contributors wiki page have been edited (or the `.tributors` or `.all-contributorsrc` files)
- add new contributors info to the `tools/new_contributors.tsv` file.
- make sure that you have installed
- all the python packages listed in `tools/requirements.txt`
- the [allcontributors](https://allcontributors.org/docs/en/cli/installation) package
- run:
+
```bash
make update_contributors
```
+
- you may need to fix some errors in the contributions names in case of crash
- make sure to review the changes and not commit them blindly
- commit the changes
#### 2.3 Update the previous version URLs
-Please change the previous version links from GitHub to ReadTheDocs.
-In the figure below, we update v1.2.2.
+In `src/CHANGES.md`,
+please change the previous version links from GitHub to ReadTheDocs.
+In the figure below, we update 1.2.2.
![github-to-rtd](release_images/GitHub_to_RTD_spec_rendering.png "github-to-rtd")
#### 2.4 Update the Changelog
@@ -115,7 +127,7 @@ discrepancies is reduced.
```Shell
git add src/CHANGES.md mkdocs.yml src/appendices/contributors.md src/schema/BIDS_VERSION
-git commit -m 'REL: v1.2.0'
+git commit -m 'REL: 1.2.0'
git push -u upstream rel/1.2.0
```
@@ -123,7 +135,7 @@ git push -u upstream rel/1.2.0
**Important notes:**
-1. The pull request title **must** be named "REL: vX.Y.Z" (for example, "REL: v1.2.0")
+1. The pull request title **must** be named "REL: X.Y.Z" (for example, "REL: 1.2.0")
1. The pull request **must** get a GitHub label called `exclude-from-changelog`
**This will open a period of discussion for 5 business days regarding if we are ready to release.**
@@ -158,13 +170,13 @@ The date should be placed after the link to the versioned URL.
For example:
```Diff
-- ## [v1.2.0](https://bids-specification.readthedocs.io/en/v1.2.0/)
-+ ## [v1.2.0](https://bids-specification.readthedocs.io/en/v1.2.0/) (2019-03-04)
+- ## [1.2.0](https://bids-specification.readthedocs.io/en/1.2.0/)
++ ## [1.2.0](https://bids-specification.readthedocs.io/en/1.2.0/) (2019-03-04)
```
-Verify that the pull request title matches "REL: vX.Y.Z" and merge the pull request.
+Verify that the pull request title matches "REL: X.Y.Z" and merge the pull request.
-### 6. Get the built PDF
+### 6. Get the built PDF and `CITATION.cff` file
Upon each commit to the `master` branch, CircleCI builds a PDF version of the
specification (see `.circleci/config.yml` and the `pdf_build_src` directory).
@@ -178,6 +190,9 @@ jobs to finish and then check the built PDF using the following steps:
1. Download the PDF and check that the date and version on the first page are as expected
1. Hold the PDF ready for upload to our Zenodo archive (see the *Uploading the stable PDF to Zenodo* step below)
+Furthermore, **copy the `CITATION.cff`** file in its current state from the root of the repository
+and hold it ready for facilitating the upload of the PDF to our Zenodo archive.
+
### 7. Tag the release
GitHub's release mechanism does not have all of the features we need, so manually tag the release
@@ -187,8 +202,8 @@ To do this, `fetch` the current state of `upstream` (see step 1), tag `upstream/
```Shell
git fetch upstream
-git tag -a -m "v1.2.0 (2019-03-04)" v1.2.0 upstream/master
-git push upstream v1.2.0
+git tag -a -m "1.2.0 (2019-03-04)" 1.2.0 upstream/master
+git push upstream 1.2.0
```
There are four components to the tag command:
@@ -213,7 +228,7 @@ Click [Draft a new release](https://github.com/bids-standard/bids-specification/
![GH-release-2](release_images/GH-release_2.png "GH-release-2")
-Set the tag version and release title to "vX.Y.Z", and paste the current changelog as the
+Set the tag version and release title to "X.Y.Z", and paste the current changelog as the
description:
![GH-release-3](release_images/GH-release_3.png "GH-release-3")
@@ -226,8 +241,14 @@ for `stable` and the most recent tag.
### 9. Edit the mkdocs.yml file site_name to set a new development version
-Please commit to `master` with the title `REL: -dev`.
+Please open a pull request and create a merge commit to `master` with the title `REL: -dev`.
+
+![merge-commit](release_images/merge_commit.png.png "merge-commit")
+
This should be the first commit in the new version.
+
+This will reset the URLs that were [manually changed before in step 2.3](#2.3-update-the-previous-version-URLs).
+
This process is illustrated below.
![stable-to-dev](release_images/site_name_release_1.2-1.3dev.png "stable-to-dev")
@@ -243,22 +264,19 @@ Similarly update the version in CITATION.cff with a `dev` suffix.
### 10. Uploading the stable PDF to Zenodo
-1. Open a private browser window
-1. Log into https://github.com with the `bids-maintenance` user (credentials
- are available from the BIDS maintainer group)
-1. Open a new tab at https://zenodo.org and "log in via GitHub", you'll then
- be on the `bids-maintenance` Zenodo account
-1. Navigate to the [archive of our BIDS specification PDFs](https://doi.org/10.5281/zenodo.3686061)
-1. Click on "add new version"
-1. For a new version, upload the new PDF, naming it consistently with the other
- PDFs: `BIDS-Specification-vX.X.X.pdf` (replace `X.X.X` with the new version)
-1. Remove all other files from the upload
-1. Edit the following fields:
- 1. publication date
- 1. version
-1. Double check that everything is in order, then save and publish
-
-### 11. Sharing news of the release
-
-Please share news of the release on the [identified platforms](https://docs.google.com/spreadsheets/d/16SAGK3zG93WM2EWuoZDcRIC7ygPc5b7PDNGpFyC3obA/edit#gid=0).
+1. In a previous step you have secured a PDF version of the BIDS specification and the corresponding `CITATION.cff` file.
+1. Follow the steps described here: https://github.com/bids-standard/bids-specification-pdf-releases#release-instructions
+
+### 11. Update the BIDS website data
+
+Update the following files in the BIDS website repository (https://github.com/bids-standard/bids-website) if applicable:
+
+- `tools/timeline.csv`
+- `_data/beps.yml`
+- `_data/beps_completed.yml`
+- `_data/beps_other.yml`
+
+### 12. Sharing news of the release
+
+Please share news of the release on the [identified platforms](https://github.com/bids-standard/bids-specification?tab=readme-ov-file#BIDS-communication-channels).
Please use our previous release posts as a guide.
diff --git a/mkdocs.yml b/mkdocs.yml
index 04c07297ac..051aa2aaa6 100644
--- a/mkdocs.yml
+++ b/mkdocs.yml
@@ -1,115 +1,151 @@
-site_name: Brain Imaging Data Structure v1.9.0-dev
+site_name: Brain Imaging Data Structure 1.10.0-dev
site_url: https://bids-specification.readthedocs.io/en/stable/
+repo_url: https://github.com/bids-standard/bids-specification
nav:
- - The BIDS Specification:
+ - The BIDS Specification:
- Introduction: introduction.md
- Common principles: common-principles.md
- Modality agnostic files: modality-agnostic-files.md
- Modality specific files:
- - Magnetic Resonance Imaging: modality-specific-files/magnetic-resonance-imaging-data.md
- - Magnetoencephalography: modality-specific-files/magnetoencephalography.md
- - Electroencephalography: modality-specific-files/electroencephalography.md
- - Intracranial Electroencephalography: modality-specific-files/intracranial-electroencephalography.md
- - Task events: modality-specific-files/task-events.md
- - Physiological and other continuous recordings: modality-specific-files/physiological-and-other-continuous-recordings.md
- - Behavioral experiments (with no neural recordings): modality-specific-files/behavioral-experiments.md
- - Genetic Descriptor: modality-specific-files/genetic-descriptor.md
- - Positron Emission Tomography: modality-specific-files/positron-emission-tomography.md
- - Microscopy: modality-specific-files/microscopy.md
- - Near-Infrared Spectroscopy: modality-specific-files/near-infrared-spectroscopy.md
- - Motion: modality-specific-files/motion.md
+ - Magnetic Resonance Imaging: modality-specific-files/magnetic-resonance-imaging-data.md
+ - Magnetoencephalography: modality-specific-files/magnetoencephalography.md
+ - Electroencephalography: modality-specific-files/electroencephalography.md
+ - Intracranial Electroencephalography: modality-specific-files/intracranial-electroencephalography.md
+ - Task events: modality-specific-files/task-events.md
+ - Physiological and other continuous recordings: modality-specific-files/physiological-and-other-continuous-recordings.md
+ - Behavioral experiments (with no neural recordings): modality-specific-files/behavioral-experiments.md
+ - Genetic Descriptor: modality-specific-files/genetic-descriptor.md
+ - Positron Emission Tomography: modality-specific-files/positron-emission-tomography.md
+ - Microscopy: modality-specific-files/microscopy.md
+ - Near-Infrared Spectroscopy: modality-specific-files/near-infrared-spectroscopy.md
+ - Motion: modality-specific-files/motion.md
- Derivatives:
- - BIDS Derivatives: derivatives/introduction.md
- - Common data types and metadata: derivatives/common-data-types.md
- - Imaging data types: derivatives/imaging.md
+ - BIDS Derivatives: derivatives/introduction.md
+ - Common data types and metadata: derivatives/common-data-types.md
+ - Imaging data types: derivatives/imaging.md
- Longitudinal and multi-site studies: longitudinal-and-multi-site-studies.md
- Glossary: glossary.md
- BIDS Extension Proposals: extensions.md
- Appendix:
- - Schema: appendices/schema.md
- - Contributors: appendices/contributors.md
- - Licenses: appendices/licenses.md
- - Entity table: appendices/entity-table.md
- - Entities: appendices/entities.md
- - File collections: appendices/file-collections.md
- - Units: appendices/units.md
- - Hierarchical Event Descriptors: appendices/hed.md
- - MEG file formats: appendices/meg-file-formats.md
- - MEG systems: appendices/meg-systems.md
- - Coordinate systems: appendices/coordinate-systems.md
- - Quantitative MRI: appendices/qmri.md
- - Arterial Spin Labeling: appendices/arterial-spin-labeling.md
- - Cross modality correspondence: appendices/cross-modality-correspondence.md
+ - Schema: appendices/schema.md
+ - Contributors: appendices/contributors.md
+ - Licenses: appendices/licenses.md
+ - Entity table: appendices/entity-table.md
+ - Entities: appendices/entities.md
+ - File collections: appendices/file-collections.md
+ - Units: appendices/units.md
+ - Hierarchical Event Descriptors: appendices/hed.md
+ - MEG file formats: appendices/meg-file-formats.md
+ - MEG systems: appendices/meg-systems.md
+ - Coordinate systems: appendices/coordinate-systems.md
+ - Quantitative MRI: appendices/qmri.md
+ - Arterial Spin Labeling: appendices/arterial-spin-labeling.md
+ - Cross modality correspondence: appendices/cross-modality-correspondence.md
- Changelog: CHANGES.md
- - The BIDS Starter Kit:
- - Website: https://bids-standard.github.io/bids-starter-kit
+ - The BIDS Starter Kit:
+ - Website: https://bids-standard.github.io/bids-starter-kit/
- Tutorials: https://bids-standard.github.io/bids-starter-kit/tutorials/tutorials.html
- GitHub repository: https://github.com/bids-standard/bids-starter-kit
theme:
- name: material
- favicon: images/favicon.png
- logo: images/logo.png
- features:
- - navigation.sections
-copyright: Copyright © 2018-2022, BIDS Contributors - CC BY 4.0
+ name: material
+ favicon: images/favicon.png
+ logo: images/logo.png
+ features:
+ - navigation.sections
+ - content.action.edit
+ icon:
+ repo: fontawesome/brands/github
+ edit: material/pencil
+ palette:
+ # Palette toggle for automatic mode
+ - media: (prefers-color-scheme)
+ toggle:
+ icon: material/brightness-auto
+ name: Switch to light mode
+ # Palette toggle for light mode
+ - media: "(prefers-color-scheme: light)"
+ scheme: default
+ toggle:
+ icon: material/brightness-7
+ name: Switch to dark mode
+ # Palette toggle for dark mode
+ - media: "(prefers-color-scheme: dark)"
+ scheme: slate
+ toggle:
+ icon: material/brightness-4
+ name: Switch to system preference
+
+edit_uri: https://github.com/bids-standard/bids-specification/edit/master/src/
+
+copyright: Copyright © BIDS Contributors - CC BY 4.0
+
extra:
- generator: false
- social:
- - icon: fontawesome/brands/twitter
- link: https://twitter.com/BIDSstandard/
- - icon: fontawesome/brands/github
- link: https://github.com/bids-standard/bids-specification/
- - icon: fontawesome/brands/google
- link: https://groups.google.com/g/bids-discussion
+ generator: false
+ social:
+ - icon: fontawesome/brands/github
+ link: https://github.com/bids-standard/bids-specification/
+ - icon: fontawesome/brands/x-twitter
+ link: https://x.com/BIDSstandard/
+ - icon: fontawesome/brands/mastodon
+ link: https://fosstodon.org/@bidsstandard
+ - icon: fontawesome/brands/google
+ link: https://groups.google.com/g/bids-discussion
+ - icon: fontawesome/brands/instagram
+ link: https://www.instagram.com/bidsstandard/
+ - icon: fontawesome/brands/youtube
+ link: https://www.youtube.com/channel/UCxZUcYfd_nvIVWAbzRB1tlw
+
extra_javascript:
- - js/jquery-3.6.0.min.js
+ - js/jquery-3.6.0.min.js
markdown_extensions:
- - toc:
- anchorlink: true
- - pymdownx.superfences
+ - toc:
+ anchorlink: true
+ - pymdownx.superfences
+ - admonition
+ - pymdownx.details
plugins:
- - search
- - branchcustomization:
- update_config:
- - branch: /(?!^master$)/
- +extra_css:
- - css/watermark.css
- - macros:
- module_name: tools/mkdocs_macros_bids/main
- - redirects:
- redirect_maps:
- '01-introduction.md': 'introduction.md'
- '02-common-principles.md': 'common-principles.md'
- '03-modality-agnostic-files.md': 'modality-agnostic-files.md'
- '04-modality-specific-files/01-magnetic-resonance-imaging-data.md': 'modality-specific-files/magnetic-resonance-imaging-data.md'
- '04-modality-specific-files/02-magnetoencephalography.md': 'modality-specific-files/magnetoencephalography.md'
- '04-modality-specific-files/03-electroencephalography.md': 'modality-specific-files/electroencephalography.md'
- '04-modality-specific-files/04-intracranial-electroencephalography.md': 'modality-specific-files/intracranial-electroencephalography.md'
- '04-modality-specific-files/05-task-events.md': 'modality-specific-files/task-events.md'
- '04-modality-specific-files/06-physiological-and-other-continuous-recordings.md': 'modality-specific-files/physiological-and-other-continuous-recordings.md'
- '04-modality-specific-files/07-behavioral-experiments.md': 'modality-specific-files/behavioral-experiments.md'
- '04-modality-specific-files/08-genetic-descriptor.md': 'modality-specific-files/genetic-descriptor.md'
- '04-modality-specific-files/09-positron-emission-tomography.md': 'modality-specific-files/positron-emission-tomography.md'
- '04-modality-specific-files/10-microscopy.md': 'modality-specific-files/microscopy.md'
- '04-modality-specific-files/11-near-infrared-spectroscopy.md': 'modality-specific-files/near-infrared-spectroscopy.md'
- '05-derivatives/01-introduction.md': 'derivatives/introduction.md'
- '05-derivatives/02-common-data-types.md': 'derivatives/common-data-types.md'
- '05-derivatives/03-imaging.md': 'derivatives/imaging.md'
- '06-longitudinal-and-multi-site-studies.md': 'longitudinal-and-multi-site-studies.md'
- '07-extensions.md': 'extensions.md'
- '99-appendices/14-glossary.md': 'glossary.md'
- '99-appendices/01-contributors.md': 'appendices/contributors.md'
- '99-appendices/02-licenses.md': 'appendices/licenses.md'
- '99-appendices/03-hed.md': 'appendices/hed.md'
- '99-appendices/04-entity-table.md': 'appendices/entity-table.md'
- '99-appendices/05-units.md': 'appendices/units.md'
- '99-appendices/06-meg-file-formats.md': 'appendices/meg-file-formats.md'
- '99-appendices/07-meg-systems.md': 'appendices/meg-systems.md'
- '99-appendices/08-coordinate-systems.md': 'appendices/coordinate-systems.md'
- '99-appendices/09-entities.md': 'appendices/entities.md'
- '99-appendices/10-file-collections.md': 'appendices/file-collections.md'
- '99-appendices/11-qmri.md': 'appendices/qmri.md'
- '99-appendices/12-arterial-spin-labeling.md': 'appendices/arterial-spin-labeling.md'
- '99-appendices/13-cross-modality-correspondence.md': 'appendices/cross-modality-correspondence.md'
-docs_dir: 'src'
+ - search
+ - branchcustomization:
+ update_config:
+ - branch: /(?!^master$)/
+ +extra_css:
+ - css/watermark.css
+ - macros:
+ module_name: tools/mkdocs_macros_bids/main
+ - redirects:
+ redirect_maps:
+ "01-introduction.md": "introduction.md"
+ "02-common-principles.md": "common-principles.md"
+ "03-modality-agnostic-files.md": "modality-agnostic-files.md"
+ "04-modality-specific-files/01-magnetic-resonance-imaging-data.md": "modality-specific-files/magnetic-resonance-imaging-data.md"
+ "04-modality-specific-files/02-magnetoencephalography.md": "modality-specific-files/magnetoencephalography.md"
+ "04-modality-specific-files/03-electroencephalography.md": "modality-specific-files/electroencephalography.md"
+ "04-modality-specific-files/04-intracranial-electroencephalography.md": "modality-specific-files/intracranial-electroencephalography.md"
+ "04-modality-specific-files/05-task-events.md": "modality-specific-files/task-events.md"
+ "04-modality-specific-files/06-physiological-and-other-continuous-recordings.md": "modality-specific-files/physiological-and-other-continuous-recordings.md"
+ "04-modality-specific-files/07-behavioral-experiments.md": "modality-specific-files/behavioral-experiments.md"
+ "04-modality-specific-files/08-genetic-descriptor.md": "modality-specific-files/genetic-descriptor.md"
+ "04-modality-specific-files/09-positron-emission-tomography.md": "modality-specific-files/positron-emission-tomography.md"
+ "04-modality-specific-files/10-microscopy.md": "modality-specific-files/microscopy.md"
+ "04-modality-specific-files/11-near-infrared-spectroscopy.md": "modality-specific-files/near-infrared-spectroscopy.md"
+ "05-derivatives/01-introduction.md": "derivatives/introduction.md"
+ "05-derivatives/02-common-data-types.md": "derivatives/common-data-types.md"
+ "05-derivatives/03-imaging.md": "derivatives/imaging.md"
+ "06-longitudinal-and-multi-site-studies.md": "longitudinal-and-multi-site-studies.md"
+ "07-extensions.md": "extensions.md"
+ "99-appendices/14-glossary.md": "glossary.md"
+ "99-appendices/01-contributors.md": "appendices/contributors.md"
+ "99-appendices/02-licenses.md": "appendices/licenses.md"
+ "99-appendices/03-hed.md": "appendices/hed.md"
+ "99-appendices/04-entity-table.md": "appendices/entity-table.md"
+ "99-appendices/05-units.md": "appendices/units.md"
+ "99-appendices/06-meg-file-formats.md": "appendices/meg-file-formats.md"
+ "99-appendices/07-meg-systems.md": "appendices/meg-systems.md"
+ "99-appendices/08-coordinate-systems.md": "appendices/coordinate-systems.md"
+ "99-appendices/09-entities.md": "appendices/entities.md"
+ "99-appendices/10-file-collections.md": "appendices/file-collections.md"
+ "99-appendices/11-qmri.md": "appendices/qmri.md"
+ "99-appendices/12-arterial-spin-labeling.md": "appendices/arterial-spin-labeling.md"
+ "99-appendices/13-cross-modality-correspondence.md": "appendices/cross-modality-correspondence.md"
+docs_dir: "src"
use_directory_urls: false
diff --git a/pdf_build_src/pandoc_script.py b/pdf_build_src/pandoc_script.py
index b7b1842b96..e9710482ab 100644
--- a/pdf_build_src/pandoc_script.py
+++ b/pdf_build_src/pandoc_script.py
@@ -2,6 +2,7 @@
This is done once the duplicate src directory is processed.
"""
+
import subprocess
import yaml
from pathlib import Path
@@ -11,9 +12,7 @@
def _find(path, filename):
return next(
- parent / filename
- for parent in path.parents
- if Path.is_file(parent / filename)
+ parent / filename for parent in path.parents if Path.is_file(parent / filename)
)
diff --git a/pdf_build_src/process_markdowns.py b/pdf_build_src/process_markdowns.py
index 5d30aabc21..705daa8b22 100644
--- a/pdf_build_src/process_markdowns.py
+++ b/pdf_build_src/process_markdowns.py
@@ -17,6 +17,8 @@
import numpy as np
+from remove_admonitions import remove_admonitions
+
sys.path.append("../tools/")
# functions from module macros are called by eval() later on
from mkdocs_macros_bids import macros # noqa: F401
@@ -585,9 +587,9 @@ def edit_titlepage():
data = file.readlines()
data[-1] = (
- fr"\textsc{{\large {version_number}}}"
+ rf"\textsc{{\large {version_number}}}"
r"\\[0.5cm]"
- fr"{{\large {build_date}}}"
+ rf"{{\large {build_date}}}"
r"\\[2cm]"
r"\vfill"
r"\end{titlepage}"
@@ -679,33 +681,38 @@ def process_macros(duplicated_src_dir_path):
duplicated_src_dir_path = "src_copy/src"
- # Step 1: make a copy of the src directory in the current directory
+ # make a copy of the src directory in the current directory
copy_src()
- # Step 2: run mkdocs macros embedded in markdown files
+ # run mkdocs macros embedded in markdown files
process_macros(duplicated_src_dir_path)
- # Step 3: copy BIDS_logo to images directory of the src_copy directory
+ # remove mkdocs admonition
+ remove_admonitions(
+ input_folder=duplicated_src_dir_path, output_folder=duplicated_src_dir_path
+ )
+
+ # copy BIDS_logo to images directory of the src_copy directory
copy_bids_logo()
- # Step 4: copy images from subdirectories of src_copy directory
+ # copy images from subdirectories of src_copy directory
copy_images(duplicated_src_dir_path)
subprocess.call("mv src_copy/src/images/images/* src_copy/src/images/", shell=True)
- # Step 5: extract the latest version number, date and title
+ # extract the latest version number, date and title
extract_header_string()
add_header()
edit_titlepage()
- # Step 6: modify changelog to be a level 1 heading to facilitate section
+ # modify changelog to be a level 1 heading to facilitate section
# separation
modify_changelog()
- # Step 7: remove all internal links
+ # remove all internal links
assert_no_multiline_links(duplicated_src_dir_path)
remove_internal_links_inline(duplicated_src_dir_path)
remove_internal_links_reference(duplicated_src_dir_path)
- # Step 8: correct number of dashes and fences alignment for rendering tables in PDF
+ # correct number of dashes and fences alignment for rendering tables in PDF
correct_tables(duplicated_src_dir_path)
diff --git a/pdf_build_src/remove_admonitions.py b/pdf_build_src/remove_admonitions.py
new file mode 100644
index 0000000000..1942f8b5b0
--- /dev/null
+++ b/pdf_build_src/remove_admonitions.py
@@ -0,0 +1,64 @@
+"""Script to remove all mkdocs admonition from the markdown files in a directory.
+
+See the pdf_build_src/tests/data/input directory to see what admonitions look like.
+"""
+
+from __future__ import annotations
+
+import shutil
+from pathlib import Path
+
+INDENT = " "
+
+ADMONITION_DELIMITERS = ["!!!", "???", "???+"]
+
+
+def remove_admonitions(
+ input_folder: str | Path, output_folder: str | Path, indent: str = None
+):
+
+ if indent is None:
+ indent = INDENT
+
+ md_files = Path(input_folder).glob("**/*.md")
+
+ for file in md_files:
+
+ with open(file, "r", encoding="utf8") as f:
+ content = f.readlines()
+
+ output_file = Path(output_folder) / file.relative_to(input_folder)
+ output_file.parent.mkdir(parents=True, exist_ok=True)
+ print(f"processing: {file}\n to: {output_file}")
+
+ with open(output_file, "w", encoding="utf8") as f:
+
+ is_admonition = False
+ counter = 0
+ for line in content:
+
+ if any(line.startswith(x) for x in ADMONITION_DELIMITERS):
+ is_admonition = True
+ counter = 0
+ continue
+
+ # skip first line after admonition
+ if is_admonition and counter == 0:
+ counter += 1
+ continue
+
+ if line != "\n" and not line.startswith(indent):
+ is_admonition = False
+
+ if is_admonition:
+ line = line.lstrip(indent)
+
+ f.write(line)
+
+
+if __name__ == "__main__":
+ """If run as a script this will just run the main function on test data."""
+ input_folder = Path(__file__).parent / "tests" / "data" / "input"
+ output_folder = Path(__file__).parent / "tests" / "data" / "output"
+ shutil.rmtree(output_folder)
+ remove_admonitions(input_folder, output_folder)
diff --git a/pdf_build_src/test_remove_admonitions.py b/pdf_build_src/test_remove_admonitions.py
new file mode 100644
index 0000000000..e995e42246
--- /dev/null
+++ b/pdf_build_src/test_remove_admonitions.py
@@ -0,0 +1,25 @@
+from pathlib import Path
+
+from remove_admonitions import remove_admonitions
+
+
+def test_remove_admonitions(tmp_path):
+ input_folder = Path(__file__).parent / "tests" / "data" / "input"
+ expected_folder = Path(__file__).parent / "tests" / "data" / "expected"
+
+ remove_admonitions(input_folder, tmp_path)
+
+ generated_files = list(tmp_path.glob("**/*.md"))
+
+ for file in generated_files:
+
+ expected = expected_folder / file.relative_to(tmp_path)
+
+ with open(expected, "r", encoding="utf8") as f:
+ expected_content = f.readlines()
+
+ with open(file, "r", encoding="utf8") as f:
+ generated_content = f.readlines()
+
+ for expected_line, generated_line in zip(expected_content, generated_content):
+ assert generated_line == expected_line
diff --git a/pdf_build_src/tests/data/expected/README.md b/pdf_build_src/tests/data/expected/README.md
new file mode 100644
index 0000000000..37fadc295d
--- /dev/null
+++ b/pdf_build_src/tests/data/expected/README.md
@@ -0,0 +1,32 @@
+# Test inputs
+
+This input directory contains data to use for testing the pdf build code of the BIDS specification.
+
+For example the following admonition should be removed by `pdf_build_src/remove_admonitions.py`.
+
+Lorem ipsum dolor sit amet, consectetur adipiscing elit.
+Nulla et euismod nulla.
+Curabitur feugiat, tortor non consequat finibus, justo purus auctor massa,
+nec semper lorem quam in massa.
+
+The `expected` directory should contain the documents
+as they should look like after processing.
+
+[Mkdocs admonitions](https://squidfunk.github.io/mkdocs-material/reference/admonitions/#inline-blocks-inline-end)
+come in different type. In aaddtion of the classical admonitions show above you have also:
+
+Collapsible admonitions start with 3 questions marks (`???`).
+
+Collapsible admonitions that will be shown as expanded
+start with 3 questions marks and a plus sign (`???+`).
+
+
+
+Let's see
+
+- [`UK biobank`](https://github.com/bids-standard/bids-examples/tree/master/genetics_ukbb)
+- foo bar [`UK biobank`](https://github.com/bids-standard/bids-examples/tree/master/genetics_ukbb)
+
+More of the admonition
+
+And here we resume normal thing.
diff --git a/pdf_build_src/tests/data/expected/modality-specific-files/magnetic-resonance-imaging-data.md b/pdf_build_src/tests/data/expected/modality-specific-files/magnetic-resonance-imaging-data.md
new file mode 100644
index 0000000000..d70af64a49
--- /dev/null
+++ b/pdf_build_src/tests/data/expected/modality-specific-files/magnetic-resonance-imaging-data.md
@@ -0,0 +1,8 @@
+# Magnetic Resonance Imaging
+
+## Common metadata fields
+
+Lorem ipsum dolor sit amet, consectetur adipiscing elit.
+Nulla et euismod nulla.
+Curabitur feugiat, tortor non consequat finibus, justo purus auctor massa,
+nec semper lorem quam in massa.
diff --git a/pdf_build_src/tests/data/input/README.md b/pdf_build_src/tests/data/input/README.md
new file mode 100644
index 0000000000..cab4817282
--- /dev/null
+++ b/pdf_build_src/tests/data/input/README.md
@@ -0,0 +1,40 @@
+# Test inputs
+
+This input directory contains data to use for testing the pdf build code of the BIDS specification.
+
+For example the following admonition should be removed by `pdf_build_src/remove_admonitions.py`.
+
+!!! note
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit.
+ Nulla et euismod nulla.
+ Curabitur feugiat, tortor non consequat finibus, justo purus auctor massa,
+ nec semper lorem quam in massa.
+
+The `expected` directory should contain the documents
+as they should look like after processing.
+
+[Mkdocs admonitions](https://squidfunk.github.io/mkdocs-material/reference/admonitions/#inline-blocks-inline-end)
+come in different type. In aaddtion of the classical admonitions show above you have also:
+
+??? note "Collapsible admonitions"
+
+ Collapsible admonitions start with 3 questions marks (`???`).
+
+???+ note "Expanded collapsible admonitions"
+
+ Collapsible admonitions that will be shown as expanded
+ start with 3 questions marks and a plus sign (`???+`).
+
+
+
+!!! example "non ordered list should be handle propeler"
+
+ Let's see
+
+ - [`UK biobank`](https://github.com/bids-standard/bids-examples/tree/master/genetics_ukbb)
+ - foo bar [`UK biobank`](https://github.com/bids-standard/bids-examples/tree/master/genetics_ukbb)
+
+ More of the admonition
+
+And here we resume normal thing.
diff --git a/pdf_build_src/tests/data/input/modality-specific-files/magnetic-resonance-imaging-data.md b/pdf_build_src/tests/data/input/modality-specific-files/magnetic-resonance-imaging-data.md
new file mode 100644
index 0000000000..bfc1b8509a
--- /dev/null
+++ b/pdf_build_src/tests/data/input/modality-specific-files/magnetic-resonance-imaging-data.md
@@ -0,0 +1,10 @@
+# Magnetic Resonance Imaging
+
+## Common metadata fields
+
+!!! warning "foo bar"
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit.
+ Nulla et euismod nulla.
+ Curabitur feugiat, tortor non consequat finibus, justo purus auctor massa,
+ nec semper lorem quam in massa.
diff --git a/readthedocs.yml b/readthedocs.yml
index cc3f461fc7..5611c59505 100644
--- a/readthedocs.yml
+++ b/readthedocs.yml
@@ -2,11 +2,14 @@ version: 2
build:
os: ubuntu-22.04
+ apt_packages:
+ - jq
tools:
python: "3.11"
jobs:
pre_build:
- bst -v export --output src/schema.json
+ - tools/no-bad-schema-paths.sh src/schema.json # README.md might need fixing
mkdocs:
configuration: mkdocs.yml
diff --git a/release_images/merge_commit.png b/release_images/merge_commit.png
new file mode 100644
index 0000000000..3df09babf9
Binary files /dev/null and b/release_images/merge_commit.png differ
diff --git a/src/CHANGES.md b/src/CHANGES.md
index f6b0a97cd4..087368ffea 100644
--- a/src/CHANGES.md
+++ b/src/CHANGES.md
@@ -1,24 +1,44 @@
# Changelog
-## [Unreleased](https://github.com/bids-standard/bids-specification/tree/HEAD)
-
+## [v1.9.0](https://github.com/bids-standard/bids-specification/tree/v1.9.0) (2023-11-20)
+
+- \[FIX] mention phenotype dir in folder structure [#1644](https://github.com/bids-standard/bids-specification/pull/1644) ([Remi-Gau](https://github.com/Remi-Gau))
+- \[ENH] add `ElectricalStimulation` and `\*Parameters` metadata to MEEG jsons [#1638](https://github.com/bids-standard/bids-specification/pull/1638) ([sappelhoff](https://github.com/sappelhoff))
+- \[FIX] years and degrees Units and unit to be singular to match the rest [#1631](https://github.com/bids-standard/bids-specification/pull/1631) ([yarikoptic](https://github.com/yarikoptic))
+- \[FIX] Hierarchical Event Descriptors (HED) page update [#1623](https://github.com/bids-standard/bids-specification/pull/1623) ([effigies](https://github.com/effigies))
+- \[ENH] Add `descriptions.tsv` file relating to the `desc-\` entity [#1613](https://github.com/bids-standard/bids-specification/pull/1613) ([CPernet](https://github.com/CPernet))
+- \[FIX] Do not require notch frequencies to be parsed as numbers, accommodating multiples [#1605](https://github.com/bids-standard/bids-specification/pull/1605) ([effigies](https://github.com/effigies))
+- \[ENH] Allow Levels field of column descriptions to be objects with TermURLs for each level [#1603](https://github.com/bids-standard/bids-specification/pull/1603) ([Remi-Gau](https://github.com/Remi-Gau))
+- \[ENH] Add optional low_cutoff and high_cutoff columns for fnirs channels.tsv [#1597](https://github.com/bids-standard/bids-specification/pull/1597) ([Remi-Gau](https://github.com/Remi-Gau))
+- \[FIX] Recommend SliceTiming if MRAcquisitionType is "2D" [#1594](https://github.com/bids-standard/bids-specification/pull/1594) ([tsalo](https://github.com/tsalo))
+- \[ENH] Add Level objects to channels.json for motion [#1591](https://github.com/bids-standard/bids-specification/pull/1591) ([effigies](https://github.com/effigies))
+- \[ENH] Add "chunk" entity to MRI datatype [#1586](https://github.com/bids-standard/bids-specification/pull/1586) ([valosekj](https://github.com/valosekj))
+- \[SCHEMA]\[ENH] Remove atlas entity and replace it with seg in prep of BEP038 [#1579](https://github.com/bids-standard/bids-specification/pull/1579) ([melanieganz](https://github.com/melanieganz))
+- \[FIX] Correct PDw suffix description [#1578](https://github.com/bids-standard/bids-specification/pull/1578) ([jeremie-fouquet](https://github.com/jeremie-fouquet))
+- \[FIX] improve longitudinal example [#1576](https://github.com/bids-standard/bids-specification/pull/1576) ([Remi-Gau](https://github.com/Remi-Gau))
+- \[INFRA] Adds Kim Ray as maintainer. [#1571](https://github.com/bids-standard/bids-specification/pull/1571) ([arokem](https://github.com/arokem))
+- \[ENH] Allow for "echo" entity to be used with T1w and other nonparametric anatomical suffixes [#1570](https://github.com/bids-standard/bids-specification/pull/1570) ([yarikoptic](https://github.com/yarikoptic))
+- \[FIX] Update `templates` in modality-agnostic-files [#1564](https://github.com/bids-standard/bids-specification/pull/1564) ([sappelhoff](https://github.com/sappelhoff))
+- \[FIX] Clarify that electrodes.tsv is optional for MEG, for use with simultaneous (i)EEG [#1555](https://github.com/bids-standard/bids-specification/pull/1555) ([effigies](https://github.com/effigies))
+- \[ENH] Allow UNKNOWN and NONE ContrastBolusIngredients [#1547](https://github.com/bids-standard/bids-specification/pull/1547) ([Remi-Gau](https://github.com/Remi-Gau))
- \[FIX] Update links to BIDS examples [#1545](https://github.com/bids-standard/bids-specification/pull/1545) ([Remi-Gau](https://github.com/Remi-Gau))
+- \[ENH] add schema in appendix [#1543](https://github.com/bids-standard/bids-specification/pull/1543) ([Remi-Gau](https://github.com/Remi-Gau))
+- \[ENH] add "visual correction" and "head stabilization" metadata [#1539](https://github.com/bids-standard/bids-specification/pull/1539) ([Remi-Gau](https://github.com/Remi-Gau))
- \[ENH] Clarify meaning of raw vs derivative datasets [#1537](https://github.com/bids-standard/bids-specification/pull/1537) ([CPernet](https://github.com/CPernet))
- \[FIX] match subject label in folder and filename in func example [#1536](https://github.com/bids-standard/bids-specification/pull/1536) ([Remi-Gau](https://github.com/Remi-Gau))
-- FIX: Trail MEG directory formats with `/` [#1534](https://github.com/bids-standard/bids-specification/pull/1534) ([effigies](https://github.com/effigies))
+- \[FIX] Trail MEG directory formats with `/` [#1534](https://github.com/bids-standard/bids-specification/pull/1534) ([effigies](https://github.com/effigies))
- \[ENH] Permit CITATION.cff as structured alternative to some dataset_description fields [#1525](https://github.com/bids-standard/bids-specification/pull/1525) ([effigies](https://github.com/effigies))
- \[FIX] Add missing column description in physio example [#1514](https://github.com/bids-standard/bids-specification/pull/1514) ([sappelhoff](https://github.com/sappelhoff))
- \[ENH] Clarify that data files must be uniquely identified by entities/suffix [#1508](https://github.com/bids-standard/bids-specification/pull/1508) ([sappelhoff](https://github.com/sappelhoff))
-- DOC: Auto-generate full API docs [#1505](https://github.com/bids-standard/bids-specification/pull/1505) ([effigies](https://github.com/effigies))
- \[INFRA] Publish schema tools API docs to additional ReadTheDocs site [#1491](https://github.com/bids-standard/bids-specification/pull/1491) ([bendhouseart](https://github.com/bendhouseart))
- \[FIX] Remove references to unspecified aslcontext.json [#1485](https://github.com/bids-standard/bids-specification/pull/1485) ([Remi-Gau](https://github.com/Remi-Gau))
+- ENH: Define channel column for events and Delimiter field for column descriptions [#1483](https://github.com/bids-standard/bids-specification/pull/1483) ([effigies](https://github.com/effigies))
- \[FIX] Revert index (entity format) definition to be a non-negative number, permitting zero [#1482](https://github.com/bids-standard/bids-specification/pull/1482) ([TheChymera](https://github.com/TheChymera))
-- ENH: Add version list to schema.meta and a warning on unknown BIDSVersion [#1472](https://github.com/bids-standard/bids-specification/pull/1472) ([effigies](https://github.com/effigies))
- \[FIX] Clean up qMRI RB1COR notes [#1465](https://github.com/bids-standard/bids-specification/pull/1465) ([lukeje](https://github.com/lukeje))
- \[ENH] Allow fractional seconds in StartTime [#1459](https://github.com/bids-standard/bids-specification/pull/1459) ([sappelhoff](https://github.com/sappelhoff))
- \[MISC] consistently list filename templates; `ext` --> `extension`; `\_photo.jpg` --> `\_photo.\` [#1458](https://github.com/bids-standard/bids-specification/pull/1458) ([sappelhoff](https://github.com/sappelhoff))
- \[FIX] Demote `sample` and `value` columns in `events.tsv` from OPTIONAL to arbitrary [#1457](https://github.com/bids-standard/bids-specification/pull/1457) ([sappelhoff](https://github.com/sappelhoff))
-- ENH: Clarify shape of PDT2 images and recommend acq entity for split PDw/T2w images [#1448](https://github.com/bids-standard/bids-specification/pull/1448) ([effigies](https://github.com/effigies))
+- \[ENH] Clarify shape of PDT2 images and recommend acq entity for split PDw/T2w images [#1448](https://github.com/bids-standard/bids-specification/pull/1448) ([effigies](https://github.com/effigies))
- \[ENH] clarify guiding principles for requirement levels [#1444](https://github.com/bids-standard/bids-specification/pull/1444) ([sappelhoff](https://github.com/sappelhoff))
- \[FIX] Clarify that dataset_description.Genetics object is required for genetics data [#1442](https://github.com/bids-standard/bids-specification/pull/1442) ([sappelhoff](https://github.com/sappelhoff))
- \[ENH] Clarify that BIDS specification is in American English [#1439](https://github.com/bids-standard/bids-specification/pull/1439) ([yarikoptic](https://github.com/yarikoptic))
@@ -27,25 +47,22 @@
- \[FIX] Rename `channels.tsv` column: `orientation\_component` to `component` [#1417](https://github.com/bids-standard/bids-specification/pull/1417) ([sjeung](https://github.com/sjeung))
- \[ENH] Some missing docstrings for bidsschematools [#1413](https://github.com/bids-standard/bids-specification/pull/1413) ([anibalsolon](https://github.com/anibalsolon))
- \[FIX] fixing some minor issues introduced recently [#1411](https://github.com/bids-standard/bids-specification/pull/1411) ([yarikoptic](https://github.com/yarikoptic))
-- SCHEMA: Implement some fairly easy rules [#1410](https://github.com/bids-standard/bids-specification/pull/1410) ([effigies](https://github.com/effigies))
-- \[REF] refactor institution and task tables [#1397](https://github.com/bids-standard/bids-specification/pull/1397) ([Remi-Gau](https://github.com/Remi-Gau))
- \[ENH] Add paragraph about richness versus distinctness in filenames [#1392](https://github.com/bids-standard/bids-specification/pull/1392) ([CPernet](https://github.com/CPernet))
- \[FIX] Updated HED score library version [#1390](https://github.com/bids-standard/bids-specification/pull/1390) ([VisLab](https://github.com/VisLab))
- \[FIX] Updated links and fixed typos in hed appendix [#1383](https://github.com/bids-standard/bids-specification/pull/1383) ([VisLab](https://github.com/VisLab))
- \[ENH] add screen parameters metadata [#1369](https://github.com/bids-standard/bids-specification/pull/1369) ([Remi-Gau](https://github.com/Remi-Gau))
-- RF: allow for any "recording" file to be listed in \_scans.tsv not just "neural recording" [#1368](https://github.com/bids-standard/bids-specification/pull/1368) ([yarikoptic](https://github.com/yarikoptic))
+- \[MISC] allow for any "recording" file to be listed in \_scans.tsv not just "neural recording" [#1368](https://github.com/bids-standard/bids-specification/pull/1368) ([yarikoptic](https://github.com/yarikoptic))
- \[FIX] wrong usage of DOI in SourceDatasets example [#1361](https://github.com/bids-standard/bids-specification/pull/1361) ([sappelhoff](https://github.com/sappelhoff))
- \[FIX] make references to Neuromag/Elekta/MEGIN consistent [#1359](https://github.com/bids-standard/bids-specification/pull/1359) ([sappelhoff](https://github.com/sappelhoff))
-- \[DOC] link to steering group section on bids website [#1358](https://github.com/bids-standard/bids-specification/pull/1358) ([Remi-Gau](https://github.com/Remi-Gau))
- \[ENH] Add reference for ASL BEP [#1357](https://github.com/bids-standard/bids-specification/pull/1357) ([Remi-Gau](https://github.com/Remi-Gau))
- \[FIX] remove redundant entity definitions in behavioral page [#1356](https://github.com/bids-standard/bids-specification/pull/1356) ([Remi-Gau](https://github.com/Remi-Gau))
- \[FIX] add missing processing entity for MEG physio files and render physio filename templates for fNIRS [#1355](https://github.com/bids-standard/bids-specification/pull/1355) ([Remi-Gau](https://github.com/Remi-Gau))
- \[ENH] Recommend gzip header fields be set to empty values [#1349](https://github.com/bids-standard/bids-specification/pull/1349) ([kousu](https://github.com/kousu))
- \[FIX] clarify TriggerChannelCount and TRIG type [#1342](https://github.com/bids-standard/bids-specification/pull/1342) ([sappelhoff](https://github.com/sappelhoff))
- \[ENH] Add qMRI fieldmap filename templates [#1336](https://github.com/bids-standard/bids-specification/pull/1336) ([Remi-Gau](https://github.com/Remi-Gau))
-- ENH: Introduce GIFTI formats in derivatives [#1333](https://github.com/bids-standard/bids-specification/pull/1333) ([effigies](https://github.com/effigies))
+- \[ENH] Introduce GIFTI formats in derivatives [#1333](https://github.com/bids-standard/bids-specification/pull/1333) ([effigies](https://github.com/effigies))
- \[ENH] Add ParallelReductionFactorOutOfPlane to MRI metadata [#1221](https://github.com/bids-standard/bids-specification/pull/1221) ([lukeje](https://github.com/lukeje))
-- \[ENH]\[SCHEMA] Adding an OPTIONAL \_task-\ to structural MRI acquisitions [#1185](https://github.com/bids-standard/bids-specification/pull/1185) ([melanieganz](https://github.com/melanieganz))
+- \[ENH]\[SCHEMA] Adding an OPTIONAL `\_task-\` to structural MRI acquisitions [#1185](https://github.com/bids-standard/bids-specification/pull/1185) ([melanieganz](https://github.com/melanieganz))
- \[INFRA] use tributors to list contributors and CITATION.cff for referencing [#1115](https://github.com/bids-standard/bids-specification/pull/1115) ([Remi-Gau](https://github.com/Remi-Gau))
- \[ENH] Extend BIDS for Motion data (BEP029) [#981](https://github.com/bids-standard/bids-specification/pull/981) ([JuliusWelzel](https://github.com/JuliusWelzel))
- \[SCHEMA] Add full object definitions for valid values in schema [#919](https://github.com/bids-standard/bids-specification/pull/919) ([tsalo](https://github.com/tsalo))
@@ -482,7 +499,7 @@
- \[ENH] add `ce-\` for fmri data [#70](https://github.com/bids-standard/bids-specification/pull/70) ([dasturge](https://github.com/dasturge))
- \[INFRA] pin pip version [#68](https://github.com/bids-standard/bids-specification/pull/68) ([chrisgorgo](https://github.com/chrisgorgo))
- \[MISC] Fix link in index [#46](https://github.com/bids-standard/bids-specification/pull/46) ([chrisgorgo](https://github.com/chrisgorgo))
-- \[MISC] edit contributing guide [#44](https://github.com/bids-standard/bids-specification/pull/44) ([Park-Patrick](https://github.com/Park-Patrick))
+- \[MISC] edit contributing guide [#44](https://github.com/bids-standard/bids-specification/pull/44) ([patrick-g-h](https://github.com/patrick-g-h))
- \[INFRA] Mkdocs configuration and RTD setup [#42](https://github.com/bids-standard/bids-specification/pull/42) ([choldgraf](https://github.com/choldgraf))
- \[MISC] Move definitions, compulsory, and raw/derivatives sections to principles [#40](https://github.com/bids-standard/bids-specification/pull/40) ([chrisgorgo](https://github.com/chrisgorgo))
- \[MISC] Remove duplicate section [#39](https://github.com/bids-standard/bids-specification/pull/39) ([chrisgorgo](https://github.com/chrisgorgo))
diff --git a/src/appendices/contributors.md b/src/appendices/contributors.md
index e2da78c45b..2ffab4740f 100644
--- a/src/appendices/contributors.md
+++ b/src/appendices/contributors.md
@@ -59,6 +59,7 @@ If you contributed to the BIDS ecosystem and your name is not listed, please add
| Alexandre Routier | 📖 |
| Alexandru Foias | 📖🔣 |
| Ali Khan | 📖 |
+| Alizee Wickenheiser | 🔧 |
| Ana Fouto | 📓 |
| Anders Eklund | 📖📢💻 |
| Andrea Pigorini | 📖 |
@@ -88,6 +89,7 @@ If you contributed to the BIDS ecosystem and your name is not listed, please add
| Brian N. Lundstrom | 📖 |
| Camille Maumet | 📖 |
| Carlo Miniussi | 📖 |
+| Cecile Madjar | 🔣🔧 |
| Chloé Pasturel | 📖 |
| Chris Benjamin | 📖 |
| Chris Gahnström | 📖 |
@@ -142,7 +144,7 @@ If you contributed to the BIDS ecosystem and your name is not listed, please add
| Fidel Alfaro Almagro | 💬📖💡🔌 |
| Filip Szczepankiewicz | 📖 |
| Filippo Maria Castelli | 📖🔣 |
-| Franco Pestilli | 📖💻🎨💡🤔👀🔧📋🔍🚇 |
+| Franco Pestilli | 📖💻🎨💡🤔👀🔧📋🔍🚇📢 |
| Franklin W. Feingold | 📋📝✅💬🤔🎨📢👀🚇🖋️📆💻 |
| François Tadel | 📖🔌💡 |
| Gaia Rizzo | 📖 |
@@ -190,6 +192,7 @@ If you contributed to the BIDS ecosystem and your name is not listed, please add
| Jean-Dominique Gallezot | 📖 |
| Jean-Philippe Lachaux | 📖 |
| Jeanette Mumford | 📖 |
+| Jefferson Casimir | 🔧 |
| Jeffrey G. Ojemann | 📖 |
| Jeffrey S. Grethe | 💬🐛✅📢💻 |
| JegouA | 💻 |
@@ -224,6 +227,7 @@ If you contributed to the BIDS ecosystem and your name is not listed, please add
| Kris Thielemans | 📖 |
| Kristofer Bouchard | 📖 |
| Kurt Schilling | 📖 |
+| Laetitia Fesselier | 🔧 |
| Laura and John Arnold Foundation | 💵 |
| Leandro Beltrachini | 📖 |
| Lee Kamentsky | 📖 |
@@ -316,6 +320,7 @@ If you contributed to the BIDS ecosystem and your name is not listed, please add
| Soichi Hayashi | 📖🔧🐛 |
| Stefan Appelhoff | 📖💬🤔🐛💡💻👀⚠️📢✅🔧🔌📝🚧🔣 |
| Stephan Bickel | 📖 |
+| Steven Meisler | 🐛💻💬🔧📓 |
| Suyash Bhogawar | 📖💡⚠️🔧💬 |
| Sylvain Baillet | 📖🔍 |
| Sylvain Takerkart | 📖 |
@@ -340,6 +345,7 @@ If you contributed to the BIDS ecosystem and your name is not listed, please add
| Tor Wager | 📖 |
| Travis Riddle | 📖🔧🐛 |
| Tristan Glatard | 📖💻 |
+| Tyler Collins | 🔣🔧 |
| Ulrike Bingel | 📖 |
| Vanessa Sochat | 📖 |
| Vasudev Raguram | 💻🎨📖🔧 |
@@ -351,7 +357,7 @@ If you contributed to the BIDS ecosystem and your name is not listed, please add
| William Triplett | 📖 |
| Wouter V. Potters | 💻📖 |
| Xiangrui Li | 📖💻 |
-| Yaroslav O. Halchenko | 📖📢🔧💬🐛💻 |
+| Yaroslav O. Halchenko | 📖📢🔧💬🐛💻🔣🔍🤔🔌👀📓🚇 |
| Yoni Ashar | 📖 |
| Yuan Wang | 💻 |
| Zachary Michael | 📖 |
diff --git a/src/appendices/coordinate-systems.md b/src/appendices/coordinate-systems.md
index 157f327d79..c5b44207bc 100644
--- a/src/appendices/coordinate-systems.md
+++ b/src/appendices/coordinate-systems.md
@@ -86,7 +86,7 @@ of restricted keywords for MEG, EEG, or iEEG, please open a new issue on the
Note that the short descriptions below may not capture all details.
For detailed descriptions of the coordinate systems below, please see the
-[FieldTrip webpage](https://www.fieldtriptoolbox.org/faq/how_are_the_different_head_and_mri_coordinate_systems_defined).
+[FieldTrip webpage](https://www.fieldtriptoolbox.org/faq/how_are_the_different_head_and_mri_coordinate_systems_defined/).
### Commonly used anatomical landmarks in MEG, EEG, and iEEG research
@@ -195,25 +195,25 @@ Unless specified explicitly in the sidecar file in the
### Standard template identifiers
-| **Coordinate System** | **Description** | **Used by** | **Reference** |
-| ---------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------ | ---------------------------------------------------------------------------------------------------------------------------------- |
-| ICBM452AirSpace | Reference space defined by the "average of 452 T1-weighted MRIs of normal young adult brains" with "linear transforms of the subjects into the atlas space using a 12-parameter affine transformation" | | [https://www.loni.usc.edu/research/atlases](https://www.loni.usc.edu/research/atlases) |
-| ICBM452Warp5Space | Reference space defined by the "average of 452 T1-weighted MRIs of normal young adult brains" "based on a 5th order polynomial transformation into the atlas space" | | [https://www.loni.usc.edu/research/atlases](https://www.loni.usc.edu/research/atlases) |
-| IXI549Space | Reference space defined by the average of the "549 (...) subjects from the IXI dataset" linearly transformed to ICBM MNI 452. | SPM12 | [https://brain-development.org/](https://brain-development.org/) |
-| fsaverage | The `fsaverage` is a **dual template** providing both volumetric and surface coordinates references. The volumetric template corresponds to a FreeSurfer variant of `MNI305` space. The `fsaverage` atlas also defines a surface reference system (formerly described as fsaverage\[3\|4\|5\|6\|sym\]). | Freesurfer | |
-| fsaverageSym | The `fsaverage` is a **dual template** providing both volumetric and surface coordinates references. The volumetric template corresponds to a FreeSurfer variant of `MNI305` space. The `fsaverageSym` atlas also defines a symmetric surface reference system (formerly described as `fsaveragesym`). | Freesurfer | |
-| fsLR | The `fsLR` is a **dual template** providing both volumetric and surface coordinates references. The volumetric template corresponds to `MNI152NLin6Asym`. Surface templates are given at several sampling densities: 164k (used by HCP pipelines for 3T and 7T anatomical analysis), 59k (used by HCP pipelines for 7T MRI bold and DWI analysis), 32k (used by HCP pipelines for 3T MRI bold and DWI analysis), or 4k (used by HCP pipelines for MEG analysis) fsaverage_LR surface reconstructed from the T1w image. | Freesurfer | |
-| MNIColin27 | Average of 27 T1 scans of a single subject | SPM96 | [https://www.bic.mni.mcgill.ca/ServicesAtlases/Colin27Highres](https://www.bic.mni.mcgill.ca/ServicesAtlases/Colin27Highres) |
-| MNI152Lin | Also known as ICBM (version with linear coregistration) | SPM99 to SPM8 | [https://www.bic.mni.mcgill.ca/ServicesAtlases/ICBM152Lin](https://www.bic.mni.mcgill.ca/ServicesAtlases/ICBM152Lin) |
-| MNI152NLin2009\[a-c\]\[Sym\|Asym\] | Also known as ICBM (non-linear coregistration with 40 iterations, released in 2009). It comes in either three different flavors each in symmetric or asymmetric version. | DARTEL toolbox in SPM12b | [https://www.bic.mni.mcgill.ca/ServicesAtlases/ICBM152NLin2009](https://www.bic.mni.mcgill.ca/ServicesAtlases/ICBM152NLin2009) |
-| MNI152NLin6Sym | Also known as symmetric ICBM 6th generation (non-linear coregistration). | FSL | [https://www.bic.mni.mcgill.ca/ServicesAtlases/ICBM152NLin6](https://www.bic.mni.mcgill.ca/ServicesAtlases/ICBM152NLin6) |
-| MNI152NLin6ASym | A variation of `MNI152NLin6Sym` built by A. Janke that is released as the _MNI template_ of FSL. Volumetric templates included with [HCP-Pipelines](https://github.com/Washington-University/HCPpipelines/tree/master/global/templates) correspond to this template too. | HCP-Pipelines | [doi:10.1016/j.neuroimage.2012.01.024](https://doi.org/10.1016/j.neuroimage.2012.01.024) |
-| MNI305 | Also known as avg305. | | |
-| NIHPD | Pediatric templates generated from the NIHPD sample. Available for different age groups (4.5–18.5 y.o., 4.5–8.5 y.o., 7–11 y.o., 7.5–13.5 y.o., 10–14 y.o., 13–18.5 y.o. This template also comes in either -symmetric or -asymmetric flavor. | | [https://www.bic.mni.mcgill.ca/ServicesAtlases/NIHPD-obj1](https://www.bic.mni.mcgill.ca/ServicesAtlases/NIHPD-obj1) |
-| OASIS30AntsOASISAnts | | | [https://figshare.com/articles/ANTs_ANTsR_Brain_Templates/915436](https://figshare.com/articles/ANTs_ANTsR_Brain_Templates/915436) |
-| OASIS30Atropos | | | [https://mindboggle.info/data.html](https://mindboggle.info/data.html) |
-| Talairach | Piecewise linear scaling of the brain is implemented as described in TT88. | | [http://talairach.org/](http://talairach.org/) |
-| UNCInfant | Infant Brain Atlases from Neonates to 1- and 2-year-olds. | | [https://www.nitrc.org/projects/pediatricatlas](https://www.nitrc.org/projects/pediatricatlas) |
+| **Coordinate System** | **Description** | **Used by** | **Reference** |
+| ---------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------- |
+| ICBM452AirSpace | Reference space defined by the "average of 452 T1-weighted MRIs of normal young adult brains" with "linear transforms of the subjects into the atlas space using a 12-parameter affine transformation" | | [https://www.loni.usc.edu/research/atlases](https://www.loni.usc.edu/research/atlases) |
+| ICBM452Warp5Space | Reference space defined by the "average of 452 T1-weighted MRIs of normal young adult brains" "based on a 5th order polynomial transformation into the atlas space" | | [https://www.loni.usc.edu/research/atlases](https://www.loni.usc.edu/research/atlases) |
+| IXI549Space | Reference space defined by the average of the "549 (...) subjects from the IXI dataset" linearly transformed to ICBM MNI 452. | SPM12 | [https://brain-development.org/](https://brain-development.org/) |
+| fsaverage | The `fsaverage` is a **dual template** providing both volumetric and surface coordinates references. The volumetric template corresponds to a FreeSurfer variant of `MNI305` space. The `fsaverage` atlas also defines a surface reference system (formerly described as fsaverage\[3\|4\|5\|6\|sym\]). | Freesurfer | |
+| fsaverageSym | The `fsaverage` is a **dual template** providing both volumetric and surface coordinates references. The volumetric template corresponds to a FreeSurfer variant of `MNI305` space. The `fsaverageSym` atlas also defines a symmetric surface reference system (formerly described as `fsaveragesym`). | Freesurfer | |
+| fsLR | The `fsLR` is a **dual template** providing both volumetric and surface coordinates references. The volumetric template corresponds to `MNI152NLin6Asym`. Surface templates are given at several sampling densities: 164k (used by HCP pipelines for 3T and 7T anatomical analysis), 59k (used by HCP pipelines for 7T MRI bold and DWI analysis), 32k (used by HCP pipelines for 3T MRI bold and DWI analysis), or 4k (used by HCP pipelines for MEG analysis) fsaverage_LR surface reconstructed from the T1w image. | Freesurfer | |
+| MNIColin27 | Average of 27 T1 scans of a single subject | SPM96 | [https://www.bic.mni.mcgill.ca/ServicesAtlases/Colin27Highres](https://www.bic.mni.mcgill.ca/ServicesAtlases/Colin27Highres) |
+| MNI152Lin | Also known as ICBM (version with linear coregistration) | SPM99 to SPM8 | [https://www.bic.mni.mcgill.ca/ServicesAtlases/ICBM152Lin](https://www.bic.mni.mcgill.ca/ServicesAtlases/ICBM152Lin) |
+| MNI152NLin2009\[a-c\]\[Sym\|Asym\] | Also known as ICBM (non-linear coregistration with 40 iterations, released in 2009). It comes in either three different flavors each in symmetric or asymmetric version. | DARTEL toolbox in SPM12b | [https://www.bic.mni.mcgill.ca/ServicesAtlases/ICBM152NLin2009](https://www.bic.mni.mcgill.ca/ServicesAtlases/ICBM152NLin2009) |
+| MNI152NLin6Sym | Also known as symmetric ICBM 6th generation (non-linear coregistration). | FSL | [https://www.bic.mni.mcgill.ca/ServicesAtlases/ICBM152NLin6](https://www.bic.mni.mcgill.ca/ServicesAtlases/ICBM152NLin6) |
+| MNI152NLin6ASym | A variation of `MNI152NLin6Sym` built by A. Janke that is released as the _MNI template_ of FSL. Volumetric templates included with [HCP-Pipelines](https://github.com/Washington-University/HCPpipelines/tree/master/global/templates) correspond to this template too. | HCP-Pipelines | [doi:10.1016/j.neuroimage.2012.01.024](https://doi.org/10.1016/j.neuroimage.2012.01.024) |
+| MNI305 | Also known as avg305. | | |
+| NIHPD | Pediatric templates generated from the NIHPD sample. Available for different age groups (4.5–18.5 y.o., 4.5–8.5 y.o., 7–11 y.o., 7.5–13.5 y.o., 10–14 y.o., 13–18.5 y.o. This template also comes in either -symmetric or -asymmetric flavor. | | [https://www.bic.mni.mcgill.ca/ServicesAtlases/NIHPD-obj1](https://www.bic.mni.mcgill.ca/ServicesAtlases/NIHPD-obj1) |
+| OASIS30AntsOASISAnts | | | [https://figshare.com/articles/dataset/ANTs_ANTsR_Brain_Templates/915436](https://figshare.com/articles/dataset/ANTs_ANTsR_Brain_Templates/915436) |
+| OASIS30Atropos | | | [https://mindboggle.info/data.html](https://mindboggle.info/data.html) |
+| Talairach | Piecewise linear scaling of the brain is implemented as described in TT88. | | [http://talairach.org/](http://talairach.org/) |
+| UNCInfant | Infant Brain Atlases from Neonates to 1- and 2-year-olds. | | [https://www.nitrc.org/projects/pediatricatlas](https://www.nitrc.org/projects/pediatricatlas) |
The following template identifiers are retained for backwards compatibility
of BIDS implementations.
@@ -221,7 +221,7 @@ However, their use is [DEPRECATED][deprecated].
| **Coordinate System** | **Description** | **RECOMMENDED alternative identifier** |
| ----------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------- |
-| fsaverage\[3\|4\|5\|6\|sym\] | Images were sampled to the FreeSurfer surface reconstructed from the subject’s T1w image, and registered to an fsaverage template | fsaverage\[Sym\] |
+| fsaverage\[3\|4\|5\|6\|sym\] | Images were sampled to the FreeSurfer surface reconstructed from the subject's T1w image, and registered to an fsaverage template | fsaverage\[Sym\] |
| UNCInfant\[0\|1\|2\]V\[21\|22\|23\] | Infant Brain Atlases from Neonates to 1- and 2-year-olds. [https://www.nitrc.org/projects/pediatricatlas](https://www.nitrc.org/projects/pediatricatlas) | UNCInfant |
### Nonstandard coordinate system identifiers
diff --git a/src/appendices/hed.md b/src/appendices/hed.md
index abbe092d32..4582356ee5 100644
--- a/src/appendices/hed.md
+++ b/src/appendices/hed.md
@@ -12,19 +12,19 @@ A HED annotation consists of terms selected from a controlled
hierarchical vocabulary (the HED schema).
Individual terms are comma-separated and may be grouped using parentheses to indicate
association.
-See [https://www.hedtags.org/display_hed.html](https://www.hedtags.org/display_hed.html)
+See the [HED Schema Browser](https://www.hedtags.org/display_hed.html)
to view the HED schema and the
-[HED resources](https://www.hed-resources.org) site for additional information.
+[HED resources](https://www.hed-resources.org/en/latest/) site for additional information.
Starting with HED version 8.0.0, HED allows users to annotate using individual
-terms or partial paths in the HED vocabulary (for example `Red` or `Visual-presentation`)
+terms or partial paths in the HED vocabulary (for example, `Red` or `Visual-presentation`)
rather than the full paths in the HED hierarchy (
`Property/Sensory-property/Sensory-attribute/Visual-attribute/Color/CSS-color/Red-color/Red`
or
`Property/Sensory-property/Sensory-presentation/Visual-presentation`).
HED specific tools MUST treat the short (single term) and long (full path) HED tag forms interchangeably,
-converting between the forms when necessary based on the HED schema.
+converting between the forms, when necessary, based on the HED schema.
Examples of test datasets using the various forms can be found in
[hed-examples/datasets](https://github.com/hed-standard/hed-examples/tree/main/datasets)
on GitHub.
@@ -40,14 +40,14 @@ files in various places in the dataset hierarchy
Dataset curators MAY also include additional columns and define their
meanings in associated JSON sidecar files (`events.json`).
-Example: An excerpt from an `events.tsv` file containing three columns
+**Example:** An excerpt from an `events.tsv` file containing three columns
(`trial_type`, `response_time`, and `stim_file`) in addition to
the required `onset` and `duration` columns.
```Text
onset duration trial_type response_time stim_file
1.2 0.6 go 1.435 images/red_square.jpg
-5.6 0.6 stop 1.739 images/blue_square.jpg
+5.6 0.6 stop n/a images/blue_square.jpg
```
The `trial_type` column in the above example contains a limited number of distinct
@@ -66,13 +66,13 @@ The HED annotation for a value column must include a `#` placeholder,
which dedicated HED tools MUST replace by the actual column value when the annotations
are assembled for analysis.
-Example: An accompanying `events.json` sidecar describing both categorical and
+**Example:** An accompanying `events.json` sidecar describing both categorical and
value columns of the previous example.
The `duration` column is also annotated as a value column.
```JSON
{
- "Duration": {
+ "duration": {
"LongName": "Image duration",
"Description": "Duration of the image presentations",
"Units": "s",
@@ -82,12 +82,12 @@ The `duration` column is also annotated as a value column.
"LongName": "Event category",
"Description": "Indicator of type of action that is expected",
"Levels": {
- "go": "A blue square is displayed to indicate starting",
- "stop": "A red square is displayed to indicate stopping"
+ "go": "A red square is displayed to indicate starting",
+ "stop": "A blue square is displayed to indicate stopping"
},
"HED": {
- "go": "Sensory-event, Visual-presentation, (Square, Blue)",
- "stop": "Sensory-event, Visual-presentation, (Square, Red)"
+ "go": "Sensory-event, Visual-presentation, (Square, Red)",
+ "stop": "Sensory-event, Visual-presentation, (Square, Blue)"
}
},
"response_time": {
@@ -106,18 +106,20 @@ The `duration` column is also annotated as a value column.
Dedicated HED tools MUST assemble the HED annotation for each event (row) by concatenating the
annotations for each column, along with the annotation contained directly in a `HED` column
-of that row as described in the next section.
+of that row, as described in the next section.
-Example: The fully assembled annotation for the first event in the above
+**Example:** The fully assembled annotation for the first event in the above
`events.tsv` file with onset `1.2` (the first row) is:
```Text
-Duration/0.6 s, Sensory-event, Visual-presentation, (Square, Blue),
-(Delay/1.435 ms, Agent-action, (Experiment-participant, (Press, Mouse-button))),
+Duration/0.6 s, Sensory-event, Visual-presentation,
+((Square, Red), (Computer-screen, Center-of)),
+(Delay/1.435 ms, Agent-action, (Experiment-participant,
+(Press, Mouse-button))),
Pathname/images/red_square.jpg
```
-## Annotation using the `HED` column
+### Annotation using the `HED` column
Another tagging strategy is to annotate individual events directly by
including a `HED` column in the `events.tsv` file.
@@ -138,7 +140,7 @@ event annotations.
Annotations placed in sidecars are the RECOMMENDED way to annotate data using HED.
These annotations are preferred to those placed
-directly in the `HED` column, because they are simpler, more compact,
+directly in the `HED` column because they are simpler, more compact,
more easily edited, and less prone to inconsistencies.
## HED and the BIDS inheritance principle
@@ -162,11 +164,11 @@ The HED vocabulary is specified by a HED schema,
which delineates the allowed HED path strings.
The version of HED used in tagging a dataset should be provided in the `HEDVersion`
field of the `dataset_description.json` file located in the dataset root directory.
-This allows for a proper validation of the HED annotations
-(for example using the `bids-validator`).
+This allows for properly validating the HED annotations
+(for example, using the `bids-validator`).
-Example: The following `dataset_description.json` file specifies that the
-[`HED8.1.0.xml`](https://github.com/hed-standard/hed-schemas/blob/main/standard_schema/hedxml/HED8.1.0.xml)
+**Example:** The following `dataset_description.json` file specifies that the
+[`HED8.2.0.xml`](https://github.com/hed-standard/hed-schemas/blob/main/standard_schema/hedxml/HED8.2.0.xml)
file from the `standard_schema/hedxml` directory of the
[`hed-schemas`](https://github.com/hed-standard/hed-schemas)
repository on GitHub should be used to validate the study event annotations.
@@ -174,29 +176,49 @@ repository on GitHub should be used to validate the study event annotations.
```JSON
{
"Name": "A great experiment",
- "BIDSVersion": "1.7.0",
- "HEDVersion": "8.1.0"
+ "BIDSVersion": "1.8.0",
+ "HEDVersion": "8.2.0"
}
```
-If you omit the `HEDVersion` field from the dataset description file,
-a warning will be generated and
-any present HED information will be validated using the latest version of the HED schema.
-This is bound to result in problems, and hence, it is strongly RECOMMENDED that the
-`HEDVersion` field be included when using HED in a BIDS dataset.
+The BIDS validator will generate an error if your dataset uses HED
+and the `HEDVersion` field is missing from the dataset description file.
+To avoid this, include a `HEDVersion` field in the `dataset_description.json`
+if you are using HED annotations.
### Using HED library schemas
-HED also allows you to use one or more specialized vocabularies along with or instead of
-the standard vocabulary. These specialized vocabularies are developed by
-communities of users and are available in the GitHub
-[hed-schemas](https://github.com/hed-standard/hed-schemas) repository.
-Library schema are specified in the form `library-version>`.
-
-Example: The following `dataset_description.json` file specifies that the
+HED also allows you to use one or more specialized vocabularies
+along with or instead of the standard vocabulary.
+These specialized vocabularies are developed by communities of users
+and are available in the
+[hed-schemas](https://github.com/hed-standard/hed-schemas) GitHub repository.
+A library schema is specified in the form `library-version>`.
+
+#### Partnered library schemas
+
+A partnered schema is one whose vocabulary trees are merged with
+its standard schema partner when the schema is released.
+Thus, the two vocabularies appear as one vocabulary to the annotator.
+Partnered library schemas were introduced in HED specification version 3.2.0
+and are supported by HED standard schema versions ≥ 8.2.0.
+Each partnered library schema is tied to a specific version of
+the HED standard schema as specified in its header.
+A given library schema version is either partnered or standalone.
+
+**Note:** Whether a particular library schema version is partnered or
+unpartnered is fixed when the library is released and cannot be changed.
+For example,
+[HED-SCORE version 1.0.0](https://github.com/hed-standard/hed-schemas/blob/main/library_schemas/score/hedwiki/HED_score_1.0.0.mediawiki)
+is unpartnered, but [HED-SCORE version 1.1.0](https://github.com/hed-standard/hed-schemas/blob/main/library_schemas/score/hedwiki/HED_score_1.1.0.mediawiki)
+is partnered with standard schema version 8.2.0.
+
+##### Unpartnered library schema example
+
+The following `dataset_description.json` file specifies that the
[HED8.1.0.xml](https://github.com/hed-standard/hed-schemas/blob/main/standard_schema/hedxml/HED8.1.0.xml)
-standard schema should be used along with the
-SCORE library for clinical neurological annotation located at
+standard schema should be used along with the HED-SCORE library schema
+for clinical neurological annotation located at
[HED_score_1.0.0.xml](https://github.com/hed-standard/hed-schemas/blob/main/library_schemas/score/hedxml/HED_score_1.0.0.xml).
```JSON
@@ -206,22 +228,24 @@ SCORE library for clinical neurological annotation located at
"HEDVersion": ["8.1.0", "sc:score_1.0.0"]
}
```
-The `sc:` is a user-chosen prefixes used to distinguish the sources
+The `sc:` is a user-chosen prefix used to distinguish the source schemas
of the terms in the HED annotation.
The prefixes MUST be alphanumeric.
Any number of prefixed schemas may be used in addition to a non-prefixed one.
The following HED annotation from this dataset uses the `sc:` prefix with
-`Photomyogenic-response` and `Wicket-spikes` because these terms are from the
-SCORE library, while `Data-feature` is from the standard HED schema.
+`Eye-blink-artifact` and `Seizure-PNES` because these terms are from the
+HED-SCORE library schema, while `Data-feature` is from the standard HED schema.
```Text
-Data-feature, sc:Photomyogenic-response, sc:Wicket-spikes
+Data-feature, sc:Eye-blink-artifact, sc:Seizure-PNES
```
-If only one schema is being used for annotation, the prefix can be omitted entirely.
-The following `dataset_description.json` indicates that only the SCORE library version
-0.0.1 will be used for HED annotation in this dataset.
+##### Single unpartnered library schema example
+
+If only one schema is used for annotation, the prefix can be omitted entirely.
+The following `dataset_description.json` indicates that only the HED-SCORE library schema version
+1.0.0 will be used for HED annotation in this dataset.
```JSON
{
@@ -231,8 +255,31 @@ The following `dataset_description.json` indicates that only the SCORE library v
}
```
-The corresponding notations in the dataset do not have a prefix:
+The corresponding annotations in the dataset do not have a prefix:
+
+```Text
+Eye-blink-artifact, Seizure-PNES
+```
+
+##### Partnered library schema example
+
+The following `dataset_description.json` file specifies that
+the HED-SCORE library schema
+[version 1.1.0](https://github.com/hed-standard/hed-schemas/blob/main/library_schemas/score/hedwiki/HED_score_1.1.0.mediawiki) is used.
+This particular library schema version is partnered with the standard schema version
+[8.2.0](https://github.com/hed-standard/hed-schemas/blob/main/standard_schema/hedxml/HED8.2.0.xml).
+
+```JSON
+{
+ "Name": "A great experiment",
+ "BIDSVersion": "1.8.0",
+ "HEDVersion": "score_1.1.0"
+}
+```
+The corresponding annotations in the dataset use tags from the
+HED-SCORE library schema (`Eye-blink-artifact` and `Seizure-PNES`) and from the standard HED (`Data-feature`)
+as follows:
```Text
-Photomyogenic-response, Wicket-spikes
+Data-feature, Eye-blink-artifact, Seizure-PNES
```
diff --git a/src/appendices/meg-file-formats.md b/src/appendices/meg-file-formats.md
index c6f8649064..81b640b517 100644
--- a/src/appendices/meg-file-formats.md
+++ b/src/appendices/meg-file-formats.md
@@ -57,8 +57,8 @@ A guide for using macros can be found at
}
) }}
-To learn more about CTF’s data organization:
-[https://www.fieldtriptoolbox.org/getting_started/ctf](https://www.fieldtriptoolbox.org/getting_started/ctf)
+To learn more about CTF's data organization
+on the relevant [FieldTrip webpage](https://www.fieldtriptoolbox.org/getting_started/ctf/)
## Neuromag/Elekta/MEGIN
@@ -235,8 +235,8 @@ A guide for using macros can be found at
More information can be found under the following links:
-- [Neuromag/Elekta/MEGIN data organization](https://www.fieldtriptoolbox.org/getting_started/neuromag)
-- [BabyMEG](https://www.fieldtriptoolbox.org/getting_started/babysquid)
+- [Neuromag/Elekta/MEGIN data organization](https://www.fieldtriptoolbox.org/getting_started/neuromag/)
+- [BabyMEG](https://www.fieldtriptoolbox.org/getting_started/babysquid/)
### Recording dates in `.fif` files
@@ -301,8 +301,8 @@ A guide for using macros can be found at
}
) }}
-More about the 4D neuroimaging/BTi data organization at:
-[https://www.fieldtriptoolbox.org/getting_started/bti](https://www.fieldtriptoolbox.org/getting_started/bti)
+More about the 4D neuroimaging/BTi data organization
+on the relevant [FieldTrip webpage](https://www.fieldtriptoolbox.org/getting_started/bti/)
## KIT/Yokogawa/Ricoh
@@ -355,8 +355,8 @@ While the acquisition entity can take any value, it is RECOMMENDED that if
the two marker measurements occur before and after the raw data acquisition,
`pre` and `post` are used to differentiate the two situations.
-More about the KIT/Yokogawa/Ricoh data organization at:
-[https://www.fieldtriptoolbox.org/getting_started/yokogawa](https://www.fieldtriptoolbox.org/getting_started/yokogawa)
+More about the KIT/Yokogawa/Ricoh data organization
+on the relevant [FieldTrip webpage](https://www.fieldtriptoolbox.org/getting_started/yokogawa/)
## KRISS
@@ -408,7 +408,7 @@ header that contains detailed information about the data acquisition system,
followed by binary data. The associated binary header file contains part of the
information from the ASCII header, specifically the one needed to process data,
plus other information on offline preprocessing performed after data acquisition
-(for example, sensor position relative to subject’s head, head markers, stimulus
+(for example, sensor position relative to subject's head, head markers, stimulus
information).
Example:
diff --git a/src/appendices/meg-systems.md b/src/appendices/meg-systems.md
index ef5bd613d1..189d0ead31 100644
--- a/src/appendices/meg-systems.md
+++ b/src/appendices/meg-systems.md
@@ -20,7 +20,7 @@ Restricted keywords for ManufacturersModelName field in the `*_meg.json` file:
| CTF-275 | CTF | CTF-275: OMEGA 2000 |
| Neuromag-122 | Neuromag/Elekta/Megin | |
| ElektaVectorview | Neuromag/Elekta/Megin | 102 magnetometers + 204 planar gradiometers |
-| ElektaTRIUX | Neuromag/Elekta/Megin | [https://www.elekta.com/diagnostic-solutions/](https://www.elekta.com/diagnostic-solutions/) |
+| ElektaTRIUX | Neuromag/Elekta/Megin | [https://www.elekta.com/products/neurosurgery/](https://www.elekta.com/products/neurosurgery/) |
| 4D-Magnes-WH2500 | BTi/4D | |
| 4D-Magnes-WH3600 | BTi/4D | |
| KIT-157 | KIT/Yokogawa | |
diff --git a/src/appendices/qmri.md b/src/appendices/qmri.md
index d174bd6421..162ba798cd 100644
--- a/src/appendices/qmri.md
+++ b/src/appendices/qmri.md
@@ -29,7 +29,7 @@ There are two main ways to obtain a quantitative map:
[hMRI toolbox](https://github.com/hMRI-group/hMRI-toolbox),
[mrQ](https://github.com/mezera/mrQ),
[PyQMRI](https://github.com/IMTtugraz/PyQMRI),
- [qmap](https://www.medphysics.wisc.edu/~samsonov/qmap/doc/qmap.html),
+ [qmap](https://web.archive.org/web/20220201201633/https://www.medphysics.wisc.edu/~samsonov/qmap/doc/qmap.html),
[qMRLab](https://github.com/qmrlab/qmrlab),
and [QUIT](https://github.com/spinicist/QUIT).
diff --git a/src/appendices/schema.md b/src/appendices/schema.md
index 1616a6d5c9..fc0855881d 100644
--- a/src/appendices/schema.md
+++ b/src/appendices/schema.md
@@ -9,7 +9,7 @@ to the BIDS standard.
The BIDS schema is available in two machine readable formats:
-- as a set of [YAML](https://en.wikipedia.org/wiki/YAML) files in the [BIDS specification repository](https://github.com/bids-standard/bids-specification/src/schema)
+- as a set of [YAML](https://en.wikipedia.org/wiki/YAML) files in the [BIDS specification repository](https://github.com/bids-standard/bids-specification/tree/master/src/schema)
- as a [single dereferenced json file](https://bids-specification.readthedocs.io/en/stable/schema.json)
A didactic walkthrough of the schema can be found in the [BEP Guide](https://bids-extensions.readthedocs.io/en/latest/schema/),
diff --git a/src/common-principles.md b/src/common-principles.md
index c268e19203..461842ddfc 100644
--- a/src/common-principles.md
+++ b/src/common-principles.md
@@ -238,10 +238,14 @@ distinguish partial results from the raw data and share the latter.
See [Storage of derived datasets](#storage-of-derived-datasets) for more on
organizing derivatives.
-Similar rules apply to source data, which is defined as data before
-harmonization, reconstruction, and/or file format conversion (for example, E-Prime event logs or DICOM files).
-Storing actual source files with the data is preferred over links to
-external source repositories to maximize long term preservation,
+Similar rules apply to source data, which is defined as data
+before harmonization, reconstruction, and/or file format conversion
+(for example, E-Prime event logs or DICOM files).
+Retaining the source data is especially valuable
+in a case when conversion fails to preserve crucial metadata
+unique to specific acquisition setup.
+Storing actual source files with the data is preferred over links
+to external source repositories to maximize long term preservation,
which would suffer if an external repository would not be available anymore.
This specification currently does not go into the details of
recommending a particular naming scheme for including different types of
@@ -393,7 +397,7 @@ include a `dataset_description.json` file at the root level (see
[Dataset description][dataset-description]).
Consequently, files should be organized to comply with BIDS to the full extent
possible (that is, unless explicitly contradicted for derivatives).
-Any subject-specific derivatives should be housed within each subject’s directory;
+Any subject-specific derivatives should be housed within each subject's directory;
if session-specific derivatives are generated, they should be deposited under a
session subdirectory within the corresponding subject directory; and so on.
@@ -426,35 +430,54 @@ NIfTI header.
### Tabular files
-Tabular data MUST be saved as tab delimited values (`.tsv`) files, that is, CSV
-files where commas are replaced by tabs. Tabs MUST be true tab characters and
-MUST NOT be a series of space characters. Each TSV file MUST start with a header
-line listing the names of all columns (with the exception of
-[physiological and other continuous recordings](modality-specific-files/physiological-and-other-continuous-recordings.md)).
+Tabular data MUST be saved as plain-text, tab-delimited values (TSV) files
+(with [extension `.tsv`](glossary.md#tsv-extensions)),
+that is, [CSV files](https://en.wikipedia.org/wiki/Comma-separated_values) where commas are replaced by tab characters.
+Tabs MUST be true tab characters and MUST NOT be a series of space characters.
+Tabular data such as continuous physiology recordings typically containing
+large numbers of rows MAY be saved as
+[compressed tabular files (with extension `.tsv.gz`)](#compressed-tabular-files),
+which are introduced below.
+Plain-text TSV and compressed TSV are not interchangeable, that is, each section
+of the specification prescribes which one MUST be used for the data type at
+hand.
+Each TSV file MUST start with a header line listing the names of all columns
+with two exceptions:
+
+1. [compressed tabular files](#compressed-tabular-files),
+ for which column names are defined in a sidecar metadata
+ [JSON object](https://www.json.org/json-en.html) described below; and
+1. [motion recording data](modality-specific-files/motion.md),
+ which use plain-text TSV and columns are defined as described
+ in its corresponding section of the specifications.
+
It is RECOMMENDED that the column names in the header of the TSV file are
written in [`snake_case`](https://en.wikipedia.org/wiki/Snake_case) with the
first letter in lower case (for example, `variable_name`, not `Variable_name`).
-As for all other data in the TSV files, column names MUST be separated with tabs.
+Column names defined in the header MUST be separated with tabs as for the data contents.
Furthermore, column names MUST NOT be blank (that is, an empty string) and MUST NOT
be duplicated within a single TSV file.
-String values containing tabs MUST be escaped using double
-quotes. Missing and non-applicable values MUST be coded as `n/a`. Numerical
-values MUST employ the dot (`.`) as decimal separator and MAY be specified
+String values containing tabs MUST be escaped using double quotes.
+Missing and non-applicable values MUST be coded as `n/a`.
+Numerical values MUST employ the dot (`.`) as decimal separator and MAY be specified
in scientific notation, using `e` or `E` to separate the significand from the
-exponent. TSV files MUST be in UTF-8 encoding.
+exponent.
+TSV files MUST be in UTF-8 encoding.
Example:
```Text
-onset duration response_time correct stop_trial go_trial
-200 200 0 n/a n/a n/a
+onset duration response_time trial_type trial_extra
+200 20.0 15.8 word 中国人
+240 5.0 17.34e-1 visual n/a
```
-**Note**: The TSV examples in this document (like the one above this note)
-are occasionally formatted using space characters instead of tabs to improve
-human readability.
-Directly copying and then pasting these examples from the specification
-for use in new BIDS datasets can lead to errors and is discouraged.
+!!! warning "Attention"
+
+ The TSV examples in this document (like the one above this note) are occasionally
+ formatted using space characters instead of tabs to improve human readability.
+ Directly copying and then pasting these examples from the specification
+ for use in new BIDS datasets can lead to errors and is discouraged.
Tabular files MAY be optionally accompanied by a simple data dictionary
in the form of a JSON [object](https://www.json.org/json-en.html)
@@ -483,6 +506,7 @@ and a guide for using macros can be found at
),
"Levels": "RECOMMENDED",
"Units": "RECOMMENDED",
+ "Delimiter": "OPTIONAL",
"TermURL": "RECOMMENDED",
"HED": "OPTIONAL",
}
@@ -513,6 +537,55 @@ Example:
}
```
+Each level can be described with a string as in the example above,
+or with an object containing the fields [`Description`](./glossary.md#description-metadata)
+and [`TermURL`](./glossary.md#termurl-metadata)
+like in the example below.
+
+```JSON
+{
+ "sex": {
+ "Description": "sex of the participant as reported by the participant",
+ "Levels": {
+ "M": {
+ "Description": "Male",
+ "TermURL": "https://www.ncbi.nlm.nih.gov/mesh/68008297"
+ },
+ "F": {
+ "Description": "Female",
+ "TermURL": "https://www.ncbi.nlm.nih.gov/mesh/68005260"
+ }
+ }
+ }
+}
+```
+
+### Compressed tabular files
+
+Large tabular information, such as physiological recordings, MUST be stored with
+[compressed tab-delineated (TSV.GZ) files](glossary.md#tsvgz-extensions) when
+so established by the specifications.
+Rules for formatting plain-text tabular files apply to TSVGZ files with three exceptions:
+
+1. The contents of TSVGZ files MUST be compressed with
+ [gzip](https://datatracker.ietf.org/doc/html/rfc1952).
+1. Compressed tabular files MUST NOT contain a header in the first row
+ indicating the column names.
+1. TSVGZ files MUST have an associated JSON file that defines the columns in the tabular file.
+
+!!! warning "Attention"
+
+ In contrast to plain-text TSV files,
+ compressed tabular files files MUST NOT include a header line.
+ Column names MUST be provided in the JSON file with the
+ [`Columns`](glossary.md#columns-metadata) field.
+ Each column MAY additionally be described with a column description,
+ as described in [Tabular files](#tabular-files).
+
+ TSVGZ are header-less to improve compatibility with existing software
+ (for example, FSL, or PNM), and to facilitate the support for other file formats
+ in the future.
+
### Key-value files (dictionaries)
JavaScript Object Notation (JSON) files MUST be used for storing key-value
diff --git a/src/css/watermark.css b/src/css/watermark.css
index ee2d56ab03..2e5bb52bec 100644
--- a/src/css/watermark.css
+++ b/src/css/watermark.css
@@ -10,9 +10,16 @@
}
.md-main__inner {
- background-image: url(../images/draft_watermark.png);
background-repeat: no-repeat;
background-attachment: fixed;
background-size: contain, cover;
background-position: center;
}
+
+[data-md-color-scheme=default] .md-main__inner {
+ background-image: url(../images/draft_watermark.png);
+}
+
+[data-md-color-scheme=slate] .md-main__inner {
+ background-image: url(../images/draft_watermark_dark.png);
+}
diff --git a/src/derivatives/common-data-types.md b/src/derivatives/common-data-types.md
index cf149c42b6..55ad6e3bf1 100644
--- a/src/derivatives/common-data-types.md
+++ b/src/derivatives/common-data-types.md
@@ -249,11 +249,82 @@ A guide for using macros can be found at
}
) }}
-All REQUIRED metadata fields coming from a derivative file’s source file(s) MUST
+All REQUIRED metadata fields coming from a derivative file's source file(s) MUST
be propagated to the JSON description of the derivative unless the processing
makes them invalid (for example, if a source 4D image is averaged to create a single
static volume, a `RepetitionTime` property would no longer be relevant).
+## descriptions.tsv
+
+To keep a record of processing steps applied to the data, a `descriptions.tsv` file MAY be used.
+The `descriptions.tsv` file MUST contain at least the following two columns:
+
+- `desc_id`
+- `description`
+
+This file MAY be located at the root of the derivative dataset,
+or at the subject or session level
+([Inheritance Principle](../common-principles.md#the-inheritance-principle)).
+
+The `desc_id` column contains the labels used with the [`desc entity`](../appendices/entities.md#desc),
+within the particular nesting that the `descriptions.tsv` file is placed.
+For example, if the `descriptions.tsv` file is placed at the root of the derivative dataset,
+its `desc_id` column SHOULD contain all labels of the [`desc entity`](../appendices/entities.md#desc)
+used across the entire derivative dataset.
+
+The `description` column contains human-readable descriptions of the processing steps.
+
+The use of `descriptions.tsv` files together with the [`desc entity`](../appendices/entities.md#desc)
+are helpful to document how files are generated, even if their use may not be sufficient
+to provide full computational reproducibility.
+
+### Example use of a `descriptions.tsv` file
+
+
+{{ MACROS___make_filetree_example(
+ {
+ "raw/": {
+ "CHANGES": "",
+ "README": "",
+ "channels.tsv": "",
+ "dataset_description.json": "",
+ "participants.tsv": "",
+ "sub-001": {
+ "eeg": {
+ "sub-001_task-listening_events.tsv": "",
+ "sub-001_task-listening_events.json": "",
+ "sub-001_task-listening_eeg.edf": "",
+ "sub-001_task-listening_eeg.json": "",
+ },
+ },
+ },
+ "derivatives/": {
+ "descriptions.tsv": "",
+ "sub-001": {
+ "eeg": {
+ "sub-001_task-listening_desc-Filt_eeg.edf": "",
+ "sub-001_task-listening_desc-Filt_eeg.json": "",
+ "sub-001_task-listening_desc-FiltDs_eeg.edf": "",
+ "sub-001_task-listening_desc-FiltDs_eeg.json": "",
+ "sub-001_task-listening_desc-preproc_eeg.edf": "",
+ "sub-001_task-listening_desc-preproc_eeg.json": "",
+ },
+ },
+ }
+ }
+) }}
+
+Contents of the `descriptions.tsv` file:
+
+| desc_id | description |
+|---------|-------------------------------------------------------------------------------------------------|
+| Filt | low-pass filtered at 30Hz |
+| FiltDs | low-pass filtered at 30Hz, downsampled to 250Hz |
+| preproc | low-pass filtered at 30Hz, downsampled to 250Hz, and rereferenced to a common average reference |
+
[coordsys]: ../appendices/coordinate-systems.md#image-based-coordinate-systems
diff --git a/src/derivatives/imaging.md b/src/derivatives/imaging.md
index b802d6c309..aea21dbaad 100644
--- a/src/derivatives/imaging.md
+++ b/src/derivatives/imaging.md
@@ -153,10 +153,9 @@ Template:
A binary (1 - inside, 0 - outside) mask in the space defined by the [`space` entity](../appendices/entities.md#space).
If no transformation has taken place, the value of `space` SHOULD be set to `orig`.
-If the mask is an ROI mask derived from an atlas, then the [`label` entity](../appendices/entities.md#label)) SHOULD
-be used to specify the masked structure
-(see [Common image-derived labels](#common-image-derived-labels)),
-and the `Atlas` metadata SHOULD be defined.
+If the mask is an ROI mask derived from an atlas segmentation,
+then the [`label` entity](../appendices/entities.md#label) SHOULD be used to specify the masked structure
+(see [Common image-derived labels](#common-image-derived-labels)).
JSON metadata fields:
@@ -170,7 +169,6 @@ A guide for using macros can be found at
-->
{{ MACROS___make_sidecar_table([
"derivatives.common_derivatives.MaskDerivatives",
- "derivatives.common_derivatives.MaskDerivativesAtlas",
"derivatives.common_derivatives.ImageDerivativeResEntity",
"derivatives.common_derivatives.ImageDerivativeDenEntity",
]) }}
@@ -229,10 +227,10 @@ structure may be concatenated in a single file.
Segmentations may be defined in a volume (labeled voxels), a surface (labeled
vertices) or a combined volume/surface space.
-If the segmentation can be derived from different atlases,
-the [`atlas` entity](../appendices/entities.md#atlas) MAY be used to
-distinguish the different segmentations.
-If so, the `Atlas` metadata SHOULD also be defined.
+If the segmentation can be generated in different ways,
+for example, following an atlas segmentation,
+the [`seg` entity](../appendices/entities.md#segmentation) MAY be used to
+distinguish the name of the segmentation used.
The following section describes discrete and probabilistic segmentations of
volumes, followed by discrete segmentations of surface/combined spaces.
@@ -250,7 +248,6 @@ A guide for using macros can be found at
-->
{{ MACROS___make_sidecar_table([
"derivatives.common_derivatives.SegmentationCommon",
- "derivatives.common_derivatives.SegmentationCommonAtlas",
"derivatives.common_derivatives.ImageDerivativeResEntity",
"derivatives.common_derivatives.ImageDerivativeDenEntity",
]) }}
@@ -268,7 +265,7 @@ Template:
/
sub-/
anat|func|dwi/
- [_space-][_atlas-][_res-][_den-]_dseg.nii.gz
+ [_space-][_seg-][_res-][_den-]_dseg.nii.gz
```
Example:
@@ -296,8 +293,7 @@ In this case, the mask suffix MUST be used,
the [`label` entity](../appendices/entities.md#label)) SHOULD be used
to specify the masked structure
(see [Common image-derived labels](#common-image-derived-labels)),
-the [`atlas` entity](../appendices/entities.md#atlas) and the
-`Atlas` metadata SHOULD be defined.
+and the [`seg` entity](../appendices/entities.md#segmentation) SHOULD be defined.
For example:
@@ -310,8 +306,8 @@ A guide for using macros can be found at
"pipeline": {
"sub-001": {
"anat": {
- "sub-001_space-orig_atlas-Desikan_label-GM_mask.nii.gz": "",
- "sub-001_space-orig_atlas-Desikan_label-GM_mask.json": "",
+ "sub-001_space-orig_seg-Desikan_label-GM_mask.nii.gz": "",
+ "sub-001_space-orig_seg-Desikan_label-GM_mask.json": "",
},
},
}
@@ -333,7 +329,7 @@ Template:
/
sub-/
func|anat|dwi/
- [_space-][_atlas-][_res-][_den-][_label-]_probseg.nii.gz
+ [_space-][_seg-][_res-][_den-][_label-]_probseg.nii.gz
```
Example:
@@ -407,7 +403,7 @@ Template:
/
sub-/
anat/
- [_hemi-{L|R}][_space-][_atlas-][_res-][_den-]_dseg.{label.gii|dlabel.nii}
+ [_hemi-{L|R}][_space-][_seg-][_res-][_den-]_dseg.{label.gii|dlabel.nii}
```
The [`hemi-`](../appendices/entities.md#hemi) entity is REQUIRED for GIFTI files storing information about
diff --git a/src/derivatives/introduction.md b/src/derivatives/introduction.md
index 9cad29a14a..669719cdc1 100644
--- a/src/derivatives/introduction.md
+++ b/src/derivatives/introduction.md
@@ -39,13 +39,13 @@ in [Derived dataset and pipeline description][derived-dataset-description].
pertinent fields is very valuable and thus encouraged. Moreover, for some
types of files, there may be one or more required metadata fields, in which
case at least one metadata file containing that field must be located
- somewhere within the file’s hierarchy (per the
+ somewhere within the file's hierarchy (per the
[Inheritance Principle](../common-principles.md#the-inheritance-principle)).
- When chaining derivative pipelines, any JSON fields that were specified as
mandatory in the input files SHOULD be propagated forward in the output
- file’s JSON provided they remain valid. Non-required JSON fields MAY be
- propagated, and are highly useful, but it is the pipeline’s responsibility
+ file's JSON provided they remain valid. Non-required JSON fields MAY be
+ propagated, and are highly useful, but it is the pipeline's responsibility
to ensure that the values are still relevant and appropriate to the type of
output data.
diff --git a/src/images/draft_watermark_dark.png b/src/images/draft_watermark_dark.png
new file mode 100644
index 0000000000..84800cee66
Binary files /dev/null and b/src/images/draft_watermark_dark.png differ
diff --git a/src/introduction.md b/src/introduction.md
index 4e54d79157..e56f6ddef7 100644
--- a/src/introduction.md
+++ b/src/introduction.md
@@ -138,7 +138,8 @@ For example:
- Clara Moreau, Martineau Jean-Louis, Ross Blair, Christopher Markiewicz, Jessica Turner,
Vince Calhoun, Thomas Nichols, Cyril Pernet (2020).
**The genetics-BIDS extension: Easing the search for genetic data associated with human brain imaging**.
- GigaScience, 9 (10). [doi:10.1093/gigascience/giaa104](https://doi.org/10.1093/gigascience/giaa104)
+ GigaScience, 9 (10).
+ [doi:10.1093/gigascience/giaa104](https://doi.org/10.1093/gigascience/giaa104)
#### Microscopy
@@ -152,30 +153,41 @@ For example:
#### qMRI
- Karakuzu, A., Appelhoff, S., Auer, T., Boudreau M., Feingold F., Khan A.R., Lazari A., Markiewicz C.J.,
- Mulder M., Phillips C., Salo T., Stikov N., Whitaker K. and de Hollander G.,
- **qMRI-BIDS: An extension to the brain imaging data structure for quantitative magnetic resonance imaging data.**
- Scientific Data 9, 517 (2022). [doi:10.1038/s41597-022-01571-4](https://doi.org/10.1038/s41597-022-01571-4)
+ Mulder M., Phillips C., Salo T., Stikov N., Whitaker K. and de Hollander G. (2022).
+ **qMRI-BIDS: An extension to the brain imaging data structure for quantitative magnetic resonance imaging data**.
+ Scientific Data 9, (517).
+ [doi:10.1038/s41597-022-01571-4](https://doi.org/10.1038/s41597-022-01571-4)
#### ASL
- Clement P., Castellaro M., Okell T. W., Thomas D. L., Vandemaele P., Elgayar S., Oliver-Taylor A.,
Kirk T., Woods J. G., Vos S. B., Kuijer J. P. A., Achten E., van Osch M. J. P., BIDS maintainers,
- Detre J. A., Lu H., Alsop D. C., Chappell M. A., Hernandez-Garcia L., Petr J. & Mutsaerts H. J. M. M.
- **ASL-BIDS, the brain imaging data structure extension for arterial spin labeling.**
- Scientific Data 9, 543 (2022). [doi:10.1038/s41597-022-01615-9](https://doi.org/10.1038/s41597-022-01615-9)
+ Detre J. A., Lu H., Alsop D. C., Chappell M. A., Hernandez-Garcia L., Petr J. & Mutsaerts H. J. M. M. (2022)
+ **ASL-BIDS, the brain imaging data structure extension for arterial spin labeling**.
+ Scientific Data 9, (543).
+ [doi:10.1038/s41597-022-01615-9](https://doi.org/10.1038/s41597-022-01615-9)
#### NIRS
-- (publication forthcoming)
+- Luke, R., Oostenveld, R., Cockx, H., Niso, G., Shader, M., Orihuela-Espina, F.,
+ Innes-Brown, H., Tucker, S., Boas, D., Gau, R., Salo, T., Appelhoff, S., Markiewicz, C
+ McAlpine, D., BIDS maintainers, Pollonini, L. (2023).
+ **fNIRS-BIDS, the Brain Imaging Data Structure Extended to Functional Near-Infrared Spectroscopy**.
+ PsyArXiv.
+ [doi:10.31219/osf.io/7nmcp](https://doi.org/10.31219/osf.io/7nmcp)
#### Motion
-- (publication forthcoming)
+- Jeung, S., Cockx, H., Appelhoff, S., Berg, T., Gramann, K., Grothkopp, S., Warmerdam, E., Hansen, C.,
+ Oostenveld, R., BIDS maintainers, Welzel, J. (2023).
+ **Motion-BIDS: extending the Brain Imaging Data Structure specification to organize motion data for reproducible research**.
+ PsyArXiv.
+ [doi:10.31234/osf.io/w6z79](https://doi.org/10.31234/osf.io/w6z79)
### Research Resource Identifier (RRID)
BIDS has also a
-[Research Resource Identifier (RRID)](https://www.force11.org/group/resource-identification-initiative),
+[Research Resource Identifier (RRID)](https://force11.org/group/resource-identification-initiative),
which you can also include in your citations in addition to relevant publications (see above):
-- [`RRID:SCR_016124`](https://scicrunch.org/resources/Any/search?q=SCR_016124&l=SCR_016124)
+- [`RRID:SCR_016124`](https://scicrunch.org/resources/data/record/nlx_144509-1/SCR_016124/resolver?q=SCR_016124)
diff --git a/src/modality-agnostic-files.md b/src/modality-agnostic-files.md
index 7bc09af991..fb5b04ee3e 100644
--- a/src/modality-agnostic-files.md
+++ b/src/modality-agnostic-files.md
@@ -269,7 +269,7 @@ to date of birth.
{
"age": {
"Description": "age of the participant",
- "Units": "years"
+ "Units": "year"
},
"sex": {
"Description": "sex of the participant as reported by the participant",
diff --git a/src/modality-specific-files/electroencephalography.md b/src/modality-specific-files/electroencephalography.md
index 781993e1bc..6ba02cc13a 100644
--- a/src/modality-specific-files/electroencephalography.md
+++ b/src/modality-specific-files/electroencephalography.md
@@ -6,9 +6,11 @@ Please see [Citing BIDS](../introduction.md#citing-bids)
on how to appropriately credit this extension when referring to it in the
context of the academic literature.
-Several [example EEG datasets](https://bids-standard.github.io/bids-examples/#eeg)
-have been formatted using this specification
-and can be used for practical guidance when curating a new dataset.
+!!! example "Example datasets"
+
+ Several [example EEG datasets](https://bids-standard.github.io/bids-examples/#eeg)
+ have been formatted using this specification
+ and can be used for practical guidance when curating a new dataset.
## EEG recording data
@@ -33,21 +35,17 @@ stored in one of the following formats:
| ------------------------------------------------- | ------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [European data format](https://www.edfplus.info/) | `.edf` | Each recording consists of a single `.edf` file. [`edf+`](https://www.edfplus.info/specs/edfplus.html) files are permitted. The capital `.EDF` extension MUST NOT be used. |
| [BrainVision Core Data Format][bvformat] | `.vhdr`, `.vmrk`, `.eeg` | Each recording consists of a `.vhdr`, `.vmrk`, `.eeg` file triplet. |
-| [EEGLAB](https://sccn.ucsd.edu/eeglab) | `.set`, `.fdt` | The format used by the MATLAB toolbox [EEGLAB](https://sccn.ucsd.edu/eeglab). Each recording consists of a `.set` file with an OPTIONAL `.fdt` file. |
+| [EEGLAB](https://sccn.ucsd.edu/eeglab/index.php) | `.set`, `.fdt` | The format used by the MATLAB toolbox [EEGLAB](https://sccn.ucsd.edu/eeglab/index.php). Each recording consists of a `.set` file with an OPTIONAL `.fdt` file. |
| [Biosemi](https://www.biosemi.com/) | `.bdf` | Each recording consists of a single `.bdf` file. [`bdf+`](https://www.teuniz.net/edfbrowser/bdfplus%20format%20description.html) files are permitted. The capital `.BDF` extension MUST NOT be used. |
It is RECOMMENDED to use the European data format, or the BrainVision data
format. It is furthermore discouraged to use the other accepted formats over
these RECOMMENDED formats, particularly because there are conversion scripts
available in most commonly used programming languages to convert data into the
-RECOMMENDED formats. The data in their original format, if different from the
-supported formats, can be stored in the [`/sourcedata` directory](../common-principles.md#source-vs-raw-vs-derived-data).
+RECOMMENDED formats.
-The original data format is especially valuable in case conversion elicits the
-loss of crucial metadata specific to manufacturers and specific EEG systems. We
-also encourage users to provide additional meta information extracted from the
-manufacturer specific data files in the sidecar JSON file. Other relevant files
-MAY be included alongside the original EEG data in `/sourcedata`.
+We encourage users to provide additional metadata extracted from the
+manufacturer-specific data files in the sidecar JSON file.
Note the `RecordingType`, which depends on whether the data stream on disk
is interrupted or not.
@@ -113,6 +111,18 @@ A guide for using macros can be found at
-->
{{ MACROS___make_sidecar_table("eeg.EEGRecommended") }}
+These fields MAY be present:
+
+
+{{ MACROS___make_sidecar_table("eeg.EEGOptional") }}
+
#### Hardware information
-{{ MACROS___make_sidecar_table("mri.MRITimingParameters") }}
+{{ MACROS___make_sidecar_table(["mri.MRITimingParameters", "mri.SliceTimingMRI"]) }}
### RF & Contrast
@@ -162,6 +162,18 @@ A guide for using macros can be found at
-->
{{ MACROS___make_sidecar_table("mri.MRIEchoPlanarImagingAndB0Mapping") }}
+#### Tissue description
+
+
+{{ MACROS___make_sidecar_table("mri.MRISample") }}
+
## Anatomy imaging data
Anatomy MRI sequences measure static, structural features of the brain.
@@ -298,6 +310,15 @@ and a guide for using macros can be found at
])
}}
+Parametric images listed in the table below are typically generated by
+processing a [file collection](../common-principles.md#entity-linked-file-collections).
+Please visit the [file collections appendix](../appendices/file-collections.md) to see the
+list of suffixes available for quantitative MRI (qMRI) applications associated
+with these maps
+(for example, [MPM](../glossary.md#mpm-suffixes),
+[MP2RAGE](../glossary.md#mp2rage-suffixes),
+and [MTR](../glossary.md#mtransfer-entities)).
+
Currently supported parametric maps include:
{{ MACROS___make_sidecar_table("meg.MEGRecommended") }}
+These fields MAY be present:
+
+
+{{ MACROS___make_sidecar_table("meg.MEGOptional") }}
+
#### Hardware information
{{ MACROS___make_filename_template("raw", datatypes=["micr"], suffixes=["TEM", "SEM", "uCT", "BF", "DF",
-"PC", "DIC", "FLUO", "CONF", "PLI", "CARS", "2PE", "MPE", "SR", "NLO", "OCT", "SPIM"], n_dupes_to_combine=4) }}
+"PC", "DIC", "FLUO", "CONF", "PLI", "CARS", "2PE", "MPE", "SR", "NLO", "OCT", "SPIM", "hipCT"], n_dupes_to_combine=4) }}
Microscopy data MUST be stored in the `micr` directory.
@@ -37,7 +39,7 @@ by the [Open Microscopy Environment](https://www.openmicroscopy.org/) for whole-
the [OME-TIFF file specifications](https://docs.openmicroscopy.org/ome-model/6.1.2/ome-tiff/file-structure.html).
The OME-TIFF file allows for multi-page TIFF files to store multiple image planes and supports
multi-resolution pyramidal tiled images. An OME-XML data block is also embedded inside the
-file’s header. Further, OME-ZARR (sometimes referred to as OME-NGFF or NGFF) has been developed to provide improved
+file's header. Further, OME-ZARR (sometimes referred to as OME-NGFF or NGFF) has been developed to provide improved
access and storage for large data via chunked and compressed N-dimensional arrays.
The BIDS standard accepts microscopy data in a number of file formats to accommodate datasets
@@ -57,9 +59,6 @@ Microscopy raw data MUST be stored in one of the following formats:
- [OME-ZARR/NGFF](https://ngff.openmicroscopy.org/latest/) (`.ome.zarr` directories)
-If different from PNG, TIFF, OME-TIFF, or OME-ZARR, the original unprocessed data in the native format MAY be
-stored in the [`/sourcedata` directory](../common-principles.md#source-vs-raw-vs-derived-data).
-
### Modality suffixes
Microscopy data currently support the following imaging modalities:
@@ -89,6 +88,7 @@ and a guide for using macros can be found at
"NLO",
"OCT",
"SPIM",
+ "hipCT",
]
)
}}
@@ -434,7 +434,7 @@ sub-02 mus musculus C57BL/6J RRID:IMSR_JAX:000664
"Description": "name of the strain of the species"
},
"strain_rrid": {
- "Description": "research resource identifier (RRID) of the strain (https://scicrunch.org/resources/Organisms/search)"
+ "Description": "research resource identifier (RRID) of the strain (https://scicrunch.org/resources/data/source/nlx_154697-1/search)"
}
}
```
diff --git a/src/modality-specific-files/motion.md b/src/modality-specific-files/motion.md
index 1e151baef9..f0bbcb96ef 100644
--- a/src/modality-specific-files/motion.md
+++ b/src/modality-specific-files/motion.md
@@ -2,9 +2,11 @@
For information on how to cite this extension when referencing it in the context of the academic literature, please read [Citing BIDS](../introduction.md#citing-bids).
-Motion datasets formatted using this specification are available on the
-[BIDS examples repository](https://bids-standard.github.io/bids-examples/#motion)
-and can be used as helpful guidance when curating new datasets.
+!!! example "Example datasets"
+
+ Motion datasets formatted using this specification are available on the
+ [BIDS examples repository](https://bids-standard.github.io/bids-examples/#motion)
+ and can be used as helpful guidance when curating new datasets.
## Motion recording data
@@ -42,21 +44,20 @@ each of which is accompanied by `*_tracksys-_motion.json` and `*_tracksys
Between `tracksys-` entity and `*_motion.tsv`, `*_motion.json`, or `*_channels.tsv` suffixes, optional [`acq-`](../appendices/entities.md#acq) or [`run-`](../appendices/entities.md#run) entity MAY be inserted.
One column in the `*_tracksys-_motion.tsv` file represents one data channel.
-The ordering of columns MUST match the order of rows in the `*_channels.tsv` file for unambiguous assignment.
+Motion files MUST NOT have a header row;
+the ordering of columns is given by the order of rows in the associated `*_channels.tsv` file.
+The number of columns in `_motion.tsv` files MUST equal the number of rows
+in the associated `_channels.tsv` file.
All relevant metadata about a tracking systems is stored in accompanying sidecar `*_tracksys-_motion.json` file.
-The source data from each tracking system in their original format, if different from `.tsv`,
-can be stored in the [`/sourcedata` directory](../common-principles.md#source-vs-raw-vs-derived-data).
-The original data format MAY hold more metadata than currently specified in the `*_motion.json` file.
-
When multiple tracking systems are used to record motion or motion capture is used alongside the recording of other BIDS modalities and recordings should be interpreted together,
it is advised to provide a possibility to synchronize recordings.
The preferred way to do so is to use the acquisition time of the first data point of recordings and
to store this information in the `acq_time` column of the [`*_scans.tsv`](../modality-agnostic-files.md#scans-file) file.
-The Note that the [BIDS date time format](../common-principles.md#units) allows optional fractional seconds, which SHOULD be used to maximize the precision of the synchronization.
+Note that the [BIDS date time format](../common-principles.md#units) allows optional fractional seconds, which SHOULD be used to maximize the precision of the synchronization.
Only if the precision of the synchronization is not high enough, the `*_events.tsv` file SHOULD be used to synchronize recordings.
In this file, the start- and stop time of the recording of a system are specified in relation to a system to synchronize with.
-If more than two systems are to be synchronized, it is up to the user to indntify the "main" system.
+If more than two systems are to be synchronized, it is up to the user to identify the "main" system.
In case a tracking system provides time information with every recorded sample,
these time information MAY be stored in form of latencies to recording onset (first sample) in the `*_motion.tsv` file.
@@ -105,9 +106,6 @@ Motion specific fields SHOULD be present:
"InstitutionName": "Fictive Institution",
"MotionChannelCount": 18,
"RecordingDuration": 4667.641106,
- "RotationRule": "right-hand",
- "RotationOrder": "ZXY",
- "SpatialAxes": "FRU",
"SubjectArtefactDescription": "n/a",
"TrackedPointsCount" : 2,
"ACCELChannelCount": 6,
@@ -142,6 +140,9 @@ The REQUIRED columns are channel `name`, `component`, `type`, `tracked_point` an
Any number of additional columns MAY be added to provide additional information about the channels.
The `*_tracksys-_channels.tsv` file SHOULD give additional information about individual recorded channel,
some of which my not be found summarized in `*_motion.json`.
+To store information about reference frames for a channel, the `reference_frame` column SHOULD
+be used
+(see [Reference frame description (`*_channels.json`)](#reference-frame-description-_channelsjson)).
The columns of the channels description table stored in `*_channels.tsv` are:
@@ -169,34 +170,73 @@ the axial components that corresponds to the three spatial axes MUST be specifie
Restricted keyword list for column `type` in alphabetic order.
Note that upper-case is REQUIRED:
-| **Keyword** | **Description** |
-| ----------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| ACCEL | Accelerometer channel, one channel for each spatial axis. Column component for the axis MUST be added to the *_channels.tsv file (x, y, or z). |
-| ANGACCEL | Angular acceleration channel, one channel for each spatial axis. Column component for the axis MUST be added to the *_channels.tsv file (x, y, or z). |
-| GYRO | Gyrometer channel, one channel for each spatial axis. Column component for the axis MUST be added to the *_channels.tsv file (x, y, or z). |
-| JNTANG | Joint angle channel between two fixed axis belonging to two bodyparts. Angle SHOULD be defined between proximal and distal bodypart in deg. |
-| LATENCY | Latency of samples in seconds from recording onset (see `acq_time` column of the respective `*_scans.tsv` file). MUST be in form of `s[.000000]`, where `s` reflects whole seconds, and `.000000` reflects OPTIONAL fractional seconds. |
-| MAGN | Magnetic field strength, one channel for each spatial axis. Column component for the axis MUST be added to the *_channels.tsv file (x, y or z). |
-| MISC | Miscellaneous channels. |
-| ORNT | Orientation channel, one channel for each spatial axis or quaternion component. Column component for the axis or quaternion label MUST be added to the *_channels.tsv file (x, y, z, quat_x, quat_y, quat_z, or quat_w). |
-| POS | Position in space, one channel for each spatial axis. Column component for the axis MUST be added to the *_channels.tsv file (x, y or z). |
-| VEL | Velocity, one channel for each spatial axis. Column component for the axis MUST be added to the *_channels.tsv file (x, y or z). |
+| **Keyword** | **Description** |
+| ----------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| ACCEL | Accelerometer channel, one channel for each spatial axis. Column component for the axis MUST be added to the `*_channels.tsv` file (x, y, or z). |
+| ANGACCEL | Angular acceleration channel, one channel for each spatial axis. Column component for the axis MUST be added to the `*_channels.tsv` file (x, y, or z). |
+| GYRO | Gyrometer channel, one channel for each spatial axis. Column component for the axis MUST be added to the `*_channels.tsv` file (x, y, or z). |
+| JNTANG | Joint angle channel between two fixed axis belonging to two bodyparts. Angle SHOULD be defined between proximal and distal bodypart in deg. |
+| LATENCY | Latency of samples in seconds from recording onset (see `acq_time` column of the respective `*_scans.tsv` file). MUST be in form of `s[.000000]`, where `s` reflects whole seconds, and `.000000` reflects OPTIONAL fractional seconds. |
+| MAGN | Magnetic field strength, one channel for each spatial axis. Column component for the axis MUST be added to the `*_channels.tsv` file (x, y or z). |
+| MISC | Miscellaneous channels. |
+| ORNT | Orientation channel, one channel for each spatial axis or quaternion component. Column component for the axis or quaternion label MUST be added to the `*_channels.tsv` file (`x`, `y`, `z`, `quat_x`, `quat_y`, `quat_z`, or `quat_w`). |
+| POS | Position in space, one channel for each spatial axis. Column component for the axis MUST be added to the `*_channels.tsv` file (x, y or z). |
+| VEL | Velocity, one channel for each spatial axis. Column component for the axis MUST be added to the `*_channels.tsv` file (x, y or z). |
### Example `*_channels.tsv`
```Text
-name component type tracked_point units
-t1_acc_x x ACCEL LeftFoot m/s^2
-t1_acc_y y ACCEL LeftFoot m/s^2
-t1_acc_z z ACCEL LeftFoot m/s^2
-t1_gyro_x x GYRO LeftFoot rad/s
-t1_gyro_y y GYRO LeftFoot rad/s
-t1_gyro_z z GYRO LeftFoot rad/s
+name component type tracked_point units reference_frame
+t1_acc_x x ACCEL LeftFoot m/s^2 global
+t1_acc_y y ACCEL LeftFoot m/s^2 global
+t1_acc_z z ACCEL LeftFoot m/s^2 global
+t1_gyro_x x GYRO LeftFoot rad/s global
+t1_gyro_y y GYRO LeftFoot rad/s global
+t1_gyro_z z GYRO LeftFoot rad/s global
…
-t2_acc_x x ACCEL RightWrist m/s^2
-t2_acc_y y ACCEL RightWrist m/s^2
-t2_acc_z z ACCEL RightWrist m/s^2
-t2_gyro_x x GYRO RightWrist rad/s
-t2_gyro_y y GYRO RightWrist rad/s
-t2_gyro_z z GYRO RightWrist rad/s
+t2_acc_x x ACCEL RightWrist m/s^2 global
+t2_acc_y y ACCEL RightWrist m/s^2 global
+t2_acc_z z ACCEL RightWrist m/s^2 global
+t2_gyro_x x GYRO RightWrist rad/s global
+t2_gyro_y y GYRO RightWrist rad/s global
+t2_gyro_z z GYRO RightWrist rad/s global
```
+
+## Reference frame description (`*_channels.json`)
+
+A reference frame specifies the origin and orientation of the spatial axes with respect to which motion data is to be interpreted.
+In case the information is available, sharing this can immensely boost the usability of shared data.
+The description of the `reference_frame` column SHOULD use the `"Levels"`
+field to describe the named field using [objects][object] with following fields.
+
+| Key name | Requirement Level | Data type | Description |
+|---------------|--------------------------------------------------------|------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| RotationOrder | RECOMMENDED | [string][] | The sequence in which the extrinsic rotations are applied around the three axes. One of `"XYZ"`, `"XZY"`, `"YXZ"`, `"YZX"`, `"ZXY"`, or `"ZYX"`. |
+| RotationRule | RECOMMENDED | [string][] | The direction of rotation around each axis. One of `"left-hand"` or `"right-hand"`. |
+| SpatialAxes | RECOMMENDED | [string][] | The coordinate system in which the motion data are to be interpreted. A sequence of characters from the set `{'A', 'P', 'L', 'R', 'S', 'I', '_'}` indicating the direction of each axis. For example `"ARS"` indicates positive values in the X, Y, Z axes are respectively anterior, right, and superior of the origin, while `"PLI"` indicates positive values are posterior, left, and inferior of the origin. The `"_"` character may be used for unused axes. |
+| Description | OPTIONAL, but RECOMMENDED if no other keys are present | [string][] | A description of the `reference_frame` |
+
+### Example of `*_channels.json`
+
+```json
+{
+ "reference_frame": {
+ "Levels": {
+ "global": {
+ "SpatialAxes": "ALS",
+ "RotationOrder": "ZXY",
+ "RotationRule": "right-hand"
+ },
+ "local": {
+ "Description": "Joint angles are described following [...]"
+ }
+ }
+ }
+}
+```
+
+
+
+[object]: https://www.json.org/json-en.html
+
+[string]: https://www.w3schools.com/js/js_json_datatypes.asp
diff --git a/src/modality-specific-files/near-infrared-spectroscopy.md b/src/modality-specific-files/near-infrared-spectroscopy.md
index 1947836c17..16ffc1ba98 100644
--- a/src/modality-specific-files/near-infrared-spectroscopy.md
+++ b/src/modality-specific-files/near-infrared-spectroscopy.md
@@ -6,8 +6,10 @@ Please see [Citing BIDS](../introduction.md#citing-bids)
on how to appropriately credit this extension when referring to it in the
context of the academic literature.
-Several [example NIRS datasets](https://bids-standard.github.io/bids-examples/#nirs)
-have been formatted using this specification and can be used for practical guidance when curating a new dataset.
+!!! example "Example datasets"
+
+ Several [example NIRS datasets](https://bids-standard.github.io/bids-examples/#nirs)
+ have been formatted using this specification and can be used for practical guidance when curating a new dataset.
## NIRS recording data
@@ -22,7 +24,7 @@ and a guide for using macros can be found at
{{ MACROS___make_filename_template(
"raw",
datatypes=["nirs"],
- suffixes=["nirs", "events", "physio", "stim"])
+ suffixes=["nirs", "events", "channels", "optodes", "coordsystem", "physio", "stim"])
}}
Only the *Shared Near Infrared Spectroscopy Format* ([SNIRF](https://github.com/fNIRS/snirf))
@@ -34,15 +36,6 @@ replicated in the BIDS specification. This redundancy allows the data to be
easily parsed by humans and machines that do not have a SNIRF reader at hand,
which improves findability and tooling development.
-Raw NIRS data in the native format, if different from SNIRF, can also
-be stored in the [`/sourcedata`](../common-principles.md#source-vs-raw-vs-derived-data)
-directory along with code to convert the data to
-SNIRF in the [`/code`](../common-principles.md#storage-of-derived-datasets) directory.
-The unprocessed raw data should be stored in
-the manufacturer's format before any additional processing or conversion is applied.
-Retaining the native file format is especially valuable in a case when conversion elicits the
-loss of crucial metadata unique to specific manufacturers and NIRS systems.
-
### Terminology
For proper documentation of NIRS recording metadata, it is important
diff --git a/src/modality-specific-files/physiological-and-other-continuous-recordings.md b/src/modality-specific-files/physiological-and-other-continuous-recordings.md
index 72df5d4814..8ecd00febe 100644
--- a/src/modality-specific-files/physiological-and-other-continuous-recordings.md
+++ b/src/modality-specific-files/physiological-and-other-continuous-recordings.md
@@ -1,20 +1,21 @@
# Physiological and other continuous recordings
+## Physiological recordings
+
Physiological recordings such as cardiac and respiratory signals and other
continuous measures (such as parameters of a film or audio stimuli) MAY be
-specified using two files:
-
-1. a [gzip](https://datatracker.ietf.org/doc/html/rfc1952)
- compressed TSV file with data (without header line)
+specified using a [compressed tabular file](../common-principles.md#compressed-tabular-files)
+([TSVGZ file](../glossary.md#tsvgz-extensions)) and a corresponding
+JSON file for storing metadata fields (see below).
-1. a JSON file for storing metadata fields (see below)
+!!! example "Example datasets"
-[Example datasets](https://bids-standard.github.io/bids-examples/#dataset-index)
-with physiological data have been formatted using this specification
-and can be used for practical guidance when curating a new dataset:
+ [Example datasets](https://bids-standard.github.io/bids-examples/#dataset-index)
+ with physiological data have been formatted using this specification
+ and can be used for practical guidance when curating a new dataset:
-- [`7t_trt`](https://github.com/bids-standard/bids-examples/tree/master/7t_trt)
-- [`ds210`](https://github.com/bids-standard/bids-examples/tree/master/ds210)
+ - [`7t_trt`](https://github.com/bids-standard/bids-examples/tree/master/7t_trt)
+ - [`ds210`](https://github.com/bids-standard/bids-examples/tree/master/ds210)
Template:
@@ -36,8 +37,12 @@ before the suffix.
For example for the file `sub-control01_task-nback_run-1_bold.nii.gz`,
`` would correspond to `sub-control01_task-nback_run-1`.
-Note that when supplying a `*_.tsv.gz` file, an accompanying
-`*_.json` MUST be supplied as well.
+!!! note "TSVGZ headers are specified in metadata files."
+
+ TSVGZ files MUST NOT include a header line,
+ as established by the [common-principles](../common-principles.md#compressed-tabular-files).
+ As a result, when supplying a `*_.tsv.gz` file, an accompanying
+ `*_.json` MUST be supplied as well.
The [`recording-`](../appendices/entities.md#recording)
entity MAY be used to distinguish between several recording files.
@@ -49,7 +54,19 @@ measurements in a different sampling frequency.
Physiological recordings (including eyetracking) SHOULD use the `_physio`
suffix, and signals related to the stimulus SHOULD use `_stim` suffix.
-The following table specifies metadata fields for the `*_.json` file.
+The following tables specify metadata fields for the `*_.json` file.
+
+
+{{ MACROS___make_sidecar_table(["continuous.Continuous"]) }}
+
+## Hardware information
-{{ MACROS___make_sidecar_table(["continuous.Continuous", "continuous.Physio"]) }}
+{{ MACROS___make_sidecar_table(["continuous.PhysioHardware"]) }}
Additional metadata may be included as in
[any TSV file](../common-principles.md#tabular-files) to specify, for
example, the units of the recorded time series.
-Please note that, in contrast to other TSV files in BIDS, the TSV files specified
-for physiological and other continuous recordings *do not* include a header
-line.
-Instead the name of columns are specified in the JSON file (see `Columns` field).
-This is to improve compatibility with existing software (for example, FSL, PNM)
-as well as to make support for other file formats possible in the future.
-As in any TSV file, column names MUST NOT be blank (that is, an empty string),
-and MUST NOT be duplicated within a single JSON file describing a headerless
-TSV file.
Example `*_physio.tsv.gz`:
diff --git a/src/modality-specific-files/positron-emission-tomography.md b/src/modality-specific-files/positron-emission-tomography.md
index c16d144b4f..5ea5f8bbcb 100644
--- a/src/modality-specific-files/positron-emission-tomography.md
+++ b/src/modality-specific-files/positron-emission-tomography.md
@@ -6,11 +6,13 @@ Please see [Citing BIDS](../introduction.md#citing-bids)
on how to appropriately credit this extension when referring to it in the
context of the academic literature.
-Several [example PET datasets](https://bids-standard.github.io/bids-examples/#pet)
-have been formatted using this specification
-and can be used for practical guidance when curating a new dataset.
+!!! example "Example datasets"
-Further PET datasets are available from [OpenNeuro](https://openneuro.org).
+ Several [example PET datasets](https://bids-standard.github.io/bids-examples/#pet)
+ have been formatted using this specification
+ and can be used for practical guidance when curating a new dataset.
+
+ Further PET datasets are available from [OpenNeuro](https://openneuro.org).
## Terminology and conventions
@@ -216,6 +218,18 @@ A guide for using macros can be found at
{{ MACROS___make_sidecar_table("pet.PETInstitutionInformation") }}
+#### Tissue description
+
+
+{{ MACROS___make_sidecar_table("pet.PETSample") }}
+
#### Task
If the OPTIONAL [`task-`](../appendices/entities.md#task) is used,
diff --git a/src/modality-specific-files/task-events.md b/src/modality-specific-files/task-events.md
index 0b56967fd1..9b0ffa69f3 100644
--- a/src/modality-specific-files/task-events.md
+++ b/src/modality-specific-files/task-events.md
@@ -42,6 +42,8 @@ and a guide for using macros can be found at
-->
{{ MACROS___make_columns_table("task.TaskEvents") }}
+The content of `events.tsv` files SHOULD be sorted by values in the `onset` column.
+
Note for MRI data:
If any acquired scans have been discarded before forming the imaging data file,
ensure that an `onset` of 0 corresponds to the time the first image was stored.
@@ -82,9 +84,10 @@ A guide for using macros can be found at
Example of the content of the TSV file:
```Text
-onset duration trial_type response_time stim_file
-1.23 0.65 start 1.435 images/red_square.jpg
-5.65 0.65 stop 1.739 images/blue_square.jpg
+onset duration trial_type response_time stim_file channel annots
+1.23 0.65 start 1.435 images/red_square.jpg n/a n/a
+5.65 0.65 stop 1.739 images/blue_square.jpg n/a n/a
+12.1 2.35 n/a n/a n/a F,1|F,2|Cz musc
```
In the accompanying JSON sidecar, the `trial_type` column might look as follows:
@@ -98,12 +101,49 @@ In the accompanying JSON sidecar, the `trial_type` column might look as follows:
"start": "A red square is displayed to indicate starting",
"stop": "A blue square is displayed to indicate stopping"
}
+ },
+ "channel": {
+ "Description": "Channel(s) associated with the event",
+ "Delimiter": "|"
+ },
+ "annots": {
+ "LongName": "Annotations",
+ "Description": "Annotations associated with channels indicated in the channel column.",
+ "Levels": {
+ "musc": "Muscle artifact. A very common, high frequency, sharp artifact that corresponds with agitation/nervousness in a patient."
+ },
+ "HED": {
+ "musc": "EMG-artifact"
+ }
}
}
```
-Note that all other columns SHOULD also be described but are omitted for the
-sake of brevity.
+Note that in the example above:
+
+1. Only a subset of columns are described for the sake of brevity.
+ In a real dataset, all other columns SHOULD also be described.
+
+1. The `channel` column contains a list of values that are separated
+ by a delimiter (`|`), as is declared in the `Delimiter` metadata
+ field of the `events.json file.
+ Thus, the channels related to the event in the third row of the example
+ are called `F,1`, `F,2`, and `Cz`.
+
+1. The example contains a column called `annots`.
+ This column is not defined in BIDS, and constitutes additional, arbitrary
+ (that is, unofficial) metadata.
+ In the present case, it is used to describe artifacts in the data,
+ in reference to the `channel` column.
+ The `annots` column is making
+ use of the powerful HED system for documenting events, see below.
+
+Events MAY also be documented in machine-actionable form
+using HED (Hierarchical Event Descriptor) tags.
+This type of documentation is particularly useful for datasets likely to be used
+in event-related analyses.
+See [Hierarchical Event Descriptors](../appendices/hed.md)
+for additional information and examples.
For multi-echo files, the `events.tsv` file is applicable to all echos of
a particular run:
@@ -125,13 +165,6 @@ A guide for using macros can be found at
}
) }}
-Note: Events can also be documented in machine-actionable form
-using HED (Hierarchical Event Descriptor) tags.
-This type of documentation is particularly useful for datasets likely to be used
-in event-related analyses.
-See [Hierarchical Event Descriptors](../appendices/hed.md)
-for additional information and examples.
-
## Stimuli
Additional information about the stimuli can be added in the `events.tsv`
diff --git a/src/schema/BIDS_VERSION b/src/schema/BIDS_VERSION
index b57588e592..a01185b4d6 100644
--- a/src/schema/BIDS_VERSION
+++ b/src/schema/BIDS_VERSION
@@ -1 +1 @@
-1.9.0-dev
+1.10.0-dev
diff --git a/src/schema/README.md b/src/schema/README.md
index 3d5c733714..d801314595 100644
--- a/src/schema/README.md
+++ b/src/schema/README.md
@@ -136,18 +136,20 @@ with the object being referenced.
The following two prototypical examples are presented to clarify the semantics of
references (the cases in which they are used will be presented later):
-1. In `objects.metadata`:
+1. In `objects.enums`:
```YAML
_GeneticLevelEnum:
type: string
enum:
- - Genetic
- - Genomic
- - Epigenomic
- - Transcriptomic
- - Metabolomic
- - Proteomic
-
+ - $ref: objects.enums.Genetic.value
+ - $ref: objects.enums.Genomic.value
+ - $ref: objects.enums.Epigenomic.value
+ - $ref: objects.enums.Transcriptomic.value
+ - $ref: objects.enums.Metabolomic.value
+ - $ref: objects.enums.Proteomic.value
+ ```
+ and in `objects.metadata`:
+ ```YAML
GeneticLevel:
name: GeneticLevel
display_name: Genetic Level
@@ -156,29 +158,29 @@ references (the cases in which they are used will be presented later):
Values MUST be one of `"Genetic"`, `"Genomic"`, `"Epigenomic"`,
`"Transcriptomic"`, `"Metabolomic"`, or `"Proteomic"`.
anyOf:
- - $ref: objects.metadata._GeneticLevelEnum
+ - $ref: objects.enums._GeneticLevelEnum
- type: array
items:
- $ref: objects.metadata._GeneticLevelEnum
+ $ref: objects.enums._GeneticLevelEnum
```
Here `_GeneticLevelEnum` is used to describe the valid values of `GeneticLevel`,
- and the references inside `GeneticLevel.anyOf` indicate that there may be a single
+ (which are in turn references to individual values), and the references inside `GeneticLevel.anyOf` indicate that there may be a single
such value or a list of values.
-1. In `rules.datatypes.derivatives.common_derivatives`:
+1. In [`rules.files.deriv.preprocessed_data`](./rules/files/deriv/preprocessed_data.yaml):
```YAML
anat_nonparametric_common:
- $ref: rules.datatypes.anat.nonparametric
+ $ref: rules.files.raw.anat.nonparametric
entities:
- $ref: rules.datatypes.anat.nonparametric.entities
+ $ref: rules.files.raw.anat.nonparametric.entities
space: optional
description: optional
```
Here, the derivative datatype rule starts by copying the raw datatype rule
- `rules.datatypes.anat.nonparametric`.
+ `rules.files.raw.anat.nonparametric`.
It then *overrides* the `entities` portion of that rule with a new object.
To *extend* the original `entities`, it again begins
- by referencing `rules.datatypes.anat.nonparametric.entities`,
+ by referencing `rules.files.raw.anat.nonparametric.entities`,
and adding the new entities `space` and `description`.
### Expressions
@@ -229,7 +231,10 @@ which (currently) contains at the top level:
- `associations`: associated files, discovered by the inheritance principle
- `columns`: the columns in the current TSV file
- `json`: the contents of the current JSON file
+- `gzip`: the contents of the current file GZIP header
- `nifti_header`: selected contents of the current NIfTI file's header
+- `ome`: the contents of the current OME-XML metadata
+- `tiff`: the contents of the current TIFF file's header
Some of these are strings, while others are nested objects.
These are to be populated by an *interpreter* of the schema,
diff --git a/src/schema/SCHEMA_VERSION b/src/schema/SCHEMA_VERSION
index c7d2522718..d182dc9160 100644
--- a/src/schema/SCHEMA_VERSION
+++ b/src/schema/SCHEMA_VERSION
@@ -1 +1 @@
-0.7.2-dev
+0.8.1-dev
diff --git a/src/schema/meta/context.yaml b/src/schema/meta/context.yaml
index 5f10be59d6..4404e390ea 100644
--- a/src/schema/meta/context.yaml
+++ b/src/schema/meta/context.yaml
@@ -180,6 +180,9 @@ context:
n_cols:
description: 'Number of columns in bval file'
type: integer
+ n_rows:
+ description: 'Number of rows in bval file'
+ type: integer
bvec:
description: 'B vector file'
type: object
@@ -190,6 +193,9 @@ context:
n_cols:
description: 'Number of columns in bvec file'
type: integer
+ n_rows:
+ description: 'Number of rows in bvec file'
+ type: integer
channels:
description: 'Channels file'
type: object
@@ -295,7 +301,8 @@ context:
description: 'String representing the unit of voxel spacing.'
type: string
enum:
- - 'unknown'
+ - $ref: objects.enums.unknown.value
+ # TODO: Add definitions for these values. (perhaps don't specify)
- 'meter'
- 'mm'
- 'um'
@@ -304,7 +311,8 @@ context:
description: 'String representing the unit of inter-volume intervals.'
type: string
enum:
- - 'unknown'
+ - $ref: objects.enums.unknown.value
+ # TODO: Add definitions for these values. (perhaps don't specify)
- 'sec'
- 'msec'
- 'usec'
diff --git a/src/schema/meta/expression_tests.yaml b/src/schema/meta/expression_tests.yaml
index 4d8c63f008..e1f06fdedc 100644
--- a/src/schema/meta/expression_tests.yaml
+++ b/src/schema/meta/expression_tests.yaml
@@ -10,46 +10,26 @@
result: null
- expression: null && true
result: null
-- expression: null || true
- result: null
- expression: true && null
result: null
- expression: false && null
result: false
- expression: true || null
result: true
+- expression: null || true
+ result: true
- expression: false || null
result: null
- expression: '!null'
- result: null
-- expression: null + 1
- result: null
-- expression: null - 1
- result: null
-- expression: null * 1
- result: null
-- expression: null / 1
- result: null
-- expression: 1 + null
- result: null
-- expression: 1 - null
- result: null
-- expression: 1 * null
- result: null
-- expression: 1 / null
- result: null
-- expression: "'str1' + null"
- result: null
-- expression: "null + 'str1'"
- result: null
+ result: true
- expression: intersects([], null)
- result: null
+ result: false
- expression: intersects(null, [])
- result: null
+ result: false
- expression: match(null, 'pattern')
result: null
- expression: match('string', null)
- result: null
+ result: false
- expression: substr(null, 1, 4)
result: null
- expression: substr('string', null, 4)
@@ -79,27 +59,19 @@
- expression: null == 1
result: false
- expression: '"VolumeTiming" in null'
- result: false
+ result: null
- expression: exists(null, "bids-uri")
- result: false
+ result: 0
- expression: exists([], null)
- result: false
-
-# Truth/falsity of final expressions
-- expression: evaluate(true)
+ result: 0
+- expression: true || sidecar.MissingValue
result: true
-- expression: evaluate(false)
- result: false
-- expression: evaluate(null)
- result: false
# General expressions
- expression: 1 + 2
result: 3
- expression: '"cat" + "dog"'
result: 'catdog'
-- expression: '1 + "cat"'
- result: null
- expression: match('string', '.*')
result: true
- expression: match('', '.')
diff --git a/src/schema/objects/columns.yaml b/src/schema/objects/columns.yaml
index bd1ab1478e..bc11e7def7 100644
--- a/src/schema/objects/columns.yaml
+++ b/src/schema/objects/columns.yaml
@@ -37,6 +37,9 @@ age:
display_name: Subject age
description: |
Numeric value in years (float or integer value).
+
+ It is recommended to tag participant ages that are 89 or higher as 89+,
+ for privacy purposes.
type: number
unit: year
cardiac:
@@ -45,6 +48,18 @@ cardiac:
description: |
continuous pulse measurement
type: number
+channel:
+ name: channel
+ display_name: Channel
+ description: |
+ Channel(s) associated with an event.
+ If multiple channels are specified, they MUST be separated by a delimiter
+ specified in the `"Delimiter"` field describing the `channel` column.
+ For example, channels separated with a comma (`,`) require the `events.json`
+ file to contain `"channel": {"Delimiter": ","}`.
+ In the absence of a delimiter, tools MUST interpret any character as being part
+ of a channel name.
+ type: string
color:
name: color
display_name: Color label
@@ -61,13 +76,13 @@ component:
or `quat_x`, `quat_y`, `quat_z`, `quat_w` for quaternion orientation channels.
type: string
enum:
- - x
- - y
- - z
- - quat_x
- - quat_y
- - quat_z
- - quat_w
+ - $ref: objects.enums.x.value
+ - $ref: objects.enums.y.value
+ - $ref: objects.enums.z.value
+ - $ref: objects.enums.quat_x.value
+ - $ref: objects.enums.quat_y.value
+ - $ref: objects.enums.quat_z.value
+ - $ref: objects.enums.quat_w.value
- n/a
detector__channels:
name: detector
@@ -159,6 +174,7 @@ handedness:
For "ambidextrous", use one of these values: `ambidextrous`, `a`, `A`, `AMBIDEXTROUS`,
`Ambidextrous`.
type: string
+ # TODO: Add definitions for these values. (perhaps don't specify)
enum:
- left
- l
@@ -299,13 +315,11 @@ notch:
display_name: Notch frequencies
description: |
Frequencies used for the notch filter applied to the channel, in Hz.
- If no notch filter applied, use `n/a`.
- anyOf:
- - type: number
- unit: Hz
- - type: string
- enum:
- - n/a
+ If notch filters are applied at multiple frequencies,
+ these frequencies MAY be specified as a list,
+ for example, `[60, 120, 180]`.
+ If no notch filter was applied, use `n/a`.
+ type: string
onset:
name: onset
display_name: Event onset
@@ -377,6 +391,18 @@ reference__ieeg:
- type: string
enum:
- n/a
+reference_frame:
+ name: reference_frame
+ display_name: Reference frame
+ description: |
+ Specification of a reference frame in which the motion data are to be interpreted.
+ The description of the levels in `*_channels.json` SHOULD use `RotationRule`,
+ `RotationOrder`, and `SpatialAxes`, and MAY use `Description` for the specification.
+ anyOf:
+ - type: string
+ - type: string
+ enum:
+ - n/a
respiratory:
name: respiratory
display_name: Respiratory measurement
@@ -412,15 +438,15 @@ sample_type:
[ENCODE Biosample Type](https://www.encodeproject.org/profiles/biosample_type).
type: string
enum:
- - cell line
- - in vitro differentiated cells
- - primary cell
- - cell-free sample
- - cloning host
- - tissue
- - whole organisms
- - organoid
- - technical sample
+ - $ref: objects.enums.cell_line.value
+ - $ref: objects.enums.in_vitro_differentiated_cells.value
+ - $ref: objects.enums.primary_cell.value
+ - $ref: objects.enums.cell_free_sample.value
+ - $ref: objects.enums.cloning_host.value
+ - $ref: objects.enums.tissue.value
+ - $ref: objects.enums.whole_organisms.value
+ - $ref: objects.enums.organoid.value
+ - $ref: objects.enums.technical_sample.value
sampling_frequency:
name: sampling_frequency
display_name: Channel sampling frequency
@@ -448,6 +474,7 @@ sex:
For "other", use one of these values: `other`, `o`, `O`, `OTHER`, `Other`.
type: string
+ # TODO: Add definitions for these values. (perhaps don't specify)
enum:
- male
- m
@@ -531,8 +558,8 @@ status:
Description of noise type SHOULD be provided in `[status_description]`.
type: string
enum:
- - good
- - bad
+ - $ref: objects.enums.good.value
+ - $ref: objects.enums.bad.value
- n/a
status_description:
name: status_description
@@ -567,7 +594,7 @@ strain_rrid:
display_name: Strain RRID
description: |
For species different from `homo sapiens`, research resource identifier
- ([RRID](https://scicrunch.org/resources/Organisms/search))
+ ([RRID](https://scicrunch.org/resources/data/source/nlx_154697-1/search))
of the strain of the species, for example: `RRID:IMSR_JAX:000664`.
type: string
format: rrid
@@ -673,8 +700,8 @@ type__optodes:
The type of the optode.
type: string
enum:
- - source
- - detector
+ - $ref: objects.enums.source.value
+ - $ref: objects.enums.detector.value
- n/a
units:
name: units
@@ -718,11 +745,11 @@ volume_type:
the `volume_type` of each volume in the corresponding `*_asl.nii[.gz]` file.
type: string
enum:
- - control
- - label
- - m0scan
- - deltam
- - cbf
+ - $ref: objects.enums.control.value
+ - $ref: objects.enums.label.value
+ - $ref: objects.enums.m0scan.value
+ - $ref: objects.enums.deltam.value
+ - $ref: objects.enums.cbf.value
wavelength_nominal:
name: wavelength_nominal
display_name: Wavelength nominal
diff --git a/src/schema/objects/entities.yaml b/src/schema/objects/entities.yaml
index 3260b4a3d4..6facc34c0d 100644
--- a/src/schema/objects/entities.yaml
+++ b/src/schema/objects/entities.yaml
@@ -25,16 +25,6 @@ acquisition:
remains at the discretion of the researcher.
type: string
format: label
-atlas:
- name: atlas
- display_name: Atlas
- description: |
- The `atlas-` key/value pair corresponds to a custom label the user
- MAY use to distinguish a different atlas used for similar type of data.
-
- This entity is only applicable to derivative data.
- type: string
- format: label
ceagent:
name: ce
display_name: Contrast Enhancing Agent
@@ -51,9 +41,12 @@ chunk:
name: chunk
display_name: Chunk
description: |
- The `chunk-` key/value pair is used to distinguish between different regions,
- 2D images or 3D volumes files,
- of the same physical sample with different fields of view acquired in the same imaging experiment.
+ The `chunk-` key/value pair is used to distinguish between images of
+ the same physical sample with different fields of view acquired in the same
+ imaging experiment.
+ This entity applies to collections of 2D images, 3D volumes or 4D volume series
+ (for example, diffusion weighted images), and may be used to indicate different
+ anatomical structures or regions of the same structure.
type: string
format: index
density:
@@ -199,7 +192,7 @@ part:
`part-real`/`part-imag` pairs of files.
Phase images MAY be in radians or in arbitrary units.
- The sidecar JSON file MUST include the units of the `phase` image.
+ The sidecar JSON file MUST include the `"Units"` of the `phase` image.
The possible options are `"rad"` or `"arbitrary"`.
When there is only a magnitude image of a given type, the `part` entity MAY be
@@ -286,6 +279,16 @@ sample:
The label MUST be unique per subject and is RECOMMENDED to be unique throughout the dataset.
type: string
format: label
+segmentation:
+ name: seg
+ display_name: Segmentation
+ description: |
+ The `seg-` key/value pair corresponds to a custom label the user
+ MAY use to distinguish different segmentations.
+
+ This entity is only applicable to derivative data.
+ type: string
+ format: label
session:
name: ses
display_name: Session
@@ -356,7 +359,7 @@ stain:
although the label may be different.
Descriptions of antibodies SHOULD also be indicated in the `"SamplePrimaryAntibodies"`
- and/or `"SampleSecondaryAntobodies"` metadata fields, as appropriate.
+ and/or `"SampleSecondaryAntibodies"` metadata fields, as appropriate.
type: string
format: label
subject:
diff --git a/src/schema/objects/enums.yaml b/src/schema/objects/enums.yaml
index 16b2e6c618..f01d16cdc6 100644
--- a/src/schema/objects/enums.yaml
+++ b/src/schema/objects/enums.yaml
@@ -322,6 +322,22 @@ ChietiItab:
display_name: Chieti ITAB
description: |
RAS orientation and the origin between the ears.
+calibration:
+ value: calibration
+ display_name: calibration
+ description: |
+ The fine-calibration file, is produced by the MaxFilter software and the work of
+ Neuromag/Elekta/MEGIN engineers during maintenance of the MEG acquisition system.
+ It is specific to the site of recording and may change in the process of regular system maintenance.
+ it is usually shared with a crosstalk file.
+crosstalk:
+ value: crosstalk
+ display_name: crosstalk
+ description: |
+ The crosstalk file, is produced by the MaxFilter software and the work of
+ Neuromag/Elekta/MEGIN engineers during maintenance of the MEG acquisition system.
+ It is specific to the site of recording and may change in the process of regular system maintenance.
+ it is usually shared with a fine-calibration file.
individual:
value: individual
display_name: individual
@@ -1087,3 +1103,305 @@ NIRSCWMUA:
- fnirs
description: |
Continuous wave optical absorption measurements. Equivalent to dataTypeLabel mua in SNIRF.
+source:
+ value: source
+ display_name: source
+ description: |
+ A light emitting device, sometimes called a transmitter.
+detector:
+ value: detector
+ display_name: detector
+ description: |
+ A photoelectric transducer, sometimes called a receiver.
+mixed:
+ value: mixed
+ display_name: mixed
+ description: |
+ Mixed detector types were used for this NIRS recording, specify in `optodes.tsv`.
+x:
+ value: x
+ display_name: x
+ description: |
+ The x dimension of the coordinate system.
+y:
+ value: y
+ display_name: y
+ description: |
+ The y dimension of the coordinate system.
+z:
+ value: z
+ display_name: z
+ description: |
+ The z dimension of the coordinate system.
+quat_x:
+ value: quat_x
+ display_name: quat_x
+ description: |
+ The quaternion x dimension of the coordinate system.
+quat_y:
+ value: quat_y
+ display_name: quat_y
+ description: |
+ The quaternion y dimension of the coordinate system.
+quat_z:
+ value: quat_z
+ display_name: quat_z
+ description: |
+ The quaternion z dimension of the coordinate system.
+quat_w:
+ value: quat_w
+ display_name: quat_w
+ description: |
+ The quaternion w dimension of the coordinate system.
+unknown:
+ value: 'unknown'
+ display_name: unknown
+ description: |
+ An unknown unit.
+pixels:
+ value: pixels
+ display_name: pixels
+ description: |
+ A dimension specified in pixels.
+cell_line:
+ value: cell line
+ display_name: cell line
+ description: |
+ A biosample type (`sample_type`): cell line
+in_vitro_differentiated_cells:
+ value: in vitro differentiated cells
+ display_name: in vitro differentiated cells
+ description: |
+ A biosample type (`sample_type`): in vitro differentiated cells
+primary_cell:
+ value: primary cell
+ display_name: primary cell
+ description: |
+ A biosample type (`sample_type`): primary cell
+cell_free_sample:
+ value: cell-free sample
+ display_name: cell-free sample
+ description: |
+ A biosample type (`sample_type`): cell-free sample
+cloning_host:
+ value: cloning host
+ display_name: cloning host
+ description: |
+ A biosample type (`sample_type`): cloning host
+tissue:
+ value: tissue
+ display_name: tissue
+ description: |
+ A biosample type (`sample_type`): tissue
+whole_organisms:
+ value: whole organisms
+ display_name: whole organisms
+ description: |
+ A biosample type (`sample_type`): whole organisms
+organoid:
+ value: organoid
+ display_name: organoid
+ description: |
+ A biosample type (`sample_type`): organoid
+technical_sample:
+ value: technical sample
+ display_name: technical sample
+ description: |
+ A biosample type (`sample_type`): technical sample
+good:
+ value: good
+ display_name: good
+ description: |
+ A good status (for example the status of a recording channel).
+bad:
+ value: bad
+ display_name: bad
+ description: |
+ A bad status (for example the status of a recording channel).
+control:
+ value: control
+ display_name: control
+ description: |
+ An ASL volume type: control
+label:
+ value: label
+ display_name: label
+ description: |
+ An ASL volume type: label
+m0scan:
+ value: m0scan
+ display_name: m0scan
+ description: |
+ An ASL volume type: m0scan
+deltam:
+ value: deltam
+ display_name: deltam
+ description: |
+ An ASL volume type: deltam
+cbf:
+ value: cbf
+ display_name: cbf
+ description: |
+ An ASL volume type: cbf
+single_coil:
+ value: single-coil
+ display_name: single-coil
+ description: |
+ CASL Type: when a single coil is used for labeling.
+double_coil:
+ value: double-coil
+ display_name: double-coil
+ description: |
+ CASL Type: when a double coil is used for labeling.
+IODINE:
+ value: IODINE
+ display_name: IODINE
+ description: |
+ A Contrast Bolus Ingredient: Iodine
+GADOLINIUM:
+ value: GADOLINIUM
+ display_name: GADOLINIUM
+ description: |
+ A Contrast Bolus Ingredient: Gadolinium
+CARBON_DIOXIDE:
+ value: CARBON DIOXIDE
+ display_name: CARBON DIOXIDE
+ description: |
+ A Contrast Bolus Ingredient: Carbon Dioxide
+BARIUM:
+ value: BARIUM
+ display_name: BARIUM
+ description: |
+ A Contrast Bolus Ingredient: Barium
+XENON:
+ value: XENON
+ display_name: XENON
+ description: |
+ A Contrast Bolus Ingredient: Xenon
+raw:
+ value: raw
+ display_name: raw
+ description: |
+ A raw BIDS dataset.
+derivative:
+ value: derivative
+ display_name: derivative
+ description: |
+ A derived BIDS dataset.
+balanced:
+ value: balanced
+ display_name: balanced
+ description: |
+ PCASL Type: when balanced gradient pulses are used.
+unbalanced:
+ value: unbalanced
+ display_name: unbalanced
+ description: |
+ PCASL Type: when unbalanced gradient pulses are used.
+left_hand:
+ value: left-hand
+ display_name: left-hand
+ description: |
+ A rotation rule: rotations are applied clockwise around
+ an axis when seen from the positive direction
+right_hand:
+ value: right-hand
+ display_name: right-hand
+ description: |
+ A rotation rule: rotations are applied counter-clockwise around
+ an axis when seen from the positive direction
+in_vivo:
+ value: in vivo
+ display_name: in vivo
+ description: |
+ The environment of a sample: in vivo
+ex_vivo:
+ value: ex vivo
+ display_name: ex vivo
+ description: |
+ The environment of a sample: ex vivo
+in_vitro:
+ value: in vitro
+ display_name: in vitro
+ description: |
+ The environment of a sample: in vitro
+blood:
+ value: blood
+ display_name: blood
+ description: |
+ The origin of a sample: blood
+saliva:
+ value: saliva
+ display_name: saliva
+ description: |
+ The origin of a sample: saliva
+brain:
+ value: brain
+ display_name: brain
+ description: |
+ The origin of a sample: brain
+csf:
+ value: csf
+ display_name: CSF
+ description: |
+ Cerebrospinal fluid (for example, the origin of a sample or tissue)
+breast_milk:
+ value: breast milk
+ display_name: breast milk
+ description: |
+ The origin of a sample: breast milk
+bile:
+ value: bile
+ display_name: Bile
+ description: |
+ The origin of a sample: bile
+amniotic_fluid:
+ value: amniotic fluid
+ display_name: amniotic fluid
+ description: |
+ The origin of a sample: amniotic fluid
+other_biospecimen:
+ value: other biospecimen
+ display_name: other biospecimen
+ description: |
+ The origin of a sample: other biospecimen
+RF:
+ value: RF
+ display_name: RF
+ description: |
+ A spoiling type: RF
+GRADIENT:
+ value: GRADIENT
+ display_name: GRADIENT
+ description: |
+ A spoiling type: GRADIENT
+COMBINED:
+ value: COMBINED
+ display_name: COMBINED
+ description: |
+ A spoiling type: COMBINED
+gray_matter:
+ value: gray matter
+ display_name: gray matter
+ description: |
+ The origin of a tissue: gray matter
+white_matter:
+ value: white matter
+ display_name: white matter
+ description: |
+ The origin of a tissue: white matter
+meninges:
+ value: meninges
+ display_name: meninges
+ description: |
+ The origin of a tissue: meninges
+macrovascular:
+ value: macrovascular
+ display_name: macrovascular
+ description: |
+ The origin of a tissue: macrovascular
+microvascular:
+ value: microvascular
+ display_name: microvascular
+ description: |
+ The origin of a tissue: microvascular
diff --git a/src/schema/objects/extensions.yaml b/src/schema/objects/extensions.yaml
index 1a0dc4d299..96056e497d 100644
--- a/src/schema/objects/extensions.yaml
+++ b/src/schema/objects/extensions.yaml
@@ -100,9 +100,9 @@ fdt:
value: .fdt
display_name: EEGLAB FDT
description: |
- An [EEGLAB](https://sccn.ucsd.edu/eeglab) file.
+ An [EEGLAB](https://sccn.ucsd.edu/eeglab/index.php) file.
- The format used by the MATLAB toolbox [EEGLAB](https://sccn.ucsd.edu/eeglab).
+ The format used by the MATLAB toolbox [EEGLAB](https://sccn.ucsd.edu/eeglab/index.php).
Each recording consists of a `.set` file with an optional `.fdt` file.
fif:
value: .fif
@@ -175,8 +175,10 @@ OMEZARR:
description: |
An OME-NGFF file.
- OME-NGFF is a [Zarr](https://zarr.readthedocs.io)-based format, organizing data arrays in nested directories.
- This format was developed by the Open Microscopy Environment to provide data stream access to very large data.
+ OME-NGFF is a [Zarr](https://zarr.readthedocs.io/en/stable/)-based format,
+ organizing data arrays in nested directories.
+ This format was developed by the Open Microscopy Environment
+ to provide data stream access to very large data.
nii:
value: .nii
display_name: NIfTI
@@ -191,7 +193,7 @@ nwb:
value: .nwb
display_name: Neurodata Without Borders Format
description: |
- A [Neurodata Without Borders](https://nwb-schema.readthedocs.io) file.
+ A [Neurodata Without Borders](https://nwb-schema.readthedocs.io/en/latest/) file.
Each recording consists of a single `.nwb` file.
OMEBigTiff:
@@ -233,9 +235,9 @@ set:
value: .set
display_name: EEGLAB SET
description: |
- An [EEGLAB](https://sccn.ucsd.edu/eeglab) file.
+ An [EEGLAB](https://sccn.ucsd.edu/eeglab/index.php) file.
- The format used by the MATLAB toolbox [EEGLAB](https://sccn.ucsd.edu/eeglab).
+ The format used by the MATLAB toolbox [EEGLAB](https://sccn.ucsd.edu/eeglab/index.php).
Each recording consists of a `.set` file with an optional `.fdt` file.
snirf:
value: .snirf
diff --git a/src/schema/objects/files.yaml b/src/schema/objects/files.yaml
index 8adb534619..10cadf3bfa 100644
--- a/src/schema/objects/files.yaml
+++ b/src/schema/objects/files.yaml
@@ -9,8 +9,8 @@ CHANGES:
Version history of the dataset (describing changes, updates and corrections) MAY be provided in
the form of a `CHANGES` text file.
This file MUST follow the
- [CPAN Changelog convention](https://metacpan.org/pod/release/HAARG/CPAN-Changes-0.400002/lib/\
- CPAN/Changes/Spec.pod).
+ [CPAN Changelog convention](https://metacpan.org/release/HAARG/CPAN-Changes-0.400002/view\
+ /lib/CPAN/Changes/Spec.pod).
The `CHANGES` file MUST be either in ASCII or UTF-8 encoding.
CITATION:
display_name: CITATION.cff
@@ -102,6 +102,15 @@ derivatives:
Derivative data (for example preprocessed files).
See the [relevant section](SPEC_ROOT/common-principles.md#source-vs-raw-vs-derived-data)
for more information.
+phenotype:
+ display_name: Phenotype
+ file_type: directory
+ description: |
+ A directory where to store participant level measurements (for
+ example responses from multiple questionnaires) split into
+ individual files separate from `participants.tsv`.
+ See the [relevant section](SPEC_ROOT/modality-agnostic-files.md#phenotypic-and-assessment-data)
+ for more information.
sourcedata:
display_name: Source data
file_type: directory
diff --git a/src/schema/objects/formats.yaml b/src/schema/objects/formats.yaml
index e0704bee31..804dfda885 100644
--- a/src/schema/objects/formats.yaml
+++ b/src/schema/objects/formats.yaml
@@ -22,12 +22,12 @@ integer:
display_name: Integer
description: |
An integer which may be positive or negative.
- pattern: '[+-]?\d+'
+ pattern: ' *[+-]?\d+ *'
number:
display_name: Number
description: |
A number which may be an integer or float, positive or negative.
- pattern: '[+-]?([0-9]+([.][0-9]*)?|[.][0-9]+)([eE][+-]?[0-9]+)?'
+ pattern: ' *[+-]?([0-9]+([.][0-9]*)?|[.][0-9]+)([eE][+-]?[0-9]+)? *'
string:
display_name: String
description: |
diff --git a/src/schema/objects/metadata.yaml b/src/schema/objects/metadata.yaml
index 30f145aa96..57515dd6f0 100644
--- a/src/schema/objects/metadata.yaml
+++ b/src/schema/objects/metadata.yaml
@@ -98,6 +98,7 @@ AnatomicalLandmarkCoordinateUnits:
description: |
Units of the coordinates of `"AnatomicalLandmarkCoordinateSystem"`.
type: string
+ # TODO: Add definitions for these values. (perhaps don't specify)
enum:
- m
- mm
@@ -177,12 +178,6 @@ AssociatedEmptyRoom:
format: dataset_relative
- type: string
format: bids_uri
-Atlas:
- name: Atlas
- display_name: Atlas
- description: |
- Which atlas (if any) was used to generate the mask.
- type: string
AttenuationCorrection:
name: AttenuationCorrection
display_name: Attenuation Correction
@@ -384,8 +379,8 @@ CASLType:
Describes if a separate coil is used for labeling.
type: string
enum:
- - single-coil
- - double-coil
+ - $ref: objects.enums.single_coil.value
+ - $ref: objects.enums.double_coil.value
CapManufacturer:
name: CapManufacturer
display_name: Cap Manufacturer
@@ -405,7 +400,7 @@ CellType:
description: |
Describes the type of cell analyzed.
Values SHOULD come from the
- [cell ontology](http://obofoundry.org/ontology/cl.html).
+ [cell ontology](https://obofoundry.org/ontology/cl.html).
type: string
ChunkTransformationMatrix:
name: ChunkTransformationMatrix
@@ -509,11 +504,12 @@ ContrastBolusIngredient:
Corresponds to DICOM Tag 0018, 1048 `Contrast/Bolus Ingredient`.
type: string
enum:
- - IODINE
- - GADOLINIUM
- - CARBON DIOXIDE
- - BARIUM
- - XENON
+ - $ref: objects.enums.IODINE.value
+ - $ref: objects.enums.GADOLINIUM.value
+ - $ref: objects.enums.CARBON_DIOXIDE.value
+ - $ref: objects.enums.BARIUM.value
+ - $ref: objects.enums.XENON.value
+ # TODO: Add definitions for these values. (perhaps don't specify)
- UNKNOWN
- NONE
DCOffsetCorrection:
@@ -555,8 +551,8 @@ DatasetType:
For backwards compatibility, the default value is `"raw"`.
type: string
enum:
- - raw
- - derivative
+ - $ref: objects.enums.raw.value
+ - $ref: objects.enums.derivative.value
DecayCorrectionFactor:
name: DecayCorrectionFactor
display_name: Decay Correction Factor
@@ -590,6 +586,13 @@ DelayTime:
This field is mutually exclusive with `"VolumeTiming"`.
type: number
unit: s
+Delimiter:
+ name: Delimiter
+ display_name: Delimiter
+ description: |
+ If rows in a column may be interpreted as a lists of values, the character that
+ separates one value from the next.
+ type: string
Density:
name: Density
display_name: Density
@@ -630,7 +633,7 @@ DetectorType:
format: unit
- type: string
enum:
- - mixed
+ - $ref: objects.enums.mixed.value
DeviceSerialNumber:
name: DeviceSerialNumber
display_name: Device Serial Number
@@ -693,6 +696,7 @@ DigitizedHeadPointsCoordinateUnits:
description: |
Units of the coordinates of `"DigitizedHeadPointsCoordinateSystem"`.
type: string
+ # TODO: Add definitions for these values. (perhaps don't specify)
enum:
- m
- mm
@@ -794,6 +798,7 @@ EEGCoordinateUnits:
description: |
Units of the coordinates of `EEGCoordinateSystem`.
type: string
+ # TODO: Add definitions for these values. (perhaps don't specify)
enum:
- m
- mm
@@ -921,7 +926,7 @@ ElectricalStimulationParameters:
display_name: Electrical Stimulation Parameters
description: |
Free form description of stimulation parameters, such as frequency or shape.
- Specific onsets can be specified in the events.tsv file.
+ Specific onsets can be specified in the `events.tsv` file.
Specific shapes can be described here in freeform text.
type: string
ElectrodeManufacturer:
@@ -1002,6 +1007,7 @@ FiducialsCoordinateUnits:
Units in which the coordinates that are listed in the field
`"FiducialsCoordinateSystem"` are represented.
type: string
+ # TODO: Add definitions for these values. (perhaps don't specify)
enum:
- m
- mm
@@ -1300,6 +1306,7 @@ HeadCoilCoordinateUnits:
description: |
Units of the coordinates of `HeadCoilCoordinateSystem`.
type: string
+ # TODO: Add definitions for these values. (perhaps don't specify)
enum:
- m
- mm
@@ -1732,7 +1739,15 @@ Levels:
descriptions (values).
type: object
additionalProperties:
- type: string
+ anyOf:
+ - type: string
+ - type: object
+ properties:
+ TermURL:
+ type: string
+ format: uri
+ Description:
+ type: string
License:
name: License
display_name: License
@@ -1823,6 +1838,7 @@ MEGCoordinateUnits:
description: |
Units of the coordinates of `"MEGCoordinateSystem"`.
type: string
+ # TODO: Add definitions for these values. (perhaps don't specify)
enum:
- m
- mm
@@ -2163,6 +2179,7 @@ NIRSCoordinateUnits:
description: |
Units of the coordinates of `NIRSCoordinateSystem`.
type: string
+ # TODO: Add definitions for these values. (perhaps don't specify)
enum:
- m
- mm
@@ -2283,10 +2300,9 @@ PCASLType:
description: |
The type of gradient pulses used in the `control` condition.
type: string
- # TODO: Add definitions for these values.
enum:
- - balanced
- - unbalanced
+ - $ref: objects.enums.balanced.value
+ - $ref: objects.enums.unbalanced.value
ParallelAcquisitionTechnique:
name: ParallelAcquisitionTechnique
display_name: Parallel Acquisition Technique
@@ -2430,6 +2446,7 @@ PixelSizeUnits:
Unit format of the specified `"PixelSize"`. MUST be one of: `"mm"` (millimeter), `"um"`
(micrometer) or `"nm"` (nanometer).
type: string
+ # TODO: Add definitions for these values. (perhaps don't specify)
enum:
- mm
- um
@@ -2670,10 +2687,10 @@ RepetitionTime:
and the beginning of acquisition of the volume following it (TR).
When used in the context of functional acquisitions this parameter best
corresponds to
- [DICOM Tag 0020, 0110](http://dicomlookup.com/lookup.asp?sw=Tnumber&q=(0020,0110)):
+ [DICOM Tag 0020, 0110](http://dicomlookup.com/dicomtags/(0020,0110)):
the "time delta between images in a
dynamic of functional set of images" but may also be found in
- [DICOM Tag 0018, 0080](http://dicomlookup.com/lookup.asp?sw=Tnumber&q=(0018,0080)):
+ [DICOM Tag 0018, 0080](http://dicomlookup.com/dicomtags/(0018,0080)):
"the period of time in msec between the beginning
of a pulse sequence and the beginning of the succeeding
(essentially identical) pulse sequence".
@@ -2690,7 +2707,7 @@ RepetitionTimeExcitation:
display_name: Repetition Time Excitation
description: |
The interval, in seconds, between two successive excitations.
- [DICOM Tag 0018, 0080](http://dicomlookup.com/lookup.asp?sw=Tnumber&q=(0018,0080))
+ [DICOM Tag 0018, 0080](http://dicomlookup.com/dicomtags/(0018,0080))
best refers to this parameter.
This field may be used together with the `"RepetitionTimePreparation"` for
certain use cases, such as
@@ -2746,6 +2763,7 @@ RotationOrder:
description: |
Specify the sequence in which the elemental 3D extrinsic rotations are applied around the three distinct axes.
type: string
+ # TODO: Add definitions for these values. (perhaps don't specify)
enum:
- XYZ
- XZY
@@ -2763,8 +2781,8 @@ RotationRule:
counter-clockwise (right-hand rule). Must be one of: "left-hand", "right-hand".
type: string
enum:
- - left-hand
- - right-hand
+ - $ref: objects.enums.left_hand.value
+ - $ref: objects.enums.right_hand.value
- n/a
SEEGChannelCount:
name: SEEGChannelCount
@@ -2787,9 +2805,9 @@ SampleEnvironment:
or `"in vitro"`.
type: string
enum:
- - in vivo
- - ex vivo
- - in vitro
+ - $ref: objects.enums.in_vivo.value
+ - $ref: objects.enums.ex_vivo.value
+ - $ref: objects.enums.in_vitro.value
SampleExtractionInstitution:
name: SampleExtractionInstitution
display_name: Sample Extraction Institution
@@ -2818,16 +2836,15 @@ SampleOrigin:
description: |
Describes from which tissue the genetic information was extracted.
type: string
- # TODO: Add definitions for these values.
enum:
- - blood
- - saliva
- - brain
- - csf
- - breast milk
- - bile
- - amniotic fluid
- - other biospecimen
+ - $ref: objects.enums.blood.value
+ - $ref: objects.enums.saliva.value
+ - $ref: objects.enums.brain.value
+ - $ref: objects.enums.csf.value
+ - $ref: objects.enums.breast_milk.value
+ - $ref: objects.enums.bile.value
+ - $ref: objects.enums.amniotic_fluid.value
+ - $ref: objects.enums.other_biospecimen.value
SamplePrimaryAntibody:
name: SamplePrimaryAntibody
display_name: Sample Primary Antibody
@@ -3295,7 +3312,7 @@ SpoilingRFPhaseIncrement:
which is applied to the phase of the excitation pulse at each TR period for
achieving RF spoiling.
type: number
- unit: degrees
+ unit: degree
SpoilingState:
name: SpoilingState
display_name: Spoiling State
@@ -3309,11 +3326,10 @@ SpoilingType:
description: |
Specifies which spoiling method(s) are used by a spoiled sequence.
type: string
- # TODO: Add definitions for these values.
enum:
- - RF
- - GRADIENT
- - COMBINED
+ - $ref: objects.enums.RF.value
+ - $ref: objects.enums.GRADIENT.value
+ - $ref: objects.enums.COMBINED.value
StartTime:
name: StartTime
display_name: Start Time
@@ -3397,9 +3413,10 @@ TermURL:
name: TermURL
display_name: TermURL
description: |
- URL pointing to a formal definition of this type of data in an ontology
- available on the web.
+ URL pointing to a formal definition of this type of data in an ontology available on the web.
+ For example: https://www.ncbi.nlm.nih.gov/mesh/68008297 for "male".
type: string
+ format: uri
TimeZero:
name: TimeZero
display_name: Time Zero
@@ -3424,14 +3441,13 @@ TissueOrigin:
description: |
Describes the type of tissue analyzed for `"SampleOrigin"` `brain`.
type: string
- # TODO: Add definitions for these values.
enum:
- - gray matter
- - white matter
- - csf
- - meninges
- - macrovascular
- - microvascular
+ - $ref: objects.enums.gray_matter.value
+ - $ref: objects.enums.white_matter.value
+ - $ref: objects.enums.csf.value
+ - $ref: objects.enums.meninges.value
+ - $ref: objects.enums.macrovascular.value
+ - $ref: objects.enums.microvascular.value
TotalAcquiredPairs:
name: TotalAcquiredPairs
display_name: Total Acquired Pairs
@@ -3682,10 +3698,11 @@ iEEGCoordinateUnits:
MUST be `"pixels"` if `iEEGCoordinateSystem` is `Pixels`.
type: string
enum:
+ - $ref: objects.enums.pixels.value
+ # TODO: Add definitions for these values. (perhaps don't specify)
- m
- mm
- cm
- - pixels
- n/a
iEEGElectrodeGroups:
name: iEEGElectrodeGroups
diff --git a/src/schema/objects/suffixes.yaml b/src/schema/objects/suffixes.yaml
index caa943ee7c..13ee57ebc5 100644
--- a/src/schema/objects/suffixes.yaml
+++ b/src/schema/objects/suffixes.yaml
@@ -228,10 +228,8 @@ PDw:
In arbitrary units (arbitrary).
The contrast of these images is mainly determined by spatial variations in
the spin density (1H) of the imaged specimen.
- In spin-echo sequences this contrast is achieved at short repetition and long
- echo times.
- In a gradient-echo acquisition, PD weighting dominates the contrast at long
- repetition and short echo times, and at small flip angles.
+ This contrast is achieved at short echo times and long repetition times;
+ for gradient echo, this weighting is also possible with a short TR (TR<[_ses-][_acq-][_rec-][_run-]_aslcontext.tsv'.
+ associated 'aslcontext.tsv'.
'FlipAngle' is the flip angle (FA) for the acquisition, specified in degrees.
Corresponds to: DICOM Tag 0018, 1314 `Flip Angle`.
The data type number may apply to files from any MRI modality concerned with a single value for this field,
@@ -114,7 +114,7 @@ ASLPostLabelingDelayASLContextLength:
code: POST_LABELING_DELAY_NOT_MATCHING_ASLCONTEXT_TSV
message: |
The number of values for 'PostLabelingDelay' for this file does not match the number of volumes
- in the 'sub-[_ses-][_acq-][_rec-][_run-]_aslcontext.tsv'.
+ in the associated 'aslcontext.tsv'.
'PostLabelingDelay' is the time, in seconds, after the end of the labeling (for (P)CASL) or
middle of the labeling pulse (for PASL) until the middle of the excitation pulse applied to
the imaging slab (for 3D acquisition) or first slice (for 2D acquisition).
@@ -138,7 +138,7 @@ ASLLabelingDurationASLContextLength:
code: LABELLING_DURATION_NOT_MATCHING_ASLCONTEXT_TSV
message: |
The number of values for 'LabelingDuration' for this file does not match the number of volumes
- in the 'sub-[_ses-][_acq-][_rec-][_run-]_aslcontext.tsv'.
+ in the associated 'aslcontext.tsv'.
'LabelingDuration' is the total duration of the labeling pulse train, in seconds,
corresponding to the temporal width of the labeling bolus for `(P)CASL`.
In case all control-label volumes (or deltam or CBF) have the same `LabelingDuration`,
@@ -147,7 +147,7 @@ ASLLabelingDurationASLContextLength:
an array of numbers must be specified, for which any `m0scan` in the timeseries has a
`LabelingDuration` of zero.
In case an array of numbers is provided, its length should be equal to the number of volumes
- specified in `*_aslcontext.tsv`.
+ specified in the associated `aslcontext.tsv`.
Corresponds to DICOM Tag 0018,9258 `ASL Pulse Train Duration`.
level: error
selectors:
@@ -163,7 +163,7 @@ ASLRepetitionTimePreparationASLContextLength:
code: REPETITIONTIMEPREPARATION_NOT_MATCHING_ASLCONTEXT_TSV
message: |
The number of values of 'RepetitionTimePreparation' for this file does not match the number of
- volumes in the 'sub-[_ses-][_acq-][_rec-][_run-]_aslcontext.tsv'.
+ volumes in the associated 'aslcontext.tsv'.
'RepetitionTimePreparation' is the interval, in seconds, that it takes a preparation pulse block to
re-appear at the beginning of the succeeding (essentially identical) pulse sequence block.
The data type number may apply to files from any MRI modality concerned with a single value for this field.
@@ -201,9 +201,9 @@ ASLTotalAcquiredVolumesASLContextLength:
code: TOTAL_ACQUIRED_VOLUMES_NOT_CONSISTENT
message: |
The number of values for 'TotalAcquiredVolumes' for this file does not match number of
- volumes in the 'sub-[_ses-][_acq-][_rec-][_run-]_aslcontext.tsv'.
+ volumes in the associated 'aslcontext.tsv'.
'TotalAcquiredVolumes' is the original number of 3D volumes acquired for each volume defined in the
- 'sub-[_ses-][_acq-][_rec-][_run-]_aslcontext.tsv'.
+ associated 'aslcontext.tsv'.
level: warning
selectors:
- suffix == "asl"
@@ -217,7 +217,7 @@ PostLabelingDelayGreater:
issue:
code: POST_LABELING_DELAY_GREATER
message: |
- 'PostLabelingDelay' is greater than 10, are you sure it's expressed in seconds?
+ 'PostLabelingDelay' is greater than 10. Are you sure it's expressed in seconds?
level: warning
selectors:
- suffix == "asl"
@@ -230,7 +230,7 @@ BolusCutOffDelayTimeGreater:
issue:
code: BOLUS_CUT_OFF_DELAY_TIME_GREATER
message: |
- 'BolusCutOffDelayTime' is greater than 10, are you sure it's expressed in seconds?
+ 'BolusCutOffDelayTime' is greater than 10. Are you sure it's expressed in seconds?
level: warning
selectors:
- sidecar.BolusCutOffDelayTime != null
@@ -242,7 +242,7 @@ LabelingDurationGreater:
issue:
code: LABELING_DURATION_GREATER
message: |
- 'LabelingDuration' is greater than 10, are you sure it's expressed in seconds?
+ 'LabelingDuration' is greater than 10. Are you sure it's expressed in seconds?
level: warning
selectors:
- sidecar.LabelingDuration != null
@@ -255,7 +255,7 @@ ASLEchoTimeASLContextLength:
code: ECHO_TIME_NOT_CONSISTENT
message: |
The number of values for 'EchoTime' for this file does not match number of volumes in the
- 'sub-[_ses-][_acq-][_rec-][_run-]_aslcontext.tsv'.
+ associated 'aslcontext.tsv'.
'EchoTime' is the echo time (TE) for the acquisition, specified in seconds.
level: warning
selectors:
@@ -272,8 +272,8 @@ ASLM0TypeAbsentScan:
issue:
code: M0Type_SET_INCORRECTLY_TO_ABSENT
message: |
- You defined M0Type as 'absent' while including a separate '*_m0scan.nii[.gz]' and
- '*_m0scan.json', or defining the 'M0Estimate' field.
+ You defined M0Type as 'absent' while including a separate 'm0scan.nii[.gz]' and
+ 'm0scan.json', or defining the 'M0Estimate' field.
This is not allowed, please check that this field are filled correctly.
level: error
selectors:
@@ -289,7 +289,8 @@ ASLM0TypeAbsentASLContext:
issue:
code: M0Type_SET_INCORRECTLY_TO_ABSENT_IN_ASLCONTEXT
message: |
- You defined M0Type as 'absent' while including an m0scan volume within the '*_aslcontext.tsv'.
+ You defined M0Type as 'absent' while including an m0scan volume within the associated
+ 'aslcontext.tsv'.
This is not allowed, please check that this field are filled correctly.
level: error
selectors:
@@ -306,7 +307,8 @@ ASLM0TypeIncorrect:
code: M0Type_SET_INCORRECTLY
message: |
M0Type was not defined correctly.
- If 'M0Type' is equal to 'separate', the dataset should include a *_m0scan.nii[.gz] and *_m0scan.json file.
+ If 'M0Type' is equal to 'separate', the dataset should include an associated
+ 'm0scan.nii[.gz]' and 'm0scan.json' file.
level: error
selectors:
- suffix == "asl"
diff --git a/src/schema/rules/checks/dataset.yaml b/src/schema/rules/checks/dataset.yaml
index 999de949cf..b0f0aba634 100644
--- a/src/schema/rules/checks/dataset.yaml
+++ b/src/schema/rules/checks/dataset.yaml
@@ -43,7 +43,8 @@ SamplesTSVMissing:
issue:
code: SAMPLES_TSV_MISSING
message: |
- The compulsory file /samples.tsv is missing. See Modality agnostic files section of the BIDS specification.
+ The compulsory file '/samples.tsv' is missing.
+ See 'Modality agnostic files' section of the BIDS specification.
level: error
selectors:
- path == 'dataset_description.json'
@@ -55,7 +56,7 @@ UnknownVersion:
issue:
code: UNKNOWN_BIDS_VERSION
message: |
- The BIDSVersion field of dataset_description.json does not match a known release.
+ The BIDSVersion field of 'dataset_description.json' does not match a known release.
The BIDS Schema used for validation may be out of date.
level: warning
selectors:
@@ -68,7 +69,7 @@ SingleSourceAuthors:
code: AUTHORS_AND_CITATION_FILE_MUTUALLY_EXCLUSIVE
level: error
message: |
- CITATION.cff file found. The "Authors" field of dataset_description.json
+ 'CITATION.cff' file found. The "Authors" field of 'dataset_description.json'
must be removed to avoid inconsistency.
selectors:
- path == 'CITATION.cff'
@@ -80,9 +81,9 @@ SingleSourceCitationFields:
code: SINGLE_SOURCE_CITATION_FIELDS
level: warning
message: |
- CITATION.cff file found. The "HowToAckowledge", "License",
- and "ReferencesAndLinks" fields of dataset_description.json
- should be removed to avoid inconsistency.
+ CITATION.cff file found.
+ The "HowToAckowledge", "License", and "ReferencesAndLinks" fields of
+ 'dataset_description.json' should be removed to avoid inconsistency.
selectors:
- path == 'CITATION.cff'
checks:
diff --git a/src/schema/rules/checks/dwi.yaml b/src/schema/rules/checks/dwi.yaml
index 8f22ab6aae..d0b71d9a2a 100644
--- a/src/schema/rules/checks/dwi.yaml
+++ b/src/schema/rules/checks/dwi.yaml
@@ -6,7 +6,7 @@ DWIVolumeCount:
code: VOLUME_COUNT_MISMATCH
message: |
The number of volumes in this scan does not match the number of volumes in the
- corresponding .bvec and .bval files.
+ associated '.bvec' and '.bval' files.
level: error
selectors:
- suffix == "dwi"
@@ -22,31 +22,33 @@ DWIBvalRows:
issue:
code: BVAL_MULTIPLE_ROWS
message: |
- '.bval' files should contain exactly one row of volumes.
+ '.bval' files should contain exactly one row of values.
level: error
selectors:
- - extension == ".bval"
+ - suffix == "dwi"
+ - '"bval" in associations'
checks:
- - data.n_rows == 1
+ - associations.bval.n_rows == 1
# 31
DWIBvecRows:
issue:
code: BVEC_NUMBER_ROWS
message: |
- '.bvec' files should contain exactly three rows of volumes.
+ '.bvec' files should contain exactly three rows of values.
level: error
selectors:
- - extension == ".bvec"
+ - suffix == "dwi"
+ - '"bvec" in associations'
checks:
- - data.n_rows == 3
+ - associations.bvec.n_rows == 3
# 32
DWIMissingBvec:
issue:
code: DWI_MISSING_BVEC
message: |
- DWI scans must have a corresponding .bvec file.
+ DWI scans must have a corresponding '.bvec' file.
level: error
selectors:
- suffix == "dwi"
@@ -59,7 +61,7 @@ DWIMissingBval:
issue:
code: DWI_MISSING_BVAL
message: |
- DWI scans must have a corresponding .bval file.
+ DWI scans must have a corresponding '.bval' file.
level: error
selectors:
- suffix == "dwi"
diff --git a/src/schema/rules/checks/events.yaml b/src/schema/rules/checks/events.yaml
index 1492c03e2d..1d6c52584c 100644
--- a/src/schema/rules/checks/events.yaml
+++ b/src/schema/rules/checks/events.yaml
@@ -5,7 +5,7 @@ EventsMissing:
issue:
code: EVENTS_TSV_MISSING
message: |
- Task scans should have a corresponding events.tsv file.
+ Task scans should have a corresponding 'events.tsv' file.
If this is a resting state scan you can ignore this warning or rename the task to include the word "rest".
level: warning # could be an error with the proper selectors, I think
selectors:
@@ -26,4 +26,17 @@ StimulusFileMissing:
- suffix == "events"
- columns.stim_file != null
checks:
- - exists(columns.stim_file, "stimuli") == length(columns.stim_file)
+ - exists(columns.stim_file, "stimuli") == length(columns.stim_file) - count(columns.stim_file, "n/a")
+
+SortedOnsets:
+ issue:
+ code: EVENT_ONSET_ORDER
+ message: |
+ The onset column in events.tsv files should be sorted.
+ level: warning
+ selectors:
+ - suffix == "events"
+ - extension == ".tsv"
+ checks:
+ # n/a values will likely cause false alarms if encountered. Consider alternatives.
+ - sorted(columns.onset) == columns.onset
diff --git a/src/schema/rules/checks/fmap.yaml b/src/schema/rules/checks/fmap.yaml
index debddd03ea..af042351d8 100644
--- a/src/schema/rules/checks/fmap.yaml
+++ b/src/schema/rules/checks/fmap.yaml
@@ -18,7 +18,7 @@ FmapFieldmapWithoutMagnitude:
issue:
code: FIELDMAP_WITHOUT_MAGNITUDE_FILE
message: |
- '_fieldmap.nii[.gz]' file does not have accompanying '_magnitude.nii[.gz]' file.
+ 'fieldmap.nii[.gz]' file does not have an associated 'magnitude.nii[.gz]' file.
level: error
selectors:
- suffix == "fieldmap"
@@ -30,7 +30,7 @@ FmapPhasediffWithoutMagnitude:
issue:
code: MISSING_MAGNITUDE1_FILE
message: |
- Each '_phasediff.nii[.gz]' file should be associations with a '_magnitude1.nii[.gz]' file.
+ 'phasediff.nii[.gz]' file does not have an associated 'magnitude1.nii[.gz]' file.
level: warning
selectors:
- suffix == "phasediff"
@@ -42,7 +42,7 @@ MagnitudeFileWithTooManyDimensions:
issue:
code: MAGNITUDE_FILE_WITH_TOO_MANY_DIMENSIONS
message: |
- _magnitude1.nii[.gz] and _magnitude2.nii[.gz] files must have exactly three dimensions.
+ 'magnitude1.nii[.gz]' and 'magnitude2.nii[.gz]' files must have exactly three dimensions.
level: error
selectors:
- intersects([suffix], ['magnitude1', 'magnitude2'])
diff --git a/src/schema/rules/checks/func.yaml b/src/schema/rules/checks/func.yaml
index b17ea7a422..cce740a1ec 100644
--- a/src/schema/rules/checks/func.yaml
+++ b/src/schema/rules/checks/func.yaml
@@ -5,10 +5,10 @@ PhaseSuffixDeprecated:
code: PHASE_SUFFIX_DEPRECATED
message: |
DEPRECATED. Phase information associated with magnitude information stored in BOLD contrast.
- This suffix should be replaced by the part-phase in conjunction with the bold suffix.
- For backwards compatibility, _phase is considered equivalent to _part-phase_bold.
- When the _phase suffix is not used, each file shares the same name with the exception of the
- part- or part- key/value.
+ This suffix should be replaced by the 'part-phase' entity in conjunction with the 'bold' suffix.
+ For backwards compatibility, 'phase' is considered equivalent to 'part-phase_bold'.
+ When the 'phase' suffix is not used, each file shares the same name with the exception of the
+ 'part-' or 'part-' key/value.
level: warning
selectors:
- datatype == "func"
@@ -20,7 +20,7 @@ RepetitionTimeGreaterThan:
issue:
code: REPETITION_TIME_GREATER_THAN
message: |
- 'RepetitionTime' is greater than 100 are you sure it's expressed in seconds?
+ 'RepetitionTime' is greater than 100. Are you sure it's expressed in seconds?
level: warning
selectors:
- suffix == "bold"
@@ -47,7 +47,7 @@ BoldNot4d:
issue:
code: BOLD_NOT_4D
message: |
- Bold scans must be 4 dimensional.
+ BOLD scans must be 4 dimensional.
level: error
selectors:
- suffix == "bold"
@@ -60,8 +60,8 @@ SliceTimingGreaterThanRepetitionTime:
issue:
code: SLICETIMING_VALUES_GREATER_THAN_REPETITION_TIME
message: |
- SliceTiming values contains invalid value as it is greater than RepetitionTime.
- SliceTiming values should be in seconds not milliseconds (common mistake).
+ 'SliceTiming' contains invalid value(s) greater than 'RepetitionTime'.
+ 'SliceTiming' values should be in seconds, not milliseconds (common mistake).
level: error
selectors:
- suffix == "bold"
diff --git a/src/schema/rules/checks/general.yaml b/src/schema/rules/checks/general.yaml
index 054090b61f..b0505250b3 100644
--- a/src/schema/rules/checks/general.yaml
+++ b/src/schema/rules/checks/general.yaml
@@ -5,7 +5,7 @@ DuplicateFiles:
issue:
code: DUPLICATE_FILES
message: |
- File exists with and without `.gz` extension
+ File exists with and without `.gz` extension.
level: error
selectors:
- match(extension, '\.gz$')
@@ -16,8 +16,8 @@ ReadmeFileSmall:
issue:
code: README_FILE_SMALL
message: |
- The recommended file /README is very small. Please consider expanding it
- with additional information about the dataset.
+ The recommended file '/README' is very small.
+ Please consider expanding it with additional information about the dataset.
level: warning
selectors:
- match(path, '^README')
diff --git a/src/schema/rules/checks/hints.yaml b/src/schema/rules/checks/hints.yaml
index fe0fc7561e..7c733d8d51 100644
--- a/src/schema/rules/checks/hints.yaml
+++ b/src/schema/rules/checks/hints.yaml
@@ -9,9 +9,10 @@ TooFewAuthors:
issue:
code: TOO_FEW_AUTHORS
message: |
- The Authors field of dataset_description.json should contain an array of fields -
- with one author per field. This was triggered based on the presence of only one
- author field. Please ignore if all contributors are already properly listed.
+ The 'Authors' field of 'dataset_description.json' should contain an array of values -
+ with one author per value.
+ This was triggered based on the presence of only one author field.
+ Please ignore if all contributors are already properly listed.
level: warning
selectors:
- path == '/dataset_description.json'
diff --git a/src/schema/rules/checks/micr.yaml b/src/schema/rules/checks/micr.yaml
index 1476a0abb7..bf2f4c55c3 100644
--- a/src/schema/rules/checks/micr.yaml
+++ b/src/schema/rules/checks/micr.yaml
@@ -4,7 +4,8 @@ PixelSizeInconsistent:
issue:
code: PIXEL_SIZE_INCONSISTENT
message: |
- PixelSize need to be consistent with PhysicalSizeX, PhysicalSizeY and PhysicalSizeZ OME metadata fields
+ 'PixelSize' need to be consistent with the 'PhysicalSizeX', 'PhysicalSizeY' and 'PhysicalSizeZ'
+ OME metadata fields.
level: error
selectors:
- ome != null
diff --git a/src/schema/rules/checks/mri.yaml b/src/schema/rules/checks/mri.yaml
index 983ccd686e..8837f5faa9 100644
--- a/src/schema/rules/checks/mri.yaml
+++ b/src/schema/rules/checks/mri.yaml
@@ -3,8 +3,7 @@ PhasePartUnits:
issue:
code: PHASE_UNITS
message: |
- Phase images (with the `part-phase` entity) must have units
- "rad" or "arbitrary".
+ Phase images (with the `part-phase` entity) must have units "rad" or "arbitrary".
level: error
selectors:
- modality == "mri"
@@ -18,10 +17,10 @@ EchoTimeGreaterThan:
issue:
code: ECHO_TIME_GREATER_THAN
message: |
- 'EchoTime' is greater than 1 are you sure it's expressed in seconds?
+ 'EchoTime' is greater than 1. Are you sure it's expressed in seconds?
level: warning
selectors:
- - modality == "MRI"
+ - modality == "mri"
- sidecar.EchoTime
checks:
- sidecar.EchoTime <= 1
@@ -31,10 +30,10 @@ TotalReadoutTimeGreaterThan:
issue:
code: TOTAL_READOUT_TIME_GREATER_THAN
message: |
- 'TotalReadoutTime' is greater than 10 are you sure it's expressed in seconds?
+ 'TotalReadoutTime' is greater than 10. Are you sure it's expressed in seconds?
level: warning
selectors:
- - modality == "MRI"
+ - modality == "mri"
- sidecar.TotalReadoutTime
checks:
- sidecar.TotalReadoutTime <= 10
@@ -47,7 +46,7 @@ EffectiveEchoSpacingTooLarge:
Abnormally high value of 'EffectiveEchoSpacing'.
level: error
selectors:
- - modality == "MRI"
+ - modality == "mri"
- type(sidecar.RepetitionTime) != "null"
- type(sidecar.EffectiveEchoSpacing) != "null"
- type(sidecar.PhaseEncodingDirection) != "null"
@@ -64,11 +63,11 @@ SliceTimingElements:
issue:
code: SLICETIMING_ELEMENTS
message: |
- The number of elements in the SliceTiming array should match the 'k'
+ The number of elements in the 'SliceTiming' array should match the 'k'
dimension of the corresponding NIfTI volume.
level: warning
selectors:
- - modality == "MRI"
+ - modality == "mri"
- type(sidecar.SliceTiming) != "null"
- type(nifti_header) != "null"
checks:
@@ -79,10 +78,10 @@ EESGreaterThanTRT:
issue:
code: EFFECTIVEECHOSPACING_LARGER_THAN_TOTALREADOUTTIME
message: |
- EffectiveEchoSpacing should always be smaller than TotalReadoutTime.
+ 'EffectiveEchoSpacing' should always be smaller than 'TotalReadoutTime'.
level: error
selectors:
- - modality == "MRI"
+ - modality == "mri"
- sidecar.EffectiveEchoSpacing != null
- sidecar.TotalReadoutTime != null
checks:
@@ -96,7 +95,7 @@ VolumeTimingNotMonotonicallyIncreasing:
'VolumeTiming' is not monotonically increasing.
level: error
selectors:
- - modality == "MRI"
+ - modality == "mri"
- sidecar.VolumeTiming != null
checks:
- sorted(sidecar.VolumeTiming) == sidecar.VolumeTiming
@@ -109,7 +108,7 @@ BolusCutOffDelayTimeNotMonotonicallyIncreasing:
'BolusCutOffDelayTime' is not monotonically increasing.
level: error
selectors:
- - modality == "MRI"
+ - modality == "mri"
- sidecar.BolusCutoffDelayTime != null
checks:
- sorted(sidecar.BolusCutoffDelayTime) == sidecar.BolusCutoffDelayTime
@@ -123,7 +122,7 @@ RepetitionTimePreparationNotConsistent:
not match the 4th dimension of the NIfTI header.
level: error
selectors:
- - modality == "MRI"
+ - modality == "mri"
- type(sidecar.RepetitionTimePreparation) == "array"
- type(nifti_header) != "null"
checks:
diff --git a/src/schema/rules/checks/nifti.yaml b/src/schema/rules/checks/nifti.yaml
index 9fdae953cc..eb160f2047 100644
--- a/src/schema/rules/checks/nifti.yaml
+++ b/src/schema/rules/checks/nifti.yaml
@@ -4,7 +4,7 @@ NiftiDimension:
issue:
code: NIFTI_DIMENSION
message: |
- NIfTI file's header field for dimension information blank or too short.
+ NIfTI file's header field for dimension information is blank or too short.
level: warning
selectors:
- type(nifti_header) != "null"
@@ -17,7 +17,7 @@ NiftiUnit:
issue:
code: NIFTI_UNIT
message: |
- NIfTI file's header field for unit information for x, y, z, and t dimensions empty or too short
+ NIfTI file's header field for unit information for x, y, z, and t dimensions is empty or too short.
level: warning
selectors:
- type(nifti_header) != "null"
@@ -30,7 +30,7 @@ NiftiPixdim:
issue:
code: NIFTI_PIXDIM
message: |
- NIfTI file's header field for pixel dimension information empty or too short.
+ NIfTI file's header field for pixel dimension information is empty or too short.
level: warning
selectors:
- type(nifti_header) != "null"
diff --git a/src/schema/rules/checks/nirs.yaml b/src/schema/rules/checks/nirs.yaml
index db9299eb07..3ec07ce1d2 100644
--- a/src/schema/rules/checks/nirs.yaml
+++ b/src/schema/rules/checks/nirs.yaml
@@ -23,41 +23,49 @@ NIRSChannelCount:
ACCELChannelCountReq:
selectors:
- suffix == "nirs"
+ - count(associations.channels.type, "ACCEL") > 0
checks:
- sidecar.ACCELChannelCount == count(associations.channels.type, "ACCEL")
GYROChannelCountReq:
selectors:
- suffix == "nirs"
+ - count(associations.channels.type, "GYRO") > 0
checks:
- sidecar.GYROChannelCount == count(associations.channels.type, "GYRO")
MAGNChannelCountReq:
selectors:
- suffix == "nirs"
+ - count(associations.channels.type, "MAGN") > 0
checks:
- sidecar.MAGNChannelCount == count(associations.channels.type, "MAGN")
ShortChannelCountReq:
selectors:
- suffix == "nirs"
+ - '"ShortChannelCount" in sidecar'
checks:
- - sidecar.ShortChannelCount == count(associations.channels.short_channel, true)
+ - sidecar.ShortChannelCount == count(associations.channels.short_channel, "true")
Component:
selectors:
- datatype == "nirs"
- suffix == "channels"
- extension == ".tsv"
- - intersect(columns.type, ["ACCEL", "GYRO", "MAGN"])
+ - intersects(columns.type, ["ACCEL", "GYRO", "MAGN"])
checks:
- columns.component != null
-RequiredChannels:
+RecommendedChannels:
+ issue:
+ code: NIRS_RECOMMENDED_CHANNELS
+ message: |
+ NIRS files SHOULD have an associated channels.tsv file.
+ level: warning
selectors:
- - datatype == "nirs"
- - suffix == "optodes"
- - extension == ".tsv"
+ - suffix == "nirs"
+ - extension == ".snirf"
checks:
- associations.channels != null
@@ -66,7 +74,7 @@ RequiredTemplateX:
- datatype == "nirs"
- suffix == "optodes"
- extension == ".tsv"
- - intersect(columns.x, ["n/a"])
+ - intersects(columns.x, ["n/a"])
checks:
- columns.template_x != null
@@ -75,7 +83,7 @@ RequiredTemplateY:
- datatype == "nirs"
- suffix == "optodes"
- extension == ".tsv"
- - intersect(columns.y, ["n/a"])
+ - intersects(columns.y, ["n/a"])
checks:
- columns.template_y != null
@@ -84,7 +92,7 @@ RequiredTemplateZ:
- datatype == "nirs"
- suffix == "optodes"
- extension == ".tsv"
- - intersect(columns.z, ["n/a"])
+ - intersects(columns.z, ["n/a"])
checks:
- columns.template_z != null
diff --git a/src/schema/rules/checks/privacy.yaml b/src/schema/rules/checks/privacy.yaml
index dd58320c0a..c9e2ecf0cb 100644
--- a/src/schema/rules/checks/privacy.yaml
+++ b/src/schema/rules/checks/privacy.yaml
@@ -3,9 +3,8 @@ GzipHeaderFields:
issue:
code: GZIP_HEADER_DATA
message: |
- The gzip header contains a non-zero timestamp or a non-empty filename
- and/or comment field. These may leak sensitive information or indicate
- a non-reproducible conversion process.
+ The gzip header contains a non-zero timestamp or a non-empty filename and/or comment field.
+ These may leak sensitive information or indicate a non-reproducible conversion process.
level: warning
selectors:
- match(extension, ".gz$")
@@ -21,7 +20,7 @@ CheckAge89:
message: |
As per section 164.514(C) of "The De-identification Standard" under HIPAA guidelines,
participants with age 89 or higher should be tagged as 89+. More information can be found at
- https://www.hhs.gov/hipaa/for-professionals/privacy/special-topics/de-identification/#standard
+ https://www.hhs.gov/hipaa/for-professionals/privacy/special-topics/de-identification/#standard.
level: warning
selectors:
- path == 'participants.tsv'
diff --git a/src/schema/rules/directories.yaml b/src/schema/rules/directories.yaml
new file mode 100644
index 0000000000..db3db194fe
--- /dev/null
+++ b/src/schema/rules/directories.yaml
@@ -0,0 +1,112 @@
+---
+# This file defines layouts of directories.
+#
+# A layout defines a collection of directory specifiers.
+# Each specifier has a naming convention, requirement level, opacity, and subdirectories.
+#
+# Naming conventions may take three forms:
+# - name: The directory name has exactly this value.
+# - entity: The directory name takes the form of {key}-{value} for the specified entity
+# - value: The directory name takes the form of {value} for the specified term (like datatype)
+#
+# The requirement level indicates whether a directory MUST (required) or MAY (optional) exist.
+#
+# The opaque field indicates whether the contents of the directory are specified.
+#
+# The special "root" specifier describes the root of the dataset and only defines subdirectories.
+# No naming convention applies, and the requirement level and opacity would be superfluous.
+#
+raw:
+ root:
+ subdirs:
+ - code
+ - derivatives
+ - phenotype
+ - sourcedata
+ - stimuli
+ - subject
+ code:
+ name: code
+ level: optional
+ opaque: true
+ derivatives:
+ name: derivatives
+ level: optional
+ opaque: true
+ phenotype:
+ name: phenotype
+ level: optional
+ opaque: false
+ sourcedata:
+ name: sourcedata
+ level: optional
+ opaque: true
+ stimuli:
+ name: stimuli
+ level: optional
+ opaque: true
+ subject:
+ entity: subject
+ level: required
+ opaque: false
+ subdirs:
+ - oneOf:
+ - session
+ - datatype
+ session:
+ entity: session
+ level: optional
+ opaque: false
+ subdirs:
+ - datatype
+ datatype:
+ value: datatype
+ level: required
+ opaque: false
+
+derivative:
+ root:
+ subdirs:
+ - code
+ - derivatives
+ - phenotype
+ - sourcedata
+ - stimuli
+ - subject
+ code:
+ name: code
+ level: optional
+ opaque: true
+ derivatives:
+ name: derivatives
+ level: optional
+ opaque: true
+ phenotype:
+ name: phenotype
+ level: optional
+ opaque: false
+ sourcedata:
+ name: sourcedata
+ level: optional
+ opaque: true
+ stimuli:
+ name: stimuli
+ level: optional
+ opaque: true
+ subject:
+ entity: subject
+ level: optional
+ opaque: false
+ subdirs:
+ - session
+ - datatype
+ session:
+ entity: session
+ level: optional
+ opaque: false
+ subdirs:
+ - datatype
+ datatype:
+ value: datatype
+ level: optional
+ opaque: false
diff --git a/src/schema/rules/entities.yaml b/src/schema/rules/entities.yaml
index 09f240510b..2194a61a92 100644
--- a/src/schema/rules/entities.yaml
+++ b/src/schema/rules/entities.yaml
@@ -25,7 +25,7 @@
- split
- recording
- chunk
-- atlas
+- segmentation
- resolution
- density
- label
diff --git a/src/schema/rules/errors.yaml b/src/schema/rules/errors.yaml
index 8e60654c58..5c8fd069a1 100644
--- a/src/schema/rules/errors.yaml
+++ b/src/schema/rules/errors.yaml
@@ -45,24 +45,6 @@ GzNotGzipped:
selectors:
- match(extension, '\.gz$')
-# BIDS Validator Original Issue Code #30
-BvalMultipleRows:
- code: BVAL_MULTIPLE_ROWS
- message: |
- .bval files should contain exactly one row of volumes.
- level: error
- selectors:
- - extension == ".bval"
-
-# BIDS Validator Original Issue Code #31
-BvecNumberRows:
- code: BVEC_NUMBER_ROWS
- message: |
- .bvec files should contain exactly three rows of volumes.
- level: error
- selectors:
- - extension == ".bvec"
-
# BIDS Validator Original Issue Code #36
NiftiTooSmall:
code: NIFTI_TOO_SMALL
diff --git a/src/schema/rules/files/raw/anat.yaml b/src/schema/rules/files/raw/anat.yaml
index 3e026107f4..7a8a3234e6 100644
--- a/src/schema/rules/files/raw/anat.yaml
+++ b/src/schema/rules/files/raw/anat.yaml
@@ -29,6 +29,7 @@ nonparametric:
run: optional
echo: optional
part: optional
+ chunk: optional
parametric:
suffixes:
@@ -62,6 +63,7 @@ parametric:
ceagent: optional
reconstruction: optional
run: optional
+ chunk: optional
defacemask:
suffixes:
@@ -81,6 +83,7 @@ defacemask:
reconstruction: optional
run: optional
modality: optional
+ chunk: optional
multiecho:
suffixes:
@@ -102,6 +105,7 @@ multiecho:
run: optional
echo: required
part: optional
+ chunk: optional
multiflip:
suffixes:
@@ -123,6 +127,7 @@ multiflip:
echo: optional
flip: required
part: optional
+ chunk: optional
multiinversion:
suffixes:
@@ -143,6 +148,7 @@ multiinversion:
run: optional
inversion: required
part: optional
+ chunk: optional
mp2rage:
suffixes:
@@ -165,6 +171,7 @@ mp2rage:
flip: optional
inversion: required
part: optional
+ chunk: optional
vfamt:
suffixes:
@@ -188,6 +195,7 @@ vfamt:
flip: required
mtransfer: required
part: optional
+ chunk: optional
mtr:
suffixes:
@@ -208,3 +216,4 @@ mtr:
run: optional
mtransfer: required
part: optional
+ chunk: optional
diff --git a/src/schema/rules/files/raw/dwi.yaml b/src/schema/rules/files/raw/dwi.yaml
index 98840ef6a1..22b224b023 100644
--- a/src/schema/rules/files/raw/dwi.yaml
+++ b/src/schema/rules/files/raw/dwi.yaml
@@ -18,6 +18,7 @@ dwi:
direction: optional
run: optional
part: optional
+ chunk: optional
sbref:
suffixes:
@@ -36,3 +37,4 @@ sbref:
direction: optional
run: optional
part: optional
+ chunk: optional
diff --git a/src/schema/rules/files/raw/fmap.yaml b/src/schema/rules/files/raw/fmap.yaml
index 8f5e66a508..056ed1d67e 100644
--- a/src/schema/rules/files/raw/fmap.yaml
+++ b/src/schema/rules/files/raw/fmap.yaml
@@ -19,6 +19,7 @@ fieldmaps:
session: optional
acquisition: optional
run: optional
+ chunk: optional
pepolar:
suffixes:
@@ -37,6 +38,8 @@ pepolar:
ceagent: optional
direction: required
run: optional
+ part: optional
+ chunk: optional
TB1DAM:
suffixes:
@@ -57,6 +60,7 @@ TB1DAM:
flip: required
inversion: optional
part: optional
+ chunk: optional
TB1EPI:
suffixes:
@@ -78,6 +82,7 @@ TB1EPI:
flip: required
inversion: optional
part: optional
+ chunk: optional
RFFieldMaps:
suffixes:
@@ -102,6 +107,7 @@ RFFieldMaps:
flip: optional
inversion: optional
part: optional
+ chunk: optional
TB1SRGE:
suffixes:
@@ -123,6 +129,7 @@ TB1SRGE:
flip: required
inversion: required
part: optional
+ chunk: optional
parametric:
suffixes:
@@ -141,3 +148,4 @@ parametric:
ceagent: optional
reconstruction: optional
run: optional
+ chunk: optional
diff --git a/src/schema/rules/files/raw/func.yaml b/src/schema/rules/files/raw/func.yaml
index 589d187444..5e2c42b813 100644
--- a/src/schema/rules/files/raw/func.yaml
+++ b/src/schema/rules/files/raw/func.yaml
@@ -21,6 +21,7 @@ func:
run: optional
echo: optional
part: optional
+ chunk: optional
phase:
suffixes:
@@ -41,3 +42,4 @@ phase:
direction: optional
run: optional
echo: optional
+ chunk: optional
diff --git a/src/schema/rules/files/raw/meg.yaml b/src/schema/rules/files/raw/meg.yaml
index 4bf7a42549..a25ed56646 100644
--- a/src/schema/rules/files/raw/meg.yaml
+++ b/src/schema/rules/files/raw/meg.yaml
@@ -39,9 +39,8 @@ calibration:
session: optional
acquisition:
level: required
- # TODO: Add definitions for these values.
enum:
- - calibration
+ - $ref: objects.enums.calibration.value
crosstalk:
suffixes:
@@ -55,9 +54,8 @@ crosstalk:
session: optional
acquisition:
level: required
- # TODO: Add definitions for these values.
enum:
- - crosstalk
+ - $ref: objects.enums.crosstalk.value
headshape:
suffixes:
diff --git a/src/schema/rules/files/raw/micr.yaml b/src/schema/rules/files/raw/micr.yaml
index aba1b48352..52d1adb74f 100644
--- a/src/schema/rules/files/raw/micr.yaml
+++ b/src/schema/rules/files/raw/micr.yaml
@@ -18,6 +18,7 @@ microscopy:
- NLO
- OCT
- SPIM
+ - hipCT
extensions:
- .ome.tif
- .ome.btf
diff --git a/src/schema/rules/files/raw/task.yaml b/src/schema/rules/files/raw/task.yaml
index cda1e45dec..b7171e568f 100644
--- a/src/schema/rules/files/raw/task.yaml
+++ b/src/schema/rules/files/raw/task.yaml
@@ -38,6 +38,25 @@ timeseries:
run: optional
recording: optional
+timeseries__mri_no_task:
+ suffixes:
+ - physio
+ - stim
+ extensions:
+ - .tsv.gz
+ - .json
+ datatypes:
+ - dwi
+ - perf
+ entities:
+ subject: required
+ session: optional
+ acquisition: optional
+ run: optional
+ reconstruction: optional
+ direction: optional
+ recording: optional
+
# Specializations
# In these rules, we use $ref to retrieve most of an object, and then override
@@ -72,23 +91,15 @@ events__pet:
reconstruction: optional
run: optional
-timeseries__mri:
- $ref: rules.files.raw.task.timeseries
- datatypes:
- - dwi
- - perf
- entities:
- $ref: rules.files.raw.task.timeseries.entities
- reconstruction: optional
- direction: optional
-
timeseries__func:
$ref: rules.files.raw.task.timeseries
datatypes:
- func
entities:
- $ref: rules.files.raw.task.timeseries__mri.entities
+ $ref: rules.files.raw.task.timeseries.entities
ceagent: optional
+ reconstruction: optional
+ direction: optional
timeseries__meg:
$ref: rules.files.raw.task.timeseries
diff --git a/src/schema/rules/sidecars/anat.yaml b/src/schema/rules/sidecars/anat.yaml
index 0bd1527d80..70a18cae3a 100644
--- a/src/schema/rules/sidecars/anat.yaml
+++ b/src/schema/rules/sidecars/anat.yaml
@@ -9,33 +9,18 @@
MRIAnatomyCommonMetadataFields:
selectors:
- - modality == "mri"
- datatype == "anat"
+ - match(extension, "^\.nii(\.gz)?$")
fields:
ContrastBolusIngredient: optional
RepetitionTimeExcitation: optional
RepetitionTimePreparation: optional
-PhaseEntityUnits:
- selectors:
- - modality == "mri"
- - datatype == "anat"
- - entities.part == "phase"
- fields:
- Units: required
-
-PhaseSuffixUnits:
- selectors:
- - modality == "mri"
- - datatype == "anat"
- - suffix == "phase"
- fields:
- Units: required
-
TaskMetadata:
selectors:
- datatype == "anat"
- entity.task != null
+ - match(extension, "^\.nii(\.gz)?$")
fields:
TaskName:
level: recommended
diff --git a/src/schema/rules/sidecars/asl.yaml b/src/schema/rules/sidecars/asl.yaml
index f0b91e10d4..ab540b537c 100644
--- a/src/schema/rules/sidecars/asl.yaml
+++ b/src/schema/rules/sidecars/asl.yaml
@@ -8,7 +8,6 @@
# Fields described in text, but not in tables
MRIASLTextOnly:
selectors:
- - modality == "mri"
- datatype == "perf"
- intersects([suffix], ["asl", "m0scan"])
fields:
@@ -17,7 +16,6 @@ MRIASLTextOnly:
# Common metadata fields applicable to both (P)CASL and PASL
MRIASLCommonMetadataFields:
selectors:
- - modality == "mri"
- datatype == "perf"
- suffix == "asl"
fields:
@@ -36,7 +34,6 @@ MRIASLCommonMetadataFields:
MRIASLCommonMetadataFieldsM0TypeRec:
selectors:
- - modality == "mri"
- datatype == "perf"
- suffix == "asl"
- sidecar.M0Type != "Estimate"
@@ -47,7 +44,6 @@ MRIASLCommonMetadataFieldsM0TypeRec:
MRIASLCommonMetadataFieldsM0TypeReq:
selectors:
- - modality == "mri"
- datatype == "perf"
- suffix == "asl"
- sidecar.M0Type == "Estimate"
@@ -64,7 +60,6 @@ MRIASLCommonMetadataFieldsM0TypeReq:
MRIASLCommonMetadataFieldsBackgroundSuppressionOpt:
selectors:
- - modality == "mri"
- datatype == "perf"
- suffix == "asl"
- sidecar.BackgroundSuppression == false
@@ -78,7 +73,6 @@ MRIASLCommonMetadataFieldsBackgroundSuppressionOpt:
MRIASLCommonMetadataFieldsBackgroundSuppressionReq:
selectors:
- - modality == "mri"
- datatype == "perf"
- suffix == "asl"
- sidecar.BackgroundSuppression == true
@@ -88,7 +82,6 @@ MRIASLCommonMetadataFieldsBackgroundSuppressionReq:
MRIASLCommonMetadataFieldsVascularCrushingOpt:
selectors:
- - modality == "mri"
- datatype == "perf"
- suffix == "asl"
- sidecar.VascularCrushing == false
@@ -99,7 +92,6 @@ MRIASLCommonMetadataFieldsVascularCrushingOpt:
MRIASLCommonMetadataFieldsVascularCrushingRec:
selectors:
- - modality == "mri"
- datatype == "perf"
- suffix == "asl"
- sidecar.VascularCrushing == true
@@ -108,7 +100,6 @@ MRIASLCommonMetadataFieldsVascularCrushingRec:
MRIASLCaslPcaslSpecific:
selectors:
- - modality == "mri"
- datatype == "perf"
- suffix == "asl"
- intersects([sidecar.ArterialSpinLabelingType], ["CASL", "PCASL"])
@@ -123,7 +114,6 @@ MRIASLCaslPcaslSpecific:
MRIASLPcaslSpecific:
selectors:
- - modality == "mri"
- datatype == "perf"
- suffix == "asl"
- sidecar.ArterialSpinLabelingType == "PCASL"
@@ -134,7 +124,6 @@ MRIASLPcaslSpecific:
MRIASLCaslSpecific:
selectors:
- - modality == "mri"
- datatype == "perf"
- suffix == "asl"
- sidecar.ArterialSpinLabelingType == "CASL"
@@ -145,7 +134,6 @@ MRIASLCaslSpecific:
MRIASLPaslSpecific:
selectors:
- - modality == "mri"
- datatype == "perf"
- suffix == "asl"
- sidecar.ArterialSpinLabelingType == "PASL"
@@ -156,7 +144,6 @@ MRIASLPaslSpecific:
MRIASLPASLSpecificBolusCutOffFlagFalse:
selectors:
- - modality == "mri"
- datatype == "perf"
- suffix == "asl"
- sidecar.ArterialSpinLabelingType == "PASL"
@@ -171,7 +158,6 @@ MRIASLPASLSpecificBolusCutOffFlagFalse:
MRIASLPaslSpecificBolusCutOffFlagTrue:
selectors:
- - modality == "mri"
- datatype == "perf"
- suffix == "asl"
- sidecar.ArterialSpinLabelingType == "PASL"
@@ -205,7 +191,6 @@ MRIASLPaslSpecificBolusCutOffFlagTrue:
# m0scan metadata fields
MRIASLM0Scan:
selectors:
- - modality == "mri"
- datatype == "perf"
- suffix == "m0scan"
fields:
diff --git a/src/schema/rules/sidecars/continuous.yaml b/src/schema/rules/sidecars/continuous.yaml
index 2e74912f4f..3023427138 100644
--- a/src/schema/rules/sidecars/continuous.yaml
+++ b/src/schema/rules/sidecars/continuous.yaml
@@ -15,7 +15,7 @@ Continuous:
Columns: required
# Other recommended metadata for physiological data
-Physio:
+PhysioHardware:
selectors:
- suffix == "physio"
fields:
diff --git a/src/schema/rules/sidecars/derivatives/common_derivatives.yaml b/src/schema/rules/sidecars/derivatives/common_derivatives.yaml
index 5982b2e01d..fbc05937bc 100644
--- a/src/schema/rules/sidecars/derivatives/common_derivatives.yaml
+++ b/src/schema/rules/sidecars/derivatives/common_derivatives.yaml
@@ -38,16 +38,6 @@ MaskDerivatives:
Sources: recommended
RawSources: deprecated
-MaskDerivativesAtlas:
- selectors:
- - dataset.dataset_description.DatasetType == "derivative"
- - suffix == "mask"
- - '"label" in entities'
- fields:
- Atlas:
- level: recommended
- level_addendum: if `label` entity is defined
-
SegmentationCommon:
selectors:
- dataset.dataset_description.DatasetType == "derivative"
@@ -55,16 +45,6 @@ SegmentationCommon:
fields:
Manual: optional
-SegmentationCommonAtlas:
- selectors:
- - dataset.dataset_description.DatasetType == "derivative"
- - 'intersects([suffix], ["dseg", "probseg"])'
- - '"atlas" in entities'
- fields:
- Atlas:
- level: recommended
- level_addendum: if `atlas` is present
-
# Derivatives -> Imaging data types
ImageDerivatives:
selectors:
diff --git a/src/schema/rules/sidecars/dwi.yaml b/src/schema/rules/sidecars/dwi.yaml
index 381f5db039..51ae4b336a 100644
--- a/src/schema/rules/sidecars/dwi.yaml
+++ b/src/schema/rules/sidecars/dwi.yaml
@@ -3,16 +3,18 @@
# NOTE: I don't think this can be schemafied, since it depends on owner intent.
MRIDiffusionMultipart:
selectors:
- - modality == "mri"
- datatype == "dwi"
+ - suffix == "dwi"
+ - match(extension, "^\.nii(\.gz)?$")
fields:
MultipartID: optional
# Other recommended metadata
MRIDiffusionOtherMetadata:
selectors:
- - modality == "mri"
- datatype == "dwi"
+ - suffix == "dwi"
+ - match(extension, "^\.nii(\.gz)?$")
fields:
PhaseEncodingDirection: recommended
TotalReadoutTime: recommended
diff --git a/src/schema/rules/sidecars/eeg.yaml b/src/schema/rules/sidecars/eeg.yaml
index 793bd38000..7a7252d69b 100644
--- a/src/schema/rules/sidecars/eeg.yaml
+++ b/src/schema/rules/sidecars/eeg.yaml
@@ -7,7 +7,6 @@
---
EEGHardware:
selectors:
- - modality == "eeg"
- datatype == "eeg"
- suffix == "eeg"
fields:
@@ -18,7 +17,6 @@ EEGHardware:
EEGTaskInformation:
selectors:
- - modality == "eeg"
- datatype == "eeg"
- suffix == "eeg"
fields:
@@ -38,7 +36,6 @@ EEGTaskInformation:
EEGInstitutionInformation:
selectors:
- - modality == "eeg"
- datatype == "eeg"
- suffix == "eeg"
fields:
@@ -46,9 +43,9 @@ EEGInstitutionInformation:
InstitutionAddress: recommended
InstitutionalDepartmentName: recommended
+# Specific EEG fields MUST be present
EEGRequired:
selectors:
- - modality == "eeg"
- datatype == "eeg"
- suffix == "eeg"
fields:
@@ -61,9 +58,9 @@ EEGRequired:
PowerLineFrequency: required
SoftwareFilters: required
+# Specific EEG fields SHOULD be present
EEGRecommended:
selectors:
- - modality == "eeg"
- datatype == "eeg"
- suffix == "eeg"
fields:
@@ -84,10 +81,18 @@ EEGRecommended:
HardwareFilters: recommended
SubjectArtefactDescription: recommended
+# Specific EEG fields MAY be present
+EEGOptional:
+ selectors:
+ - datatype == "eeg"
+ - suffix == "eeg"
+ fields:
+ ElectricalStimulation: optional
+ ElectricalStimulationParameters: optional
+
# General fields
EEGCoordsystemGeneral:
selectors:
- - modality == "eeg"
- datatype == "eeg"
- suffix == "coordsystem"
fields:
@@ -100,7 +105,6 @@ EEGCoordsystemGeneral:
# Fields relating to the EEG electrode positions
EEGCoordsystemPositions:
selectors:
- - modality == "eeg"
- datatype == "eeg"
- suffix == "coordsystem"
fields:
@@ -112,7 +116,6 @@ EEGCoordsystemPositions:
EEGCoordsystemOther:
selectors:
- - modality == "eeg"
- datatype == "eeg"
- suffix == "coordsystem"
- '"EEGCoordinateSystem" in sidecar'
@@ -123,7 +126,6 @@ EEGCoordsystemOther:
# Fields relating to the position of fiducials measured during an EEG session/run
EEGCoordsystemFiducials:
selectors:
- - modality == "eeg"
- datatype == "eeg"
- suffix == "coordsystem"
fields:
@@ -137,7 +139,6 @@ EEGCoordsystemFiducials:
EEGCoordsystemOtherFiducialCoordinateSystem:
selectors:
- - modality == "eeg"
- datatype == "eeg"
- suffix == "coordsystem"
- sidecar.FiducialsCoordinateSystem == "Other"
@@ -147,7 +148,6 @@ EEGCoordsystemOtherFiducialCoordinateSystem:
# Fields relating to the position of anatomical landmark measured during an EEG session/run
EEGCoordsystemLandmark:
selectors:
- - modality == "eeg"
- datatype == "eeg"
- suffix == "coordsystem"
fields:
@@ -159,7 +159,6 @@ EEGCoordsystemLandmark:
EEGCoordsystemLandmarkDescriptionRec:
selectors:
- - modality == "eeg"
- datatype == "eeg"
- suffix == "coordsystem"
- sidecar.AnatomicalLandmarkCoordinateSystem != "Other"
@@ -170,7 +169,6 @@ EEGCoordsystemLandmarkDescriptionRec:
EEGCoordsystemLandmarkDescriptionReq:
selectors:
- - modality == "eeg"
- datatype == "eeg"
- suffix == "coordsystem"
- sidecar.AnatomicalLandmarkCoordinateSystem == "Other"
diff --git a/src/schema/rules/sidecars/entity_rules.yaml b/src/schema/rules/sidecars/entity_rules.yaml
index 5b415d59a6..be8f5603af 100644
--- a/src/schema/rules/sidecars/entity_rules.yaml
+++ b/src/schema/rules/sidecars/entity_rules.yaml
@@ -19,12 +19,6 @@ EntitiesCeMetadata:
fields:
ContrastBolusIngredient: optional
-EntitiesTrcMetadata:
- selectors:
- - '"trc" in entities'
- fields:
- TracerName: required
-
EntitiesStainMetadata:
selectors:
- '"stain" in entities'
diff --git a/src/schema/rules/sidecars/fmap.yaml b/src/schema/rules/sidecars/fmap.yaml
index adcc2ac692..c642394764 100644
--- a/src/schema/rules/sidecars/fmap.yaml
+++ b/src/schema/rules/sidecars/fmap.yaml
@@ -6,17 +6,10 @@
---
# Fieldmap data
-MRIFieldmapB0FieldIdentifier:
- selectors:
- - modality == "mri"
- - datatype == "fmap"
- fields:
- B0FieldIdentifier: recommended
-
MRIFieldmapIntendedFor:
selectors:
- - modality == "mri"
- datatype == "fmap"
+ - match(extension, '\.nii(\.gz)?$')
fields:
IntendedFor:
level: optional
@@ -24,12 +17,20 @@ MRIFieldmapIntendedFor:
This field is optional, and in case the fieldmaps do not correspond
to any particular scans, it does not have to be filled.
+MRIFieldmapB0FieldIdentifier:
+ selectors:
+ - datatype == "fmap"
+ - match(extension, '\.nii(\.gz)?$')
+ - '!("IntendedFor" in sidecar)'
+ fields:
+ B0FieldIdentifier: recommended
+
# Case 1: Phase-difference map and at least one magnitude image
MRIFieldmapPhaseDifferencePhasediff:
selectors:
- - modality == "mri"
- datatype == "fmap"
- suffix == "phasediff"
+ - match(extension, '\.nii(\.gz)?$')
fields:
EchoTime1: required
EchoTime2: required
@@ -40,18 +41,18 @@ MRIFieldmapPhaseDifferencePhasediff:
# but EchoTime1 if phasediff exists.
MRIFieldmapTwoPhase:
selectors:
- - modality == "mri"
- datatype == "fmap"
- intersects([suffix], ["phase1", "phase2"])
+ - match(extension, '\.nii(\.gz)?$')
fields:
EchoTime__fmap: required
# Case 3: Direct field mapping
MRIFieldmapDirectFieldMapping:
selectors:
- - modality == "mri"
- datatype == "fmap"
- suffix == "fieldmap"
+ - match(extension, '\.nii(\.gz)?$')
fields:
Units:
level: required
@@ -62,9 +63,9 @@ MRIFieldmapDirectFieldMapping:
# Case 4: Multiple phase encoded directions ("pepolar")
MRIFieldmapPepolar:
selectors:
- - modality == "mri"
- datatype == "fmap"
- suffix == "epi"
+ - match(extension, '\.nii(\.gz)?$')
fields:
PhaseEncodingDirection: required
TotalReadoutTime: required
diff --git a/src/schema/rules/sidecars/func.yaml b/src/schema/rules/sidecars/func.yaml
index 25dd418709..f3b7e70b69 100644
--- a/src/schema/rules/sidecars/func.yaml
+++ b/src/schema/rules/sidecars/func.yaml
@@ -77,3 +77,12 @@ MRIFuncTaskInformation:
TaskDescription: recommended
CogAtlasID: recommended
CogPOID: recommended
+
+# Should now be `part-phase_bold.nii`, but still require units
+PhaseSuffixUnits:
+ selectors:
+ - datatype == "func"
+ - suffix == "phase"
+ - match(extension, "^\.nii(\.gz)?$")
+ fields:
+ Units: required
diff --git a/src/schema/rules/sidecars/ieeg.yaml b/src/schema/rules/sidecars/ieeg.yaml
index 799931e4f3..066e17a8bf 100644
--- a/src/schema/rules/sidecars/ieeg.yaml
+++ b/src/schema/rules/sidecars/ieeg.yaml
@@ -7,7 +7,6 @@
---
iEEGHardware:
selectors:
- - modality == "ieeg"
- datatype == "ieeg"
- suffix == "ieeg"
fields:
@@ -20,7 +19,6 @@ iEEGHardware:
iEEGTaskInformation:
selectors:
- - modality == "ieeg"
- datatype == "ieeg"
- suffix == "ieeg"
fields:
@@ -40,7 +38,6 @@ iEEGTaskInformation:
iEEGInstitutionInformation:
selectors:
- - modality == "ieeg"
- datatype == "ieeg"
- suffix == "ieeg"
fields:
@@ -51,7 +48,6 @@ iEEGInstitutionInformation:
# Specific iEEG fields MUST be present
iEEGRequired:
selectors:
- - modality == "ieeg"
- datatype == "ieeg"
- suffix == "ieeg"
fields:
@@ -67,7 +63,6 @@ iEEGRequired:
# Specific iEEG fields SHOULD be present
iEEGRecommended:
selectors:
- - modality == "ieeg"
- datatype == "ieeg"
- suffix == "ieeg"
fields:
@@ -94,7 +89,6 @@ iEEGRecommended:
# Specific iEEG fields MAY be present
iEEGOptional:
selectors:
- - modality == "ieeg"
- datatype == "ieeg"
- suffix == "ieeg"
fields:
@@ -104,7 +98,6 @@ iEEGOptional:
# General fields
iEEGCoordsystemGeneral:
selectors:
- - modality == "ieeg"
- datatype == "ieeg"
- suffix == "coordsystem"
fields:
@@ -126,7 +119,6 @@ iEEGCoordsystemGeneral:
# Fields relating to the iEEG electrode positions
iEEGCoordsystemPositions:
selectors:
- - modality == "ieeg"
- datatype == "ieeg"
- suffix == "coordsystem"
fields:
@@ -140,7 +132,6 @@ iEEGCoordsystemPositions:
iEEGCoordsystemOther:
selectors:
- - modality == "ieeg"
- datatype == "ieeg"
- suffix == "coordsystem"
- '"iEEGCoordinateSystem" in sidecar'
diff --git a/src/schema/rules/sidecars/meg.yaml b/src/schema/rules/sidecars/meg.yaml
index ed9346b9f5..a989d40f9f 100644
--- a/src/schema/rules/sidecars/meg.yaml
+++ b/src/schema/rules/sidecars/meg.yaml
@@ -6,12 +6,14 @@
---
# Magnetoencephalography
+#
+# Note: "task" in entities identifies MEG data files and excludes calibration/crosstalk scans
# Sidecar JSON (*_meg.json)
MEGHardware:
selectors:
- - modality == "meg"
- datatype == "meg"
+ - '"task" in entities'
- suffix == "meg"
fields:
Manufacturer:
@@ -32,8 +34,8 @@ MEGHardware:
MEGTaskInformation:
selectors:
- - modality == "meg"
- datatype == "meg"
+ - '"task" in entities'
- suffix == "meg"
fields:
TaskName:
@@ -52,8 +54,8 @@ MEGTaskInformation:
MEGInstitutionInformation:
selectors:
- - modality == "meg"
- datatype == "meg"
+ - '"task" in entities'
- suffix == "meg"
fields:
InstitutionName: recommended
@@ -63,8 +65,8 @@ MEGInstitutionInformation:
# Specific MEG fields MUST be present
MEGRequired:
selectors:
- - modality == "meg"
- datatype == "meg"
+ - '"task" in entities'
- suffix == "meg"
fields:
SamplingFrequency:
@@ -81,8 +83,8 @@ MEGRequired:
# Specific MEG fields SHOULD be present
MEGRecommended:
selectors:
- - modality == "meg"
- datatype == "meg"
+ - '"task" in entities'
- suffix == "meg"
fields:
MEGChannelCount: recommended
@@ -105,11 +107,19 @@ MEGRecommended:
AssociatedEmptyRoom: recommended
HardwareFilters: recommended
+# Specific MEG fields MAY be present
+MEGOptional:
+ selectors:
+ - datatype == "meg"
+ - suffix == "meg"
+ fields:
+ ElectricalStimulation: optional
+ ElectricalStimulationParameters: optional
+
# Specific EEG fields
# NOTE: I'm not sure if "EEG is present" is enough to indicate simultaneous EEG/MEG.
MEGwithEEG:
selectors:
- - modality == "meg"
- datatype == "meg"
- suffix == "meg"
- intersects(dataset.modalities, ["eeg"])
@@ -122,7 +132,6 @@ MEGwithEEG:
# MEG and EEG sensors
MEGCoordsystemWithEEG:
selectors:
- - modality == "meg"
- datatype == "meg"
- suffix == "coordsystem"
fields:
@@ -148,7 +157,6 @@ MEGCoordsystemWithEEG:
# NOTE: The JSON isn't really a sidecar, so "sidecar.MEGCoordinateSystem" is misleading.
MEGCoordsystemWithEEGMEGCoordinateSystem:
selectors:
- - modality == "meg"
- datatype == "meg"
- suffix == "coordsystem"
- '"MEGCoordinateSystem" in sidecar'
@@ -159,7 +167,6 @@ MEGCoordsystemWithEEGMEGCoordinateSystem:
# NOTE: Not sure if this requires simult. EEG
MEGCoordsystemWithEEGEEGCoordinateSystem:
selectors:
- - modality == "meg"
- datatype == "meg"
- suffix == "coordsystem"
- '"EEGCoordinateSystem" in sidecar'
@@ -170,7 +177,6 @@ MEGCoordsystemWithEEGEEGCoordinateSystem:
# Head localization coils
MEGCoordsystemHeadLocalizationCoils:
selectors:
- - modality == "meg"
- datatype == "meg"
- suffix == "coordsystem"
fields:
@@ -183,7 +189,6 @@ MEGCoordsystemHeadLocalizationCoils:
MEGCoordsystemHeadLocalizationCoilsHeadCoilCoordinateSystem:
selectors:
- - modality == "meg"
- datatype == "meg"
- suffix == "coordsystem"
- '"HeadCoilCoordinateSystem" in sidecar'
@@ -194,7 +199,6 @@ MEGCoordsystemHeadLocalizationCoilsHeadCoilCoordinateSystem:
# Digitized head points
MEGCoordsystemDigitizedHeadPoints:
selectors:
- - modality == "meg"
- datatype == "meg"
- suffix == "coordsystem"
fields:
@@ -207,7 +211,6 @@ MEGCoordsystemDigitizedHeadPoints:
MEGCoordsystemDigitizedHeadPointsDigitizedHeadPointsCoordinateSystem:
selectors:
- - modality == "meg"
- datatype == "meg"
- suffix == "coordsystem"
- '"DigitizedHeadPointsCoordinateSystem" in sidecar'
@@ -218,7 +221,6 @@ MEGCoordsystemDigitizedHeadPointsDigitizedHeadPointsCoordinateSystem:
# Anatomical MRI
MEGCoordsystemAnatomicalMRI:
selectors:
- - modality == "meg"
- datatype == "meg"
- suffix == "coordsystem"
- intersects(dataset.datatypes, ["anat"])
@@ -233,7 +235,6 @@ MEGCoordsystemAnatomicalMRI:
# Anatomical landmarks
MEGCoordsystemAnatomicalLandmarks:
selectors:
- - modality == "meg"
- datatype == "meg"
- suffix == "coordsystem"
fields:
@@ -249,7 +250,6 @@ MEGCoordsystemAnatomicalLandmarks:
MEGCoordsystemAnatomicalLandmarksAnatomicalLandmarkCoordinateSystem:
selectors:
- - modality == "meg"
- datatype == "meg"
- suffix == "coordsystem"
- '"AnatomicalLandmarkCoordinateSystem" in sidecar'
@@ -260,7 +260,6 @@ MEGCoordsystemAnatomicalLandmarksAnatomicalLandmarkCoordinateSystem:
# Fiducials information
MEGCoordsystemFiducialsInformation:
selectors:
- - modality == "meg"
- datatype == "meg"
- suffix == "coordsystem"
fields:
diff --git a/src/schema/rules/sidecars/micr.yaml b/src/schema/rules/sidecars/micr.yaml
index 1834e669c2..f2f490953f 100644
--- a/src/schema/rules/sidecars/micr.yaml
+++ b/src/schema/rules/sidecars/micr.yaml
@@ -8,7 +8,6 @@
# Device Hardware
MicroscopyHardware:
selectors:
- - modality == "micr"
- datatype == "micr"
- suffix != "photo"
fields:
@@ -20,8 +19,8 @@ MicroscopyHardware:
MicroscopyInstitutionInformation:
selectors:
- - modality == "micr"
- datatype == "micr"
+ - suffix != "photo"
fields:
InstitutionName: recommended
InstitutionAddress: recommended
@@ -30,7 +29,6 @@ MicroscopyInstitutionInformation:
# Image Acquisition
MicroscopyImageAcquisition:
selectors:
- - modality == "micr"
- datatype == "micr"
- suffix != "photo"
fields:
@@ -45,7 +43,6 @@ MicroscopyImageAcquisition:
# Sample
MicroscopySample:
selectors:
- - modality == "micr"
- datatype == "micr"
- suffix != "photo"
fields:
@@ -53,7 +50,7 @@ MicroscopySample:
level: recommended
description_addendum: |
From [DICOM Body Part
- Examined](http://dicom.nema.org/medical/dicom/current/output/chtml/part16/chapter_L.html#chapter_L)
+ Examined](https://dicom.nema.org/medical/dicom/current/output/chtml/part16/chapter_L.html#chapter_L)
(for example `"BRAIN"`).
BodyPartDetails: recommended
BodyPartDetailsOntology: optional
@@ -71,7 +68,6 @@ MicroscopySample:
# Chunk Transformations
MicroscopyChunkTransformations:
selectors:
- - modality == "micr"
- datatype == "micr"
- suffix != "photo"
- '"chunk" in entities'
@@ -82,7 +78,6 @@ MicroscopyChunkTransformations:
MicroscopyChunkTransformationsMatrixAxis:
selectors:
- - modality == "micr"
- datatype == "micr"
- suffix != "photo"
- '"chunk" in entities'
@@ -94,7 +89,7 @@ MicroscopyChunkTransformationsMatrixAxis:
Photo:
selectors:
- - modality == "micr"
+ - datatype == "micr"
- suffix == "photo"
fields:
PhotoDescription: optional
diff --git a/src/schema/rules/sidecars/motion.yaml b/src/schema/rules/sidecars/motion.yaml
index 981e0b3ad7..2a3630f7e7 100644
--- a/src/schema/rules/sidecars/motion.yaml
+++ b/src/schema/rules/sidecars/motion.yaml
@@ -7,7 +7,6 @@
---
motionHardware:
selectors:
- - modality == "motion"
- datatype == "motion"
- suffix == "motion"
fields:
@@ -18,7 +17,6 @@ motionHardware:
motionInstitutionInformation:
selectors:
- - modality == "motion"
- datatype == "motion"
- suffix == "motion"
fields:
@@ -28,7 +26,6 @@ motionInstitutionInformation:
motionTaskInformation:
selectors:
- - modality == "motion"
- datatype == "motion"
- suffix == "motion"
fields:
@@ -42,7 +39,6 @@ motionTaskInformation:
motionRequired:
selectors:
- - modality == "motion"
- datatype == "motion"
- suffix == "motion"
fields:
@@ -56,7 +52,6 @@ motionRequired:
motionRecommended:
selectors:
- - modality == "motion"
- datatype == "motion"
- suffix == "motion"
fields:
@@ -71,13 +66,10 @@ motionRecommended:
MotionChannelCount: recommended
ORNTChannelCount: recommended
POSChannelCount: recommended
- RotationOrder: recommended
- RotationRule: recommended
SamplingFrequencyEffective:
level: recommended
description_addendum: |
If not available, the field takes value `n/a`.
- SpatialAxes: recommended
SubjectArtefactDescription: recommended
TrackedPointsCount: recommended
TrackingSystemName: optional
diff --git a/src/schema/rules/sidecars/mri.yaml b/src/schema/rules/sidecars/mri.yaml
index 0aa865ebf1..b937898b3d 100644
--- a/src/schema/rules/sidecars/mri.yaml
+++ b/src/schema/rules/sidecars/mri.yaml
@@ -37,6 +37,16 @@ MRIHardware:
CoilCombinationMethod: recommended
NumberTransmitCoilActiveElements: optional
+MRISample:
+ selectors:
+ - modality == "mri"
+ fields:
+ BodyPart:
+ level: optional
+ description_addendum: Corresponds to DICOM Tag 0018, 0015 `Body Part Examined`.
+ BodyPartDetails: optional
+ BodyPartDetailsOntology: optional
+
MRIScannerHardwareASL:
selectors:
- datatype == "perf"
@@ -83,7 +93,6 @@ PETMRISequenceSpecifics:
ASLMRISequenceSpecifics:
selectors:
- - modality == "mri"
- datatype == "perf"
- suffix == "asl"
fields:
@@ -152,6 +161,7 @@ PhaseEncodingDirectionRec:
acquired with opposing phase encoding directions are present
(see [Case 4: Multiple phase encoded
directions](#case-4-multiple-phase-encoded-directions-pepolar))
+
PhaseEncodingDirectionReq:
selectors:
- modality == "mri"
@@ -193,17 +203,22 @@ MRITimingParameters:
should only be used when the volume timing is critical for interpretation
of the data, such as in ASL or variable echo time fMRI sequences.
InversionTime: recommended
+ DwellTime: recommended
+
+SliceTimingMRI:
+ selectors:
+ - modality == "mri"
+ - sidecar.MRAcquisitionType == "2D"
+ fields:
SliceTiming:
level: recommended
level_addendum: |
required for sparse sequences that do not have the `DelayTime` field set,
and Arterial Spin Labeling with `MRAcquisitionType` set on `2D`.
SliceEncodingDirection: recommended
- DwellTime: recommended
SliceTimingASL:
selectors:
- - modality == "mri"
- datatype == "perf"
- intersects([suffix], ["asl", "m0scan"])
- sidecar.MRAcquisitionType == "2D"
@@ -214,7 +229,7 @@ SliceTimingASL:
issue:
code: SLICE_TIMING_NOT_DEFINED_2D_ASL
message: |
- You should define `SliceTiming` for this file, because `SequenceType` is sets
+ You should define `SliceTiming` for this file, because `SequenceType` is set
to a 2D sequence. `SliceTiming` is the time at which each slice was
acquired within each volume (frame) of the acquisition. Slice timing
is not slice order -- rather, it is a list of times containing the
diff --git a/src/schema/rules/sidecars/nirs.yaml b/src/schema/rules/sidecars/nirs.yaml
index 08b02f3dbe..de84a85536 100644
--- a/src/schema/rules/sidecars/nirs.yaml
+++ b/src/schema/rules/sidecars/nirs.yaml
@@ -29,7 +29,6 @@ AnatomicalLandmark:
CoordsystemGeneral:
selectors:
- - modality == "nirs"
- datatype == "nirs"
- suffix == "coordsystem"
fields:
@@ -150,7 +149,7 @@ NirsRequired:
# Following counts required conditions enforced in checks
ACCELChannelCount:
level: optional
- level_addendum: required if any channel type is ACC
+ level_addendum: required if any channel type is ACCEL
GYROChannelCount:
level: optional
level_addendum: required if any channel type is GYRO
@@ -160,7 +159,7 @@ NirsRequired:
NirsRecommend:
selectors:
- - modality == "nirs"
+ - datatype == "nirs"
- suffix == "nirs"
fields:
CapManufacturer:
diff --git a/src/schema/rules/sidecars/pet.yaml b/src/schema/rules/sidecars/pet.yaml
index 353389de71..dc4ff9a572 100644
--- a/src/schema/rules/sidecars/pet.yaml
+++ b/src/schema/rules/sidecars/pet.yaml
@@ -2,7 +2,7 @@
# PET common metadata fields
PETHardware:
selectors:
- - modality == "pet"
+ - datatype == "pet"
- suffix == "pet"
fields:
Manufacturer:
@@ -22,7 +22,7 @@ PETHardware:
PETInstitutionInformation:
selectors:
- - modality == "pet"
+ - datatype == "pet"
- suffix == "pet"
fields:
InstitutionName:
@@ -35,10 +35,21 @@ PETInstitutionInformation:
level: recommended
description_addendum: Corresponds to DICOM Tag 0008, 1040 `Institutional Department Name`.
-PETRadioChemistry:
+PETSample:
selectors:
- modality == "pet"
- suffix == "pet"
+ fields:
+ BodyPart:
+ level: optional
+ description_addendum: Corresponds to DICOM Tag 0018, 0015 `Body Part Examined`.
+ BodyPartDetails: optional
+ BodyPartDetailsOntology: optional
+
+PETRadioChemistry:
+ selectors:
+ - datatype == "pet"
+ - suffix == "pet"
fields:
TracerName:
level: required
@@ -86,7 +97,7 @@ PETRadioChemistry:
# PET Infusion conditionally required entities
EntitiesBolusMetadata:
selectors:
- - modality == "pet"
+ - datatype == "pet"
- suffix == "pet"
- sidecar.ModeOfAdministration == 'bolus-infusion'
fields:
@@ -98,7 +109,7 @@ EntitiesBolusMetadata:
PETPharmaceuticals:
selectors:
- - modality == "pet"
+ - datatype == "pet"
- suffix == "pet"
fields:
PharmaceuticalName:
@@ -118,7 +129,7 @@ PETPharmaceuticals:
PETTime:
selectors:
- - modality == "pet"
+ - datatype == "pet"
- suffix == "pet"
fields:
TimeZero: required
@@ -139,7 +150,7 @@ PETTime:
PETReconstruction:
selectors:
- - modality == "pet"
+ - datatype == "pet"
- suffix == "pet"
fields:
AcquisitionMode: required
@@ -188,7 +199,7 @@ PETReconstruction:
# set required reconstruction fields to optional when "none" is provided as a parameter label
EntitiesReconMethodMetadata:
selectors:
- - modality == "pet"
+ - datatype == "pet"
- suffix == "pet"
- '!intersects(sidecar.ReconMethodParameterLabels, ["none"])'
fields:
@@ -198,7 +209,7 @@ EntitiesReconMethodMetadata:
# set required recon filter fields to optional when FilterType is "None"
EntitiesReconFilterMetadata:
selectors:
- - modality == "pet"
+ - datatype == "pet"
- suffix == "pet"
- '!intersects(sidecar.ReconFilterType, ["none"])'
fields:
@@ -206,7 +217,7 @@ EntitiesReconFilterMetadata:
BloodRecording:
selectors:
- - modality == "pet"
+ - datatype == "pet"
- suffix == "blood"
fields:
PlasmaAvail: required
@@ -222,7 +233,7 @@ BloodRecording:
BloodPlasmaFreeFraction:
selectors:
- - modality == "pet"
+ - datatype == "pet"
- suffix == "blood"
- sidecar.PlasmaAvail == true
fields:
@@ -235,7 +246,7 @@ BloodPlasmaFreeFraction:
BloodMetaboliteMethod:
selectors:
- - modality == "pet"
+ - datatype == "pet"
- suffix == "blood"
- sidecar.MetaboliteAvail == true
fields:
@@ -249,7 +260,7 @@ BloodMetaboliteMethod:
# PET task information
PETTask:
selectors:
- - modality == "pet"
+ - datatype == "pet"
- '"task" in entities'
fields:
TaskName:
diff --git a/src/schema/rules/tabular_data/motion.yaml b/src/schema/rules/tabular_data/motion.yaml
index cd7e809ae9..3f2f86ae96 100644
--- a/src/schema/rules/tabular_data/motion.yaml
+++ b/src/schema/rules/tabular_data/motion.yaml
@@ -17,6 +17,7 @@ motionChannels:
tracked_point__channels: required
units__motion: required
placement__motion: recommended
+ reference_frame: recommended
description: optional
sampling_frequency: optional
status: optional
diff --git a/src/schema/rules/tabular_data/nirs.yaml b/src/schema/rules/tabular_data/nirs.yaml
index 117116abd3..996b5bc585 100644
--- a/src/schema/rules/tabular_data/nirs.yaml
+++ b/src/schema/rules/tabular_data/nirs.yaml
@@ -25,6 +25,8 @@ nirsChannels:
level: optional
level_addendum: required if `type` is `ACCEL`, `GYRO` or `MAGN`
wavelength_actual: optional
+ low_cutoff: optional
+ high_cutoff: optional
description: optional
wavelength_emission_actual: optional
short_channel: optional
diff --git a/src/schema/rules/tabular_data/pet.yaml b/src/schema/rules/tabular_data/pet.yaml
index b00d9f1e88..8410ee8481 100644
--- a/src/schema/rules/tabular_data/pet.yaml
+++ b/src/schema/rules/tabular_data/pet.yaml
@@ -1,7 +1,7 @@
---
Blood:
selectors:
- - modality == "pet"
+ - datatype == "pet"
- suffix == "blood"
- extension == ".tsv"
columns:
@@ -14,7 +14,7 @@ Blood:
level_addendum: required if `MetaboliteAvail` is `true`
metabolite_polar_fraction:
level: optional
- level_addendum: required if `MetaboliteAvail` is `true`
+ level_addendum: recommended if `MetaboliteAvail` is `true`
hplc_recovery_fractions:
level: optional
level_addendum: required if `MetaboliteRecoveryCorrectionApplied` is `true`
@@ -24,19 +24,18 @@ Blood:
BloodPlasma:
selectors:
- - modality == "pet"
+ - datatype == "pet"
- suffix == "blood"
- extension == ".tsv"
- - '"PlasmaAvail" in sidecar'
+ - sidecar.PlasmaAvail == true
columns:
plasma_radioactivity: required
BloodMetabolite:
selectors:
- - modality == "pet"
+ - datatype == "pet"
- suffix == "blood"
- extension == ".tsv"
- - '"MetaboliteAvail" in sidecar'
- sidecar.MetaboliteAvail == true
columns:
metabolite_parent_fraction: required
@@ -44,20 +43,18 @@ BloodMetabolite:
BloodMetaboliteCorrection:
selectors:
- - modality == "pet"
+ - datatype == "pet"
- suffix == "blood"
- extension == ".tsv"
- - '"MetaboliteRecoveryCorrectionApplied" in sidecar'
- sidecar.MetaboliteRecoveryCorrectionApplied == true
columns:
hplc_recovery_fractions: required
BloodWholeBlood:
selectors:
- - modality == "pet"
+ - datatype == "pet"
- suffix == "blood"
- extension == ".tsv"
- - '"WholeBloodAvail" in sidecar'
- sidecar.WholeBloodAvail == true
columns:
whole_blood_radioactivity: required
diff --git a/src/schema/rules/tabular_data/task.yaml b/src/schema/rules/tabular_data/task.yaml
index 1b07b24936..0ca01afe25 100644
--- a/src/schema/rules/tabular_data/task.yaml
+++ b/src/schema/rules/tabular_data/task.yaml
@@ -10,6 +10,11 @@ TaskEvents:
response_time: optional
HED: optional
stim_file: optional
+ channel:
+ level: optional
+ description_addendum: |
+ Note that this column only applies to data types where
+ channels are specified, such as EEG, iEEG, MEG or NIRS.
additional_columns: allowed
initial_columns:
- onset
diff --git a/tools/add_contributors.py b/tools/add_contributors.py
index 8c3891d26e..1fe86f6abf 100644
--- a/tools/add_contributors.py
+++ b/tools/add_contributors.py
@@ -1,15 +1,19 @@
-"""Add new contributors listed in new_contributors.tsv to .tributors file
+"""Add new contributors listed in `new_contributors.tsv` to `.tributors` file.
-The tributor file is then used to update
-- the CITATION.cff file
-- the .all-contributorsrc file
-- TODO: the table of contributors in the appendix of the spec
+The `.tributors` file is then used to update:
-Contrary to the typical .tributors file,
+- the `CITATION.cff` file
+- the `.all-contributorsrc` file
+
+To update the table of contributors in the appendix of the spec,
+run `print_contributors.py`
+
+Contrary to the typical `.tributors` file,
the one here also centralizes the contributions
-that would otherwise be listed in the .all-contributorsrc file.
+that would otherwise be listed in the `.all-contributorsrc` file.
-This can also be used to update all files if new_contributors.tsv is empty.
+This script may also be run to update all files listed above
+if `new_contributors.tsv` is empty.
"""
# TODO: handle the following cases
@@ -39,13 +43,16 @@
LOG_LEVEL = "DEBUG" # 'DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'
# Set to True to update the avatars
-# update with your github username and path to a file with github token
+# update with your GitHub username and path to a file with GitHub token
UPDATE_AVATARS = False
GH_USERNAME = "Remi-Gau"
TOKEN_FILE = None
+# if you not want traceback from rich
+# https://rich.readthedocs.io/en/stable/traceback.html
+# set this to False
RICH_STACKTRACE = False
-# Set to True to use some of the dummy data in the "new_contributors.tsv"
+# Set to True to use some of the dummy data in the `new_contributors.tsv`
TEST = True
@@ -108,13 +115,14 @@ def emoji_map(reverse=False) -> dict[str, str]:
"tutorial": ":check_mark_button:",
"maintenance": ":construction:",
"financial": ":dollar_banknote:",
+ "infra": ":metro:",
}
def return_this_contributor(
df: pd.DataFrame, name: str, contribution_needed=True
) -> dict[str, Optional[str]]:
- """Get and validate the data for a given contributor from a panda dataframe"""
+ """Get and validate the data for a given contributor."""
name = name.strip()
mask = df.name == name
@@ -239,20 +247,20 @@ def update_key(
def load_tributors(tributors_file: Path) -> dict:
- """Load .tributors file."""
+ """Load `.tributors` file."""
with open(tributors_file, "r", encoding="utf8") as tributors_file:
return json.load(tributors_file)
def write_tributors(tributors_file: Path, tributors: dict[str, dict]) -> None:
- """Write .tributors file."""
+ """Write `.tributors` file."""
tributors = sort_tributors(tributors)
with open(tributors_file, "w", encoding="utf8") as output_file:
json.dump(tributors, output_file, indent=4, ensure_ascii=False)
def return_missing_from_tributors(tributors_file: Path, names: list[str]) -> list[str]:
- """Return list of names that are in the input file but not in the .tributors file."""
+ """Return list of names present in input file but not in `.tributors` file."""
tributors = load_tributors(tributors_file)
tributors_names = [tributors[x]["name"] for x in tributors]
for i, name in enumerate(names):
@@ -262,7 +270,7 @@ def return_missing_from_tributors(tributors_file: Path, names: list[str]) -> lis
def sort_tributors(tributors: dict[str, dict]) -> dict[str, dict]:
- """Sort tributors alphabetically by name of contributor."""
+ """Sort `.tributors` alphabetically by name of contributor."""
for key in tributors:
tributors[key] = dict(OrderedDict(sorted(tributors[key].items())))
return dict(sorted(tributors.items(), key=lambda item: item[1]["name"]))
@@ -271,7 +279,7 @@ def sort_tributors(tributors: dict[str, dict]) -> dict[str, dict]:
def add_to_tributors(
tributors: dict[str, dict], this_contributor: dict[str, str]
) -> dict[str, dict]:
- """Add contributor to .tributors"""
+ """Add contributor to `.tributors`."""
name = this_contributor.get("name")
tributors_names = [tributors[x]["name"] for x in tributors]
@@ -322,24 +330,24 @@ def update_tributors(
return tributors
-"""ALCONTRIB"""
+"""ALLCONTRIB"""
def load_allcontrib(allcontrib_file: Path) -> None:
- """Load .all-contributorsrc file."""
+ """Load `.all-contributorsrc` file."""
with open(allcontrib_file, "r", encoding="utf8") as input_file:
return json.load(input_file)
def write_allcontrib(allcontrib_file: Path, allcontrib: dict) -> None:
- """Write .all-contributorsrc file."""
+ """Write `.all-contributorsrc` file."""
allcontrib = sort_all_contrib(allcontrib)
with open(allcontrib_file, "w", encoding="utf8") as output_file:
json.dump(allcontrib, output_file, indent=4, ensure_ascii=False)
def sort_all_contrib(allcontrib: dict) -> dict:
- """Sort .all-contributorsrc file alphabetically by name of contributor."""
+ """Sort `.all-contributorsrc` file alphabetically by name of contributor."""
for i, contrib in enumerate(allcontrib["contributors"]):
allcontrib["contributors"][i] = dict(OrderedDict(sorted(contrib.items())))
allcontrib["contributors"] = sorted(
@@ -349,7 +357,7 @@ def sort_all_contrib(allcontrib: dict) -> dict:
def update_allcontrib(allcontrib: dict, this_contributor: dict[str, str]) -> dict:
- """Add a contributor if not in .all-contributorsrc, or update if already in."""
+ """Add contributor if not already in `.all-contributorsrc`, else update."""
allcontrib_names = [x["name"] for x in allcontrib["contributors"]]
if this_contributor["name"] not in allcontrib_names:
@@ -378,7 +386,7 @@ def update_allcontrib(allcontrib: dict, this_contributor: dict[str, str]) -> dic
def get_gh_avatar(gh_username: str, auth_username: str, auth_token: str) -> str:
- """Return url of github avatar."""
+ """Return URL of GitHub avatar."""
avatar_url = None
if gh_username is None:
@@ -412,23 +420,23 @@ def rename_keys_for_allcontrib(this_contributor: dict[str, str]) -> dict[str, st
return renamed
-"""CITATION.CFF"""
+"""CITATION.cff"""
def load_citation(citation_file: Path) -> dict:
- """Load CITATION.CFF file."""
+ """Load `CITATION.cff` file."""
with open(citation_file, "r", encoding="utf8") as input_file:
return yaml.load(input_file)
def write_citation(citation_file: Path, citation: dict) -> None:
- """Write CITATION.CFF file."""
+ """Write `CITATION.cff` file."""
with open(citation_file, "w", encoding="utf8") as output_file:
return yaml.dump(citation, output_file)
def return_author_list_for_cff(tributors_file: Path) -> list[dict[str, str]]:
- """Create an dict to be used for the authors in the CITATION.CFF file."""
+ """Create an dict to be used for the authors in the `CITATION.cff` file."""
tributors = load_tributors(tributors_file)
author_list = []
diff --git a/tools/examplecode/__init__.py b/tools/examplecode/__init__.py
index 886bf1c86a..414983f48d 100644
--- a/tools/examplecode/__init__.py
+++ b/tools/examplecode/__init__.py
@@ -1,4 +1,5 @@
"""A Python package to render BIDS example with tree like output."""
+
from examplecode.example import DirectoryTree
__all__ = [
diff --git a/tools/mkdocs_macros_bids/macros.py b/tools/mkdocs_macros_bids/macros.py
index aa29f21b28..f68453c6b8 100644
--- a/tools/mkdocs_macros_bids/macros.py
+++ b/tools/mkdocs_macros_bids/macros.py
@@ -1,4 +1,5 @@
"""Functions used by the macros mkdocs plugin."""
+
import os
import sys
diff --git a/tools/mkdocs_macros_bids/main.py b/tools/mkdocs_macros_bids/main.py
index 30a93e6ce9..13bb5caf44 100644
--- a/tools/mkdocs_macros_bids/main.py
+++ b/tools/mkdocs_macros_bids/main.py
@@ -4,6 +4,7 @@
Functions decorated in "define_env()" are callable throughout the
specification and are run/rendered with the mkdocs plugin "macros".
"""
+
import os
import sys
diff --git a/tools/no-bad-schema-paths.sh b/tools/no-bad-schema-paths.sh
new file mode 100755
index 0000000000..5805245a44
--- /dev/null
+++ b/tools/no-bad-schema-paths.sh
@@ -0,0 +1,29 @@
+#!/bin/bash
+
+set -eu -o pipefail
+
+schema_json=$(readlink -f "$1")
+
+cd "$(dirname "$(readlink -f "$0")")/../src/schema"
+
+# Create a temporary file and ensure it gets deleted on exit
+tmpfile=$(mktemp)
+trap 'rm -f "$tmpfile"' EXIT
+
+grep -oE '(://)?([-_A-Za-z]+\.)+[-_A-Za-z]+' README.md \
+ | grep -v -e :// -e '\.\(md\|html\|json\|tsv\|yaml\)$' \
+ | grep -e '^\(meta\|objects\|rules\)' \
+ | grep -v 'objects.metadata.OtherObjectName' \
+ | sort | uniq | \
+ while IFS= read -r p; do
+ v=$(jq ".$p" < "$schema_json" | grep -v '^null$' || echo "fail")
+ if [ -z "$v" ] || [ "$v" = "fail" ]; then
+ echo "$p: not reachable" >> "$tmpfile"
+ fi
+ done
+
+# Check if the temporary file is empty
+if [ -s "$tmpfile" ]; then
+ cat "$tmpfile" # Display the not reachable paths
+ exit 1
+fi
diff --git a/tools/print_contributors.py b/tools/print_contributors.py
index 62f5c7cf92..c49ca6f823 100644
--- a/tools/print_contributors.py
+++ b/tools/print_contributors.py
@@ -1,7 +1,7 @@
-"""Update the table of contributors in the specification appendice.
+"""Update the table of contributors in the specification appendix.
-Takes the content from ".all-contributorsrc"
+Takes the content from the `.all-contributorsrc` file
to update the table of contributors names and contribution.
"""
diff --git a/tools/pull_files.py b/tools/pull_files.py
index 2e6658ba83..a2a32aa552 100644
--- a/tools/pull_files.py
+++ b/tools/pull_files.py
@@ -7,6 +7,7 @@
https://github.com/alan-turing-institute/the-turing-way/blob/af98c94/tests/pull_files.py
"""
+
import argparse
import requests
diff --git a/tools/schemacode/bidsschematools/data/__init__.py b/tools/schemacode/bidsschematools/data/__init__.py
index e275ce39b4..14df1fc5ec 100644
--- a/tools/schemacode/bidsschematools/data/__init__.py
+++ b/tools/schemacode/bidsschematools/data/__init__.py
@@ -2,6 +2,7 @@
.. autofunction:: load_resource
"""
+
import atexit
import os
from contextlib import ExitStack
diff --git a/tools/schemacode/bidsschematools/data/tests/test_rules.py b/tools/schemacode/bidsschematools/data/tests/test_rules.py
index c44634f814..6c46a5da5d 100644
--- a/tools/schemacode/bidsschematools/data/tests/test_rules.py
+++ b/tools/schemacode/bidsschematools/data/tests/test_rules.py
@@ -1,4 +1,5 @@
"""Simple validation tests on schema rules."""
+
import warnings
from collections.abc import Mapping
@@ -28,12 +29,8 @@ def _dict_key_lookup(_dict, key, path=[]):
@pytest.mark.validate_schema
def test_rule_objects(schema_obj):
"""Ensure that all objects referenced in the schema rules are defined in
- its object portion.
+ their object portion.
- This test currently fails because rules files reference object keys for some object types,
- including entities, columns, and metadata fields,
- but reference "name" or "value" elements of the object definitions for other object types,
- including suffixes and extensions.
In the case of datatypes, the key and "value" field are always the same.
Some other object types, such as associated_data, common_principles, formats, modalities,
@@ -82,8 +79,7 @@ def test_rule_objects(schema_obj):
if object_type in ["extensions", "suffixes"]:
# Some object types are referenced via their "value" fields in the rules
object_values = [
- schema_obj["objects"][object_type][k]["value"]
- for k in schema_obj["objects"][object_type].keys()
+ value["value"] for value in schema_obj["objects"][object_type].values()
]
else:
# But other object types are referenced via their keys
@@ -99,7 +95,7 @@ def test_rule_objects(schema_obj):
if not_found:
not_found_string = "\n".join([f"{'.'.join(path)} == {val}" for path, val in not_found])
- raise ValueError(not_found_string)
+ raise AssertionError(f"Undefined objects found in rules: {not_found_string}")
@pytest.mark.validate_schema
diff --git a/tools/schemacode/bidsschematools/expressions.py b/tools/schemacode/bidsschematools/expressions.py
index c850d24551..3c22673095 100644
--- a/tools/schemacode/bidsschematools/expressions.py
+++ b/tools/schemacode/bidsschematools/expressions.py
@@ -1,5 +1,6 @@
"""Parsing utilities for BIDS Schema expression language
"""
+
from functools import partial
from pyparsing import (
diff --git a/tools/schemacode/bidsschematools/render/__init__.py b/tools/schemacode/bidsschematools/render/__init__.py
index 506e6b4583..a251a1f3cd 100644
--- a/tools/schemacode/bidsschematools/render/__init__.py
+++ b/tools/schemacode/bidsschematools/render/__init__.py
@@ -1,4 +1,5 @@
"""Functions for rendering elements of the schema in the specification text."""
+
from bidsschematools.render.tables import (
make_columns_table,
make_entity_table,
diff --git a/tools/schemacode/bidsschematools/render/tables.py b/tools/schemacode/bidsschematools/render/tables.py
index 90d091f5db..cf8645ffeb 100644
--- a/tools/schemacode/bidsschematools/render/tables.py
+++ b/tools/schemacode/bidsschematools/render/tables.py
@@ -1,4 +1,5 @@
"""Functions for rendering portions of the schema as text."""
+
from __future__ import annotations
import logging
diff --git a/tools/schemacode/bidsschematools/render/text.py b/tools/schemacode/bidsschematools/render/text.py
index 6468007625..1106e17185 100644
--- a/tools/schemacode/bidsschematools/render/text.py
+++ b/tools/schemacode/bidsschematools/render/text.py
@@ -1,4 +1,5 @@
"""Functions for rendering portions of the schema as text."""
+
import logging
import os
diff --git a/tools/schemacode/bidsschematools/render/utils.py b/tools/schemacode/bidsschematools/render/utils.py
index a482b54492..873699058e 100644
--- a/tools/schemacode/bidsschematools/render/utils.py
+++ b/tools/schemacode/bidsschematools/render/utils.py
@@ -1,4 +1,5 @@
"""Utility functions for specification rendering tools."""
+
import math
import posixpath
diff --git a/tools/schemacode/bidsschematools/rules.py b/tools/schemacode/bidsschematools/rules.py
index 6dd837629f..22e1fce649 100644
--- a/tools/schemacode/bidsschematools/rules.py
+++ b/tools/schemacode/bidsschematools/rules.py
@@ -3,6 +3,7 @@
This module is currently limited to constructing filename rules from
``schema.rules.files``.
"""
+
import re
import typing as ty
from collections.abc import Mapping
@@ -129,7 +130,7 @@ def _entity_rule(rule: Mapping, schema: bst.types.Namespace):
}
-def _split_inheritance_rules(rule: Mapping) -> ty.List[Mapping]:
+def _split_inheritance_rules(rule: dict) -> ty.List[dict]:
"""Break composite rules into main and sidecar rules
Implements the inheritance principle for file naming.
@@ -138,32 +139,28 @@ def _split_inheritance_rules(rule: Mapping) -> ty.List[Mapping]:
rule_exts = set(rule["extensions"])
main_exts = rule_exts - heritable_exts
- # If a rule only has TSV or JSON files, entities can be
- # made required
- if not main_exts:
- if ".tsv" in rule_exts:
- main_exts = {".tsv"}
- elif ".json" in rule_exts:
- main_exts = {".json"}
-
sidecar_exts = rule_exts - main_exts
if not sidecar_exts:
return [rule]
- sidecar_dtypes = [""] + rule.get("datatypes", [])
- sidecar_entities = {ent: "optional" for ent in rule["entities"]}
-
- main_rule = {**rule, **{"extensions": list(main_exts)}}
- sidecar_rule = {
- **rule,
- **{
- "extensions": list(sidecar_exts),
- "datatypes": sidecar_dtypes,
- "entities": sidecar_entities,
- },
- }
+ rules = []
+
+ # Some rules only address metadata, such as events.tsv or coordsystem.json
+ if main_exts:
+ rules.append({**rule, **{"extensions": list(main_exts)}})
+
+ rules.append(
+ {
+ **rule,
+ **{
+ "extensions": list(sidecar_exts),
+ "datatypes": [""] + rule.get("datatypes", []),
+ "entities": {ent: "optional" for ent in rule["entities"]},
+ },
+ }
+ )
- return [main_rule, sidecar_rule]
+ return rules
def _sanitize_extension(ext: str) -> str:
diff --git a/tools/schemacode/bidsschematools/schema.py b/tools/schemacode/bidsschematools/schema.py
index 22dac02cb6..8a51725f1b 100644
--- a/tools/schemacode/bidsschematools/schema.py
+++ b/tools/schemacode/bidsschematools/schema.py
@@ -1,4 +1,5 @@
"""Schema loading- and processing-related functions."""
+
import logging
import os
import re
diff --git a/tools/schemacode/bidsschematools/tests/data/__init__.py b/tools/schemacode/bidsschematools/tests/data/__init__.py
index 6415366aea..978e681be5 100644
--- a/tools/schemacode/bidsschematools/tests/data/__init__.py
+++ b/tools/schemacode/bidsschematools/tests/data/__init__.py
@@ -2,6 +2,7 @@
.. autofunction:: load_test_data
"""
+
from ...data import Loader
__all__ = ("load_test_data",)
diff --git a/tools/schemacode/bidsschematools/tests/test_render_tables.py b/tools/schemacode/bidsschematools/tests/test_render_tables.py
index be41b8c5eb..9e1116fe68 100644
--- a/tools/schemacode/bidsschematools/tests/test_render_tables.py
+++ b/tools/schemacode/bidsschematools/tests/test_render_tables.py
@@ -1,4 +1,5 @@
"""Tests for the bidsschematools package."""
+
from bidsschematools.render import tables
diff --git a/tools/schemacode/bidsschematools/tests/test_render_text.py b/tools/schemacode/bidsschematools/tests/test_render_text.py
index 3d25fd8b32..e6745c8780 100644
--- a/tools/schemacode/bidsschematools/tests/test_render_text.py
+++ b/tools/schemacode/bidsschematools/tests/test_render_text.py
@@ -1,4 +1,5 @@
"""Tests for the bidsschematools package."""
+
import os
import pytest
diff --git a/tools/schemacode/bidsschematools/tests/test_schema.py b/tools/schemacode/bidsschematools/tests/test_schema.py
index b0703361a3..5e7b0e3575 100644
--- a/tools/schemacode/bidsschematools/tests/test_schema.py
+++ b/tools/schemacode/bidsschematools/tests/test_schema.py
@@ -1,4 +1,5 @@
"""Tests for the bidsschematools package."""
+
import os
from collections.abc import Mapping
diff --git a/tools/schemacode/bidsschematools/types/namespace.py b/tools/schemacode/bidsschematools/types/namespace.py
index b59e8bb586..39943ac3f0 100644
--- a/tools/schemacode/bidsschematools/types/namespace.py
+++ b/tools/schemacode/bidsschematools/types/namespace.py
@@ -4,6 +4,7 @@
YAML files available as a single dictionary and allow attribute (``.``)
lookups.
"""
+
import json
import typing as ty
from collections.abc import ItemsView, KeysView, Mapping, MutableMapping, ValuesView
diff --git a/tools/schemacode/bidsschematools/utils.py b/tools/schemacode/bidsschematools/utils.py
index 308fd981f6..ec2947fb37 100644
--- a/tools/schemacode/bidsschematools/utils.py
+++ b/tools/schemacode/bidsschematools/utils.py
@@ -1,4 +1,5 @@
"""Utility functions for the bids-specification schema."""
+
import logging
from . import data