コード例 #1
0
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)
コード例 #2
0
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
コード例 #3
0
ファイル: show_caudate_dlpfc.py プロジェクト: ltirrell/mmvt
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
コード例 #4
0
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))
コード例 #5
0
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