Hi NeuroStars! I am trying to run fmriprep 25.1.2 with Singularity using Snakemake. I continually encounter the following error message when trying to dry-run a single subject:
(snakemake) jknight@rick:/DATA_CNS/PROJECTS/EPILEPSY/machine_learning/snakemake$ snakemake --cores 1 -np
host: rick
Building DAG of jobs...
MissingInputException in rule all in file "/DATA_CNS/PROJECTS/EPILEPSY/machine_learning/snakemake/Snakefile", line 15:
Missing input files for rule all:
affected files:
/DATA_CNS/PROJECTS/EPILEPSY/machine_learning/deriv/fmriprep/sub-005.html
(snakemake) jknight@rick:/DATA_CNS/PROJECTS/EPILEPSY/machine_learning/snakemake$
I am under the impression there is an input/output file mismatch between the Snakefile, the .smk file and fmriprep but have struggled to find the solution. fmriprep runs normally with Singularity in the terminal, so I am sure the problem lies with Snakemake.
Below I have attached the entire code for the Snakefile, .smk and config file.
Snakefile
from os.path import join
from pathlib import Path
# Config
configfile: 'config/config.yml'
# Wildcard constraints
wildcard_constraints:
subject = r'sub-\d{5}'
# Subject list
subjects = ['sub-005']
# Rule all
rule all:
input:
expand(join(config['output_dir'], 'fmriprep/{subject}.html'),
subject=subjects)
# Include other rules
include: 'rules/rsfmri.smk'
rsfmri.smk
# Snakemake rules for rsfMRI preprocessing pipe
# Set rule order
ruleorder: symlink_data > symlink_description > copy_t1w_brain > fmriprep_latest
# Will copy skullstripped T1w image to gradcorrect folder
rule copy_t1w_brain:
input: join(config['input_dir'], 'presurfer/{subject}/{subject}_acq-MP2RAGE_proc-B1map+PreSurfer_T1w.nii.gz')
output: join(config['input_dir'], 'gradcorrect/{subject}/anat/{subject}_acq-MP2RAGE_proc-B1map+PreSurfer_T1w.nii.gz')
group: 'rsfmri'
shell:
"""
ln -s `realpath {input}` `realpath {output}`
"""
# Will mirror gradcorrect description
rule symlink_description:
input: join(config['input_dir'], 'gradcorrect/dataset_description.json')
output: join(config['output_dir'], 'gradcorrect/dataset_description.json')
group: 'rsfmri'
shell:
"""
ln -s `realpath {input}` `realpath {output}`
"""
# Will mirror gradcorrect data
rule symlink_data:
input:
desc = join(config['output_dir'], 'gradcorrect/dataset_description.json'),
gradcorrect = join(config['input_dir'], 'gradcorrect/{subject}'),
t1w = join(config['input_dir'], 'gradcorrect/{subject}/anat/{subject}_acq-MP2RAGE_proc-B1map+PreSurfer_T1w.nii.gz')
output: 'logs/{subject}/symlink_data.done'
params:
gradcorrect = join(config['output_dir'], 'gradcorrect/{subject}')
group: 'rsfmri'
shell:
"""
ln -s `realpath {input.gradcorrect}` `realpath {params.gradcorrect}`
touch {output}
"""
# Will run fMRIprep
rule fmriprep_latest:
input:
freesurfer = join(config['input_dir'], 'freesurfer/{subject}/scripts/recon-all.done'),
symlink_done = 'logs/{subject}/symlink_data.done',
dataset_description = join(config['output_dir'], 'gradcorrect/dataset_description.json'),
output:
html = join(config['output_dir'], 'fmriprep/{subject}.html'),
done = join(config['output_dir'], 'fmriprep/{subject}.done')
params:
gradcorrect_dir = config['output_dir'],
freesurfer_dir = config['input_dir'],
fmriprep = config['containers']['fmriprep']['latest'],
fmriprep_params = config['fmriprep_params'],
outdir = join(config['output_dir'], 'fmriprep'),
group: 'rsfmri'
shell:
"""
set -eo pipefail
workdir={params.outdir}/work/{wildcards.subject}
mkdir -p $workdir
singularity run -e {params.fmriprep} \
{params.gradcorrect_dir}/gradcorrect {params.outdir} \
participant --participant-label {wildcards.subject} -w $workdir \
--fs-subjects-dir {params.freesurfer_dir}/freesurfer --nprocs 4 {params.fmriprep_params}
touch {output.done}
"""
config.yml
input_dir: "/DATA_CNS/PROJECTS/EPILEPSY/7T/deriv"
output_dir: "/DATA_CNS/PROJECTS/EPILEPSY/machine_learning/deriv"
fmriprep_params: "--skip_bids_validation --skull-strip-t1w skip --fs-license-file /DATA_CNS/PROJECTS/EPILEPSY/machine_learning/code/license.txt --bids-filter-file resources/fmriprep_filter.json --ignore t2w flair --output-spaces MNI152NLin6Asym fsLR --cifti-output 91k"
containers:
fmriprep:
latest: /home/rhaast/00_SOFTWARE/containers/nipreps_fmriprep_v25.1.2.sif
Thanking you in advance!
Jacob