405 lines
17 KiB
Python
405 lines
17 KiB
Python
import nixio as nix
|
|
import os
|
|
from IPython import embed
|
|
#from utility import *
|
|
import matplotlib.pyplot as plt
|
|
import numpy as np
|
|
import pandas as pd
|
|
import matplotlib.mlab as ml
|
|
import scipy.integrate as si
|
|
from scipy.ndimage import gaussian_filter
|
|
from IPython import embed
|
|
from myfunctions import *
|
|
from myfunctions import auto_rows
|
|
from myfunctions import remove_tick_ymarks
|
|
from myfunctions import remove_tick_marks
|
|
import string
|
|
from matplotlib import gridspec
|
|
from plot_eod_chirp import power_func, find_beats, find_dev
|
|
#from beatsnumerics import plot_beats
|
|
from thunderfish.tabledata import TableData
|
|
from plotstyle import plot_style, spines_params
|
|
from scipy.signal import hilbert, butter, filtfilt, lfilter
|
|
from myfunctions import default_settings
|
|
|
|
def plot_amp(name,grid,ax, mean1, nrs = [3,4,5],nr_size = 12,name_nr = 'amp',nr = 1, wide = 'gainsboro', rem = 'yes', middle = 'darkgrey', narrow = 'black'):
|
|
np.unique(mean1['type'])
|
|
all_means = mean1[mean1['type'] == name_nr +' mean']
|
|
original = all_means[all_means['dev'] == 'original']
|
|
#m005 = all_means[all_means['dev'] == '005']
|
|
m05 = all_means[all_means['dev'] == '05']
|
|
m2 = all_means[all_means['dev'] == '2']
|
|
# fig, ax = plt.subplots(nrows=4, ncols = 3, sharex=True)
|
|
versions = [m05] #m005,
|
|
dev = '05'
|
|
lim = [[]]*len(versions)
|
|
for i in range(len(versions)):
|
|
keys = [k for k in versions[i]][2::]
|
|
try:
|
|
data = np.array(versions[i][keys])[0]
|
|
except:
|
|
break
|
|
axis = np.arange(0, len(data), 1)
|
|
axis_new = axis * 1
|
|
similarity = [keys, data]
|
|
sim = np.argsort(similarity[0])
|
|
# similarity[sim]
|
|
all_means = mean1[mean1['type'] == name_nr+' std']
|
|
std = all_means[all_means['dev'] == dev]
|
|
std = np.array(std[keys])[0]
|
|
#ax[1, 1].set_ylabel('Modulation depth')
|
|
#ax[nr,i].set_title(dev[i] + ' ms')
|
|
all_means = mean1[mean1['type'] == name_nr+' 95']
|
|
std95 = all_means[all_means['dev'] == dev]
|
|
std95 = np.array(std95[keys])[0]
|
|
all_means = mean1[mean1['type'] == name_nr+' 05']
|
|
std05 = all_means[all_means['dev'] == dev]
|
|
std05 = np.array(std05[keys])[0]
|
|
#ax['mod'+str(i)] = plt.subplot(nrow, ncol, i * 2 + 2)
|
|
ax[name] = plt.subplot(grid[nr])
|
|
if nrs:
|
|
ax[name].text(left, 1.1, string.ascii_uppercase[nrs[i]], transform=ax[name].transAxes,
|
|
size=nr_size, weight='bold')
|
|
|
|
ax[name].fill_between(np.array(keys)[sim], list(std95[sim]), list(std05[sim]),
|
|
color=wide)
|
|
ax[name].fill_between(np.array(keys)[sim], list(data[sim] + std[sim]), list(data[sim] - std[sim]),
|
|
color=middle)
|
|
|
|
ax[name].spines['right'].set_visible(False)
|
|
ax[name].spines['top'].set_visible(False)
|
|
ax[name].set_xlim([0, 5])
|
|
ax[name].set_xlabel('EOD multiples')
|
|
#if i != 0:
|
|
# ax['mod'+str(i)] = remove_tick_ymarks(ax['mod'+str(i)])
|
|
#if (i != 2) and (rem != 'no'):
|
|
# ax[name] = remove_tick_marks(ax[name])
|
|
# ax[i].plot(data_tob.ff, data_tob.fe, color='grey', linestyle='--', label='AMf')
|
|
ax[name].plot(np.array(keys)[sim], data[sim], color=narrow)
|
|
lim[i] = np.nanmax(std95[sim])
|
|
# ax[0].plot(data1.x, data1.freq20, color=colors[1], label='20 %')
|
|
for i in range(len(versions)):
|
|
ax[name].set_ylim(0,np.nanmax(lim))
|
|
#embed()
|
|
return ax
|
|
|
|
def create_beat_corr(hz_range, eod_fr):
|
|
beat_corr = hz_range%eod_fr
|
|
beat_corr[beat_corr>eod_fr/2] = eod_fr[beat_corr>eod_fr/2] - beat_corr[beat_corr>eod_fr/2]
|
|
return beat_corr
|
|
|
|
def plot_beats(ax, f0, freqs, fexpected, ffirst,color, fmax, title, ylabel = 'yes'):
|
|
freqs /= f0
|
|
sel = np.abs(freqs - ((freqs+0.1)//0.5)*0.5) < 0.01
|
|
ax.set_title(title)
|
|
ax.plot(freqs, fexpected/f0, color = 'steelblue')
|
|
if ffirst is not None:
|
|
ffirst[sel] = np.nan
|
|
ax.plot(freqs, ffirst/f0, color = 'palegoldenrod')
|
|
if fmax is not None:
|
|
fmax[sel] = np.nan
|
|
ax.plot(freqs, fmax/f0, color = color)
|
|
ax.set_xlim(0, 3.5)
|
|
ax.set_ylim(0, 0.7)
|
|
ax.set_xticks_delta(1.0)
|
|
|
|
ax.set_yticks_delta(0.5)
|
|
#ax.set_xlabel('Frequency [f0]')
|
|
if ylabel == 'yes':
|
|
ax.set_ylabel('Frequency [f0]')
|
|
else:
|
|
ax = remove_tick_ymarks(ax)
|
|
ax = remove_tick_marks(ax)
|
|
ax.spines['right'].set_visible(False)
|
|
ax.spines['top'].set_visible(False)
|
|
|
|
def plot_mean_cells():
|
|
mean1 = pd.read_pickle('mean.pkl')
|
|
default_settings([0],intermediate_width = 6.29,intermediate_length = 8, ts = 10, ls = 9, fs = 9)
|
|
|
|
nr_size = 12
|
|
lp = 50
|
|
colors_tob = ['orange','brown','firebrick','red']
|
|
colors_mod = ['blue','navy','steelblue','steelblue']
|
|
|
|
grid00 = gridspec.GridSpec(2, 1, height_ratios = [3,0.8], hspace=0.2, left=0.2)
|
|
|
|
grid0 = gridspec.GridSpecFromSubplotSpec(6, 2, height_ratios = [0.01,1,0.01,1,0.01,1],
|
|
subplot_spec=grid00[0],wspace=0.3, hspace=0.75)
|
|
grid0_sub = gridspec.GridSpecFromSubplotSpec(3, 1, height_ratios = [1,1,1],
|
|
subplot_spec=grid00[0],wspace=0.25, hspace=0.4)
|
|
|
|
|
|
eod_fr = 670
|
|
start = 5
|
|
end = eod_fr*5
|
|
step = 25
|
|
eod_fe, beat_corr, beats = find_beats(start, end, step, eod_fr)
|
|
sampling = 100000
|
|
deviation_ms, deviation_s, deviation_dp = find_dev([1.5], sampling)
|
|
left = -0.5
|
|
ax = {}
|
|
|
|
#axis_sub = gridspec.GridSpecFromSubplotSpec(1, 1,
|
|
# subplot_spec=grid0_sub[0],wspace=0, hspace=0.7)
|
|
axis_sub = gridspec.GridSpecFromSubplotSpec(1, 1,
|
|
subplot_spec=grid0[0,:],wspace=0, hspace=0.7)
|
|
ax['sub'] = plt.subplot(axis_sub[0])
|
|
ax['sub'].spines['top'].set_visible(False)
|
|
ax['sub'].spines['bottom'].set_visible(False)
|
|
ax['sub'].spines['left'].set_visible(False)
|
|
ax['sub'].spines['right'].set_visible(False)
|
|
ax['sub'].set_yticks([])
|
|
ax['sub'].set_xticks([])
|
|
plt.title('Analytic', pad = -lp,fontsize = 10, fontweight='bold')
|
|
#legend_elements = [Line2D([0], [0], color=color_tob[0], lw=1, label='Maximal Frequency'),
|
|
# Line2D([0], [0], color=color_mod[0], label='Modulation')]
|
|
#ax['sub'].legend(handles=legend_elements, loc='center')
|
|
#embed()
|
|
|
|
|
|
axis = gridspec.GridSpecFromSubplotSpec(2, 1,
|
|
subplot_spec=grid0[1,0],wspace=0, hspace=0.7)
|
|
|
|
data = TableData('highbeatspecs10.dat')
|
|
ax['analytic_threhold'] = plt.subplot(axis[0])
|
|
ax['analytic_threhold'].text(left, 1.1, string.ascii_uppercase[0], transform=ax['analytic_threhold'].transAxes,
|
|
size=nr_size, weight='bold')
|
|
f0 = data[data[:,'freq>norm'] == 1.0,'freq>freq']
|
|
f0 = f0[len(f0)//2]
|
|
plot_beats(ax['analytic_threhold'] , f0, data[:,'freq>freq'], data[:,'freq>expected'],
|
|
data[:,'threshold>first_f'], colors_tob[0], data[:,'threshold>max_f'], 'Thresholded')
|
|
ax['analytic_threhold'].set_xlim([0, 5])
|
|
ax['analytic_threhold_a'] = plt.subplot(axis[1])
|
|
ax['analytic_threhold_a'] .spines['right'].set_visible(False)
|
|
ax['analytic_threhold_a'] .spines['top'].set_visible(False)
|
|
plt.plot(data[:,'freq>freq']/f0,data[:, 'threshold>max_a'], color = colors_mod[0])
|
|
ax['analytic_threhold_a'] = remove_tick_marks(ax['analytic_threhold_a'])
|
|
plt.xlim([0, 5])
|
|
data = TableData('highbeatspecs10.dat')
|
|
|
|
#embed()
|
|
|
|
axis = gridspec.GridSpecFromSubplotSpec(2, 1,
|
|
subplot_spec=grid0[1,1],wspace=0, hspace=0.5)
|
|
ax['analytic_cube'] = plt.subplot(axis[0])
|
|
f0 = data[data[:,'freq>norm'] == 1.0,'freq>freq']
|
|
f0 = f0[len(f0)//2]
|
|
plot_beats(ax['analytic_cube'] , f0, data[:,'freq>freq'], data[:,'freq>expected'],
|
|
data[:,'threshold cubed>first_f'],colors_tob[0], data[:,'threshold cubed>max_f'], 'Threshold cubed', ylabel = 'no')
|
|
ax['analytic_cube'].set_xlim([0,5])
|
|
ax['analytic_cube_a'] = plt.subplot(axis[1])
|
|
plt.plot(data[:,'freq>freq']/f0, data[:,'threshold cubed>max_a'], color = colors_mod[0])
|
|
ax['analytic_cube_a'].spines['right'].set_visible(False)
|
|
ax['analytic_cube_a'].spines['top'].set_visible(False)
|
|
ax['analytic_cube_a'] = remove_tick_marks(ax['analytic_cube_a'])
|
|
ax['analytic_cube_a'] = remove_tick_ymarks(ax['analytic_cube_a'])
|
|
plt.xlim([0,5])
|
|
#embed()
|
|
#grid1 = gridspec.GridSpecFromSubplotSpec(1, 2,
|
|
# subplot_spec=grid00[1],wspace=0, hspace=0.7)
|
|
|
|
axis_sub = gridspec.GridSpecFromSubplotSpec(1, 1,
|
|
subplot_spec=grid0[2,:],wspace=0, hspace=0.7)
|
|
ax['sub'] = plt.subplot(axis_sub[0])
|
|
ax['sub'].spines['top'].set_visible(False)
|
|
ax['sub'].spines['bottom'].set_visible(False)
|
|
ax['sub'].spines['left'].set_visible(False)
|
|
ax['sub'].spines['right'].set_visible(False)
|
|
ax['sub'].set_yticks([])
|
|
ax['sub'].set_xticks([])
|
|
plt.title('Numerical',pad = -lp, fontsize = 10, fontweight='bold')
|
|
|
|
axis = gridspec.GridSpecFromSubplotSpec(2, 1,
|
|
subplot_spec=grid0[3, 0], wspace=0, hspace=0.5)
|
|
threshold = power_func(restrict=[2], a_fr=1, a_fe=0.2, eod_fr=eod_fr, eod_fe=eod_fe, win='w2', sigma=0,
|
|
sampling=sampling, deviation_dp=deviation_dp, deviation_s=deviation_s, beat_corr=beat_corr,
|
|
size=[120],
|
|
phase_zero=[0], delta_t=1, show_figure=True,
|
|
plot_dist=False, save=False, bef_c=-2, aft_c=-1)
|
|
ax['t_f'] = plt.subplot(axis[0])
|
|
plt.title('Threshold')
|
|
ax['t_f'].plot(beats / eod_fr + 1, np.array(threshold['result_frequency'][0]) / eod_fr, color=colors_tob[1])
|
|
ax['t_f'].spines['right'].set_visible(False)
|
|
ax['t_f'].spines['top'].set_visible(False)
|
|
ax['t_f'] = remove_tick_marks(ax['t_f'])
|
|
ax['t_f'].set_xlim([0, 5])
|
|
ax['t_f'].text(left, 1.1, string.ascii_uppercase[1], transform=ax['t_f'].transAxes,
|
|
size=nr_size, weight='bold')
|
|
ax['t_a'] = plt.subplot(axis[1])
|
|
ax['t_a'].plot(beats / eod_fr + 1, threshold['result_amplitude_max'][0], color=colors_mod[1])
|
|
ax['t_a'].spines['right'].set_visible(False)
|
|
ax['t_a'].spines['top'].set_visible(False)
|
|
ax['t_a'] = remove_tick_marks(ax['t_a'])
|
|
ax['t_a'].set_xlim([0, 5])
|
|
ax['t_f']= plt.subplot(axis[0])
|
|
|
|
|
|
|
|
axis = gridspec.GridSpecFromSubplotSpec(2, 1,
|
|
subplot_spec=grid0[3, 1], wspace=0, hspace=0.5)
|
|
cubed =power_func(restrict = [5],a_fr=1, a_fe=0.2, eod_fr=eod_fr, eod_fe=eod_fe, win='w2', sigma=0,
|
|
sampling=sampling, beat_corr=beat_corr, size=[120],
|
|
phase_zero=[0], delta_t=1, show_figure=True,
|
|
plot_dist=False, save=False, bef_c=-2, aft_c=-1)
|
|
ax['t_f'] = plt.subplot(axis[0])
|
|
plt.title('Threshold cubed')
|
|
ax['t_f'].plot(beats/eod_fr+1,np.array(cubed['result_frequency'][0])/eod_fr, color = colors_tob[1])
|
|
ax['t_f'].spines['right'].set_visible(False)
|
|
ax['t_f'].spines['top'].set_visible(False)
|
|
ax['t_f'] = remove_tick_marks(ax['t_f'])
|
|
ax['t_f'] = remove_tick_ymarks(ax['t_f'])
|
|
ax['t_f'].set_xlim([0, 5])
|
|
ax['t_a'] = plt.subplot(axis[1])
|
|
ax['t_a'] = remove_tick_marks(ax['t_a'])
|
|
ax['t_a'] = remove_tick_ymarks(ax['t_a'])
|
|
ax['t_a'].plot(beats/eod_fr+1,cubed['result_amplitude_max'][0], color = colors_mod[1])
|
|
ax['t_a'].spines['right'].set_visible(False)
|
|
ax['t_a'].spines['top'].set_visible(False)
|
|
ax['t_a'].set_xlim([0, 5])
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#ax = plot_amp('data_mod',axis, ax, data, nrs=[], nr_size=nr_size, name_nr='tob max', nr=2, wide='gainsboro',
|
|
# middle='grey', narrow='black')
|
|
|
|
|
|
axis_sub = gridspec.GridSpecFromSubplotSpec(1, 1,
|
|
subplot_spec=grid0[4,:],wspace=0, hspace=0.7)
|
|
ax['sub'] = plt.subplot(axis_sub[0])
|
|
ax['sub'].spines['top'].set_visible(False)
|
|
ax['sub'].spines['bottom'].set_visible(False)
|
|
ax['sub'].spines['left'].set_visible(False)
|
|
ax['sub'].spines['right'].set_visible(False)
|
|
ax['sub'].set_yticks([])
|
|
ax['sub'].set_xticks([])
|
|
plt.title('Leaky Integrate and Fire - P-unit model',pad = -lp, fontsize = 10, fontweight='bold')
|
|
|
|
axis = gridspec.GridSpecFromSubplotSpec(2, 1,
|
|
subplot_spec=grid0[5,0], wspace=0, hspace=0.5)
|
|
data = pd.read_pickle('mean' + 'simulation' + '.pkl')
|
|
ax = plot_hz('data_hz',axis, 0, ax, data,nrs = [2],left = left, color = colors_tob[2])
|
|
plt.title('Threshold cubed')
|
|
ax = plot_amp('data_mod',axis, ax, data, nrs=[], nr_size=nr_size, name_nr='amp max', nr=1, wide='gainsboro',
|
|
middle='lightblue', narrow=colors_mod[2])
|
|
|
|
#ax = plot_amp('data_mod',axis, ax, data, nrs=[], nr_size=nr_size, name_nr='tob max', nr=2, wide='gainsboro',
|
|
# middle='grey', narrow='black')
|
|
|
|
|
|
axis = gridspec.GridSpecFromSubplotSpec(2, 1,
|
|
subplot_spec=grid0[5,1], wspace=0, hspace=0.5)
|
|
data = pd.read_pickle('mean' + 'sinz' + '.pkl')
|
|
ax = plot_hz('data_hz',axis, 0, ax, data,nr_size = nr_size,color = colors_tob[2])
|
|
plt.title('Threshold cubed')
|
|
ax = plot_amp('data_mod',axis, ax, data, nrs=[], nr_size=nr_size, name_nr='amp max', nr=1, wide='gainsboro',
|
|
middle='lightblue', narrow=colors_mod[2],rem = 'no')
|
|
#ax = plot_amp('data_mod',axis, ax, data, nrs=[], nr_size=nr_size, name_nr='tob max', nr=2, wide='gainsboro',
|
|
# middle='grey', narrow='black',rem = 'no')
|
|
ax['data_mod'] = remove_tick_ymarks(ax['data_mod'])
|
|
ax['data_hz'] = remove_tick_ymarks(ax['data_hz'])
|
|
|
|
|
|
ax_intermediate = gridspec.GridSpecFromSubplotSpec(1, 3,
|
|
subplot_spec=grid00[1], width_ratios = [1,2,1], wspace=0, hspace=0.5)
|
|
|
|
axis = gridspec.GridSpecFromSubplotSpec(2, 1,
|
|
subplot_spec=ax_intermediate[1], wspace=0, hspace=0.5)
|
|
data = pd.read_pickle('mean' + '' + '.pkl')
|
|
ax = plot_hz('data_hz',axis, 0, ax, data, nrs = [3],left = left, color = colors_tob[2])
|
|
plt.title('P-units', fontweight = 'bold')
|
|
|
|
ax = plot_amp('data_mod',axis, ax, data, nrs=[], nr_size=nr_size, name_nr='amp max', nr=1, wide='gainsboro',
|
|
middle='lightblue', narrow='steelblue')
|
|
|
|
|
|
plt.subplots_adjust(bottom = 0.1, top = 0.96)
|
|
plt.savefig('compare.pdf')
|
|
try:
|
|
plt.savefig('../highbeats_pdf/compare.pdf')
|
|
except:
|
|
a = 0
|
|
plt.show()
|
|
#fig.tight_layout()f
|
|
# fig.label_axes()
|
|
return fig
|
|
|
|
def plot_hz(name, grid, nr, ax, mean1,nrs = [], nr_size = 12,left = -0.1, color = 'red'):
|
|
x = np.arange(0, 2550, 50)
|
|
corr = create_beat_corr(x, np.array([500] * len(x)))
|
|
all_means = mean1[mean1['type'] == 'max mean']
|
|
original = all_means[all_means['dev'] == 'original']
|
|
m005 = all_means[all_means['dev'] == '005']
|
|
m05 = all_means[all_means['dev'] == '05']
|
|
m2 = all_means[all_means['dev'] == '2']
|
|
dev = '05'#'005',
|
|
titels = ['0.5 ms']
|
|
versions = m05#m005,
|
|
keys = [k for k in versions][2::]
|
|
try:
|
|
data = np.array(versions[keys])[0]
|
|
except:
|
|
a = 0
|
|
i = 0
|
|
# grid = gridspec.GridSpec(5, 1, hspace=0.4, left=0.2)
|
|
# grid = gridspec.GridSpecFromSubplotSpec(1, 2, hspace = 0.63, subplot_spec=grid0[0])
|
|
axis = np.arange(0, len(data), 1)
|
|
axis_new = axis * 1
|
|
similarity = [keys, data]
|
|
sim = np.argsort(similarity[0])
|
|
# similarity[sim]
|
|
all_means = mean1[mean1['type'] == 'max std']
|
|
std = all_means[all_means['dev'] == dev]
|
|
std = np.array(std[keys])[0]
|
|
# ax[0,i].set_title(dev[i] +' ms')
|
|
ax[name] = plt.subplot(grid[nr])
|
|
#ax[name].set_title(titels[i])
|
|
# ax[i+1].set_ylabel('MPF [EODf]')
|
|
all_means = mean1[mean1['type'] == 'max 95']
|
|
std95 = all_means[all_means['dev'] == dev]
|
|
std95 = np.array(std95[keys])[0]
|
|
all_means = mean1[mean1['type'] == 'max 05']
|
|
std05 = all_means[all_means['dev'] == dev]
|
|
std05 = np.array(std05[keys])[0]
|
|
# std[np.where(list(data[sim] + std[sim])>std95[sim])] = std95[sim][np.where(list(data[sim] + std[sim])>std95[sim])]
|
|
# embed()
|
|
middle = 'pink' # 'LightSalmon'
|
|
wide = 'lightpink' # mistyrose'
|
|
narrow = color #'crimson'
|
|
ax[name].fill_between(np.array(keys)[sim], list(std95[sim]-1), list(std05[sim]-1),
|
|
color=wide, alpha=0.45) #
|
|
# embed()
|
|
|
|
ax[name].fill_between(np.array(keys)[sim], list(data[sim] + std[sim]-1), list(data[sim] - std[sim]-1), color=middle)
|
|
|
|
ax[name].plot(x / 500, corr / 500, color='grey', linestyle='--', label='AMf')
|
|
ax[name].plot(np.array(keys)[sim], data[sim]-1, color=narrow)
|
|
ax[name].spines['right'].set_visible(False)
|
|
ax[name].spines['top'].set_visible(False)
|
|
# plt.fill_between(np.array([0,1]),np.array([0,0]),np.array([1,1]))
|
|
if nrs:
|
|
ax[name].text(left, 1.1, string.ascii_uppercase[nrs[i]], transform=ax[name].transAxes,
|
|
size=nr_size, weight='bold')
|
|
ax[name] = remove_tick_marks(ax[name])
|
|
ax[name].set_xlim([0,5])
|
|
# if i != 0:
|
|
# ax[i+1] = remove_tick_ymarks(ax[i+1])
|
|
# ax[0].plot(data1.x, data1.freq20, color=colors[1], label='20 %')
|
|
return ax
|
|
|
|
if __name__ == "__main__":
|
|
#plot_style()
|
|
fig = plot_mean_cells()
|
|
#fig.savefig()
|
|
plt.savefig('compare.pdf')
|
|
try:
|
|
plt.savefig('../highbeats_pdf/compare.pdf')
|
|
except:
|
|
pass
|
|
plt.show()
|
|
# plt.close()
|
|
|