Skip to content

Instantly share code, notes, and snippets.

@emdupre
Created January 8, 2018 17:06
Show Gist options
  • Select an option

  • Save emdupre/78c34b91669f22b1144e640d0e7a4166 to your computer and use it in GitHub Desktop.

Select an option

Save emdupre/78c34b91669f22b1144e640d0e7a4166 to your computer and use it in GitHub Desktop.
A function to group multi-echo fMRI BOLD sessions, for use in FMRIPREP.
import re
from itertools import groupby
multi_echo_ses = {'data': ['sub-01_ses-01_task-view_run-01_echo-1_bold.nii.gz',
'sub-01_ses-01_task-view_run-01_echo-2_bold.nii.gz',
'sub-01_ses-01_task-view_run-01_echo-3_bold.nii.gz',
'sub-01_ses-01_task-view_run-02_echo-1_bold.nii.gz',
'sub-01_ses-01_task-view_run-02_echo-2_bold.nii.gz',
'sub-01_ses-01_task-view_run-02_echo-3_bold.nii.gz',
'sub-01_ses-01_task-rest_run-01_bold.nii.gz',
'sub-01_ses-02_task-rest_run-01_bold.nii.gz'],
'grouping': [['sub-01_ses-01_task-view_run-01_echo-1_bold.nii.gz',
'sub-01_ses-01_task-view_run-01_echo-2_bold.nii.gz',
'sub-01_ses-01_task-view_run-01_echo-3_bold.nii.gz'],
['sub-01_ses-01_task-view_run-02_echo-1_bold.nii.gz',
'sub-01_ses-01_task-view_run-02_echo-2_bold.nii.gz',
'sub-01_ses-01_task-view_run-02_echo-3_bold.nii.gz'],
'sub-01_ses-01_task-rest_run-01_bold.nii.gz',
'sub-01_ses-02_task-rest_run-01_bold.nii.gz']}
ds000205 = {'data': ['sub-07_task-functionallocalizer_run-01_bold.nii.gz',
'sub-07_task-view_run-01_bold.nii.gz',
'sub-07_task-view_run-02_bold.nii.gz'],
'grouping': ['sub-07_task-functionallocalizer_run-01_bold.nii.gz',
'sub-07_task-view_run-01_bold.nii.gz',
'sub-07_task-view_run-02_bold.nii.gz']}
ds000210 = {'data': ['sub-02_task-cuedSGT_run-01_echo-1_bold.nii.gz',
'sub-02_task-cuedSGT_run-01_echo-2_bold.nii.gz',
'sub-02_task-cuedSGT_run-01_echo-3_bold.nii.gz',
'sub-02_task-cuedSGT_run-02_echo-1_bold.nii.gz',
'sub-02_task-cuedSGT_run-02_echo-2_bold.nii.gz',
'sub-02_task-cuedSGT_run-02_echo-3_bold.nii.gz',
'sub-02_task-cuedSGT_run-03_echo-1_bold.nii.gz',
'sub-02_task-cuedSGT_run-03_echo-2_bold.nii.gz',
'sub-02_task-cuedSGT_run-03_echo-3_bold.nii.gz',
'sub-02_task-cuedSGT_run-04_echo-1_bold.nii.gz',
'sub-02_task-cuedSGT_run-04_echo-2_bold.nii.gz',
'sub-02_task-cuedSGT_run-04_echo-3_bold.nii.gz',
'sub-02_task-rest_run-01_echo-1_bold.nii.gz',
'sub-02_task-rest_run-01_echo-2_bold.nii.gz',
'sub-02_task-rest_run-01_echo-3_bold.nii.gz'],
'grouping': [['sub-02_task-cuedSGT_run-01_echo-1_bold.nii.gz',
'sub-02_task-cuedSGT_run-01_echo-2_bold.nii.gz',
'sub-02_task-cuedSGT_run-01_echo-3_bold.nii.gz'],
['sub-02_task-cuedSGT_run-02_echo-1_bold.nii.gz',
'sub-02_task-cuedSGT_run-02_echo-2_bold.nii.gz',
'sub-02_task-cuedSGT_run-02_echo-3_bold.nii.gz'],
['sub-02_task-cuedSGT_run-03_echo-1_bold.nii.gz',
'sub-02_task-cuedSGT_run-03_echo-2_bold.nii.gz',
'sub-02_task-cuedSGT_run-03_echo-3_bold.nii.gz'],
['sub-02_task-cuedSGT_run-04_echo-1_bold.nii.gz',
'sub-02_task-cuedSGT_run-04_echo-2_bold.nii.gz',
'sub-02_task-cuedSGT_run-04_echo-3_bold.nii.gz'],
['sub-02_task-rest_run-01_echo-1_bold.nii.gz',
'sub-02_task-rest_run-01_echo-2_bold.nii.gz',
'sub-02_task-rest_run-01_echo-3_bold.nii.gz']]}
def _grp_echos(x):
if '_echo-' not in x:
return x
echo = re.search("_echo-\\d*", x).group(0)
return x.replace(echo, "_echo-?")
# mockup a subject_data dictionary
for mock_data in [multi_echo_ses, ds000205, ds000210]:
subj_data = {'bold': mock_data['data']}
if subj_data["bold"] is not []:
bold_sess = subj_data["bold"]
if any(['_echo-' in bold for bold in bold_sess]):
ses_uids = [list(bold) for _, bold in groupby(bold_sess, key=_grp_echos)]
ses_uids = list(map(lambda x: x[0] if len(x) == 1 else x, ses_uids))
else:
ses_uids = bold_sess
subj_data.update({"bold": ses_uids})
assert subj_data['bold'] == mock_data['grouping']
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment