Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ENH: fsLR output space, cifti output in HCP grayordinate space #1887

Merged
merged 35 commits into from
Dec 11, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
51685b6
wip: BOLD timeseries to fsLR surface
mgxd Nov 12, 2019
a898085
enh: new pathway for fslr resampling
mgxd Nov 14, 2019
355dd09
fix: fslr and medial wall nan compatibility
mgxd Nov 15, 2019
a1d2c6f
fix: syntax, add density parameter to bold_surf_wf
mgxd Nov 18, 2019
b2d2fe5
enh: add workbench dependency
mgxd Nov 19, 2019
81f63c1
fix: various runtime fixes
mgxd Nov 19, 2019
2ba1462
wip: use fslr with cifti interface
mgxd Nov 20, 2019
38ee520
enh: re-add surface density
mgxd Nov 22, 2019
72d41c1
rf+enh: output space parsing for hcp ciftis
mgxd Nov 27, 2019
f6e69cb
fix: files for fsaverage -> fsLR resampling
mgxd Nov 27, 2019
a9be360
fix: clean up GenerateCifti inputs
mgxd Nov 27, 2019
fc621dd
fix: save ALL CIFTIs
mgxd Nov 27, 2019
b4ccfaa
merge conflict
mgxd Nov 27, 2019
af3e275
fix: simplify exception
mgxd Nov 27, 2019
5ed2547
pin: test upstream dependencies
mgxd Nov 27, 2019
1533207
Merge branch 'master' into enh/cifti-hcp
mgxd Nov 30, 2019
d979b9c
fix: address @oesteban review
mgxd Nov 30, 2019
b142bcd
fix: update outputs/connections to upstream cifti changes
mgxd Dec 3, 2019
b74c898
PIN[temporary]: upstream PR
mgxd Dec 3, 2019
11ded98
fix: sort outputs
mgxd Dec 3, 2019
9df2503
fix: only generate hcp compatible CIFTIs
mgxd Dec 5, 2019
590b8af
enh: add density to fslr/cifti outputs
mgxd Dec 5, 2019
be43eea
maint: update cifti test, outputs
mgxd Dec 5, 2019
311fba6
pin: poldracklab/niworkflows#436
mgxd Dec 5, 2019
abeeff9
sty: flake8
mgxd Dec 5, 2019
6c7c048
enh: update fsLR/CIFTI documentation
mgxd Dec 5, 2019
17abbff
fix: output sorting
mgxd Dec 6, 2019
e4d7192
fix: allow fsLR surfs without --cifti-output
mgxd Dec 6, 2019
7e5cd86
fix: coerce templates to strings
mgxd Dec 6, 2019
815bf36
fix: use same --output-spaces command
mgxd Dec 6, 2019
88f7f52
fix: ensure templates are always fetched
mgxd Dec 6, 2019
5645707
Merge branch 'master' into enh/cifti-hcp
oesteban Dec 7, 2019
35dec43
PIN: niworkflows 1.1.0
mgxd Dec 9, 2019
1a8b112
enh+doc: augment --cifti-output flag capabilities
mgxd Dec 11, 2019
4cc78a8
Merge branch 'master' into enh/cifti-hcp
mgxd Dec 11, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -395,7 +395,7 @@ jobs:
--sloppy --write-graph --use-syn-sdc --mem_mb 4096 \
--use-aroma \
--skull-strip-template OASIS30ANTs:res-1 \
--output-spaces MNI152NLin2009cAsym fsaverage5 fsnative MNI152NLin6Asym anat \
--output-spaces fsLR MNI152NLin2009cAsym fsaverage5 fsnative MNI152NLin6Asym anat \
--use-plugin /home/circleci/src/fmriprep/.circleci/legacy.yml \
--nthreads 2 --cifti-output -vv
- run:
Expand All @@ -422,7 +422,7 @@ jobs:
/tmp/data/ds005 /tmp/ds005/derivatives_partial participant \
--fs-subjects-dir /tmp/ds005/freesurfer \
--sloppy --write-graph --use-syn-sdc --mem_mb 4096 \
--output-spaces MNI152NLin2009cAsym fsaverage5 fsnative MNI152NLin6Asym anat \
--output-spaces fsLR MNI152NLin2009cAsym fsaverage5 fsnative MNI152NLin6Asym anat \
--aroma-melodic-dimensionality 2 --use-aroma \
--nthreads 2 --cifti-output -vv
- run:
Expand Down
16 changes: 12 additions & 4 deletions .circleci/ds005_outputs.txt
Original file line number Diff line number Diff line change
Expand Up @@ -51,13 +51,17 @@ fmriprep/sub-01/anat/sub-01_space-MNI152NLin6Asym_label-GM_probseg.nii.gz
fmriprep/sub-01/anat/sub-01_space-MNI152NLin6Asym_label-WM_probseg.nii.gz
fmriprep/sub-01/func
fmriprep/sub-01/func/sub-01_task-mixedgamblestask_run-01_AROMAnoiseICs.csv
fmriprep/sub-01/func/sub-01_task-mixedgamblestask_run-01_bold.dtseries.json
fmriprep/sub-01/func/sub-01_task-mixedgamblestask_run-01_bold.dtseries.nii
fmriprep/sub-01/func/sub-01_task-mixedgamblestask_run-01_desc-confounds_regressors.json
fmriprep/sub-01/func/sub-01_task-mixedgamblestask_run-01_desc-confounds_regressors.tsv
fmriprep/sub-01/func/sub-01_task-mixedgamblestask_run-01_desc-MELODIC_mixing.tsv
fmriprep/sub-01/func/sub-01_task-mixedgamblestask_run-01_space-fsaverage5_hemi-L.func.gii
fmriprep/sub-01/func/sub-01_task-mixedgamblestask_run-01_space-fsaverage5_hemi-R.func.gii
fmriprep/sub-01/func/sub-01_task-mixedgamblestask_run-01_space-fsaverage_hemi-L.func.gii
fmriprep/sub-01/func/sub-01_task-mixedgamblestask_run-01_space-fsaverage_hemi-R.func.gii
fmriprep/sub-01/func/sub-01_task-mixedgamblestask_run-01_space-fsLR_den-32k_hemi-L.func.gii
fmriprep/sub-01/func/sub-01_task-mixedgamblestask_run-01_space-fsLR_den-32k_hemi-R.func.gii
fmriprep/sub-01/func/sub-01_task-mixedgamblestask_run-01_space-fsLR_den-91k_bold.dtseries.json
fmriprep/sub-01/func/sub-01_task-mixedgamblestask_run-01_space-fsLR_den-91k_bold.dtseries.nii
fmriprep/sub-01/func/sub-01_task-mixedgamblestask_run-01_space-fsnative_hemi-L.func.gii
fmriprep/sub-01/func/sub-01_task-mixedgamblestask_run-01_space-fsnative_hemi-R.func.gii
fmriprep/sub-01/func/sub-01_task-mixedgamblestask_run-01_space-MNI152NLin2009cAsym_boldref.nii.gz
Expand All @@ -83,13 +87,17 @@ fmriprep/sub-01/func/sub-01_task-mixedgamblestask_run-01_space-T1w_desc-brain_ma
fmriprep/sub-01/func/sub-01_task-mixedgamblestask_run-01_space-T1w_desc-preproc_bold.json
fmriprep/sub-01/func/sub-01_task-mixedgamblestask_run-01_space-T1w_desc-preproc_bold.nii.gz
fmriprep/sub-01/func/sub-01_task-mixedgamblestask_run-02_AROMAnoiseICs.csv
fmriprep/sub-01/func/sub-01_task-mixedgamblestask_run-02_bold.dtseries.json
fmriprep/sub-01/func/sub-01_task-mixedgamblestask_run-02_bold.dtseries.nii
fmriprep/sub-01/func/sub-01_task-mixedgamblestask_run-02_desc-confounds_regressors.json
fmriprep/sub-01/func/sub-01_task-mixedgamblestask_run-02_desc-confounds_regressors.tsv
fmriprep/sub-01/func/sub-01_task-mixedgamblestask_run-02_desc-MELODIC_mixing.tsv
fmriprep/sub-01/func/sub-01_task-mixedgamblestask_run-02_space-fsaverage5_hemi-L.func.gii
fmriprep/sub-01/func/sub-01_task-mixedgamblestask_run-02_space-fsaverage5_hemi-R.func.gii
fmriprep/sub-01/func/sub-01_task-mixedgamblestask_run-02_space-fsaverage_hemi-L.func.gii
fmriprep/sub-01/func/sub-01_task-mixedgamblestask_run-02_space-fsaverage_hemi-R.func.gii
fmriprep/sub-01/func/sub-01_task-mixedgamblestask_run-02_space-fsLR_den-32k_hemi-L.func.gii
fmriprep/sub-01/func/sub-01_task-mixedgamblestask_run-02_space-fsLR_den-32k_hemi-R.func.gii
fmriprep/sub-01/func/sub-01_task-mixedgamblestask_run-02_space-fsLR_den-91k_bold.dtseries.json
fmriprep/sub-01/func/sub-01_task-mixedgamblestask_run-02_space-fsLR_den-91k_bold.dtseries.nii
fmriprep/sub-01/func/sub-01_task-mixedgamblestask_run-02_space-fsnative_hemi-L.func.gii
fmriprep/sub-01/func/sub-01_task-mixedgamblestask_run-02_space-fsnative_hemi-R.func.gii
fmriprep/sub-01/func/sub-01_task-mixedgamblestask_run-02_space-MNI152NLin2009cAsym_boldref.nii.gz
Expand Down
8 changes: 6 additions & 2 deletions .circleci/ds005_partial_outputs.txt
Original file line number Diff line number Diff line change
Expand Up @@ -51,13 +51,17 @@ fmriprep/sub-01/anat/sub-01_space-MNI152NLin6Asym_label-GM_probseg.nii.gz
fmriprep/sub-01/anat/sub-01_space-MNI152NLin6Asym_label-WM_probseg.nii.gz
fmriprep/sub-01/func
fmriprep/sub-01/func/sub-01_task-mixedgamblestask_run-02_AROMAnoiseICs.csv
fmriprep/sub-01/func/sub-01_task-mixedgamblestask_run-02_bold.dtseries.json
fmriprep/sub-01/func/sub-01_task-mixedgamblestask_run-02_bold.dtseries.nii
fmriprep/sub-01/func/sub-01_task-mixedgamblestask_run-02_desc-confounds_regressors.json
fmriprep/sub-01/func/sub-01_task-mixedgamblestask_run-02_desc-confounds_regressors.tsv
fmriprep/sub-01/func/sub-01_task-mixedgamblestask_run-02_desc-MELODIC_mixing.tsv
fmriprep/sub-01/func/sub-01_task-mixedgamblestask_run-02_space-fsaverage5_hemi-L.func.gii
fmriprep/sub-01/func/sub-01_task-mixedgamblestask_run-02_space-fsaverage5_hemi-R.func.gii
fmriprep/sub-01/func/sub-01_task-mixedgamblestask_run-02_space-fsaverage_hemi-L.func.gii
fmriprep/sub-01/func/sub-01_task-mixedgamblestask_run-02_space-fsaverage_hemi-R.func.gii
fmriprep/sub-01/func/sub-01_task-mixedgamblestask_run-02_space-fsLR_den-32k_hemi-L.func.gii
fmriprep/sub-01/func/sub-01_task-mixedgamblestask_run-02_space-fsLR_den-32k_hemi-R.func.gii
fmriprep/sub-01/func/sub-01_task-mixedgamblestask_run-02_space-fsLR_den-91k_bold.dtseries.json
fmriprep/sub-01/func/sub-01_task-mixedgamblestask_run-02_space-fsLR_den-91k_bold.dtseries.nii
fmriprep/sub-01/func/sub-01_task-mixedgamblestask_run-02_space-fsnative_hemi-L.func.gii
fmriprep/sub-01/func/sub-01_task-mixedgamblestask_run-02_space-fsnative_hemi-R.func.gii
fmriprep/sub-01/func/sub-01_task-mixedgamblestask_run-02_space-MNI152NLin2009cAsym_boldref.nii.gz
Expand Down
1 change: 1 addition & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,7 @@ RUN apt-get update && \
fsl-mni152-templates=5.0.7-2 \
afni=16.2.07~dfsg.1-5~nd16.04+1 \
convert3d \
connectome-workbench \
git-annex-standalone && \
apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

