From cdc8aa038ca304d74f08a5fc3b6752a6e6854a4b Mon Sep 17 00:00:00 2001 From: didihou <didi.hou@rwth-aachen.de> Date: Thu, 14 Sep 2023 13:50:33 +0200 Subject: [PATCH] / --- .../.ipynb_checkpoints/helpers-checkpoint.py | 164 ++++++++++++++++++ 1 file changed, 164 insertions(+) create mode 100644 figures/Schmidt2018/.ipynb_checkpoints/helpers-checkpoint.py diff --git a/figures/Schmidt2018/.ipynb_checkpoints/helpers-checkpoint.py b/figures/Schmidt2018/.ipynb_checkpoints/helpers-checkpoint.py new file mode 100644 index 0000000..1c2de12 --- /dev/null +++ b/figures/Schmidt2018/.ipynb_checkpoints/helpers-checkpoint.py @@ -0,0 +1,164 @@ +import numpy as np + +""" +Helper file collecting a number of necessary +imports for the plot scripts +""" + +area_list = ['V1', 'V2', 'VP', 'V3', 'V3A', 'MT', 'V4t', 'V4', 'VOT', 'MSTd', + 'PIP', 'PO', 'DP', 'MIP', 'MDP', 'VIP', 'LIP', 'PITv', 'PITd', + 'MSTl', 'CITv', 'CITd', 'FEF', 'TF', 'AITv', 'FST', '7a', 'STPp', + 'STPa', '46', 'AITd', 'TH'] + + +population_list = ['23E', '23I', '4E', '4I', '5E', '5I', '6E', '6I'] + +datapath = '../../multiarea_model/data_multiarea' +raw_datapath = '../../multiarea_model/data_multiarea/raw_data/' + +population_labels = ['2/3E', '2/3I', '4E', '4I', '5E', '5I', '6E', '6I'] +layer_labels = ['L1', 'L2', 'L3', 'L4', 'L5', 'L6'] +tex_names = {'23': 'twothree', '4': 'four', '5': 'five', '6': 'six'} + +# This path determines the location of the infomap +# installation and needs to be provided to execute the script for Fig. 7 +infomap_path = None + + +def hierarchical_relation(target_area, source_area, SLN_completed, thresh=(0.35, 0.65)): + """ + Returns the hierarchical relation between + two areas based on their SLN value (data + estimated). + + Parameters + ---------- + target_area : str + Name of target area. + source_area : str + Name of source area. + SLN_completed : dict + Dictionary of SLN values for pairs of areas. + thresh : tuple of floats + Threshold values to classify connections + as FF/FB/lateral. + + Returns + ------- + hierarchical_relation : str + Hierarchical relation between source + and target area. + """ + + if (target_area != source_area and + source_area in SLN_completed[target_area]): + if SLN_completed[target_area][source_area] > thresh[1]: + return 'FF' + elif SLN_completed[target_area][source_area] < thresh[0]: + return 'FB' + else: + return 'lateral' + else: + return 'same-area' + + +def structural_gradient(target_area, source_area, arch_types): + """ + Returns the structural gradient between two areas + See Schmidt, M., Bakker, R., Hilgetag, C.C. et al. + Brain Structure and Function (2018), 223:1409, + for a definition. + + Parameters + ---------- + target_area : str + Name of target area. + source_area : str + Name of source area. + arch_types : dict + Dictionary containing the architectural type for each area. + """ + if target_area != source_area: + if arch_types[target_area] < arch_types[source_area]: + return 'HL' + elif arch_types[target_area] > arch_types[source_area]: + return 'LH' + else: + return 'HZ' + else: + return 'same-area' + + +def write_out_lw(fn, C, std=False): + """ + Stores line widths for arrows in path figures + generated by pstricks to a txt file. + + Parameters + ---------- + fn : str + Filename of output file. + C : dict + Dictionary with line width values. + std : bool + Whether to write out mean or std values. + """ + if not std: + max_lw = 0.3 # This is an empirically determined value + scale_factor = max_lw / np.max(list(C.values())) + with open(fn, 'w') as f: + for pair, count in list(C.items()): + s = '\setboolean{{DRAW{}{}{}{}}}{{true}}'.format(tex_names[pair[0][:-1]], + pair[0][-1], + tex_names[pair[1][:-1]], + pair[1][-1]) + f.write(s) + f.write('\n') + s = '\def\{}{}{}{}{{{}}}'.format(tex_names[pair[0][:-1]], + pair[0][-1], + tex_names[pair[1][:-1]], + pair[1][-1], + float(count) * scale_factor) + f.write(s) + f.write('\n') + else: + max_lw = 0.3 + scale_factor = max_lw / np.max(list(C['mean'].values())) + with open(fn, 'w') as f: + for pair, count in list(C['mean'].items()): + s = '\setboolean{{DRAW\{}{}{}{}}}{{true}}'.format(tex_names[pair[0][:-1]], + pair[0][-1], + tex_names[pair[1][:-1]], + pair[1][-1]) + f.write('\n') + s = '\def\{}{}{}{}{{{}}}'.format(tex_names[pair[0][:-1]], + pair[0][-1], + tex_names[pair[1][:-1]], + pair[1][-1], + float(count) * scale_factor) + f.write('\n') + + for pair, count in list(C['1sigma'].items()): + f.write('\n') + s = '\def\{}{}{}{}sigma{{{}}}'.format(tex_names[pair[0][:-1]], + pair[0][-1], + tex_names[pair[1][:-1]], + pair[1][-1], + float(count) * scale_factor) + f.write('\n') + + +def area_population_list(structure, area): + """ + Construct list of all populations in an area. + + Parameters + ---------- + structure : dict + Dictionary defining the structure of each area. + area : str + Area to construct list for. + """ + complete = [] + for pop in structure[area]: + complete.append(area + '-' + pop) + return complete -- GitLab