<jupyter_start><jupyter_text>Figure 2 - Structural Laplacian Eigenmode Examples  Structural Connectome Complex Laplacian Eigenmodes:---Here we define a brain's structural connectivity as a graph $C_{i,j}$ with a white matter fiber tract distance adjacency matrix $D_{i,j}$. To incorporate the distance between brain regions information into our connectivity network, we expand the symmetric degree normalized Laplacian to a Laplacian matrix with a imaginary component. In Fourier space, the delays caused by physical fiber tract distances as well as transmission velocity becomes frequency dependent phases. Therefore, we define a "complex connectivity matrix" at any given angular frequency $\omega = 2\pi f$ as $$C^{*}(\omega) = c_{ij} e^{-j \omega \tau_{i,j}^{\nu}}$$$$C^{*}(\omega) = c_{ij}e^{-j D_{i,j} k}$$Where $k$ is the wave number. We can normalize $C*(\omega)$ by the degree of each node such that $C(\omega) = I - diag(\frac{1}{degree}) C^{*}(\omega)$. Then we compute the Laplacian of this complex structural connectivity matrix:$$ L = I - \alpha C(\omega)$$ Where $\alpha$ is the coupling strength parameter. Then we acquire the structural eigenmodes via the eigendecomposition:<jupyter_code>from ipywidgets import interactive, widgets, fixed
from surfer import Brain as surface
from matplotlib.colors import ListedColormap
from sklearn.preprocessing import minmax_scale

import os
import nibabel as nib
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

# spectrome imports
from spectrome.brain import Brain
from spectrome.utils import functions, path
#Function to get eigenmodes ready for Pysurfer visualizations:
def eigmode2plot(labels, slider_alpha, slider_k, em, lap_type = 'complex'):
    ## spectrome brain object with HCP connectome:
    hcp_dir = '../data'
    brain = Brain.Brain()
    brain.add_connectome(hcp_dir)
    brain.reorder_connectome(brain.connectome, brain.distance_matrix)
    brain.bi_symmetric_c()
    brain.reduce_extreme_dir()
    ## compute eigenmodes:
    if lap_type == 'complex':
        brain.decompose_complex_laplacian(alpha=slider_alpha, k=slider_k, num_ev=86)
        ## prep the eigenmodes for visualization
        lh_cort_eigs = minmax_scale(brain.norm_eigenmodes[0:34, em - 1]) # select the first for display
        rh_cort_eigs = minmax_scale(brain.norm_eigenmodes[34:68,em - 1]) # hemisphere selection
    elif lap_type == 'real':
        brain.decompose_regular_laplacian(alpha = slider_alpha, num_ev = 86, vis = False)
        ## prep the eigenmodes for visualization
        lh_cort_eigs = minmax_scale(brain.norm_eigenmodes[0:34, em - 1]) # select the first for display
        rh_cort_eigs = minmax_scale(brain.norm_eigenmodes[34:68,em - 1]) # hemisphere selection

    ## pad our eigenmodes for pysurfer requirements:
    lh_cort_padded = np.insert(lh_cort_eigs, [0,3], [0,0])
    rh_cort_padded = np.insert(rh_cort_eigs, [0,3], [0,0])

    lh_cort = lh_cort_padded[labels]
    rh_cort = rh_cort_padded[labels]
    
    return lh_cort, rh_cort, brain.norm_eigenmodes, em