Expand Down
1 change: 1 addition & 0 deletions REFERENCES.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
| Framewise displacement | | https://nipype.readthedocs.io/en/latest/interfaces/generated/nipype.algorithms.confounds.html#framewisedisplacement |
| **Other**
| a/tCompCor | https://doi.org/10.1016/j.neuroimage.2007.04.042 | http://nipype.readthedocs.io/en/latest/interfaces/generated/nipype.algorithms.confounds.html#compcor |
| Connectome Workbench | | https://humanconnectome.org/software/connectome-workbench
| phdiff2fmap | https://doi.org/10.1006/nimg.2001.1054 | https://fmriprep.readthedocs.io/en/stable/sdc/estimation.html#fmriprep.interfaces.fmap.phdiff2fmap |
| nibabel | https://doi.org/10.5281/zenodo.60808 | https://github.com/nipy/nibabel/ |
| nilearn | https://doi.org/10.3389/fninf.2014.00014 | https://github.com/nilearn/nilearn/ |
Expand Down
1 change: 1 addition & 0 deletions docs/links.rst
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
.. _AFNI: https://afni.nimh.nih.gov/
.. _GIFTI: https://www.nitrc.org/projects/gifti/
.. _`Connectome Workbench`: https://www.humanconnectome.org/software/connectome-workbench.html
.. _`HCP Pipelines`: https://humanconnectome.org/software/hcp-mr-pipelines/
.. _`Docker wrapper`: https://pypi.python.org/pypi/fmriprep-docker
.. _`Docker Engine`: https://www.docker.com/products/container-runtime
.. _`Docker installation`: https://docs.docker.com/install/
Expand Down
20 changes: 13 additions & 7 deletions docs/outputs.rst
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ Derivatives specification (see `BIDS Derivatives RC1`_).
2. **Derivatives (preprocessed data)** the input fMRI data ready for
analysis, i.e., after the various preparation procedures
have been applied.
For example, :abbr:`INU (intensity non-uniformity)`-corrected versions
For example, :abbr:`INU (intensity non-uniformity)`-corrected versions
of the T1-weighted image (per subject), the brain mask,
or :abbr:`BOLD (blood-oxygen level dependent)`
images after head-motion correction, slice-timing correction and aligned into
Expand Down Expand Up @@ -140,20 +140,26 @@ mid-thickness surface mesh::

