def parse_spm5_preproc(work_dir, step): doc = {} if hasattr(step, 'spatial') and hasattr(step.spatial, 'realign'): realign = step.spatial.realign.estwrite motion = [] if len(realign.data[0].shape) == 0: realign = [realign] else: realign = realign.data for session in realign: data_dir = find_data_dir(work_dir, check_path(session[0])) motion.append(glob.glob(os.path.join(data_dir, 'rp_*.txt'))[0]) doc['motion'] = motion if hasattr(step, 'spatial') and isinstance(step.spatial, np.ndarray): doc['anatomy'] = makeup_path(work_dir, check_path(step.spatial[0].preproc.data)) doc['wmanatomy'] = prefix_filename( makeup_path( work_dir, check_path(step.spatial[1].normalise.write.subj.resample)), 'w') if hasattr(step, 'temporal'): doc['n_slices'] = int(step.temporal.st.nslices) doc['ref_slice'] = int(step.temporal.st.refslice) doc['slice_order'] = step.temporal.st.so.tolist() doc['ta'] = float(step.temporal.st.ta) doc['tr'] = float(step.temporal.st.tr) doc['bold'] = [] doc['swabold'] = [] if len(step.temporal.st.scans[0].shape) == 0: bold = [step.temporal.st.scans] else: bold = step.temporal.st.scans for session in bold: data_dir = find_data_dir(work_dir, str(session[0])) doc['bold'].append( check_paths([ os.path.join(data_dir, os.path.split(str(x))[1]) for x in session ])) doc['swabold'].append( check_paths([ prefix_filename( os.path.join(data_dir, os.path.split(str(x))[1]), 'swa') for x in session ])) doc['n_scans'] = [len(s) for s in doc['bold']] return doc
def parse_spm8_preproc(work_dir, step): doc = {} if hasattr(step, 'spatial') and hasattr(step.spatial, 'preproc'): doc['anatomy'] = makeup_path( work_dir, check_path(step.spatial.preproc.data)) doc['wmanatomy'] = prefix_filename(doc['anatomy'], 'wm') if hasattr(step, 'temporal'): doc['n_slices'] = int(step.temporal.st.nslices) doc['ref_slice'] = int(step.temporal.st.refslice) doc['slice_order'] = step.temporal.st.so.tolist() doc['ta'] = float(step.temporal.st.ta) doc['tr'] = float(step.temporal.st.tr) doc['bold'] = [] doc['swabold'] = [] if len(step.temporal.st.scans[0].shape) == 0: bold = [step.temporal.st.scans] else: bold = step.temporal.st.scans for session in bold: data_dir = find_data_dir(work_dir, str(session[0])) doc['bold'].append(check_paths( [os.path.join(data_dir, os.path.split(str(x))[1]) for x in session])) doc['swabold'].append(check_paths( [prefix_filename(os.path.join( data_dir, os.path.split(str(x))[1]), 'swa') for x in session])) doc['n_scans'] = [len(s) for s in doc['bold']] return doc
def parse_spm5_preproc(work_dir, step): doc = {} if hasattr(step, 'spatial') and hasattr(step.spatial, 'realign'): realign = step.spatial.realign.estwrite motion = [] if len(realign.data[0].shape) == 0: realign = [realign] else: realign = realign.data for session in realign: data_dir = find_data_dir(work_dir, check_path(session[0])) motion.append(glob.glob(os.path.join(data_dir, 'rp_*.txt'))[0]) doc['motion'] = motion if hasattr(step, 'spatial') and isinstance(step.spatial, np.ndarray): doc['anatomy'] = makeup_path( work_dir, check_path(step.spatial[0].preproc.data)) doc['wmanatomy'] = prefix_filename(makeup_path( work_dir, check_path(step.spatial[1].normalise.write.subj.resample)), 'w') if hasattr(step, 'temporal'): doc['n_slices'] = int(step.temporal.st.nslices) doc['ref_slice'] = int(step.temporal.st.refslice) doc['slice_order'] = step.temporal.st.so.tolist() doc['ta'] = float(step.temporal.st.ta) doc['tr'] = float(step.temporal.st.tr) doc['bold'] = [] doc['swabold'] = [] if len(step.temporal.st.scans[0].shape) == 0: bold = [step.temporal.st.scans] else: bold = step.temporal.st.scans for session in bold: data_dir = find_data_dir(work_dir, str(session[0])) doc['bold'].append(check_paths( [os.path.join(data_dir, os.path.split(str(x))[1]) for x in session])) doc['swabold'].append(check_paths( [prefix_filename(os.path.join( data_dir, os.path.split(str(x))[1]), 'swa') for x in session])) doc['n_scans'] = [len(s) for s in doc['bold']] return doc
def get_intra_preproc(mat_file, work_dir, n_scans, memory=Memory(None)): mat = memory.cache(load_matfile)(mat_file)['SPM'] preproc = {} get_motion_file = False if len(n_scans) > 1: preproc['motion'] = [] for session in mat.Sess: preproc['motion'].append(session.C.C.tolist()) if session.C.C.size == 0: get_motion_file = True else: preproc['motion'] = [mat.Sess.C.C.tolist()] if mat.Sess.C.C.size == 0: get_motion_file = True swabold = check_paths(mat.xY.P) if len(nb.load(makeup_path(work_dir, swabold[0])).shape) == 4: swabold = np.unique(swabold) else: swabold = np.split(swabold, np.cumsum(n_scans)[:-1]) if get_motion_file: preproc['motion'] = [] for session in swabold: session_dir = find_data_dir(work_dir, check_path(session[0])) if get_motion_file: motion_file = glob.glob(os.path.join(session_dir, 'rp_*.txt'))[0] motion = np.fromfile(motion_file, sep=' ') motion = motion.reshape(motion.shape[0] / 6, 6) preproc['motion'].append(motion) if isinstance(session, (list, np.ndarray)): scans = [ os.path.join(session_dir, os.path.split(scan)[1].strip()) for scan in session ] preproc.setdefault('swabold', []).append(scans) preproc.setdefault('abold', []).append( [strip_prefix_filename(scan, 2) for scan in scans]) preproc.setdefault('bold', []).append( [strip_prefix_filename(scan, 3) for scan in scans]) else: preproc.setdefault('swabold', []).append(session) preproc.setdefault('abold', []).append(strip_prefix_filename(session, 2)) preproc.setdefault('bold', []).append(strip_prefix_filename(session, 3)) return preproc
def get_intra_preproc(mat_file, work_dir, n_scans, memory=Memory(None)): mat = memory.cache(load_matfile)(mat_file)['SPM'] preproc = {} get_motion_file = False if len(n_scans) > 1: preproc['motion'] = [] for session in mat.Sess: preproc['motion'].append(session.C.C.tolist()) if session.C.C.size == 0: get_motion_file = True else: preproc['motion'] = [mat.Sess.C.C.tolist()] if mat.Sess.C.C.size == 0: get_motion_file = True swabold = check_paths(mat.xY.P) if len(nb.load(makeup_path(work_dir, swabold[0])).shape) == 4: swabold = np.unique(swabold) else: swabold = np.split(swabold, np.cumsum(n_scans)[:-1]) if get_motion_file: preproc['motion'] = [] for session in swabold: session_dir = find_data_dir(work_dir, check_path(session[0])) if get_motion_file: motion_file = glob.glob(os.path.join(session_dir, 'rp_*.txt'))[0] motion = np.fromfile(motion_file, sep=' ') motion = motion.reshape(motion.shape[0] / 6, 6) preproc['motion'].append(motion) if isinstance(session, (list, np.ndarray)): scans = [os.path.join(session_dir, os.path.split(scan)[1].strip()) for scan in session] preproc.setdefault('swabold', []).append(scans) preproc.setdefault('abold', []).append( [strip_prefix_filename(scan, 2) for scan in scans]) preproc.setdefault('bold', []).append( [strip_prefix_filename(scan, 3) for scan in scans]) else: preproc.setdefault('swabold', []).append(session) preproc.setdefault('abold', []).append( strip_prefix_filename(session, 2)) preproc.setdefault('bold', []).append( strip_prefix_filename(session, 3)) return preproc
def parse_spm8_preproc(work_dir, step): doc = {} if hasattr(step, 'spatial') and hasattr(step.spatial, 'preproc'): doc['anatomy'] = makeup_path(work_dir, check_path(step.spatial.preproc.data)) doc['wmanatomy'] = prefix_filename(doc['anatomy'], 'wm') if hasattr(step, 'temporal'): doc['n_slices'] = int(step.temporal.st.nslices) doc['ref_slice'] = int(step.temporal.st.refslice) doc['slice_order'] = step.temporal.st.so.tolist() doc['ta'] = float(step.temporal.st.ta) doc['tr'] = float(step.temporal.st.tr) doc['bold'] = [] doc['swabold'] = [] if len(step.temporal.st.scans[0].shape) == 0: bold = [step.temporal.st.scans] else: bold = step.temporal.st.scans for session in bold: data_dir = find_data_dir(work_dir, str(session[0])) doc['bold'].append( check_paths([ os.path.join(data_dir, os.path.split(str(x))[1]) for x in session ])) doc['swabold'].append( check_paths([ prefix_filename( os.path.join(data_dir, os.path.split(str(x))[1]), 'swa') for x in session ])) doc['n_scans'] = [len(s) for s in doc['bold']] return doc