def eigmode_widget(labels, surf_brain, slider_alpha, slider_k, em, hemi):
    ## define turbo colormap
    #turbo_colormap_data = [[0.18995,0.07176,0.23217],[0.19483,0.08339,0.26149],[0.19956,0.09498,0.29024],[0.20415,0.10652,0.31844],[0.20860,0.11802,0.34607],[0.21291,0.12947,0.37314],[0.21708,0.14087,0.39964],[0.22111,0.15223,0.42558],[0.22500,0.16354,0.45096],[0.22875,0.17481,0.47578],[0.23236,0.18603,0.50004],[0.23582,0.19720,0.52373],[0.23915,0.20833,0.54686],[0.24234,0.21941,0.56942],[0.24539,0.23044,0.59142],[0.24830,0.24143,0.61286],[0.25107,0.25237,0.63374],[0.25369,0.26327,0.65406],[0.25618,0.27412,0.67381],[0.25853,0.28492,0.69300],[0.26074,0.29568,0.71162],[0.26280,0.30639,0.72968],[0.26473,0.31706,0.74718],[0.26652,0.32768,0.76412],[0.26816,0.33825,0.78050],[0.26967,0.34878,0.79631],[0.27103,0.35926,0.81156],[0.27226,0.36970,0.82624],[0.27334,0.38008,0.84037],[0.27429,0.39043,0.85393],[0.27509,0.40072,0.86692],[0.27576,0.41097,0.87936],[0.27628,0.42118,0.89123],[0.27667,0.43134,0.90254],[0.27691,0.44145,0.91328],[0.27701,0.45152,0.92347],[0.27698,0.46153,0.93309],[0.27680,0.47151,0.94214],[0.27648,0.48144,0.95064],[0.27603,0.49132,0.95857],[0.27543,0.50115,0.96594],[0.27469,0.51094,0.97275],[0.27381,0.52069,0.97899],[0.27273,0.53040,0.98461],[0.27106,0.54015,0.98930],[0.26878,0.54995,0.99303],[0.26592,0.55979,0.99583],[0.26252,0.56967,0.99773],[0.25862,0.57958,0.99876],[0.25425,0.58950,0.99896],[0.24946,0.59943,0.99835],[0.24427,0.60937,0.99697],[0.23874,0.61931,0.99485],[0.23288,0.62923,0.99202],[0.22676,0.63913,0.98851],[0.22039,0.64901,0.98436],[0.21382,0.65886,0.97959],[0.20708,0.66866,0.97423],[0.20021,0.67842,0.96833],[0.19326,0.68812,0.96190],[0.18625,0.69775,0.95498],[0.17923,0.70732,0.94761],[0.17223,0.71680,0.93981],[0.16529,0.72620,0.93161],[0.15844,0.73551,0.92305],[0.15173,0.74472,0.91416],[0.14519,0.75381,0.90496],[0.13886,0.76279,0.89550],[0.13278,0.77165,0.88580],[0.12698,0.78037,0.87590],[0.12151,0.78896,0.86581],[0.11639,0.79740,0.85559],[0.11167,0.80569,0.84525],[0.10738,0.81381,0.83484],[0.10357,0.82177,0.82437],[0.10026,0.82955,0.81389],[0.09750,0.83714,0.80342],[0.09532,0.84455,0.79299],[0.09377,0.85175,0.78264],[0.09287,0.85875,0.77240],[0.09267,0.86554,0.76230],[0.09320,0.87211,0.75237],[0.09451,0.87844,0.74265],[0.09662,0.88454,0.73316],[0.09958,0.89040,0.72393],[0.10342,0.89600,0.71500],[0.10815,0.90142,0.70599],[0.11374,0.90673,0.69651],[0.12014,0.91193,0.68660],[0.12733,0.91701,0.67627],[0.13526,0.92197,0.66556],[0.14391,0.92680,0.65448],[0.15323,0.93151,0.64308],[0.16319,0.93609,0.63137],[0.17377,0.94053,0.61938],[0.18491,0.94484,0.60713],[0.19659,0.94901,0.59466],[0.20877,0.95304,0.58199],[0.22142,0.95692,0.56914],[0.23449,0.96065,0.55614],[0.24797,0.96423,0.54303],[0.26180,0.96765,0.52981],[0.27597,0.97092,0.51653],[0.29042,0.97403,0.50321],[0.30513,0.97697,0.48987],[0.32006,0.97974,0.47654],[0.33517,0.98234,0.46325],[0.35043,0.98477,0.45002],[0.36581,0.98702,0.43688],[0.38127,0.98909,0.42386],[0.39678,0.99098,0.41098],[0.41229,0.99268,0.39826],[0.42778,0.99419,0.38575],[0.44321,0.99551,0.37345],[0.45854,0.99663,0.36140],[0.47375,0.99755,0.34963],[0.48879,0.99828,0.33816],[0.50362,0.99879,0.32701],[0.51822,0.99910,0.31622],[0.53255,0.99919,0.30581],[0.54658,0.99907,0.29581],[0.56026,0.99873,0.28623],[0.57357,0.99817,0.27712],[0.58646,0.99739,0.26849],[0.59891,0.99638,0.26038],[0.61088,0.99514,0.25280],[0.62233,0.99366,0.24579],[0.63323,0.99195,0.23937],[0.64362,0.98999,0.23356],[0.65394,0.98775,0.22835],[0.66428,0.98524,0.22370],[0.67462,0.98246,0.21960],[0.68494,0.97941,0.21602],[0.69525,0.97610,0.21294],[0.70553,0.97255,0.21032],[0.71577,0.96875,0.20815],[0.72596,0.96470,0.20640],[0.73610,0.96043,0.20504],[0.74617,0.95593,0.20406],[0.75617,0.95121,0.20343],[0.76608,0.94627,0.20311],[0.77591,0.94113,0.20310],[0.78563,0.93579,0.20336],[0.79524,0.93025,0.20386],[0.80473,0.92452,0.20459],[0.81410,0.91861,0.20552],[0.82333,0.91253,0.20663],[0.83241,0.90627,0.20788],[0.84133,0.89986,0.20926],[0.85010,0.89328,0.21074],[0.85868,0.88655,0.21230],[0.86709,0.87968,0.21391],[0.87530,0.87267,0.21555],[0.88331,0.86553,0.21719],[0.89112,0.85826,0.21880],[0.89870,0.85087,0.22038],[0.90605,0.84337,0.22188],[0.91317,0.83576,0.22328],[0.92004,0.82806,0.22456],[0.92666,0.82025,0.22570],[0.93301,0.81236,0.22667],[0.93909,0.80439,0.22744],[0.94489,0.79634,0.22800],[0.95039,0.78823,0.22831],[0.95560,0.78005,0.22836],[0.96049,0.77181,0.22811],[0.96507,0.76352,0.22754],[0.96931,0.75519,0.22663],[0.97323,0.74682,0.22536],[0.97679,0.73842,0.22369],[0.98000,0.73000,0.22161],[0.98289,0.72140,0.21918],[0.98549,0.71250,0.21650],[0.98781,0.70330,0.21358],[0.98986,0.69382,0.21043],[0.99163,0.68408,0.20706],[0.99314,0.67408,0.20348],[0.99438,0.66386,0.19971],[0.99535,0.65341,0.19577],[0.99607,0.64277,0.19165],[0.99654,0.63193,0.18738],[0.99675,0.62093,0.18297],[0.99672,0.60977,0.17842],[0.99644,0.59846,0.17376],[0.99593,0.58703,0.16899],[0.99517,0.57549,0.16412],[0.99419,0.56386,0.15918],[0.99297,0.55214,0.15417],[0.99153,0.54036,0.14910],[0.98987,0.52854,0.14398],[0.98799,0.51667,0.13883],[0.98590,0.50479,0.13367],[0.98360,0.49291,0.12849],[0.98108,0.48104,0.12332],[0.97837,0.46920,0.11817],[0.97545,0.45740,0.11305],[0.97234,0.44565,0.10797],[0.96904,0.43399,0.10294],[0.96555,0.42241,0.09798],[0.96187,0.41093,0.09310],[0.95801,0.39958,0.08831],[0.95398,0.38836,0.08362],[0.94977,0.37729,0.07905],[0.94538,0.36638,0.07461],[0.94084,0.35566,0.07031],[0.93612,0.34513,0.06616],[0.93125,0.33482,0.06218],[0.92623,0.32473,0.05837],[0.92105,0.31489,0.05475],[0.91572,0.30530,0.05134],[0.91024,0.29599,0.04814],[0.90463,0.28696,0.04516],[0.89888,0.27824,0.04243],[0.89298,0.26981,0.03993],[0.88691,0.26152,0.03753],[0.88066,0.25334,0.03521],[0.87422,0.24526,0.03297],[0.86760,0.23730,0.03082],[0.86079,0.22945,0.02875],[0.85380,0.22170,0.02677],[0.84662,0.21407,0.02487],[0.83926,0.20654,0.02305],[0.83172,0.19912,0.02131],[0.82399,0.19182,0.01966],[0.81608,0.18462,0.01809],[0.80799,0.17753,0.01660],[0.79971,0.17055,0.01520],[0.79125,0.16368,0.01387],[0.78260,0.15693,0.01264],[0.77377,0.15028,0.01148],[0.76476,0.14374,0.01041],[0.75556,0.13731,0.00942],[0.74617,0.13098,0.00851],[0.73661,0.12477,0.00769],[0.72686,0.11867,0.00695],[0.71692,0.11268,0.00629],[0.70680,0.10680,0.00571],[0.69650,0.10102,0.00522],[0.68602,0.09536,0.00481],[0.67535,0.08980,0.00449],[0.66449,0.08436,0.00424],[0.65345,0.07902,0.00408],[0.64223,0.07380,0.00401],[0.63082,0.06868,0.00401],[0.61923,0.06367,0.00410],[0.60746,0.05878,0.00427],[0.59550,0.05399,0.00453],[0.58336,0.04931,0.00486],[0.57103,0.04474,0.00529],[0.55852,0.04028,0.00579],[0.54583,0.03593,0.00638],[0.53295,0.03169,0.00705],[0.51989,0.02756,0.00780],[0.50664,0.02354,0.00863],[0.49321,0.01963,0.00955],[0.47960,0.01583,0.01055]]
    #turbo = ListedColormap(turbo_colormap_data)
    
    ## spectrome brain object with HCP connectome:
    hcp_dir = '../data'
    brain = Brain.Brain()
    brain.add_connectome(hcp_dir)
    brain.reorder_connectome(brain.connectome, brain.distance_matrix)
    brain.bi_symmetric_c()
    brain.reduce_extreme_dir()
    ## compute eigenmodes:
    brain.decompose_complex_laplacian(alpha=slider_alpha, k=slider_k, num_ev=86)
    
    ## prep the eigenmodes for visualization
    lh_cort_eigs = minmax_scale(brain.norm_eigenmodes[0:34, em - 1]) # select the first for display
    rh_cort_eigs = minmax_scale(brain.norm_eigenmodes[34:68, em - 1]) # hemisphere selection

    ## pad our eigenmodes for pysurfer requirements:
    lh_cort_padded = np.insert(lh_cort_eigs, [0,3], [0,0])
    rh_cort_padded = np.insert(rh_cort_eigs, [0,3], [0,0])

    lh_cort = lh_cort_padded[labels]
    rh_cort = rh_cort_padded[labels]
    
    color_fmin = 0.50+lh_cort.min()
    color_fmax = 0.95*lh_cort.max()
    color_fmid = 0.65*lh_cort.max()
    
    if hemi == 'Left':
        surf_brain = surface(subject_id, "lh", surf, background = "white", alpha = 1, title = "Eigen Modes of Complex LaPlacian")
        surf_brain.add_data(lh_cort, hemi = 'lh', thresh = 0.20, colormap = plt.cm.autumn_r, remove_existing = True)
        surf_brain.scale_data_colormap(color_fmin, color_fmid, color_fmax, transparent = False)
    elif hemi == 'Right':
        surf_brain = surface(subject_id, "rh", surf, background = "white", alpha = 1, title = "Eigen Modes of Complex LaPlacian")
        surf_brain.add_data(rh_cort, hemi = "rh", thresh = 0.20, colormap = plt.cm.autumn_r, remove_existing = True)
        surf_brain.scale_data_colormap(color_fmin, color_fmid, color_fmax, transparent = False)
    elif hemi == 'Both':
        surf_brain = surface(subject_id, "both", surf, background = "white", alpha = 1, title = "Eigen Modes of Complex LaPlacian")
        surf_brain.add_data(lh_cort, hemi = 'lh', thresh = 0.20, colormap = plt.cm.autumn_r, remove_existing = True)
        surf_brain.add_data(rh_cort, hemi = "rh", thresh = 0.20, colormap = plt.cm.autumn_r, remove_existing = False)
        surf_brain.scale_data_colormap(color_fmin, color_fmid, color_fmax, transparent = False)
        
    return lh_cort, rh_cort, brain.norm_eigenmodes<jupyter_output><empty_output><jupyter_text>Set-up functional network dataset and parameters to plot (coupling strength and wave number):<jupyter_code>## parameters where we hold alpha constatnt and look for k behavior