Surface output spaces include ``fsnative`` (full density subject-specific mesh),
``fsaverage`` and the down-sampled meshes ``fsaverage6`` (41k vertices) and
``fsaverage5`` (10k vertices, default).
``fsaverage5`` (10k vertices, default). Additionally, the BOLD can be resampled to
``fsLR`` surfaces, a hybrid version of the ``fsaverage`` atlas with both hemispheres
in precise geographic correspondence, with varying mesh densities: 32k (default), 59k, and 164k.

**Grayordinates files**.
CIFTI is a container format that holds both volumetric (regularly sampled in a grid)
and surface (sampled on a triangular mesh) samples.
Sub-cortical time series are volumetric (supported spaces: ``MNI152NLin2009cAsym``), while cortical
time series are sampled on the surface (supported spaces: ``fsaverage5``, ``fsaverage6``).
If CIFTI outputs are requested (with the ``--cifti-outputs`` argument),
the BOLD series are also saved as ``dtseries.nii`` CIFTI2 files::
Sub-cortical time series are volumetric (supported spaces: ``MNI152NLin6Asym``), while cortical
time series are sampled to surface (supported spaces: ``fsLR``).
If CIFTI outputs are requested (with the ``--cifti-outputs`` argument), the BOLD series are also
saved as ``dtseries.nii`` CIFTI2 files::

