Running fmriprep with singularity#
List of fmriprep version available here: https://hub.docker.com/r/nipreps/fmriprep/tags/
Latest (long term support) LTS version: 20.2.7
Example on how to run it locally#
Requirements
datalad for data source control and installing data
Build singularity image#
VERSION=21.0.2
singularity build ~/my_images/fmriprep-${VERSION}.simg \
docker://nipreps/fmriprep:${VERSION}
Set up#
datalad create --force -c yoda ~/my_analysis
cd ~/my_analysis
tree
Folder structure
├── CHANGELOG.md
├── code
│ └── README.md
└── README.md
Adding derivatives
folder for output and cloning a raw BIDS dataset into the
input folder. Using the MoAE SPM BIDS dataset from GIN:
`git@gin.g-node.org:/SPM_datasets/spm_moae_raw.git
mkdir derivatives
mkdir inputs
datalad install -d . --get-data -s git@gin.g-node.org:/SPM_datasets/spm_moae_raw.git inputs/raw
tree
Folder structure
├── CHANGELOG.md
├── code
│ └── README.md
├── derivatives <-- this is where the output data will go
├── inputs
│ └── raw <-- installed as a subdataset
│ ├── CHANGES
│ ├── dataset_description.json
│ ├── participants.tsv
│ ├── README
│ ├── sub-01
│ │ ├── anat
│ │ │ └── sub-01_T1w.nii
│ │ └── func
│ │ ├── sub-01_task-auditory_bold.nii
│ │ └── sub-01_task-auditory_events.tsv
│ └── task-auditory_bold.json
└── README.md
Copy the freesurfer license into the code folder:
cp ~/Dropbox/Software/Freesurfer/License/license.txt \
~/my_analysis/code
Create a temporary dir to keep intermediate results: useful if fmriprep crashes, it won't start from zero.
mkdir tmp/wdir
Add a bids_filter_file.json
config file to help you define what fmriprep
should consider as bold
as T1w
.
The one below corresponds to the fMRIprep default (also available inside this repo).
See this part of the FAQ for more info:
https://fmriprep.org/en/21.0.2/faq.html#how-do-I-select-only-certain-files-to-be-input-to-fMRIPrep
{
"fmap": {
"datatype": "fmap"
},
"bold": {
"datatype": "func",
"suffix": "bold"
},
"sbref": {
"datatype": "func",
"suffix": "sbref"
},
"flair": {
"datatype": "anat",
"suffix": "FLAIR"
},
"t2w": {
"datatype": "anat",
"suffix": "T2w"
},
"t1w": {
"datatype": "anat",
"suffix": "T1w"
},
"roi": {
"datatype": "anat",
"suffix": "roi"
}
}
Create a singularity_run_fmriprep.sh
script in the code folder
with following content:
#!/bin/bash
# to be called from the root of the YODA dataset
# subject label passed as argument
participant_label=$1
# binds the root folder of the YODA dataset on your machine
# onto the /my_analysis inside the container
# runs the container: ~/my_images/fmriprep-${VERSION}.sing
# tweak the parameters below to your convenience
# see here for more info: https://fmriprep.org/en/stable/usage.html#usage-notes
VERSION=21.0.2
nb_dummy_scans=0
task="auditory"
# https://fmriprep.org/en/21.0.2/spaces.html
output_spaces="MNI152NLin6Asym T1w"
singularity run --cleanenv \
--bind "$(pwd)":/my_analysis \
~/my_images/fmriprep-${VERSION}.simg \
/my_analysis/inputs/raw \
/my_analysis/derivatives \
participant \
--participant-label ${participant_label} \
--fs-license-file /my_analysis/code/license.txt \
-w /my_analysis/tmp/wdir \
--dummy-scans ${nb_dummy_scans} \
--task-id ${task} \
--bids-filter-file /my_analysis/code/bids_filter_file.json \
--output-spaces ${output_spaces}
Folder structure
├── CHANGELOG.md
├── code
│ ├── bids_filter_file.json
│ ├── license.txt
│ ├── README.md
│ └── singularity_run_fmriprep.sh
├── derivatives
├── inputs
│ └── raw
│ ├── CHANGES
│ ├── dataset_description.json
│ ├── participants.tsv
│ ├── README
│ ├── sub-01
│ │ ├── anat
│ │ │ └── sub-01_T1w.nii
│ │ └── func
│ │ ├── sub-01_task-auditory_bold.nii
│ │ └── sub-01_task-auditory_events.tsv
│ └── task-auditory_bold.json
└── README.md
Run fmriprep#
Pass argument of the participant label.
. code/singularity_run_fmriprep.sh 01
<!--
#!/bin/bash
#-------------------------------------------
#SBATCH -J fmriprep
#SBATCH --account=def-flepore
#SBATCH --time=3:00:00
#SBATCH -n 1
#SBATCH --cpus-per-task=4
#SBATCH --mem-per-cpu=8G
#SBATCH --mail-user=michele.maclean@umontreal.ca
#SBATCH --mail-type=BEGIN
#SBATCH --mail-type=END
#SBATCH --mail-type=FAIL
#SBATCH --mail-type=REQUEUE
#SBATCH --mail-type=ALL
# ------------------------------------------
source ~/venv_datalad/bin/activate
module load git-annex/8.20200810
module load freesurfer/5.3.0
module load singularity/3.8
cd
# run the fmriprep job with singularity
singularity run --cleanenv /home/mmaclean/projects/def-flepore/mmaclean/parallel_analysis/containers/images/bids/bids-fmriprep--21.0.1.sing /home/mmaclean/projects/def-flepore/mmaclean/CVI-raw /home/mmaclean/projects/def-flepore/mmaclean/preprocessing participant --participant-label CTL17 --fs-license-file /home/mmaclean/projects/def-flepore/mmaclean/license/freesurfer.txt --skip_bids_validation --notrack
``` -->
## Datalad + fmriprep
Example on how to run it locally
### Folder structure
derivatives ├── env │ ├── bin │ ├── lib │ └── share ├── derivatives <-- this is where the data will go │ ├── fmriprep │ └── freesurfer └── raw <-- installed as a subdataset ├── code └── sub-01
#### fMRIprep
Install datalad & others in a virtual environment
```bash
virtualenv -p python3.8 env
source env/bin/activate
pip install datalad datalad-neuroimaging datalad-container
Get fmriprep (make sure singualrity is installed)
datalad containers-add fmriprep --url docker://nipreps/fmriprep:20.2.0
Run fmriprep
input_dir=`pwd`/raw
output_dir=`pwd`/derivatives
participant_label=01
# the following will depend on where you keep your freesurfer license
freesurfer_licence=~/Dropbox/Software/Freesurfer/License/license_1.txt
datalad containers-run -m "fmriprep 01" \
--container-name fmriprep \
--input ${input_dir} \
--output ${output_dir} \
fmriprep \
$input_dir \
${output_dir} \
participant \
--participant-label ${participant_label} \
-w /tmp --fs-license-file ${freesurfer_licence} \
--output-spaces T1w:res-native MNI152NLin2009cAsym:res-native