def read_args(argv=None): parser = su.add_default_args() parser.add_argument('-t', '--type', help='connection type', required=False, default='') parser.add_argument('--threshold', help='connection threshold', required=False, default=0, type=int) args = su.parse_args(parser, argv) rois_file_exist = op.isfile(op.join(su.get_mmvt_dir(), args.subject, 'rois_con.npz')) electrodes_file_exist = op.isfile(op.join(su.get_mmvt_dir(), args.subject, 'electrodes_con.npz')) if args.type == '': if rois_file_exist and electrodes_file_exist: raise Exception('More than one connection file exist, please select one using the -t flag') elif rois_file_exist: args.type = 'rois' elif electrodes_file_exist: args.type = 'electrodes' else: raise Exception('No connection file was found!\n'+ 'ROIs connection file: rois_con.npz\n' + 'Electrodes connection file: electrodes_con.npz') elif args.type == 'rois': if not rois_file_exist: raise Exception('You chose ROIs connection, but the file rois_con.npz does not exist!') elif args.type == 'electrodes': if not electrodes_file_exist: raise Exception('You chose electrodes connection, but the file electrodes_con.npz does not exist!') return args
def post_script(args): from src.utils import figures_utils as fu from src.utils import utils from src.mmvt_addon import clusters_utils as cu subject_fol = op.join(su.get_mmvt_dir(), args.subject) figures_fol = op.join(subject_fol, 'figures') clusters_file_names, _, _ = cu.get_clusters_files('fmri', subject_fol) clusters_names = [ f for f in clusters_file_names if args.clusters_type in f ] print('clusters_names: {}'.format(clusters_names)) fmri_files_minmax_fname = op.join(subject_fol, 'fmri', 'fmri_files_minmax_cm.pkl') data_min, data_max, colors_map_name = utils.load(fmri_files_minmax_fname) for clusters_name, inflated, background_color in product( clusters_names, args.inflated, args.background_color): print('Combing figures for {}, inflated: {}, background color: {}'. format(clusters_name, inflated, background_color)) perspectives_image_fname = fu.combine_four_brain_perspectives( figures_fol, inflated, args.dpi, background_color, clusters_name, args.inflated_ratio, True, args.overwrite) fu.combine_brain_with_color_bar( data_max, data_min, perspectives_image_fname, colors_map_name, args.overwrite, args.dpi, args.x_left_crop, args.x_right_crop, args.y_top_crop, args.y_buttom_crop, args.w_fac, args.h_fac, background_color)
def read_args(argv=None): parser = add_args() args = su.parse_args(parser, argv) if args.camera == '': args.camera = op.join(su.get_mmvt_dir(), args.subject, 'camera', 'camera.pkl') return args
def read_args(argv=None): parser = su.add_default_args() parser.add_argument('-r', '--radius', help='radius', required=False, default=0.15, type=float) parser.add_argument('-p', '--pos_file', help='position file', required=False, default='', type=su.str_arr_type) args = su.parse_args(parser, argv) if len(args.subjects) == 0: args.subjects = [args.subject] if len(args.pos_file) == 0: args.pos_file = [''] * len(args.subjects) pos_files = [] for subject, pos_file in zip(args.subjects, args.pos_file): args.subject = subject pos_files_fol = op.join(su.get_mmvt_dir(), args.subject, 'electrodes') if pos_file == '': pos_file_options = glob.glob(op.join(pos_files_fol, 'electrodes*positions*.npz')) if args.bipolar: pos_file_options = [fname for fname in pos_file_options if 'bipolar' in fname] else: pos_file_options = [fname for fname in pos_file_options if 'bipolar' not in fname] if len(pos_file_options) == 0: raise Exception('No electrodes position files in {}!'.format(pos_files_fol)) elif len(pos_file_options) == 1: pos_file = pos_file_options[0] print('electrodes file: {}'.format(pos_file)) else: raise Exception('More than one electrodes positions files in {}'.format(pos_files_fol) + 'please indicate which one using the -p flag') pos_files.append(pos_file) args.pos_file = pos_files if len(args.pos_file) == 1: args.pos_file = args.pos_file[0] return args
def create_new_subject_file(args): # Create a file for the new subject if len(args.subjects) == 0: args.subjects = [args.subject] for subject in args.subjects: args.subject = subject new_fname = su.get_subject_fname(args) empty_subject_fname = op.join(su.get_mmvt_dir(), "empty_subject.blend") if not op.isfile(empty_subject_fname): shutil.copy(op.join(su.get_resources_dir(), "empty_subject.blend"), empty_subject_fname) if op.isfile(new_fname): overwrite = input("The file {} already exist, do you want to overwrite? ".format(new_fname)) if su.is_true(overwrite): os.remove(new_fname) shutil.copy(op.join(su.get_mmvt_dir(), "empty_subject.blend"), new_fname) else: shutil.copy(op.join(su.get_mmvt_dir(), "empty_subject.blend"), new_fname)
def create_new_subject_file(args): # Create a file for the new subject if len(args.subjects) == 0: args.subjects = [args.subject] for subject in args.subjects: args.subject = subject new_fname = su.get_subject_fname(args) empty_subject_fname = op.join(su.get_mmvt_dir(), 'empty_subject.blend') if not op.isfile(empty_subject_fname): shutil.copy(op.join(su.get_resources_dir(), 'empty_subject.blend'), empty_subject_fname) if op.isfile(new_fname): overwrite = input('The file {} already exist, do you want to overwrite? '.format(new_fname)) if su.is_true(overwrite): os.remove(new_fname) shutil.copy(op.join(su.get_mmvt_dir(), 'empty_subject.blend'), new_fname) else: shutil.copy(op.join(su.get_mmvt_dir(), 'empty_subject.blend'), new_fname)
def render_electrodes_probs(subject_fname): args = read_args(su.get_python_argv()) figures_dir = su.get_figures_dir(args) if args.rel_output_path: args.output_path = op.join(figures_dir, args.output_path) su.make_dir(args.output_path) # Set the labeling file labeling_fname = '{}_{}_electrodes_cigar_r_*_l_*{}*.pkl'.format( args.subject, args.real_atlas, '_bipolar' if args.bipolar else '') labels_fol = op.join(su.get_mmvt_dir(), args.subject, 'electrodes') labeling_files = glob.glob(op.join(labels_fol, labeling_fname)) if len(labeling_files) == 0: print('No labeling files in {}!'.format(labels_fol)) return if len(labeling_files) > 1: print( 'More than one labeling files in {}, please choose one using the --labeling flag' .format(labels_fol)) return else: labeling_file = labeling_files[0] mmvt = su.init_mmvt_addon() mmvt.show_hide_hemi(args.hide_lh, 'lh') mmvt.show_hide_hemi(args.hide_rh, 'rh') mmvt.show_hide_sub_corticals(args.hide_subs) mmvt.set_render_quality(args.quality) mmvt.set_render_output_path(args.output_path) mmvt.set_render_smooth_figure(args.smooth_figure) if op.isfile(op.join(args.output_path, 'camera.pkl')): mmvt.load_camera() else: # Try to find the camera in the figures folder if op.isfile(op.join(figures_dir, 'camera.pkl')): mmvt.set_render_output_path(figures_dir) mmvt.load_camera() mmvt.set_render_output_path(args.output_path) else: cont = input( 'No camera file was detected in the output folder, continue?') if not su.is_true(cont): return mmvt.set_electrodes_labeling_file(labeling_file) mmvt.show_electrodes() mmvt.color_the_relevant_lables(True) leads = mmvt.get_leads() for lead in leads: electrodes = mmvt.get_lead_electrodes(lead) for electrode in electrodes: print(electrode) mmvt.clear_cortex() mmvt.set_current_electrode(electrode, lead) mmvt.render_image(electrode) su.save_blend_file(subject_fname) su.exit_blender()
def read_args(argv=None): parser = su.add_default_args() parser.add_argument('-r', '--radius', help='radius', required=False, default=0.15, type=float) parser.add_argument('-p', '--pos_file', help='position file', required=False, default='', type=su.str_arr_type) args = su.parse_args(parser, argv) if len(args.subjects) == 0: args.subjects = [args.subject] if len(args.pos_file) == 0: args.pos_file = [''] * len(args.subjects) pos_files = [] for subject, pos_file in zip(args.subjects, args.pos_file): args.subject = subject pos_files_fol = op.join(su.get_mmvt_dir(), args.subject, 'electrodes') if pos_file == '': pos_file_template = op.join(pos_files_fol, 'electrodes*positions*.npz') pos_file_options = glob.glob(pos_file_template) if args.bipolar: pos_file_options = [ fname for fname in pos_file_options if 'bipolar' in fname ] else: pos_file_options = [ fname for fname in pos_file_options if 'bipolar' not in fname ] if len(pos_file_options) == 0: raise Exception( 'No electrodes position files ({}) in {}!'.format( op.join(pos_files_fol, 'electrodes*positions*.npz'), pos_files_fol)) elif len(pos_file_options) == 1: pos_file = pos_file_options[0] print('electrodes file: {}'.format(pos_file)) else: pos_file = su.select_one_file(pos_file_options, pos_file_template, 'electrodes positions files') else: pos_file = op.join(pos_files_fol, '{}.npz'.format(su.namebase(pos_file))) if not op.isfile(pos_file): raise ("Can't find pos file! {}".format(pos_file)) pos_files.append(pos_file) args.pos_file = pos_files if len(args.pos_file) == 1: args.pos_file = args.pos_file[0] return args
def render_electrodes_probs(subject_fname): args = read_args(su.get_python_argv()) figures_dir = su.get_figures_dir(args) if args.rel_output_path: args.output_path = op.join(figures_dir, args.output_path) su.make_dir(args.output_path) # Set the labeling file labeling_fname = '{}_{}_electrodes_cigar_r_*_l_*{}*.pkl'.format(args.subject, args.real_atlas, '_bipolar' if args.bipolar else '') labels_fol = op.join(su.get_mmvt_dir(), args.subject, 'electrodes') labeling_files = glob.glob(op.join(labels_fol, labeling_fname)) if len(labeling_files) == 0: print('No labeling files in {}!'.format(labels_fol)) return if len(labeling_files) > 1: print('More than one labeling files in {}, please choose one using the --labeling flag'.format(labels_fol)) return else: labeling_file = labeling_files[0] mmvt = su.init_mmvt_addon() mmvt.show_hide_hemi(args.hide_lh, 'lh') mmvt.show_hide_hemi(args.hide_rh, 'rh') mmvt.show_hide_sub_corticals(args.hide_subs) mmvt.set_render_quality(args.quality) mmvt.set_render_output_path(args.output_path) mmvt.set_render_smooth_figure(args.smooth_figure) if op.isfile(op.join(args.output_path, 'camera.pkl')): mmvt.load_camera() else: # Try to find the camera in the figures folder if op.isfile(op.join(figures_dir, 'camera.pkl')): mmvt.set_render_output_path(figures_dir) mmvt.load_camera() mmvt.set_render_output_path(args.output_path) else: cont = input('No camera file was detected in the output folder, continue?') if not su.is_true(cont): return mmvt.set_electrodes_labeling_file(labeling_file) mmvt.show_electrodes() mmvt.color_the_relevant_lables(True) leads = mmvt.get_leads() for lead in leads: electrodes = mmvt.get_lead_electrodes(lead) for electrode in electrodes: print(electrode) mmvt.clear_cortex() mmvt.set_current_electrode(electrode, lead) mmvt.render_image(electrode) su.save_blend_file(subject_fname) su.exit_blender()
def read_args(argv=None): parser = su.add_default_args() parser.add_argument('-t', '--type', help='connection type', required=False, default='') parser.add_argument('--threshold', help='connection threshold', required=False, default=0, type=int) args = su.parse_args(parser, argv) rois_file_exist = op.isfile( op.join(su.get_mmvt_dir(), args.subject, 'rois_con.npz')) electrodes_file_exist = op.isfile( op.join(su.get_mmvt_dir(), args.subject, 'electrodes_con.npz')) if args.type == '': if rois_file_exist and electrodes_file_exist: raise Exception( 'More than one connection file exist, please select one using the -t flag' ) elif rois_file_exist: args.type = 'rois' elif electrodes_file_exist: args.type = 'electrodes' else: raise Exception('No connection file was found!\n' + 'ROIs connection file: rois_con.npz\n' + 'Electrodes connection file: electrodes_con.npz') elif args.type == 'rois': if not rois_file_exist: raise Exception( 'You chose ROIs connection, but the file rois_con.npz does not exist!' ) elif args.type == 'electrodes': if not electrodes_file_exist: raise Exception( 'You chose electrodes connection, but the file electrodes_con.npz does not exist!' ) return args
def read_args(argv=None): parser = su.add_default_args() parser.add_argument('-r', '--radius', help='radius', required=False, default=0.15, type=float) parser.add_argument('-p', '--pos_file', help='position file', required=False, default='', type=su.str_arr_type) args = su.parse_args(parser, argv) if len(args.subjects) == 0: args.subjects = [args.subject] if len(args.pos_file) == 0: args.pos_file = [''] * len(args.subjects) pos_files = [] for subject, pos_file in zip(args.subjects, args.pos_file): args.subject = subject pos_files_fol = op.join(su.get_mmvt_dir(), args.subject, 'electrodes') if pos_file == '': pos_file_options = glob.glob( op.join(pos_files_fol, 'electrodes*positions*.npz')) if args.bipolar: pos_file_options = [ fname for fname in pos_file_options if 'bipolar' in fname ] else: pos_file_options = [ fname for fname in pos_file_options if 'bipolar' not in fname ] if len(pos_file_options) == 0: raise Exception('No electrodes position files in {}!'.format( pos_files_fol)) elif len(pos_file_options) == 1: pos_file = pos_file_options[0] print('electrodes file: {}'.format(pos_file)) else: raise Exception( 'More than one electrodes positions files in {}'.format( pos_files_fol) + 'please indicate which one using the -p flag') pos_files.append(pos_file) args.pos_file = pos_files if len(args.pos_file) == 1: args.pos_file = args.pos_file[0] return args
def check_if_all_figures_were_rendered(args): from src.utils import figures_utils as fu from src.mmvt_addon import fMRI_panel as fmri subject_fol = op.join(su.get_mmvt_dir(), args.subject) figures_fol = op.join(subject_fol, 'figures') clusters_file_names, _ = fmri.get_clusters_files(subject_fol) clusters_names = [f for f in clusters_file_names if args.clusters_type in f] render_figures = False all_figures = [] for clusters_name, inflated, background_color in product(clusters_names, args.inflated, args.background_color): figures_fnames = fu.get_brain_perspectives_figures( figures_fol, inflated, background_color, clusters_name, args.inflated_ratio) all_figures.extend(figures_fnames) if any(not op.isfile(f) for f in figures_fnames): render_figures = True break return render_figures
def check_if_all_figures_were_rendered(args): from src.utils import figures_utils as fu from src.mmvt_addon import clusters_utils as cu subject_fol = op.join(su.get_mmvt_dir(), args.subject) figures_fol = op.join(subject_fol, 'figures') clusters_file_names, _, _ = cu.get_clusters_files('fmri', subject_fol) clusters_names = [ f for f in clusters_file_names if args.clusters_type in f ] render_figures = False all_figures = [] for clusters_name, inflated, background_color in product( clusters_names, args.inflated, args.background_color): figures_fnames = fu.get_brain_perspectives_figures( figures_fol, inflated, background_color, clusters_name, args.inflated_ratio) all_figures.extend(figures_fnames) if any(not op.isfile(f) for f in figures_fnames): render_figures = True break return render_figures
def post_script(args): from src.utils import figures_utils as fu from src.mmvt_addon import fMRI_panel as fmri from src.utils import utils subject_fol = op.join(su.get_mmvt_dir(), args.subject) figures_fol = op.join(subject_fol, 'figures') clusters_file_names, _ = fmri.get_clusters_files(subject_fol) clusters_names = [f for f in clusters_file_names if args.clusters_type in f] print('clusters_names: {}'.format(clusters_names)) fmri_files_minmax_fname = op.join(subject_fol, 'fmri', 'fmri_files_minmax_cm.pkl') data_min, data_max, colors_map_name = utils.load(fmri_files_minmax_fname) for clusters_name, inflated, background_color in product(clusters_names, args.inflated, args.background_color): print('Combing figures for {}, inflated: {}, background color: {}'.format( clusters_name, inflated, background_color)) perspectives_image_fname = fu.combine_four_brain_perspectives( figures_fol, inflated, args.dpi, background_color, clusters_name, args.inflated_ratio, True, args.overwrite) fu.combine_brain_with_color_bar( data_max, data_min, perspectives_image_fname, colors_map_name, args.overwrite, args.dpi, args.x_left_crop, args.x_right_crop, args.y_top_crop, args.y_buttom_crop, args.w_fac, args.h_fac, background_color)
def render_image(subject, atlas, image_name, output_path, quality=60, inflated=False, inflated_ratio=1, background_color='black', lighting=1.0, smooth_figure=False, hide_lh=False, hide_rh=False, hide_subs=False, show_elecs=False, bipolar=False, show_only_lead=False, curr_elec='', show_connections=False, filter_nodes=True, interactive=True, blender_fol='', subjects=''): image_name = [image_name] if isinstance(image_name, str) else image_name camera = [ op.join( su.get_mmvt_dir(), subject, 'camera', 'camera_{}{}.pkl'.format(camera_name, '_inf' if inflated else '')) for camera_name in image_name ] image_name = [ '{}_{}_{}'.format( name, 'inflated_{}'.format(inflated_ratio) if inflated else 'pial', background_color) for name in image_name ] camera = ','.join(camera) image_name = ','.join(image_name) args = su.Bag(locals()) su.call_script(__file__, args)