param1 = np.array([1, 0.1])
param2 = np.array([1, 30])

## Load Yeo 2017's canonical network maps:
fc_dk = np.load('../data/com_dk.npy', allow_pickle = True).item()
fc_dk_normalized = pd.read_csv('../data/DK_dictionary_normalized.csv').set_index('Unnamed: 0')<jupyter_output><empty_output><jupyter_text>Initialize `pysurfer`:<jupyter_code>%gui qt

# set up Pysurfer variables
subject_id = "fsaverage"
hemi = ["lh","rh"]
surf = "white"

"""
Read in the automatic parcellation of sulci and gyri.
"""

hemi_side = "lh"
aparc_file = os.path.join(os.environ["SUBJECTS_DIR"],
                          subject_id, "label",
                          hemi_side + ".aparc.annot")
labels, ctab, names = nib.freesurfer.read_annot(aparc_file)<jupyter_output><empty_output><jupyter_text>Look at real laplacian first:<jupyter_code>lh_cort, rh_cort, eigs, em = eigmode2plot(labels, slider_alpha = param2[0], slider_k = param2[1], em = 3, lap_type = 'real')
# colormap:
color_fmin = 0.50+lh_cort.min()
color_fmax = 0.95*lh_cort.max()
color_fmid = 0.65*lh_cort.max()
reg_surf = surface(subject_id, 'lh', surf, background = 'white', alpha = 1, title = 'Eigenmodes of Regular Laplacian')
reg_surf.add_data(lh_cort, hemi = 'lh', thresh = 0.4, colormap = plt.cm.autumn_r, remove_existing = True)
reg_surf.scale_data_colormap(color_fmin, color_fmid, color_fmax, transparent = False)

