diff --git a/evaluation/4Layer Bootstrap.py b/evaluation/4Layer Bootstrap.py index 8562d81..2ff87a1 100644 --- a/evaluation/4Layer Bootstrap.py +++ b/evaluation/4Layer Bootstrap.py @@ -26,12 +26,12 @@ def resultant(sample): def H2(x): return -x*m.log2(x)-(1-x)*m.log2(1-x) -extremes = 50000 -maxdt = 500 +extremes = None +maxdt = 300 -for dim in [7]: +for dim in [9]: for eps in eps_space: - path=f'/cloud/Public/_data/neuropercolation/4lay/steps=1000100/dim={dim:02}/' + path=f'/cloud/Public/_data/neuropercolation/4lay/cons=27-3diag_steps=1000100/dim=09/batch=0/' try: with open(path+f"eps={round(eps,3):.3f}_phase_diff.txt", 'r', encoding='utf-8') as f: @@ -49,6 +49,7 @@ for dim in [7]: all_res = norm(resultant(phase_diff)) + av_diff = np.arccos(all_res) try: with open(path+f"eps={round(eps,3):.3f}_ei.txt", 'r', encoding='utf-8') as f: @@ -62,39 +63,75 @@ for dim in [7]: with open(path+f"eps={round(eps,3):.3f}_ei.txt", 'w', encoding='utf-8') as f: json.dump(ei, f, indent=1) - bot_ei = sorted(enumerate(ei[:-maxdt]), key = lambda x: x[1])[ extremes] - top_ei = sorted(enumerate(ei[:-maxdt]), key = lambda x: x[1])[-extremes] + pha_center = av_diff + pha_dev = m.pi/8 + orth_ind = sorted([i for i,val in enumerate(ei[:-maxdt]) if (pha_center-pha_dev)<=abs(phase_diff[i])<=(pha_center+pha_dev)], key = lambda i: ei[i]) - bot_ei_pool = [ei for ei in enumerate(ei[:-maxdt]) if ei[1] <= bot_ei[1]] - top_ei_pool = [ei for ei in enumerate(ei[:-maxdt]) if ei[1] >= top_ei[1]] + if extremes is None: + extremes = len(orth_ind)//4000*1000 + + print(len(orth_ind)) + #print(all_res, av_diff) - bot_eis = choose(bot_ei_pool, extremes) - top_eis = choose(top_ei_pool, extremes) - bot_ind = [enum[0] for enum in bot_eis] - top_ind = [enum[0] for enum in top_eis] + bot_ind = orth_ind[ :extremes] + top_ind = orth_ind[-extremes: ] + + # bot_ei_pool = [ei for ei in enumerate(ei[:-maxdt]) if ei[1] <= bot_ei[1]] + # top_ei_pool = [ei for ei in enumerate(ei[:-maxdt]) if ei[1] >= top_ei[1]] + + # bot_eis = choose(bot_ei_pool, extremes) + # top_eis = choose(top_ei_pool, extremes) + + # bot_ind = [enum[0] for enum in bot_ei] + # top_ind = [enum[0] for enum in top_ei] bot_res = [] top_res = [] + orth_res = [] + tot_res = [] + + bot_ei = [] + top_ei = [] + orth_ei = [] + tot_ei = [] for dt in range(maxdt): - bot_pha = [phase_diff[i+dt] for i in bot_ind] - top_pha = [phase_diff[i+dt] for i in top_ind] + bot_res.append( norm(resultant([phase_diff[i+dt] for i in bot_ind])) ) + top_res.append( norm( resultant([phase_diff[i+dt] for i in top_ind])) ) + orth_res.append( norm( resultant([phase_diff[i+dt] for i in orth_ind])) ) + tot_res.append( norm( resultant(phase_diff[dt:dt-maxdt])) ) + + bot_ei.append( np.average([ei[i+dt] for i in bot_ind]) ) + top_ei.append( np.average([ei[i+dt] for i in top_ind]) ) + orth_ei.append( np.average([ei[i+dt] for i in orth_ind]) ) + tot_ei.append( np.average(ei[dt:dt-maxdt]) ) - bot_res.append( norm(resultant(bot_pha)) ) - top_res.append( norm(resultant(top_pha)) ) if dt%100==99: print(f'Done dt={dt}') qtplot(f'Diachronic resultant for dim={dim} with 4 layers', - [np.array(range(maxdt))]*3, - [bot_res, top_res, [all_res]*maxdt], - ['Resultant ev of bottom 100 ei', 'Resultant ev of top 100 ei', 'Average Resultant'], + [np.array(range(maxdt))]*4, + [bot_res, top_res, orth_res, tot_res], + ['Resultant ev of bottom {extremes} ei', 'Resultant ev of top {extremes} ei', + 'Resultant ev of phase filtered ei', 'Average Resultant'], x_tag = 'dt', y_tag = 'concentration', export=True, path=path, - filename=f'Diachronic Resultant for eps={round(eps,3)} dim={dim} extremes={extremes}.png', + filename=f'Diachronic Resultant for eps={round(eps,3):.3f} dim={dim} extremes={extremes} roll{pha_dev:.3f}.png', + close=True) + + qtplot(f'Diachronic ei for dim={dim} with 4 layers', + [np.array(range(maxdt))]*4, + [bot_ei, top_ei, orth_ei, tot_ei], + ['EI ev of bottom {extremes} ei', 'EI ev of top {extremes} ei', + 'EI ev of phase filtered ei', 'Average EI'], + x_tag = 'dt', + y_tag = 'average ei', + export=True, + path=path, + filename=f'Diachronic EI for eps={round(eps,3):.3f} dim={dim} extremes={extremes} roll{pha_dev:.3f}.png', close=True) print(f'Done eps={eps:.3f} with dim={dim} at {datetime.now()}') diff --git a/evaluation/4Layer EI to Phase Survey.py b/evaluation/4Layer EI to Phase Survey.py new file mode 100644 index 0000000..473e1ac --- /dev/null +++ b/evaluation/4Layer EI to Phase Survey.py @@ -0,0 +1,92 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +Created on Mon Aug 21 14:59:22 2023 + +@author: astral +""" + +import json +import math as m +import numpy as np +from numpy.linalg import norm +from datetime import datetime +from random import sample as choose + +from plot import qtplot + +eps_space = list(np.linspace(0.01,0.2,20)) + +def resultant(sample): + phase_x = [m.cos(ind) for ind in sample] + phase_y = [m.sin(ind) for ind in sample] + + return (np.average(phase_x), np.average(phase_y)) + +def H2(x): + return -x*m.log2(x)-(1-x)*m.log2(1-x) + +extremes = 50000 +maxdt = 500 + +for dim in [7]: + for eps in eps_space: + path=f'/cloud/Public/_data/neuropercolation/4lay/cons=14_steps=1000100/dim={dim:02}/batch=0/' + + try: + with open(path+f"eps={round(eps,3):.3f}_phase_diff.txt", 'r', encoding='utf-8') as f: + phase_diff = json.load(f) + except: + with open(path+f"eps={round(eps,3):.3f}_activation.txt", 'r', encoding='utf-8') as f: + activation = json.load(f)[100:] + + osc = list(zip(*activation)) + phase = np.array([[np.arctan2(*act[::-1]) for act in osc[i]] for i in range(2)]) + phase_diff = (phase[1]-phase[0]+m.pi)%(2*m.pi)-m.pi + + with open(path+f"eps={round(eps,3):.3f}_phase_diff.txt", 'w', encoding='utf-8') as f: + json.dump(list(phase_diff), f, indent=1) + + + all_res = norm(resultant(phase_diff)) + + try: + with open(path+f"eps={round(eps,3):.3f}_channelsum.txt", 'r', encoding='utf-8') as f: + chasum = json.load(f) + except: + with open(path+f"eps={round(eps,3):.3f}_channels.txt", 'r', encoding='utf-8') as f: + channels = json.load(f)[100:] + + chasum = [int(np.sum(cha)) for cha in channels] + + with open(path+f"eps={round(eps,3):.3f}_channelsum.txt", 'w', encoding='utf-8') as f: + json.dump(chasum, f, indent=1) + + maxchas = max(chasum) + + res = [norm(resultant([pha for i, pha in enumerate(phase_diff) if chasum[i]==n])) for n in range(maxchas+1) if len([pha for i, pha in enumerate(phase_diff) if chasum[i]==n])>=20] + #dist = [len([pha for i, pha in enumerate(phase_diff) if chasum[i]==n]) for n in range(maxchas+1)] + + qtplot(f'Channel-Resultant for dim={dim}', + [list(range(len(res)))], + [res], + [f'Resultant against open channels'], + x_tag = 'open channels', + y_tag = 'resultant', + export=True, + path=path, + filename=f'Channel-Resultant eps={round(eps,3):.3f} dim={dim}.png', + close=True) + + print(f'Done eps={eps:.3f} with dim={dim} at {datetime.now()}') + + # qtplot(f'Resultant and EI evolution for dim={dim} with 4 layers', + # [[0]+eps_space]*2, + # [max(av_ei)*diff_res, av_ei], + # ['Resultant', 'avEI'], + # export=True, + # path=path, + # filename=f'Resultant and EI for dim={dim}.png', + # close=True) + + \ No newline at end of file diff --git a/evaluation/4Layer Survey.py b/evaluation/4Layer Phase to EI Survey.py similarity index 65% rename from evaluation/4Layer Survey.py rename to evaluation/4Layer Phase to EI Survey.py index 5b1c8a8..1e5af45 100644 --- a/evaluation/4Layer Survey.py +++ b/evaluation/4Layer Phase to EI Survey.py @@ -29,14 +29,16 @@ def H2(x): extremes = 50000 maxdt = 500 -for dim in [7]: - for eps in eps_space: - path=f'/cloud/Public/_data/neuropercolation/4lay/steps=1000100/dim={dim:02}/' +for dim in [9]: + for eps in eps_space[:1]: + path=f'/cloud/Public/_data/neuropercolation/4lay/cons=9-3dist_steps=1000100/dim=09/batch=0/' try: with open(path+f"eps={round(eps,3):.3f}_phase_diff.txt", 'r', encoding='utf-8') as f: phase_diff = json.load(f) except: + # None + # if True: with open(path+f"eps={round(eps,3):.3f}_activation.txt", 'r', encoding='utf-8') as f: activation = json.load(f)[100:] @@ -57,27 +59,39 @@ for dim in [7]: with open(path+f"eps={round(eps,3):.3f}_channels.txt", 'r', encoding='utf-8') as f: channels = json.load(f)[100:] - ei = [np.sum(cha)*(1-H2(eps)) for cha in channels] + ei = [np.sum(cha)*(1-H2(eps)) for cha in channels] with open(path+f"eps={round(eps,3):.3f}_ei.txt", 'w', encoding='utf-8') as f: json.dump(ei, f, indent=1) - pha_divs = 8 + pha_divs = 32 pha_sort = [0]*pha_divs - pha_sort = [[pha for pha in list(enumerate(phase_diff))[:-maxdt] if i*m.pi/pha_divs <= abs(pha[1]) <= (i+1)*m.pi/pha_divs] for i in range(pha_divs)] - dia_ei = [[np.average([ei[pha[0]+dt] for pha in pha_div]) for dt in range(maxdt)] for pha_div in pha_sort] - - qtplot(f'Diachronic EI for dim={dim} with 4 layers', - [list(range(maxdt))]*pha_divs, - dia_ei, - [f'EI evolution for initial phase in [{div}pi,{div+1}pi]' for div in range(pha_divs)], - x_tag = 'dt', + pha_sort = [[pha for pha in list(enumerate(phase_diff))[:-maxdt] if i*m.pi/pha_divs <= abs(pha[1]) <= (i+1)*m.pi/pha_divs] + for i in range(pha_divs)] + dia_ei = [np.average([ei[i] for i, pha in pha_div]) for pha_div in pha_sort] + phase_dist = [len(pha)/len(phase[0][:-maxdt]) for pha in pha_sort] + + qtplot(f'EI Distribution against phase diff for dim={dim}', + [[(div+.5)*m.pi/pha_divs for div in range(pha_divs)]], + [dia_ei], + [f'EI distribution against phase diff'], + x_tag = 'abs phase', y_tag = 'average EI', - colors = 'rgb', export=True, path=path, - filename=f'Diachronic EI for eps={round(eps,3)} dim={dim} pha_divs={pha_divs}.png', + filename=f'Phase-EI eps={round(eps,3):.3f} dim={dim} pha_divs={pha_divs}.png', + close=True) + + qtplot(f'Phasediff Distribution for dim={dim}', + [[(div+.5)*m.pi/pha_divs for div in range(pha_divs)]], + [phase_dist], + [f'Phase distribution'], + x_tag = 'abs phase', + y_tag = 'frequency', + export=True, + path=path, + filename=f'Phasediff dist eps={round(eps,3):.3f} dim={dim} pha_divs={pha_divs}.png', close=True) print(f'Done eps={eps:.3f} with dim={dim} at {datetime.now()}') diff --git a/evaluation/plot.py b/evaluation/plot.py index ccbb090..5952e22 100644 --- a/evaluation/plot.py +++ b/evaluation/plot.py @@ -125,6 +125,8 @@ def qtplot(titletext, spaces, vals, names, x_tag=f'noise level {chr(949)}', y_ta # save to file exporter.export(path+filename) + + print(f'Saving to {path+filename}') def handleAppExit(): # Add any cleanup tasks here diff --git a/examples/Simulate4Layers.py b/examples/Simulate4Layers.py index 6d7db01..0a0601b 100644 --- a/examples/Simulate4Layers.py +++ b/examples/Simulate4Layers.py @@ -15,18 +15,20 @@ eps_space = np.linspace(0.005,0.5,100) stp = 1000100 -for batch in range(1,5): - for dim in [7]: +for batch in range(5): + for dim in [8]: for eps in eps_space[1:41:2]: eps = round(eps,3) - cons = [(n,n) for n in range(dim)]+[(n,(n+3)%7) for n in range(dim)] + cons = [(n,(n+m)%dim) for n in range(dim) for m in [0,int(dim/2)]] + initstate = [[0,0],[0,0]] sim = Simulate4Layers(dim, eps, coupling=cons, + init=initstate, steps=stp, draw=None, res=2, save='simple', - path=f'/cloud/Public/_data/neuropercolation/4lay/cons={len(cons)}_steps={stp}/dim={dim:02}/batch={batch}/', + path=f'/cloud/Public/_data/neuropercolation/4lay/cons={len(cons)}-2diag_steps={stp}/dim={dim:02}/batch={batch}/', ) print(f'Done eps={eps:.3f} with dim={dim} at {datetime.now()}') \ No newline at end of file