diff --git a/.github/workflows/validate_datasets.yml b/.github/workflows/validate_datasets.yml index 9c4981926..3b3edb2cb 100644 --- a/.github/workflows/validate_datasets.yml +++ b/.github/workflows/validate_datasets.yml @@ -107,7 +107,7 @@ jobs: fi - name: Skip legacy validation for post-legacy datasets - run: for DS in mrs_* dwi_deriv pet006 pheno004 volume_timing; do touch $DS/.SKIP_VALIDATION; done + run: for DS in mrs_* dwi_deriv pet006 pheno004 volume_timing provenance_*; do touch $DS/.SKIP_VALIDATION; done if: matrix.bids-validator == 'legacy' - name: Skip stable validation for datasets with unreleased validator features @@ -119,7 +119,7 @@ jobs: - name: Skip main validation for datasets with unreleased spec features # Replace ${EMPTY} with dataset patterns, when this is needed # Reset to "for DS in ${EMPTY}; ..." after a spec release - run: for DS in dwi_deriv pheno004; do touch $DS/.SKIP_VALIDATION; done + run: for DS in dwi_deriv pheno004 provenance_*; do touch $DS/.SKIP_VALIDATION; done if: matrix.bids-validator != 'dev' - name: Set BIDS_SCHEMA variable for dev version @@ -128,7 +128,7 @@ jobs: # Update this URL to the schema.json from PRs to the spec, when needed. # If this variable is unset, dev will generally track the latest development # release of https://jsr.io/@bids/schema - run: echo BIDS_SCHEMA=https://bids-specification.readthedocs.io/en/latest/schema.json >> $GITHUB_ENV + run: echo BIDS_SCHEMA=https://bids-specification--2099.org.readthedocs.build/en/2099/schema.json >> $GITHUB_ENV - name: Validate all BIDS datasets using bids-validator run: | diff --git a/README.md b/README.md index 53f625d61..4b217f16d 100644 --- a/README.md +++ b/README.md @@ -372,5 +372,6 @@ TABLE BELOW IS GENERATED AUTOMATICALLY. DO NOT EDIT DIRECTLY. --> -| name | description | datatypes | suffixes | link to full data | maintained by | -|--------|---------------|-------------|------------|---------------------|-----------------| +| name | description | datatypes | suffixes | link to full data | maintained by | +|:----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|:-------------------------------|:------------|:-----------|:--------------------|:----------------| +| [provenance_fmriprep Provenance metadata for a derivative dataset after functional MRI preprocessing performed with [`fMRIPrep`](https://fmriprep.org/en/23.1.3/index.html). This example is based upon [ds001734](https://openneuro.org/datasets/ds001734/versions/1.0.5) data. [@bclenet](https://github.com/bclenet) anat, func, prov](https://github.com/bids-standard/bids-examples/tree/master/provenance_fmriprep Provenance metadata for a derivative dataset after functional MRI preprocessing performed with [`fMRIPrep`](https://fmriprep.org/en/23.1.3/index.html). This example is based upon [ds001734](https://openneuro.org/datasets/ds001734/versions/1.0.5) data. [@bclenet](https://github.com/bclenet) anat, func, prov) | T1w, bold, act, ent, soft, env | n/a | n/a | n/a | n/a | diff --git a/dataset_listing.tsv b/dataset_listing.tsv index f9c2db4f2..28338209e 100644 --- a/dataset_listing.tsv +++ b/dataset_listing.tsv @@ -86,3 +86,4 @@ xeeg_hed_score EEG and iEEG data with annotations of artifacts, seizures and mod dwi_deriv exemplifies the storage of diffusion MRI derivates that may be generated on the Siemens XA platform. dwi dwi pheno004 Minimal dataset with subjects with imaging and/or phenotype data [@ericearl](https://github.com/ericearl) phenotype, anat T1w mri_chunk Example MRI dataset to illustrate BIDS chunk entity. A single subject, two chunks. [@valosekj](https://github.com/valosekj) anat T1w +provenance_fmriprep Provenance metadata for a derivative dataset after functional MRI preprocessing performed with [`fMRIPrep`](https://fmriprep.org/en/23.1.3/index.html). This example is based upon [ds001734](https://openneuro.org/datasets/ds001734/versions/1.0.5) data. [@bclenet](https://github.com/bclenet) anat, func, prov T1w, bold, act, ent, soft, env \ No newline at end of file diff --git a/provenance_fmriprep/.bidsignore b/provenance_fmriprep/.bidsignore new file mode 100644 index 000000000..424331476 --- /dev/null +++ b/provenance_fmriprep/.bidsignore @@ -0,0 +1 @@ +sub-001/* \ No newline at end of file diff --git a/provenance_fmriprep/README.md b/provenance_fmriprep/README.md new file mode 100644 index 000000000..d808983fa --- /dev/null +++ b/provenance_fmriprep/README.md @@ -0,0 +1,72 @@ +# BEP028 example dataset - Provenance metadata for `fMRIPrep` + +## Goal + +This example aims at showing provenance metadata for a preprocessing with [`fMRIPrep`](https://fmriprep.org/en/23.1.3/index.html). Provenance metadata was generated manually ; this acts as a guideline for minimal provenance description at dataset level. + +> [!WARNING] +> Validation of the `sub-001/` directory is ignored through a `.bidsignore` file, as the aim of the example is to focus on provenance metadata. + +## Original dataset + +This dataset is a derivative dataset of the [ds001734](https://openneuro.org/datasets/ds001734/versions/1.0.5) dataset. ds001734 contains raw and preprocessed fMRI data of two versions of the mixed gambles task, from the Neuroimaging Analysis Replication and Prediction Study (NARPS). **Only raw data for subject `sub-001` was preprocessed for this example.** All `.nii.gz` files were replaced by empty files. + +## Directory tree + +After preprocessing, and adding provenance metadata, the directory tree is as follows. +Files marked with ✍️ were generated manually, other files were generated by the preprocessing step. + +> [!NOTE] +> Note that the `docs/` directory contains explanatory data (see [Provenance as a RDF graph](#provenance-as-a-rdf-graph)) that is not required to encode provenance. + +``` +. +├── ✍️ dataset_description.json +├── ✍️ docs +│ ├── ✍️ prov-fmriprep.jsonld +│ └── ✍️ prov-fmriprep.png +├── ✍️ prov +│ ├── ✍️ prov-fmriprep_act.json +│ ├── ✍️ prov-fmriprep_ent.json +│ ├── ✍️ prov-fmriprep_env.json +│ └── ✍️ prov-fmriprep_soft.json +├── ✍️ README.md +└── sub-001 + ├── anat + │ ├── sub-001_T1w_brainmask.nii.gz + │ ├── sub-001_T1w_dtissue.nii.gz + │ ├── sub-001_T1w_label-aparcaseg_roi.nii.gz + │ ├── sub-001_T1w_label-aseg_roi.nii.gz + │ ├── sub-001_T1w_preproc.nii.gz + │ ├── sub-001_T1w_space-MNI152NLin2009cAsym_brainmask.nii.gz + │ ├── sub-001_T1w_space-MNI152NLin2009cAsym_dtissue.nii.gz + │ └── sub-001_T1w_space-MNI152NLin2009cAsym_preproc.nii.gz + └── func + ├── sub-001_task-MGT_run-01_bold_confounds.tsv + ├── sub-001_task-MGT_run-01_bold_space-MNI152NLin2009cAsym_brainmask.nii.gz + ├── sub-001_task-MGT_run-01_bold_space-MNI152NLin2009cAsym_preproc.nii.gz + ├── sub-001_task-MGT_run-01_bold_space-T1w_label-aparcaseg_roi.nii.gz + ├── sub-001_task-MGT_run-01_bold_space-T1w_label-aseg_roi.nii.gz + ├── sub-001_task-MGT_run-02_bold_confounds.tsv + ├── sub-001_task-MGT_run-02_bold_space-MNI152NLin2009cAsym_brainmask.nii.gz + ├── sub-001_task-MGT_run-02_bold_space-MNI152NLin2009cAsym_preproc.nii.gz + ├── sub-001_task-MGT_run-02_bold_space-T1w_label-aparcaseg_roi.nii.gz + ├── sub-001_task-MGT_run-02_bold_space-T1w_label-aseg_roi.nii.gz + ├── sub-001_task-MGT_run-03_bold_confounds.tsv + ├── sub-001_task-MGT_run-03_bold_space-MNI152NLin2009cAsym_brainmask.nii.gz + ├── sub-001_task-MGT_run-03_bold_space-MNI152NLin2009cAsym_preproc.nii.gz + ├── sub-001_task-MGT_run-03_bold_space-T1w_label-aparcaseg_roi.nii.gz + ├── sub-001_task-MGT_run-03_bold_space-T1w_label-aseg_roi.nii.gz + ├── sub-001_task-MGT_run-04_bold_confounds.tsv + ├── sub-001_task-MGT_run-04_bold_space-MNI152NLin2009cAsym_brainmask.nii.gz + ├── sub-001_task-MGT_run-04_bold_space-MNI152NLin2009cAsym_preproc.nii.gz + ├── sub-001_task-MGT_run-04_bold_space-T1w_label-aparcaseg_roi.nii.gz + └── sub-001_task-MGT_run-04_bold_space-T1w_label-aseg_roi.nii.gz + +``` + +## Provenance as a RDF graph + +Provenance metadata can be aggregated as a JSON-LD RDF graph, which is available in [`docs/prov-fmriprep.jsonld`](docs/prov-fmriprep.jsonld). This is a rendered version of the graph, also available in [`docs/prov-fmriprep.png`](docs/prov-fmriprep.png). + +![Rendered version of the RDF graph](docs/prov-fmriprep.png) diff --git a/provenance_fmriprep/dataset_description.json b/provenance_fmriprep/dataset_description.json new file mode 100644 index 000000000..307042245 --- /dev/null +++ b/provenance_fmriprep/dataset_description.json @@ -0,0 +1,19 @@ +{ + "Name": "Outputs from fMRIPrep preprocessing of the NARPS data", + "BIDSVersion": "1.10.0", + "DatasetType": "derivative", + "License": "CC0", + "Authors": [ + "Boris Clénet" + ], + "DatasetLinks": { + "ds001734": "https://openneuro.org/datasets/ds001734/versions/1.0.5" + }, + "SourceDatasets": [ + { + "URL": "ds001734", + "Version": "1.0.5" + } + ], + "GeneratedBy": "bids::prov#preprocessing-xMpFqB5q" +} diff --git a/provenance_fmriprep/docs/prov-fmriprep.jsonld b/provenance_fmriprep/docs/prov-fmriprep.jsonld new file mode 100644 index 000000000..3273ae0ba --- /dev/null +++ b/provenance_fmriprep/docs/prov-fmriprep.jsonld @@ -0,0 +1,47 @@ +{ + "BIDSProvVersion": "0.0.1", + "@context": "https://purl.org/nidash/bidsprov/context.json", + "Records": { + "Software": [ + { + "Id": "bids::prov#fmriprep-awf6cvk6", + "Label": "fMRIPrep", + "Version": "1.1.4", + "AltIdentifier": "RRID:SCR_016216" + } + ], + "Activities": [ + { + "Id": "bids::prov#preprocessing-xMpFqB5q", + "Label": "Preprocessing", + "Command": "docker run --rm -it -v /soft/freesurfer/license.txt:/opt/freesurfer/license.txt:ro -v /dev/BEP028_BIDSprov/examples/fmriprep/ds001734:/data:ro -v /data/ds001734_fmriprep:/out -v /data/ds001734_fmriprep/work:/scratch poldracklab/fmriprep:1.1.4 /data /out participant --participant-label=001 --reports-only --write-graph -w /scratch", + "AssociatedWith": [ + "bids::prov#fmriprep-awf6cvk6" + ], + "Used": [ + "bids::prov#poldracklab/fmriprep-mHl7Dqa0", + "bids:ds001734:." + ] + } + ], + "ProvEntities": [ + { + "Id": "bids:ds001734:.", + "Label": "NARPS" + }, + { + "Id": "bids:current_dataset", + "Label": "Outputs from fMRIPrep preprocessing", + "GeneratedBy": [ + "bids::prov#preprocessing-xMpFqB5q" + ] + } + ], + "Environments": [ + { + "Id": "bids::prov#poldracklab/fmriprep-mHl7Dqa0", + "Label": "poldracklab/fmriprep:1.1.4" + } + ] + } +} \ No newline at end of file diff --git a/provenance_fmriprep/docs/prov-fmriprep.png b/provenance_fmriprep/docs/prov-fmriprep.png new file mode 100644 index 000000000..76b1c6245 Binary files /dev/null and b/provenance_fmriprep/docs/prov-fmriprep.png differ diff --git a/provenance_fmriprep/prov/prov-fmriprep_act.json b/provenance_fmriprep/prov/prov-fmriprep_act.json new file mode 100644 index 000000000..215d51334 --- /dev/null +++ b/provenance_fmriprep/prov/prov-fmriprep_act.json @@ -0,0 +1,16 @@ +{ + "Activities": [ + { + "Id": "bids::prov#preprocessing-xMpFqB5q", + "Label": "Preprocessing", + "Command": "docker run --rm -it -v /soft/freesurfer/license.txt:/opt/freesurfer/license.txt:ro -v /dev/BEP028_BIDSprov/examples/fmriprep/ds001734:/data:ro -v /data/ds001734_fmriprep:/out -v /data/ds001734_fmriprep/work:/scratch poldracklab/fmriprep:1.1.4 /data /out participant --participant-label=001 --reports-only --write-graph -w /scratch", + "AssociatedWith": [ + "bids::prov#fmriprep-awf6cvk6" + ], + "Used": [ + "bids::prov#poldracklab/fmriprep-mHl7Dqa0", + "bids:ds001734:." + ] + } + ] +} \ No newline at end of file diff --git a/provenance_fmriprep/prov/prov-fmriprep_ent.json b/provenance_fmriprep/prov/prov-fmriprep_ent.json new file mode 100644 index 000000000..0eb528a7e --- /dev/null +++ b/provenance_fmriprep/prov/prov-fmriprep_ent.json @@ -0,0 +1,8 @@ +{ + "ProvEntities": [ + { + "Id": "bids:ds001734:.", + "Label": "NARPS" + } + ] +} \ No newline at end of file diff --git a/provenance_fmriprep/prov/prov-fmriprep_env.json b/provenance_fmriprep/prov/prov-fmriprep_env.json new file mode 100644 index 000000000..efa6c0c87 --- /dev/null +++ b/provenance_fmriprep/prov/prov-fmriprep_env.json @@ -0,0 +1,8 @@ +{ + "Environments": [ + { + "Id": "bids::prov#poldracklab/fmriprep-mHl7Dqa0", + "Label": "poldracklab/fmriprep:1.1.4" + } + ] +} \ No newline at end of file diff --git a/provenance_fmriprep/prov/prov-fmriprep_soft.json b/provenance_fmriprep/prov/prov-fmriprep_soft.json new file mode 100644 index 000000000..225daa63d --- /dev/null +++ b/provenance_fmriprep/prov/prov-fmriprep_soft.json @@ -0,0 +1,10 @@ +{ + "Software": [ + { + "Id": "bids::prov#fmriprep-awf6cvk6", + "Label": "fMRIPrep", + "Version": "1.1.4", + "AltIdentifier": "RRID:SCR_016216" + } + ] +} \ No newline at end of file diff --git a/provenance_fmriprep/sub-001/anat/sub-001_T1w_brainmask.nii.gz b/provenance_fmriprep/sub-001/anat/sub-001_T1w_brainmask.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/provenance_fmriprep/sub-001/anat/sub-001_T1w_dtissue.nii.gz b/provenance_fmriprep/sub-001/anat/sub-001_T1w_dtissue.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/provenance_fmriprep/sub-001/anat/sub-001_T1w_label-aparcaseg_roi.nii.gz b/provenance_fmriprep/sub-001/anat/sub-001_T1w_label-aparcaseg_roi.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/provenance_fmriprep/sub-001/anat/sub-001_T1w_label-aseg_roi.nii.gz b/provenance_fmriprep/sub-001/anat/sub-001_T1w_label-aseg_roi.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/provenance_fmriprep/sub-001/anat/sub-001_T1w_preproc.nii.gz b/provenance_fmriprep/sub-001/anat/sub-001_T1w_preproc.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/provenance_fmriprep/sub-001/anat/sub-001_T1w_space-MNI152NLin2009cAsym_brainmask.nii.gz b/provenance_fmriprep/sub-001/anat/sub-001_T1w_space-MNI152NLin2009cAsym_brainmask.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/provenance_fmriprep/sub-001/anat/sub-001_T1w_space-MNI152NLin2009cAsym_dtissue.nii.gz b/provenance_fmriprep/sub-001/anat/sub-001_T1w_space-MNI152NLin2009cAsym_dtissue.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/provenance_fmriprep/sub-001/anat/sub-001_T1w_space-MNI152NLin2009cAsym_preproc.nii.gz b/provenance_fmriprep/sub-001/anat/sub-001_T1w_space-MNI152NLin2009cAsym_preproc.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/provenance_fmriprep/sub-001/func/sub-001_task-MGT_run-01_bold_confounds.tsv b/provenance_fmriprep/sub-001/func/sub-001_task-MGT_run-01_bold_confounds.tsv new file mode 100644 index 000000000..e69de29bb diff --git a/provenance_fmriprep/sub-001/func/sub-001_task-MGT_run-01_bold_space-MNI152NLin2009cAsym_brainmask.nii.gz b/provenance_fmriprep/sub-001/func/sub-001_task-MGT_run-01_bold_space-MNI152NLin2009cAsym_brainmask.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/provenance_fmriprep/sub-001/func/sub-001_task-MGT_run-01_bold_space-MNI152NLin2009cAsym_preproc.nii.gz b/provenance_fmriprep/sub-001/func/sub-001_task-MGT_run-01_bold_space-MNI152NLin2009cAsym_preproc.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/provenance_fmriprep/sub-001/func/sub-001_task-MGT_run-01_bold_space-T1w_label-aparcaseg_roi.nii.gz b/provenance_fmriprep/sub-001/func/sub-001_task-MGT_run-01_bold_space-T1w_label-aparcaseg_roi.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/provenance_fmriprep/sub-001/func/sub-001_task-MGT_run-01_bold_space-T1w_label-aseg_roi.nii.gz b/provenance_fmriprep/sub-001/func/sub-001_task-MGT_run-01_bold_space-T1w_label-aseg_roi.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/provenance_fmriprep/sub-001/func/sub-001_task-MGT_run-02_bold_confounds.tsv b/provenance_fmriprep/sub-001/func/sub-001_task-MGT_run-02_bold_confounds.tsv new file mode 100644 index 000000000..e69de29bb diff --git a/provenance_fmriprep/sub-001/func/sub-001_task-MGT_run-02_bold_space-MNI152NLin2009cAsym_brainmask.nii.gz b/provenance_fmriprep/sub-001/func/sub-001_task-MGT_run-02_bold_space-MNI152NLin2009cAsym_brainmask.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/provenance_fmriprep/sub-001/func/sub-001_task-MGT_run-02_bold_space-MNI152NLin2009cAsym_preproc.nii.gz b/provenance_fmriprep/sub-001/func/sub-001_task-MGT_run-02_bold_space-MNI152NLin2009cAsym_preproc.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/provenance_fmriprep/sub-001/func/sub-001_task-MGT_run-02_bold_space-T1w_label-aparcaseg_roi.nii.gz b/provenance_fmriprep/sub-001/func/sub-001_task-MGT_run-02_bold_space-T1w_label-aparcaseg_roi.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/provenance_fmriprep/sub-001/func/sub-001_task-MGT_run-02_bold_space-T1w_label-aseg_roi.nii.gz b/provenance_fmriprep/sub-001/func/sub-001_task-MGT_run-02_bold_space-T1w_label-aseg_roi.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/provenance_fmriprep/sub-001/func/sub-001_task-MGT_run-03_bold_confounds.tsv b/provenance_fmriprep/sub-001/func/sub-001_task-MGT_run-03_bold_confounds.tsv new file mode 100644 index 000000000..e69de29bb diff --git a/provenance_fmriprep/sub-001/func/sub-001_task-MGT_run-03_bold_space-MNI152NLin2009cAsym_brainmask.nii.gz b/provenance_fmriprep/sub-001/func/sub-001_task-MGT_run-03_bold_space-MNI152NLin2009cAsym_brainmask.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/provenance_fmriprep/sub-001/func/sub-001_task-MGT_run-03_bold_space-MNI152NLin2009cAsym_preproc.nii.gz b/provenance_fmriprep/sub-001/func/sub-001_task-MGT_run-03_bold_space-MNI152NLin2009cAsym_preproc.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/provenance_fmriprep/sub-001/func/sub-001_task-MGT_run-03_bold_space-T1w_label-aparcaseg_roi.nii.gz b/provenance_fmriprep/sub-001/func/sub-001_task-MGT_run-03_bold_space-T1w_label-aparcaseg_roi.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/provenance_fmriprep/sub-001/func/sub-001_task-MGT_run-03_bold_space-T1w_label-aseg_roi.nii.gz b/provenance_fmriprep/sub-001/func/sub-001_task-MGT_run-03_bold_space-T1w_label-aseg_roi.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/provenance_fmriprep/sub-001/func/sub-001_task-MGT_run-04_bold_confounds.tsv b/provenance_fmriprep/sub-001/func/sub-001_task-MGT_run-04_bold_confounds.tsv new file mode 100644 index 000000000..e69de29bb diff --git a/provenance_fmriprep/sub-001/func/sub-001_task-MGT_run-04_bold_space-MNI152NLin2009cAsym_brainmask.nii.gz b/provenance_fmriprep/sub-001/func/sub-001_task-MGT_run-04_bold_space-MNI152NLin2009cAsym_brainmask.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/provenance_fmriprep/sub-001/func/sub-001_task-MGT_run-04_bold_space-MNI152NLin2009cAsym_preproc.nii.gz b/provenance_fmriprep/sub-001/func/sub-001_task-MGT_run-04_bold_space-MNI152NLin2009cAsym_preproc.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/provenance_fmriprep/sub-001/func/sub-001_task-MGT_run-04_bold_space-T1w_label-aparcaseg_roi.nii.gz b/provenance_fmriprep/sub-001/func/sub-001_task-MGT_run-04_bold_space-T1w_label-aparcaseg_roi.nii.gz new file mode 100644 index 000000000..e69de29bb diff --git a/provenance_fmriprep/sub-001/func/sub-001_task-MGT_run-04_bold_space-T1w_label-aseg_roi.nii.gz b/provenance_fmriprep/sub-001/func/sub-001_task-MGT_run-04_bold_space-T1w_label-aseg_roi.nii.gz new file mode 100644 index 000000000..e69de29bb