## save figures?
reg_surf.show_view('lat')
reg_surf.save_image('%s_lat_%1d.svg' % ('reg', em))
reg_surf.show_view('med')
reg_surf.save_image('%s_med_%1d.svg' % ('reg', em))

reg_surf = surface(subject_id, 'both', surf, background = 'white', alpha = 1, title = 'Eigenmodes of Regular Laplacian')
reg_surf.add_data(lh_cort, hemi = 'lh', thresh = 0.4, colormap = plt.cm.autumn_r, remove_existing = True)
reg_surf.add_data(rh_cort, hemi = 'rh', thresh = 0.4, colormap = plt.cm.autumn_r, remove_existing = True)
reg_surf.scale_data_colormap(color_fmin, color_fmid, color_fmax, transparent = False)

reg_surf.show_view('dor')
reg_surf.save_image('%s_dor_%1d.svg' % ('reg', em))<jupyter_output><empty_output><jupyter_text>Visualize eigenmodes with the first set of parameters:<jupyter_code>## define turbo colormap
#turbo_colormap_data = [[0.18995,0.07176,0.23217],[0.19483,0.08339,0.26149],[0.19956,0.09498,0.29024],[0.20415,0.10652,0.31844],[0.20860,0.11802,0.34607],[0.21291,0.12947,0.37314],[0.21708,0.14087,0.39964],[0.22111,0.15223,0.42558],[0.22500,0.16354,0.45096],[0.22875,0.17481,0.47578],[0.23236,0.18603,0.50004],[0.23582,0.19720,0.52373],[0.23915,0.20833,0.54686],[0.24234,0.21941,0.56942],[0.24539,0.23044,0.59142],[0.24830,0.24143,0.61286],[0.25107,0.25237,0.63374],[0.25369,0.26327,0.65406],[0.25618,0.27412,0.67381],[0.25853,0.28492,0.69300],[0.26074,0.29568,0.71162],[0.26280,0.30639,0.72968],[0.26473,0.31706,0.74718],[0.26652,0.32768,0.76412],[0.26816,0.33825,0.78050],[0.26967,0.34878,0.79631],[0.27103,0.35926,0.81156],[0.27226,0.36970,0.82624],[0.27334,0.38008,0.84037],[0.27429,0.39043,0.85393],[0.27509,0.40072,0.86692],[0.27576,0.41097,0.87936],[0.27628,0.42118,0.89123],[0.27667,0.43134,0.90254],[0.27691,0.44145,0.91328],[0.27701,0.45152,0.92347],[0.27698,0.46153,0.93309],[0.27680,0.47151,0.94214],[0.27648,0.48144,0.95064],[0.27603,0.49132,0.95857],[0.27543,0.50115,0.96594],[0.27469,0.51094,0.97275],[0.27381,0.52069,0.97899],[0.27273,0.53040,0.98461],[0.27106,0.54015,0.98930],[0.26878,0.54995,0.99303],[0.26592,0.55979,0.99583],[0.26252,0.56967,0.99773],[0.25862,0.57958,0.99876],[0.25425,0.58950,0.99896],[0.24946,0.59943,0.99835],[0.24427,0.60937,0.99697],[0.23874,0.61931,0.99485],[0.23288,0.62923,0.99202],[0.22676,0.63913,0.98851],[0.22039,0.64901,0.98436],[0.21382,0.65886,0.97959],[0.20708,0.66866,0.97423],[0.20021,0.67842,0.96833],[0.19326,0.68812,0.96190],[0.18625,0.69775,0.95498],[0.17923,0.70732,0.94761],[0.17223,0.71680,0.93981],[0.16529,0.72620,0.93161],[0.15844,0.73551,0.92305],[0.15173,0.74472,0.91416],[0.14519,0.75381,0.90496],[0.13886,0.76279,0.89550],[0.13278,0.77165,0.88580],[0.12698,0.78037,0.87590],[0.12151,0.78896,0.86581],[0.11639,0.79740,0.85559],[0.11167,0.80569,0.84525],[0.10738,0.81381,0.83484],[0.10357,0.82177,0.82437],[0.10026,0.82955,0.81389],[0.09750,0.83714,0.80342],[0.09532,0.84455,0.79299],[0.09377,0.85175,0.78264],[0.09287,0.85875,0.77240],[0.09267,0.86554,0.76230],[0.09320,0.87211,0.75237],[0.09451,0.87844,0.74265],[0.09662,0.88454,0.73316],[0.09958,0.89040,0.72393],[0.10342,0.89600,0.71500],[0.10815,0.90142,0.70599],[0.11374,0.90673,0.69651],[0.12014,0.91193,0.68660],[0.12733,0.91701,0.67627],[0.13526,0.92197,0.66556],[0.14391,0.92680,0.65448],[0.15323,0.93151,0.64308],[0.16319,0.93609,0.63137],[0.17377,0.94053,0.61938],[0.18491,0.94484,0.60713],[0.19659,0.94901,0.59466],[0.20877,0.95304,0.58199],[0.22142,0.95692,0.56914],[0.23449,0.96065,0.55614],[0.24797,0.96423,0.54303],[0.26180,0.96765,0.52981],[0.27597,0.97092,0.51653],[0.29042,0.97403,0.50321],[0.30513,0.97697,0.48987],[0.32006,0.97974,0.47654],[0.33517,0.98234,0.46325],[0.35043,0.98477,0.45002],[0.36581,0.98702,0.43688],[0.38127,0.98909,0.42386],[0.39678,0.99098,0.41098],[0.41229,0.99268,0.39826],[0.42778,0.99419,0.38575],[0.44321,0.99551,0.37345],[0.45854,0.99663,0.36140],[0.47375,0.99755,0.34963],[0.48879,0.99828,0.33816],[0.50362,0.99879,0.32701],[0.51822,0.99910,0.31622],[0.53255,0.99919,0.30581],[0.54658,0.99907,0.29581],[0.56026,0.99873,0.28623],[0.57357,0.99817,0.27712],[0.58646,0.99739,0.26849],[0.59891,0.99638,0.26038],[0.61088,0.99514,0.25280],[0.62233,0.99366,0.24579],[0.63323,0.99195,0.23937],[0.64362,0.98999,0.23356],[0.65394,0.98775,0.22835],[0.66428,0.98524,0.22370],[0.67462,0.98246,0.21960],[0.68494,0.97941,0.21602],[0.69525,0.97610,0.21294],[0.70553,0.97255,0.21032],[0.71577,0.96875,0.20815],[0.72596,0.96470,0.20640],[0.73610,0.96043,0.20504],[0.74617,0.95593,0.20406],[0.75617,0.95121,0.20343],[0.76608,0.94627,0.20311],[0.77591,0.94113,0.20310],[0.78563,0.93579,0.20336],[0.79524,0.93025,0.20386],[0.80473,0.92452,0.20459],[0.81410,0.91861,0.20552],[0.82333,0.91253,0.20663],[0.83241,0.90627,0.20788],[0.84133,0.89986,0.20926],[0.85010,0.89328,0.21074],[0.85868,0.88655,0.21230],[0.86709,0.87968,0.21391],[0.87530,0.87267,0.21555],[0.88331,0.86553,0.21719],[0.89112,0.85826,0.21880],[0.89870,0.85087,0.22038],[0.90605,0.84337,0.22188],[0.91317,0.83576,0.22328],[0.92004,0.82806,0.22456],[0.92666,0.82025,0.22570],[0.93301,0.81236,0.22667],[0.93909,0.80439,0.22744],[0.94489,0.79634,0.22800],[0.95039,0.78823,0.22831],[0.95560,0.78005,0.22836],[0.96049,0.77181,0.22811],[0.96507,0.76352,0.22754],[0.96931,0.75519,0.22663],[0.97323,0.74682,0.22536],[0.97679,0.73842,0.22369],[0.98000,0.73000,0.22161],[0.98289,0.72140,0.21918],[0.98549,0.71250,0.21650],[0.98781,0.70330,0.21358],[0.98986,0.69382,0.21043],[0.99163,0.68408,0.20706],[0.99314,0.67408,0.20348],[0.99438,0.66386,0.19971],[0.99535,0.65341,0.19577],[0.99607,0.64277,0.19165],[0.99654,0.63193,0.18738],[0.99675,0.62093,0.18297],[0.99672,0.60977,0.17842],[0.99644,0.59846,0.17376],[0.99593,0.58703,0.16899],[0.99517,0.57549,0.16412],[0.99419,0.56386,0.15918],[0.99297,0.55214,0.15417],[0.99153,0.54036,0.14910],[0.98987,0.52854,0.14398],[0.98799,0.51667,0.13883],[0.98590,0.50479,0.13367],[0.98360,0.49291,0.12849],[0.98108,0.48104,0.12332],[0.97837,0.46920,0.11817],[0.97545,0.45740,0.11305],[0.97234,0.44565,0.10797],[0.96904,0.43399,0.10294],[0.96555,0.42241,0.09798],[0.96187,0.41093,0.09310],[0.95801,0.39958,0.08831],[0.95398,0.38836,0.08362],[0.94977,0.37729,0.07905],[0.94538,0.36638,0.07461],[0.94084,0.35566,0.07031],[0.93612,0.34513,0.06616],[0.93125,0.33482,0.06218],[0.92623,0.32473,0.05837],[0.92105,0.31489,0.05475],[0.91572,0.30530,0.05134],[0.91024,0.29599,0.04814],[0.90463,0.28696,0.04516],[0.89888,0.27824,0.04243],[0.89298,0.26981,0.03993],[0.88691,0.26152,0.03753],[0.88066,0.25334,0.03521],[0.87422,0.24526,0.03297],[0.86760,0.23730,0.03082],[0.86079,0.22945,0.02875],[0.85380,0.22170,0.02677],[0.84662,0.21407,0.02487],[0.83926,0.20654,0.02305],[0.83172,0.19912,0.02131],[0.82399,0.19182,0.01966],[0.81608,0.18462,0.01809],[0.80799,0.17753,0.01660],[0.79971,0.17055,0.01520],[0.79125,0.16368,0.01387],[0.78260,0.15693,0.01264],[0.77377,0.15028,0.01148],[0.76476,0.14374,0.01041],[0.75556,0.13731,0.00942],[0.74617,0.13098,0.00851],[0.73661,0.12477,0.00769],[0.72686,0.11867,0.00695],[0.71692,0.11268,0.00629],[0.70680,0.10680,0.00571],[0.69650,0.10102,0.00522],[0.68602,0.09536,0.00481],[0.67535,0.08980,0.00449],[0.66449,0.08436,0.00424],[0.65345,0.07902,0.00408],[0.64223,0.07380,0.00401],[0.63082,0.06868,0.00401],[0.61923,0.06367,0.00410],[0.60746,0.05878,0.00427],[0.59550,0.05399,0.00453],[0.58336,0.04931,0.00486],[0.57103,0.04474,0.00529],[0.55852,0.04028,0.00579],[0.54583,0.03593,0.00638],[0.53295,0.03169,0.00705],[0.51989,0.02756,0.00780],[0.50664,0.02354,0.00863],[0.49321,0.01963,0.00955],[0.47960,0.01583,0.01055]]
#turbo = ListedColormap(turbo_colormap_data)
#color_fmin, color_fmid, color_fmax = 0.1, 0.5, 0.95

