highbeats_pdf/compare.py
2020-12-01 12:00:50 +01:00

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()