import os def create_key(template, outtype=('nii.gz',), annotation_classes=None): if template is None or not template: raise ValueError('Template must be a valid format string') return template, outtype, annotation_classes def infotodict(seqinfo): """Heuristic evaluator for determining which runs belong where allowed template fields - follow python string module: item: index within category subject: participant id seqitem: run number during scanning subindex: sub index within group """ t1w = create_key('sub-{subject}/{session}/anat/sub-{subject}_{session}_T1w') func_faces = create_key('sub-{subject}/{session}/func/sub-{subject}_{session}_task-faces_bold') func_faces_sbref = create_key('sub-{subject}/{session}/func/sub-{subject}_{session}_task-faces_sbref') func_rest = create_key('sub-{subject}/{session}/func/sub-{subject}_{session}_task-rest_bold') func_rest_sbref = create_key('sub-{subject}/{session}/func/sub-{subject}_{session}_task-rest_sbref') fmap_mag = create_key('sub-{subject}/{session}/fmap/sub-{subject}_{session}_magnitude') fmap_phase = create_key('sub-{subject}/{session}/fmap/sub-{subject}_{session}_phasediff') dwi = create_key('sub-{subject}/{session}/dwi/sub-{subject}_{session}_dwi') info = {t1w: [], func_rest: [], func_faces: [], func_faces_sbref: [], func_rest: [], func_rest_sbref: [], fmap_mag: [], fmap_phase: [], dwi: []} for idx, s in enumerate(seqinfo): if (s.dim3 == 192) and ('t1' in s.series_id) and ('NORM' in s.image_type): info[t1w].append(s.series_id) if (s.dim4 > 1200) and ('_RS' not in s.series_id) and ('BOLD' in s.protocol_name) and ('TE3' in s.image_type): info[func_faces].append(s.series_id) if (s.dim4 == 3) and ('SBRef' in s.series_description) and ('_RS' not in s.series_id) and ('TE3' in s.image_type): info[func_faces_sbref].append(s.series_id) if (s.dim4 == 1035) and ('_RS' in s.series_id) and ('BOLD' in s.protocol_name) and ('TE3' in s.image_type): info[func_rest].append(s.series_id) if (s.dim4 == 3) and ('_RS' in s.series_id) and ('BOLD' in s.protocol_name) and ('TE3' in s.image_type): info[func_rest_sbref].append(s.series_id) if (s.dim3 == 120) and (s.dim4 == 1) and ('fieldmap' in s.protocol_name): info[fmap_mag] = [s.series_id] if (s.dim3 == 60) and (s.dim4 == 1) and ('fieldmap' in s.protocol_name): info[fmap_phase] = [s.series_id] if (s.dim3 == 76) and (s.dim4 == 131) and ('diff' in s.protocol_name): info[dwi].append(s.series_id) return info