Source code for BrainNetworksInPython.scripts.make_pysurfer_pictures

#!/usr/bin/env python


[docs]def pysurfer_308_parcellation(aparc_names, paper_dir): import pandas as pd import numpy as np import os df = pd.DataFrame(aparc_names) df['names_158'] = [ x.split('_',1)[1] for x in aparc_names ] color_vals = np.arange(158) np.random.shuffle(color_vals) for i, (name, data) in enumerate(df.groupby(['names_158'])): df.loc[(df['names_158']== name), 'color_val'] = color_vals[i] output_dir = os.path.join(paper_dir, 'COMBINED_FIGURES', 'PARCELLATION') if not os.path.isdir(output_dir): os.makedirs(output_dir) # Save the values to text file fname = os.path.join(output_dir, 'Parcellation_308_random_matched_hemis.csv') np.savetxt(fname, df['color_val'], fmt='%i') return fname
[docs]def create_pysurfer_command(roi_file, scripts_dir, sub_data_dir, c='jet', l=None, u=None, t=-99, s='pial', cst='classic', center=False, c2=None, t2=None): ''' Create a text string containing the appropriate options for the pysurfer command ''' import os # Create the command for pysurfer and run it # start by putting in the name of the code with its path command_list = [ os.path.join(scripts_dir, 'pysurfer_plot_500parcellation_surface_values.py') ] # Set the subject directory command_list += [ '-sd {}'.format(sub_data_dir) ] # Set the surface if s: command_list += [ '-s {}'.format(s) ] # Set the colormap if c: command_list += [ '-c {}'.format(c) ] # Set the other colormap if c2: command_list += [ '-c2 {}'.format(c2) ] # Set the colormap limits if l: command_list += [ '-l {}'.format(l) ] if u: command_list += [ '-u {}'.format(u) ] # Set the threshold if t: command_list += [ '-t {}'.format(t) ] # Set the other threshold if t2: command_list += [ '-t2 {}'.format(t2) ] # Center if necessary if center: command_list += [ '--center' ] # Change the cortex style if necessary if cst: command_list += [ '-cst {}'.format(cst) ] # And add the filename command_list += [ roi_file ] # Finally join it all together into one string command = ' '.join(command_list) return command
[docs]def write_to_text(measure_dict, pysurfer_dir, measure_name, covars_name='none'): ''' mpm is the mpm measure you're investigating (eg: MT) For example: write_to_text(measure_dict, pysurfer_dir, 'corr_age_coavars_site_c14', 'SlopeAge_at14_covars_site') ''' import os import numpy as np covars_dict = measure_dict['308']['COVARS_{}'.format(covars_name)] output_dir = os.path.join(pysurfer_dir, 'COVARS_{}'.format(covars_name)) if not os.path.isdir(output_dir): os.makedirs(output_dir) # Save the values to text file x = covars_dict[measure_name.split('_movie')[0]] fname = os.path.join(output_dir, '{}.txt'.format(measure_name)) np.savetxt(fname, x, fmt='%5.5f') return fname
[docs]def get_cmap_min_max_dict(measure_list): cmap_min_max_dict = {} # MOVIE MAPS mt_c14_list = [ x for x in measure_list if x.startswith('MT_proj') and x.endswith('regional_corr_age_c14') ] for measure in mt_c14_list: cmap_min_max_dict['{}_movie'.format(measure)] = ( 'jet', 0.4, 1.8 ) slope_measure = measure.replace('_c14', '_m') cmap_min_max_dict['{}_movie'.format(slope_measure)] = ( 'RdBu_r', -0.007, 0.007 ) # CT maps: cmap_min_max_dict['CT_regional_corr_age_c14'] = ( 'jet', 2.5, 3.5 ) cmap_min_max_dict['CT_regional_corr_age_m'] = ( 'RdBu_r', -0.03, 0.03 ) cmap_min_max_dict['CT_regional_corr_age_m_masked_p_fdr'] = ( 'winter_r', -0.03, -0.01 ) # MT_projfrac+030 maps: cmap_min_max_dict['MT_projfrac+030_regional_corr_age_c14'] = ( 'jet', 0.8, 1.0 ) cmap_min_max_dict['MT_projfrac+030_regional_corr_age_m'] = ( 'RdBu_r', -0.007, 0.007 ) cmap_min_max_dict['MT_projfrac+030_regional_corr_age_m_masked_p_fdr'] = ( 'autumn', 0.002, 0.007 ) # PLS maps cmap_min_max_dict['PLS1_with99s'] = ( 'RdBu_r', -0.07, 0.07 ) cmap_min_max_dict['PLS2_with99s'] = ( 'RdBu_r', -0.07, 0.07 ) return cmap_min_max_dict
[docs]def make_pysurfer_figures(measure_dict, pysurfer_dir, sub_data_dir, scripts_dir, paper_dir, overwrite=False): import os import itertools as it #---------------------------------------------------------------- # Define the covars dictionary covars_dict = { 'gender' : ['male'], 'site' : ['wbic', 'ucl'], 'gender_site' : ['male', 'wbic', 'ucl'], 'none' : [] } covars_dict = { 'none' : [] } #---------------------------------------------------------------- # Define the measures we want to write out sub_dict = measure_dict['308']['COVARS_none'] measure_list = [] measure_list += [ x for x in sub_dict.keys() if x.endswith('_regional_corr_age_m') ] measure_list += [ x for x in sub_dict.keys() if x.endswith('_regional_corr_age_c14') ] measure_list += [ 'CT_regional_corr_age_m_masked_p_fdr' ] measure_list += [ 'MT_projfrac+030_regional_corr_age_m_masked_p_fdr' ] measure_list += [ 'MT_projfrac+030_regional_corr_age_m_masked_p_fdr' ] # Get the colormaps and min/max values cmap_min_max_dict = get_cmap_min_max_dict(measure_list) #---------------------------------------------------------------- for covars_name, measure in it.product(covars_dict.keys(), cmap_min_max_dict.keys()): # Start by writing out the text files fname = write_to_text(measure_dict, pysurfer_dir, measure, covars_name=covars_name) # # Create the pysurfer command command = create_pysurfer_command(fname, scripts_dir, sub_data_dir, c=cmap_min_max_dict[measure][0], l=cmap_min_max_dict[measure][1], u=cmap_min_max_dict[measure][2], t=-98, s='pial', cst='classic', center=False) # Make the pictures if they haven't been made already png_file = os.path.join(pysurfer_dir, 'COVARS_{}'.format(covars_name), 'PNGS', '{}_pial_classic_combined.png'.format(measure)) if overwrite or not os.path.isfile(png_file): os.system(command) #---------------------------------------------------------------- # and lastly the atlas regions fname = pysurfer_308_parcellation(measure_dict['308']['aparc_names'], paper_dir) command = create_pysurfer_command(fname, scripts_dir, sub_data_dir, c='jet', s='pial', cst='classic', center=False) # Make the pictures if they haven't been made already png_file = os.path.join(paper_dir, 'COMBINED_FIGURES', 'PARCELLATION', 'PNGS', 'Parcellation_308_random_matched_hemis_pial_classic_combined.png') if overwrite or not os.path.isfile(png_file): os.system(command)