# which eigenmode to display?
enumber = 3

lh_cort, rh_cort, eigs, em = eigmode2plot(labels, slider_alpha = param1[0], slider_k = param1[1], em = enumber)
# colormap:
color_fmin = 0.50+lh_cort.min()
color_fmax = 0.99*lh_cort.max()
color_fmid = 0.65*lh_cort.max()
## initialize pysurfer rendering:
sb = surface(subject_id, 'lh', surf, background = "white", cortex = 'classic', alpha = 1, title = "Eigen Modes of Complex LaPlacian")
sb.add_data(lh_cort, hemi = 'lh', thresh = 0.30, colormap = plt.cm.autumn_r, remove_existing = True)
sb.scale_data_colormap(color_fmin, color_fmid, color_fmax, transparent = False)

## show lateral and medial views of left hemisphere and save figures
sb.show_view('lat')
sb.save_image('%s_lat_%1d.svg' % ('par1', em))

sb.show_view('med')
sb.save_image('%s_med_%1d.svg' % ('par1', em))

sb = surface(subject_id, "both", surf, background = "white", alpha = 1, title = "Eigen Modes of Complex LaPlacian")
sb.add_data(rh_cort, hemi = 'rh', thresh = 0.30, colormap = plt.cm.autumn_r, remove_existing = True)
sb.add_data(lh_cort, hemi = 'lh', thresh = 0.30, colormap = plt.cm.autumn_r, remove_existing = True)
sb.scale_data_colormap(color_fmin, color_fmid, color_fmax, transparent = False)
## save figures?
sb.show_view('dor')
sb.save_image('%s_dor_%1d.svg' % ('par1', em))<jupyter_output>colormap sequential: [0.00e+00, 5.00e-01, 1.00e+00] (opaque)
colormap sequential: [5.00e-01, 6.50e-01, 9.90e-01] (opaque)
colormap sequential: [0.00e+00, 5.00e-01, 1.00e+00] (opaque)
colormap sequential: [0.00e+00, 5.00e-01, 1.00e+00] (opaque)
colormap sequential: [5.00e-01, 6.50e-01, 9.90e-01] (opaque)<jupyter_text>Repeat for second set of parameters:<jupyter_code>enumber = 3
lh_cort, rh_cort, eigs, em = eigmode2plot(labels, slider_alpha = param2[0], slider_k = param2[1], em = enumber)
# colormap:
color_fmin = 0.35+lh_cort.min()
color_fmax = 0.99*lh_cort.max()
color_fmid = 0.60*lh_cort.max()
sb = surface(subject_id, 'lh', surf, background = "white", alpha = 1, title = "Eigen Modes of Complex LaPlacian")
sb.add_data(lh_cort, hemi = 'lh', thresh = 0.25, colormap = plt.cm.autumn_r, remove_existing = True)
sb.scale_data_colormap(color_fmin, color_fmid, 1, transparent = False)

