Skip to content

Commit b9ab7ab

Browse files
authored
Merge pull request #64 from rmarkello/cammoun2012
[ENH] Adds fsaverage5/6 annotation files for Cammoun 2012
2 parents dfe3f30 + 01dc25b commit b9ab7ab

File tree

4 files changed

+70
-13
lines changed

4 files changed

+70
-13
lines changed

netneurotools/data/osf.json

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,27 @@
77
],
88
"md5": "c3435f2720da6a74c3d55db54ebdbfff"
99
},
10-
"surface": {
10+
"fsaverage": {
1111
"url": [
1212
"mb37e",
1313
"5ce6c30523fec40017e83439"
1414
],
1515
"md5": "478599b362a88198396fdb15ad999f9e"
1616
},
17+
"fsaverage5": {
18+
"url": [
19+
"mb37e",
20+
"5e189a1c57341903868036dd"
21+
],
22+
"md5": "e96a456f14fd30f26734a7dfbcbb18e0"
23+
},
24+
"fsaverage6": {
25+
"url": [
26+
"mb37e",
27+
"5e189a1b5734190380804072"
28+
],
29+
"md5": "b220fb658e1abdfdf8bdb55b26f2acf3"
30+
},
1731
"volume": {
1832
"url": [
1933
"mb37e",

netneurotools/datasets/fetchers.py

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import json
88
import os
99
import os.path as op
10+
import warnings
1011

1112
from nilearn.datasets.utils import _fetch_files
1213
import numpy as np
@@ -23,10 +24,10 @@ def fetch_cammoun2012(version='volume', data_dir=None, url=None, resume=True,
2324
2425
Parameters
2526
----------
26-
version : {'volume', 'surface', 'gcs'}
27+
version : {'volume', 'fsaverage', 'fsaverage5', 'fsaverage6', 'gcs'}
2728
Specifies which version of the dataset to download, where 'volume' will
28-
return .nii.gz atlas files defined in MNI152 space, 'surface' will
29-
return .annot files defined in fsaverage space (FreeSurfer 6.0.1), and
29+
return .nii.gz atlas files defined in MNI152 space, 'fsaverageX' will
30+
return .annot files defined in fsaverageX space (FreeSurfer 6.0.1), and
3031
'gcs' will return FreeSurfer-style .gcs probabilistic atlas files for
3132
generating new, subject-specific parcellations
3233
data_dir : str, optional
@@ -61,7 +62,9 @@ def fetch_cammoun2012(version='volume', data_dir=None, url=None, resume=True,
6162
License: https://raw.githubusercontent.com/LTS5/cmp/master/COPYRIGHT
6263
"""
6364

64-
versions = ['volume', 'surface', 'gcs']
65+
versions = [
66+
'volume', 'surface', 'gcs', 'fsaverage', 'fsaverage5', 'fsaverage6'
67+
]
6568
if version not in versions:
6669
raise ValueError('The version of Cammoun et al., 2012 parcellation '
6770
'requested "{}" does not exist. Must be one of {}'
@@ -70,6 +73,13 @@ def fetch_cammoun2012(version='volume', data_dir=None, url=None, resume=True,
7073
dataset_name = 'atl-cammoun2012'
7174
keys = ['scale033', 'scale060', 'scale125', 'scale250', 'scale500']
7275

76+
if version == 'surface':
77+
warnings.warn('Providing `version="surface"` is deprecated and will '
78+
'be removed in a future release. For consistent '
79+
'behavior please use `version="fsaverage"` instead. ',
80+
DeprecationWarning, stacklevel=2)
81+
version = 'fsaverage'
82+
7383
data_dir = _get_data_dir(data_dir=data_dir)
7484
info = _get_dataset_info(dataset_name)[version]
7585
if url is None:
@@ -87,10 +97,10 @@ def fetch_cammoun2012(version='volume', data_dir=None, url=None, resume=True,
8797
'atl-Cammoun2012_space-MNI152NLin2009aSym_res-{}_deterministic{}'
8898
.format(res[-3:], suff) for res in keys for suff in ['.nii.gz']
8999
] + ['atl-Cammoun2012_space-MNI152NLin2009aSym_info.csv']
90-
elif version == 'surface':
100+
elif version in ('fsaverage', 'fsaverage5', 'fsaverage6'):
91101
filenames = [
92-
'atl-Cammoun2012_space-fsaverage_res-{}_hemi-{}_deterministic{}'
93-
.format(res[-3:], hemi, suff) for res in keys
102+
'atl-Cammoun2012_space-{}_res-{}_hemi-{}_deterministic{}'
103+
.format(version, res[-3:], hemi, suff) for res in keys
94104
for hemi in ['L', 'R'] for suff in ['.annot']
95105
]
96106
else:
@@ -106,7 +116,7 @@ def fetch_cammoun2012(version='volume', data_dir=None, url=None, resume=True,
106116

107117
if version == 'volume':
108118
keys += ['info']
109-
elif version == 'surface':
119+
elif version in ('fsaverage', 'fsaverage5', 'fsaverage6'):
110120
data = [data[i:i + 2] for i in range(0, len(data), 2)]
111121
else:
112122
data = [data[::2][i:i + 2] for i in range(0, len(data) // 2, 2)]

netneurotools/tests/test_datasets.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,9 @@ def test_fetch_fsaverage(tmpdir, version):
7373

7474
@pytest.mark.parametrize('version, expected', [
7575
('volume', [1, 1, 1, 1, 1]),
76-
('surface', [2, 2, 2, 2, 2]),
76+
('fsaverage', [2, 2, 2, 2, 2]),
77+
('fsaverage5', [2, 2, 2, 2, 2]),
78+
('fsaverage6', [2, 2, 2, 2, 2]),
7779
('gcs', [2, 2, 2, 2, 6])
7880
])
7981
def test_fetch_cammoun2012(tmpdir, version, expected):
@@ -90,6 +92,10 @@ def test_fetch_cammoun2012(tmpdir, version, expected):
9092
else:
9193
assert isinstance(out, str) and out.endswith('.nii.gz')
9294

95+
if 'fsaverage' in version:
96+
with pytest.warns(DeprecationWarning):
97+
datasets.fetch_cammoun2012('surface', data_dir=tmpdir, verbose=0)
98+
9399

94100
@pytest.mark.parametrize('dataset, expected', [
95101
('celegans', ['conn', 'dist', 'labels', 'ref']),
@@ -134,7 +140,8 @@ def test_fetch_schaefer2018(tmpdir, version):
134140

135141

136142
@pytest.mark.parametrize('dset, expected', [
137-
('atl-cammoun2012', ['volume', 'surface', 'gcs']),
143+
('atl-cammoun2012', ['volume', 'fsaverage', 'fsaverage5', 'fsaverage6',
144+
'gcs']),
138145
('tpl-conte69', ['url', 'md5']),
139146
('atl-pauli2018', ['url', 'md5', 'name']),
140147
('tpl-fsaverage', ['fsaverage' + f for f in ['', '3', '4', '5', '6']]),

resources/generate_atl-cammoun2012_surface.py

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,17 @@
1616
import re
1717
import shutil
1818

19-
from netneurotools import datasets, freesurfer
2019
import nibabel as nib
2120
import numpy as np
2221
import pandas as pd
2322

23+
from netneurotools import datasets, freesurfer
24+
from netneurotools.utils import check_fs_subjid, run
25+
26+
27+
cmd = 'mri_surf2surf --srcsubject fsaverage --trgsubject {trgsubject} ' \
28+
'--sval-annot {annot} --tval {tval} --hemi {hemi} --seed 1234'
29+
2430

2531
def combine_cammoun_500(lhannot, rhannot, subject_id, annot=None,
2632
subjects_dir=None, use_cache=True, quiet=False):
@@ -63,7 +69,6 @@ def combine_cammoun_500(lhannot, rhannot, subject_id, annot=None,
6369
cammoun500 : list
6470
List of created annotation files
6571
"""
66-
from netneurotools.utils import check_fs_subjid, run
6772

6873
tolabel = 'mri_annotation2label --subject {subject_id} --hemi {hemi} ' \
6974
'--outdir {label_dir} --annotation {annot} --sd {subjects_dir}'
@@ -183,3 +188,24 @@ def combine_cammoun_500(lhannot, rhannot, subject_id, annot=None,
183188
src, tar = src[sidx], tar[sidx]
184189
labels = tar[np.searchsorted(src, labels)]
185190
nib.freesurfer.write_annot(annot, labels, ctab, names)
191+
192+
#####
193+
# this should work now!
194+
annotations = datasets.fetch_cammoun2012('surface')
195+
196+
# map (via surf2surf) fsaverage to fsaverage5/6 so we can provide those
197+
for trg in ['fsaverage5', 'fsaverage6']:
198+
for scale, (lh, rh) in annotations.items():
199+
for annot, hemi in [(lh, 'lh'), (rh, 'rh')]:
200+
tval = annot.replace('space-fsaverage', 'space-{}'.format(trg))
201+
202+
msg = f'Generating annotation file: {tval}'
203+
print(msg, end='\r', flush=True)
204+
205+
run(cmd.format(trgsubject=trg,
206+
annot=annot,
207+
tval=tval,
208+
hemi=hemi),
209+
quiet=True)
210+
211+
print(' ' * len(msg) + '\b' * len(msg), end='', flush=True)

0 commit comments

Comments
 (0)