sub-<subject_label>/
func/
sub-<subject_label>_[specifiers]_bold.dtseries.nii

CIFTI output resolution can be specified as an optional parameter after ``--cifti-output``.
By default, '91k' outputs are produced and match up to the standard `HCP Pipelines`_ CIFTI
output (91282 grayordinates @ 2mm). However, '170k' outputs are also possible, and produce
higher resolution CIFTI output (170494 grayordinates @ 1.6mm).

**Extracted confounding time series**.
For each :abbr:`BOLD (blood-oxygen level dependent)` run processed with *fMRIPrep*, an
Expand Down Expand Up @@ -231,7 +237,7 @@ Confound regressors description
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
**Basic confounds**. The most commonly used confounding time series:

- Estimated head-motion parameters:
- Estimated head-motion parameters:
``trans_x``, ``trans_y``, ``trans_z``, ``rot_x``, ``rot_y``, ``rot_z`` - the 6 rigid-body motion
parameters (3 translations and 3 rotation), estimated relative to a reference image;

Expand Down
3 changes: 2 additions & 1 deletion docs/spaces.rst
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,8 @@ the template instance for the, say, 24-48 months old range.

When specifying surface spaces (e.g., ``fsaverage``), the legacy identifiers from
FreeSurfer will be supported (e.g., ``fsaverage5``) although the use of the density
modifier would be preferred (i.e., ``fsaverage:den-10k`` for ``fsaverage5``).
modifier would be preferred (i.e., ``fsaverage:den-10k`` for ``fsaverage5``). When
selecting ``fsLR`` surface space without a density label, ``fsLR:den-32k`` will be used.