## save figures?
sb.show_view('lat')
sb.save_image('%s_lat_%1d.svg' % ('par2', em))
sb.show_view('med')
sb.save_image('%s_med_%1d.svg' % ('par2', em))

sb = surface(subject_id, "both", surf, background = "white", alpha = 1, title = "Eigen Modes of Complex LaPlacian")
sb.add_data(lh_cort, hemi = 'lh', thresh = 0.25, colormap = plt.cm.autumn_r, remove_existing = True)
sb.add_data(rh_cort, hemi = 'rh', thresh = 0.25, colormap = plt.cm.autumn_r, remove_existing = True)
sb.scale_data_colormap(color_fmin, color_fmid, color_fmax, transparent = False)

## save figures?
sb.show_view('dor')
sb.save_image('%s_dor_%1d.svg' % ('par2', em))<jupyter_output>colormap sequential: [0.00e+00, 5.00e-01, 1.00e+00] (opaque)
colormap sequential: [3.50e-01, 6.00e-01, 1.00e+00] (opaque)
colormap sequential: [0.00e+00, 5.00e-01, 1.00e+00] (opaque)
colormap sequential: [0.00e+00, 5.00e-01, 1.00e+00] (opaque)
colormap sequential: [3.50e-01, 6.00e-01, 9.90e-01] (opaque)<jupyter_text>Try another set of parameters with higher $\alpha$:<jupyter_code>param3 = [5.0, 30]
enumber = 3
lh_cort, rh_cort, eigs, em = eigmode2plot(labels, slider_alpha = param3[0], slider_k = param3[1], em = enumber)
# colormap:
color_fmin = 0.35+lh_cort.min()
color_fmax = 0.99*lh_cort.max()
color_fmid = 0.68*lh_cort.max()
sb = surface(subject_id, 'lh', surf, background = "white", alpha = 1, title = "Eigen Modes of Complex LaPlacian")
sb.add_data(lh_cort, hemi = 'lh', thresh = 0.35, colormap = plt.cm.autumn_r, remove_existing = True)
sb.scale_data_colormap(color_fmin, color_fmid, 1, transparent = False)

