def read_xls(xls_fname, subject_to='colin27', atlas='aparc.DKTatlas', overwrite=False, check_morph_file=False): bipolar = True template_header = nib.load( op.join(SUBJECTS_DIR, subject_to, 'mri', 'T1.mgz')).header subjects_electrodes = defaultdict(list) electrodes_colors = defaultdict(list) for line in utils.xlsx_reader(xls_fname, skip_rows=1): subject, _, elec_name, _, anat_group = line subject = subject.replace('\'', '') if subject == '': break if check_morph_file: electrodes_fname = op.join( MMVT_DIR, subject, 'electrodes', 'electrodes_morph_to_{}.txt'.format(subject_to)) if not op.isfile(electrodes_fname): continue elec_group, num1, num2 = utils.elec_group_number(elec_name, bipolar) if '{}{}-{}'.format(elec_group, num2, num1) != elec_name: num1, num2 = str(num1).zfill(2), str(num2).zfill(2) if '{}{}-{}'.format(elec_group, num2, num1) != elec_name: raise Exception('Wrong group or numbers!') for num in [num1, num2]: subjects_electrodes[subject].append('{}{}'.format(elec_group, num)) electrodes_colors[subject].append((elec_name, int(anat_group))) subjects = list(subjects_electrodes.keys()) bad_subjects = [] for subject in subjects: atlas = utils.fix_atlas_name(subject, atlas, SUBJECTS_DIR) if not utils.both_hemi_files_exist( op.join(SUBJECTS_DIR, subject, 'label', '{}.{}.annot'.format( '{hemi}', atlas))): anat.create_annotation(subject, atlas) if not utils.both_hemi_files_exist( op.join(SUBJECTS_DIR, subject, 'label', '{}.{}.annot'.format('{hemi}', atlas))): print('No atlas for {}!'.format(atlas)) bad_subjects.append((subject, 'No atlas')) continue try: ela_morph_electrodes.calc_elas(subject, subject_to, subjects_electrodes[subject], bipolar=False, atlas=atlas, overwrite=overwrite) except: err = utils.print_last_error_line() bad_subjects.append((subject, err)) continue print(bad_subjects)
def read_xls(xls_fname, specific_subjects=None): subjects_electrodes = defaultdict(list) for line in utils.xlsx_reader(xls_fname, skip_rows=1): subject, elec1_name, elec2_name, cond, patient_id = line[:5] subject = subject.lower() if specific_subjects is not None and subject not in specific_subjects: continue elec1_coo, elec2_coo = line[5:8], line[8:11] subjects_electrodes[subject].append((elec1_name, elec2_name)) return subjects_electrodes
def read_xlsx(xlsx_fname): electrodes = {} for line_ind, line in enumerate(utils.xlsx_reader(xlsx_fname)): if line_ind == 0: header = line continue subject = line[0].lower() electrodes[subject] = defaultdict(list) for k in range(len(header) - 1): electrodes[subject][header[k + 1].lower()].extend( read_electrodes_from_cell(line[k + 1])) return electrodes
def read_onset_xlsx(xlsx_fname): subjects = [] for vals in utils.xlsx_reader(xlsx_fname, skip_rows=1): subject, _, elec_name = vals subject = subject.replace('\'', '') elec_group, elec_name = elec_name.replace('\'', '').split('.') elec_name1, elec_name2 = elec_name.split('-') elec_name = '{}{}-{}{}'.format(elec_group, elec_name2, elec_group, elec_name1) subjects.append("'{}'".format(subject)) # yield (subject, elec_name) print(','.join(subjects))
def read_morphed_electrodes(xls_fname, subject_to='colin27', bipolar=True, prefix='', postfix=''): output_fname = '{}electrodes{}_positions.npz'.format( prefix, '_bipolar' if bipolar else '', postfix) electrodes_colors = defaultdict(list) bad_electrodes = [] template_electrodes = defaultdict(list) morphed_electrodes_fname = op.join(MMVT_DIR, subject_to, 'electrodes', 'morphed_electrodes.pkl') if op.isfile(morphed_electrodes_fname): template_electrodes, electrodes_colors = utils.load( morphed_electrodes_fname) else: for line in utils.xlsx_reader(xls_fname, skip_rows=1): subject, _, elec_name, _, anat_group = line subject = subject.replace('\'', '') if subject == '': break elec_group, num1, num2 = utils.elec_group_number( elec_name, bipolar) if '{}{}-{}'.format(elec_group, num2, num1) != elec_name: num1, num2 = str(num1).zfill(2), str(num2).zfill(2) if '{}{}-{}'.format(elec_group, num2, num1) != elec_name: raise Exception('Wrong group or numbers!') elecs_pos = [] for num in num1, num2: elec_input_fname = op.join( MMVT_DIR, subject, 'electrodes', '{}{}_ela_morphed.npz'.format(elec_group, num)) if not op.isfile(elec_input_fname): print('{} not found!'.format(elec_input_fname)) bad_electrodes.append('{}_{}{}'.format( subject, elec_group, num)) else: d = np.load(elec_input_fname) elecs_pos.append(d['pos']) num1, num2 = (num1, num2) if num2 > num1 else (num2, num1) if len(elecs_pos) == 2: bipolar_ele_pos = np.mean(elecs_pos, axis=0) elec_name = '{}_{}{}-{}'.format(subject, elec_group, num1, num2) template_electrodes[subject].append( (elec_name, bipolar_ele_pos)) electrodes_colors[subject].append((elec_name, int(anat_group))) utils.save((template_electrodes, electrodes_colors), morphed_electrodes_fname) write_electrode_colors(subject_to, electrodes_colors) fol = utils.make_dir(op.join(MMVT_DIR, subject_to, 'electrodes')) output_fname = op.join(fol, output_fname) elecs_coordinates = np.array( utils.flat_list_of_lists([[e[1] for e in template_electrodes[subject]] for subject in template_electrodes.keys()])) elecs_names = utils.flat_list_of_lists( [[e[0] for e in template_electrodes[subject]] for subject in template_electrodes.keys()]) print('Saving {} electrodes in {}:'.format(subject_to, output_fname)) print(elecs_names) np.savez(output_fname, pos=elecs_coordinates, names=elecs_names, pos_org=[]) print('Bad electrodes:') print(bad_electrodes) return template_electrodes, electrodes_colors