Custom standard spaces
""""""""""""""""""""""
Expand Down
9 changes: 9 additions & 0 deletions docs/workflows.rst
Original file line number Diff line number Diff line change
Expand Up @@ -538,6 +538,15 @@ Surfaces are generated for the "subject native" surface, as well as transformed
``fsaverage`` template space.
All surface outputs are in GIFTI format.

HCP Grayordinates
~~~~~~~~~~~~~~~~~
If CIFTI output is enabled, the motion-corrected functional timeseries (in T1w space) is first
sampled to the high resolution 164k vertex (per hemisphere) ``fsaverage``. Following that,
the resampled timeseries is sampled to `HCP Pipelines_`'s ``fsLR`` mesh (with the left and
right hemisphere aligned) using `Connectome Workbench`_'s ``-metric-resample`` to generate a
surface timeseries for each hemisphere. These surfaces are then combined with corresponding
volumetric timeseries to create a CIFTI2 file.

.. _bold_confounds:

Confounds estimation
Expand Down
51 changes: 30 additions & 21 deletions fmriprep/cli/run.py
Original file line number Diff line number Diff line change
Expand Up @@ -232,8 +232,11 @@ def get_parser():
g_surfs.add_argument('--no-submm-recon', action='store_false', dest='hires',
help='disable sub-millimeter (hires) reconstruction')
g_surfs_xor = g_surfs.add_mutually_exclusive_group()
g_surfs_xor.add_argument('--cifti-output', action='store_true', default=False,
help='output BOLD files as CIFTI dtseries')
g_surfs_xor.add_argument('--cifti-output', nargs='?', const='91k', default=False,
choices=('91k', '170k'),
help='output preprocessed BOLD as a CIFTI dense timeseries. '
'Optionally, the number of grayordinate can be specified '
'(default is 91k, which equates to 2mm resolution)')
g_surfs_xor.add_argument('--fs-no-reconall',
action='store_false', dest='run_reconall',
help='disable FreeSurfer surface preprocessing.')
Expand Down Expand Up @@ -700,14 +703,6 @@ def parse_spaces(opts):
# Set the default template to 'MNI152NLin2009cAsym'
output_spaces = opts.output_spaces or OrderedDict([('MNI152NLin2009cAsym', {})])

FS_SPACES = set(['fsnative', 'fsaverage', 'fsaverage6', 'fsaverage5'])
if opts.run_reconall and not list(FS_SPACES.intersection(output_spaces.keys())):
print("""\
Although ``--fs-no-reconall`` was not set (i.e., FreeSurfer is to be run), no FreeSurfer \
output space (valid values are: %s) was selected. Adding default "fsaverage5" to the \
list of output spaces.""" % ', '.join(FS_SPACES), file=stderr)
output_spaces['fsaverage5'] = {}

# Validity of some inputs
# ERROR check if use_aroma was specified, but the correct template was not
if opts.use_aroma and 'MNI152NLin6Asym' not in output_spaces:
Expand All @@ -717,18 +712,32 @@ def parse_spaces(opts):
The argument "MNI152NLin6Asym:res-2" has been automatically added to the list of output spaces \
(option ``--output-spaces``).""", file=stderr)

