def transfer_electrodes_to_template_system(electrodes, template_system, use_mri_robust_lta=False, vox2vox=False): import time teamplte_electrodes = defaultdict(list) for subject in electrodes.keys(): # if subject != 'mg101': # continue now, N = time.time(), len(electrodes[subject]) for run, (elc_name, coords) in enumerate(electrodes[subject]): utils.time_to_go(now, run, N, runs_num_to_print=5) if use_mri_robust_lta: if vox2vox: template_cords = lta_transfer_vox2vox(subject, coords) else: template_cords = lta_transfer_ras2ras(subject, coords) else: if template_system == 'ras': template_cords = fu.transform_subject_to_ras_coordinates( subject, coords, SUBJECTS_DIR) elif template_system == 'mni': template_cords = fu.transform_subject_to_mni_coordinates( subject, coords, SUBJECTS_DIR) else: template_cords = fu.transform_subject_to_subject_coordinates( subject, template_system, coords, SUBJECTS_DIR) if template_cords is not None: teamplte_electrodes[subject].append((elc_name, template_cords)) return teamplte_electrodes
def prepare_darpa_csv(subject, bipolar, atlas, good_channels=None, groups_ordering=None, error_radius=3, elec_length=4, p_threshold=0.05): elecs_names, elecs_coords = elec_pre.read_electrodes_file(subject, bipolar) elecs_coords_mni = fu.transform_subject_to_mni_coordinates(subject, elecs_coords, SUBJECTS_DIR) elec_pre.save_electrodes_coords(elecs_names, elecs_coords_mni, good_channels) elecs_coords_mni_dic = {elec_name:elec_coord for (elec_name,elec_coord) in zip(elecs_names, elecs_coords_mni)} elecs_probs, _ = utils.get_electrodes_labeling(subject, BLENDER_ROOT_DIR, atlas, bipolar, error_radius, elec_length) assert(len(elecs_names) == len(elecs_coords_mni) == len(elecs_probs)) most_probable_rois = elec_pre.get_most_probable_rois(elecs_probs, p_threshold, good_channels) rois_colors = elec_pre.get_rois_colors(most_probable_rois) elec_pre.save_rois_colors_legend(subject, rois_colors, bipolar) utils.make_dir(op.join(BLENDER_ROOT_DIR, 'colin27', 'coloring')) results = defaultdict(list) for elec_name, elec_probs in zip(elecs_names, elecs_probs): assert(elec_name == elec_probs['name']) if not good_channels is None and elec_name not in good_channels: continue group = get_elec_group(elec_name, bipolar) roi = elec_pre.get_most_probable_roi([*elec_probs['cortical_probs'], *elec_probs['subcortical_probs']], [*elec_probs['cortical_rois'], *elec_probs['subcortical_rois']], p_threshold) color = rois_colors[utils.get_hemi_indifferent_roi(roi)] results[group].append(dict(name=elec_name, roi=roi, color=color)) coloring_fname = 'electrodes{}_coloring.csv'.format('_bipolar' if bipolar else '') with open(op.join(OUTPUT_DIR, '{}_electrodes_info.csv'.format(subject)), 'w') as csv_file, \ open(op.join(BLENDER_ROOT_DIR, 'colin27', 'coloring', coloring_fname), 'w') as colors_csv_file: csv_writer = csv.writer(csv_file, delimiter=',') colors_csv_writer = csv.writer(colors_csv_file, delimiter=',') elec_ind = 0 for group in groups_ordering: group_res = sorted(results[group], key=lambda x:natural_keys(x['name'])) for res in group_res: csv_writer.writerow([elec_ind, res['name'], *elecs_coords_mni_dic[res['name']], res['roi'], *res['color']]) colors_csv_writer.writerow([res['name'], *res['color']]) elec_ind += 1
def prepare_darpa_csv(subject, bipolar, atlas, good_channels=None, groups_ordering=None, error_radius=3, elec_length=4, p_threshold=0.05): elecs_names, elecs_coords = elec_pre.read_electrodes_file(subject, bipolar) elecs_coords_mni = fu.transform_subject_to_mni_coordinates( subject, elecs_coords, SUBJECTS_DIR) elec_pre.save_electrodes_coords(elecs_names, elecs_coords_mni, good_channels) elecs_coords_mni_dic = { elec_name: elec_coord for (elec_name, elec_coord) in zip(elecs_names, elecs_coords_mni) } elecs_probs, _ = utils.get_electrodes_labeling(subject, BLENDER_ROOT_DIR, atlas, bipolar, error_radius, elec_length) assert (len(elecs_names) == len(elecs_coords_mni) == len(elecs_probs)) most_probable_rois = elec_pre.get_most_probable_rois( elecs_probs, p_threshold, good_channels) rois_colors = elec_pre.get_rois_colors(most_probable_rois) elec_pre.save_rois_colors_legend(subject, rois_colors, bipolar) utils.make_dir(op.join(BLENDER_ROOT_DIR, 'colin27', 'coloring')) results = defaultdict(list) for elec_name, elec_probs in zip(elecs_names, elecs_probs): assert (elec_name == elec_probs['name']) if not good_channels is None and elec_name not in good_channels: continue group = get_elec_group(elec_name, bipolar) roi = elec_pre.get_most_probable_roi( [*elec_probs['cortical_probs'], *elec_probs['subcortical_probs']], [*elec_probs['cortical_rois'], *elec_probs['subcortical_rois']], p_threshold) color = rois_colors[utils.get_hemi_indifferent_roi(roi)] results[group].append(dict(name=elec_name, roi=roi, color=color)) coloring_fname = 'electrodes{}_coloring.csv'.format( '_bipolar' if bipolar else '') with open(op.join(OUTPUT_DIR, '{}_electrodes_info.csv'.format(subject)), 'w') as csv_file, \ open(op.join(BLENDER_ROOT_DIR, 'colin27', 'coloring', coloring_fname), 'w') as colors_csv_file: csv_writer = csv.writer(csv_file, delimiter=',') colors_csv_writer = csv.writer(colors_csv_file, delimiter=',') elec_ind = 0 for group in groups_ordering: group_res = sorted(results[group], key=lambda x: natural_keys(x['name'])) for res in group_res: csv_writer.writerow([ elec_ind, res['name'], *elecs_coords_mni_dic[res['name']], res['roi'], *res['color'] ]) colors_csv_writer.writerow([res['name'], *res['color']]) elec_ind += 1
def transform_electrodes_to_mni(subject, args): from src.utils import freesurfer_utils as fu elecs_names, elecs_coords = read_electrodes_file(subject, args.bipolar) elecs_coords_mni = fu.transform_subject_to_mni_coordinates(subject, elecs_coords, SUBJECTS_DIR) save_electrodes_coords(elecs_names, elecs_coords_mni, args.good_channels, args.bad_channels)