## save figures?
sb.show_view('lat')
sb.save_image('%s_lat_%1d.svg' % ('par3', em))
sb.show_view('med')
sb.save_image('%s_med_%1d.svg' % ('par3', em))

sb = surface(subject_id, "both", surf, background = "white", alpha = 1, title = "Eigen Modes of Complex LaPlacian")
sb.add_data(lh_cort, hemi = 'lh', thresh = 0.35, colormap = plt.cm.autumn_r, remove_existing = True)
sb.add_data(rh_cort, hemi = 'rh', thresh = 0.35, colormap = plt.cm.autumn_r, remove_existing = True)
sb.scale_data_colormap(color_fmin, color_fmid, color_fmax, transparent = False)

## save figures?
sb.show_view('dor')
sb.save_image('%s_dor_%1d.svg' % ('par3', em))<jupyter_output>colormap sequential: [0.00e+00, 5.00e-01, 1.00e+00] (opaque)
colormap sequential: [3.50e-01, 6.80e-01, 1.00e+00] (opaque)
colormap sequential: [0.00e+00, 5.00e-01, 1.00e+00] (opaque)
colormap sequential: [0.00e+00, 5.00e-01, 1.00e+00] (opaque)
colormap sequential: [3.50e-01, 6.80e-01, 9.90e-01] (opaque)<jupyter_text>initiate ipywidgets for parameter exploration.<jupyter_code>#%matplotlib inline
interactive(eigmode_widget, labels = fixed(labels), surf_brain = fixed(sb),
            slider_alpha = widgets.FloatSlider(min=0.2,max=5,step=0.1,value=2.5, description = 'Coupling Strength',continuous_update=False),
            slider_k = widgets.IntSlider(min = 0, max = 50, step = 1, value = 2, description = 'Wave Number',continuous_update=False),
            em = widgets.IntSlider(min = 1, max = 10, step = 1, value = 3, description = 'Eigenmode Number',continuous_update=False),
            hemi = widgets.RadioButtons(options = ['Left', 'Right', 'Both'], value = 'Left', description = 'Select hemisphere'))<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.2219526759722326, 'fraction_numerical': 0.36142419944763754, 'mean_word_length': 6.098013245033113, 'pattern_counts': {'":': 0, '<': 30, '<?xml version=': 0, '>': 30, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '8', 'dir': 'jupyter-structured-clean-dedup', 'id': '146808', 'license': 'MIT', 'n_tokens_mistral': 18358, 'n_tokens_neox': 13018, 'n_words': 1159, 'path': 'notebooks/01_eigenmode_examples.ipynb', 'repo_name': 'axiezai/complex_laplacian', 'size': '26794'}