if opts.cifti_output and 'MNI152NLin2009cAsym' not in output_spaces:
if 'MNI152NLin2009cAsym' not in output_spaces:
output_spaces['MNI152NLin2009cAsym'] = {'res': 2}
print("""Option ``--cifti-output`` requires functional images to be resampled to \
``MNI152NLin2009cAsym`` space. Such template identifier has been automatically added to the \
list of output spaces (option "--output-space").""", file=stderr)
if not [s for s in output_spaces if s in ('fsaverage5', 'fsaverage6')]:
output_spaces['fsaverage5'] = {}
print("""Option ``--cifti-output`` requires functional images to be resampled to \
``fsaverage`` space. The argument ``fsaverage:den-10k`` (a.k.a ``fsaverage5``) has been \
automatically added to the list of output spaces (option ``--output-space``).""", file=stderr)
if opts.cifti_output:
grayords = {'91k': '32k', '170k': '59k'} # CIFTI total grayords to surface densities
output_spaces['fsLR'] = {'den': grayords[opts.cifti_output]}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do you really want to force GIFTI outputs if you're having CIFTI outputs? If they're not explicitly asking for it, it's a lot of duplicated output.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

that's how we are currently handling CIFTIs, i.e. fsaverage5/6 surfaces are always produced atm.

I hope to get this functionality in, and then address the inherent problem after (#1892)

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Okay.

if 'MNI152NLin6Asym' not in output_spaces:
output_spaces['MNI152NLin6Asym'] = {'res': '2'}
print("""\
Option ``--cifti-output`` requires functional images to be resampled to \
``MNI152NLin6Asym`` space. This space has been automatically added to the list of output \
spaces (option ``--output-spaces``).""", file=stderr)

if 'fsLR' in output_spaces:
output_spaces['fsLR'] = {'den': output_spaces.get('fsLR', {}).get('den') or '32k'}
# resample to fsLR from highest density fsaverage
output_spaces['fsaverage'] = {'den': '164k'}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Similarly, now asking for CIFTIs in fsLR means that I'm also getting GIFTI outputs in fsaverage space.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yep, see above

print("""\
To generate "fsLR" surfaces, functional images are first resampled to ``fsaverage:den-164k``. \
This space has been automatically added to the list of output spaces \
(option ``--output-spaces``).""", file=stderr)

FS_SPACES = set(('fsnative', 'fsaverage', 'fsaverage6', 'fsaverage5'))
if opts.run_reconall and not FS_SPACES.intersection(output_spaces.keys()):
print("""\
Although ``--fs-no-reconall`` was not set (i.e., FreeSurfer is to be run), no FreeSurfer \
output space (valid values are: %s) was selected. Adding default "fsaverage5" to the \
list of output spaces.""" % ', '.join(FS_SPACES), file=stderr)
output_spaces['fsaverage5'] = {}
return output_spaces


Expand Down
Loading