40354 lines
2.0 MiB
40354 lines
2.0 MiB
import ast
|
|
import csv
|
|
import time
|
|
import warnings
|
|
|
|
import numpy
|
|
from scipy.optimize import curve_fit
|
|
from scipy.signal import vectorstrength
|
|
from scipy.stats import alpha, gaussian_kde
|
|
from sklearn import metrics
|
|
from sklearn.linear_model import LinearRegression
|
|
from thunderfish.eventdetection import hist_threshold
|
|
#from thesis.myfunctions import extract_am, load_folder_name, load_object_to_pandas, save_object_from_frame
|
|
#from thesis.myfunctions import plt_peaks_several
|
|
#from utils_all import feature_extract, get_data_array_names, get_sampling, link_arrays_eod
|
|
#from utils_all_down import load_folder_name
|
|
#from utils_all import bolzmann
|
|
from random import randint, sample
|
|
|
|
#from utils_all import correct_burstiness, find_tags_list, get_data_array_names, link_arrays_eod, link_arrays_spikes
|
|
|
|
warnings.filterwarnings("ignore", message="WARNING:root:MultiTag type relacs.stimulus.segment")
|
|
from scipy import optimize, stats
|
|
|
|
'''try:
|
|
from utils_all import default_settings, load_folder_name
|
|
except:
|
|
# das ist das gleiche wie drüber nur dass es einen anderen Namen hat
|
|
from utils_all_down import column2,find_mean_period, default_settings, load_folder_name, chose_mat_max_value, \
|
|
create_stimulus_SAM, \
|
|
default_settings, find_code_vs_not, load_folder_name, plt_peaks, \
|
|
plt_peaks_several, resave_small_files, \
|
|
restrict_cell_type, thresh_crossings, zenter_and_normalize'''
|
|
try:
|
|
from utils_all import *
|
|
except:
|
|
# das ist das gleiche wie drüber nur dass es einen anderen Namen hat
|
|
from utils_all_down import *
|
|
try:
|
|
pass
|
|
except:
|
|
a = 0
|
|
# print('not alexandras computer')
|
|
try:
|
|
import nixio as nix
|
|
except:
|
|
print('nixio not there')
|
|
import numpy as np
|
|
import pandas as pd
|
|
import scipy
|
|
from IPython import embed
|
|
from matplotlib import pyplot as plt, ticker as ticker
|
|
import os
|
|
import matplotlib.mlab as ml
|
|
import matplotlib.gridspec as gridspec
|
|
from scipy.ndimage import gaussian_filter
|
|
from thunderfish import fakefish
|
|
|
|
try:
|
|
import rlxnix as rlx
|
|
except:
|
|
a = 5
|
|
try:
|
|
from numba import jit
|
|
# embed()
|
|
except ImportError:
|
|
def jit(nopython):
|
|
def decorator_jit(func):
|
|
return func
|
|
|
|
return decorator_jit
|
|
# embed()
|
|
import inspect
|
|
|
|
if 'cv_cell_types' not in inspect.stack()[-1][1]:
|
|
try:
|
|
from plotstyle import plot_style, spines_params
|
|
except:
|
|
a = 5
|
|
import itertools as it
|
|
|
|
|
|
def plot_rec_stimulus(eodf, grid, transform_fact, stimulus, color1, color2,
|
|
time, counter, eod_fr, titles, g, deltat, fft_type, nfft, log,
|
|
counterp, delta_f=[], plot_point=True, xlim=0.05, shift=0, add=0, lw=0.5):
|
|
axt = plt.subplot(grid[0])
|
|
# time[0:len(v_dent_output)] - shift)(time[0:len(v_dent_output)] - shift)*transform_fact
|
|
time_here = (time[0:len(stimulus)] - shift) * transform_fact
|
|
stim_here = stimulus[time_here < xlim * transform_fact]
|
|
extracted, _ = extract_am(stimulus, time / 1000, norm=False, extract='globalmax', sampling=1 / deltat,
|
|
eodf=eod_fr) # time_here_here/1000
|
|
# am_interpolated, eod_norm = extract_am(eods, time, norm=False, eodf=eod_fr)
|
|
|
|
extracted_here = extracted[time_here < xlim * transform_fact]
|
|
|
|
time_here_here = time_here[time_here < xlim * transform_fact]
|
|
axt.plot(time_here_here, stim_here, color=color1, linewidth=lw)
|
|
# am_time, extracted = extract_am(stim_here, np.arange(0, len(time_here_here)*deltat,deltat),
|
|
# sampling=1/deltat, eodf=eod_fr)#time_here_here/1000
|
|
# embed()
|
|
axt.plot(time_here_here, extracted_here, color='red', linewidth=1)
|
|
|
|
counter += 1 # am_time*1000
|
|
axt.set_xlim(0, xlim * transform_fact)
|
|
axt.set_ylim(-1.2, 1.7)
|
|
axt.show_spines('lb')
|
|
axt.axhline(0, color='black', lw=0.5)
|
|
# axt.text(0,0,'0')
|
|
# axt.text(-2, 0, '0', color='black', ha='center', va='center')
|
|
# axt.text(-0.05, 1.1, titles[g], transform=axt.transAxes)
|
|
axt.set_xticks_blank()
|
|
axp = plt.subplot(grid[1])
|
|
ff, pp = calc_psd(stimulus, deltat, fft_type, nfft, eod_fr)
|
|
axp.set_xticks_blank()
|
|
return counter, axt, ff, pp, axp
|
|
|
|
|
|
def plot_lowpass(eodf, g_p_t, transform_fact, time, shift, v_dent_output, color1, color2, deltat, fft_type, nfft, log,
|
|
counterp, eod_fr, extract=True, lw=0.5, plot_point=True, xlim=0.05, add=0, delta_f=[]):
|
|
ff, ff_am, pp, pp_am, time_here, extracted = time_psd_calculation(deltat, eod_fr, extract, fft_type, nfft, shift,
|
|
time, transform_fact, v_dent_output)
|
|
|
|
axt_p2 = plt_time_arrays(color1, g_p_t, lw, v_dent_output, extracted, xlim, time_here,
|
|
transform_fact=transform_fact)
|
|
axp_p2 = plt.subplot(g_p_t[1])
|
|
axp_p2.set_xticks_blank()
|
|
# axp_p2.set_ylabel('[dB]', y=1.20)
|
|
return axt_p2, ff, pp, axp_p2, ff_am, pp_am
|
|
|
|
|
|
def plt_time_arrays_here(color1, g_p_t, lw, time_here, transform_fact, v_dent_output, xlim):
|
|
axt_p2 = plt.subplot(g_p_t[0])
|
|
axt_p2.plot(time_here, v_dent_output, color=color1, linewidth=lw)
|
|
# embed()
|
|
axt_p2.show_spines('lb') # am_time*1000
|
|
axt_p2.set_xlim(0.0, xlim * transform_fact)
|
|
# axt_p2.set_xticks_blank()
|
|
axt_p2.axhline(0, color='black', lw=0.5)
|
|
return axt_p2
|
|
|
|
|
|
def model_sheme_only(grid_sheme, time_transform=1000, ws=0.1, nfft=4096 * 6, stimulus_length=5, fft_type='mppsd',
|
|
a_fr=1, a_fe=0.2,
|
|
v_exp=1, exp_tau=0.1, counter=0, counterp=0, color='darkgrey', log=True,
|
|
shift=0.25):
|
|
# need to reduce parameters
|
|
# parameters = pd.read_csv("models_big_fit_d_right.csv", index_col=0)
|
|
# load_name = "models_big_fit_d_right.csv"#"models_big_fit.csv"
|
|
# parameters = pd.read_csv(load_name)
|
|
|
|
# potentiell zellen wo der range nicht zu weit ist : 0, 9
|
|
# problem 0, 10: spikt manchmal
|
|
# problem 9: presynaptic oscilation nicht so schön
|
|
# gute Zellen: 5
|
|
# ok ich mach Zelle Null weil sie am schönsten aussieht, die spikt manchmal aber das klammern wir jetzt halt aus
|
|
# good_cells = pd.read_csv("good_model_cells.csv", index_col=0)
|
|
# 2 ist wohl sehr nah, das geht!
|
|
# 0,1,3,7 weit entfernt
|
|
# 4,5,6 sehr weit entfernt
|
|
# 8 ist wohl am nächsten!
|
|
# embed()
|
|
# model_params = parameters.iloc[0]
|
|
# model_params = parameters[parameters['cell'].isin(good_cells.cell[0:-1]+'-invivo-1')].iloc[2]
|
|
|
|
load_name = 'models_big_fit_d_right.csv'
|
|
cell_nr = 8 # 5#5#6#3
|
|
# model_params = load_model(load_name=load_name, cell_nr = cell_nr)
|
|
models = resave_small_files("models_big_fit_d_right.csv", load_folder='calc_model_core')
|
|
model_params = models[models['cell'] == '2012-07-03-ak-invivo-1'].iloc[0]
|
|
|
|
# try:
|
|
# amp_frame = pd.read_csv('peak_amplitudes_power.csv')
|
|
# except:
|
|
# amp_frame = pd.read_csv('suseptibility\peak_amplitudes_power.csv')
|
|
cell = model_params.pop('cell') # .iloc[0]# Werte für das Paper nachschauen
|
|
eod_fr = model_params.pop('EODf') # .iloc[0]
|
|
deltat = model_params.pop("deltat") # .iloc[0]
|
|
v_offset = model_params.pop("v_offset") # .iloc[0]
|
|
cell_nr = 8 # 5#5#6#3
|
|
# embed()
|
|
|
|
eod_fe = [eod_fr + 50] # eod_fr*1+50,, eod_fr * 2 + 50
|
|
mult_nr = 0
|
|
|
|
# REMAINING rows
|
|
color_p3 = 'grey' # 'red'#palette['red']
|
|
color_p1 = 'grey' # 'blue'#palette['blue']
|
|
color_diagonal = 'grey' # 'cyan'#palette['cyan']
|
|
colors = [color_diagonal, color_p1, color_p1, color_p3]
|
|
|
|
ax_rec = [[]] * 4
|
|
ax_low = [[]] * 4
|
|
axt_IF1 = []
|
|
axt_IF2 = []
|
|
adds = [[0, 0, 0, 0], [0, 0, 2, 10]]
|
|
nrs_grid = [0, 1, 3, 4]
|
|
# delta_f = (eod_fe[mult_nr] - eod_fr) - eod_fr
|
|
delta_f = [50] # create_beat_corr(np.array([eod_fe[mult_nr] - eod_fr]), np.array([eod_fr]))[0]
|
|
|
|
# time, stimulus_here, eod_fish_r, eod_fish_e, stimulus = make_paramters(
|
|
# stimulus_length, deltat, eod_fr, a_fr, a_fe, eod_fe, mult_nr)
|
|
counter_here = 0
|
|
|
|
# fig = plt.figure()
|
|
nrs = [1, 2, 3, 4]
|
|
|
|
# Grid for the sheme
|
|
grid_sheme = gridspec.GridSpecFromSubplotSpec(3, 1,
|
|
subplot_spec=grid_sheme, wspace=0.2, hspace=0.95)
|
|
|
|
lw = 0.5
|
|
wr = [1, 1.2]
|
|
xlim = 0.065
|
|
axps = []
|
|
axps_lowpass = []
|
|
axps_stimulus = []
|
|
pps = []
|
|
pps_lowpass = []
|
|
pps_stimulus = []
|
|
ax_am_sp_s = []
|
|
ax_ams = []
|
|
colors_chosen = []
|
|
counter_g = 0
|
|
for mult_nr in range(len(eod_fe)):
|
|
try:
|
|
time, stimulus_rec, eod_fish_r, eod_fish_e, stimulus = make_paramters(
|
|
stimulus_length, deltat, eod_fr, a_fr, a_fe, eod_fe, mult_nr)
|
|
except:
|
|
print('parameter thing6')
|
|
embed()
|
|
# colors = ['grey', 'grey', 'grey', 'grey']
|
|
colorful_title = False
|
|
# embed()
|
|
|
|
# ok das hier scheint umständlich, aber ich hab einmal die eod_fe schleife und einmal die stimulus schleife
|
|
# einfach eine stimulus schleife zu machen würde mehrere änderungen bedeutetn
|
|
eod_fish_r_rec = eod_fish_r * 1
|
|
eod_fish_r_rec[eod_fish_r_rec < 0] = 0
|
|
add_pos, color_add_pos, titles, stimuli, eod_fish_rs = titles_EIF(eod_fish_r, eod_fish_r_rec, color_p1,
|
|
color_p3, mult_nr, eod_fr, eod_fe, stimulus,
|
|
stimulus_rec, colorful_title)
|
|
|
|
titles = titles[1]
|
|
stimulus_here = stimuli[1]
|
|
# for g, stimulus_here in enumerate([stimuli[1]]):
|
|
add = 0
|
|
color = colors[counter_here]
|
|
|
|
# And plot correspoding sheme
|
|
axsheme = plt.subplot(grid_sheme[0])
|
|
plot_sheme_nonlinearity(axsheme, color_p3, color_p1, color_diagonal=color_diagonal)
|
|
|
|
# REMAINING Rows: dendridic filter / LIF /EIF stimulus
|
|
exponentials = '' # , 'EIF'
|
|
# for ee, exponential in enumerate(exponentials):
|
|
|
|
# model
|
|
# v_offset, model_params, load_name= implement_three_core(cell,amp_frame, titles, g, cell_nr = cell_nr)
|
|
# for hard coding the offset here i check the change of the baseline
|
|
|
|
# if (ee == 0):
|
|
# SECOND Row: Dendridic Low pass filter
|
|
axsheme = plt.subplot(grid_sheme[1])
|
|
# axsheme.set_aspect('equal')
|
|
plot_sheme_lowpass(axsheme)
|
|
|
|
# THIRD /FORTH Row: LIF /EIF
|
|
axsheme = plt.subplot(grid_sheme[2])
|
|
# axsheme.set_aspect('equal')
|
|
exponential = ''
|
|
plot_sheme_IF(axsheme, exp_tau, v_exp, exponential)
|
|
|
|
counter_g += 1
|
|
# embed()
|
|
# plt.show()
|
|
counter_here += 1
|
|
|
|
# embed()
|
|
# devide = np.max(np.max(pps))
|
|
# plot_points = np.array([[], [], [], 'yes',
|
|
# [], [], [], 'yes'
|
|
# ,'yes','yes',[],'yes'
|
|
# ,'yes','yes',[],'yes'])
|
|
# von oben nach unten von links nach rechts
|
|
|
|
# plot psd with shared log lim
|
|
|
|
|
|
def model_and_data_vertical(nr_clim=10, many=False, width=0.005, row='no', HZ50=True, fs=8, hs=0.39, redo=False,
|
|
nffts=['whole'],
|
|
powers=[1], cells=["2013-01-08-aa-invivo-1"], col_desired=2, var_items=['contrasts'],
|
|
show=False,
|
|
contrasts=[0], noises_added=[''], fft_i='forward', fft_o='forward', spikes_unit='Hz',
|
|
mV_unit='mV',
|
|
D_extraction_method=['additiv_visual_d_4_scaled'], internal_noise=['eRAM'],
|
|
external_noise=['eRAM'], level_extraction=['_RAMdadjusted'], cut_off2=300,
|
|
repeats=[1000000],
|
|
receiver_contrast=[1], dendrids=[''], ref_types=[''], adapt_types=[''], c_noises=[0.1],
|
|
c_signal=[0.9],
|
|
cut_offs1=[300], clims='all', restrict='restrict', label=r'$\frac{1}{mV^2S}$'):
|
|
# plot_style()
|
|
plot_style()
|
|
default_settings(lw=0.5, column=2, length=8.5)
|
|
|
|
duration_noise = '_short',
|
|
formula = 'code' ##'formula'
|
|
# ,int(2 ** 16) int(2 ** 16), int(2 ** 15),
|
|
stimulus_length = 1 # 20#550 # 30 # 15#45#0.5#1.5 15 45 100
|
|
trials_nrs = [1] # [100, 500, 1000, 3000, 10000, 100000, 1000000] # 500
|
|
stimulus_type = '_StimulusOrig_' # ,#
|
|
# ,3]#, 3, 1, 1.5, 0.5, ] # ,1,1.5, 0.5] #[1,1.5, 0.5] # 1.5,0.5]3, 1,
|
|
variant = 'sinz'
|
|
mimick = 'no'
|
|
cell_recording_save_name = ''
|
|
trans = 1 # 5
|
|
repeats = [30, 100000] # ,
|
|
aa = 0
|
|
good_data, remaining = overlap_cells()
|
|
cells_all = ['2012-07-03-ak-invivo-1',
|
|
'2018-05-08-ae-invivo-1',
|
|
'2011-10-25-ad-invivo-1'] # good_data[,
|
|
# '2018-05-08-aa-invivo-1',
|
|
# '2018-05-08-ac-invivo-1',
|
|
# '2018-05-08-ae-invivo-1',
|
|
# '2012-07-03-ak-invivo-1']
|
|
good_data = cells_all
|
|
# embed()
|
|
for cell, var_type, stim_type_afe, stim_type_noise, power, nfft, dendrid, trial_nr, cut_off1, c_sig, c_noise, ref_type, adapt_type, noise_added, extract, a_fr, a_fe, in it.product(
|
|
cells, D_extraction_method, external_noise, internal_noise, powers, nffts, dendrids, cut_offs1, trials_nrs,
|
|
c_signal,
|
|
c_noises,
|
|
ref_types, adapt_types, noises_added, level_extraction, receiver_contrast, contrasts, ):
|
|
# print(trials_stim,stim_type_noise, power, nfft, a_fe,a_fr, dendrid, cut_off1,trial_nrs)
|
|
# print(trial_nrs, stim_type_noise, trials_stim, power, nfft, a_fe, a_fr, var_type, cut_off1,trial_nrs)
|
|
aa += 1
|
|
# embed()
|
|
if row == 'no':
|
|
col, row = find_row_col(np.arange(aa), col=col_desired) # np.arange(
|
|
else:
|
|
col = col_desired
|
|
if row == 2:
|
|
default_settings(column=2, length=7.5) # 2+2.25+2.25
|
|
elif row == 1:
|
|
default_settings(column=2, length=4)
|
|
col = 3
|
|
|
|
row = 5
|
|
|
|
fig = plt.figure(figsize=(6.8, 7.5))
|
|
|
|
grid_orig = gridspec.GridSpec(1, 2, wspace=0.15, bottom=0.05,
|
|
hspace=0.1, left=0.07, width_ratios=[4, 1.3], right=0.99,
|
|
top=0.88) # , height_ratios = [0.4,3]
|
|
# model_sheme_in_one(grid_orig[1]) # grid_sheme grid_lower[3]
|
|
# model_sheme_only(grid[2])
|
|
############################################
|
|
# plot upper part
|
|
# grid_sheme = gridspec.GridSpecFromSubplotSpec(1, 1,grid_orig[1], wspace=1.2,
|
|
# hspace=0.13)
|
|
|
|
# ax0 = plt.subplot(grid_upper[0])
|
|
# ax1 = plt.subplot(grid_upper[1])
|
|
# cell_type_here, score = plt_data_overview([ax0,ax1])
|
|
|
|
############################################
|
|
# plot lower part
|
|
grid_lower = gridspec.GridSpecFromSubplotSpec(4, 1, grid_orig[0], wspace=0.05,
|
|
hspace=0.53, height_ratios=[0.2, 1, 1, 1])
|
|
|
|
wr = [1, 1, 1]
|
|
# fig, ax = plt.subplots(row, col, sharex=True,
|
|
# sharey=True) # constrained_layout=True,, figsize=(11, 5)
|
|
if row == 2:
|
|
plt.subplots_adjust(bottom=0.067, wspace=0.45, top=0.81, hspace=hs, right=0.88,
|
|
left=0.075) # , hspace = 0.6, wspace = 0.5
|
|
elif row == 1:
|
|
plt.subplots_adjust(bottom=0.1, wspace=0.45, top=0.81, hspace=hs, right=0.88,
|
|
left=0.075) # , hspace = 0.6, wspace = 0.5
|
|
else:
|
|
plt.subplots_adjust(wspace=0.8, bottom=0.067, top=0.86, hspace=hs, right=0.88,
|
|
left=0.075) # , hspace = 0.6, wspace = 0.5
|
|
|
|
# if row != 1:
|
|
# ax = np.concatenate(ax)
|
|
a = 0
|
|
maxs = []
|
|
mins = []
|
|
ims = []
|
|
perc05 = []
|
|
perc95 = []
|
|
iternames = [D_extraction_method, external_noise,
|
|
internal_noise, powers, nffts, dendrids, cut_offs1, trials_nrs, c_signal,
|
|
c_noises,
|
|
ref_types, adapt_types, noises_added, level_extraction, receiver_contrast, contrasts, ]
|
|
|
|
nr = '2'
|
|
|
|
for all in it.product(*iternames):
|
|
|
|
var_type, stim_type_afe, stim_type_noise, power, nfft, dendrid, cut_off1, trial_nrs, c_sig, c_noise, ref_type, adapt_type, noise_added, extract, a_fr, a_fe = all
|
|
# print(trials_stim,stim_type_noise, power, nfft, a_fe,a_fr, dendrid, var_type, cut_off1,trial_nrs)
|
|
# fig = plt.figure()
|
|
|
|
hs = 0.25
|
|
|
|
#################################
|
|
# model cells
|
|
ax_model = []
|
|
for t, trials_stim in enumerate(repeats):
|
|
grid_model = gridspec.GridSpecFromSubplotSpec(1, len(good_data), grid_lower[2 + t], hspace=hs,
|
|
width_ratios=wr)
|
|
|
|
# embed()
|
|
save_name = save_ram_model(stimulus_length, cut_off1, duration_noise, nfft, a_fe, formula,
|
|
stim_type_noise, mimick, variant, trials_stim, power,
|
|
stimulus_type,
|
|
cell_recording_save_name, nr=nr, fft_i=fft_i, fft_o=fft_o, Hz=spikes_unit,
|
|
mV=mV_unit, stim_type_afe=stim_type_afe, extract=extract,
|
|
noise_added=noise_added,
|
|
c_noise=c_noise, c_sig=c_sig, ref_type=ref_type, adapt_type=adapt_type,
|
|
var_type=var_type, cut_off2=cut_off2, dendrid=dendrid, a_fr=a_fr,
|
|
trials_nr=trial_nrs, trans=trans, zeros='ones')
|
|
|
|
# '../calc_model/noise2__nfft_whole_power_1_eRAM_RAMdadjusted_additiv_visual_d_4_scaled_cNoise_0.1_cSig_0.9_cutoff1_300_cutoff2_300no_sinz_length1_TrialsStim_30_a_fr_1__trans1s__TrialsNr_1_fft_o_forward_fft_i_forward_Hz_mV'
|
|
# embed()
|
|
|
|
path = save_name + '.pkl'
|
|
|
|
model = load_model_susept(path, cells_all, save_name) # cells
|
|
adapt_type_name, ref_type_name, dendrid_name, stim_type_noise_name = define_names(var_type, stim_type_noise,
|
|
dendrid, ref_type,
|
|
adapt_type)
|
|
|
|
path_cell_ref = load_folder_name(
|
|
'calc_model') + '/calc_RAM_model-22__nfft_whole_power_1_eRAM_RAMdadjusted_additiv_visual_d_4_scaled_cNoise_0.1_cSig_0.9_cutoff1_300_cutoff2_300no_sinz_length1_TrialsStim_100000_a_fr_1__trans1s__TrialsNr_1_fft_o_forward_fft_i_forward_Hz_mV.pkl'
|
|
model_sorting = load_model_susept(path_cell_ref, cells, save_name)
|
|
# cells_sorted = model_sorting.cell.iloc[np.argsort(model_sorting.cv_stim)]
|
|
# cells_all = np.array(np.unique(cells_sorted, return_index=True)[0])[
|
|
# np.array(np.argsort(np.unique(cells_sorted, return_index=True)[1]))]
|
|
cells_all = model.groupby('cv_stim').first().sort_values(by='cv_stim').cell # ('cv_stim')
|
|
# embed()
|
|
for c, cell in enumerate(cells_all):
|
|
print(c)
|
|
grid_30_s = gridspec.GridSpecFromSubplotSpec(2, 1, grid_model[c], height_ratios=[1, 3])
|
|
|
|
ax = plt.subplot(grid_model[c]) # grid_30_s[1]
|
|
# embed()
|
|
if len(model) > 0:
|
|
|
|
titles = ''
|
|
suptitles = ''
|
|
stim_type_noise_name2, stim_type_afe_name = stim_type_names(a_fe, c_sig, stim_type_afe,
|
|
stim_type_noise_name)
|
|
|
|
# for var_it in var_items:
|
|
suptitles, titles = find_titles_susept(a_fe, cell, extract, noise_added, stim_type_afe_name,
|
|
stim_type_noise_name2, suptitles, titles, trials_stim,
|
|
var_items, var_type)
|
|
|
|
model_show = model[
|
|
(model.cell == cell)] # & (model_cell.file_name == file)& (model_cell.power == power)]
|
|
# embed()
|
|
new_keys = model_show.index.unique() # [0:490]
|
|
# np.abs(
|
|
# stack_plot = model_show[list(map(str, new_keys))]
|
|
try:
|
|
stack_plot = model_show[list(map(str, new_keys))]
|
|
except:
|
|
stack_plot = model_show[new_keys]
|
|
stack_plot = stack_plot.iloc[np.arange(0, len(new_keys), 1)]
|
|
stack_plot.columns = list(map(float, stack_plot.columns))
|
|
|
|
ax.set_xlim(0, 300)
|
|
ax.set_ylim(0, 300)
|
|
ax.set_aspect('equal')
|
|
ax.set_xticks_delta(100)
|
|
ax.set_yticks_delta(100)
|
|
# embed()
|
|
# model_cells = pd.read_csv(load_folder_name('calc_model_core')+"\models_big_fit_d_right.csv")
|
|
model_cells = resave_small_files("models_big_fit_d_right.csv")
|
|
|
|
model_params = model_cells[model_cells['cell'] == cell]
|
|
# embed()
|
|
if len(model_show) > 0:
|
|
noise_strength = model_params.noise_strength.iloc[0] # **2/2
|
|
deltat = model_params.deltat.iloc[0]
|
|
D = noise_strength # (noise_strength ** 2) / 2
|
|
D_derived = D
|
|
# try:
|
|
D_derived, var, cut_off = D_derive(model_show, save_name, c_sig, D=D, base='',
|
|
nr=nr) # var_based
|
|
# except:
|
|
# embed()
|
|
# print(D_derived)
|
|
power_spektrum = ((2 * (2 * D_derived) ** 2))
|
|
norm = 1 / power_spektrum # * stimulus_length input_scaling* *300/2000*stimulus_length
|
|
# print(norm)
|
|
# embed()
|
|
# stack_plot = np.abs((stack_plot) * norm)
|
|
# print(trials_stim)
|
|
# stack_plot = (np.abs(stack_plot) / trials_stim) #
|
|
# stack_plot = ((np.abs((stack_plot) * norm)))# ** 1 / trials_stim) #
|
|
|
|
stack_plot = RAM_norm(stack_plot, trials_stim, D_derived)
|
|
# embed()
|
|
|
|
if many == True:
|
|
titles = titles + ' Ef=' + str(int(model_params.EODf.iloc[0]))
|
|
color = title_color(cell)
|
|
print(color)
|
|
if t == 0:
|
|
ax.set_title(
|
|
titles + ' $fr_{B}$=' + str(int(np.round(model_show.fr.iloc[0]))) + ' $fr_{S}$=' + str(
|
|
int(np.round(model_show.fr_stim.iloc[0]))) + 'Hz\n $cv_{B}$=' + str(
|
|
np.round(model_show.cv.iloc[0], 2)) + \
|
|
' $cv_{S}$=' + str(
|
|
np.round(model_show.cv_stim.iloc[0], 2)) + ' $D_{sig}$=' + str(
|
|
np.round(D_derived, 5)) + ' s=' + str(
|
|
np.round(model_show.ser_sum_stim.iloc[0], 2)), fontsize=fs, color=color)
|
|
perc = '' # 'perc'
|
|
im = plt_RAM_perc(ax, perc, stack_plot)
|
|
|
|
ims.append(im)
|
|
maxs.append(np.max(np.array(stack_plot)))
|
|
mins.append(np.min(np.array(stack_plot)))
|
|
perc05.append(np.percentile(stack_plot, 5))
|
|
perc95.append(np.percentile(stack_plot, 95))
|
|
|
|
plt_triangle(ax, model_show.fr.iloc[0], np.round(model_show.fr_stim.iloc[0]),
|
|
model_show.eod_fr.iloc[0], 300)
|
|
if HZ50:
|
|
plt_50_Hz_noise(ax, 300)
|
|
ax.set_aspect('equal')
|
|
|
|
cbar, left, bottom, width, height = colorbar_outside(ax, im, fig, add=0, width=width)
|
|
|
|
# ax.set_ylabel(F2_xlabel())
|
|
|
|
# if t == 0:
|
|
if c == 0:
|
|
ax.set_ylabel(F2_xlabel())
|
|
else:
|
|
remove_yticks(ax)
|
|
if c == 2:
|
|
# cbar = plt.colorbar(im, ax=ax)#, shrink=0.7, pad=0.11
|
|
# cbar, left, bottom, width, height = colorbar_outside_right2(ax, fig, im, add=0, shrink=0.6,
|
|
# width=width) # 0.02
|
|
cbar.set_label(nonlin_title(), rotation=90, labelpad=10)
|
|
# if c == len(cells_all) - 1:
|
|
if t == 1:
|
|
ax.set_xlabel(F1_xlabel(), labelpad=20)
|
|
else:
|
|
remove_xticks(ax)
|
|
print(c)
|
|
ax_model.append(ax)
|
|
a += 1
|
|
# plt.show()
|
|
# embed()
|
|
#################################
|
|
# model picutre
|
|
# grid_sheme = gridspec.GridSpecFromSubplotSpec(3, 1, grid[1],
|
|
# hspace=hs)
|
|
model_sheme_in_one(grid_orig[1]) # grid_sheme grid_lower[3]
|
|
# model_sheme_only(grid[2])
|
|
|
|
#################################
|
|
# flowchart(grid[3])
|
|
|
|
#################################
|
|
# data cells
|
|
|
|
grid_data = gridspec.GridSpecFromSubplotSpec(1, len(good_data), grid_lower[1],
|
|
hspace=hs, width_ratios=wr)
|
|
|
|
grid_isi = gridspec.GridSpecFromSubplotSpec(1, len(good_data), grid_lower[0],
|
|
hspace=hs, width_ratios=wr)
|
|
|
|
save_names = ['noise_data8_nfft1sec_original__LocalEOD_CutatBeginning_0.05_s_NeurDelay_0.005_s_burst_corr']
|
|
frame = load_cv_base_frame(cells_all)
|
|
# amps_desired, cell_type_type, cells_plot, frame, cell_types = load_isis(save_names, redo = True)
|
|
# embed()
|
|
ax_isi = []
|
|
for f, cell in enumerate(cells_all):
|
|
# grid_30_d = gridspec.GridSpecFromSubplotSpec(1, 1, grid_data[f])#, height_ratios=[1, 3]
|
|
|
|
ax = plt.subplot(grid_data[f])
|
|
if f == 2:
|
|
plot = True
|
|
else:
|
|
plot = False
|
|
|
|
ax_data = plt_data_up(cell, ax, fig, grid_data, cells_all, cell_type='p-unit', cbar_label=plot, width=width)
|
|
if f == len(cells) - 1:
|
|
ax.set_ylabel(F2_xlabel()) #
|
|
else:
|
|
remove_yticks(ax)
|
|
# ax.set_xlabel(F1_xlabel()) #
|
|
remove_xticks(ax)
|
|
# remove_yticks(ax)
|
|
#################################
|
|
# plt isi of data
|
|
|
|
# grid_isi = gridspec.GridSpecFromSubplotSpec(len(good_data), 1, grid[-1],
|
|
# hspace=hs)
|
|
# grid_30_isi = gridspec.GridSpecFromSubplotSpec(1, 1, grid_isi[f])
|
|
|
|
axi = plt.subplot(grid_isi[f]) # grid_30_d[0]
|
|
|
|
# axi = plt.subplot(grid_isi[f])
|
|
|
|
frame_cell = frame[(frame['cell'] == cell)]
|
|
# embed()
|
|
spikes = frame_cell.spikes.iloc[0]
|
|
eod_fr = frame_cell.EODf.iloc[0]
|
|
|
|
spikes_all, hists, frs_calc, cont_spikes = load_spikes(spikes, eod_fr)
|
|
|
|
alpha = 1
|
|
for hh, h in enumerate(hists):
|
|
# try:
|
|
axi.hist(h, bins=100, color='blue', alpha=float(alpha - 0.05 * (hh)))
|
|
ax_isi.append(axi)
|
|
axi.set_ylabel('Nr')
|
|
if f == len(cells_all) - 1:
|
|
axi.set_xlabel('EODf multiple')
|
|
axi.set_ylabel('Nr')
|
|
# axi.set_xlim(0, 13)
|
|
# axes.join
|
|
ax_isi[0].get_shared_x_axes().join(*ax_isi)
|
|
|
|
end_name = suptitles + ' a_fr=' + str(a_fr) + ' ' + ' dendride=' + str(
|
|
dendrid_name) + ' refractory period=' + str(ref_type_name) + ' adapt=' + str(
|
|
adapt_type_name) + ' ' + ' cutoff1=' + str(cut_off1) + '' ' stimulus length=' + str(
|
|
stimulus_length) + ' ' + ' power=' + str(
|
|
power) + ' ' + restrict #
|
|
end_name = cut_title(end_name, datapoints=120)
|
|
name_title = end_name
|
|
plt.suptitle(name_title) # +' file '
|
|
|
|
set_clim_shared(clims, ims, maxs, mins, nr_clim, perc05, perc95)
|
|
|
|
axes = np.array([np.array(ax_data), np.array(ax_model[0:int(len(ax_model) / 2)]),
|
|
np.array(ax_model[int(len(ax_model) / 2)::]), np.array(ax_isi)])
|
|
fig.tag(np.transpose(axes), xoffs=-3, yoffs=1.2, minor_index=2)
|
|
|
|
# plt.show()
|
|
save_visualization(pdf=True)
|
|
# if show:
|
|
# plt.show()
|
|
|
|
|
|
def model_sheme_in_one(grid_sheme, time_transform=1000, ws=0.1, nfft=4096 * 6, stimulus_length=5, fft_type='mppsd',
|
|
a_fr=1, a_fe=0.2,
|
|
v_exp=1, exp_tau=0.1, counter=0, counterp=0, color='darkgrey', log=True,
|
|
shift=0.25):
|
|
# need to reduce parameters
|
|
# parameters = pd.read_csv("models_big_fit_d_right.csv", index_col=0)
|
|
# load_name = "models_big_fit_d_right.csv"#"models_big_fit.csv"
|
|
# parameters = pd.read_csv(load_name)
|
|
|
|
# potentiell zellen wo der range nicht zu weit ist : 0, 9
|
|
# problem 0, 10: spikt manchmal
|
|
# problem 9: presynaptic oscilation nicht so schön
|
|
# gute Zellen: 5
|
|
# ok ich mach Zelle Null weil sie am schönsten aussieht, die spikt manchmal aber das klammern wir jetzt halt aus
|
|
# good_cells = pd.read_csv("good_model_cells.csv", index_col=0)
|
|
# 2 ist wohl sehr nah, das geht!
|
|
# 0,1,3,7 weit entfernt
|
|
# 4,5,6 sehr weit entfernt
|
|
# 8 ist wohl am nächsten!
|
|
# embed()
|
|
# model_params = parameters.iloc[0]
|
|
# model_params = parameters[parameters['cell'].isin(good_cells.cell[0:-1]+'-invivo-1')].iloc[2]
|
|
|
|
load_name = 'models_big_fit_d_right.csv'
|
|
cell_nr = 8 # 5#5#6#3
|
|
# model_params = load_model(load_name=load_name, cell_nr = cell_nr)
|
|
models = resave_small_files("models_big_fit_d_right.csv", load_folder='calc_model_core')
|
|
model_params = models[models['cell'] == '2012-07-03-ak-invivo-1'].iloc[0]
|
|
|
|
# amp_frame = pd.read_csv('peak_amplitudes_power.csv')
|
|
|
|
cell = model_params.pop('cell') # .iloc[0]# Werte für das Paper nachschauen
|
|
eod_fr = model_params.pop('EODf') # .iloc[0]
|
|
deltat = model_params.pop("deltat") # .iloc[0]
|
|
v_offset = model_params.pop("v_offset") # .iloc[0]
|
|
cell_nr = 8 # 5#5#6#3
|
|
# embed()
|
|
|
|
eod_fe = [eod_fr + 50] # eod_fr*1+50,, eod_fr * 2 + 50
|
|
mult_nr = 0
|
|
|
|
# REMAINING rows
|
|
color_p3 = 'grey' # 'red'#palette['red']
|
|
color_p1 = 'grey' # 'blue'#palette['blue']
|
|
color_diagonal = 'grey' # 'cyan'#palette['cyan']
|
|
colors = [color_diagonal, color_p1, color_p1, color_p3]
|
|
|
|
ax_rec = [[]] * 4
|
|
ax_low = [[]] * 4
|
|
axt_IF1 = []
|
|
axt_IF2 = []
|
|
adds = [[0, 0, 0, 0], [0, 0, 2, 10]]
|
|
nrs_grid = [0, 1, 3, 4]
|
|
# delta_f = (eod_fe[mult_nr] - eod_fr) - eod_fr
|
|
delta_f = [50] # create_beat_corr(np.array([eod_fe[mult_nr] - eod_fr]), np.array([eod_fr]))[0]
|
|
|
|
# time, stimulus_here, eod_fish_r, eod_fish_e, stimulus = make_paramters(
|
|
# stimulus_length, deltat, eod_fr, a_fr, a_fe, eod_fe, mult_nr)
|
|
counter_here = 0
|
|
|
|
# fig = plt.figure()
|
|
nrs = [1, 2, 3, 4]
|
|
|
|
# first row for the stimulus, and then three cols for the sheme, and the power 1 and power 3
|
|
grid0 = gridspec.GridSpecFromSubplotSpec(1, 2, subplot_spec=grid_sheme, width_ratios=[1, 3], wspace=0.35)
|
|
|
|
# Grid for the sheme
|
|
try:
|
|
grid_sheme = gridspec.GridSpecFromSubplotSpec(3, 1,
|
|
subplot_spec=grid0[0], wspace=0.2, hspace=0.95)
|
|
except:
|
|
print('grid thing5')
|
|
embed()
|
|
|
|
lw = 0.5
|
|
wr = [1, 1.2]
|
|
xlim = 0.065
|
|
axps = []
|
|
axps_lowpass = []
|
|
axps_stimulus = []
|
|
pps = []
|
|
pps_lowpass = []
|
|
pps_stimulus = []
|
|
ax_am_sp_s = []
|
|
ax_ams = []
|
|
colors_chosen = []
|
|
counter_g = 0
|
|
for mult_nr in range(len(eod_fe)):
|
|
try:
|
|
time, stimulus_rec, eod_fish_r, eod_fish_e, stimulus = make_paramters(
|
|
stimulus_length, deltat, eod_fr, a_fr, a_fe, eod_fe, mult_nr)
|
|
except:
|
|
print('parameter thing5')
|
|
embed()
|
|
# colors = ['grey', 'grey', 'grey', 'grey']
|
|
colorful_title = False
|
|
# embed()
|
|
|
|
# ok das hier scheint umständlich, aber ich hab einmal die eod_fe schleife und einmal die stimulus schleife
|
|
# einfach eine stimulus schleife zu machen würde mehrere änderungen bedeutetn
|
|
eod_fish_r_rec = eod_fish_r * 1
|
|
eod_fish_r_rec[eod_fish_r_rec < 0] = 0
|
|
add_pos, color_add_pos, titles, stimuli, eod_fish_rs = titles_EIF(eod_fish_r, eod_fish_r_rec, color_p1,
|
|
color_p3, mult_nr, eod_fr, eod_fe, stimulus,
|
|
stimulus_rec, colorful_title)
|
|
# else:
|
|
|
|
stimulus_here = do_withenoise_stimulus(deltat, eod_fr, stimulus_length)
|
|
titles = [titles[1]]
|
|
g = 0
|
|
# for g, stimulus_here in enumerate([stimuli[1]]):
|
|
add = 0
|
|
color = colors[counter_here]
|
|
|
|
# A grid for a single POWER column
|
|
grid_power_col = gridspec.GridSpecFromSubplotSpec(6, 1,
|
|
subplot_spec=grid0[nrs[counter_here]],
|
|
height_ratios=[0.7, 1, 0.7, 1, 0.7, 1], wspace=0.45,
|
|
hspace=0.65)
|
|
|
|
# FIRST Row: Rectified stimulus
|
|
grid_lowpass = gridspec.GridSpecFromSubplotSpec(1, 2,
|
|
subplot_spec=grid_power_col[1], wspace=ws, hspace=1.3,
|
|
width_ratios=wr)
|
|
|
|
plot_point = [[], [], [], 'yes']
|
|
counter, ax_rec[counter_here], ff, pp, axp = plot_rec_stimulus(eod_fr, grid_lowpass, time_transform,
|
|
stimulus_here, color, color,
|
|
time, counter, eod_fr, titles, g, deltat,
|
|
fft_type, nfft, log, counterp, shift=shift,
|
|
delta_f=delta_f,
|
|
plot_point=plot_point[counter_here], lw=lw,
|
|
xlim=xlim)
|
|
|
|
pps_stimulus.append(pp)
|
|
axps_stimulus.append(axp)
|
|
colors_chosen.append(color)
|
|
|
|
if counter_here == 0:
|
|
ax_rec[counter_here].text(-7, 0, '0', color='black', ha='center', va='center')
|
|
|
|
# if colorful_title:
|
|
# rainbow_title(fig, ax_rec[counter_here], titles[g], add_pos[g], color_add_pos[g])
|
|
# else:
|
|
ax_rec[counter_here].text(add_pos[g], 1.1, titles[g],
|
|
transform=ax_rec[counter_here].transAxes, ) # verticalalignment='right',
|
|
# And plot correspoding sheme
|
|
# if g == 0:
|
|
axsheme = plt.subplot(grid_power_col[0])
|
|
plot_sheme_nonlinearity(axsheme, color_p3, color_p1, color_diagonal=color_diagonal)
|
|
|
|
# REMAINING Rows: dendridic filter / LIF /EIF stimulus
|
|
exponential = '' # , 'EIF'
|
|
# for ee, exponential in enumerate(exponentials):
|
|
|
|
# model
|
|
# v_offset, model_params, load_name= implement_three_core(cell,amp_frame, titles, g, cell_nr = cell_nr)
|
|
# for hard coding the offset here i check the change of the baseline
|
|
manual_offset = False
|
|
if manual_offset:
|
|
spike_times, v_dent_output, v_mem_output = simulate2(load_name,
|
|
v_offset,
|
|
eod_fish_rs[g], deltat=deltat,
|
|
exponential=exponential, v_exp=v_exp,
|
|
exp_tau=exp_tau,
|
|
**model_params)
|
|
print('Firing rate baseline ' + str(len(spike_times) / stimulus_length))
|
|
spike_times, v_dent_output, v_mem_output = simulate2(load_name,
|
|
v_offset,
|
|
stimulus_here, deltat=deltat, exponential=exponential,
|
|
v_exp=v_exp, exp_tau=exp_tau,
|
|
**model_params)
|
|
|
|
# if (ee == 0):
|
|
# SECOND Row: Dendridic Low pass filter
|
|
|
|
grid_lowpass = gridspec.GridSpecFromSubplotSpec(1, 2,
|
|
subplot_spec=grid_power_col[3], width_ratios=wr, wspace=ws,
|
|
hspace=1.3)
|
|
plot_point = [[], [], [], 'yes']
|
|
ax_low[counter_here], ff, pp, axp_p2, ff_am, pp_am = plot_lowpass(eod_fr, grid_lowpass, time_transform, time,
|
|
shift, v_dent_output, color, color, deltat,
|
|
fft_type, nfft, log, counterp, eod_fr,
|
|
xlim=xlim, delta_f=delta_f,
|
|
plot_point=plot_point[counter_here], lw=lw)
|
|
pps_lowpass.append(pp)
|
|
axps_lowpass.append(axp_p2)
|
|
colors_chosen.append(color)
|
|
|
|
if counter_here == 0:
|
|
ax_low[counter_here].text(-7, 0, '0', color='black', ha='center', va='center')
|
|
|
|
# if g == 0:
|
|
axsheme = plt.subplot(grid_power_col[2])
|
|
# axsheme.set_aspect('equal')
|
|
plot_sheme_lowpass(axsheme)
|
|
|
|
# THIRD /FORTH Row: LIF /EIF
|
|
|
|
# plot the voltage of the exponentials
|
|
grid_lowpass = gridspec.GridSpecFromSubplotSpec(1, 2, width_ratios=wr,
|
|
subplot_spec=grid_power_col[5], wspace=ws,
|
|
hspace=1.45)
|
|
|
|
add = adds[g] # [2+ee]
|
|
plot_point = ['yes', 'yes', [], 'yes']
|
|
# embed()
|
|
axt_IF, axp_IF, ff, pp, axp_s, pp_s = plot_spikes(grid_lowpass, time_transform, v_mem_output, time, color,
|
|
spike_times, shift, deltat, fft_type, nfft, eod_fr, xlim=xlim,
|
|
exponential=exponential,
|
|
counter_here=counter_here) # , add = add
|
|
|
|
|
|
axps.append(axp_s)
|
|
pps.append(pp_s)
|
|
# colors_chosen.append(color)
|
|
colors_chosen.append('black')
|
|
# if ee == 0:
|
|
# axt_IF1.append(axt_IF)
|
|
# else:
|
|
axt_IF2.append(axt_IF)
|
|
if g == 0:
|
|
axsheme = plt.subplot(grid_power_col[4]) # grid_sheme[ee + 2]
|
|
# axsheme.set_aspect('equal')
|
|
plot_sheme_IF(axsheme, exp_tau, v_exp, exponential)
|
|
|
|
################################
|
|
# here plot the amplitude modulation relationship
|
|
|
|
counter_g += 1
|
|
counter_here += 1
|
|
|
|
# embed()
|
|
devide = np.max(np.max(pps))
|
|
|
|
# plot psd with shared log lim
|
|
|
|
####################################
|
|
# cut first parts
|
|
# because otherwise there is a dip at the beginning and thats a problem for the range thing
|
|
ff, pps_stimulus, pps_lowpass, pps = cut_first_parts(ff, pps_stimulus, pps_lowpass, pps, ll=0)
|
|
|
|
# here I calculate the log and do the same range for all power spectra
|
|
# this is kind of complicated but some cells spike even withouth thresholding and we want to keep their noise floor down
|
|
# not to see the peaks in the noise
|
|
pp3_stimulus = create_same_max(np.concatenate([pps_stimulus, pps_lowpass]), same=True)
|
|
# pp3_stimulus = np.concatenate(pp3_stimulus)
|
|
axps_stimulus = np.concatenate([axps_stimulus, axps_lowpass, ])
|
|
# pp3_stimulus = create_same_range_ps(axps, pps_stimulus)
|
|
pps3 = create_same_max(pps, same=True)
|
|
|
|
pp3 = create_same_range(np.concatenate([pp3_stimulus, pps3]))
|
|
axps_stimulus = np.concatenate([axps_stimulus, axps])
|
|
# embed()
|
|
|
|
# pp3[4] = np.array([float('nan')]*len(pp3[4]))
|
|
# embed()
|
|
# ok i do this because most cells dont spike, but they are not nice to show because of the very high offset between persynaptci potenatil and spike
|
|
# there are only few cells where the distance is not so high and this cells spike occationally but very randomly still we dont wanna se their power specturm
|
|
# therefore we dont show it
|
|
colors = [color_diagonal, color_p1, color_p1, color_p3,
|
|
color_diagonal, color_p1, color_p1, color_p3,
|
|
color_diagonal, color_p1, color_p1, color_p3, ]
|
|
|
|
plot_points = ['yes', 'yes', 'yes', 'yes',
|
|
'yes', 'yes', 'yes', 'yes',
|
|
'yes', 'yes', 'yes', 'yes',
|
|
'yes', 'yes', 'yes', 'yes', ]
|
|
plot_points = [[], 'yes', [], 'yes',
|
|
[], 'yes', [], 'yes',
|
|
[], 'yes', [], 'yes',
|
|
[], 'yes', [], 'yes', ]
|
|
for a, axp in enumerate(axps_stimulus):
|
|
lw_p = 0.8
|
|
|
|
plot_power_common_lim(axp, pp3[a], 0, ff / eod_fr, colors[a], lw_p, plot_points[a], delta_f / eod_fr, log=False,
|
|
devide=devide)
|
|
if a % 4 == 3:
|
|
axp.yscalebar(1, 0.5, 20, 'dB', va='center', ha='right')
|
|
##axp.get_shared_y_axes().join(*axes)
|
|
axps_stimulus[0].get_shared_y_axes().join(*axps_stimulus)
|
|
# for a,axp in enumerate(axps_stimulus):
|
|
# lw_p = 0.8
|
|
# #embed()
|
|
# plot_power_common_lim(axp, pp3_stimulus[a], 0, ff/eod_fr, colors_chosen[a], lw_p, plot_points[a], delta_f/eod_fr, asPoint=asPoint, log=False, devide=devide)
|
|
|
|
axes = [ax_rec, ax_low, axt_IF1]
|
|
# share_yaxis(axes)
|
|
# share_yaxis([ax_am_sp_s])
|
|
|
|
|
|
def model_sheme(grid_sheme, time_transform=1000, ws=0.1, nfft=4096 * 6, stimulus_length=5, fft_type='mppsd', a_fr=1,
|
|
a_fe=0.2,
|
|
v_exp=1, exp_tau=0.1, counter=0, counterp=0, color='darkgrey', log=True,
|
|
shift=0.25):
|
|
# need to reduce parameters
|
|
# parameters = pd.read_csv("models_big_fit_d_right.csv", index_col=0)
|
|
# load_name = "models_big_fit_d_right.csv"#"models_big_fit.csv"
|
|
# parameters = pd.read_csv(load_name)
|
|
|
|
# potentiell zellen wo der range nicht zu weit ist : 0, 9
|
|
# problem 0, 10: spikt manchmal
|
|
# problem 9: presynaptic oscilation nicht so schön
|
|
# gute Zellen: 5
|
|
# ok ich mach Zelle Null weil sie am schönsten aussieht, die spikt manchmal aber das klammern wir jetzt halt aus
|
|
# good_cells = pd.read_csv("good_model_cells.csv", index_col=0)
|
|
# 2 ist wohl sehr nah, das geht!
|
|
# 0,1,3,7 weit entfernt
|
|
# 4,5,6 sehr weit entfernt
|
|
# 8 ist wohl am nächsten!
|
|
# embed()
|
|
# model_params = parameters.iloc[0]
|
|
# model_params = parameters[parameters['cell'].isin(good_cells.cell[0:-1]+'-invivo-1')].iloc[2]
|
|
|
|
load_name = 'models_big_fit_d_right.csv'
|
|
cell_nr = 8 # 5#5#6#3
|
|
# model_params = load_model(load_name=load_name, cell_nr = cell_nr)
|
|
models = resave_small_files("models_big_fit_d_right.csv", load_folder='calc_model_core')
|
|
model_params = models[models['cell'] == '2012-07-03-ak-invivo-1'].iloc[0]
|
|
|
|
# amp_frame = pd.read_csv('peak_amplitudes_power.csv')
|
|
|
|
cell = model_params.pop('cell') # .iloc[0]# Werte für das Paper nachschauen
|
|
eod_fr = model_params.pop('EODf') # .iloc[0]
|
|
deltat = model_params.pop("deltat") # .iloc[0]
|
|
v_offset = model_params.pop("v_offset") # .iloc[0]
|
|
cell_nr = 8 # 5#5#6#3
|
|
# embed()
|
|
|
|
eod_fe = [eod_fr + 50] # eod_fr*1+50,, eod_fr * 2 + 50
|
|
mult_nr = 0
|
|
|
|
# REMAINING rows
|
|
color_p3 = 'grey' # 'red'#palette['red']
|
|
color_p1 = 'grey' # 'blue'#palette['blue']
|
|
color_diagonal = 'grey' # 'cyan'#palette['cyan']
|
|
colors = [color_diagonal, color_p1, color_p1, color_p3]
|
|
|
|
ax_rec = [[]] * 4
|
|
ax_low = [[]] * 4
|
|
axt_IF1 = []
|
|
axt_IF2 = []
|
|
adds = [[0, 0, 0, 0], [0, 0, 2, 10]]
|
|
nrs_grid = [0, 1, 3, 4]
|
|
# delta_f = (eod_fe[mult_nr] - eod_fr) - eod_fr
|
|
delta_f = [50] # create_beat_corr(np.array([eod_fe[mult_nr] - eod_fr]), np.array([eod_fr]))[0]
|
|
|
|
# time, stimulus_here, eod_fish_r, eod_fish_e, stimulus = make_paramters(
|
|
# stimulus_length, deltat, eod_fr, a_fr, a_fe, eod_fe, mult_nr)
|
|
counter_here = 0
|
|
|
|
# fig = plt.figure()
|
|
nrs = [1, 2, 3, 4]
|
|
|
|
# first row for the stimulus, and then three cols for the sheme, and the power 1 and power 3
|
|
grid0 = gridspec.GridSpecFromSubplotSpec(1, 2, subplot_spec=grid_sheme, width_ratios=[1, 3], wspace=0.35)
|
|
|
|
# Grid for the sheme
|
|
try:
|
|
grid_sheme = gridspec.GridSpecFromSubplotSpec(3, 1,
|
|
subplot_spec=grid0[0], wspace=0.2, hspace=0.95)
|
|
except:
|
|
print('grid thing2')
|
|
embed()
|
|
|
|
lw = 0.5
|
|
wr = [1, 1.2]
|
|
xlim = 0.065
|
|
axps = []
|
|
axps_lowpass = []
|
|
axps_stimulus = []
|
|
pps = []
|
|
pps_lowpass = []
|
|
pps_stimulus = []
|
|
ax_am_sp_s = []
|
|
ax_ams = []
|
|
colors_chosen = []
|
|
counter_g = 0
|
|
for mult_nr in range(len(eod_fe)):
|
|
try:
|
|
time, stimulus_rec, eod_fish_r, eod_fish_e, stimulus = make_paramters(
|
|
stimulus_length, deltat, eod_fr, a_fr, a_fe, eod_fe, mult_nr)
|
|
except:
|
|
print('parameter thing3')
|
|
embed()
|
|
# colors = ['grey', 'grey', 'grey', 'grey']
|
|
colorful_title = False
|
|
# embed()
|
|
|
|
# ok das hier scheint umständlich, aber ich hab einmal die eod_fe schleife und einmal die stimulus schleife
|
|
# einfach eine stimulus schleife zu machen würde mehrere änderungen bedeutetn
|
|
eod_fish_r_rec = eod_fish_r * 1
|
|
eod_fish_r_rec[eod_fish_r_rec < 0] = 0
|
|
add_pos, color_add_pos, titles, stimuli, eod_fish_rs = titles_EIF(eod_fish_r, eod_fish_r_rec, color_p1,
|
|
color_p3, mult_nr, eod_fr, eod_fe, stimulus,
|
|
stimulus_rec, colorful_title)
|
|
# else:
|
|
|
|
stimulus_here = do_withenoise_stimulus(deltat, eod_fr, stimulus_length)
|
|
titles = [titles[1]]
|
|
g = 0
|
|
# for g, stimulus_here in enumerate([stimuli[1]]):
|
|
add = 0
|
|
color = colors[counter_here]
|
|
|
|
# A grid for a single POWER column
|
|
grid_power_col = gridspec.GridSpecFromSubplotSpec(3, 1,
|
|
subplot_spec=grid0[nrs[counter_here]],
|
|
height_ratios=[1, 1, 1], wspace=0.45, hspace=0.5)
|
|
|
|
# FIRST Row: Rectified stimulus
|
|
grid_lowpass = gridspec.GridSpecFromSubplotSpec(1, 2,
|
|
subplot_spec=grid_power_col[0], wspace=ws, hspace=1.3,
|
|
width_ratios=wr)
|
|
|
|
plot_point = [[], [], [], 'yes']
|
|
counter, ax_rec[counter_here], ff, pp, axp = plot_rec_stimulus(eod_fr, grid_lowpass, time_transform,
|
|
stimulus_here, color, color,
|
|
time, counter, eod_fr, titles, g, deltat,
|
|
fft_type, nfft, log, counterp, shift=shift,
|
|
delta_f=delta_f,
|
|
plot_point=plot_point[counter_here], lw=lw,
|
|
xlim=xlim)
|
|
|
|
pps_stimulus.append(pp)
|
|
axps_stimulus.append(axp)
|
|
colors_chosen.append(color)
|
|
|
|
if counter_here == 0:
|
|
ax_rec[counter_here].text(-7, 0, '0', color='black', ha='center', va='center')
|
|
|
|
# if colorful_title:
|
|
# rainbow_title(fig, ax_rec[counter_here], titles[g], add_pos[g], color_add_pos[g])
|
|
# else:
|
|
ax_rec[counter_here].text(add_pos[g], 1.1, titles[g],
|
|
transform=ax_rec[counter_here].transAxes, ) # verticalalignment='right',
|
|
# And plot correspoding sheme
|
|
if g == 0:
|
|
axsheme = plt.subplot(grid_sheme[0])
|
|
plot_sheme_nonlinearity(axsheme, color_p3, color_p1, color_diagonal=color_diagonal)
|
|
|
|
# REMAINING Rows: dendridic filter / LIF /EIF stimulus
|
|
exponentials = [''] # , 'EIF'
|
|
for ee, exponential in enumerate(exponentials):
|
|
|
|
# model
|
|
# v_offset, model_params, load_name= implement_three_core(cell,amp_frame, titles, g, cell_nr = cell_nr)
|
|
# for hard coding the offset here i check the change of the baseline
|
|
manual_offset = False
|
|
if manual_offset:
|
|
spike_times, v_dent_output, v_mem_output = simulate2(load_name,
|
|
v_offset,
|
|
eod_fish_rs[g], deltat=deltat,
|
|
exponential=exponential, v_exp=v_exp,
|
|
exp_tau=exp_tau,
|
|
**model_params)
|
|
print('Firing rate baseline ' + str(len(spike_times) / stimulus_length))
|
|
spike_times, v_dent_output, v_mem_output = simulate2(load_name,
|
|
v_offset,
|
|
stimulus_here, deltat=deltat, exponential=exponential,
|
|
v_exp=v_exp, exp_tau=exp_tau,
|
|
**model_params)
|
|
|
|
|
|
if (ee == 0):
|
|
# SECOND Row: Dendridic Low pass filter
|
|
|
|
grid_lowpass = gridspec.GridSpecFromSubplotSpec(1, 2,
|
|
subplot_spec=grid_power_col[1], width_ratios=wr,
|
|
wspace=ws, hspace=1.3)
|
|
plot_point = [[], [], [], 'yes']
|
|
ax_low[counter_here], ff, pp, axp_p2, ff_am, pp_am = plot_lowpass(eod_fr, grid_lowpass, time_transform,
|
|
time, shift, v_dent_output, color,
|
|
color, deltat,
|
|
fft_type, nfft, log, counterp, eod_fr,
|
|
xlim=xlim, delta_f=delta_f,
|
|
plot_point=plot_point[counter_here],
|
|
lw=lw)
|
|
pps_lowpass.append(pp)
|
|
axps_lowpass.append(axp_p2)
|
|
colors_chosen.append(color)
|
|
|
|
if counter_here == 0:
|
|
ax_low[counter_here].text(-7, 0, '0', color='black', ha='center', va='center')
|
|
|
|
if g == 0:
|
|
axsheme = plt.subplot(grid_sheme[1])
|
|
# axsheme.set_aspect('equal')
|
|
plot_sheme_lowpass(axsheme)
|
|
|
|
# THIRD /FORTH Row: LIF /EIF
|
|
|
|
# plot the voltage of the exponentials
|
|
grid_lowpass = gridspec.GridSpecFromSubplotSpec(1, 2, width_ratios=wr,
|
|
subplot_spec=grid_power_col[ee + 2], wspace=ws,
|
|
hspace=1.45)
|
|
|
|
add = adds[g][2 + ee]
|
|
plot_point = ['yes', 'yes', [], 'yes']
|
|
# embed()
|
|
axt_IF, axp_IF, ff, pp, axp_s, pp_s = plot_spikes(grid_lowpass, time_transform, v_mem_output, time, color,
|
|
spike_times, shift, deltat, fft_type, nfft, eod_fr,
|
|
xlim=xlim, exponential=exponential,
|
|
counter_here=counter_here) # , add = add
|
|
|
|
# pps.append(pp)
|
|
# axps.append(axp_IF)
|
|
axps.append(axp_s)
|
|
pps.append(pp_s)
|
|
# colors_chosen.append(color)
|
|
colors_chosen.append('black')
|
|
if ee == 0:
|
|
axt_IF1.append(axt_IF)
|
|
else:
|
|
axt_IF2.append(axt_IF)
|
|
if g == 0:
|
|
axsheme = plt.subplot(grid_sheme[ee + 2])
|
|
# axsheme.set_aspect('equal')
|
|
plot_sheme_IF(axsheme, exp_tau, v_exp, exponential)
|
|
|
|
################################
|
|
# here plot the amplitude modulation relationship
|
|
|
|
|
|
|
|
# ax_am = plt.subplot(grid_amp_mod[0])
|
|
# ax_am.plot(a_fes, mod_mem, color = color)
|
|
# ax_ams.append( ax_am)
|
|
counter_g += 1
|
|
# embed()
|
|
# plt.show()
|
|
counter_here += 1
|
|
|
|
# embed()
|
|
devide = np.max(np.max(pps))
|
|
# plot_points = np.array([[], [], [], 'yes',
|
|
# [], [], [], 'yes'
|
|
# ,'yes','yes',[],'yes'
|
|
# ,'yes','yes',[],'yes'])
|
|
# von oben nach unten von links nach rechts
|
|
|
|
# plot psd with shared log lim
|
|
|
|
####################################
|
|
# cut first parts
|
|
# because otherwise there is a dip at the beginning and thats a problem for the range thing
|
|
ff, pps_stimulus, pps_lowpass, pps = cut_first_parts(ff, pps_stimulus, pps_lowpass, pps, ll=0)
|
|
|
|
# here I calculate the log and do the same range for all power spectra
|
|
# this is kind of complicated but some cells spike even withouth thresholding and we want to keep their noise floor down
|
|
# not to see the peaks in the noise
|
|
pp3_stimulus = create_same_max(np.concatenate([pps_stimulus, pps_lowpass]), same=True)
|
|
# pp3_stimulus = np.concatenate(pp3_stimulus)
|
|
axps_stimulus = np.concatenate([axps_stimulus, axps_lowpass, ])
|
|
# pp3_stimulus = create_same_range_ps(axps, pps_stimulus)
|
|
pps3 = create_same_max(pps, same=True)
|
|
|
|
pp3 = create_same_range(np.concatenate([pp3_stimulus, pps3]))
|
|
axps_stimulus = np.concatenate([axps_stimulus, axps])
|
|
# embed()
|
|
|
|
# pp3[4] = np.array([float('nan')]*len(pp3[4]))
|
|
# embed()
|
|
# ok i do this because most cells dont spike, but they are not nice to show because of the very high offset between persynaptci potenatil and spike
|
|
# there are only few cells where the distance is not so high and this cells spike occationally but very randomly still we dont wanna se their power specturm
|
|
# therefore we dont show it
|
|
colors = [color_diagonal, color_p1, color_p1, color_p3,
|
|
color_diagonal, color_p1, color_p1, color_p3,
|
|
color_diagonal, color_p1, color_p1, color_p3, ]
|
|
|
|
plot_points = ['yes', 'yes', 'yes', 'yes',
|
|
'yes', 'yes', 'yes', 'yes',
|
|
'yes', 'yes', 'yes', 'yes',
|
|
'yes', 'yes', 'yes', 'yes', ]
|
|
plot_points = [[], 'yes', [], 'yes',
|
|
[], 'yes', [], 'yes',
|
|
[], 'yes', [], 'yes',
|
|
[], 'yes', [], 'yes', ]
|
|
for a, axp in enumerate(axps_stimulus):
|
|
lw_p = 0.8
|
|
|
|
plot_power_common_lim(axp, pp3[a], 0, ff / eod_fr, colors[a], lw_p, plot_points[a], delta_f / eod_fr, log=False,
|
|
devide=devide)
|
|
if a % 4 == 3:
|
|
axp.yscalebar(1, 0.5, 20, 'dB', va='center', ha='right')
|
|
##axp.get_shared_y_axes().join(*axes)
|
|
axps_stimulus[0].get_shared_y_axes().join(*axps_stimulus)
|
|
# for a,axp in enumerate(axps_stimulus):
|
|
# lw_p = 0.8
|
|
# #embed()
|
|
# plot_power_common_lim(axp, pp3_stimulus[a], 0, ff/eod_fr, colors_chosen[a], lw_p, plot_points[a], delta_f/eod_fr, asPoint=asPoint, log=False, devide=devide)
|
|
|
|
axes = [ax_rec, ax_low, axt_IF1]
|
|
# share_yaxis(axes)
|
|
# share_yaxis([ax_am_sp_s])
|
|
|
|
|
|
def model_sheme_vertical(grid_sheme_orig, time_transform=1000, ws=0.1, nfft=4096 * 6, stimulus_length=5,
|
|
fft_type='mppsd', a_fr=1, a_fe=0.2,
|
|
v_exp=1, exp_tau=0.1, counter=0, counterp=0, color='darkgrey', log=True,
|
|
shift=0.25):
|
|
# need to reduce parameters
|
|
# parameters = pd.read_csv("models_big_fit_d_right.csv", index_col=0)
|
|
# load_name = "models_big_fit_d_right.csv"#"models_big_fit.csv"
|
|
# parameters = pd.read_csv(load_name)
|
|
|
|
# potentiell zellen wo der range nicht zu weit ist : 0, 9
|
|
# problem 0, 10: spikt manchmal
|
|
# problem 9: presynaptic oscilation nicht so schön
|
|
# gute Zellen: 5
|
|
# ok ich mach Zelle Null weil sie am schönsten aussieht, die spikt manchmal aber das klammern wir jetzt halt aus
|
|
# good_cells = pd.read_csv("good_model_cells.csv", index_col=0)
|
|
# 2 ist wohl sehr nah, das geht!
|
|
# 0,1,3,7 weit entfernt
|
|
# 4,5,6 sehr weit entfernt
|
|
# 8 ist wohl am nächsten!
|
|
# embed()
|
|
# model_params = parameters.iloc[0]
|
|
# model_params = parameters[parameters['cell'].isin(good_cells.cell[0:-1]+'-invivo-1')].iloc[2]
|
|
|
|
load_name = 'models_big_fit_d_right.csv'
|
|
cell_nr = 8 # 5#5#6#3
|
|
# model_params = load_model(load_name=load_name, cell_nr = cell_nr)
|
|
models = resave_small_files("models_big_fit_d_right.csv", load_folder='calc_model_core')
|
|
deltat, eod_fr, model_params, v_offset = get_model_params(models, cell = '2012-07-03-ak-invivo-1')
|
|
cell_nr = 8 # 5#5#6#3
|
|
# embed()
|
|
|
|
eod_fe = [eod_fr + 50] # eod_fr*1+50,, eod_fr * 2 + 50
|
|
mult_nr = 0
|
|
|
|
# REMAINING rows
|
|
color_p3 = 'grey' # 'red'#palette['red']
|
|
color_p1 = 'grey' # 'blue'#palette['blue']
|
|
color_diagonal = 'grey' # 'cyan'#palette['cyan']
|
|
colors = [color_diagonal, color_p1, color_p1, color_p3]
|
|
|
|
ax_rec = [[]] * 4
|
|
ax_low = [[]] * 4
|
|
axt_IF1 = []
|
|
axt_IF2 = []
|
|
adds = [[0, 0, 0, 0], [0, 0, 2, 10]]
|
|
nrs_grid = [0, 1, 3, 4]
|
|
# delta_f = (eod_fe[mult_nr] - eod_fr) - eod_fr
|
|
delta_f = [50] # create_beat_corr(np.array([eod_fe[mult_nr] - eod_fr]), np.array([eod_fr]))[0]
|
|
|
|
# time, stimulus_here, eod_fish_r, eod_fish_e, stimulus = make_paramters(
|
|
# stimulus_length, deltat, eod_fr, a_fr, a_fe, eod_fe, mult_nr)
|
|
counter_here = 0
|
|
|
|
# fig = plt.figure()
|
|
nrs = [1, 2, 3, 4]
|
|
|
|
# first row for the stimulus, and then three cols for the sheme, and the power 1 and power 3
|
|
grid0 = gridspec.GridSpecFromSubplotSpec(1, 1, subplot_spec=grid_sheme_orig, wspace=0.35) # height_ratios=[1, 3]
|
|
|
|
# Grid for the sheme
|
|
|
|
lw = 0.5
|
|
wr = [1, 1.2]
|
|
hr = [1]
|
|
xlim = 0.065
|
|
axps = []
|
|
axps_lowpass = []
|
|
axps_stimulus = []
|
|
pps = []
|
|
pps_lowpass = []
|
|
pps_stimulus = []
|
|
ax_am_sp_s = []
|
|
ax_ams = []
|
|
colors_chosen = []
|
|
counter_g = 0
|
|
for mult_nr in range(len(eod_fe)):
|
|
try:
|
|
time, stimulus_rec, eod_fish_r, eod_fish_e, stimulus = make_paramters(
|
|
stimulus_length, deltat, eod_fr, a_fr, a_fe, eod_fe, mult_nr)
|
|
except:
|
|
print('parameter thing2')
|
|
embed()
|
|
# colors = ['grey', 'grey', 'grey', 'grey']
|
|
colorful_title = False
|
|
# embed()
|
|
|
|
# ok das hier scheint umständlich, aber ich hab einmal die eod_fe schleife und einmal die stimulus schleife
|
|
# einfach eine stimulus schleife zu machen würde mehrere änderungen bedeutetn
|
|
eod_fish_r_rec = eod_fish_r * 1
|
|
eod_fish_r_rec[eod_fish_r_rec < 0] = 0
|
|
add_pos, color_add_pos, titles, stimuli, eod_fish_rs = titles_EIF(eod_fish_r, eod_fish_r_rec, color_p1,
|
|
color_p3, mult_nr, eod_fr, eod_fe, stimulus,
|
|
stimulus_rec, colorful_title)
|
|
# else:
|
|
|
|
sampling = 1 / deltat
|
|
time_eod = np.arange(0, stimulus_length, deltat)
|
|
eod_interp, time_wn_cut, _ = load_noise('gwn300Hz50s0.3')
|
|
# try:
|
|
eod_interp = interpolate(time_wn_cut, eod_interp,
|
|
time_eod,
|
|
kind='cubic')
|
|
# nrs = 6 # 10
|
|
fake_fish = fakefish.wavefish_eods('Alepto', frequency=eod_fr,
|
|
samplerate=sampling,
|
|
duration=len(time_eod) / sampling,
|
|
phase0=0.0, noise_std=0.00)
|
|
|
|
stimulus_here = fake_fish * (1 + eod_interp * 0.2)
|
|
# embed()
|
|
titles = [titles[1]]
|
|
g = 0
|
|
# for g, stimulus_here in enumerate([stimuli[1]]):
|
|
add = 0
|
|
color = colors[counter_here]
|
|
|
|
hs = 0.2 # 1.3
|
|
# A grid for a single POWER column
|
|
grid_power_col = gridspec.GridSpecFromSubplotSpec(1, 6,
|
|
subplot_spec=grid0[0], width_ratios=[0.5, 1, 0.5, 1, 0.5, 1],
|
|
wspace=0.45, hspace=0.5)
|
|
|
|
# FIRST Row: Rectified stimulus
|
|
grid_lowpass = gridspec.GridSpecFromSubplotSpec(1, 2,
|
|
subplot_spec=grid_power_col[1], wspace=ws, hspace=hs,
|
|
width_ratios=wr, height_ratios=hr)
|
|
|
|
plot_point = [[], [], [], 'yes']
|
|
counter, ax_rec[counter_here], ff, pp, axp = plot_rec_stimulus(eod_fr, grid_lowpass, time_transform,
|
|
stimulus_here, color, color,
|
|
time, counter, eod_fr, titles, g, deltat,
|
|
fft_type, nfft, log, counterp, shift=shift,
|
|
delta_f=delta_f,
|
|
plot_point=plot_point[counter_here], lw=lw,
|
|
xlim=xlim)
|
|
|
|
pps_stimulus.append(pp)
|
|
axps_stimulus.append(axp)
|
|
colors_chosen.append(color)
|
|
|
|
if counter_here == 0:
|
|
ax_rec[counter_here].text(-7, 0, '0', color='black', ha='center', va='center')
|
|
|
|
# if colorful_title:
|
|
# rainbow_title(fig, ax_rec[counter_here], titles[g], add_pos[g], color_add_pos[g])
|
|
# else:
|
|
ax_rec[counter_here].text(add_pos[g], 1.1, titles[g],
|
|
transform=ax_rec[counter_here].transAxes, ) # verticalalignment='right',
|
|
# And plot correspoding sheme
|
|
axsheme = plt.subplot(grid_power_col[0])
|
|
plot_sheme_nonlinearity(axsheme, color_p3, color_p1, color_diagonal=color_diagonal)
|
|
|
|
# REMAINING Rows: dendridic filter / LIF /EIF stimulus
|
|
exponential = '' # , 'EIF'
|
|
# for ee, exponential in enumerate(exponentials):
|
|
|
|
# model
|
|
# v_offset, model_params, load_name= implement_three_core(cell,amp_frame, titles, g, cell_nr = cell_nr)
|
|
# for hard coding the offset here i check the change of the baseline
|
|
manual_offset = False
|
|
if manual_offset:
|
|
spike_times, v_dent_output, v_mem_output = simulate2(load_name,
|
|
v_offset,
|
|
eod_fish_rs[g], deltat=deltat,
|
|
exponential=exponential, v_exp=v_exp,
|
|
exp_tau=exp_tau,
|
|
**model_params)
|
|
print('Firing rate baseline ' + str(len(spike_times) / stimulus_length))
|
|
spike_times, v_dent_output, v_mem_output = simulate2(load_name,
|
|
v_offset,
|
|
stimulus_here, deltat=deltat, exponential=exponential,
|
|
v_exp=v_exp, exp_tau=exp_tau,
|
|
**model_params)
|
|
|
|
# SECOND Row: Dendridic Low pass filter
|
|
|
|
grid_lowpass = gridspec.GridSpecFromSubplotSpec(1, 2,
|
|
subplot_spec=grid_power_col[3], height_ratios=hr,
|
|
width_ratios=wr, wspace=ws, hspace=hs)
|
|
plot_point = [[], [], [], 'yes']
|
|
ax_low[counter_here], ff, pp, axp_p2, ff_am, pp_am = plot_lowpass(eod_fr, grid_lowpass, time_transform, time,
|
|
shift, v_dent_output, color, color, deltat,
|
|
fft_type, nfft, log, counterp, eod_fr,
|
|
xlim=xlim, delta_f=delta_f,
|
|
plot_point=plot_point[counter_here], lw=lw)
|
|
pps_lowpass.append(pp)
|
|
axps_lowpass.append(axp_p2)
|
|
colors_chosen.append(color)
|
|
|
|
if counter_here == 0:
|
|
ax_low[counter_here].text(-7, 0, '0', color='black', ha='center', va='center')
|
|
|
|
axsheme = plt.subplot(grid_power_col[2])
|
|
# axsheme.set_aspect('equal')
|
|
plot_sheme_lowpass(axsheme)
|
|
|
|
# THIRD /FORTH Row: LIF /EIF
|
|
|
|
# plot the voltage of the exponentials
|
|
grid_lowpass = gridspec.GridSpecFromSubplotSpec(1, 2, height_ratios=hr, width_ratios=wr,
|
|
subplot_spec=grid_power_col[5], wspace=ws,
|
|
hspace=hs)
|
|
|
|
# add = adds[g][2+ee]
|
|
plot_point = ['yes', 'yes', [], 'yes']
|
|
# embed()
|
|
axt_IF, axp_IF, ff, pp, axp_s, pp_s = plot_spikes(grid_lowpass, time_transform, v_mem_output, time, color,
|
|
spike_times, shift, deltat, fft_type, nfft, eod_fr, xlim=xlim,
|
|
exponential=exponential,
|
|
counter_here=counter_here) # , add = add
|
|
# embed()
|
|
|
|
axps.append(axp_s)
|
|
pps.append(pp_s)
|
|
# colors_chosen.append(color)
|
|
colors_chosen.append('black')
|
|
axt_IF1.append(axt_IF)
|
|
axsheme = plt.subplot(grid_power_col[4])
|
|
# axsheme.set_aspect('equal')
|
|
plot_sheme_IF(axsheme, exp_tau, v_exp, exponential)
|
|
|
|
# embed()
|
|
devide = np.max(np.max(pps))
|
|
# plot_points = np.array([[], [], [], 'yes',
|
|
# [], [], [], 'yes'
|
|
# ,'yes','yes',[],'yes'
|
|
# ,'yes','yes',[],'yes'])
|
|
# von oben nach unten von links nach rechts
|
|
|
|
# plot psd with shared log lim
|
|
|
|
####################################
|
|
# cut first parts
|
|
# because otherwise there is a dip at the beginning and thats a problem for the range thing
|
|
ff, pps_stimulus, pps_lowpass, pps = cut_first_parts(ff, pps_stimulus, pps_lowpass, pps, ll=0)
|
|
|
|
# here I calculate the log and do the same range for all power spectra
|
|
# this is kind of complicated but some cells spike even withouth thresholding and we want to keep their noise floor down
|
|
# not to see the peaks in the noise
|
|
pp3_stimulus = create_same_max(np.concatenate([pps_stimulus, pps_lowpass]), same=True)
|
|
# pp3_stimulus = np.concatenate(pp3_stimulus)
|
|
axps_stimulus = np.concatenate([axps_stimulus, axps_lowpass, ])
|
|
# pp3_stimulus = create_same_range_ps(axps, pps_stimulus)
|
|
pps3 = create_same_max(pps, same=True)
|
|
|
|
pp3 = create_same_range(np.concatenate([pp3_stimulus, pps3]))
|
|
axps_stimulus = np.concatenate([axps_stimulus, axps])
|
|
# embed()
|
|
|
|
# pp3[4] = np.array([float('nan')]*len(pp3[4]))
|
|
# embed()
|
|
# ok i do this because most cells dont spike, but they are not nice to show because of the very high offset between persynaptci potenatil and spike
|
|
# there are only few cells where the distance is not so high and this cells spike occationally but very randomly still we dont wanna se their power specturm
|
|
# therefore we dont show it
|
|
colors = [color_diagonal, color_p1, color_p1, color_p3,
|
|
color_diagonal, color_p1, color_p1, color_p3,
|
|
color_diagonal, color_p1, color_p1, color_p3, ]
|
|
|
|
plot_points = ['yes', 'yes', 'yes', 'yes',
|
|
'yes', 'yes', 'yes', 'yes',
|
|
'yes', 'yes', 'yes', 'yes',
|
|
'yes', 'yes', 'yes', 'yes', ]
|
|
plot_points = [[], 'yes', [], 'yes',
|
|
[], 'yes', [], 'yes',
|
|
[], 'yes', [], 'yes',
|
|
[], 'yes', [], 'yes', ]
|
|
for a, axp in enumerate(axps_stimulus):
|
|
lw_p = 0.8
|
|
|
|
plot_power_common_lim(axp, pp3[a], 0, ff / eod_fr, colors[a], lw_p, plot_points[a], delta_f / eod_fr, log=False,
|
|
devide=devide)
|
|
if a % 4 == 3:
|
|
axp.yscalebar(1, 0.5, 20, 'dB', va='center', ha='right')
|
|
|
|
axps_stimulus[0].get_shared_y_axes().join(*axps_stimulus)
|
|
axes = [ax_rec, ax_low, axt_IF1]
|
|
|
|
|
|
def get_model_params(models, cell = '2012-07-03-ak-invivo-1'):
|
|
model_params = models[models['cell'] == cell].iloc[0]
|
|
cell = model_params.pop('cell') # .iloc[0]# Werte für das Paper nachschauen
|
|
eod_fr = model_params.pop('EODf') # .iloc[0]
|
|
deltat = model_params.pop("deltat") # .iloc[0]
|
|
v_offset = model_params.pop("v_offset") # .iloc[0]
|
|
return deltat, eod_fr, model_params, v_offset
|
|
|
|
|
|
def share_yaxis(axes):
|
|
for ax in axes: # , axt_IF2
|
|
ax[0].get_shared_y_axes().join(*ax)
|
|
# embed()
|
|
maxs = []
|
|
mins = []
|
|
for a in ax:
|
|
maxs.append(np.nanmax(a.get_ylim()))
|
|
mins.append(np.nanmin(a.get_ylim()))
|
|
for a in ax:
|
|
a.set_ylim(np.min(mins), np.max(maxs))
|
|
|
|
|
|
def flowchart():
|
|
default_settings(column=2, length=7)
|
|
cell = "2013-01-08-aa-invivo-1"
|
|
model_cells = resave_small_files("models_big_fit_d_right.csv", load_folder='calc_model_core')
|
|
model_params = model_cells[model_cells.cell == cell].iloc[0]
|
|
stimulus_length = 1 # 0
|
|
noise_strength = model_params.noise_strength # **2/2
|
|
a_fr = 1 # ,0]#0,,0,]#,0 ,0 ] # ,0,]#0#1
|
|
input_scaling = model_params.input_scaling
|
|
stimulus_length_here = stimulus_length
|
|
eod_fr = model_params['EODf']
|
|
deltat = model_params.pop("deltat")
|
|
time_here = np.arange(0, stimulus_length_here * 2, deltat)
|
|
|
|
cut_offs = [eod_fr / 2]
|
|
var_type = 'additiv_cutoff_scaled' # ]#'additiv_visual_d_4_scaled']
|
|
fig, ax = plt.subplots(6, (len(cut_offs) + 1) * len(var_types)) # , constrained_layout = True figsize=(12, 5),
|
|
colors_title = [['black', 'purple', 'black', 'black', 'black', 'black'],
|
|
['black', 'black', 'black', 'black', 'black', 'purple']]
|
|
d_new_zeros = {}
|
|
tags = []
|
|
c_sig = 0.9
|
|
c_noise = 0.1
|
|
d_new_zeros[var_type] = []
|
|
|
|
arrays2 = np.load(load_folder('calc_RAM') + '\RAM_extraction_a1_' + var_type + '.npy', allow_pickle=True)
|
|
arrays = np.load(load_folder('calc_RAM') + '\RAM_extraction_a0_' + var_type + '.npy', allow_pickle=True)
|
|
# embed()
|
|
titles = ['Noise', 'RAM', 'RAM*Carrier',
|
|
'RAM*Carrier to RAM', 'V_dent', 'V_dent to RAM']
|
|
colors = ['grey', 'red', 'grey', 'red', 'grey', 'red']
|
|
max_f = 9999.875 # hab ich aus np.fft.fft(noise)
|
|
var_desired = '$var_{desired} = $' + str(np.round(np.var(arrays[0]) * c_sig * cut_off / max_f, 5))
|
|
D_desired = np.round(np.sqrt(noise_strength * 2 * c_sig), 5)
|
|
plt.suptitle(
|
|
'$Contrast_{receiver}=$' + str(a_fr) + ', $c_{noise}=$' + str(c_noise) + ', $c_{signal}=$' + str(
|
|
c_sig) + ', ' + var_desired + r' $\sqrt{2D*c_{signal}}$=' + str(
|
|
np.round(D_desired, 5)))
|
|
cs = [0.1, 0.9, 0.9, 0.9, 0.9, 0.9] # c_sig
|
|
grid = gridspec.GridSpecFromSubplotSpec(1, 4, grid_orig[0], wspace=1.2,
|
|
hspace=0.13)
|
|
for i in range(len(arrays)):
|
|
sampling = 1 / deltat
|
|
ax = plt.subplot(grid[i])
|
|
if len(np.arange(0, len(arrays[i]) / sampling, 1 / sampling)) > len(arrays[i]):
|
|
# embed()
|
|
ax[0 + i, 0 + v * 2].plot(np.arange(0, len(arrays[i]) / sampling, 1 / sampling)[0:-1], arrays[i],
|
|
color=colors[i])
|
|
else:
|
|
ax[0 + i, 0 + v * 2].plot(np.arange(0, len(arrays[i]) / sampling, 1 / sampling), arrays[i],
|
|
color=colors[i])
|
|
if len(arrays2[i]) > 0:
|
|
if len(np.arange(0, len(arrays2[i]) * deltat, deltat)) > len(arrays2[i]):
|
|
ax[0 + i, 0 + v * 2].plot(np.arange(0, len(arrays2[i]) * deltat, deltat)[0:-1], arrays2[i],
|
|
color='red')
|
|
else:
|
|
ax[0 + i, 0 + v * 2].plot(np.arange(0, len(arrays2[i]) * deltat, deltat), arrays2[i],
|
|
color='red')
|
|
tags.append(ax[0 + i, 0 + v * 2])
|
|
ax[0 + i, 0 + v * 2].set_title(titles[i] + ' var=' + str(np.round(np.var(arrays[i]), 5)),
|
|
color=colors_title[v][i],
|
|
fontsize=8) # +' var/c='+str(np.round(np.var(arrays[i])/cs[i],5))
|
|
ax[0 + i, 0 + v * 2].set_xlim(0, 0.1)
|
|
p_array_fft = np.fft.fft(arrays[i] - np.mean(arrays[i]), norm='forward')
|
|
f = np.fft.fftfreq(len(arrays[i]), deltat)
|
|
f_sorted = np.sort(f)
|
|
p_sorted = np.abs(p_array_fft)[np.argsort(f)]
|
|
ax[0 + i, 1 + v * 2].plot(f_sorted, p_sorted, color='grey') # np.log10(p_noise / np.max(p_noise))
|
|
left = np.argmin(np.abs(f_sorted) - 0) - 10
|
|
left2 = np.argmin(np.abs(f_sorted) - 0)
|
|
d_new_zero = np.mean(p_sorted[left:left2])
|
|
ax[0 + i, 1 + v * 2].plot(f_sorted[left:left2], p_sorted[left:left2], color='blue')
|
|
d_new_zeros[var_type].append(d_new_zero)
|
|
ax[0 + i, 1 + v * 2].set_title('D close to 0 = ' + str(np.round(d_new_zero, 5)),
|
|
color=colors_title[v][i])
|
|
ax[0 + i, 1 + v * 2].set_xlim(-eod_fr / 2 * 1.2, eod_fr / 2 * 1.2)
|
|
if i < len(arrays) - 1:
|
|
remove_yticks(ax[0 + i, 0])
|
|
remove_yticks(ax[0 + i, 1])
|
|
remove_yticks(ax[0 + i, 0 + v * 2])
|
|
remove_yticks(ax[0 + i, 1 + v * 2])
|
|
ax[0, 0 + v * 2].text(0, 1.6, var_type + ': $D_{RAM}/V_dent_{RAM} =$' + str(
|
|
np.round(d_new_zeros[var_type][1] / d_new_zeros[var_type][-1], 3)),
|
|
transform=ax[0, 0 + v * 2].transAxes, color='purple')
|
|
|
|
ax[-1, 0 + v * 2].set_xlabel('Time [s]')
|
|
ax[-1, 1 + v * 2].set_xlabel('Frequency [Hz]')
|
|
ax[-1, 1 + v * 2].set_ylabel('[Hz]')
|
|
ax[0, 0 + v * 2].get_shared_x_axes().join(*np.concatenate([ax[:, 0], ax[:, 0 + v * 2]]))
|
|
ax[0, 1 + v * 2].get_shared_x_axes().join(*np.concatenate([ax[:, 1], ax[:, 1 + v * 2]]))
|
|
ax[2, 1 + v * 2].get_shared_y_axes().join(ax[2, 1], ax[4, 1], ax[2, 1 + v * 2], ax[4, 1 + v * 2])
|
|
ax[1, 1 + v * 2].get_shared_y_axes().join(ax[0, 1], ax[1, 1], ax[3, 1], ax[5, 1], ax[0, 1 + v * 2],
|
|
ax[1, 1 + v * 2], ax[3, 1 + v * 2], ax[5, 1 + v * 2])
|
|
ax[2, 0 + v * 2].get_shared_y_axes().join(ax[2, 0], ax[4, 0], ax[2, 0 + v * 2], ax[4, 0 + v * 2])
|
|
ax[1, 0 + v * 2].get_shared_y_axes().join(ax[1, 0], ax[3, 0], ax[5, 0], ax[1, 0 + v * 2], ax[3, 0 + v * 2],
|
|
ax[5, 0 + v * 2]) # ax[0, 0],ax[0, 0+v*2],
|
|
|
|
|
|
def find_cells(file_names_exclude, sorting, cells_chosen, cell_type, cell_type_type, cell_type_chosen, load_path):
|
|
frame_base = load_cv_table()
|
|
frame_base = unify_cell_names(frame_base, cell_type=cell_type_type)
|
|
frame_base = frame_base[frame_base[cell_type_type] == cell_type_chosen]
|
|
cell_base = frame_base.cell.unique()
|
|
# frame_base
|
|
|
|
if '.csv' not in load_path:
|
|
stack = pd.read_csv(load_path + '.csv') # ,index_col = 0
|
|
else:
|
|
stack = pd.read_csv(load_path)
|
|
stack = stack[~stack['file_name'].isin(file_names_exclude)]
|
|
# embed()
|
|
stack_files = stack # [stack['celltype'].isin(cell_type)]#cell_type_type
|
|
# cv_sorted = stack_files[['cell','cv']].sort_values(by = 'cv')#.unique()
|
|
# cv_combis = pd.concat([cv_sorted['cell'],cv_sorted['cv']]).unique()
|
|
# stack[cell == ]
|
|
cells_gwn = stack_files.cell.unique()
|
|
|
|
cell_chose = 'base'
|
|
if cell_chose == 'base':
|
|
cells = cell_base
|
|
else:
|
|
cells = cells_gwn
|
|
|
|
# embed()'2013-04-11-ab-invivo-1'
|
|
# cvs = []
|
|
# for f, cell in enumerate(cells):
|
|
|
|
if 'p-unit' in cell_type:
|
|
# cells = choose_p_units(stack_files, cells)
|
|
if len(cells_chosen) == 0:
|
|
lim = 0.4
|
|
stack_cells = stack_files[stack_files['cell'].isin(cells)]
|
|
cvs = stack_cells[sorting] # .iloc[0]
|
|
cells = np.array(stack_cells.cell)
|
|
cvs = np.array(cvs)
|
|
# embed()
|
|
lengths = stack_cells['stimulus_length']
|
|
|
|
|
|
|
|
cv_min = False
|
|
if cv_min:
|
|
cells = cells[cvs < 0.3]
|
|
lengths = lengths[cvs < 0.3]
|
|
cvs = cvs[cvs < 0.3]
|
|
|
|
cells = cells[lengths > 3]
|
|
cvs = cvs[lengths > 3]
|
|
lengths = lengths[lengths > 3]
|
|
|
|
# cells = cells[np.argsort(cvs)]
|
|
# embed()
|
|
|
|
# embed()
|
|
cells, cvs_unique = make_cell_unique(cvs, cells)
|
|
# embed()
|
|
# cells = [cells[index] for index in sorted(indexes)]
|
|
cells = list(cells)
|
|
|
|
# Zellen mit starken Artefakten
|
|
cells_rem = ['2010-08-25-ab-invivo-1',
|
|
'2010-11-08-aa-invivo-1',
|
|
'2010-11-11-al-invivo-1',
|
|
'2011-02-18-ab-invivo-1',
|
|
'2011-09-21-ab-invivo-1',
|
|
'2011-10-25-ac-invivo-1',
|
|
'2011-11-10-ab-invivo-1',
|
|
'2011-11-10-ag-invivo-1',
|
|
|
|
'2012-12-19-aa-invivo-1',
|
|
'2012-12-19-ab-invivo-1',
|
|
'2012-12-19-ac-invivo-1',
|
|
|
|
'2013-02-21-aa-invivo-1',
|
|
'2013-04-09-ab-invivo-1',
|
|
|
|
'2013-04-16-aa-invivo-1',
|
|
'2013-04-16-ab-invivo-1',
|
|
'2013-04-16-ac-invivo-1',
|
|
'2013-04-17-af-invivo-1',
|
|
'2013-04-18-ac-invivo-1',
|
|
] #
|
|
cells_rem_wo_base = ['2010-11-08-ab-invivo-1', '2010-07-29-ae-invivo-1', '2011-11-10-ah-invivo-1',
|
|
'2011-11-10-ak-invivo-1', '2012-05-30-aa-invivo-1', '2012-07-12-al-invivo-1',
|
|
'2012-10-19-aa-invivo-1', '2012-10-19-ad-invivo-1', '2012-12-20-af-invivo-1',
|
|
'2013-04-16-ad-invivo-1', '2013-04-11-ab-invivo-1', '2014-01-23-ac-invivo-1',
|
|
'2014-01-16-aj-invivo-1']
|
|
cells_rem_wo_base_not_nice = ['2010-11-26-al-invivo-1', '2010-11-11-aj-invivo-1']
|
|
|
|
for cell_rem in cells_rem:
|
|
if cell_rem in cells:
|
|
cells.remove(cell_rem)
|
|
for cell_rem in cells_rem_wo_base:
|
|
if cell_rem in cells:
|
|
cells.remove(cell_rem)
|
|
for cell_rem in cells_rem_wo_base_not_nice:
|
|
if cell_rem in cells:
|
|
cells.remove(cell_rem)
|
|
# embed()
|
|
# '2013-04-11-ab-invivo-1',
|
|
# embed()
|
|
cells = cells[0:16]
|
|
else:
|
|
cells = cells_chosen
|
|
# cells = cells[0:16]
|
|
elif cell_type == [' A-unit', ' Ampullary']:
|
|
lim = 0.3
|
|
stack_cells = stack_files[stack_files['cell'].isin(cells)]
|
|
cvs = stack_cells[sorting] # .iloc[0]
|
|
cells = np.array(stack_cells.cell)
|
|
cvs = np.array(cvs)
|
|
# embed()
|
|
lengths = stack_cells['stimulus_length']
|
|
|
|
|
|
|
|
cv_min = False
|
|
if cv_min:
|
|
cells = cells[cvs < 0.3]
|
|
lengths = lengths[cvs < 0.3]
|
|
cvs = cvs[cvs < 0.3]
|
|
|
|
cells = cells[lengths > 3]
|
|
cvs = cvs[lengths > 3]
|
|
lengths = lengths[lengths > 3]
|
|
|
|
# cells = cells[np.argsort(cvs)]
|
|
# embed()
|
|
|
|
# embed()
|
|
cells, cvs_unique = make_cell_unique(cvs, cells)
|
|
# embed()
|
|
# cells = [cells[index] for index in sorted(indexes)]
|
|
cells = list(cells)
|
|
|
|
# Zellen mit starken Artefakten
|
|
cells_rem = ['2010-08-25-ab-invivo-1',
|
|
'2010-11-08-aa-invivo-1',
|
|
'2010-11-11-al-invivo-1',
|
|
'2011-02-18-ab-invivo-1',
|
|
'2011-09-21-ab-invivo-1',
|
|
'2011-10-25-ac-invivo-1',
|
|
'2011-11-10-ab-invivo-1',
|
|
'2011-11-10-ag-invivo-1',
|
|
|
|
'2012-12-19-aa-invivo-1',
|
|
'2012-12-19-ab-invivo-1',
|
|
'2012-12-19-ac-invivo-1',
|
|
|
|
'2013-02-21-aa-invivo-1',
|
|
'2013-04-09-ab-invivo-1',
|
|
|
|
'2013-04-16-aa-invivo-1',
|
|
'2013-04-16-ab-invivo-1',
|
|
'2013-04-16-ac-invivo-1',
|
|
'2013-04-17-af-invivo-1',
|
|
'2013-04-18-ac-invivo-1',
|
|
] #
|
|
cells_rem_wo_base = ['2010-11-08-ab-invivo-1', '2010-07-29-ae-invivo-1', '2011-11-10-ah-invivo-1',
|
|
'2011-11-10-ak-invivo-1', '2012-05-30-aa-invivo-1', '2012-07-12-al-invivo-1',
|
|
'2012-10-19-aa-invivo-1', '2012-10-19-ad-invivo-1', '2012-12-20-af-invivo-1',
|
|
'2013-04-16-ad-invivo-1', '2013-04-11-ab-invivo-1', '2014-01-23-ac-invivo-1',
|
|
'2014-01-16-aj-invivo-1']
|
|
cells_rem_wo_base_not_nice = ['2010-11-26-al-invivo-1', '2010-11-11-aj-invivo-1']
|
|
|
|
for cell_rem in cells_rem:
|
|
if cell_rem in cells:
|
|
cells.remove(cell_rem)
|
|
for cell_rem in cells_rem_wo_base:
|
|
if cell_rem in cells:
|
|
cells.remove(cell_rem)
|
|
for cell_rem in cells_rem_wo_base_not_nice:
|
|
if cell_rem in cells:
|
|
cells.remove(cell_rem)
|
|
# embed()
|
|
# '2013-04-11-ab-invivo-1',
|
|
cells = cells[0:16]
|
|
return cells
|
|
#
|
|
# else:
|
|
# # embed()
|
|
# cells = cells[np.argsort(cvs)][cvs < 0.3]
|
|
|
|
|
|
def load_cell_types(file_name_exclude, sorting, save_name, load_path, cell_type, cells_chosen=[],
|
|
cell_type_chosen=' Ampullary',
|
|
cell_type_type='cell_type_reclassified'):
|
|
# das ist jetzt ein Funktion die das selber auswählt für die punit.py und ampullary.py functions
|
|
if os.path.exists(load_path + '.csv'):
|
|
|
|
# hier finde ich quasi nur die Zellen raus die ich haben will
|
|
cells = find_cells(file_name_exclude, sorting, cells_chosen, cell_type, cell_type_type, cell_type_chosen,
|
|
load_path)
|
|
# embed()
|
|
# das ist die initial load funktion
|
|
stack = load_data_susept(load_path + '.csv', load_path, cells=cells)
|
|
# embed()
|
|
else:
|
|
# wenn das noch nicht abgespeichert ist machen wir das so
|
|
stack = load_data_susept(load_path + '.csv', load_path)
|
|
# embed()
|
|
stack_files = stack[stack['celltype'].isin(cell_type)]
|
|
cells = stack.cell.unique()
|
|
# embed()
|
|
return stack_files, cells
|
|
|
|
|
|
def colorbar_outside_right(ax, fig, im, add=0, shrink=0.6, width=0.02, plusx=0.01):
|
|
# embed()
|
|
pos = ax.get_position() # [[xmin, ymin], [xmax, ymax]].
|
|
pos = np.array(pos)
|
|
xmin = pos[0][0]
|
|
ymin = pos[0][1]
|
|
xmax = pos[1][0]
|
|
ymax = pos[1][1]
|
|
|
|
left = xmin + plusx
|
|
|
|
bottom = ymax + 0.06 + add # 85
|
|
|
|
bottom = ymax # - 0.076+add#85
|
|
|
|
height = (ymax - ymin)
|
|
|
|
cbar_ax = fig.add_axes([left, bottom, width, height]) # [left, bottom, width, height
|
|
cbar_ax.xaxis.set_label_position('bottom')
|
|
# cbar_ax.set_xticklabels(rotation=45)
|
|
# embed()
|
|
# cbar_ax.ax.tick_params(labelsize=6)
|
|
cbar_ax.set_xticklabels(cbar_ax.get_xticklabels(), rotation='vertical')
|
|
cbar_ax.tick_params(labelsize=6)
|
|
cbar = fig.colorbar(im, orientation="vertical", cax=cbar_ax, shrink=shrink)
|
|
# embed()
|
|
return cbar, left, bottom, width, height
|
|
|
|
|
|
def plt_cv_part(cell, frame_save, frame, cell_nr, ax, lim_here=[], color_bar='grey', xlim=(0, 17)):
|
|
cv_isi = frame.iloc[cell_nr].cv
|
|
fr = frame.iloc[cell_nr].fr
|
|
# embed()#'\n cv_inst '+str(np.round(cv_inst,2))+' cv_inst_fr '+ str(np.round(cv_inst_fr,2))' cv_mat '+ str(np.round(cv_mat,2))' m_isi '+str(np.round(mean_isi))'\n m_inst_fr '+ str(np.round(mean_inst_fr))+
|
|
cv_title = False
|
|
if cv_title:
|
|
if cv_isi < 0.2:
|
|
color = 'red'
|
|
elif cv_isi < 0.3:
|
|
color = 'purple'
|
|
elif cv_isi < 0.4:
|
|
color = 'orange'
|
|
elif cv_isi < 0.7:
|
|
color = 'green'
|
|
else:
|
|
color = 'blue'
|
|
else:
|
|
color = title_color(cell)
|
|
# ax[counter].set_title()
|
|
frame_here = frame_save[frame_save.cell == cell]
|
|
|
|
try:
|
|
hist = frame_here['hist'].iloc[0][0]
|
|
except:
|
|
print('hist problem')
|
|
embed()
|
|
width = (hist[1][1] - hist[1][0])
|
|
# embed()
|
|
if lim_here != []:
|
|
# embed()
|
|
# lim_here
|
|
# das ist das ex der bins das hat einen zu viel
|
|
# embed()
|
|
ex = list(hist[1] > lim_here)
|
|
ex_bars = ex[0:-1]
|
|
# ex_bars.extend([True])
|
|
# embed()
|
|
y = hist[0][ex_bars] # [0]+ width / 2
|
|
x = hist[1][np.array(ex)][0:-1] # [0]
|
|
else:
|
|
x = hist[1][0:-1] + width / 2
|
|
y = hist[0]
|
|
# try:
|
|
ax.bar(x, height=y, width=width, color=color_bar)
|
|
# except:
|
|
# embed()
|
|
# frame_save[cell] = hist
|
|
|
|
if xlim:
|
|
ax.set_xlim(xlim)
|
|
# ax[counter].spines['top'].set_visible(False)
|
|
# ax[counter].spines['right'].set_visible(False)
|
|
# if counter in np.arange(0, len(model_params), row):
|
|
# embed()
|
|
# ax[counter].legend()
|
|
return color, cv_isi
|
|
|
|
|
|
def plt_psd_traces(grid1, grid2, axs, min_lim, max_lim, eod_fr, fr, fr_stim, stack_final1, fr_color='red',
|
|
fr_stim_color='darkred', peaks=True, db='', rmv_axo=True, maxo=[], maxi=[], stack_isf=[],
|
|
stack_osf=[], rmv_axi=True, reset_pos=True, eod_fr_color='magenta', eod_fr_half_color='purple'):
|
|
# plot input trace
|
|
ax_pos, axi, colors_f, freqs, isf_resaved = plt_trace(axs, db, eod_fr, eod_fr_color, eod_fr_half_color, fr,
|
|
fr_color, fr_stim, fr_stim_color, grid2, max_lim, min_lim,
|
|
peaks, reset_pos, rmv_axi, stack_final1, stack_isf,
|
|
isf_name='isf')
|
|
|
|
# plot output trace
|
|
ax_pos, axo, colors_f, freqs, isf_resaved = plt_trace(axs, db, eod_fr, eod_fr_color, eod_fr_half_color, fr,
|
|
fr_color, fr_stim, fr_stim_color, grid1, max_lim, min_lim,
|
|
peaks, reset_pos, rmv_axo, stack_final1, stack_osf,
|
|
isf_name='osf')
|
|
|
|
return axo, axi
|
|
|
|
|
|
def plt_trace(axs, db, eod_fr, eod_fr_color, eod_fr_half_color, fr, fr_color, fr_stim, fr_stim_color, grid2, max_lim,
|
|
min_lim, peaks, reset_pos, rmv_axi, stack_final1, stack_isf, isf_name='isf', clip_on=True):
|
|
ax_pos = np.array(axs.get_position()) # [[xmin, ymin], [xmax, ymax]].
|
|
if len(stack_isf) == 0:
|
|
isf = stack_final1[isf_name]
|
|
isf_resaved = False
|
|
else:
|
|
isf = stack_isf
|
|
isf_resaved = True
|
|
axi = plt.subplot(grid2)
|
|
ax_pos2 = np.array(axi.get_position()) # das würde auch gehen:.y0,.y1,.x0,.x1,.width
|
|
if reset_pos:
|
|
axi.set_position([ax_pos[0][0], ax_pos2[0][1], ax_pos[1][0] - ax_pos[0][0],
|
|
ax_pos2[1][1] - ax_pos2[0][1]])
|
|
freqs = [fr, fr * 2, fr_stim, fr_stim * 2, eod_fr, eod_fr * 2, eod_fr / 2]
|
|
colors_f = [fr_color, fr_color, fr_stim_color, fr_stim_color, eod_fr_color, eod_fr_color,
|
|
eod_fr_half_color]
|
|
# embed()
|
|
plt_isf_ps_red(eod_fr_color, stack_final1, isf, 0, axi, freqs=freqs, colors=colors_f,
|
|
clip_on=clip_on, peaks=peaks, db=db, max_lim=max_lim, osf_resaved=osf_resaved, )
|
|
axi.set_xlim(min_lim, max_lim)
|
|
if rmv_axi:
|
|
remove_xticks(axi)
|
|
return ax_pos, axi, colors_f, freqs, isf_resaved
|
|
|
|
|
|
def plt_isf_ps_red(eod_fr_color, stack_final, isf, l, ax_i, color='black', power=1, several=False, maxi=1, peaks=True,
|
|
freqs=[], db='', max_lim=None, colors=[], osf_resaved=False, clip_on=False):
|
|
f = find_f(stack_final)
|
|
|
|
try:
|
|
# embed()
|
|
if osf_resaved:
|
|
f_axis = f[0:len(isf)]
|
|
means = np.transpose(isf)
|
|
means_all = np.mean(np.abs(means) ** power, axis=0)
|
|
p = np.abs(means.iloc[0]) ** power
|
|
else:
|
|
f_axis = f[0:len(isf.iloc[l][0])]
|
|
# embed()
|
|
means = get_array_from_pandas(isf)
|
|
means_all = np.mean(np.abs(means) ** power, axis=0)
|
|
p = np.abs(isf.iloc[l][0]) ** power
|
|
|
|
# embed()
|
|
if db == 'db':
|
|
p = 10 * np.log10(p / maxi)
|
|
means_all = 10 * np.log10(means_all / maxi)
|
|
|
|
add = np.percentile(means_all, 90)
|
|
|
|
if max_lim:
|
|
if several:
|
|
ax_i.plot(f_axis[f_axis < max_lim], p[f_axis < max_lim], color='grey', zorder=1)
|
|
ax_i.plot(f_axis[f_axis < max_lim], means_all[f_axis < max_lim], color='black', zorder=1)
|
|
else:
|
|
if several:
|
|
ax_i.plot(f_axis, p, color='grey', zorder=1)
|
|
ax_i.plot(f_axis, means_all, color=color, zorder=1)
|
|
ax_i.set_xlim(0, 700)
|
|
|
|
if peaks:
|
|
for i in range(len(freqs)):
|
|
plt_peaks(ax_i, p, freqs[i], f_axis, fr_color=colors[i], add=add, clip_on=clip_on)
|
|
except:
|
|
print('f axis problem')
|
|
embed()
|
|
|
|
|
|
########################################
|
|
# aus suseptiblity.utils_susept hier her importiert
|
|
|
|
|
|
# from utils_save import load_savedir, hi2
|
|
# from utils import remove_tick_ymarks
|
|
# embed()
|
|
|
|
|
|
def find_cells_plot(save_names, amps_desired=[5, 10, 20], cell_class=' Ampullary'):
|
|
# 'noise_data8_nfft1sec_original__LocalEOD_CutatBeginning_0.05_s_NeurDelay_0.005_s.csv'
|
|
# frame_csv_overview_test = pd.read_csv('../data/Noise/noise_data8_nfft1sec_original__LocalEOD_CutatBeginning_0.05_s_NeurDelay_0.005_s.csv')
|
|
save_name = save_names[0]
|
|
load_name = load_folder_name('calc_RAM') + '/' + save_names[0] + '.csv'
|
|
frame_csv_overview = pd.read_csv(load_name, low_memory=False)
|
|
frame_csv_overview[['cell', 'amp']].sort_values('cell')
|
|
lists = np.array(frame_csv_overview.amp.unique())
|
|
contrasts = [float('{:f}'.format(x)) for x in lists]
|
|
|
|
########################
|
|
# here find the cells that are in the amps
|
|
# embed()
|
|
unique_combos = frame_csv_overview[['cell', 'amp']].drop_duplicates()
|
|
|
|
if len(amps_desired) > 0:
|
|
combos_three = unique_combos[unique_combos.amp.isin(amps_desired)]
|
|
cell_counts = combos_three.cell.value_counts()
|
|
cell_to_plot = cell_counts[cell_counts == len(amps_desired)].keys()
|
|
else:
|
|
# combos_three = unique_combos[unique_combos.amp.isin(amps_desired)]
|
|
cell_counts = unique_combos.cell.value_counts()
|
|
cell_to_plot = cell_counts[cell_counts > 3].keys()
|
|
new_cells = np.sort(cell_to_plot)
|
|
# embed()# ('2010-06-21-av-invivo-1', 2010-08-27-ag, 2010-08-31-ad)
|
|
# frame_csv_overview.amp
|
|
# embed()
|
|
# hier machen wir das damit das gruppenweise nach cell_type plottet
|
|
# hier nehmen wir wirklich nur die die auch ein GWN haben, das ist der Unterschied
|
|
|
|
cells = ['2010-06-21-ac-invivo-1', '2010-06-21-am-invivo-1', '2010-07-13-aj-invivo-1', '2010-06-18-ah-invivo-1'
|
|
'2011-10-25-ac-invivo-1',
|
|
'2012-05-15-ac-invivo-1']
|
|
# frame, frame_spikes = load_cv_type(cells)
|
|
# frame = pd.read_pickle('../code/calc_base_data-base_frame.pkl')
|
|
frame = load_cv_table()
|
|
cell_type_type = 'cell_type_reclassified'
|
|
frame = unify_cell_names(frame, cell_type=cell_type_type)
|
|
cell_types = frame[cell_type_type].unique()
|
|
cells = frame[((frame.gwn == True) | (frame.fs == True))].cell.unique()
|
|
cells = np.sort(cells) # [::-1]
|
|
cells_dict = cluster_cells_by_group_dict(cell_types, frame, cell_type_type)
|
|
# embed()
|
|
cells = cells_dict[cell_class]
|
|
# embed()
|
|
cells_plot = cell_to_plot[cell_to_plot.isin(cells)]
|
|
|
|
# embed()
|
|
frame_cv = frame[frame.cell.isin(cells_plot)]
|
|
frame_cv = frame_cv.sort_values('cv')
|
|
cells_plot = frame_cv.cell
|
|
cells_plot = list(cells_plot)
|
|
if '2012-06-08-ae-invivo-1' in cells_plot:
|
|
cells_plot.remove('2012-06-08-ae-invivo-1')
|
|
return amps_desired, cell_type_type, cells_plot, frame, cell_types
|
|
|
|
|
|
def load_cells_in_sample(cell_class, save_names, amps_desired, cell_type_type, frame):
|
|
load_name = load_folder_name('calc_RAM') + '/' + save_names[0] + '.csv'
|
|
# embed()
|
|
frame_csv_overview = pd.read_csv(load_name, low_memory=False) # dtype={'three': bool,'cell':str,'highest_fr':float}
|
|
# embed()#
|
|
frame_csv_overview[['cell', 'amp']].sort_values('cell')
|
|
# lists = np.array(frame_csv_overview.amp.unique())
|
|
# contrasts = [float('{:f}'.format(x)) for x in lists]
|
|
|
|
########################
|
|
# here find the cells that are in the amps
|
|
# embed()
|
|
unique_combos = frame_csv_overview[['cell', 'amp']].drop_duplicates()
|
|
|
|
if len(amps_desired) > 0:
|
|
combos_three = unique_combos[unique_combos.amp.isin(amps_desired)]
|
|
cell_counts = combos_three.cell.value_counts()
|
|
cell_to_plot = cell_counts[cell_counts == len(amps_desired)].keys()
|
|
else:
|
|
# combos_three = unique_combos[unique_combos.amp.isin(amps_desired)]
|
|
cell_counts = unique_combos.cell.value_counts()
|
|
cell_to_plot = cell_counts[cell_counts > 3].keys()
|
|
new_cells = np.sort(cell_to_plot)
|
|
# embed()# ('2010-06-21-av-invivo-1', 2010-08-27-ag, 2010-08-31-ad)
|
|
# frame_csv_overview.amp
|
|
# embed()
|
|
# hier machen wir das damit das gruppenweise nach cell_type plottet
|
|
# hier nehmen wir wirklich nur die die auch ein GWN haben, das ist der Unterschied
|
|
|
|
cells = ['2010-06-21-ac-invivo-1', '2010-06-21-am-invivo-1', '2010-07-13-aj-invivo-1', '2010-06-18-ah-invivo-1'
|
|
'2011-10-25-ac-invivo-1',
|
|
'2012-05-15-ac-invivo-1']
|
|
cell_types = frame[cell_type_type].unique()
|
|
cells = frame[((frame.gwn == True) | (frame.fs == True))].cell.unique()
|
|
cells = np.sort(cells) # [::-1]
|
|
cells_dict = cluster_cells_by_group_dict(cell_types, frame, cell_type_type)
|
|
# embed()
|
|
cells = cells_dict[cell_class]
|
|
# embed()
|
|
cells_plot = cell_to_plot[cell_to_plot.isin(cells)]
|
|
|
|
# embed()
|
|
frame_cv = frame[frame.cell.isin(cells_plot)]
|
|
frame_cv = frame_cv.sort_values('cv_min')
|
|
cells_plot = frame_cv.cell
|
|
cells_plot = list(cells_plot)
|
|
if '2012-06-08-ae-invivo-1' in cells_plot:
|
|
cells_plot.remove('2012-06-08-ae-invivo-1')
|
|
return cells_plot, cell_types
|
|
|
|
|
|
def load_isis(save_names, amps_desired=[5, 10, 20], cells_given=[], redo=False, cell_class=' Ampullary'):
|
|
# 'noise_data8_nfft1sec_original__LocalEOD_CutatBeginning_0.05_s_NeurDelay_0.005_s.csv'
|
|
# frame_csv_overview_test = pd.read_csv(load_folder_name('calc_RAM')+'/calc_RAM_model-2_data8_nfft1sec_original__LocalEOD_CutatBeginning_0.05_s_NeurDelay_0.005_s.csv')
|
|
# if os.path.exists():
|
|
cell_type_type = 'cell_type_reclassified'
|
|
frame = load_cv_base_frame(cells_given, cell_type_type=cell_type_type)
|
|
|
|
#####################
|
|
# rausfinden welche Zellen wir plotten wollen
|
|
# cells_plot, cell_types = load_cells_in_sample()
|
|
cells_plot, cell_types = load_cells_in_sample(cell_class, save_names, amps_desired, cell_type_type, frame)
|
|
|
|
return amps_desired, cell_type_type, cells_plot, frame, cell_types
|
|
|
|
|
|
# from utils import make_cell_unique
|
|
|
|
def remove_tick_marks(ax):
|
|
ax.xaxis.set_major_formatter(ticker.NullFormatter())
|
|
return ax
|
|
|
|
|
|
def plt_scatter_two(ax0, ax2, frame, cell_types, cell_type_type, annotate, colors, g_fr_cv=0, g_vs_cv=1,
|
|
g_fr_cv_burst=2):
|
|
add = ['', '_burst_corr_individual', ]
|
|
|
|
# ok hier plotten wir nur den scatter der auch ein gwn hat, aber was ist wenn es mehr sind?
|
|
# ok im prinzip sollte das zwar schon stimmen aber für das Bild kann man wirklich mehr machen
|
|
for c, cell_type_it in enumerate(cell_types):
|
|
frame_g = frame[
|
|
(frame[cell_type_type] == cell_type_it) & ((frame.gwn == True) | (frame.fs == True))]
|
|
|
|
plt_cv_fr(annotate, ax0, add[0], frame_g, colors, cell_type_it)
|
|
|
|
ax2.set_title('burst')
|
|
for c, cell_type_it in enumerate(cell_types):
|
|
# frame_all = frame[(frame[cell_type_type] == cell_type)]
|
|
frame_g = frame[
|
|
(frame[cell_type_type] == cell_type_it) & ((frame.gwn == True) | (frame.fs == True))]
|
|
# embed()
|
|
plt_cv_fr(annotate, ax2, add[1], frame_g, colors, cell_type_it)
|
|
return ax0, ax2
|
|
|
|
|
|
def square_func(ax, stack_final, isf=[], osf=[], perc_min=5, perc_max=95, norm='', s=0):
|
|
cells = stack_final.sort_values(by='cv').cell.unique()
|
|
cvs = stack_final.sort_values(by='cv').cv.unique()
|
|
|
|
frame = load_cv_table(name='calc_base_data-base_frame_overview.pkl')
|
|
cells = frame.sort_values(by='cv').cell.unique()
|
|
# embed()
|
|
|
|
new_keys, stack_plot = retrieve_mat_plot(stack_final)
|
|
|
|
eod_fr = stack_final.eod_fr.unique()[0]
|
|
|
|
fr2 = np.unique(stack_final.fr_stim)
|
|
# embed()
|
|
fr = stack_final.fr.unique()[0]
|
|
snippets = stack_final['snippets'].unique()[0]
|
|
fr1 = np.unique(stack_final.fr)
|
|
cv = stack_final.cv.unique()[0]
|
|
|
|
ser = stack_final.ser.unique()[0]
|
|
cv_stim = stack_final.cv_stim.unique()[0]
|
|
fr_stim = stack_final.fr_stim.unique()[0]
|
|
ser_stim = stack_final.ser_stim.unique()[0]
|
|
# todo: hier das normen noch anpassen
|
|
mat = ram_norm_choice(stack_plot, norm, stack_final)
|
|
# mat = RAM_norm_data(stack_final['d_isf1'].iloc[0],
|
|
# stack_plot,
|
|
# stack_final['snippets'].unique()[0])
|
|
|
|
# mat = np.abs(stack_plot)
|
|
# embed()
|
|
|
|
imshow = True
|
|
if imshow:
|
|
vmin = np.nanpercentile(mat, perc_min)
|
|
vmax = np.nanpercentile(mat, perc_max)
|
|
im = ax[s].imshow(mat, vmin=vmin,
|
|
extent=[mat.index[0], mat.index[-1], mat.columns[0],
|
|
mat.columns[-1]], vmax=vmax,
|
|
origin='lower', cmap='viridis')
|
|
else:
|
|
im = ax[s].pcolormesh(mat.index, mat.columns, mat, vmin=0,
|
|
vmax=np.nanpercentile(mat, 97), cmap='viridis',
|
|
rasterized=True) # np.nanpercentile(mat, 1) , cmap ='hot''Greens' pcolormesh
|
|
ax[s].set_aspect('equal')
|
|
|
|
ax[s].set_xlabel(F1_xlabel())
|
|
ax[s].set_ylabel(F2_xlabel(), labelpad=0.2)
|
|
ax[s].set_xlim(mat.index[0], mat.index[-1])
|
|
ax[s].set_ylim(mat.columns[0], mat.columns[-1])
|
|
|
|
plt_triangle(ax[s], fr, np.mean(fr2), eod_fr, new_keys[-1], eod_fr_half_color='purple', power_noise_color='blue',
|
|
fr_color='red', eod_fr_color='magenta', fr_stim_color='darkred')
|
|
|
|
return im, mat.columns[0], mat.columns[-1]
|
|
|
|
|
|
def retrieve_mat_plot(stack_final):
|
|
keys = stack_final.keys()
|
|
new_keys = keys[np.array(list(map(type, keys))) == float]
|
|
new_keys = np.sort(new_keys)
|
|
new_keys = stack_final.index
|
|
stack_plot = stack_final[new_keys]
|
|
return new_keys, stack_plot
|
|
|
|
|
|
def square_func2(ax, stack_final, s=0, nr = 3,eod_metrice = True, fr = None, cbar_do=True, perc=True, line_length = 1 / 4, add_nonlin_title = None):
|
|
|
|
|
|
new_keys, stack_plot = convert_csv_str_to_float(stack_final)
|
|
eod_fr = stack_final.eod_fr.unique()[0]
|
|
|
|
fr2 = np.unique(stack_final.fr_stim)
|
|
if not fr:
|
|
fr = stack_final.fr.unique()[0]
|
|
|
|
norm_d = False
|
|
if norm_d:
|
|
mat = RAM_norm_data(stack_final['d_isf1'].iloc[0], stack_plot, stack_final['snippets'].unique()[0])
|
|
else:
|
|
mat = RAM_norm_data(stack_final['isf'].iloc[0], stack_plot,
|
|
stack_final['snippets'].unique()[0], stack_here=stack_final) #
|
|
#embed()
|
|
mat, add_nonlin_title, resize_val = rescale_colorbar_and_values(mat, add_nonlin_title = add_nonlin_title)
|
|
print(add_nonlin_title)
|
|
imshow = True
|
|
if imshow:
|
|
if perc:
|
|
im = ax[s].imshow(mat, vmin=np.nanpercentile(mat, 5),
|
|
extent=[mat.index[0], mat.index[-1], mat.columns[0],
|
|
mat.columns[-1]], vmax=np.nanpercentile(mat, 95), cmap='viridis',
|
|
origin='lower') #
|
|
else:
|
|
im = ax[s].imshow(mat,
|
|
extent=[mat.index[0], mat.index[-1], mat.columns[0],
|
|
mat.columns[-1]], cmap='viridis',
|
|
origin='lower')
|
|
# print('NO PERC TAKEN')
|
|
|
|
else:
|
|
im = ax[s].pcolormesh(mat.index, mat.columns, mat, vmin=0,
|
|
vmax=np.nanpercentile(mat, 97), cmap='Greens',
|
|
rasterized=True) # np.nanpercentile(mat, 1) , cmap ='hot''Greens' pcolormesh
|
|
ax[s].set_aspect('equal')
|
|
|
|
ax[s].set_xlabel(F1_xlabel())
|
|
ax[s].set_ylabel(F2_xlabel(), labelpad=0.2)
|
|
ax[s].set_xlim(mat.index[0], mat.index[-1])
|
|
ax[s].set_ylim(mat.columns[0], mat.columns[-1])
|
|
#embed()
|
|
plt_triangle(ax[s], fr, np.mean(fr2), eod_fr, new_keys[-1], nr = nr, eod_metrice = eod_metrice, line_length = line_length)# eod_fr_half_color='purple', power_noise_color='blue',
|
|
#fr_color='red', eod_fr_color='magenta', fr_stim_color='darkred'
|
|
#embed()
|
|
if cbar_do:
|
|
# else:
|
|
try:
|
|
cbar = plt.colorbar(im, ax=ax[s], shrink=0.6)
|
|
except:
|
|
print('colorbar problem')
|
|
cbar = []
|
|
else:
|
|
cbar = []
|
|
return cbar, mat, im,add_nonlin_title
|
|
|
|
|
|
def cluster_cells_by_group_dict(cell_types, frame, cell_type_type):
|
|
cells = {}
|
|
# embed()
|
|
for ct in np.sort(cell_types):
|
|
fr = frame[frame[cell_type_type] == ct].cell
|
|
fr = fr.astype('str')
|
|
cells[ct] = np.sort(np.array(fr.unique()))
|
|
return cells
|
|
|
|
|
|
def plt_cell_body_isf_single_rotate2(axi, grid1, ax0, ax1, ax2, b, cell, frame, colors, amps_desired, save_names,
|
|
cells_plot, cell_type_type,
|
|
xlim=[0, 13], burst_corr='', hist_plot=True, predefined_amps2=False, norm=False):
|
|
print(cell)
|
|
|
|
frame_cell = frame[(frame['cell'] == cell)]
|
|
frame_cell = unify_cell_names(frame_cell, cell_type=cell_type_type)
|
|
cell_type = frame_cell[cell_type_type].iloc[0]
|
|
spikes = frame_cell.spikes.iloc[0]
|
|
spikes_all = []
|
|
hists = []
|
|
frs_calc = []
|
|
fr = frame_cell.fr.iloc[0]
|
|
cv = frame_cell.cv.iloc[0]
|
|
vs = frame_cell.vs.iloc[0]
|
|
eod_fr = frame_cell.EODf.iloc[0]
|
|
spikes_all, hists, frs_calc, cont = load_spikes(spikes, eod_fr)
|
|
# cont heißt dass die spikes nans sind oder leer sind, das heißt da ist gar nichts, auch keine scatter, das sind die weißen bilder die brauchen wir nicht
|
|
if cont:
|
|
|
|
# die zwei checken ob es mehr als paar spikes gibt,ohne die brauchen wir auch kein Bild
|
|
if len(hists) > 0:
|
|
if len(np.concatenate(hists)) > 0:
|
|
lim_here = find_lim_here(cell, burst_corr=burst_corr)
|
|
if np.min(np.concatenate(hists)) < lim_here:
|
|
hists2, spikes_ex, frs_calc2 = correct_burstiness(hists, spikes_all, [eod_fr] * len(spikes_all),
|
|
[eod_fr] * len(spikes_all), lim=lim_here,
|
|
burst_corr=burst_corr)
|
|
|
|
spikes_both = [spikes_all, spikes_ex]
|
|
hists_both = [hists, hists2]
|
|
frs_calc_both = [frs_calc, frs_calc2]
|
|
else:
|
|
spikes_both = [spikes_all]
|
|
hists_both = [hists, hists]
|
|
frs_calc_both = [frs_calc]
|
|
|
|
# das ist der title fals der square nicht plottet
|
|
plt.suptitle(cell + ' EODf ' + str(np.round(eod_fr)) + ' Hz ' + ' % ' +
|
|
' Base: cv ' + str(np.round(cv, 2)) + ' fr ' + str(
|
|
np.round(fr)) + ' Hz',
|
|
fontsize=11, ) # cell[0:13] + color=color+ cell_type
|
|
|
|
load_name = load_folder_name('calc_RAM') + '/' + save_names[0] + '_' + cell
|
|
# embed()
|
|
if os.path.exists(load_name + '.pkl'):
|
|
stack = pd.read_pickle(load_name + '.pkl')
|
|
# embed()
|
|
if 'p-unit' in cell_type: # == ['p-unit', ' P-unit']:
|
|
file_names_exclude = ['InputArr_350to400hz_30',
|
|
'InputArr_250to300hz_30',
|
|
'InputArr_150to200hz_30',
|
|
'InputArr_50to100hz_30',
|
|
'InputArr_50hz_30',
|
|
|
|
'gwn50Hz50s0.3',
|
|
'gwn50Hz10s0.3',
|
|
'gwn50Hz10.3',
|
|
'gwn50Hz10s0.3short',
|
|
|
|
'gwn25Hz10s0.3',
|
|
|
|
'FileStimulus-file-gaussian50.0',
|
|
'FileStimulus-file-gaussian25.0',
|
|
] #
|
|
else:
|
|
file_names_exclude = ['InputArr_350to400hz_30',
|
|
'InputArr_250to300hz_30',
|
|
'InputArr_150to200hz_30',
|
|
'InputArr_50to100hz_30',
|
|
'InputArr_50hz_30',
|
|
|
|
'blwn125Hz10s0.3',
|
|
'gwn50Hz10s0.3',
|
|
'FileStimulus-file-gaussian50.0',
|
|
'FileStimulus-file-gaussian25.0', 'gwn25Hz10s0.3', 'gwn50Hz10.3',
|
|
'gwn50Hz10s0.3short',
|
|
'gwn50Hz50s0.3', 'gwn25Hz10s0.3', ] #
|
|
|
|
files = stack['file_name'].unique()
|
|
fexclude = False
|
|
if fexclude:
|
|
if len(files) > 1:
|
|
stack = stack[~stack['file_name'].isin(file_names_exclude)]
|
|
files = stack['file_name'].unique()
|
|
amps = stack['amp'].unique()
|
|
|
|
row, col = find_row_col(np.arange(len(amps) * len(files)))
|
|
|
|
predefined_amp = True
|
|
amps_defined = True
|
|
if predefined_amps2:
|
|
for a, amp in enumerate(amps):
|
|
if amp not in amps_desired:
|
|
predefined_amp = False
|
|
if predefined_amp:
|
|
col = 4
|
|
amps_defined = amps_desired
|
|
else:
|
|
amps_defined = amps
|
|
col = len(amps)
|
|
amps_defined = [np.min(amps)]
|
|
# for f, file in enumerate(files):
|
|
# embed()
|
|
file, cut_offs = find_optimal_files(files)
|
|
stack_file = stack[stack['file_name'] == file]
|
|
amps = stack_file['amp'].unique()
|
|
# embed()
|
|
for a, amp in enumerate(amps_defined):
|
|
|
|
if amp in np.array(stack_file['amp']):
|
|
axs, axo, axin = square_isf(grid1, norm, b, cell, stack_file, amp, eod_fr, file)
|
|
################################
|
|
# do the scatter of these cells
|
|
add = ['', '_burst_corr', ]
|
|
try:
|
|
ax0.scatter(frame_cell['cv' + add[0]], frame_cell['fr' + add[0]], zorder=2, alpha=1,
|
|
label=cell_type, s=15,
|
|
color=colors[str(cell_type)], facecolor='white')
|
|
except:
|
|
print('colors_f problem')
|
|
embed()
|
|
if len(ax1) > 0:
|
|
ax1.scatter(frame_cell['cv' + add[0]], frame_cell['vs' + add[0]], zorder=2, alpha=1,
|
|
label=cell_type, s=15,
|
|
color=colors[str(cell_type)], facecolor='white')
|
|
ax2.scatter(frame_cell['cv' + add[1]], frame_cell['fr' + add[1]], zorder=2, alpha=1,
|
|
label=cell_type, s=15,
|
|
color=colors[str(cell_type)], facecolor='white')
|
|
|
|
# if hist_plot:
|
|
################################
|
|
# do the hist
|
|
# axi = plt.subplot(grid1[:, 0])
|
|
plt_hists(axi, cell_type, colors, hists_both, xlim, b, alpha=1)
|
|
return axs, axo, axin
|
|
|
|
|
|
def find_optimal_files(files):
|
|
cut_offs = []
|
|
for file in files:
|
|
cut_offs.append(calc_cut_offs(file))
|
|
file = files[np.argmax(cut_offs)]
|
|
return file, cut_offs
|
|
|
|
|
|
def square_isf(grid1, norm, b, cell, stack_file, amp, eod_fr, file):
|
|
stack_amp = stack_file[stack_file['amp'] == amp]
|
|
lengths = stack_file['stimulus_length'].unique()
|
|
length = np.max(lengths)
|
|
stack_final = stack_amp[stack_amp['stimulus_length'] == length]
|
|
trial_nr_double = stack_final.trial_nr.unique()
|
|
|
|
# ok das ist glaube ich ein Anzeichen von einem Fehler
|
|
if len(trial_nr_double) > 1:
|
|
print('trial_nr_double')
|
|
embed()
|
|
# ich hatte mal einen save fehler deswegen habe ich manche doppelt also einfach das letzte nehmen nehme ich an
|
|
|
|
# embed()
|
|
try:
|
|
stack_final1 = stack_final[stack_final.trial_nr == np.max(trial_nr_double)]
|
|
except:
|
|
print('stack_final1 problem')
|
|
embed()
|
|
try:
|
|
axs = plt.subplot(grid1[2])
|
|
except:
|
|
print('grid problem6')
|
|
embed()
|
|
|
|
osf = stack_final1.osf
|
|
isf = stack_final1.isf
|
|
|
|
im, min_lim, max_lim = square_func([axs], stack_final1, isf=isf, osf=osf, norm=norm)
|
|
cbar = plt.colorbar(im, ax=axs, orientation='vertical')
|
|
if b != 0:
|
|
cbar.set_label(nonlin_title(), rotation=270, labelpad=1000)
|
|
# cbar = colorbar_outside_right(axs, fig, im, add=0)
|
|
|
|
|
|
|
|
fr = stack_final1.fr.unique()[0]
|
|
snippets = stack_final1['snippets'].unique()[0]
|
|
fr1 = np.unique(stack_final1.fr)
|
|
cv = stack_final1.cv.unique()[0]
|
|
|
|
ser = stack_final1.ser.unique()[0]
|
|
cv_stim = stack_final1.cv_stim.unique()[0]
|
|
fr_stim = stack_final1.fr_stim.unique()[0]
|
|
ser_stim = stack_final1.ser_stim.unique()[0]
|
|
plt.suptitle(cell + ' EODf ' + str(np.round(eod_fr)) + ' Hz ' + '' + 'S.Nr ' + str(
|
|
snippets) + ' % ' +
|
|
' Base: cv ' + str(np.round(cv, 2)) + ' fr ' + str(
|
|
np.round(fr)) + ' Hz' + ' ser ' + str(np.round(ser))
|
|
+ ' Stim: cv ' + str(np.round(cv_stim, 2)) + ' fr ' + str(
|
|
np.round(fr_stim)) + ' Hz' + ' ser ' + str(np.round(ser_stim)) + ' length ' + str(
|
|
length)
|
|
,
|
|
fontsize=11, ) # cell[0:13] + color=color+ cell_type
|
|
|
|
eod_fr_half_color = 'purple'
|
|
power_noise_color = 'blue'
|
|
fr_color = 'red'
|
|
eod_fr_color = 'magenta'
|
|
fr_stim_color = 'darkred'
|
|
# if b != len(cells_plot) - 1:
|
|
# remove_xticks(axs)
|
|
# axs.set_xlabel('')
|
|
|
|
# plot the input above
|
|
axo, axin = plt_psd_traces(grid1[0], grid1[1], axs, min_lim, max_lim, eod_fr, fr, fr_stim, stack_final1, fr_color,
|
|
fr_stim_color,
|
|
eod_fr_color, eod_fr_half_color)
|
|
axo.set_title(' std ' + str(amp) + ' ' + file)
|
|
return axs, axo, axin
|
|
|
|
|
|
def plt_hists(axi, cell_type, colors, hists_both, xlim, b, alpha=1):
|
|
add = ['', '_burst_corr', ]
|
|
colors_hist = ['grey', colors[str(cell_type)]]
|
|
if len(hists_both) > 1:
|
|
colors_hist = ['grey', colors[str(cell_type)]]
|
|
else:
|
|
colors_hist = [colors[str(cell_type)]]
|
|
for gg in range(len(range(b + 1))):
|
|
# if len(hists_both) > 1:
|
|
hists_here = hists_both[gg]
|
|
# embed()
|
|
for hh, h in enumerate(hists_here):
|
|
try:
|
|
axi.hist(h, bins=100, color=colors_hist[gg], label='CV ' + str(np.round(np.std(h) / np.mean(h), 3)),
|
|
alpha=float(alpha - 0.05 * (hh)))
|
|
except:
|
|
print('alpha problem4')
|
|
embed()
|
|
axi.legend(ncol=2)
|
|
# if np.max(np.concatenate(hists_here)) > 10:
|
|
# axi.set_xlim(0, 10)
|
|
# if gg == len(hists_both)-1:
|
|
#
|
|
# axi.set_title() # +' VS '+str(vs)
|
|
if len(xlim) > 0:
|
|
axi.set_xlim(xlim)
|
|
# if c != len(cells_plot) - 1:
|
|
# remove_xticks(axi)
|
|
# else:
|
|
axi.set_xlabel('isi')
|
|
|
|
|
|
def plt_cv_fr(annotate, ax0, add, frame_g, colors, cell_type):
|
|
ax0.scatter(frame_g['cv' + add], frame_g['fr' + add], alpha=0.5, label=cell_type, s=7, color=colors[str(cell_type)])
|
|
exclude = np.isnan(frame_g['cv' + add]) | np.isnan(frame_g['fr' + add])
|
|
frame_g_ex = frame_g[~exclude]
|
|
if annotate:
|
|
for f in range(len(frame_g_ex)):
|
|
# if not np.isnan(frame_g_ex.cv.iloc[f]):
|
|
ax0.text(frame_g_ex['cv' + add].iloc[f], frame_g_ex['fr' + add].iloc[f], frame_g_ex.cell.iloc[f][2:13],
|
|
rotation=45,
|
|
color=colors[str(cell_type)], fontsize=6)
|
|
# ax[1].text(frame_g_ex.cv.iloc[f], frame_g_ex.vs.iloc[f], frame_g_ex.cell.iloc[f][2:11], rotation=45, color=colors[c], fontsize = 6)
|
|
|
|
ax0.set_xlim(0, 1.5)
|
|
ax0.set_ylabel('Base Freq [Hz]')
|
|
ax0.set_xlabel('CV')
|
|
|
|
|
|
def plt_cv_part_several(row, col, cell, frame_save, frame, cell_nr, counter, ax):
|
|
cv_isi = frame.iloc[cell_nr].cv
|
|
fr = frame.iloc[cell_nr].fr
|
|
# embed()#'\n cv_inst '+str(np.round(cv_inst,2))+' cv_inst_fr '+ str(np.round(cv_inst_fr,2))' cv_mat '+ str(np.round(cv_mat,2))' m_isi '+str(np.round(mean_isi))'\n m_inst_fr '+ str(np.round(mean_inst_fr))+
|
|
cv_title = False
|
|
if cv_title:
|
|
if cv_isi < 0.2:
|
|
color = 'red'
|
|
elif cv_isi < 0.3:
|
|
color = 'purple'
|
|
elif cv_isi < 0.4:
|
|
color = 'orange'
|
|
elif cv_isi < 0.7:
|
|
color = 'green'
|
|
else:
|
|
color = 'blue'
|
|
else:
|
|
color = title_color(cell)
|
|
# ax[counter].set_title()
|
|
frame_here = frame_save[frame_save.cell == cell]
|
|
ax[counter].text(0, 1.26, cell[0:-9] + '\n cv ' + str(np.round(cv_isi, 2)) + ' fr ' + str(np.round(fr)) + ' Hz',
|
|
transform=ax[counter].transAxes, color=color, fontsize=8)
|
|
try:
|
|
hist = frame_here['hist'].iloc[0][0]
|
|
except:
|
|
print('hist problem')
|
|
embed()
|
|
width = (hist[1][1] - hist[1][0])
|
|
|
|
ax[counter].bar(hist[1][0:-1] + width / 2, height=hist[0], width=width, )
|
|
# frame_save[cell] = hist
|
|
if counter == row * col - col:
|
|
ax[counter].set_xlabel('Inter Spike Interval, EODf multiples')
|
|
ax[counter].set_ylabel('nr')
|
|
ax[counter].set_xlim(0, 17)
|
|
# ax[counter].spines['top'].set_visible(False)
|
|
# ax[counter].spines['right'].set_visible(False)
|
|
# if counter in np.arange(0, len(model_params), row):
|
|
# embed()
|
|
# ax[counter].legend()
|
|
counter += 1
|
|
return counter
|
|
|
|
|
|
def plt_squares_special(params, col_desired=2, var_items=['contrasts'], show=False, contrasts=[0], noises_added=[''],
|
|
fft_i='forward', fft_o='forward', spikes_unit='Hz', mV_unit='mV',
|
|
D_extraction_method=['additiv_visual_d_4_scaled'], internal_noise=['RAM'],
|
|
external_noise=['RAM'], level_extraction=['_RAMdadjusted'], cut_off2=300,
|
|
repeats=[1000000], receiver_contrast=[1], visualize=True, dendrids=[''], ref_types=[''],
|
|
adapt_types=[''],
|
|
c_noises=[0.1], perc='', share=True, c_signal=[0.9], new_plot=True, cut_offs1=[300],
|
|
clims='all', restrict='restrict',
|
|
label=r'$\frac{1}{mV^2S}$', width=0.005, cells_given=None, lp=100, ax=[], titles_plot=True):
|
|
duration_noise = '_short'
|
|
formula = 'code' ##'formula'
|
|
nffts = ['whole'] # ,int(2 ** 16) int(2 ** 16), int(2 ** 15),
|
|
stimulus_length = 1 # 20#550 # 30 # 15#45#0.5#1.5 15 45 100
|
|
trials_nrs = [1] # [100, 500, 1000, 3000, 10000, 100000, 1000000] # 500
|
|
stimulus_type = '_StimulusOrig_' # ,#
|
|
powers = [1] # ,3]#, 3, 1, 1.5, 0.5, ] # ,1,1.5, 0.5] #[1,1.5, 0.5] # 1.5,0.5]3, 1,
|
|
variant = 'sinz'
|
|
mimick = 'no'
|
|
cell_recording_save_name = ''
|
|
trans = 1 # 5
|
|
|
|
if new_plot:
|
|
plot_style()
|
|
|
|
if cells_given:
|
|
params_len = np.arange(0, len(params) * len(cells_given), 1)
|
|
else:
|
|
params_len = params
|
|
col, row = find_row_col(params_len, col=col_desired) # np.arange(
|
|
# embed()
|
|
if col == 2:
|
|
default_settings(column=2, length=7.5) # 2+2.25+2.25
|
|
elif col == 1:
|
|
default_settings(column=2, length=4)
|
|
elif col > 2:
|
|
if row == 2:
|
|
default_settings(column=2, length=4.5)
|
|
else:
|
|
default_settings(column=2, length=7.5)
|
|
else:
|
|
default_settings(column=2, length=7.5)
|
|
fig, ax_orig = plt.subplots(row, col, sharex=True,
|
|
sharey=True) # constrained_layout=True,, figsize=(11, 5)
|
|
|
|
if row != 1:
|
|
ax = np.concatenate(ax_orig)
|
|
else:
|
|
ax = ax_orig
|
|
iternames = [D_extraction_method, external_noise,
|
|
repeats, internal_noise, powers, nffts, dendrids, cut_offs1, trials_nrs, c_signal,
|
|
c_noises,
|
|
ref_types, adapt_types, noises_added, level_extraction, receiver_contrast, contrasts, ]
|
|
|
|
if col == 2:
|
|
plt.subplots_adjust(bottom=0.067, top=0.81, hspace=0.39, right=0.95,
|
|
left=0.075) # , hspace = 0.6, wspace = 0.5
|
|
elif col == 1:
|
|
plt.subplots_adjust(bottom=0.1, top=0.81, hspace=0.39, right=0.95,
|
|
left=0.075) # , hspace = 0.6, wspace = 0.5
|
|
else:
|
|
if row == 2:
|
|
plt.subplots_adjust(bottom=0.07, top=0.76, wspace=0.9, hspace=0.4, right=0.85,
|
|
left=0.075) # , hspace = 0.6, wspace = 0.5
|
|
else:
|
|
plt.subplots_adjust(bottom=0.05, top=0.81, wspace=0.9, hspace=0.2, right=0.85,
|
|
left=0.075) # , hspace = 0.6, wspace = 0.5
|
|
else:
|
|
col = col_desired
|
|
|
|
maxs = []
|
|
mins = []
|
|
ims = []
|
|
|
|
#######################################################################
|
|
# das ist jetzt der core
|
|
a = 0
|
|
aa = 0
|
|
for var_type, stim_type_afe, trials_stim, stim_type_noise, power, nfft, dendrid, cut_off1, trial_nrs, c_sig, c_noise, ref_type, adapt_type, noise_added, extract, a_fr, a_fe, in it.product(
|
|
D_extraction_method, external_noise
|
|
, repeats, internal_noise, powers, nffts, dendrids, cut_offs1, trials_nrs, c_signal,
|
|
c_noises,
|
|
ref_types, adapt_types, noises_added, level_extraction, receiver_contrast, contrasts, ):
|
|
# print(trials_stim,stim_type_noise, power, nfft, a_fe,a_fr, dendrid, cut_off1,trial_nrs)
|
|
# print(trial_nrs, stim_type_noise, trials_stim, power, nfft, a_fe, a_fr, var_type, cut_off1,trial_nrs)
|
|
aa += 1
|
|
nr = '2'
|
|
for p, param in enumerate(params):
|
|
print(a)
|
|
param = params[0]
|
|
'contrasts'
|
|
# embed()
|
|
a_fe = params[p]['contrasts'][0]
|
|
var_type = params[p]['D_extraction_method'][0]
|
|
extract = params[p]['level_extraction'][0]
|
|
if 'repeats' in params[p]:
|
|
trials_stim = params[p]['repeats'][0]
|
|
# embed()
|
|
# var_type, stim_type_afe,trials_stim, stim_type_noise, power, nfft, dendrid, cut_off1, trial_nrs, c_sig, c_noise, ref_type, adapt_type, noise_added, extract, a_fr, a_fe = all
|
|
# print(trials_stim,stim_type_noise, power, nfft, a_fe,a_fr, dendrid, var_type, cut_off1,trial_nrs)
|
|
|
|
save_name = save_ram_model(stimulus_length, cut_off1, duration_noise, nfft, a_fe, formula,
|
|
stim_type_noise, mimick, variant, trials_stim, power,
|
|
stimulus_type,
|
|
cell_recording_save_name, nr=nr, fft_i=fft_i, fft_o=fft_o, Hz=spikes_unit,
|
|
mV=mV_unit, stim_type_afe=stim_type_afe, extract=extract, noise_added=noise_added,
|
|
c_noise=c_noise, c_sig=c_sig, ref_type=ref_type, adapt_type=adapt_type,
|
|
var_type=var_type, cut_off2=cut_off2, dendrid=dendrid, a_fr=a_fr,
|
|
trials_nr=trial_nrs, trans=trans, zeros='ones')
|
|
|
|
# embed()
|
|
adapt_type_name, dendrid_name, ref_type_name, stim_type_noise_name = add_ends(adapt_type, dendrid, ref_type,
|
|
stim_type_noise, var_type)
|
|
|
|
stim_type_noise_name2, stim_type_afe_name = stim_type_names(a_fe, c_sig, stim_type_afe, stim_type_noise_name)
|
|
|
|
path = save_name + '.pkl' # '../'+
|
|
# embed()
|
|
cell_add, cells_save = find_cell_add(cells_given)
|
|
|
|
model = load_model_susept(path, cells_save, save_name.split(r'/')[-1] + cell_add)
|
|
# model = load_model_susept(path, save_name) # cells
|
|
# embed()
|
|
|
|
test = False
|
|
if test:
|
|
test_model()
|
|
if len(model) > 0:
|
|
cells = model.cell.unique() # model = pd.read_pickle(path)
|
|
if not cells_given:
|
|
cells = [cells[0]]
|
|
else:
|
|
cells = cells_given
|
|
# embed()
|
|
for c, cell in enumerate(cells):
|
|
suptitles, titles = titles_susept_names(a_fe, extract, noise_added, stim_type_afe_name,
|
|
stim_type_noise_name2,
|
|
trials_stim, var_items, var_type)
|
|
|
|
# embed()
|
|
if len(cells) > 1:
|
|
titles = cell + ' ' + titles
|
|
# model = load_model_susept(path, cells_save, save_name.split(r'/')[-1] + cell_add)
|
|
|
|
add_nonlin_title, cbar, fig, stack_plot, im = plt_single_square_modl(ax[a], cell, model, perc, titles,
|
|
width, titles_plot)
|
|
ims.append(im)
|
|
maxs.append(np.max(np.array(stack_plot)))
|
|
mins.append(np.min(np.array(stack_plot)))
|
|
if a in np.arange(col - 1, 100, col):
|
|
cbar.set_label(label, labelpad=lp) # rotation=270,
|
|
|
|
if new_plot:
|
|
if a >= row * col - col:
|
|
ax[a].set_xlabel(F1_xlabel(), labelpad=20)
|
|
if len(cells) > 1:
|
|
a += 1
|
|
# set_clim_same_here(clims = clims, ims = ims, maxs = maxs, mins = mins, lim_type = '',nr_clim = '10', perc = '')
|
|
|
|
# if new_plot:
|
|
ax[0].set_ylabel(F2_xlabel())
|
|
if a in np.arange(0, len(ax), 1) * col:
|
|
if a < len(ax):
|
|
try:
|
|
ax[a].set_ylabel(F2_xlabel())
|
|
except:
|
|
print('ax a thing')
|
|
|
|
embed()
|
|
# else:
|
|
if len(cells) == 1:
|
|
a += 1
|
|
if titles_plot:
|
|
end_name = suptitles + ' a_fr=' + str(a_fr) + ' ' + ' dendride=' + str(
|
|
dendrid_name) + ' refractory period=' + str(ref_type_name) + ' adapt=' + str(
|
|
adapt_type_name) + ' ' + ' cutoff1=' + str(cut_off1) + '' ' stimulus length=' + str(
|
|
stimulus_length) + ' ' + ' power=' + str(
|
|
power) + ' ' + restrict #
|
|
end_name = cut_title(end_name, datapoints=120)
|
|
name_title = end_name
|
|
plt.suptitle(name_title) # +' file '
|
|
|
|
if share:
|
|
set_clim_same_here(clims=clims, ims=ims, maxs=maxs, mins=mins, lim_type='', nr_clim='10', perc='')
|
|
|
|
# set_clim_same_here(clims = clims, ims = ims, maxs = maxs, mins = mins, lim_type = '',nr_clim = '10', perc = '')
|
|
|
|
# ich glaube das unetere wäre konsequent
|
|
improved = False
|
|
if improved:
|
|
set_clim_same_here(ims, mats=mats, lim_type='up')
|
|
if new_plot:
|
|
if col < 3:
|
|
fig.tag(ax, xoffs=-3, yoffs=5.8)
|
|
else:
|
|
if row == 2:
|
|
fig.tag([ax_orig[0, :], ax_orig[1, :]], xoffs=-5.5, yoffs=3.8)
|
|
else:
|
|
fig.tag([ax_orig[0, :], ax_orig[1, :], ax_orig[2, :]], xoffs=-3, yoffs=3.8)
|
|
|
|
if visualize:
|
|
save_visualization(pdf=True)
|
|
# fig.savefig()
|
|
if show:
|
|
plt.show()
|
|
# save_all(0, individual_tag, show, '')
|
|
|
|
|
|
def plt_single_square_modl(ax, cell, model, perc, titles, width,eod_metrice = True, nr = 3, titles_plot=False, resize=False):
|
|
model_show, stack_plot, stack_plot_wo_norm = get_stack(cell, model)
|
|
if resize:
|
|
stack_plot, add_nonlin_title, resize_val = rescale_colorbar_and_values(stack_plot)
|
|
else:
|
|
add_nonlin_title = ''
|
|
try:
|
|
ax.set_xlim(0, 300)
|
|
except:
|
|
print('aa thing')
|
|
embed()
|
|
ax.set_ylim(0, 300)
|
|
ax.set_aspect('equal')
|
|
model_cells = resave_small_files("models_big_fit_d_right.csv", load_folder='calc_model_core')
|
|
|
|
cbar = []
|
|
im = []
|
|
if len(model_show) > 0:
|
|
# D_derived, var, cut_off = D_derive(model_show, save_name, c_sig, D=D, base='', nr=nr) # var_based
|
|
# print(D_derived)
|
|
# power_spektrum = ((2 * (2 * D_derived) ** 2))
|
|
# norm = 1 / power_spektrum # * stimulus_length input_scaling* *300/2000*stimulus_length
|
|
# embed()
|
|
|
|
|
|
# embed()
|
|
add_here = '\n fr$_{S}$=' + str(int(np.round(model_show.fr_stim.iloc[0]))) + 'Hz cv$_{S}$=' + str(np.round(model_show.cv_stim.iloc[0], 2))
|
|
add_here = ''
|
|
if titles_plot:
|
|
#ax.set_title(titles +add_here) # ,fontsize=8'$D_{signal}$=' + str(np.round(D_derived, 7))#'\n ser=' + str(np.round(model_show.ser_sum_stim.iloc[0], 2))
|
|
ax.text(1.1, 1.05, titles +add_here, ha='right',
|
|
transform=ax.transAxes) # , fontsize7= + cell_type# cell[0:13] + stack_final.celltype.unique()[0] + 'S.Nr ' + str(
|
|
|
|
# fr$_{B}$=' + str(np.round(model_show.fr.iloc[0])) + 'Hz cv$_{B}$=' + str(
|
|
# np.round(model_show.cv.iloc[0], 2)) + \
|
|
|
|
im = plt_RAM_perc(ax, perc, stack_plot)
|
|
|
|
plt_triangle(ax, model_show.fr.iloc[0], np.round(model_show.fr_stim.iloc[0]),
|
|
model_show.eod_fr.iloc[0], 300, nr = nr, eod_metrice = eod_metrice)
|
|
ax.set_aspect('equal')
|
|
fig = plt.gcf()
|
|
cbar, left, bottom, width, height = colorbar_outside(ax, im, fig, add=0, shrink=0.6, width=width) # 0.02
|
|
|
|
return add_nonlin_title,cbar, fig, stack_plot, im
|
|
|
|
|
|
def get_stack(cell, model):
|
|
try:
|
|
model_show = model[(model.cell == cell)]
|
|
except:
|
|
print('cell something')
|
|
embed()
|
|
stack_plot_wo_norm = change_model_from_csv_to_plots(model_show)
|
|
stack_plot = RAM_norm(stack_plot_wo_norm, model_show=model_show)
|
|
return model_show, stack_plot, stack_plot_wo_norm
|
|
|
|
|
|
#[1, 0, 0][1, 0, 0.4]
|
|
|
|
|
|
def plt_all_scatter_rotated(ax0, ax1, frame, cell_types, add='', alpha=0.5, s=7, annotate=False,
|
|
cell_type_type='cell_type_info'):
|
|
frame_g = ptl_fr_cv(add, alpha, annotate, ax0, cell_type_type, cell_types, frame, s)
|
|
|
|
colors = colors_overview()
|
|
for c, cell_type in enumerate(cell_types):
|
|
vs = np.array(list(map(float, np.array(frame_g['vs' + add]))))
|
|
cv = np.array(list(map(float, np.array(frame_g['cv' + add]))))
|
|
|
|
exclude = np.isnan(cv) | np.isnan(vs)
|
|
frame_g_ex = frame_g[~exclude]
|
|
if annotate:
|
|
for f in range(len(frame_g_ex)):
|
|
# if not np.isnan(frame_g_ex.cv.iloc[f]):
|
|
# ax[0].text(frame_g_ex.cv.iloc[f], frame_g_ex.fr.iloc[f], frame_g_ex.cell.iloc[f][2:11], rotation=45,
|
|
# color=colors[c], fontsize=6)
|
|
ax1.text(frame_g_ex['vs' + add].iloc[f], frame_g_ex['cv' + add].iloc[f], frame_g_ex.cell.iloc[f][2:13],
|
|
rotation=45,
|
|
color=colors[str(cell_type)], fontsize=6)
|
|
|
|
|
|
ax0.set_ylim(0, 1.5)
|
|
|
|
ax1.scatter(frame_g['vs' + add], frame_g['cv' + add], alpha=alpha, label=cell_type, s=s,
|
|
color=colors[str(cell_type)]) #
|
|
# ax1.axvline(0.125, color='blue')
|
|
# ax1.axvline(1.2, color='blue')
|
|
# ax1.axvline(0.45, color='green')
|
|
# ax[1].axhline(0.45, color='green')
|
|
# ax[1].axvline(1.2, color='blue')
|
|
|
|
ax1.set_ylim(0, 1.5)
|
|
ax1.set_xlim(0, 1)
|
|
# ax0.set_ylim(0,550)
|
|
lim = 0.3
|
|
# ax0.axvline(x=lim, color='black')
|
|
# ax1.axvline(x=lim, color='black')
|
|
|
|
if 'burst' in add:
|
|
# ax0.set_xlabel('Base Freq [Hz] $_{Burst Corr}$')
|
|
# ax1.set_xlabel('$VS_{Burst Corr}$')
|
|
|
|
ax1.set_ylabel('$CV_{Burst Corr}$')
|
|
ax0.set_ylabel('$CV_{Burst Corr}$')
|
|
|
|
else:
|
|
|
|
ax0.set_ylabel('CV')
|
|
ax1.set_ylabel('CV')
|
|
ax0.set_xlabel('Base Freq [Hz]')
|
|
ax1.set_xlabel('VS')
|
|
# embed()
|
|
# if add == '':
|
|
# # embed()
|
|
# ax0.legend(ncol=5, loc=(0, 1.05))
|
|
plt.subplots_adjust(wspace=0.25, bottom=0.1)
|
|
|
|
|
|
def ptl_fr_cv(add, alpha, annotate, ax0, cell_type_type, cell_types, frame, s, cv='cv', fr='fr', species = ' Apteronotus leptorhynchus'):
|
|
colors = colors_overview()
|
|
for c, cell_type in enumerate(cell_types):
|
|
print(cell_type)
|
|
frame_all = frame[(frame[cell_type_type] == cell_type)]
|
|
frame_g = frame[(frame[cell_type_type] == cell_type) & ((frame.gwn == True) | (frame.fs == True))]
|
|
#frame_g0 = setting_overview_score(frame, cell_type, min_amp='min', species=species)
|
|
#embed()
|
|
# frame_g_base = frame_base[
|
|
# (frame_base['cell_type_info'] == cell_type) & ((frame_base.gwn == True) | (frame_base.fs == True))]
|
|
|
|
# frame_g = frame_g.sort_values(by='cv')
|
|
# embed()
|
|
try:
|
|
ax0.scatter(frame_g[fr + add], frame_g[cv + add], alpha=alpha, label=cell_type, s=s,
|
|
color=colors[str(cell_type)], clip_on=True)
|
|
except:
|
|
print('scatter thing')
|
|
embed()
|
|
print('mean('+str(fr + add)+str(np.mean(frame_g[fr + add]))+' '+'mean('+str(cv + add)+str(np.mean(frame_g[cv + add])))
|
|
c_axis, x_axis, y_axis, exclude_here = exclude_nans_for_corr(frame_g, cv + add, cv_name=fr + add,
|
|
score=cv + add)
|
|
legend_wo_dot(ax0, 0.9 - 0.1 * c, x_axis, y_axis, ha='left', color=colors[str(cell_type)], x_pos=0)
|
|
|
|
exclude = np.isnan(frame_g['cv' + add]) | np.isnan(frame_g['fr' + add])
|
|
frame_g_ex = frame_g[~exclude]
|
|
# embed()
|
|
if annotate:
|
|
for f in range(len(frame_g_ex)):
|
|
# if not np.isnan(frame_g_ex.cv.iloc[f]):
|
|
ax0.text(frame_g_ex['fr' + add].iloc[f], frame_g_ex['cv' + add].iloc[f], frame_g_ex.cell.iloc[f][2:13],
|
|
rotation=45,
|
|
color=colors[str(cell_type)], fontsize=6)
|
|
# ax[1].text(frame_g_ex.cv.iloc[f], frame_g_ex.vs.iloc[f], frame_g_ex.cell.iloc[f][2:11], rotation=45, color=colors[c], fontsize = 6)
|
|
# embed()
|
|
test = False
|
|
if test:
|
|
frame_test = frame_g[frame_g['cv_burst_corr_individual'] > 1].cell
|
|
|
|
return frame_g
|
|
|
|
|
|
def plt_all_scatter(ax0, ax1, frame, cell_types, colors, add='', alpha=0.5, s=7, annotate=False,
|
|
cell_type_type='cell_type_info'):
|
|
# embed()
|
|
for c, cell_type in enumerate(cell_types):
|
|
frame_all = frame[(frame[cell_type_type] == cell_type)]
|
|
frame_g = frame[(frame[cell_type_type] == cell_type) & ((frame.gwn == True) | (frame.fs == True))]
|
|
# frame_g_base = frame_base[
|
|
# (frame_base['cell_type_info'] == cell_type) & ((frame_base.gwn == True) | (frame_base.fs == True))]
|
|
|
|
# frame_g = frame_g.sort_values(by='cv')
|
|
# embed()
|
|
# embed()
|
|
ax0.scatter(frame_g['cv' + add], frame_g['fr' + add], alpha=alpha, label=cell_type, s=s,
|
|
color=colors[str(cell_type)])
|
|
# embed()
|
|
exclude = np.isnan(frame_g['cv' + add]) | np.isnan(frame_g['fr' + add])
|
|
frame_g_ex = frame_g[~exclude]
|
|
# embed()
|
|
if annotate:
|
|
for f in range(len(frame_g_ex)):
|
|
# if not np.isnan(frame_g_ex.cv.iloc[f]):
|
|
ax0.text(frame_g_ex['cv' + add].iloc[f], frame_g_ex['fr' + add].iloc[f], frame_g_ex.cell.iloc[f][2:13],
|
|
rotation=45,
|
|
color=colors[str(cell_type)], fontsize=6)
|
|
# ax[1].text(frame_g_ex.cv.iloc[f], frame_g_ex.vs.iloc[f], frame_g_ex.cell.iloc[f][2:11], rotation=45, color=colors[c], fontsize = 6)
|
|
exclude = np.isnan(frame_g['cv' + add]) | np.isnan(frame_g['vs' + add])
|
|
frame_g_ex = frame_g[~exclude]
|
|
if annotate:
|
|
for f in range(len(frame_g_ex)):
|
|
# if not np.isnan(frame_g_ex.cv.iloc[f]):
|
|
# ax[0].text(frame_g_ex.cv.iloc[f], frame_g_ex.fr.iloc[f], frame_g_ex.cell.iloc[f][2:11], rotation=45,
|
|
# color=colors[c], fontsize=6)
|
|
ax1.text(frame_g_ex['cv' + add].iloc[f], frame_g_ex['vs' + add].iloc[f], frame_g_ex.cell.iloc[f][2:13],
|
|
rotation=45,
|
|
color=colors[str(cell_type)], fontsize=6)
|
|
|
|
|
|
# ax[0].axhline(50, color = 'green')
|
|
# ax[0].axhline(250, color='green')
|
|
|
|
ax0.set_xlim(0, 1.5)
|
|
|
|
ax1.scatter(frame_g['cv' + add], frame_g['vs' + add], alpha=alpha, label=cell_type, s=s,
|
|
color=colors[str(cell_type)]) #
|
|
# ax1.axvline(0.125, color='blue')
|
|
# ax1.axvline(1.2, color='blue')
|
|
# ax1.axvline(0.45, color='green')
|
|
# ax[1].axhline(0.45, color='green')
|
|
# ax[1].axvline(1.2, color='blue')
|
|
|
|
ax1.set_xlim(0, 1.5)
|
|
ax1.set_ylim(0, 1)
|
|
# ax0.set_ylim(0,550)
|
|
lim = 0.3
|
|
|
|
|
|
if 'burst' in add:
|
|
ax0.set_xlabel('$CV_{Burst Corr}$')
|
|
ax1.set_xlabel('$CV_{Burst Corr}$')
|
|
|
|
ax1.set_ylabel('$VS_{Burst Corr}$')
|
|
ax0.set_ylabel('Base Freq [Hz] $_{Burst Corr}$')
|
|
|
|
else:
|
|
ax0.set_xlabel('CV')
|
|
ax1.set_xlabel('CV')
|
|
ax0.set_ylabel('Base Freq [Hz]')
|
|
ax1.set_ylabel('VS')
|
|
# embed()
|
|
if add == '':
|
|
# embed()
|
|
ax0.legend(ncol=5, loc=(0, 1.05))
|
|
plt.subplots_adjust(wspace=0.25, bottom=0.1)
|
|
|
|
|
|
def plt_all_width_rotated(frame, cell_types, frame_cell, add, gg, cell_type, ax2, annotate=False, alpha=1, xlim=[0, 25],
|
|
s=15):
|
|
# embed()
|
|
colors = colors_overview()
|
|
if 'width_75' + add[gg] in frame_cell.keys():
|
|
ax2.scatter(frame_cell['width_75' + add[gg]], frame_cell['width_75' + add[gg]], alpha=1, label=cell_type, s=15,
|
|
color=colors[str(cell_type)], facecolor='white')
|
|
|
|
# embed()
|
|
for c, cell_type in enumerate(cell_types):
|
|
# frame_all = frame[(frame['cell_type_info'] == cell_type)]
|
|
#
|
|
frame_g = frame[(frame['cell_type_reclassified'] == cell_type) & ((frame.gwn == True) | (frame.fs == True))]
|
|
|
|
# frame_g = frame[(frame['cell_type_info'] == cell_type) & ((frame.gwn == True) | (frame.fs == True))]
|
|
|
|
ax2.scatter(frame_g['width_75' + add[gg]], frame_g['cv' + add[gg]], alpha=alpha, label=cell_type, s=s,
|
|
color=colors[str(cell_type)])
|
|
# embed()
|
|
exclude = np.isnan(frame_g['cv' + add[gg]]) | np.isnan(frame_g['width_75' + add[gg]])
|
|
frame_g_ex = frame_g[~exclude]
|
|
# embed()
|
|
if annotate:
|
|
for f in range(len(frame_g_ex)):
|
|
# if not np.isnan(frame_g_ex.cv.iloc[f]):
|
|
ax2.text(frame_g_ex['width_75' + add[gg]].iloc[f], frame_g_ex['cv' + add[gg]].iloc[f],
|
|
frame_g_ex.cell.iloc[f][2:13], rotation=45,
|
|
color=colors[str(cell_type)], fontsize=6)
|
|
# ax[1].text(frame_g_ex.cv.iloc[f], frame_g_ex.vs.iloc[f], frame_g_ex.cell.iloc[f][2:11], rotation=45, color=colors[c], fontsize = 6)
|
|
exclude = np.isnan(frame_g['cv' + add[gg]]) | np.isnan(frame_g['vs' + add[gg]])
|
|
frame_g_ex = frame_g[~exclude]
|
|
ax2.set_ylim(0, 1.5)
|
|
# ax2.set_ylim(0, 0.9)
|
|
|
|
lim = 0.3
|
|
# ax2.axvline(x=lim, color='black')
|
|
|
|
if 'burst' in add[gg]:
|
|
# ax2.set_xlabel('Width at 75 % $_{Burst Corr}$')
|
|
ax2.set_ylabel('$CV_{Burst Corr}$')
|
|
else:
|
|
ax2.set_ylabel('CV')
|
|
ax2.set_xlabel('Width at 75 %')
|
|
ax2.set_xlim(xlim)
|
|
# ax1.set_xlabel('CV')
|
|
# ax1.set_ylabel('Vector Strength')
|
|
|
|
|
|
def plt_all_width(frame, cell_types, frame_cell, add, gg, colors, cell_type, ax2, annotate=False, alpha=1, s=15):
|
|
# embed()
|
|
if 'width_75' + add[gg] in frame_cell.keys():
|
|
ax2.scatter(frame_cell['width_75' + add[gg]], frame_cell['width_75' + add[gg]], alpha=1, label=cell_type, s=15,
|
|
color=colors[str(cell_type)], facecolor='white')
|
|
|
|
# embed()
|
|
for c, cell_type in enumerate(cell_types):
|
|
# frame_all = frame[(frame['cell_type_info'] == cell_type)]
|
|
#
|
|
frame_g = frame[(frame['cell_type_reclassified'] == cell_type) & ((frame.gwn == True) | (frame.fs == True))]
|
|
|
|
# frame_g = frame[(frame['cell_type_info'] == cell_type) & ((frame.gwn == True) | (frame.fs == True))]
|
|
|
|
ax2.scatter(frame_g['cv' + add[gg]], frame_g['width_75' + add[gg]], alpha=alpha, label=cell_type, s=s,
|
|
color=colors[str(cell_type)])
|
|
# embed()
|
|
exclude = np.isnan(frame_g['cv' + add[gg]]) | np.isnan(frame_g['width_75' + add[gg]])
|
|
frame_g_ex = frame_g[~exclude]
|
|
# embed()
|
|
if annotate:
|
|
for f in range(len(frame_g_ex)):
|
|
# if not np.isnan(frame_g_ex.cv.iloc[f]):
|
|
ax2.text(frame_g_ex['cv' + add[gg]].iloc[f], frame_g_ex['width_75' + add[gg]].iloc[f],
|
|
frame_g_ex.cell.iloc[f][2:13], rotation=45,
|
|
color=colors[str(cell_type)], fontsize=6)
|
|
# ax[1].text(frame_g_ex.cv.iloc[f], frame_g_ex.vs.iloc[f], frame_g_ex.cell.iloc[f][2:11], rotation=45, color=colors[c], fontsize = 6)
|
|
exclude = np.isnan(frame_g['cv' + add[gg]]) | np.isnan(frame_g['vs' + add[gg]])
|
|
frame_g_ex = frame_g[~exclude]
|
|
|
|
ax2.set_xlim(0, 0.9)
|
|
|
|
lim = 0.3
|
|
# ax2.axvline(x=lim, color='black')
|
|
|
|
if 'burst' in add[gg]:
|
|
ax2.set_xlabel('$CV_{Burst Corr}$')
|
|
ax2.set_ylabel('Width at 75 % $_{Burst Corr}$')
|
|
else:
|
|
ax2.set_ylabel('Width at 75 %')
|
|
ax2.set_xlabel('CV')
|
|
ax2.set_ylim(0, 25)
|
|
# ax1.set_xlabel('CV')
|
|
# ax1.set_ylabel('Vector Strength')
|
|
|
|
|
|
def plt_scatter_three2(grid2, frame, cell_type_type, annotate, colors, cell_types=[' P-unit', ' Ampullary'],
|
|
add=['', '_burst_corr_individual']):
|
|
ax0 = plt.subplot(grid2[0])
|
|
|
|
# ok hier plotten wir nur den scatter der auch ein gwn hat, aber was ist wenn es mehr sind?
|
|
# ok im prinzip sollte das zwar schon stimmen aber für das Bild kann man wirklich mehr machen
|
|
for c, cell_type_it in enumerate(cell_types):
|
|
frame_g = frame[
|
|
(frame[cell_type_type] == cell_type_it) & ((frame.gwn == True) | (frame.fs == True))]
|
|
|
|
plt_cv_fr(annotate, ax0, add[0], frame_g, colors, cell_type_it)
|
|
|
|
ax1 = plt.subplot(grid2[1])
|
|
for c, cell_type_it in enumerate(cell_types):
|
|
frame_g = frame[
|
|
(frame[cell_type_type] == cell_type_it) & ((frame.gwn == True) | (frame.fs == True))]
|
|
plt_cv_vs(frame_g, ax1, add[0], annotate, colors, cell_type_it)
|
|
|
|
ax2 = plt.subplot(grid2[2])
|
|
# ax2.set_title('burst')
|
|
for c, cell_type_it in enumerate(cell_types):
|
|
# frame_all = frame[(frame[cell_type_type] == cell_type)]
|
|
frame_g = frame[
|
|
(frame[cell_type_type] == cell_type_it) & ((frame.gwn == True) | (frame.fs == True))]
|
|
# embed()
|
|
plt_cv_fr(annotate, ax2, add[1], frame_g, colors, cell_type_it)
|
|
ax2.set_ylabel('Base Freq [Hz] $_{Burst Corr}$')
|
|
ax2.set_xlabel('$CV_{Burst Corr}$')
|
|
return ax0, ax1, ax2
|
|
|
|
|
|
def plt_cell_body_single_amp(grid1, ax0, ax1, ax2, frame, colors, amps_desired, save_names, cells_plot, cell_type_type,
|
|
ax3=[]):
|
|
for c, cell in enumerate(cells_plot):
|
|
print(cell)
|
|
|
|
frame_cell = frame[(frame['cell'] == cell)]
|
|
frame_cell = unify_cell_names(frame_cell, cell_type=cell_type_type)
|
|
# try:
|
|
cell_type = frame_cell[cell_type_type].iloc[0]
|
|
# except:
|
|
# embed()
|
|
spikes = frame_cell.spikes.iloc[0]
|
|
spikes_all = []
|
|
hists = []
|
|
frs_calc = []
|
|
fr = frame_cell.fr.iloc[0]
|
|
cv = frame_cell.cv.iloc[0]
|
|
vs = frame_cell.vs.iloc[0]
|
|
eod_fr = frame_cell.EODf.iloc[0]
|
|
spikes_all, hists, frs_calc, cont_spikes = load_spikes(spikes, eod_fr)
|
|
# cont_spikes heißt dass die spikes nans sind oder leer sind, das heißt da ist gar nichts, auch keine scatter, das sind die weißen bilder die brauchen wir nicht
|
|
# also hier ist das ok das mit dem Cont spikes so zu machen weil wir wollen die ja haben!
|
|
# embed()
|
|
if cont_spikes:
|
|
|
|
# die zwei checken ob es mehr als paar spikes gibt,ohne die brauchen wir auch kein Bild
|
|
if len(hists) > 0:
|
|
if len(np.concatenate(hists)) > 0:
|
|
|
|
if np.min(np.concatenate(hists)) < 1.5:
|
|
hists2, spikes_ex, frs_calc2 = correct_burstiness(hists, spikes_all, [eod_fr] * len(spikes_all),
|
|
[eod_fr] * len(spikes_all))
|
|
|
|
spikes_both = [spikes_all, spikes_ex]
|
|
hists_both = [hists, hists2]
|
|
frs_calc_both = [frs_calc, frs_calc2]
|
|
else:
|
|
spikes_both = [spikes_all]
|
|
hists_both = [hists]
|
|
frs_calc_both = [frs_calc]
|
|
|
|
# das ist der title fals der square nicht plottet
|
|
plt.suptitle(cell + ' EODf ' + str(np.round(eod_fr)) + ' Hz ' + ' % ' +
|
|
' Base: cv ' + str(np.round(cv, 2)) + ' fr ' + str(
|
|
np.round(fr)) + ' Hz',
|
|
fontsize=11, ) # cell[0:13] + color=color+ cell_type
|
|
|
|
load_name = load_folder_name('calc_RAM') + '/' + save_names[0] + '_' + cell
|
|
# embed()
|
|
if os.path.exists(load_name + '.pkl'):
|
|
stack = pd.read_pickle(load_name + '.pkl')
|
|
file_names_exclude = file_names_to_exclude(cell_type)
|
|
# file_names_exclude = file_names_to_exclude(cell_type, file_names_exclude)
|
|
|
|
files = stack['file_name'].unique()
|
|
fexclude = False
|
|
if fexclude:
|
|
if len(files) > 1:
|
|
stack = stack[~stack['file_name'].isin(file_names_exclude)]
|
|
files = stack['file_name'].unique()
|
|
amps = stack['amp'].unique()
|
|
|
|
row, col = find_row_col(np.arange(len(amps) * len(files)))
|
|
|
|
predefined_amp = True
|
|
amps_defined = True
|
|
|
|
if predefined_amp:
|
|
col = 4
|
|
amps_defined = amps_desired
|
|
else:
|
|
amps_defined = amps
|
|
col = len(amps)
|
|
|
|
# for f, file in enumerate(files):
|
|
stack_file = stack[stack['file_name'] == files[0]]
|
|
amps = stack_file['amp'].unique()
|
|
for a, amp in enumerate(amps_defined):
|
|
|
|
if amp in np.array(stack_file['amp']):
|
|
stack_amp = stack_file[stack_file['amp'] == amp]
|
|
lengths = stack_file['stimulus_length'].unique()
|
|
length = np.max(lengths)
|
|
stack_final = stack_amp[stack_amp['stimulus_length'] == length]
|
|
trial_nr_double = stack_final.trial_nr.unique()
|
|
|
|
# ok das ist glaube ich ein Anzeichen von einem Fehler
|
|
if len(trial_nr_double) > 1:
|
|
print('trial_nr_double')
|
|
embed()
|
|
# ich hatte mal einen save fehler deswegen habe ich manche doppelt also einfach das letzte nehmen nehme ich an
|
|
|
|
try:
|
|
stack_final1 = stack_final[stack_final.trial_nr == np.max(trial_nr_double)]
|
|
except:
|
|
print('stack_final1 problem')
|
|
embed()
|
|
try:
|
|
grid_s = gridspec.GridSpecFromSubplotSpec(5, 1, grid1[c],
|
|
height_ratios=[1.5, 1.5, 5, 1.5, 1.5, ],
|
|
hspace=0)
|
|
|
|
# grid1[c, a + 1]
|
|
# axs = plt.subplot(grid1[c, a + 1])
|
|
axs = plt.subplot(grid_s[2])
|
|
except:
|
|
print('grid problem5')
|
|
embed()
|
|
|
|
cbar, mat, im = square_func2([axs], stack_final1)
|
|
if a == len(amps) - 1:
|
|
# if len(cbar) > 0:
|
|
cbar.set_label(nonlin_title(), rotation=90, labelpad=10)
|
|
fr = stack_final1.fr.unique()[0]
|
|
snippets = stack_final1['snippets'].unique()[0]
|
|
fr1 = np.unique(stack_final1.fr)
|
|
cv = stack_final1.cv.unique()[0]
|
|
|
|
ser = stack_final1.ser.unique()[0]
|
|
cv_stim = stack_final1.cv_stim.unique()[0]
|
|
fr_stim = stack_final1.fr_stim.unique()[0]
|
|
ser_stim = stack_final1.ser_stim.unique()[0]
|
|
|
|
|
|
# axs = plt.subplot(grid_s[2])
|
|
axo, axi = plt_psd_traces(grid_s[0], grid_s[1], axs, np.min(mat.columns),
|
|
np.max(mat.columns), eod_fr, fr, fr_stim, stack_final,
|
|
)
|
|
if c == 0:
|
|
axi.set_title(' std = ' + str(amp) + '$\%$') # files[0] + ' l ' + str(length)
|
|
if a != 0:
|
|
axi.set_ylabel('')
|
|
# if c != 2:
|
|
# axs.set_xlabel('')
|
|
# remove_xticks(axi)
|
|
################################
|
|
# do the scatter of these cells
|
|
add = ['', '_burst_corr', ]
|
|
# embed()
|
|
if type(ax0) != list:
|
|
ax0.scatter(frame_cell['cv' + add[0]], frame_cell['fr' + add[0]], zorder=2, alpha=1,
|
|
label=cell_type, s=15,
|
|
color=colors[str(cell_type)], facecolor='white')
|
|
if type(ax1) != list:
|
|
ax1.scatter(frame_cell['cv' + add[0]], frame_cell['vs' + add[0]], zorder=2, alpha=1,
|
|
label=cell_type, s=15,
|
|
color=colors[str(cell_type)], facecolor='white')
|
|
if type(ax2) != list:
|
|
ax2.scatter(frame_cell['cv' + add[1]], frame_cell['fr' + add[1]], zorder=2, alpha=1,
|
|
label=cell_type, s=15,
|
|
color=colors[str(cell_type)], facecolor='white')
|
|
if ax3 != []:
|
|
frame_g = base_to_stim(load_name, frame, cell_type_type, cell_type)
|
|
try:
|
|
ax3.scatter(frame_g['cv'], frame_g['cv_stim'], zorder=2, alpha=1,
|
|
label=cell_type, s=15,
|
|
color=colors[str(cell_type)], facecolor='white')
|
|
except:
|
|
print('scatter problem')
|
|
embed()
|
|
################################
|
|
# do the hist
|
|
alpha = 1
|
|
axi = plt.subplot(grid_s[-1])
|
|
add = ['', '_burst_corr', ]
|
|
colors_hist = ['grey', colors[str(cell_type)]]
|
|
if len(hists_both) > 1:
|
|
colors_hist = ['grey', colors[str(cell_type)]]
|
|
else:
|
|
colors_hist = [colors[str(cell_type)]]
|
|
try:
|
|
for gg in range(len(hists_both)):
|
|
# if len(hists_both) > 1:
|
|
hists_here = hists_both[gg]
|
|
# embed()
|
|
for hh, h in enumerate(hists_here):
|
|
try:
|
|
axi.hist(h, bins=100, color=colors_hist[gg], alpha=float(alpha - 0.05 * (hh)))
|
|
except:
|
|
print('alpha problem5')
|
|
# embed()
|
|
# if np.max(np.concatenate(hists_here)) > 10:
|
|
# axi.set_xlim(0, 10)
|
|
|
|
axi.set_title(
|
|
'CV ' + str(np.round(np.std(h) / np.mean(h), 3)) + ' ' + cell) # +' VS '+str(vs)
|
|
# axi.set_xlim(0,13)
|
|
# if c != len(cells_plot)-1:
|
|
# remove_xticks(axi)
|
|
|
|
# else:
|
|
axi.set_xlabel('isi')
|
|
except:
|
|
print('hists not there yet')
|
|
|
|
|
|
def plt_cell_body3(grid1, ax0, ax1, ax2, frame, colors, amps_desired, save_names, cells_plot, cell_type_type, ax3=[],
|
|
xlim=[]):
|
|
for c, cell in enumerate(cells_plot):
|
|
print(cell)
|
|
|
|
frame_cell = frame[(frame['cell'] == cell)]
|
|
frame_cell = unify_cell_names(frame_cell, cell_type=cell_type_type)
|
|
try:
|
|
cell_type = frame_cell[cell_type_type].iloc[0]
|
|
except:
|
|
embed()
|
|
spikes = frame_cell.spikes.iloc[0]
|
|
spikes_all = []
|
|
hists = []
|
|
frs_calc = []
|
|
fr = frame_cell.fr.iloc[0]
|
|
cv = frame_cell.cv.iloc[0]
|
|
vs = frame_cell.vs.iloc[0]
|
|
eod_fr = frame_cell.EODf.iloc[0]
|
|
spikes_all, hists, frs_calc, cont_spikes = load_spikes(spikes, eod_fr)
|
|
# cont_spikes heißt dass die spikes nans sind oder leer sind, das heißt da ist gar nichts, auch keine scatter, das sind die weißen bilder die brauchen wir nicht
|
|
# also hier ist das ok das mit dem Cont spikes so zu machen weil wir wollen die ja haben!
|
|
# embed()
|
|
if cont_spikes:
|
|
|
|
# die zwei checken ob es mehr als paar spikes gibt,ohne die brauchen wir auch kein Bild
|
|
if len(hists) > 0:
|
|
if len(np.concatenate(hists)) > 0:
|
|
|
|
if np.min(np.concatenate(hists)) < 1.5:
|
|
hists2, spikes_ex, frs_calc2 = correct_burstiness(hists, spikes_all, [eod_fr] * len(spikes_all),
|
|
[eod_fr] * len(spikes_all))
|
|
|
|
spikes_both = [spikes_all, spikes_ex]
|
|
hists_both = [hists, hists2]
|
|
frs_calc_both = [frs_calc, frs_calc2]
|
|
else:
|
|
spikes_both = [spikes_all]
|
|
hists_both = [hists]
|
|
frs_calc_both = [frs_calc]
|
|
|
|
# das ist der title fals der square nicht plottet
|
|
|
|
|
|
load_name = load_folder_name('calc_RAM') + '/' + save_names[0] + '_' + cell
|
|
# embed()
|
|
if os.path.exists(load_name + '.pkl'):
|
|
stack = pd.read_pickle(load_name + '.pkl')
|
|
file_names_exclude = file_names_to_exclude(cell_type)
|
|
files = stack['file_name'].unique()
|
|
fexclude = False
|
|
if fexclude:
|
|
if len(files) > 1:
|
|
stack = stack[~stack['file_name'].isin(file_names_exclude)]
|
|
files = stack['file_name'].unique()
|
|
amps = stack['amp'].unique()
|
|
|
|
row, col = find_row_col(np.arange(len(amps) * len(files)))
|
|
|
|
predefined_amp = True
|
|
amps_defined = True
|
|
|
|
if predefined_amp:
|
|
col = 4
|
|
amps_defined = amps_desired
|
|
else:
|
|
amps_defined = amps
|
|
col = len(amps)
|
|
|
|
# for f, file in enumerate(files):
|
|
stack_file = stack[stack['file_name'] == files[0]]
|
|
amps = stack_file['amp'].unique()
|
|
for a, amp in enumerate(amps_defined):
|
|
|
|
if amp in np.array(stack_file['amp']):
|
|
stack_amp = stack_file[stack_file['amp'] == amp]
|
|
lengths = stack_file['stimulus_length'].unique()
|
|
length = np.max(lengths)
|
|
stack_final = stack_amp[stack_amp['stimulus_length'] == length]
|
|
trial_nr_double = stack_final.trial_nr.unique()
|
|
|
|
# ok das ist glaube ich ein Anzeichen von einem Fehler
|
|
if len(trial_nr_double) > 1:
|
|
print('trial_nr_double')
|
|
embed()
|
|
# ich hatte mal einen save fehler deswegen habe ich manche doppelt also einfach das letzte nehmen nehme ich an
|
|
|
|
try:
|
|
stack_final1 = stack_final[stack_final.trial_nr == np.max(trial_nr_double)]
|
|
except:
|
|
print('stack_final1 problem')
|
|
embed()
|
|
try:
|
|
grid_s = gridspec.GridSpecFromSubplotSpec(3, 1, grid1[c, a + 1],
|
|
height_ratios=[1.5, 1.5, 5],
|
|
hspace=0)
|
|
|
|
# grid1[c, a + 1]
|
|
# axs = plt.subplot(grid1[c, a + 1])
|
|
axs = plt.subplot(grid_s[2])
|
|
except:
|
|
print('grid problem4')
|
|
embed()
|
|
|
|
cbar, mat, im = square_func2([axs], stack_final1)
|
|
if xlim:
|
|
axs.set_xlim(xlim)
|
|
axs.set_ylim(xlim)
|
|
if a == len(amps) - 1:
|
|
# if len(cbar) > 0:
|
|
cbar.set_label(nonlin_title(), rotation=90, labelpad=10)
|
|
fr = stack_final1.fr.unique()[0]
|
|
snippets = stack_final1['snippets'].unique()[0]
|
|
fr1 = np.unique(stack_final1.fr)
|
|
cv = stack_final1.cv.unique()[0]
|
|
|
|
ser = stack_final1.ser.unique()[0]
|
|
cv_stim = stack_final1.cv_stim.unique()[0]
|
|
fr_stim = stack_final1.fr_stim.unique()[0]
|
|
ser_stim = stack_final1.ser_stim.unique()[0]
|
|
|
|
# axs = plt.subplot(grid_s[2])
|
|
axo, axi = plt_psd_traces(grid_s[0], grid_s[1], axs, np.min(mat.columns),
|
|
np.max(mat.columns), eod_fr, fr, fr_stim, stack_final,
|
|
)
|
|
if c == 0:
|
|
axo.set_title(' $std=$' + str(amp) + ' %') # files[0] + ' l ' + str(length)
|
|
if a != 0:
|
|
axi.set_ylabel('')
|
|
axo.set_ylabel('')
|
|
axs.set_ylabel('')
|
|
if c != 2:
|
|
axs.set_xlabel('')
|
|
remove_xticks(axi)
|
|
if a == 1:
|
|
axo.set_title(cell) # +' VS '+str(vs)
|
|
|
|
################################
|
|
# do the scatter of these cells
|
|
add = ['', '_burst_corr', ]
|
|
ax0.scatter(frame_cell['cv' + add[0]], frame_cell['fr' + add[0]], zorder=2, alpha=1,
|
|
label=cell_type, s=15,
|
|
color=colors[str(cell_type)], facecolor='white')
|
|
ax1.scatter(frame_cell['cv' + add[0]], frame_cell['vs' + add[0]], zorder=2, alpha=1,
|
|
label=cell_type, s=15,
|
|
color=colors[str(cell_type)], facecolor='white')
|
|
ax2.scatter(frame_cell['cv' + add[1]], frame_cell['fr' + add[1]], zorder=2, alpha=1,
|
|
label=cell_type, s=15,
|
|
color=colors[str(cell_type)], facecolor='white')
|
|
if ax3 != []:
|
|
frame_g = base_to_stim(load_name, frame, cell_type_type, cell_type)
|
|
try:
|
|
ax3.scatter(frame_g['cv'], frame_g['cv_stim'], zorder=2, alpha=1,
|
|
label=cell_type, s=15,
|
|
color=colors[str(cell_type)], facecolor='white')
|
|
except:
|
|
print('scatter problem')
|
|
embed()
|
|
################################
|
|
# do the hist
|
|
alpha = 1
|
|
axi = plt.subplot(grid1[c, 0])
|
|
add = ['', '_burst_corr', ]
|
|
colors_hist = ['grey', colors[str(cell_type)]]
|
|
if len(hists_both) > 1:
|
|
colors_hist = ['grey', colors[str(cell_type)]]
|
|
else:
|
|
colors_hist = [colors[str(cell_type)]]
|
|
for gg in range(len(hists_both)):
|
|
# if len(hists_both) > 1:
|
|
hists_here = hists_both[gg]
|
|
# embed()
|
|
for hh, h in enumerate(hists_here):
|
|
try:
|
|
axi.hist(h, bins=100, color=colors_hist[gg], alpha=float(alpha - 0.05 * (hh)),
|
|
label='CV ' + str(
|
|
np.round(np.std(h) / np.mean(h), 3)))
|
|
except:
|
|
print('alpha problem6')
|
|
embed()
|
|
axi.legend()
|
|
# if np.max(np.concatenate(hists_here)) > 10:
|
|
# axi.set_xlim(0, 10)
|
|
|
|
axi.set_xlim(0, 13)
|
|
if c != len(cells_plot) - 1:
|
|
remove_xticks(axi)
|
|
else:
|
|
axi.set_xlabel('isi')
|
|
|
|
|
|
def plt_cell_body(grid1, ax0, ax1, ax2, frame, colors, amps_desired, save_names, cells_plot, cell_type_type, ax3=[],
|
|
xlim=[]):
|
|
for c, cell in enumerate(cells_plot):
|
|
print(cell)
|
|
|
|
frame_cell = frame[(frame['cell'] == cell)]
|
|
frame_cell = unify_cell_names(frame_cell, cell_type=cell_type_type)
|
|
try:
|
|
cell_type = frame_cell[cell_type_type].iloc[0]
|
|
except:
|
|
embed()
|
|
spikes = frame_cell.spikes.iloc[0]
|
|
spikes_all = []
|
|
hists = []
|
|
frs_calc = []
|
|
fr = frame_cell.fr.iloc[0]
|
|
cv = frame_cell.cv.iloc[0]
|
|
vs = frame_cell.vs.iloc[0]
|
|
eod_fr = frame_cell.EODf.iloc[0]
|
|
spikes_all, hists, frs_calc, cont_spikes = load_spikes(spikes, eod_fr)
|
|
# cont_spikes heißt dass die spikes nans sind oder leer sind, das heißt da ist gar nichts, auch keine scatter, das sind die weißen bilder die brauchen wir nicht
|
|
# also hier ist das ok das mit dem Cont spikes so zu machen weil wir wollen die ja haben!
|
|
# embed()
|
|
if cont_spikes:
|
|
|
|
# die zwei checken ob es mehr als paar spikes gibt,ohne die brauchen wir auch kein Bild
|
|
if len(hists) > 0:
|
|
if len(np.concatenate(hists)) > 0:
|
|
|
|
if np.min(np.concatenate(hists)) < 1.5:
|
|
hists2, spikes_ex, frs_calc2 = correct_burstiness(hists, spikes_all, [eod_fr] * len(spikes_all),
|
|
[eod_fr] * len(spikes_all))
|
|
|
|
spikes_both = [spikes_all, spikes_ex]
|
|
hists_both = [hists, hists2]
|
|
frs_calc_both = [frs_calc, frs_calc2]
|
|
else:
|
|
spikes_both = [spikes_all]
|
|
hists_both = [hists]
|
|
frs_calc_both = [frs_calc]
|
|
|
|
# das ist der title fals der square nicht plottet
|
|
|
|
|
|
load_name = load_folder_name('calc_RAM') + '/' + save_names[0] + '_' + cell
|
|
# embed()
|
|
if os.path.exists(load_name + '.pkl'):
|
|
stack = pd.read_pickle(load_name + '.pkl')
|
|
if 'p-unit' in cell_type: # == ['p-unit', ' P-unit']:
|
|
file_names_exclude = ['InputArr_350to400hz_30',
|
|
'InputArr_250to300hz_30',
|
|
'InputArr_150to200hz_30',
|
|
'InputArr_50to100hz_30',
|
|
'InputArr_50hz_30',
|
|
|
|
'gwn50Hz50s0.3',
|
|
'gwn50Hz10s0.3',
|
|
'gwn50Hz10.3',
|
|
'gwn50Hz10s0.3short',
|
|
|
|
'gwn25Hz10s0.3',
|
|
|
|
'FileStimulus-file-gaussian50.0',
|
|
'FileStimulus-file-gaussian25.0',
|
|
] #
|
|
else:
|
|
file_names_exclude = ['InputArr_350to400hz_30',
|
|
'InputArr_250to300hz_30',
|
|
'InputArr_150to200hz_30',
|
|
'InputArr_50to100hz_30',
|
|
'InputArr_50hz_30',
|
|
|
|
'blwn125Hz10s0.3',
|
|
'gwn50Hz10s0.3',
|
|
'FileStimulus-file-gaussian50.0',
|
|
'FileStimulus-file-gaussian25.0', 'gwn25Hz10s0.3', 'gwn50Hz10.3',
|
|
'gwn50Hz10s0.3short',
|
|
'gwn50Hz50s0.3', 'gwn25Hz10s0.3', ] #
|
|
|
|
files = stack['file_name'].unique()
|
|
fexclude = False
|
|
if fexclude:
|
|
if len(files) > 1:
|
|
stack = stack[~stack['file_name'].isin(file_names_exclude)]
|
|
files = stack['file_name'].unique()
|
|
amps = stack['amp'].unique()
|
|
|
|
row, col = find_row_col(np.arange(len(amps) * len(files)))
|
|
|
|
predefined_amp = True
|
|
amps_defined = True
|
|
|
|
if predefined_amp:
|
|
col = 4
|
|
amps_defined = amps_desired
|
|
else:
|
|
amps_defined = amps
|
|
col = len(amps)
|
|
|
|
# for f, file in enumerate(files):
|
|
stack_file = stack[stack['file_name'] == files[0]]
|
|
amps = stack_file['amp'].unique()
|
|
for a, amp in enumerate(amps_defined):
|
|
|
|
if amp in np.array(stack_file['amp']):
|
|
stack_amp = stack_file[stack_file['amp'] == amp]
|
|
lengths = stack_file['stimulus_length'].unique()
|
|
length = np.max(lengths)
|
|
stack_final = stack_amp[stack_amp['stimulus_length'] == length]
|
|
trial_nr_double = stack_final.trial_nr.unique()
|
|
|
|
# ok das ist glaube ich ein Anzeichen von einem Fehler
|
|
if len(trial_nr_double) > 1:
|
|
print('trial_nr_double')
|
|
embed()
|
|
# ich hatte mal einen save fehler deswegen habe ich manche doppelt also einfach das letzte nehmen nehme ich an
|
|
|
|
try:
|
|
stack_final1 = stack_final[stack_final.trial_nr == np.max(trial_nr_double)]
|
|
except:
|
|
print('stack_final1 problem')
|
|
embed()
|
|
try:
|
|
grid_s = gridspec.GridSpecFromSubplotSpec(3, 1, grid1[c, a],
|
|
height_ratios=[1.5, 1.5, 5],
|
|
hspace=0)
|
|
|
|
# grid1[c, a + 1]
|
|
# axs = plt.subplot(grid1[c, a + 1])
|
|
axs = plt.subplot(grid_s[2])
|
|
except:
|
|
print('grid problem3')
|
|
embed()
|
|
|
|
cbar, mat, im = square_func2([axs], stack_final1)
|
|
if xlim:
|
|
axs.set_xlim(xlim)
|
|
axs.set_ylim(xlim)
|
|
if a == len(amps) - 1:
|
|
# if len(cbar) > 0:
|
|
cbar.set_label(nonlin_title(), rotation=90, labelpad=10)
|
|
fr = stack_final1.fr.unique()[0]
|
|
snippets = stack_final1['snippets'].unique()[0]
|
|
fr1 = np.unique(stack_final1.fr)
|
|
cv = stack_final1.cv.unique()[0]
|
|
|
|
ser = stack_final1.ser.unique()[0]
|
|
cv_stim = stack_final1.cv_stim.unique()[0]
|
|
fr_stim = stack_final1.fr_stim.unique()[0]
|
|
ser_stim = stack_final1.ser_stim.unique()[0]
|
|
|
|
# axs = plt.subplot(grid_s[2])
|
|
axo, axi = plt_psd_traces(grid_s[0], grid_s[1], axs, np.min(mat.columns),
|
|
np.max(mat.columns), eod_fr, fr, fr_stim, stack_final,
|
|
)
|
|
if c == 0:
|
|
axo.set_title(' $std=$' + str(amp) + ' %') # files[0] + ' l ' + str(length)
|
|
if a != 0:
|
|
axi.set_ylabel('')
|
|
axo.set_ylabel('')
|
|
axs.set_ylabel('')
|
|
if c != 2:
|
|
axs.set_xlabel('')
|
|
remove_xticks(axi)
|
|
if a == 1:
|
|
axo.set_title(cell) # +' VS '+str(vs)
|
|
|
|
################################
|
|
# do the scatter of these cells
|
|
add = ['', '_burst_corr', ]
|
|
ax0.scatter(frame_cell['cv' + add[0]], frame_cell['fr' + add[0]], zorder=2, alpha=1,
|
|
label=cell_type, s=15,
|
|
color=colors[str(cell_type)], facecolor='white')
|
|
ax1.scatter(frame_cell['cv' + add[0]], frame_cell['vs' + add[0]], zorder=2, alpha=1,
|
|
label=cell_type, s=15,
|
|
color=colors[str(cell_type)], facecolor='white')
|
|
ax2.scatter(frame_cell['cv' + add[1]], frame_cell['fr' + add[1]], zorder=2, alpha=1,
|
|
label=cell_type, s=15,
|
|
color=colors[str(cell_type)], facecolor='white')
|
|
if ax3 != []:
|
|
frame_g = base_to_stim(load_name, frame, cell_type_type, cell_type)
|
|
try:
|
|
ax3.scatter(frame_g['cv'], frame_g['cv_stim'], zorder=2, alpha=1,
|
|
label=cell_type, s=15,
|
|
color=colors[str(cell_type)], facecolor='white')
|
|
except:
|
|
print('scatter problem')
|
|
embed()
|
|
|
|
|
|
|
|
def base_to_stim(load_name, frame, cell_type_type, cell_type_it, stack=[]):
|
|
if len(stack) == 0:
|
|
if os.path.exists(load_name):
|
|
stack_stim = pd.read_csv(load_name, low_memory=False)
|
|
else:
|
|
stack_stim = stack
|
|
# embed()
|
|
cells = frame[frame[cell_type_type] == cell_type_it].cell.unique()
|
|
frame_gr = stack_stim[stack_stim.cell.isin(cells)]
|
|
frame1 = frame_gr['cell']
|
|
frame_g = frame_gr.loc[frame1.drop_duplicates().index]
|
|
return frame_g
|
|
|
|
|
|
def plt_cv_vs(frame_g, ax1, add, annotate, colors, cell_type):
|
|
ax1.scatter(frame_g['cv' + add], frame_g['vs' + add], alpha=0.5, label=cell_type, s=7, color=colors[str(cell_type)])
|
|
exclude = np.isnan(frame_g['cv' + add]) | np.isnan(frame_g['vs' + add])
|
|
frame_g_ex = frame_g[~exclude]
|
|
if annotate:
|
|
for f in range(len(frame_g_ex)):
|
|
# if not np.isnan(frame_g_ex.cv.iloc[f]):
|
|
# ax[0].text(frame_g_ex.cv.iloc[f], frame_g_ex.fr.iloc[f], frame_g_ex.cell.iloc[f][2:11], rotation=45,
|
|
# color=colors[c], fontsize=6)
|
|
ax1.text(frame_g_ex['cv' + add].iloc[f], frame_g_ex['vs' + add].iloc[f], frame_g_ex.cell.iloc[f][2:13],
|
|
rotation=45,
|
|
color=colors[str(cell_type)], fontsize=6)
|
|
ax1.set_xlim(0, 1.5)
|
|
ax1.set_ylim(0, 1)
|
|
ax1.set_xlabel('CV')
|
|
ax1.set_ylabel('VS')
|
|
|
|
|
|
def plt_data_up(cell, ax, fig, grid, cells_chosen, cell_type='p-unit', width=0.005, cbar_label=True):
|
|
if 'p-unit' in cell_type: # == ['p-unit', ' P-unit']:
|
|
file_names_exclude = ['InputArr_350to400hz_30', 'InputArr_250to300hz_30', 'InputArr_150to200hz_30',
|
|
'InputArr_50to100hz_30', 'gwn25Hz10s0.3', 'InputArr_50hz_30',
|
|
'FileStimulus-file-gaussian50.0', 'gwn50Hz10.3', 'gwn50Hz10s0.3short',
|
|
'gwn50Hz50s0.3',
|
|
'FileStimulus-file-gaussian25.0', 'gwn50Hz10s0.3', ] #
|
|
else:
|
|
file_names_exclude = ['blwn125Hz10s0.3', 'gwn50Hz10s0.3', 'InputArr_350to400hz_30',
|
|
'InputArr_250to300hz_30', 'InputArr_150to200hz_30',
|
|
'InputArr_50to100hz_30', 'InputArr_50hz_30', 'FileStimulus-file-gaussian50.0',
|
|
'FileStimulus-file-gaussian25.0', 'gwn25Hz10s0.3', 'gwn50Hz10.3',
|
|
'gwn50Hz10s0.3short',
|
|
'gwn50Hz50s0.3', 'gwn25Hz10s0.3', ] #
|
|
|
|
# stack_files, cells = load_cell_types(sorted, save_name, load_name, file_names_exclude, cell_type,
|
|
# cell_type_chosen=cell_type_chosen)
|
|
|
|
if len(cells_chosen) > 0:
|
|
cells = cells_chosen
|
|
# test = False
|
|
# if test:
|
|
|
|
col = 4
|
|
col, row, = find_row_col(cells, col=col)
|
|
# fig, ax = plt.subplots(row, col) # , sharex=True, sharey=True
|
|
# plt.suptitle(save_name + ' sorted ' + sorted)
|
|
# ax = np.concatenate(ax)
|
|
# embed()
|
|
ax_data = []
|
|
# for f, cell in enumerate(cells):
|
|
|
|
if cell == '2012-07-03-ak-invivo-1':
|
|
save_name = 'noise_data9_nfft1sec_original__LocalEOD_CutatBeginning_0.05_s_NeurDelay_0.005_s' # _burst_corr
|
|
else:
|
|
save_name = 'noise_data8_nfft1sec_original__LocalEOD_CutatBeginning_0.05_s_NeurDelay_0.005_s' # _burst_corr
|
|
|
|
load_name = load_folder_name('calc_RAM') + '/' + save_name
|
|
# stack_files = load_data(load_name + '.csv', load_name, cells=cells_chosen, redo=True)
|
|
|
|
# ax = plt.subplot(grid[f])
|
|
# stack_files = stack_files.sort_values(by = sorted[s])
|
|
ax_data.append(ax)
|
|
#########################################
|
|
# also die einzelzellen sind in pkls
|
|
# embed()
|
|
stack_cell = load_data_susept(load_name + '_' + cell + '.pkl', load_name + '_' + cell)
|
|
# if '.pkl' not in save_name:
|
|
# stack_cell = pd.read_pickle(load_name + '_' + cell + '.pkl') #skiprows=stack_final.iloc[0]['nrs'], nrows=len(stack_final)
|
|
# else:
|
|
# stack_cell = pd.read_pickle(load_name)
|
|
# stack_cell = stack_files[stack_files.cell == cell]
|
|
# embed()
|
|
try:
|
|
stack_cell = stack_cell[~stack_cell['file_name'].isin(file_names_exclude)]
|
|
except:
|
|
print('stack cell problem')
|
|
stack_cell = []
|
|
# embed()
|
|
# embed()
|
|
if len(stack_cell):
|
|
file_names = stack_cell.file_name.unique()
|
|
cut_off_nr = []
|
|
for ff, file_name in enumerate(file_names):
|
|
if 'Hz' in file_name:
|
|
split = file_name.split('Hz')[0]
|
|
if 'wn' in split:
|
|
cut_off_nr.append(split.split('wn')[1])
|
|
else:
|
|
cut_off_nr.append(split.split('_')[1])
|
|
elif 'hz' in file_name:
|
|
split = file_name.split('hz')[0]
|
|
if 'wn' in split:
|
|
cut_off_nr.append(split.split('wn')[1])
|
|
else:
|
|
cut_off_nr.append(split.split('_')[1])
|
|
elif 'gaussian' in file_name:
|
|
cut_off_nr.append(file_name.split('gaussian')[1])
|
|
else:
|
|
cut_off_nr.append(file_name[-5::])
|
|
# file_name.split('hz')
|
|
try:
|
|
maxs = list(map(float, cut_off_nr))
|
|
except:
|
|
embed()
|
|
file_names = file_names[np.argmax(maxs)]
|
|
stack_file = stack_cell[stack_cell['file_name'] == file_names]
|
|
# if len(stack_file)==0:
|
|
# embed()
|
|
amps = [np.min(stack_file.amp.unique())]
|
|
amps = restrict_punits(cell, amps)
|
|
# embed()
|
|
for amp in amps:
|
|
stack_amps = stack_file[stack_file['amp'] == amp]
|
|
# if len(stack_amps) == 0:
|
|
# embed()
|
|
lengths = stack_amps.stimulus_length.unique()
|
|
try:
|
|
length_max = [np.max(lengths)]
|
|
except:
|
|
embed()
|
|
|
|
for length in length_max:
|
|
stack_final = stack_amps[stack_amps['stimulus_length'] == length]
|
|
if len(stack_final) < 1:
|
|
embed()
|
|
# print(np.shape(stack_final))
|
|
|
|
# try:
|
|
snippets = stack_final['snippets'].unique()[0]
|
|
# except:
|
|
# embed()
|
|
eod_fr = stack_final.eod_fr.unique()[0]
|
|
cv = stack_final.cv.unique()[0]
|
|
fr = stack_final.fr.unique()[0]
|
|
cv = stack_final.cv.unique()[0]
|
|
fr = stack_final.fr.unique()[0]
|
|
ser = stack_final.ser.unique()[0]
|
|
cv_stim = stack_final.cv_stim.unique()[0]
|
|
fr_stim = stack_final.fr_stim.unique()[0]
|
|
ser_stim = stack_final.ser_stim.unique()[0] # + file_name
|
|
ax.set_title(
|
|
cell[0:13] + stack_final.celltype.unique()[0] + 'S.Nr ' + str(
|
|
snippets) + ' EODf ' + str(np.round(eod_fr)) + ' Hz ' + ' std ' + str(
|
|
amp) + ' % ' +
|
|
'\n $cv_{B}=$' + str(np.round(cv, 2)) + ',$f_{B}=$' + str(np.round(fr)) + 'Hz'
|
|
+ ',$cv_{S}=$' + str(np.round(cv_stim, 2)) + ',$f_{S}=$' + str(
|
|
np.round(fr_stim)) + 'Hz'
|
|
, fontsize=7) # + cell_type
|
|
|
|
# embed()
|
|
|
|
stack_plot = stack_final
|
|
keys = stack_plot.keys()
|
|
new_keys = keys[np.array(list(map(type, keys))) == float]
|
|
new_keys = np.sort(new_keys)
|
|
new_keys = stack_plot.index
|
|
# embed()
|
|
# stack_plot.columns = list(map(float,stack_plot.columns))
|
|
try:
|
|
stack_plot = stack_plot[new_keys]
|
|
except:
|
|
new_keys = list(map(str, new_keys))
|
|
stack_plot = stack_plot[new_keys]
|
|
# embed()
|
|
# pd.to_numeric(stack_plot)
|
|
stack_plot = stack_plot.astype(complex)
|
|
# stack_plot[new_keys] = stack_plot[new_keys].apply(pd.to_numeric)
|
|
stack_plot.columns = list(map(float, stack_plot.columns))
|
|
# embed()
|
|
mat = RAM_norm_data(stack_final['d_isf1'].iloc[0], stack_plot, stack_final['snippets'].unique()[0])
|
|
# mat = np.abs(stack_plot)
|
|
|
|
plot = True
|
|
# embed()
|
|
# RAM_norm(D_c_sig, stack_plot, trials_stim, power=1)
|
|
if plot:
|
|
pcolor = False
|
|
if pcolor:
|
|
im = ax.pcolormesh(np.array(mat.index),
|
|
np.array(list(map(float, mat.columns))), mat,
|
|
vmin=np.nanpercentile(mat, 5),
|
|
vmax=np.nanpercentile(mat, 95), cmap='Greens',
|
|
rasterized=True
|
|
) # rasterized = True
|
|
else:
|
|
im = ax.imshow(mat, origin='lower',
|
|
extent=[float(np.min(mat.columns)),
|
|
float(np.max(mat.columns)),
|
|
float(np.min(mat.index)), float(np.max(mat.index))],
|
|
vmin=np.nanpercentile(mat, 5),
|
|
vmax=np.nanpercentile(mat, 95),
|
|
|
|
cmap='viridis', ) # 'Greens'#vmin=np.percentile(np.abs(stack_plot), 5),vmax=np.percentile(np.abs(stack_plot), 95),
|
|
|
|
plt.suptitle(cell_type)
|
|
|
|
# if f in np.arange(0, len(file_names) + 10, col):
|
|
# ax.set_ylabel(F2_xlabel())
|
|
# else:
|
|
# ax[f].set_xticks([])
|
|
# ax[f].set_xlim(float(mat.index[0]), 150)
|
|
# ax[f].set_ylim(float(mat.columns[0]), 150)
|
|
ax.set_xlim(float(np.min(mat.index)), float(np.max(mat.index)))
|
|
ax.set_ylim(float(np.min(mat.index)), float(np.max(mat.index)))
|
|
ax.set_xlim(0, 300)
|
|
ax.set_ylim(0, 300)
|
|
ax.set_aspect('equal')
|
|
plt_triangle(ax, fr, fr_stim, eod_fr, new_keys[-1])
|
|
plt_50_Hz_noise(ax, new_keys[-1])
|
|
if plot:
|
|
# cbar = plt.colorbar(im, ax=ax)#, shrink=0.7, pad=0.11
|
|
cbar, left, bottom, width, height = colorbar_outside(ax, im, fig, add=0, shrink=0.6,
|
|
width=width) # 0.02
|
|
if cbar_label:
|
|
cbar.set_label(nonlin_title(), rotation=90, labelpad=10)
|
|
return ax_data
|
|
|
|
|
|
def plt_data_susept(fig, grid, cells_chosen, eod_metrice = True, amp_given = None, nr = 3, cell_type='p-unit',xlabel = True, lp=10, title=True, cbar_label=True, width=0.005):
|
|
file_names_exclude = get_file_names_exclude(cell_type)
|
|
|
|
if len(cells_chosen) > 0:
|
|
cells = cells_chosen
|
|
col = 4
|
|
ax_data = []
|
|
# stack_spikes = []
|
|
stack_spikes_all = []
|
|
eod_frs = []
|
|
for f, cell in enumerate(cells):
|
|
ax = plt.subplot(grid[f])
|
|
ax_data.append(ax)
|
|
|
|
eod_fr, stack_spikes = plt_data_suscept_single(ax, cbar_label, cell, cells, f, fig, file_names_exclude, lp,
|
|
title, width, nr = nr,eod_metrice = eod_metrice, amp_given = amp_given, xlabel = xlabel)
|
|
|
|
stack_spikes_all.append(stack_spikes)
|
|
eod_frs.append(eod_fr)
|
|
return ax_data, stack_spikes_all, eod_frs
|
|
|
|
|
|
def plt_data_suscept_single(ax, cbar_label, cell, cells, f, fig, file_names_exclude, lp, title, width,eod_metrice = True, nr = 3, xlabel = True,amp_given = None):
|
|
if cell == '2012-07-03-ak-invivo-1':
|
|
save_name = 'noise_data9_nfft1sec_original__LocalEOD_CutatBeginning_0.05_s_NeurDelay_0.005_s' # _burst_corr
|
|
else:
|
|
save_name = 'noise_data8_nfft1sec_original__LocalEOD_CutatBeginning_0.05_s_NeurDelay_0.005_s' # _burst_corr
|
|
save_name = 'noise_data10_nfft1sec_original__StimPreSaved4__mean5__CutatBeginning_0.05_s_NeurDelay_0.005_s_spikes_' # +cell#2012-07-03-ak-invivo-1'
|
|
save_name = version_final() # ]
|
|
load_name = load_folder_name('calc_RAM') + '/' + save_name
|
|
#########################################
|
|
# also die einzelzellen sind in pkls
|
|
# embed()
|
|
add = '_cell' + cell # str(f) # + '_amp_' + str(amp)
|
|
# embed()
|
|
stack_cell = load_data_susept(load_name + '_' + cell + '.pkl', load_name + '_' + cell, add=add,
|
|
load_version='csv')
|
|
try:
|
|
stack_cell = stack_cell[~stack_cell['file_name'].isin(file_names_exclude)]
|
|
except:
|
|
print('stack cell problem')
|
|
stack_cell = []
|
|
if len(stack_cell):
|
|
file_names = stack_cell.file_name.unique()
|
|
file_names2 = exclude_file_name_short(file_names)
|
|
cut_off_nr = get_cutoffs_nr(file_names2)
|
|
|
|
try:
|
|
maxs = list(map(float, cut_off_nr))
|
|
except:
|
|
embed()
|
|
file_names2 = file_names2[np.argmax(maxs)]
|
|
# embed()
|
|
try:
|
|
stack_file = stack_cell[stack_cell['file_name'] == file_names2]
|
|
except:
|
|
print('stack file something')
|
|
embed()
|
|
|
|
amps = [np.min(stack_file.amp.unique())]
|
|
amps = restrict_punits(cell, amps)
|
|
# embed()
|
|
for amp in amps:
|
|
stack_amps = stack_file[stack_file['amp'] == amp]
|
|
lengths = stack_amps.stimulus_length.unique()
|
|
try:
|
|
length_max = [np.max(lengths)]
|
|
except:
|
|
print('length thing')
|
|
embed()
|
|
|
|
for length in length_max:
|
|
trial_nr_double = stack_amps.trial_nr.unique()
|
|
trial_nr = np.max(trial_nr_double)
|
|
stack_final = stack_amps[
|
|
(stack_amps['stimulus_length'] == length) & (stack_amps.trial_nr == trial_nr)]
|
|
stack_spikes = load_data_susept(load_name + '_' + cell + '.pkl', load_name, load_version='csv',
|
|
load_type='spikes', add=add, trial_nr=trial_nr,
|
|
stimulus_length=length,
|
|
amp=amp, file_name=file_names2)
|
|
|
|
snippets = stack_final['snippets'].unique()[0]
|
|
eod_fr = stack_final.eod_fr.unique()[0]
|
|
|
|
cv = stack_final.cv.unique()[0]
|
|
fr = stack_final.fr.unique()[0]
|
|
cv = stack_final.cv.unique()[0]
|
|
fr = stack_final.fr.unique()[0]
|
|
ser = stack_final.ser.unique()[0]
|
|
cv_stim = stack_final.cv_stim.unique()[0]
|
|
fr_stim = stack_final.fr_stim.unique()[0]
|
|
if title:
|
|
#ax.set_title(
|
|
# cell[0:13] + stack_final.celltype.unique()[0] + 'S.Nr ' + str(
|
|
# snippets) + ' EODf ' + str(np.round(eod_fr)) + ' Hz ' + ' std ' + str(
|
|
# amp) + ' % ' +
|
|
# '\n $cv_{B}=$' + str(np.round(cv, 2)) + ',$f_{B}=$' + str(np.round(fr)) + 'Hz'
|
|
# + ',$cv_{S}=$' + str(np.round(cv_stim, 2)) + ',$f_{S}=$' + str(
|
|
# np.round(fr_stim)) + 'Hz'
|
|
# , fontsize=7) # + cell_type
|
|
if amp_given:
|
|
amp = amp_given
|
|
ax.text(1.1,1.05,'Recorded P-unit \n$N=%s$'%(snippets)+'\n $c=%s$' %(
|
|
amp) + '$\,\%$ ',ha = 'right', transform=ax.transAxes) #, fontsize7= + cell_type# cell[0:13] + stack_final.celltype.unique()[0] + 'S.Nr ' + str(
|
|
#ä snippets)' EODf ' + str(np.round(eod_fr)) +
|
|
#+ 'fr$_{S}$=' + str('\n'
|
|
# int(np.round(fr_stim))) + 'Hz'
|
|
#+ ' cv$_{S}$=' + str(np.round(cv_stim, 2))
|
|
# embed()
|
|
mat, new_keys = get_mat_susept(stack_final)
|
|
mat, add_nonlin_title, resize_val = rescale_colorbar_and_values(mat)
|
|
im, plot = plt_mat_susept(ax, mat)
|
|
|
|
if f == len(cells) - 1:
|
|
# ax.set_xlabel(F1_xlabel())
|
|
ax.set_xticks_delta(100)
|
|
if xlabel:
|
|
set_xlabel_arrow(ax)
|
|
else:
|
|
remove_xticks(ax)
|
|
ax.set_xlim(float(np.min(mat.index)), float(np.max(mat.index)))
|
|
ax.set_ylim(float(np.min(mat.index)), float(np.max(mat.index)))
|
|
ax.set_xlim(0, 300)
|
|
ax.set_ylim(0, 300)
|
|
ax.set_aspect('equal')
|
|
plt_triangle(ax, fr, fr_stim, eod_fr, new_keys[-1],nr = nr,eod_metrice = eod_metrice, lines=False)
|
|
##
|
|
|
|
set_clim_same_here([im], mats=[mat], lim_type='up')
|
|
if plot:
|
|
cbar, left, bottom, width, height = colorbar_outside(ax, im, fig, add=0, shrink=0.6,
|
|
width=width) # 0.02
|
|
if cbar_label:
|
|
#embed()
|
|
cbar.set_label(nonlin_title(' ['+add_nonlin_title), rotation=90, labelpad=lp)
|
|
else:
|
|
stack_spikes = []
|
|
eod_fr = []
|
|
return eod_fr, stack_spikes
|
|
|
|
|
|
def set_xlabel_arrow(ax, xpos=1.05, ypos=-0.35):
|
|
val = F1_xlabel()
|
|
set_xlabel_arrow_core(ax, val, xpos, ypos)
|
|
ax.arrow_spines('b')
|
|
|
|
|
|
def exclude_file_name_short(file_names):
|
|
file_names2 = []
|
|
for file in file_names:
|
|
if 'short' not in file:
|
|
file_names2.append(file)
|
|
return file_names2
|
|
|
|
|
|
def plt_mat_susept(ax, mat):
|
|
plot = True
|
|
if plot:
|
|
pcolor = False
|
|
if pcolor:
|
|
im = ax.pcolormesh(np.array(mat.index),
|
|
np.array(list(map(float, mat.columns))), mat,
|
|
vmin=np.nanpercentile(mat, 5),
|
|
vmax=np.nanpercentile(mat, 95), cmap='Greens',
|
|
rasterized=True
|
|
) # rasterized = True
|
|
else:
|
|
im = ax.imshow(mat, origin='lower',
|
|
extent=[float(np.min(mat.columns)),
|
|
float(np.max(mat.columns)),
|
|
float(np.min(mat.index)), float(np.max(mat.index))],
|
|
vmin=np.nanpercentile(mat, 5),
|
|
vmax=np.nanpercentile(mat, 95),
|
|
|
|
cmap='viridis', ) # 'Greens'#vmin=np.percentile(np.abs(stack_plot), 5),vmax=np.percentile(np.abs(stack_plot), 95),
|
|
return im, plot
|
|
|
|
|
|
def get_mat_susept(stack_final):
|
|
new_keys, stack_plot = convert_csv_str_to_float(stack_final)
|
|
norm_d = False
|
|
if norm_d:
|
|
mat = RAM_norm_data(stack_final['d_isf1'].iloc[0], stack_plot,
|
|
stack_final['snippets'].unique()[0])
|
|
else:
|
|
mat = RAM_norm_data(stack_final['isf'].iloc[0], stack_plot,
|
|
stack_final['snippets'].unique()[0], stack_here=stack_final) #
|
|
return mat, new_keys
|
|
|
|
|
|
def get_file_names_exclude(cell_type='p-unit'):
|
|
if 'p-unit' in cell_type: # == ['p-unit', ' P-unit']:
|
|
file_names_exclude = ['InputArr_350to400hz_30', 'InputArr_250to300hz_30', 'InputArr_150to200hz_30',
|
|
'InputArr_50to100hz_30', 'gwn25Hz10s0.3', 'InputArr_50hz_30',
|
|
'FileStimulus-file-gaussian50.0', 'gwn50Hz10.3', 'gwn50Hz10s0.3short',
|
|
'gwn50Hz50s0.3',
|
|
'FileStimulus-file-gaussian25.0', 'gwn50Hz10s0.3', ] #
|
|
else:
|
|
file_names_exclude = ['blwn125Hz10s0.3', 'gwn50Hz10s0.3', 'InputArr_350to400hz_30',
|
|
'InputArr_250to300hz_30', 'InputArr_150to200hz_30',
|
|
'InputArr_50to100hz_30', 'InputArr_50hz_30', 'FileStimulus-file-gaussian50.0',
|
|
'FileStimulus-file-gaussian25.0', 'gwn25Hz10s0.3', 'gwn50Hz10.3',
|
|
'gwn50Hz10s0.3short',
|
|
'gwn50Hz50s0.3', 'gwn25Hz10s0.3', ] #
|
|
return file_names_exclude
|
|
|
|
|
|
def get_cutoffs_nr(file_names):
|
|
cut_off_nr = []
|
|
for ff, file_name in enumerate(file_names):
|
|
if 'Hz' in file_name:
|
|
split = file_name.split('Hz')[0]
|
|
if 'wn' in split:
|
|
cut_off_nr.append(split.split('wn')[1])
|
|
else:
|
|
cut_off_nr.append(split.split('_')[1])
|
|
elif 'hz' in file_name:
|
|
split = file_name.split('hz')[0]
|
|
if 'wn' in split:
|
|
cut_off_nr.append(split.split('wn')[1])
|
|
else:
|
|
cut_off_nr.append(split.split('_')[1])
|
|
elif 'gaussian' in file_name:
|
|
cut_off_nr.append(file_name.split('gaussian')[1])
|
|
else:
|
|
cut_off_nr.append(file_name[-5::])
|
|
return cut_off_nr
|
|
|
|
|
|
def find_eod(frame_cell, EOD='EOD', sp=0):
|
|
if EOD in frame_cell:
|
|
# embed()
|
|
eods, hists, frs_calc, cont = load_spikes(frame_cell[EOD].iloc[0], frame_cell['EODf'].iloc[0])
|
|
|
|
try:
|
|
eod = eods[sp]
|
|
except:
|
|
print('eod sp thing')
|
|
embed()
|
|
sampling_rate = frame_cell.sampling.iloc[0]
|
|
ds = int(frame_cell.downsample.iloc[0])
|
|
# embed()
|
|
time_eod = np.arange(0, len(eod) / sampling_rate, 1 / sampling_rate) # [::ds]
|
|
if len(time_eod) > len(eod):
|
|
time_eod = time_eod[0:len(eod)]
|
|
elif len(time_eod) < len(eod):
|
|
eod = eod[0:len(time_eod)]
|
|
# embed()
|
|
return eod, sampling_rate, ds, time_eod
|
|
|
|
|
|
def plt_psds_in_one_squares_next(aa, add, amp, amps_defined, axds, axes, axis, axos, c, cells_plot, colors_b, eod_fr,
|
|
file_name, grid_s1, ims, load_name, save_names, stack_file, wss, xlim = [], test_clim=False,
|
|
power_type=False, permuted = False, peaks_extra=False, zorder=1, alpha=1, extra_input=False, fr=None,
|
|
title_square='', fr_diag = None, nr = 1, line_length=1 / 4, text_scalebar=False, xpos_xlabel=-0.2,
|
|
add_nonlin_title=None,amp_give = True, color='grey', log_transfer=False, axo2=None, axd2=None,
|
|
axi=None,eod_metrice = True, base_extra = False, color_same = True, iterate_var=[0, 1], normval = 1):
|
|
# if aa == 0:
|
|
if not fr_diag:
|
|
fr_diag = fr
|
|
# grid1[c, s + 1][-1, aa + plus]
|
|
|
|
eod_fr, length, stack_final, stack_final1, trial_nr = stack_preprocessing(amp, stack_file)
|
|
stack_osf = load_data_susept(load_name + '.pkl', load_name, load_version='csv',
|
|
load_type='osf', trial_nr=trial_nr,
|
|
stimulus_length=length, add=add, amp=amp, file_name=file_name)
|
|
stack_isf = load_data_susept(load_name + '.pkl', load_name, load_version='csv',
|
|
load_type='isf', trial_nr=trial_nr,
|
|
stimulus_length=length, add=add, amp=amp, file_name=file_name)
|
|
|
|
test_limits = False
|
|
norm_d = False
|
|
#embed()
|
|
|
|
new_keys, stack_plot = convert_csv_str_to_float(stack_final)
|
|
|
|
mat = RAM_norm_data(stack_final['isf'].iloc[0], stack_plot,
|
|
stack_final['snippets'].unique()[0], stack_here=stack_final) #
|
|
|
|
|
|
mat, add_nonlin_title, resize_val = rescale_colorbar_and_values(mat, add_nonlin_title=add_nonlin_title)
|
|
|
|
axis_d = axis_projection(mat, axis='')
|
|
|
|
|
|
if power_type:
|
|
axd, _, axo2 = plt_psds_all(axd2, axo2, aa, c, cells_plot, mat,
|
|
stack_final, stack_osf, test_limits, xlim,
|
|
color=color, alpha=alpha,
|
|
db='db', fr=fr, power_type=power_type, zorder=zorder, eod_fr=eod_fr,
|
|
peaks_extra=peaks_extra)
|
|
else:
|
|
###################################
|
|
# das ist jetzt die default version
|
|
# plot the diagonal
|
|
|
|
db_diag = 'db'#
|
|
xmax, xmin, diagonals_prj_l = plt_diagonal(alpha, axd2, color, db_diag, eod_fr, fr_diag, mat, peaks_extra, xlim, zorder, color_same = color_same,normval = normval)
|
|
|
|
|
|
|
|
# print('transfer function now')
|
|
|
|
plt_transferfunction(alpha, axo2, color, stack_final, eod_fr=eod_fr, normval = normval, zorder=zorder)
|
|
axd = axd2
|
|
xmax_tf = 400
|
|
if normval != 1:
|
|
axo2.set_xlim(xmin, xmax_tf / eod_fr)
|
|
else:
|
|
f = find_f(stack_final)
|
|
#f_axis = f[0:len(isf.iloc[0][0])]
|
|
axo2.set_xlim(xmin, xmax/2)
|
|
|
|
|
|
###########################################
|
|
# permutation part
|
|
# do the reshuffling
|
|
#permuted = True
|
|
if permuted:
|
|
isfs = get_isfs(stack_final, isf_name='isf')
|
|
osfs = get_isfs(stack_final, isf_name='osf')
|
|
|
|
deltat = 1 / stack_final.sampling.iloc[0]
|
|
f_range = np.arange(len(stack_final))
|
|
# ranges = range
|
|
mats_all = []
|
|
mats_all_correct = []
|
|
isfs_correct = []
|
|
isfs_all = []
|
|
for t in range(len(osfs)):
|
|
for tt in range(len(osfs)):
|
|
print('t' + str(t) + ' tt' + str(tt))
|
|
f_mat1, f_mat2, f_idx_sum, mat_all = fft_matrix(deltat, osfs[t], f_range, isfs[tt],
|
|
norm='') # stimulus,
|
|
|
|
|
|
if t != tt:
|
|
|
|
# f_mat1, f_mat2, f_idx_sum, cross_norm = fft_matrix(deltat, osfs[t], f_range, isfs[tt]) # stimulus,
|
|
mats_all.append(mat_all)
|
|
isfs_all.append(isfs[tt])
|
|
else:
|
|
mats_all_correct.append(mat_all)
|
|
isfs_correct.append(isfs[tt])
|
|
|
|
#########################
|
|
# the corrected matrices
|
|
mats_all_correct = np.array(mats_all_correct)
|
|
mats_all_correct2 = np.sum(np.array(mats_all_correct), axis=0)
|
|
# embed()
|
|
#mat_cut, mats_all_correct2 = norm_suscept(abs, isfs_correct, stack_final, mats_all_correct2, len(isfs_correct))
|
|
mats_all_correct2 = norm_suscept_whole(abs, isfs_correct, stack_final, mats_all_correct2, len(isfs_correct))
|
|
mats_all_correct2, add_nonlin_title, resize_val = rescale_colorbar_and_values(mats_all_correct2,
|
|
add_nonlin_title=add_nonlin_title)
|
|
|
|
diag, diagonals_prj_l_test = get_mat_diagonals(mats_all_correct2)
|
|
if db_diag == 'db':
|
|
diagonals_prj_l_test = 10 * np.log10(diagonals_prj_l_test) # / maxd
|
|
|
|
#nrs = np.arange(np.shape(mats_all)[1])
|
|
# combinations = list(np.array(it.combinations(nrs,20)))
|
|
# embed()
|
|
# random_numbers = [randint(1, len(mats_all)) for _ in range(20)]
|
|
# embed()
|
|
#################
|
|
# the permuted matrices
|
|
mats_all = np.array(mats_all)
|
|
lists = []
|
|
diags_permuted = []
|
|
isfs_all = np.array(isfs_all)
|
|
for i in range(300):
|
|
# print(ii)
|
|
# lists.append(i)
|
|
random_numbers = sample(range(1, len(mats_all)), 20)
|
|
mean_matrix = np.sum(mats_all[random_numbers], axis=0)
|
|
#mat_cut, mean_matrix2 = norm_suscept(abs, isfs_correct, stack_final, mean_matrix, len(isfs_correct))
|
|
#embed()
|
|
#isfs_all[random_numbers]
|
|
mean_matrix2 = norm_suscept_whole(abs, isfs_all[random_numbers], stack_final, mean_matrix, len(isfs_correct))
|
|
|
|
mean_matrix2, add_nonlin_title, resize_val = rescale_colorbar_and_values(mean_matrix2,
|
|
add_nonlin_title=add_nonlin_title)
|
|
|
|
diag, diagonals_prj_l_perm = get_mat_diagonals(np.array(mean_matrix2))
|
|
if db_diag == 'db':
|
|
diagonals_prj_l_perm = 10 * np.log10(diagonals_prj_l_perm)
|
|
diags_permuted.append(diagonals_prj_l_perm)
|
|
|
|
diags_perm = np.transpose(diags_permuted)
|
|
#embed()
|
|
#plt.close()
|
|
#axd2.plot(axis_d, diags_perm, color='lightgrey')
|
|
#plt.plot(axis_d, diagonals_prj_l_test, color='black', linewidth = 1)
|
|
#axd2.plot(axis_d, diagonals_prj_l, color='red', linewidth = 0.5)
|
|
axd2.plot(axis_d, np.percentile(diags_perm, 95, axis=1), color='darkgrey')
|
|
axd2.plot(axis_d, np.percentile(diags_perm, 5, axis=1), color='darkgrey')
|
|
|
|
#embed()
|
|
# els = [list(x) for x in it.combinations(nrs,20)]
|
|
|
|
#
|
|
#embed()
|
|
|
|
########################################
|
|
# plot input if we need it
|
|
if extra_input:
|
|
axis_d = axis_projection(mat, axis='')
|
|
xmax, xmin = get_xlim_psd(axis_d, xlim)
|
|
plt_power_trace(alpha, axd, axi, c, cells_plot, color, 'db', stack_final, stack_isf, test_limits, xmax,
|
|
eod_fr=eod_fr)
|
|
axi.set_xlim(xmin, xmax)
|
|
# grid_s = grid_s1
|
|
# axd = None
|
|
# axo = None
|
|
axos.append(axo2) # np.max(mat.columns)
|
|
axds.append(axd) # np.max(mat.columns)
|
|
|
|
#############################
|
|
ax_square = plt.subplot(grid_s1[:, 2 + aa])
|
|
if (aa == len(iterate_var) - 1) | (test_clim):
|
|
cbar_true = True
|
|
else:
|
|
cbar_true = False
|
|
#embed()
|
|
mat, test_limits, im, add_nonlin_title = plt_square_here(aa, amp, amps_defined, ax_square, c, cells_plot, ims,
|
|
stack_final1, [], perc=False, cbar_true=cbar_true, xpos=0, ypos=1.05,
|
|
color=color,fr = fr, base_extra = base_extra, eod_metrice = eod_metrice, nr = nr, amp_give = amp_give, title_square = title_square, line_length = line_length, ha='left',xpos_xlabel = xpos_xlabel , alpha=alpha, add_nonlin_title = add_nonlin_title )
|
|
|
|
ims.append(im)
|
|
|
|
if text_scalebar:
|
|
if (aa == len(iterate_var) - 1) | (test_clim):
|
|
fig = plt.gcf()
|
|
cbar, left, bottom, width, height = colorbar_outside(ax_square, im, fig, add=5, width=0.01)
|
|
# if len(cbar) > 0:
|
|
# embed()
|
|
ax_square.text(1.45, 0.25, nonlin_title(' ['+add_nonlin_title), ha='center', rotation=90, transform=ax_square.transAxes)
|
|
# cbar.set_label(nonlin_title(), rotation=90, labelpad=10)
|
|
return diagonals_prj_l,axi, eod_fr, fr, stack_final1, axds, axos, ax_square, axo2, axd2, mat, add_nonlin_title
|
|
|
|
|
|
def plt_psds_in_one_squares(aa, add, amp, amps_defined, axds, axes, axis, axos, c, cells_plot, colors_b, eod_fr,
|
|
file_name, files, fr, grid_s1, grid_s2, ims, load_name, save_names, stack_file, wss, xlim,
|
|
axo2=None, axd2=None, iterate_var=[0, 1]):
|
|
if aa == 0:
|
|
|
|
# grid1[c, s + 1][-1, aa + plus]
|
|
try:
|
|
axd2 = plt.subplot(grid_s2[1, 0]) # plt.subplot(grid_s[0])
|
|
axo2 = plt.subplot(grid_s2[0, 0])
|
|
except:
|
|
print('grid thing3')
|
|
embed()
|
|
eod_fr, length, stack_final, stack_final1, trial_nr = stack_preprocessing(amp, stack_file)
|
|
stack_osf = load_data_susept(load_name + '.pkl', load_name, load_version='csv',
|
|
load_type='osf', trial_nr=trial_nr,
|
|
stimulus_length=length, add=add, amp=amp, file_name=file_name)
|
|
|
|
test_limits = False
|
|
norm_d = False
|
|
new_keys, stack_plot = convert_csv_str_to_float(stack_final)
|
|
mat = RAM_norm_data(stack_final['isf'].iloc[0], stack_plot,
|
|
stack_final['snippets'].unique()[0], stack_here=stack_final) #
|
|
axd, axi, axo2 = plt_psds_all(axd2, axo2, aa, c, cells_plot, mat,
|
|
stack_final, stack_osf, test_limits, xlim,
|
|
color='grey',
|
|
db='db')
|
|
grid_s = grid_s1
|
|
axd = None
|
|
axo = None
|
|
else:
|
|
grid_s = grid_s2
|
|
axd = axd2
|
|
axo = axo2
|
|
ax_square, axi, eod_fr, fr, stack_final1, stack_spikes, im, axd, axo = plt_square_with_psds(aa, amp,
|
|
amps_defined,
|
|
axds,
|
|
axes, axis,
|
|
axos,
|
|
c, cells_plot,
|
|
files,
|
|
grid_s,
|
|
ims,
|
|
load_name,
|
|
stack_file,
|
|
wss,
|
|
xlim,
|
|
cbar_true=False,
|
|
axd=axd,
|
|
axo=axo,
|
|
color=
|
|
colors_b[aa],
|
|
add=add,
|
|
file_name=file_name)
|
|
axos.append(axo) # np.max(mat.columns)
|
|
axds.append(axd) # np.max(mat.columns)
|
|
test_limits = False
|
|
if test_limits:
|
|
axo.set_ylabel('Output')
|
|
axd.set_ylabel('Projection')
|
|
else:
|
|
remove_yticks(axo)
|
|
remove_yticks(axd)
|
|
if aa == 0:
|
|
axo.text(-0.45, 0, 'Output', rotation=90, transform=axo.transAxes)
|
|
axd.text(-0.45, 0, 'Projection', rotation=90, transform=axd.transAxes)
|
|
# axd.set_ylabel('Projection')
|
|
|
|
axd.yscalebar(-0.1, 0.5, 10, 'dB', va='center', ha='left')
|
|
axo.yscalebar(-0.1, 0.5, 10, 'dB', va='center', ha='left')
|
|
axd.show_spines('b')
|
|
axo.show_spines('b')
|
|
ims.append(im)
|
|
if aa == len(iterate_var) - 1:
|
|
fig = plt.gcf()
|
|
cbar, left, bottom, width, height = colorbar_outside(ax_square, im, fig, add=5, width=0.01)
|
|
# if len(cbar) > 0:
|
|
cbar.set_label(nonlin_title(), rotation=90, labelpad=10)
|
|
return axi, eod_fr, fr, stack_final1, stack_spikes, axds, axos, ax_square, axo2, axd2
|
|
|
|
|
|
def nix_load(cell, stack_final1):
|
|
###########################################
|
|
data_dir = 'cells/'
|
|
data_name = cell
|
|
name_core = load_folder_name('data') + data_dir + data_name
|
|
nix_name = name_core + '/' + data_name + '.nix' # '/'
|
|
# embed()
|
|
f = nix.File.open(nix_name, nix.FileMode.ReadOnly)
|
|
b = f.blocks[0]
|
|
try:
|
|
names_mt_gwn = stack_final1['names_mt_gwn'].unique()[0]
|
|
except:
|
|
print('names mt')
|
|
embed()
|
|
mt = b.multi_tags[names_mt_gwn]
|
|
features, id, data_between_2017_2018, mt_ids = find_feature_gwn_id(mt)
|
|
dataset, rlx_problem = load_rlxnix(nix_name)
|
|
# nix_name = '../data/cells/2012-05-15-ac-invivo-1/2012-05-15-ac-invivo-1.nix'
|
|
# dataset = rlx.Dataset(nix_name)
|
|
# hier schaue ich die verschiedenen Noise fiels an
|
|
# wir machen das hier für diese rlx only weil ich nur so an den Kontrast komme
|
|
spikes_loaded = []
|
|
if rlx_problem:
|
|
file_name, file_name_save, cut_off, file, sd = find_file_names(nix_name, mt,
|
|
names_mt_gwn)
|
|
|
|
file_extra, idx_c, base_properties, id_names = get_contrasts_over_rlx_calc_RAM(dataset)
|
|
dataset.close()
|
|
# contrasts_sort_idx = np.argsort(base_properties)
|
|
# ids_sort = np.array(ids)[contrasts_sort_idx]
|
|
# contrasts_sort = np.sort(base_properties)
|
|
try:
|
|
base_properties = base_properties.sort_values(by='c', ascending=False)
|
|
except:
|
|
print('contrast problem sorting')
|
|
embed()
|
|
|
|
# hier muss ich nochmal nach dem file sortieren!
|
|
if data_between_2017_2018 != 'all':
|
|
file_name_sorted = base_properties[base_properties.file_name == file_name]
|
|
else:
|
|
file_name_sorted = base_properties
|
|
|
|
# embed()
|
|
# embed()
|
|
if len(file_name_sorted) < 1:
|
|
print('file_name problem')
|
|
embed()
|
|
|
|
file_name_sorted = file_name_sorted.sort_values(by='start', ascending=False)[::-1]
|
|
# ich sollte auf dem level schon nach dem richtigen filename filtern!
|
|
# embed()
|
|
file_name_sorted = file_name_sorted[file_name_sorted['c_orig'] == stack_final1['c_orig'].unique()[0]]
|
|
grouped = file_name_sorted.groupby('c')
|
|
# ok es gibt wohl eine Zelle die erste, Zelle '2010-06-15-af' wo eben das nicht input arr heißt sondern gwn 300, was da passiert ist kann ich
|
|
# euch jetzt so auch nicht sagen, aber alle anderen Zellen sehen gut aus! Scheint die einzige zu sein°
|
|
data_array_names = get_data_array_names(b) # ,find_indices_to_match_contrats,get_data_array_names
|
|
if 'eod' in ''.join(data_array_names).lower():
|
|
for g, group in enumerate(grouped):
|
|
# hier erstmal alles nach dem Kontrast sortieren
|
|
sd, start, end, rep, cut_off, c_len, c_unit, c_orig, c_len, files_load, cc, id_g = open_group_gwn(group,
|
|
file_name,
|
|
cut_off,
|
|
sd,
|
|
data_between_2017_2018)
|
|
|
|
indices, ends_mt = find_indices_to_match_contrats(grouped, group, mt, id_g, mt_ids,
|
|
data_between_2017_2018)
|
|
|
|
indices = list(map(int, indices))
|
|
max_f = cut_off
|
|
if max_f == 0:
|
|
print('max f = 0')
|
|
embed()
|
|
counter_amp = 0
|
|
spikes_mats = []
|
|
smoothed = []
|
|
# embed()
|
|
# print(data_name + ' amp ' + str(c) + '% nfft ' + str(
|
|
# nfft) + mean + '\n' + ' gwn ' + str(names_mt_gwn) + ' file_name ' + str(
|
|
# file_name) + ' file ' + str(file))
|
|
|
|
spikes_mts = []
|
|
eod_interps = []
|
|
for mm, m in enumerate(indices):
|
|
first, minus, second, stimulus_length = find_first_second(b, names_mt_gwn, m, mt,
|
|
False,
|
|
mm=mm, ends_mt=ends_mt)
|
|
|
|
spikes_mt = link_arrays_spikes(b, first,
|
|
second, minus) #
|
|
spikes_loaded.append(spikes_mt * 1000)
|
|
eod_mt, sampling = link_arrays_eod(b, first,
|
|
second,
|
|
array_name='LocalEOD-1')
|
|
# hier noch das stimpresaved laden
|
|
|
|
# embed()
|
|
#########################################################################
|
|
|
|
# todo: das eventuell noch anpassen
|
|
# for hh, h in enumerate(hists_here):
|
|
# try:
|
|
# axi.hist(h, bins=100, color=colors_hist[gg], alpha=float(alpha - 0.05 * (hh)))
|
|
# except:
|
|
|
|
# embed()
|
|
|
|
# if np.max(np.concatenate(hists_here)) > 10:
|
|
# axi.set_xlim(0, 10)
|
|
|
|
# plt.show()
|
|
# embed()
|
|
# axe.plot(time_eod*1000,eod,color = 'grey', linewidth = 0.5)
|
|
|
|
|
|
|
|
else:
|
|
print('rlx thing')
|
|
return eod_mt, sampling, spikes_loaded
|
|
|
|
|
|
def burst_data(plus=1, ax3=[], xlim=[], burst_corr='_burst_corr_individual'):
|
|
plot_style()
|
|
cells = p_units_to_show(type_here='burst_didactic')
|
|
amp_desired = [5, 20]
|
|
save_names = [version_final()]
|
|
amps_desired = amp_desired
|
|
# amps_desired, cell_type_type, cells_plot, frame, cell_types = load_isis(save_names, amps_desired = amp_desired, cell_class = cell_class)
|
|
cell_type_type = 'cell_type_reclassified'
|
|
# frame = load_cv_base_frame(cells, cell_type_type=cell_type_type, redo=True)
|
|
|
|
default_settings(column=2, width=12, length=8.5) #ts=10, fs=10, ls=10,
|
|
|
|
frame, frame_spikes = load_cv_vals_susept(cells, EOD_type='synch',
|
|
names_keep=['spikes', 'gwn', 'fs', 'EODf', 'cv', 'fr', 'width_75', 'vs',
|
|
'cv_burst_corr_individual',
|
|
'fr_burst_corr_individual',
|
|
'width_75_burst_corr_individual',
|
|
'vs_burst_corr_individual', 'cell_type_reclassified',
|
|
'cell'],
|
|
path_spikes='/calc_base_data-base_frame_EOD1__overview.pkl',
|
|
frame_general=False)
|
|
frame = unify_cell_names(frame, cell_type=cell_type_type)
|
|
redo = False
|
|
# frame_load_sp = load_overview_susept(save_names[0], redo=redo, redo_class=redo)
|
|
cell_types = [' P-unit', ' Ampullary', ]
|
|
cells_exclude = []
|
|
# for cell_type_here in cell_types:
|
|
# frame_file = setting_overview_score(cell_type_here, frame_load_sp, min_amp=True, species=species)
|
|
# cells_exclude.extend(frame_file.cell.unique())
|
|
frame_load = frame # [frame['cell'].isin(cells_exclude)]
|
|
colors = colors_overview()
|
|
# axos = []
|
|
axis = []
|
|
# axds = []
|
|
tags_cell = []
|
|
|
|
grid = gridspec.GridSpec(len(cells), 1, wspace=0.1, hspace=0.21, top=0.97, left=0.105, bottom=0.085, right=0.9)
|
|
|
|
for c, cell in enumerate(cells):
|
|
print(cell)
|
|
cell_type, eod_fr, fr, frs_calc, isi, spikes, spikes_all = get_base_params(cell, cell_type_type, frame)
|
|
# embed()
|
|
# stack_final
|
|
lim_here = find_lim_here(cell, burst_corr=burst_corr)
|
|
ims = []
|
|
tags = []
|
|
add_here = '_cell' + cell # str(c)
|
|
# axo2 = None
|
|
# axd2 = None
|
|
for s, save_name in enumerate(save_names):
|
|
load_name = load_folder_name('calc_RAM') + '/' + save_name + '_' + cell
|
|
|
|
stack = load_data_susept(load_name + '.pkl', load_name, add=add_here, load_version='csv')
|
|
|
|
axes = []
|
|
|
|
try:
|
|
grid_base_stim = gridspec.GridSpecFromSubplotSpec(2, 1, grid[c], height_ratios=[3, 5],
|
|
hspace=0.3)
|
|
except:
|
|
print('cell thing3')
|
|
embed()
|
|
|
|
grid_base = gridspec.GridSpecFromSubplotSpec(2, 2, grid_base_stim[0],
|
|
hspace=0.3)
|
|
|
|
if len(stack) > 0:
|
|
|
|
files, stack = exclude_cut_filenames(cell_type, stack, fexclude=True)
|
|
|
|
amps = stack['amp'].unique()
|
|
|
|
file_name = files[0]
|
|
stack_file = stack[stack['file_name'] == files[0]]
|
|
amps = stack_file['amp'].unique()
|
|
amps_defined = amps
|
|
grid_stim = gridspec.GridSpecFromSubplotSpec(len(amps), 1, grid_base_stim[1], hspace=0.3)
|
|
|
|
trues = []
|
|
for amp in amps_defined:
|
|
if amp in amps:
|
|
trues.append(True)
|
|
# if len(trues) < len(amps):
|
|
# amps_defined = [np.min(amps), np.max(amps)]
|
|
# embed()
|
|
cells_amp = ['2017-10-25-am-invivo-1', '2010-11-26-an-invivo-1']
|
|
if cell == cells_amp:
|
|
print('cell thing')
|
|
embed()
|
|
|
|
ims = []
|
|
axds = []
|
|
axos = []
|
|
|
|
xlim_e = [0, 200]
|
|
|
|
# embed()
|
|
for aa, amp in enumerate(amps_defined):
|
|
|
|
add_save = '_cell' + str(cell) + '_amp_' + str(amp)
|
|
wss = [0.4, 0.2]
|
|
widht_ratios = [2 + wss[0], 2 + wss[1]]
|
|
|
|
colors_b = ['grey', colors[cell_type]]
|
|
|
|
alpha_min = (1 - 0.2) / len(np.unique(stack_file['amp'])) # 25
|
|
|
|
if amp in np.array(stack_file['amp']):
|
|
|
|
#############################
|
|
grid_stim_aa = gridspec.GridSpecFromSubplotSpec(2, 2, grid_stim[aa], height_ratios=[3, 5],
|
|
hspace=0.3, width_ratios=[5, 2])
|
|
ax_square = plt.subplot(grid_stim_aa[:, -1])
|
|
eod_fr, length, stack_final, stack_final1, trial_nr = stack_preprocessing(amp, stack_file)
|
|
|
|
mat, test_limits, im, add_nonlin_title = plt_square_here(aa, amp, amps_defined, ax_square, c, cells, ims,
|
|
stack_final1, [],amp_give = False, cbar_true=False)
|
|
|
|
tags.append(ax_square)
|
|
|
|
######################################################
|
|
spikes_base, isi, frs_calc, cont_spikes = load_spikes(spikes, eod_fr)
|
|
|
|
# axe = plt.subplot(grid_stim[0, 0])
|
|
|
|
# if aa == len(amps_defined) - 1:
|
|
axe = plt.subplot(grid_stim_aa[0, 0])
|
|
# embed()
|
|
plt_stimulus(eod_fr, axe, stack_final1, xlim_e, file_name=files[0])
|
|
tags.insert(1, axe)
|
|
|
|
################################
|
|
# spikes
|
|
# if aa == len(amps_defined) - 1:
|
|
ax_spikes = plt.subplot(grid_stim_aa[1, 0])
|
|
eod_fr, length, stack_final, stack_final1, trial_nr = stack_preprocessing(amp, stack_file)
|
|
# if not file_name:
|
|
# file_name = files[0]
|
|
|
|
# embed()
|
|
# stack_osf = load_data_susept(load_name + '.pkl', load_name, load_version='csv',
|
|
# load_type='osf', trial_nr=trial_nr,
|
|
# stimulus_length=length, add=add_save, amp=amp, file_name=file_name)
|
|
# eod_fr, length, stack_final, stack_final1, trial_nr = stack_preprocessing(amp, stack_file)
|
|
# todo: hier noch mehr trials laden
|
|
stack_spikes = load_data_susept(load_name + '.pkl', load_name, add=add_save, load_version='csv',
|
|
load_type='spikes',
|
|
trial_nr=trial_nr, stimulus_length=length, amp=amp,
|
|
file_name=file_name)
|
|
|
|
test = False
|
|
if test:
|
|
spikes_path = load_only_spikes_RAM(data_name=cell)
|
|
spikes_data = pd.read_pickle(spikes_path)
|
|
|
|
if aa == 2:
|
|
scale = True
|
|
else:
|
|
scale = False
|
|
# embed()
|
|
# todo: das mit dem hist will ich dohc noch haben
|
|
plt_spikes(amps_defined, aa, c, cell, cell_type, cells, colors[str(cell_type)], eod_fr, fr,
|
|
ax_spikes, stack_final1, stack_spikes, xlim, alpha=1 - alpha_min * aa, scale=scale,
|
|
)
|
|
ax_spikes.text(1, 0.5, str(amp) + '$\%$', transform=ax_spikes.transAxes, )
|
|
|
|
set_clim_same_here(ims, clims='all', same = 'same')
|
|
|
|
################################
|
|
# do the hist
|
|
alpha = 1
|
|
# grid_s = gridspec.GridSpecFromSubplotSpec(4, 1, grid_cell[0,:], height_ratios=[2.5,1.5,1.2, 2.5],
|
|
# hspace=0.25)
|
|
|
|
# axi = plt.subplot(grid_upper[:,0])
|
|
|
|
# if aa == 1:
|
|
|
|
# axi.text(0, 1.75, ' ' + cell,
|
|
# transform=axi.transAxes,
|
|
# color=colors[str(cell_type)])
|
|
|
|
################################
|
|
# isi
|
|
# embed()
|
|
if len(isi) > 0:
|
|
ax_isi = plt.subplot(grid_base[:, 1])
|
|
plt_susept_isi_base(c, cell_type, cells, colors[str(cell_type)], ax_isi, isi)
|
|
tags.insert(0, ax_isi)
|
|
# embed()
|
|
|
|
# embed()
|
|
# cell_types = frame['cell_type_info'].unique()
|
|
cell_type_type = 'cell_type_reclassified'
|
|
|
|
frame_cell = frame_load[(frame_load['cell'] == cell)]
|
|
frame_spikes_cell = frame_spikes[(frame_spikes['cell'] == cell)]
|
|
frame_cell = unify_cell_names(frame_cell, cell_type=cell_type_type)
|
|
eod, sampling_rate, ds, time_eod = find_eod(frame_spikes_cell, EOD='EOD')
|
|
|
|
eod_period, zero_crossings, zero_crossings_eod2 = find_mean_period(
|
|
eod, sampling_rate)
|
|
nrs = 6
|
|
spikes_cut, eods_cut, times_cut = cut_spikes_to_certain_lenght_in_period(time_eod, ax_isi, eod, False, nrs,
|
|
spikes_base[0], xlim_e,
|
|
zero_crossings)
|
|
|
|
axe = plt.subplot(grid_base[0, 0])
|
|
for nr in range(1):
|
|
axe.plot(times_cut[nr], eods_cut[nr])
|
|
|
|
ax_isi = plt.subplot(grid_base[1, 0])
|
|
ax_isi.eventplot(spikes_cut)
|
|
|
|
###############################
|
|
# stimulus
|
|
|
|
tags_cell.append(tags)
|
|
|
|
# fig.tag(traces, xoffs=-9)
|
|
fig = plt.gcf()
|
|
fig.tag(tags_cell, xoffs=-4.7, yoffs=1.9) # -1.5diese Offsets sind nicht intuitiv
|
|
save_visualization()
|
|
|
|
|
|
# plt_cellbody_singlecell
|
|
def plt_cellbody_eigen(grid1, frame, amps_desired, save_names, cells_plot, cell_type_type, plus=1, ax3=[], xlim=[],
|
|
burst_corr='_burst_corr_individual',
|
|
titles=['Baseline \n Susceptibility', 'Half EODf \n Susceptibility'],
|
|
peaks_extra=[False, False, False], base_extra = False):
|
|
colors = colors_overview()
|
|
# axos = []
|
|
axis = []
|
|
# axds = []
|
|
tags_cell = []
|
|
alpha_min = 0.5 # 25
|
|
|
|
lengths = [0.5, 0.25]
|
|
for c, cell in enumerate(cells_plot):
|
|
print(cell)
|
|
cell_type, eod_fr, fr, frs_calc, isi, spikes, spikes_all = get_base_params(cell, cell_type_type, frame)
|
|
# embed()
|
|
# stack_final
|
|
lim_here = find_lim_here(cell, burst_corr=burst_corr)
|
|
ims = []
|
|
tags = []
|
|
add_here = '_cell' + cell # str(c)
|
|
# axo2 = None
|
|
# axd2 = None
|
|
mats = []
|
|
xlim_e = [0, 70]
|
|
zorders = [100, 50]
|
|
for s, save_name in enumerate(save_names):
|
|
load_name = load_folder_name('calc_RAM') + '/' + save_name + '_' + cell
|
|
|
|
stack = load_data_susept(load_name + '.pkl', load_name, add=add_here, load_version='csv', cells=cells_plot)
|
|
|
|
axes = []
|
|
if len(stack) > 0:
|
|
|
|
files, stack = exclude_cut_filenames(cell_type, stack, fexclude=True)
|
|
|
|
amps = stack['amp'].unique()
|
|
|
|
file_name = files[0]
|
|
stack_here = stack[stack.trial_nr > 1]
|
|
stack_file = stack_here[stack_here['file_name'] == files[0]]
|
|
amps = stack_file['amp'].unique()
|
|
|
|
predefined_amp = True
|
|
amps_defined = True
|
|
if predefined_amp:
|
|
amps_defined = amps_desired
|
|
else:
|
|
amps_defined = amps
|
|
|
|
trues = []
|
|
for amp in amps_defined:
|
|
if amp in amps:
|
|
trues.append(True)
|
|
# if len(trues) < len(amps):
|
|
amps_defined = [np.min(amps), np.max(amps)]
|
|
nr_e = [1, 0]
|
|
|
|
# ok das ist jetzt extra für die Bespiele ausgesucht
|
|
amps_defined = [20] # [amps[nr_e[c]]]
|
|
# embed()
|
|
cells_amp = ['2017-10-25-am-invivo-1', '2010-11-26-an-invivo-1']
|
|
if cell == cells_amp:
|
|
print('cell thing')
|
|
embed()
|
|
|
|
ws = 0.5
|
|
|
|
first = 1
|
|
wr_l = [first,0, 1.3,0, 1] # 1]
|
|
ws_total = np.sum(wr_l) + len(wr_l) * ws
|
|
first_portion = first / ws_total
|
|
# embed()
|
|
wr_u = [1.15, 0.15, 1.5] # , 1]
|
|
ws_total = np.sum(wr_u) + len(wr_u) * ws
|
|
ws_total - 2 * ws - 0.15 - 1.5
|
|
|
|
grid_cell, grid_upper = grids_upper_susept_pics(c, grid1, ws=ws, hr=[1, 0.4], row=2, col=3, wr_u=wr_u)
|
|
ws = 0.3
|
|
ims = []
|
|
axds = []
|
|
axos = []
|
|
|
|
extra_input = False
|
|
several = False
|
|
axd2, axi, axo2, grid_lower, grid_s1, grid_s2 = grids_for_psds2(amps_defined, extra_input, grid_cell,
|
|
several, wr=wr_l, ws=ws, add=1)
|
|
|
|
add_nonlin_title = None
|
|
xpos_xlabel = -0.25
|
|
normval = 1
|
|
for aa, amp in enumerate(amps_defined):
|
|
|
|
alpha = find_alpha_val(aa, amps_defined)
|
|
add_save = '_cell' + str(cell) + '_amp_' + str(amp)
|
|
wss = ws_for_susept_pic()
|
|
widht_ratios = [2 + wss[0], 2 + wss[1]]
|
|
|
|
colors_b = ['grey', colors[cell_type]]
|
|
|
|
right = False
|
|
if amp in np.array(stack_file['amp']):
|
|
|
|
print(zorders[aa])
|
|
if not several:
|
|
diagonals_prj_l, axi, eod_fr, fr, stack_final1, axds, axos, ax_square, axo2, axd2, mat, add_nonlin_title = plt_psds_in_one_squares_next(
|
|
aa, add_save, amp, amps_defined, axds, axes, axis, axos, c, cells_plot, colors_b,
|
|
eod_fr, file_name, grid_lower, ims, load_name, save_names, stack_file, wss, xlim = [],
|
|
peaks_extra=peaks_extra[c], zorder=zorders[aa], alpha=alpha, extra_input=extra_input,
|
|
line_length=lengths[c], xpos_xlabel=xpos_xlabel, add_nonlin_title=add_nonlin_title,
|
|
color=colors[cell_type], axo2=axo2, axd2=axd2, axi=axi, iterate_var=amps_defined, normval = normval)
|
|
|
|
mats.append(mat)
|
|
else:
|
|
axi, eod_fr, fr, stack_final1, stack_spikes, axds, axos, ax_square, axo2, axd2 = plt_psds_in_one_squares(
|
|
aa, add, amp,
|
|
amps_defined, axds, axes,
|
|
axis, axos, c, cells_plot,
|
|
colors_b, eod_fr,
|
|
file_name, files, fr,
|
|
grid_s1, grid_s2, ims,
|
|
load_name, save_names,
|
|
stack_file, wss, xlim, axo2=axo2, axd2=axd2, iterate_var=amps_defined)
|
|
|
|
|
|
# fig = plt.gcf()
|
|
# cbar, left, bottom, width, height = colorbar_outside_right2(ax_square, fig, im,
|
|
# add=5,
|
|
# width=0.007)
|
|
# if len(cbar) > 0:
|
|
# cbar.set_label(nonlin_title(), rotation=90, labelpad=10)
|
|
|
|
if aa == 0:
|
|
if len(axi) < 1:
|
|
tags.append(axo2)
|
|
else:
|
|
tags.append(axi)
|
|
tags.append(ax_square)
|
|
#if aa == 1:
|
|
tags.append(axd2)
|
|
######################################################
|
|
spikes_base, isi, frs_calc, cont_spikes = load_spikes(spikes, eod_fr)
|
|
|
|
################################
|
|
# spikes
|
|
# if aa == len(amps_defined) - 1:
|
|
ax_spikes = plt.subplot(grid_upper[1 + aa, -2::])
|
|
eod_fr, length, stack_final, stack_final1, trial_nr = stack_preprocessing(amp, stack_file)
|
|
# if not file_name:
|
|
# file_name = files[0]
|
|
|
|
# embed()
|
|
# stack_osf = load_data_susept(load_name + '.pkl', load_name, load_version='csv',
|
|
# load_type='osf', trial_nr=trial_nr,
|
|
# stimulus_length=length, add=add_save, amp=amp, file_name=file_name)
|
|
# eod_fr, length, stack_final, stack_final1, trial_nr = stack_preprocessing(amp, stack_file)
|
|
stack_spikes = load_data_susept(load_name + '.pkl', load_name, add=add_save, load_version='csv',
|
|
load_type='spikes',
|
|
trial_nr=trial_nr, stimulus_length=length, amp=amp,
|
|
file_name=file_name)
|
|
|
|
if aa == 0:
|
|
scale = True
|
|
else:
|
|
scale = False
|
|
plt_spikes(amps_defined, aa, c, cell, cell_type, cells_plot, colors[str(cell_type)], eod_fr, fr,
|
|
ax_spikes, stack_final1, stack_spikes, xlim, alpha=alpha, scale=scale,
|
|
axi=axi, xlim_e=xlim_e, sc = 10) # 1 - alpha_min * aa
|
|
# embed()
|
|
amp_name = round_for_nice_float_strs(amp)
|
|
ax_spikes.text(1.01, 0.55, str(amp_name) + '$\%$', va='center', transform=ax_spikes.transAxes,
|
|
color=colors[str(cell_type)], alpha=alpha)
|
|
|
|
labels_for_psds(axd2, axi, axo2, extra_input,xpos_xlabel = xpos_xlabel,chi_pos = -0.1, right=right)
|
|
|
|
# set_same_ylim(axos)
|
|
# set_same_ylim(axds)
|
|
# todo: hier eventuell noch einen percent machen damit das nicht so vebrlendet
|
|
# set_clim_same_here(ims, clims='all', same = 'same', lim_type='up')
|
|
set_clim_same_here(ims, mats=mats, lim_type='up')
|
|
# set_clim_same_here(ims, clims='all', same = 'same')
|
|
################################
|
|
# do the scatter of these cells
|
|
add = ['', '_burst_corr', ]
|
|
add = ['', '_burst_corr_individual']
|
|
|
|
# embed()
|
|
if len(stack) > 0:
|
|
load_name = load_folder_name('calc_RAM') + '/' + save_names[s] + '_' + cell
|
|
if ax3 != []:
|
|
try:
|
|
frame_g = base_to_stim(load_name, frame, cell_type_type, cell_type, stack=stack)
|
|
except:
|
|
print('stim problem')
|
|
embed()
|
|
try:
|
|
ax3.scatter(frame_g['cv'], frame_g['cv_stim'], zorder=2, alpha=1,
|
|
label=cell_type, s=15,
|
|
color=colors[str(cell_type)], facecolor='white')
|
|
except:
|
|
print('scatter problem')
|
|
embed()
|
|
################################
|
|
# do the hist
|
|
alpha = 1
|
|
# grid_s = gridspec.GridSpecFromSubplotSpec(4, 1, grid_cell[0,:], height_ratios=[2.5,1.5,1.2, 2.5],
|
|
# hspace=0.25)
|
|
|
|
# axi = plt.subplot(grid_upper[:,0])
|
|
|
|
# if aa == 1:
|
|
|
|
# axi.text(0, 1.75, ' ' + cell,
|
|
# transform=axi.transAxes,
|
|
# color=colors[str(cell_type)])
|
|
|
|
################################
|
|
# isi
|
|
# embed()
|
|
if len(isi) > 0:
|
|
if aa == len(amps_defined) - 1:
|
|
|
|
grid_p = gridspec.GridSpecFromSubplotSpec(1, 2, grid_upper[:, 0], width_ratios=[1.4, 2],wspace = 0.35,
|
|
hspace=0.55)
|
|
# hspace=0.25)
|
|
|
|
ax_isi = plt.subplot(grid_p[0])
|
|
ax_p = plt.subplot(grid_p[1])
|
|
#embed()
|
|
ax_isi = base_cells_susept(ax_isi, ax_p, c, cell, cell_type, cells_plot, colors, eod_fr, frame,
|
|
isi, right, spikes_base, stack,xlim,base_extra = base_extra,texts_left = [90,0],titles = titles, peaks = True, xlim_i = [0, 4])
|
|
|
|
#ax_isi.set_title(titles[c], color=colors[str(cell_type)])
|
|
#remove_xticks(ax_p)
|
|
# axps[a].set_ylim(-70,0)
|
|
|
|
# tags.insert(0, ax_p)
|
|
tags.insert(0, ax_isi)
|
|
###############################
|
|
# stimulus
|
|
|
|
if aa == len(amps_defined) - 1:
|
|
axe = plt.subplot(grid_upper[0, -2::])
|
|
# embed()
|
|
plt_stimulus(eod_fr, axe, stack_final1, xlim_e, file_name=files[0])
|
|
tags.insert(1, axe)
|
|
tags_cell.append(tags)
|
|
# tags_cell = []
|
|
# axos[0].get_shared_y_axes().join(*axos)
|
|
# axis[0].get_shared_y_axes().join(*axis)
|
|
|
|
# set_clim_same_here('', ims, [], [], 'perc', [], [])
|
|
# same_lims_susept(axds, axis, axos, ims)
|
|
# fig.tag(traces, xoffs=-9)
|
|
#embed()
|
|
try:
|
|
|
|
tags_susept_pictures(tags_cell, xoffs=np.array([-4.7, -3.2, -4.7,-4.3,-6.3]), yoffs=np.array([1.1, 1.1, 2, 2, 2]))#, xoffs=np.array([-5.2, -4.2, -5.2, -5.7, -4.7,-5])
|
|
except:
|
|
print('tags here')
|
|
embed()
|
|
|
|
|
|
# plt_cellbody_singlecell
|
|
def plt_cellbody_singlecell(grid1, frame, amps_desired, save_names, cells_plot, cell_type_type, plus=1, ax3=[], xlim=[],
|
|
burst_corr='_burst_corr_individual', permuted = False, RAM=True,isi_delta = None,
|
|
titles=['Low CV P-unit', 'High CV P-unit', 'Ampullary cell'],
|
|
peaks_extra=[False, False, False], base_extra = False,color_same = True, fr_name = '$f_{Base}$', eod_metrice = True, tags_individual = False, xlim_p = [0,1.1], add_texts = [0.25,0], scale_val = False):
|
|
colors = colors_overview()
|
|
# axos = []
|
|
axis = []
|
|
# axds = []
|
|
tags_cell = []
|
|
alpha_min = 0.5 # 25
|
|
|
|
for c, cell in enumerate(cells_plot):
|
|
print(cell)
|
|
cell_type, eod_fr, fr, frs_calc, isi, spikes, spikes_all = get_base_params(cell, cell_type_type, frame)
|
|
# embed()
|
|
# stack_final
|
|
lim_here = find_lim_here(cell, burst_corr=burst_corr)
|
|
ims = []
|
|
tags = []
|
|
add_here = '_cell' + cell # str(c)
|
|
# axo2 = None
|
|
# axd2 = None
|
|
mats = []
|
|
zorders = [100, 50]
|
|
cvs = True
|
|
for s, save_name in enumerate(save_names):
|
|
load_name = load_folder_name('calc_RAM') + '/' + save_name + '_' + cell
|
|
|
|
stack = load_data_susept(load_name + '.pkl', load_name, add=add_here, load_version='csv', cells=cells_plot)
|
|
|
|
axes = []
|
|
if len(stack) > 0:
|
|
|
|
files, stack = exclude_cut_filenames(cell_type, stack, fexclude=True)
|
|
|
|
amps = stack['amp'].unique()
|
|
|
|
file_name = files[0]
|
|
stack_file = stack[stack['file_name'] == files[0]]
|
|
amps = stack_file['amp'].unique()
|
|
|
|
predefined_amp = True
|
|
amps_defined = True
|
|
if predefined_amp:
|
|
amps_defined = amps_desired
|
|
else:
|
|
amps_defined = amps
|
|
|
|
trues = []
|
|
for amp in amps_defined:
|
|
if amp in amps:
|
|
trues.append(True)
|
|
# if len(trues) < len(amps):
|
|
amps_defined = [np.min(amps), np.max(amps)]
|
|
# embed()
|
|
cells_amp = ['2017-10-25-am-invivo-1', '2010-11-26-an-invivo-1']
|
|
if cell == cells_amp:
|
|
print('cell thing')
|
|
embed()
|
|
wr_l = wr_l_cells_susept()
|
|
wr_u = [1.4, 0.1, 1, 1]
|
|
|
|
grid_cell, grid_upper = grids_upper_susept_pics(c, grid1, wr_u=wr_u)
|
|
|
|
ims = []
|
|
axds = []
|
|
axos = []
|
|
|
|
extra_input = False
|
|
several = False
|
|
axd2, axi, axo2, grid_lower, grid_s1, grid_s2 = grids_for_psds(amps_defined, extra_input, grid_cell,
|
|
several, wr=wr_l)
|
|
|
|
power_type = False
|
|
ax_psds = []
|
|
add_nonlin_title = None
|
|
xpos_xlabel = -0.23
|
|
diag_vals = []
|
|
for aa, amp in enumerate(amps_defined):
|
|
|
|
alpha = find_alpha_val(aa, amps_defined)
|
|
add_save = '_cell' + str(cell) + '_amp_' + str(amp)
|
|
wss = ws_for_susept_pic()
|
|
widht_ratios = [2 + wss[0], 2 + wss[1]]
|
|
|
|
colors_b = ['grey', colors[cell_type]]
|
|
|
|
right = 'middle'#,
|
|
|
|
normval = 1
|
|
if amp in np.array(stack_file['amp']):
|
|
|
|
print(zorders[aa])
|
|
#embed()
|
|
#fr
|
|
if not several:
|
|
diagonals_prj_l, axi, eod_fr, fr, stack_final1, axds, axos, ax_square, axo2, axd2, mat, add_nonlin_title = plt_psds_in_one_squares_next(
|
|
aa, add_save, amp, amps_defined, axds, axes, axis, axos, c, cells_plot, colors_b,
|
|
eod_fr, file_name, grid_lower, ims, load_name, save_names, stack_file, wss, xlim,
|
|
power_type=power_type,fr = fr, peaks_extra=peaks_extra[c], zorder=zorders[aa], alpha=alpha,
|
|
extra_input=extra_input, xpos_xlabel=xpos_xlabel, add_nonlin_title=add_nonlin_title,
|
|
color=colors[cell_type], permuted = permuted, base_extra = base_extra,color_same = color_same, axo2=axo2, axd2=axd2, axi=axi, iterate_var=amps_defined, normval = normval, eod_metrice = eod_metrice)
|
|
diag_vals.append(np.median(diagonals_prj_l))
|
|
mats.append(mat)
|
|
else:
|
|
axi, eod_fr, fr, stack_final1, stack_spikes, axds, axos, ax_square, axo2, axd2 = plt_psds_in_one_squares(
|
|
aa, add, amp,
|
|
amps_defined, axds, axes,
|
|
axis, axos, c, cells_plot,
|
|
colors_b, eod_fr,
|
|
file_name, files, fr,
|
|
grid_s1, grid_s2, ims,
|
|
load_name, save_names,
|
|
stack_file, wss, xlim, axo2=axo2, axd2=axd2, iterate_var=amps_defined)
|
|
|
|
|
|
|
|
if aa == 0:
|
|
if len(axi) < 1:
|
|
tags.append(axo2)
|
|
else:
|
|
tags.append(axi)
|
|
tags.append(ax_square)
|
|
if aa == 1:
|
|
tags.append(axd2)
|
|
|
|
#axd2.annotate(diag_vals)
|
|
######################################################
|
|
spikes_base, isi, frs_calc, cont_spikes = load_spikes(spikes, eod_fr)
|
|
|
|
################################
|
|
# spikes
|
|
# if aa == len(amps_defined) - 1:
|
|
ax_spikes = plt.subplot(grid_upper[1 + aa, -2::])
|
|
eod_fr, length, stack_final, stack_final1, trial_nr = stack_preprocessing(amp, stack_file)
|
|
# if not file_name:
|
|
# file_name = files[0]
|
|
|
|
# embed()
|
|
# stack_osf = load_data_susept(load_name + '.pkl', load_name, load_version='csv',
|
|
# load_type='osf', trial_nr=trial_nr,
|
|
# stimulus_length=length, add=add_save, amp=amp, file_name=file_name)
|
|
# eod_fr, length, stack_final, stack_final1, trial_nr = stack_preprocessing(amp, stack_file)
|
|
stack_spikes = load_data_susept(load_name + '.pkl', load_name, add=add_save, load_version='csv',
|
|
load_type='spikes',
|
|
trial_nr=trial_nr, stimulus_length=length, amp=amp,
|
|
file_name=file_name)
|
|
|
|
if (aa == 1) | (scale_val == True):
|
|
scale = True
|
|
else:
|
|
scale = False
|
|
plt_spikes(amps_defined, aa, c, cell, cell_type, cells_plot, colors[str(cell_type)], eod_fr, fr,
|
|
ax_spikes, stack_final1, stack_spikes, xlim, alpha=alpha, scale=scale,
|
|
axi=axi) # 1 - alpha_min * aa
|
|
# embed()
|
|
amp_name = round_for_nice_float_strs(amp)
|
|
ax_spikes.text(1.01, 0.55, str(int(amp_name)) + '$\%$', va='center', transform=ax_spikes.transAxes,
|
|
color=colors[str(cell_type)], alpha=alpha)
|
|
ax_psds.extend([axd2])
|
|
ax_psds.extend([axo2])
|
|
|
|
#embed()#xycoords='axes fraction',textcoords='axes fraction',, transform=axd2.transAxes
|
|
axd2.annotate('', ha='center',
|
|
xy=(1, diag_vals[1]),
|
|
xytext=(1, diag_vals[0]),
|
|
arrowprops={"arrowstyle": "<->",
|
|
"linestyle": "-",
|
|
"linewidth": 0.7,
|
|
"color":'black'},
|
|
zorder=1, annotation_clip=False)
|
|
|
|
#if peaks_extra:
|
|
# peaks_extra_fillbetween(alpha, axd2, colors[cell_type], eod_fr, fr, mats, normval = 1)
|
|
|
|
labels_for_psds(axd2, axi, axo2, extra_input, right=right, xpos_xlabel = xpos_xlabel, normval = normval)
|
|
|
|
# set_same_ylim(axos)
|
|
# set_same_ylim(axds)
|
|
set_same_ylimscale(ax_psds)
|
|
# todo: hier eventuell noch einen percent machen damit das nicht so vebrlendet
|
|
# set_clim_same_here(ims, clims='all', same = 'same', lim_type='up')
|
|
set_clim_same_here(ims, mats=mats, lim_type='up', percnr=95)
|
|
# set_clim_same_here(ims, clims='all', same = 'same')
|
|
################################
|
|
# do the scatter of these cells
|
|
add = ['', '_burst_corr', ]
|
|
add = ['', '_burst_corr_individual']
|
|
|
|
# embed()
|
|
if len(stack) > 0:
|
|
load_name = load_folder_name('calc_RAM') + '/' + save_names[s] + '_' + cell
|
|
if ax3 != []:
|
|
try:
|
|
frame_g = base_to_stim(load_name, frame, cell_type_type, cell_type, stack=stack)
|
|
except:
|
|
print('stim problem')
|
|
embed()
|
|
try:
|
|
ax3.scatter(frame_g['cv'], frame_g['cv_stim'], zorder=2, alpha=1,
|
|
label=cell_type, s=15,
|
|
color=colors[str(cell_type)], facecolor='white')
|
|
except:
|
|
print('scatter problem')
|
|
embed()
|
|
################################
|
|
# do the hist
|
|
alpha = 1
|
|
# grid_s = gridspec.GridSpecFromSubplotSpec(4, 1, grid_cell[0,:], height_ratios=[2.5,1.5,1.2, 2.5],
|
|
# hspace=0.25)
|
|
|
|
# axi = plt.subplot(grid_upper[:,0])
|
|
|
|
# if aa == 1:
|
|
|
|
# axi.text(0, 1.75, ' ' + cell,
|
|
# transform=axi.transAxes,
|
|
# color=colors[str(cell_type)])
|
|
|
|
################################
|
|
# isi
|
|
# embed()
|
|
if len(isi) > 0:
|
|
if aa == len(amps_defined) - 1:
|
|
grid_p = gridspec.GridSpecFromSubplotSpec(1, 2, grid_upper[:, 0], width_ratios=[1.4, 2],wspace = 0.38,
|
|
hspace=0.55)
|
|
# hspace=0.25)
|
|
ax_isi = plt.subplot(grid_p[0])
|
|
ax_p = plt.subplot(grid_p[1])
|
|
|
|
ax_isi = base_cells_susept(ax_isi, ax_p, c, cell, cell_type, cells_plot, colors, eod_fr, frame,
|
|
isi, right, spikes_base, stack,xlim_p,base_extra = base_extra, add_texts =add_texts, titles = titles, peaks = True, fr_name = fr_name)
|
|
|
|
if isi_delta:
|
|
ax_isi.set_xticks_delta(isi_delta)
|
|
# tags.insert(0, ax_p)
|
|
if tags_individual:
|
|
tags.insert(0, ax_p)
|
|
|
|
tags.insert(0, ax_isi)
|
|
# ax_psds.extend([ax_p])
|
|
|
|
###############################
|
|
# stimulus
|
|
xlim_e = [0, 100]
|
|
if aa == len(amps_defined) - 1:
|
|
axe = plt.subplot(grid_upper[0, -2::])
|
|
# embed()
|
|
plt_stimulus(eod_fr, axe, stack_final1, xlim_e, RAM=RAM, file_name=files[0])
|
|
if tags_individual:
|
|
tags.insert(2, axe)
|
|
else:
|
|
tags.insert(1, axe)
|
|
tags_cell.append(tags)
|
|
|
|
#plt.show()
|
|
try:
|
|
#embed()
|
|
if len(cells_plot) == 1:
|
|
if tags_individual:
|
|
tags_susept_pictures(tags_cell[0],xoffs=np.array([-4.7, -3.2,-3.2, -4.7,-6.3, -2.7,-3.2]), yoffs=np.array([3, 3, 3, 5.5, 5.5, 5.5, 5.5]))
|
|
else:
|
|
tags_susept_pictures(tags_cell, yoffs=np.array([3, 3, 5.5, 5.5, 5.5, 5.5]))
|
|
|
|
else:
|
|
tags_susept_pictures(tags_cell)
|
|
except:
|
|
print('tags here')
|
|
embed()
|
|
|
|
|
|
def base_cells_susept(ax_isi, ax_p, c, cell, cell_type, cells_plot, colors, eod_fr, frame, isi, right, spikes_base,
|
|
stack, xlim,texts_left = [0.25,0], add_texts = [0.25,0],base_extra = False, titles=['', '', '', '', ''], pos = -0.25, peaks = False, fr_name = '$f_{Base}$',xlim_i = [0, 16]):
|
|
|
|
|
|
#ax_isi.text(-0.2, 0.5, 'Baseline', rotation=90, ha='center', va='center', transform=ax_isi.transAxes)
|
|
plt_susept_isi_base(c, cell_type, cells_plot, 'grey', ax_isi, isi, xlim=xlim_i,
|
|
clip_on=True) # colors[str(cell_type)]
|
|
|
|
normval = 1
|
|
if normval != 1:
|
|
ax_p.text(1.1, -0.4, f_eod_label_core(), ha='center', va='center',
|
|
transform=ax_p.transAxes) # transform=ax_isi.transAxes,
|
|
else:
|
|
ax_p.text(1.1, -0.4, f_eod_label_core_hz(), ha='center', va='center',
|
|
transform=ax_p.transAxes) # transform=ax_isi.transAxes,
|
|
ax_p.arrow_spines('b')
|
|
ax_p = plt_susept_psd_base(cell_type, 'grey', eod_fr, ax_p, spikes_base, xlim, right = right,
|
|
add_texts = add_texts, normval = normval, texts_left = texts_left, sampling_rate = stack.sampling.iloc[0], peaks = peaks, fr_name = fr_name) # colors[str(cell_type)]
|
|
#embed()
|
|
|
|
cvs = True
|
|
#embed()
|
|
if cvs:
|
|
cv = frame[frame.cell == cell].cv.iloc[0]#str(np.round(frame[frame.cell == cell].cv.iloc[0], 2))# color=colors[str(cell_type)],
|
|
fr = frame[frame.cell == cell].fr.iloc[
|
|
0] # str(np.round(frame[frame.cell == cell].cv.iloc[0], 2))# color=colors[str(cell_type)],
|
|
|
|
if base_extra:
|
|
if titles[c] == '':
|
|
add_nrs = r'$\mathrm{f}_{base}=%.0f$\,Hz,' % fr+ r' $\mathrm{CV}_{base}=%.2f$' % cv
|
|
else:
|
|
add_nrs = r' $\mathrm{f}_{base}=%.0f$\,Hz,' % fr + r' $\mathrm{CV}_{base}=%.2f$' % cv
|
|
ax_isi.text(pos, 1.25, titles[c] + add_nrs,
|
|
transform=ax_isi.transAxes) # str(np.std(isi) / np.mean(isi))
|
|
|
|
else:
|
|
ax_isi.text(pos, 1.25, titles[c] + r' $\rm{CV}=%.2f$' %cv, transform=ax_isi.transAxes) # str(np.std(isi) / np.mean(isi))
|
|
|
|
else:
|
|
ax_isi.text(pos, 1.2, titles[c], color=colors[str(cell_type)], transform=ax_isi.transAxes)
|
|
#embed()
|
|
# remove_xticks(ax_p)
|
|
# axps[a].set_ylim(-70,0)
|
|
return ax_isi
|
|
|
|
|
|
def f_eod_label_core():
|
|
return '$f/f_{EOD}$'
|
|
|
|
def f_eod_label_core_hz():
|
|
return '$f$ [Hz]'
|
|
|
|
|
|
def wr_l_cells_susept():
|
|
wr_l = [0.5, 0, 1, 1, 0.2, 0.5]
|
|
return wr_l
|
|
|
|
|
|
def set_same_ylimscale(ax_psds):
|
|
ranges = []
|
|
for ax in ax_psds:
|
|
lim = ax.get_ylim()
|
|
lim_range = lim[1] - lim[0]
|
|
ranges.append(lim_range)
|
|
new_lim = np.max(ranges)
|
|
for ax in ax_psds:
|
|
lim = ax.get_ylim()
|
|
lim_range = lim[1] - lim[0]
|
|
add_lim = (new_lim - lim_range) / 2
|
|
ax.set_ylim(lim[0] - add_lim, lim[1] + add_lim)
|
|
# ranges.append(lim_range)
|
|
|
|
|
|
def peaks_extra_fillbetween(alpha, axd2, colors_b, eod_fr, fr, mats, normval = 1):
|
|
diags = []
|
|
|
|
if normval != 1:
|
|
normval = eod_fr
|
|
|
|
for mat in mats:
|
|
diag, diagonals_prj_l = get_mat_diagonals(np.array(mat))
|
|
diags.extend(diagonals_prj_l)
|
|
# axis_d = axis_projection(mat, axis='')
|
|
# if db == 'db':
|
|
diagonals_prj_l = 10 * np.log10(diags) # / maxd
|
|
axd2.fill_between([(fr - 5) / normval, (fr + 5) / normval],
|
|
[np.min(diagonals_prj_l), np.min(diagonals_prj_l)],
|
|
[np.max(diagonals_prj_l), np.max(diagonals_prj_l)], color='grey', alpha=0.5,
|
|
zorder=0)
|
|
|
|
|
|
def plt_susept_psd_base(cell_type, colors, eod_fr, ax_p, spikes_base, xlim,add_texts = [0,0], normval = 1, texts_left = [0.22,0], right='middle', fr_name = '$f_{Base}$', sampling_rate=40000, peaks = False):
|
|
spikes_mat, f_array, p_array = calc_psd_from_spikes(int(sampling_rate / 2), sampling_rate, spikes_base)
|
|
pp = 10 * np.log10(np.mean(p_array, axis=0)) # [0]
|
|
if normval != 1:
|
|
normval = eod_fr
|
|
|
|
if len(xlim) > 0:
|
|
if normval == 1:
|
|
xlim = [xlim[0], xlim[1] * eod_fr]
|
|
ax_p.set_xlim(xlim)
|
|
ax_p.plot(f_array / normval, pp, color=colors) # , alpha = float(alpha-0.05*s)
|
|
ax_p.show_spines('b')
|
|
# axo.yscalebar(-0.1, 0.5, 10, 'dB', va='center', ha='left')
|
|
if right == 'right':
|
|
ax_p.yscalebar(1, 0.35, 20, 'dB', va='center', ha='right')
|
|
ax_p.text(1.15, 0, 'Baseline', rotation=90, transform=ax_p.transAxes)
|
|
elif right == 'left':
|
|
ax_p.yscalebar(-0.03, 0.5, 20, 'dB', va='center', ha='left')
|
|
ax_p.text(-0.23, 0.5, 'Baseline', va='center', rotation=90, transform=ax_p.transAxes)
|
|
else:
|
|
ax_p.yscalebar(1.05, 0.35, 20, 'dB', va='center', ha='right')
|
|
#ax_p.text(-0.2, 0, 'Baseline', rotation=90, transform=ax_p.transAxes)
|
|
if peaks:
|
|
fr = 1 / np.mean(np.diff(np.array(spikes_base[0]) / 1000))
|
|
plt_peaks_several([fr_name, '$f_{EOD}$'], [fr/normval, eod_fr/normval], [pp],
|
|
0,
|
|
ax_p, pp, ['grey', 'grey'], f_array / normval, add_log=2.5, text_extra=True,
|
|
exact=False,add_texts = add_texts, texts_left = texts_left, ms=14, perc=0.08, log='log', clip_on=False) # True
|
|
|
|
#embed()
|
|
return ax_p
|
|
|
|
|
|
def round_for_nice_float_strs(amp):
|
|
if amp % 1 > 0:
|
|
amp_name = np.round(amp, 1)
|
|
else:
|
|
amp_name = int(amp)
|
|
return amp_name
|
|
|
|
|
|
def ws_for_susept_pic():
|
|
wss = [0.4, 0.2]
|
|
return wss
|
|
|
|
|
|
def grids_upper_susept_pics(c, grid1, row=3, hr=[1, 0.4, 0.4], hs=0.65, ws=0.08, col=4, wr_u=[1, 2, 2]):
|
|
try:
|
|
grid_cell = gridspec.GridSpecFromSubplotSpec(2, 1, grid1[c], height_ratios=[3, 5],
|
|
hspace=hs) # 0.15
|
|
except:
|
|
print('cell thing3')
|
|
embed()
|
|
grid_upper = gridspec.GridSpecFromSubplotSpec(row, col, grid_cell[0], width_ratios=wr_u,
|
|
hspace=0.0, wspace=ws, height_ratios=hr) # hspace=0.1,wspace=0.39,
|
|
|
|
#embed()
|
|
return grid_cell, grid_upper
|
|
|
|
|
|
def tags_susept_pictures(tags_cell, xoffs=np.array([-4.7, -3.2, -4.7,-6.3, -2.7,-3.2]), yoffs=np.array([1.1, 1.1, 2, 2, 2, 2])):
|
|
fig = plt.gcf()
|
|
# ok das finde ich jetzt gut dass ich da eine Liste eingeben kann
|
|
tag2(fig, tags_cell, xoffs=xoffs, yoffs=yoffs) # -1.5diese Offsets sind nicht intuitiv
|
|
|
|
|
|
def grids_for_psds2(amps_defined, extra_input, grid_cell, several, ws=0.3, wss=[], add=0, widht_ratios=[],
|
|
wr=[1, 0.2, 1, 1]):
|
|
axd2 = []
|
|
axi = []
|
|
axo2 = []
|
|
grid_s1 = []
|
|
grid_s2 = []
|
|
if several:
|
|
grid_lower = gridspec.GridSpecFromSubplotSpec(1, len(amps_defined) + 1, grid_cell[1], hspace=0.1,
|
|
wspace=0.2, width_ratios=widht_ratios)
|
|
grid_s1 = gridspec.GridSpecFromSubplotSpec(2, 2, grid_lower[0],
|
|
hspace=0.1, wspace=wss[0],
|
|
width_ratios=[0.8,
|
|
1]) # height_ratios=[1.5, 1.5, 5],
|
|
|
|
# plot the same also to the next plot
|
|
grid_s2 = gridspec.GridSpecFromSubplotSpec(2, 2, grid_lower[1],
|
|
hspace=0.1, wspace=wss[1],
|
|
width_ratios=[0.8,
|
|
1]) # height_ratios=[1.5, 1.5, 5],
|
|
|
|
else:
|
|
if extra_input:
|
|
row_nrs = 3
|
|
else:
|
|
row_nrs = 2
|
|
|
|
# embed()
|
|
try:
|
|
grid_lower = gridspec.GridSpecFromSubplotSpec(row_nrs, len(amps_defined) +3 + add, grid_cell[1],
|
|
hspace=0.1,
|
|
wspace=ws,
|
|
width_ratios=wr) # , width_ratios=widht_ratios
|
|
except:
|
|
print('grid bursts0')
|
|
embed()
|
|
# try:
|
|
# embed()
|
|
|
|
if extra_input:
|
|
axi = plt.subplot(grid_lower[0, 0])
|
|
axd2 = plt.subplot(grid_lower[2, 0]) # plt.subplot(grid_s[0])
|
|
axo2 = plt.subplot(grid_lower[1, 0])
|
|
else:
|
|
axd2 = plt.subplot(grid_lower[1, 0]) # plt.subplot(grid_s[0])
|
|
axo2 = plt.subplot(grid_lower[0, 0])
|
|
axi = []
|
|
axd2 = plt.subplot(grid_lower[:, -1]) # plt.subplot(grid_s[0])
|
|
axo2 = plt.subplot(grid_lower[:, 0])
|
|
axi = []
|
|
# embed()
|
|
# except:
|
|
# print('grid thing4')
|
|
# embed()
|
|
return axd2, axi, axo2, grid_lower, grid_s1, grid_s2
|
|
|
|
|
|
def grids_for_psds(amps_defined, extra_input, grid_cell, several, ws=0.25, wss=[], add=0, widht_ratios=[],
|
|
wr=[1, 0.2, 1, 1]):
|
|
axd2 = []
|
|
axi = []
|
|
axo2 = []
|
|
grid_s1 = []
|
|
grid_s2 = []
|
|
if several:
|
|
grid_lower = gridspec.GridSpecFromSubplotSpec(1, len(amps_defined) + 1, grid_cell[1], hspace=0.1,
|
|
wspace=0.2, width_ratios=widht_ratios)
|
|
grid_s1 = gridspec.GridSpecFromSubplotSpec(2, 2, grid_lower[0],
|
|
hspace=0.1, wspace=wss[0],
|
|
width_ratios=[0.8,
|
|
1]) # height_ratios=[1.5, 1.5, 5],
|
|
|
|
# plot the same also to the next plot
|
|
grid_s2 = gridspec.GridSpecFromSubplotSpec(2, 2, grid_lower[1],
|
|
hspace=0.1, wspace=wss[1],
|
|
width_ratios=[0.8,
|
|
1]) # height_ratios=[1.5, 1.5, 5],
|
|
|
|
else:
|
|
if extra_input:
|
|
row_nrs = 3
|
|
else:
|
|
row_nrs = 2
|
|
|
|
# embed()
|
|
try:
|
|
grid_lower = gridspec.GridSpecFromSubplotSpec(row_nrs, len(amps_defined) + 4 + add, grid_cell[1],
|
|
hspace=0.1,
|
|
wspace=ws,
|
|
width_ratios=wr) # , width_ratios=widht_ratios
|
|
except:
|
|
print('grid bursts')
|
|
embed()
|
|
# try:
|
|
# embed()
|
|
|
|
if extra_input:
|
|
axi = plt.subplot(grid_lower[0, 0])
|
|
axd2 = plt.subplot(grid_lower[2, 0]) # plt.subplot(grid_s[0])
|
|
axo2 = plt.subplot(grid_lower[1, 0])
|
|
else:
|
|
axd2 = plt.subplot(grid_lower[:, -1]) # plt.subplot(grid_s[0])
|
|
axo2 = plt.subplot(grid_lower[:, 0])
|
|
axi = []
|
|
# embed()
|
|
return axd2, axi, axo2, grid_lower, grid_s1, grid_s2
|
|
|
|
|
|
def labels_for_psds(axd2, axi, axo2, extra_input, right='middle', chi_pos = -0.3, add_nonlin_title = '',normval = 1, xpos_xlabel = -0.23, power_label='$|\chi_1|$', log_transfer = False):
|
|
####################################
|
|
test_limits = False
|
|
if test_limits:
|
|
axo2.set_ylabel(power_label)
|
|
axd2.set_ylabel('Projection')
|
|
else:
|
|
|
|
# if aa == 0:
|
|
if right == 'right':
|
|
remove_yticks(axo2)
|
|
remove_yticks(axd2)
|
|
axo2.text(1.15, 0.5, power_label, rotation=90, va='center', transform=axo2.transAxes)
|
|
axd2.text(1.15, 0.5, 'Proj.', rotation=90, va='center', transform=axd2.transAxes)
|
|
axd2.yscalebar(1, 0.5, 10, 'dB', va='center', ha='right')
|
|
axo2.yscalebar(1, 0.5, 10, trasnfer_ylabel(), va='center', ha='right')
|
|
axd2.show_spines('b')#/mV
|
|
axo2.show_spines('b')
|
|
if extra_input:
|
|
axi.text(1.15, 0.5, 'Input', rotation=90, va='center', transform=axi.transAxes)
|
|
# axd.set_ylabel('Projection')
|
|
axi.yscalebar(1, 0.5, 10, 'dB', va='center', ha='right')
|
|
axi.show_spines('b')
|
|
elif right == 'left':
|
|
remove_yticks(axo2)
|
|
remove_yticks(axd2)
|
|
axo2.text(-0.23, 0.5, power_label, rotation=90, va='center', transform=axo2.transAxes)
|
|
axd2.text(-0.23, 0.5, 'Proj.', rotation=90, va='center', transform=axd2.transAxes)
|
|
axd2.text(-0.23, 0.5, 'Proj.', rotation=90, va='center', transform=axd2.transAxes)
|
|
axd2.yscalebar(-0.03, 0.5, 10, 'dB', va='center', ha='left')
|
|
axo2.yscalebar(-0.03, 0.5, 10, 'dB', va='center', ha='left')
|
|
axd2.show_spines('b')
|
|
axo2.show_spines('b')
|
|
if extra_input:
|
|
axi.text(-0.23, 0.5, 'Input', rotation=90, va='center', transform=axi.transAxes)
|
|
# axd.set_ylabel('Projection')
|
|
axi.yscalebar(-0.03, 0.5, 10, 'dB', va='center', ha='left')
|
|
axi.show_spines('b')
|
|
else:
|
|
|
|
#nonlin_title(add_nonlin_title)
|
|
#overline
|
|
axd2.text(chi_pos, 0.5, r'$|\bar{\chi_2}|$', rotation=90, va='center', transform=axd2.transAxes)
|
|
axd2.yscalebar(1.1, 0.5, 10, 'dB', va='center', ha='right')
|
|
axd2.show_spines('b')#-0.23
|
|
if normval != 1:
|
|
axd2.text(1.05, xpos_xlabel, diagonal_xlabel_nothz(), ha='center', va='center',
|
|
transform=axd2.transAxes)
|
|
else:
|
|
axd2.text(1.05, xpos_xlabel, diagonal_xlabel(), ha='center', va='center',
|
|
transform=axd2.transAxes)
|
|
axd2.arrow_spines('b')
|
|
|
|
|
|
remove_yticks(axd2)
|
|
if log_transfer == True:
|
|
axo2.text(-0.13, 0.5, power_label, rotation=90, va='center', transform=axo2.transAxes)
|
|
axo2.yscalebar(1, 0.5, 10, trasnfer_ylabel(), va='center', ha='right')
|
|
axo2.show_spines('b')
|
|
remove_yticks(axo2)
|
|
else:
|
|
axo2.set_ylabel(trasnfer_ylabel())
|
|
axo2.show_spines('lb')
|
|
if normval != 1:
|
|
axo2.text(1.05, xpos_xlabel, tranfer_xlabel(), ha='center', va='center',
|
|
transform=axo2.transAxes)
|
|
else:
|
|
axo2.text(1.05, xpos_xlabel, tranfer_xlabel_hz(), ha='center', va='center',
|
|
transform=axo2.transAxes)
|
|
axo2.arrow_spines('b')
|
|
|
|
|
|
# set_xlabel_arrow
|
|
if extra_input:
|
|
axi.text(1.15, 0.5, 'Input', rotation=90, va='center', transform=axi.transAxes)
|
|
# axd.set_ylabel('Projection')
|
|
axi.yscalebar(1, 0.5, 10, 'dB', va='center', ha='right')
|
|
axi.show_spines('b')
|
|
|
|
|
|
def trasnfer_ylabel():
|
|
return '$|\mathcal{\chi}_{1}|\,$[Hz]'#'$|\chi_{1}|$'#r'$|\mathcal{X}_{1}|$\,[Hz]'#' '
|
|
|
|
|
|
def get_base_params(cell, cell_type_type, frame):
|
|
try:
|
|
frame_cell = frame[(frame['cell'] == cell)]
|
|
except:
|
|
print('frame thing')
|
|
embed()
|
|
frame_cell = unify_cell_names(frame_cell, cell_type=cell_type_type)
|
|
try:
|
|
cell_type = frame_cell[cell_type_type].iloc[0]
|
|
except:
|
|
print('cell type prob')
|
|
embed()
|
|
spikes = frame_cell.spikes.iloc[0]
|
|
# eod_fr = frame_cell.EODf.iloc[0]
|
|
spikes_all = []
|
|
isi = []
|
|
frs_calc = []
|
|
fr = frame_cell.fr.iloc[0]
|
|
cv = frame_cell.cv.iloc[0]
|
|
eod_fr = frame_cell.EODf.iloc[0]
|
|
return cell_type, eod_fr, fr, frs_calc, isi, spikes, spikes_all
|
|
|
|
|
|
def plt_susept_isi_base(c, cell_type, cells_plot, color, ax_isi, isi, delta=None, ypos=-0.4, xlim=[0, 13],
|
|
clip_on=False):
|
|
ax_isi.show_spines('b')#xmin=0, xmax=xmax[c_here], alpha=0.5, step=0
|
|
#embed()
|
|
kernel_histogram(ax_isi, color, isi[0], extend=False, clip_on=clip_on,step=0.01)
|
|
if len(xlim) > 0:
|
|
ax_isi.set_xlim(xlim)
|
|
# if c != len(cells_plot) - 1:
|
|
# remove_xticks(ax_isi)
|
|
# else:
|
|
ax_isi.text(1.1, ypos, isi_label_core(), transform=ax_isi.transAxes, ha='center', va='center', ) # ($I_{spikes}/I_{EODf}$)
|
|
else:
|
|
ax_isi.text(1.1, ypos, isi_label_core(), transform=ax_isi.transAxes, ha='center', va='center', ) # ($I_{spikes}/I_{EODf}$)
|
|
|
|
if delta:
|
|
ax_isi.set_xticks_delta(delta)
|
|
ax_isi.arrow_spines('b')
|
|
remove_yticks(ax_isi)
|
|
|
|
|
|
def isi_label_core():
|
|
return '$1/f_{EOD}$'
|
|
|
|
|
|
def kernel_histogram(ax_isi, color, isi, norm='no', clip_on=False, step=0.1, label='', orientation='horizontal',
|
|
alpha=1, xmax_perc=False, xmin='no', xmin_perc=False, perc_min=0.01, xmax='no', div=30,
|
|
height_val=1, extend=True):
|
|
# embed()
|
|
if len(isi) > 1:
|
|
isi = np.array(list(map(float, np.array(isi))))
|
|
try:
|
|
isi = isi[~np.isnan(isi)]
|
|
isi = isi[~np.isinf(isi)]
|
|
except:
|
|
print('any problem')
|
|
embed()
|
|
# if step == 0:
|
|
# step = (np.max(isi) - np.min(isi)) / div
|
|
try:
|
|
if step == 0:
|
|
kernel = gaussian_kde(isi)
|
|
else:
|
|
kernel = gaussian_kde(isi, step / np.std(isi, ddof=1))
|
|
|
|
except:
|
|
print('kernel thing')
|
|
embed()
|
|
isi_sorted = np.sort(isi)
|
|
|
|
# embed()
|
|
if xmin == 'no':
|
|
if xmin_perc:
|
|
# das mit dem percentile ist keine gute idee weil die verteilung kann ja im mittel durchaus hohe werte haben
|
|
xmin = np.min(isi_sorted) - np.percentile(isi_sorted, perc_min)
|
|
else:
|
|
xmin = np.min(isi_sorted) * 0.8
|
|
|
|
if xmax == 'no':
|
|
if xmin_perc:
|
|
xmax = np.max(isi_sorted) + np.percentile(isi_sorted, perc_min)
|
|
else:
|
|
xmax = np.max(isi_sorted) * 1.1
|
|
|
|
# create points between the min and max
|
|
# embed()
|
|
try:
|
|
if extend:
|
|
x = np.linspace(xmin, xmax, 1000)
|
|
else:
|
|
x = isi_sorted
|
|
except:
|
|
print('extend thing')
|
|
embed()
|
|
# kde_y = kde(x)
|
|
kde = kernel(x)
|
|
if norm == 'density':
|
|
kde = kde / np.sum(kde)
|
|
elif norm == 'maximum':
|
|
kde = height_val * kde / np.max(kde)
|
|
if orientation == 'horizontal': # isi_sorted
|
|
ax_isi.plot(x, kde, color=color, label=label, alpha=alpha, clip_on=clip_on) # filllbetween
|
|
ax_isi.fill_between(x, kde, color=color, alpha=alpha, clip_on=clip_on) # filllbetween
|
|
else:
|
|
ax_isi.plot(kde, x, color=color, label=label, alpha=alpha, clip_on=clip_on) # ,clip_on = Falsefilllbetween
|
|
ax_isi.fill_betweenx(np.sort(x), kde[np.argsort(x)], color=color, alpha=alpha,
|
|
clip_on=clip_on) # filllbetween,clip_on = False
|
|
# embed()
|
|
test = False
|
|
if test:
|
|
test_isi()
|
|
|
|
def plt_square_with_psds(aa, amp, amps_defined, axds, axes, axis, axos, c, cells_plot, files, grid_s, ims, load_name,
|
|
stack_file, wss, xlim, cbar_true=True, axd=None, axo=None, square_plot=True, color='black',
|
|
add='', file_name=None):
|
|
eod_fr, length, stack_final, stack_final1, trial_nr = stack_preprocessing(amp, stack_file)
|
|
if not file_name:
|
|
file_name = files[0]
|
|
|
|
stack_osf = load_data_susept(load_name + '.pkl', load_name, load_version='csv',
|
|
load_type='osf', trial_nr=trial_nr,
|
|
stimulus_length=length, add=add, amp=amp, file_name=file_name)
|
|
# eod_fr, length, stack_final, stack_final1, trial_nr = stack_preprocessing(amp, stack_file)
|
|
stack_spikes = load_data_susept(load_name + '.pkl', load_name, add=add, load_version='csv', load_type='spikes',
|
|
trial_nr=trial_nr, stimulus_length=length, amp=amp, file_name=file_name)
|
|
sampling = stack_final.sampling.iloc[0]
|
|
extra = False
|
|
if extra:
|
|
stack_isf = load_data_susept(load_name + '.pkl', load_name, load_version='csv',
|
|
load_type='isf', trial_nr=trial_nr,
|
|
stimulus_length=length, add=add, amp=amp, file_name=file_name)
|
|
|
|
try:
|
|
stack_stim = load_data_susept(load_name + '.pkl', load_name, add=add + '_sampling_' + str(sampling),
|
|
load_version='csv', load_type='stimulus',
|
|
trial_nr=trial_nr, stimulus_length=length, redo=True, amp=amp,
|
|
file_name=file_name)
|
|
except:
|
|
simulus_there = False
|
|
|
|
#############################
|
|
# load both amps for common amp db limit
|
|
maxo, maxi, maxd = get_max_several_amp_squares(add, amp, amps_defined, files, load_name, stack_file,
|
|
stack_final)
|
|
|
|
# embed()
|
|
if aa == 0:
|
|
ws = wss[0]
|
|
else:
|
|
ws = wss[1]
|
|
try:
|
|
|
|
# axs = plt.subplot(grid1[c, s + 1])
|
|
ax_square = plt.subplot(grid_s[:, 1])
|
|
except:
|
|
print('grid problem4')
|
|
embed()
|
|
if square_plot:
|
|
mat, test_limits, im, add_nonlin_title = plt_square_here(aa, amp, amps_defined, ax_square, c, cells_plot, ims,
|
|
stack_final1, [], cbar_true=cbar_true)
|
|
|
|
############################################
|
|
# psd part
|
|
fr = stack_final1.fr.unique()[0]
|
|
fr_stim = stack_final1.fr_stim.unique()[0]
|
|
if not axd:
|
|
try:
|
|
axd = plt.subplot(grid_s[1, 0])
|
|
except:
|
|
print('axd thing')
|
|
embed()
|
|
if not axo:
|
|
axo = plt.subplot(grid_s[0, 0])
|
|
axd, axi, axo = plt_psds_all(axd, axo, aa, c, cells_plot, mat,
|
|
stack_final, stack_osf, test_limits, xlim, color=color,
|
|
db='db')
|
|
axes.append(axi) # np.min(mat.columns)
|
|
axes.append(axo) # np.max(mat.columns)
|
|
# axds.append(axd) # np.max(mat.columns)
|
|
axis.append(axi)
|
|
# axos.append(axo) #
|
|
return ax_square, axi, eod_fr, fr, stack_final1, stack_spikes, im, axd, axo
|
|
|
|
|
|
def stack_preprocessing(amp, stack_file, snippets=20):
|
|
stack_amp2 = stack_file[stack_file['snippets'] == snippets]
|
|
if len(stack_amp2) < 1:
|
|
stack_amp2 = stack_file[stack_file['snippets'] == 20]
|
|
if len(stack_amp2) < 1:
|
|
stack_amp2 = stack_file[stack_file['snippets'] == 10]
|
|
if len(stack_amp2) < 1:
|
|
stack_amp2 = stack_file[stack_file['snippets'] == 9]
|
|
stack_amp = stack_amp2[stack_amp2['amp'] == amp]
|
|
lengths = stack_file['stimulus_length'].unique()
|
|
length = np.max(lengths)
|
|
stack_final = stack_amp[stack_amp['stimulus_length'] == length]
|
|
# todo: hier 20 Trials auch einbauen
|
|
trial_nr_double = stack_final.trial_nr.unique()
|
|
try:
|
|
eod_fr = stack_final.eod_fr.iloc[0]
|
|
except:
|
|
print('trial thing')
|
|
embed()
|
|
# ok das ist glaube ich ein Anzeichen von einem Fehler
|
|
if len(trial_nr_double) > 1:
|
|
print('trial_nr_double1')
|
|
embed()
|
|
# ich hatte mal einen save fehler deswegen habe ich manche doppelt also einfach das letzte nehmen nehme ich an
|
|
try:
|
|
trial_nr = np.max(trial_nr_double)
|
|
except:
|
|
print('trial something')
|
|
embed()
|
|
|
|
try:
|
|
stack_final1 = stack_final[stack_final.trial_nr == trial_nr]
|
|
except:
|
|
print('stack_final1 problem')
|
|
embed()
|
|
return eod_fr, length, stack_final, stack_final1, trial_nr
|
|
|
|
|
|
def get_max_several_amp_squares(add, amp, amps_defined, files, load_name, stack_file, stack_final):
|
|
maxs_i = []
|
|
maxs_o = []
|
|
maxs_d = []
|
|
for amp_here in amps_defined:
|
|
|
|
stack_amp = stack_file[stack_file['amp'] == amp]
|
|
lengths = stack_file['stimulus_length'].unique()
|
|
length = np.max(lengths)
|
|
stack_final = stack_amp[stack_amp['stimulus_length'] == length]
|
|
trial_nr_double = stack_final.trial_nr.unique()
|
|
|
|
# stack = load_data_susept(load_name + '.pkl', load_name, load_version='csv',
|
|
# load_type='mat')
|
|
new_keys, stack_plot = convert_csv_str_to_float(stack_final)
|
|
norm_d = False # todo: das insowas wie ein übergeordnetes Dict machen
|
|
if norm_d:
|
|
mat = RAM_norm_data(stack_final['d_isf1'].iloc[0], stack_plot, stack_final['snippets'].unique()[0])
|
|
else:
|
|
mat = RAM_norm_data(stack_final['isf'].iloc[0], stack_plot,
|
|
stack_final['snippets'].unique()[0], stack_here=stack_final) #
|
|
|
|
diag, diagonals_prj_l = get_mat_diagonals(np.array(mat))
|
|
maxs_d.append(np.max(diagonals_prj_l))
|
|
|
|
trial_nr = np.max(trial_nr_double)
|
|
# add = '_cell' + str(c) + '_amp_' + str(amp)
|
|
isf = load_data_susept(load_name + '.pkl', load_name, load_version='csv',
|
|
load_type='isf', trial_nr=trial_nr,
|
|
stimulus_length=length, add=add, amp=amp_here, file_name=files[0])
|
|
f = find_f(stack_final)
|
|
f_max = stack_final.index[-1] * 2
|
|
f_restict = f[f < f_max]
|
|
maxs_i.append(np.max(isf.iloc[0:len(f_restict)]) ** 2)
|
|
osf = load_data_susept(load_name + '.pkl', load_name, load_version='csv',
|
|
load_type='osf', add=add, trial_nr=trial_nr,
|
|
stimulus_length=length, amp=amp_here, file_name=files[0])
|
|
#
|
|
f = find_f(stack_final)
|
|
f_max = stack_final.index[-1] * 2
|
|
f_restict = f[f < f_max]
|
|
maxs_o.append(np.max(osf.iloc[0:len(f_restict)]) ** 2)
|
|
maxo = np.max(maxs_o)
|
|
maxi = np.max(maxs_i)
|
|
maxd = np.max(maxs_d)
|
|
# embed()
|
|
return maxo, maxi, maxd
|
|
|
|
|
|
def plt_square_here(aa, amp, amps_defined, ax_square, c, cells_plot, ims, stack_final1, xlim, line_length = 1 / 4, alpha=1, cbar_true=True,
|
|
perc=True, amp_give = True, base_extra = False, eod_metrice = True, ha='right',nr = 3, fr = None, title_square = '', xpos_xlabel =-0.2, ypos=0.05, xpos=0.1, color='white', add_nonlin_title = None):
|
|
if aa == len(amps_defined) - 1:
|
|
cbar_do = False
|
|
else:
|
|
cbar_do = False
|
|
# print('cbar'+str(cbar_do))
|
|
print(add_nonlin_title)
|
|
#embed()
|
|
cbar, mat, im, add_nonlin_title = square_func2([ax_square], stack_final1, eod_metrice = eod_metrice, fr = fr, nr = nr, line_length = line_length, cbar_do=cbar_do, perc=perc, add_nonlin_title= add_nonlin_title)
|
|
ims.append(im)
|
|
if xlim:
|
|
ax_square.set_xlim(xlim)
|
|
ax_square.set_ylim(xlim)
|
|
else:
|
|
#print(np.max(mat.columns))
|
|
ax_square.set_xlim(0, np.max(mat.columns))
|
|
ax_square.set_ylim(0, np.max(mat.columns))
|
|
ax_square.set_title('')
|
|
# if aa == len(amps_defined)-1:
|
|
test_limits = False
|
|
if test_limits:
|
|
fig = plt.gcf()
|
|
cbar, left, bottom, width, height = colorbar_outside(ax_square, im, fig, add=5, width=0.01)
|
|
# if len(cbar) > 0:
|
|
# cbar.set_label(nonlin_title(), rotation=90, labelpad=10)#270
|
|
ax_square.text(1.05, 0.5, nonlin_title(), ha='center', rotation=90)
|
|
else:
|
|
if cbar_true:
|
|
#if aa == len(amps_defined) - 1:
|
|
fig = plt.gcf()
|
|
cbar, left, bottom, width, height = colorbar_outside(ax_square, im, fig, add=5, width=0.007)
|
|
# if len(cbar) > 0:
|
|
cbar.set_label(nonlin_title(' ['+add_nonlin_title), rotation=90, labelpad=3)
|
|
|
|
amp_name = round_for_nice_float_strs(amp)
|
|
cvs = True
|
|
if amp_give:
|
|
amp_val = '$c=%s$' %(int(amp_name)) + '$\,\%$, '
|
|
else:
|
|
amp_val = ''
|
|
|
|
if cvs:#$\mathcal{X}_{2}
|
|
|
|
if base_extra:
|
|
ax_square.text(xpos, ypos, title_square+amp_val + r'$\mathrm{CV}_{stim}=%.2f$' %(stack_final1.cv_stim.iloc[0]), ha=ha,
|
|
transform=ax_square.transAxes, color=color,
|
|
alpha=alpha) # (np.round(stack_final1.cv_stim.iloc[0], 2))'white' files[0] + ' l ' + str(length)chi_name()+
|
|
|
|
else:
|
|
ax_square.text(xpos, ypos, title_square+amp_val + r'$\rm{CV}=%.2f$' %(stack_final1.cv_stim.iloc[0]), ha=ha,
|
|
transform=ax_square.transAxes, color=color,
|
|
alpha=alpha) # (np.round(stack_final1.cv_stim.iloc[0], 2))'white' files[0] + ' l ' + str(length)chi_name()+
|
|
|
|
else:
|
|
ax_square.text(xpos, ypos, title_square+chi_name()+'$($' + str(int(amp_name)) + '$\%$)', ha=ha,
|
|
transform=ax_square.transAxes, color=color,
|
|
alpha=alpha) # 'white' files[0] + ' l ' + str(length)
|
|
#ax_square.text(-0.1, -0.1, '0', ha='center', va='center',
|
|
# transform=ax_square.transAxes)
|
|
ax_square.set_xticks_delta(100)
|
|
ax_square.set_yticks_delta(100)
|
|
if c != len(cells_plot) - 1:
|
|
ax_square.set_xlabel('')
|
|
# remove_xticks(ax_square)
|
|
else:
|
|
ax_square.set_xlabel(F1_xlabel())
|
|
|
|
ax_square.text(1.05, xpos_xlabel, F1_xlabel(), ha='center', va='center',
|
|
transform=ax_square.transAxes)
|
|
|
|
if aa != 0:
|
|
remove_yticks(ax_square)
|
|
ax_square.set_ylabel('')
|
|
else:
|
|
set_ylabel_arrow(ax_square)
|
|
ax_square.arrow_spines('lb')
|
|
|
|
ax_square.set_xlabel('')
|
|
ax_square.set_ylabel('')
|
|
return mat, test_limits, im, add_nonlin_title
|
|
|
|
|
|
def set_ylabel_arrow(ax_square, xpos=-0.15, ypos=0.97):
|
|
ax_square.text(xpos, ypos, F2_xlabel(), ha='center', va='center',
|
|
transform=ax_square.transAxes, rotation=90)
|
|
ax_square.arrow_spines('l')
|
|
|
|
|
|
def F2_xlabel():
|
|
return '$f_{2}$\,[Hz]'
|
|
|
|
|
|
def nonlin_title(add_nonlin_title=''):
|
|
#embed(
|
|
return chi_name() + add_nonlin_title + 'Hz]' # \frac{Hz}{mV^2}
|
|
|
|
|
|
def chi_name():
|
|
return r'$|\chi_{2}|$'#r'$|\mathcal{X}_{2}|$'# ['
|
|
|
|
|
|
def plt_psds_all(axd, axo, aa, c, cells_plot, mat, stack_final, stack_osf,
|
|
test_limits, xlim, alpha=1, color='black', power_type=False, db='', fr=None, peaks_extra=False,
|
|
zorder=1, eod_fr=1):
|
|
###############################
|
|
# projection diagonal
|
|
|
|
xmax, xmin, diagonals_prj_l = plt_diagonal(alpha, axd, color, db, eod_fr, fr, mat, peaks_extra, xlim, zorder)
|
|
|
|
if power_type:
|
|
plt_power_trace(alpha, axd, axo, c, cells_plot, color, db, stack_final, stack_osf, test_limits, xmax,
|
|
eod_fr=eod_fr, zorder=zorder)
|
|
else:
|
|
plt_transferfunction(alpha, axo, color, stack_final, eod_fr=eod_fr, zorder=zorder)
|
|
|
|
axo.set_xlim(xmin, xmax)
|
|
return axd, axo, axo
|
|
|
|
|
|
def plt_diagonal(alpha, axd, color, db, eod_fr, fr, mat, peaks_extra, xlim, zorder, normval = 1, color_same = True):
|
|
diag, diagonals_prj_l = get_mat_diagonals(np.array(mat))
|
|
axis_d = axis_projection(mat, axis='')
|
|
if normval != 1:
|
|
normval = eod_fr
|
|
if db == 'db':
|
|
diagonals_prj_l = 10 * np.log10(diagonals_prj_l) # / maxd
|
|
axd.plot(axis_d / normval, diagonals_prj_l, color=color, alpha=alpha-0.05, zorder=zorder)
|
|
if peaks_extra:
|
|
#try:
|
|
if not color_same:
|
|
color = 'black'
|
|
color_dot = 'black'
|
|
alpha_dot = [alpha]
|
|
else:
|
|
color_dot = 'grey'
|
|
alpha_dot = [1]
|
|
axd.axhline(np.median(diagonals_prj_l), linewidth=0.9, linestyle='--', color=color,
|
|
alpha=alpha, zorder = zorder +1)#0.45#0.75
|
|
plt_peaks_several(['fr'], [fr / normval], [diagonals_prj_l], 0, axd, diagonals_prj_l, [color_dot], axis_d / normval,
|
|
ms=5, zorder = zorder+1, alphas = alpha_dot)
|
|
#except:
|
|
# print('something')
|
|
# embed()
|
|
|
|
xmax, xmin = get_xlim_psd(axis_d / normval, xlim)
|
|
print(xmax)
|
|
axd.set_xlim(xmin, xmax)
|
|
axd.arrow_spines('b')
|
|
#plt.show()
|
|
return xmax, xmin, diagonals_prj_l
|
|
|
|
|
|
def get_xlim_psd(axis_d, xlim):
|
|
if xlim: # [0]
|
|
xmin = xlim[0]
|
|
xmax = xlim[1]
|
|
else:
|
|
xmin = 0#axis_d[0] - 1 # mat.columns[0]
|
|
xmax = axis_d[-1] # mat.columns[-1]
|
|
return xmax, xmin
|
|
|
|
|
|
def plt_transferfunction(alpha, axo, color, stack_final, eod_fr=1, zorder=1,normval = 1, log_transfer = False):
|
|
#########################################
|
|
|
|
osf = stack_final['osf']
|
|
osf_resaved = False
|
|
isf = stack_final['isf']
|
|
f = find_f(stack_final)
|
|
f_axis = f[0:len(isf.iloc[0][0])]
|
|
isf_resaved = False
|
|
|
|
f = find_f(stack_final)
|
|
|
|
# embed()
|
|
################################
|
|
# csd pds berechnung
|
|
scales = []
|
|
counter = 0
|
|
for t in range(len(osf)):
|
|
if type(osf.iloc[t]) == list:
|
|
if t == 0:
|
|
vals = osf.iloc[t][0] * np.conj(isf.iloc[t][0])
|
|
powers = np.abs(isf.iloc[t][0]) ** 2
|
|
else:
|
|
vals += osf.iloc[t][0] * np.conj(isf.iloc[t][0])
|
|
powers += np.abs(isf.iloc[t][0]) ** 2
|
|
counter += 1
|
|
vals = vals / counter
|
|
vals = np.abs(vals) / (powers / counter)
|
|
|
|
########################################
|
|
# embed()
|
|
# if db == 'db':
|
|
# p = 10 * np.log10(p)
|
|
|
|
|
|
if log_transfer:
|
|
means_all = 10 * np.log10(vals)
|
|
else:
|
|
means_all = 10 * np.log10(vals)
|
|
add = np.percentile(means_all, 90)
|
|
# max_lim = xmax
|
|
# embed()
|
|
# stack_final.file_name
|
|
# get_cut_off()
|
|
max_lim = calc_cut_offs(stack_final.file_name.iloc[0]) / normval
|
|
axis = f_axis / normval
|
|
|
|
if normval != 1:
|
|
normval = eod_fr
|
|
if max_lim:
|
|
axo.plot(axis[axis < max_lim], means_all[axis < max_lim], color=color, zorder=zorder, alpha=alpha)
|
|
else:
|
|
axo.plot(axis, means_all, color=color, alpha=alpha, zorder=zorder)
|
|
# embed()
|
|
# ax_pos, axo, colors_f, freqs, isf_resaved = plt_trace(ax_square, db, eod_fr, 'black', 'brown', fr,
|
|
# 'grey', fr_stim, 'orange', grid_s[0, 0], xmax, xmin,
|
|
# False, False, rmv_axo, stack_final, stack_osf, isf_name = 'osf')
|
|
# try:
|
|
# axo, axi = plt_psd_traces(grid_s[1, 0], grid_s[0, 0], ax_square, xmin, xmax, eod_fr, fr, fr_stim, stack_final,
|
|
# reset_pos=False, stack_isf=stack_isf, stack_osf=stack_osf, rmv_axi=rmv_axi,
|
|
# rmv_axo=rmv_axo, peaks = False, maxo = maxo, maxi = maxi, db = db)
|
|
# except:
|
|
# print('psd proble2m')
|
|
# embed()
|
|
# if not test_limits:
|
|
# remove_xticks(axo)
|
|
|
|
# if remove_xticks:
|
|
# remove_xticks(axo)
|
|
|
|
|
|
def plt_power_trace(alpha, axd, axo, c, cells_plot, color, db, stack_final, stack_osf, test_limits, xmax, eod_fr=1,
|
|
zorder=1):
|
|
#########################################
|
|
# output
|
|
if len(stack_osf) == 0:
|
|
isf = stack_final['osf']
|
|
isf_resaved = False
|
|
else:
|
|
isf = stack_osf
|
|
isf_resaved = True
|
|
f = find_f(stack_final)
|
|
power = 1
|
|
if isf_resaved:
|
|
f_axis = f[0:len(isf)]
|
|
means = np.transpose(isf)
|
|
means_all = np.mean(np.abs(means) ** power, axis=0)
|
|
p = np.abs(means.iloc[0]) ** power
|
|
else:
|
|
# embed()
|
|
f_axis = f[0:len(isf.iloc[l][0])]
|
|
# embed()
|
|
means = get_array_from_pandas(isf)
|
|
means_all = np.mean(np.abs(means) ** power, axis=0)
|
|
p = np.abs(isf.iloc[l][0]) ** power
|
|
# embed()
|
|
if db == 'db':
|
|
p = 10 * np.log10(p)
|
|
means_all = 10 * np.log10(means_all)
|
|
add = np.percentile(means_all, 90)
|
|
max_lim = xmax
|
|
axis = f_axis / eod_fr
|
|
if max_lim:
|
|
axo.plot(axis[axis < max_lim], means_all[axis < max_lim], color=color, zorder=zorder, alpha=alpha)
|
|
else:
|
|
axo.plot(axis, means_all, color=color, alpha=alpha, zorder=zorder)
|
|
# embed()
|
|
# ax_pos, axo, colors_f, freqs, isf_resaved = plt_trace(ax_square, db, eod_fr, 'black', 'brown', fr,
|
|
# 'grey', fr_stim, 'orange', grid_s[0, 0], xmax, xmin,
|
|
# False, False, rmv_axo, stack_final, stack_osf, isf_name = 'osf')
|
|
# try:
|
|
# axo, axi = plt_psd_traces(grid_s[1, 0], grid_s[0, 0], ax_square, xmin, xmax, eod_fr, fr, fr_stim, stack_final,
|
|
# reset_pos=False, stack_isf=stack_isf, stack_osf=stack_osf, rmv_axi=rmv_axi,
|
|
# rmv_axo=rmv_axo, peaks = False, maxo = maxo, maxi = maxi, db = db)
|
|
# except:
|
|
# print('psd proble2m')
|
|
# embed()
|
|
if not test_limits:
|
|
remove_xticks(axo)
|
|
remove_xticks(axo)
|
|
|
|
|
|
def plt_spikes(amps_defined, aa, c, cell, cell_type, cells_plot, color, eod_fr, fr, ax_spikes, stack_final1,
|
|
stack_spikes, xlim, alpha=1, xlim_e=[0, 200], sc = 20, scale=True, axi=[], spikes_max=5):
|
|
# if 'spikes' in stack_final1.keys():
|
|
spikes_here = create_spikes(stack_final1, stack_spikes)
|
|
|
|
if len(spikes_here) > 0:
|
|
|
|
# ax_isi.text(-0.75, 0.5, '\n' + str(cell_type) + ,
|
|
# color=colors[str(cell_type)], transform=ax_isi.transAxes, )#cell +'\n cv=' + str(np.round(np.std(isi) / np.mean(isi), 3)) + '\n fr=' + str(np.round(fr))
|
|
if len(spikes_here) > spikes_max:
|
|
spikes_here = spikes_here[0:spikes_max]
|
|
ax_spikes.eventplot(spikes_here, color=color, alpha=alpha)
|
|
ax_spikes.set_xlim(xlim_e) # spikes_both[gg]
|
|
|
|
if c != len(cells_plot) - 1:
|
|
# remove_xticks(axi)
|
|
remove_xticks(ax_spikes)
|
|
ax_spikes.show_spines('')
|
|
if scale:
|
|
ax_spikes.xscalebar(float(1 - sc / xlim_e[-1]), -0.03, sc, 'ms', va='left', ha='bottom') #
|
|
|
|
# else:
|
|
# ax_spikes, eod_mt, sampling, xlim_e = load_mt_data(axi, ax_spikes, c, cell, cells_plot,
|
|
# colors_hist,
|
|
# gg, grid_upper, stack_final1, xlim)
|
|
|
|
# embed()
|
|
|
|
|
|
def plt_stimulus(eod_fr, axe, stack_final1, xlim_e, RAM=True, file_name=None, add=0.07):
|
|
axe.show_spines('')
|
|
neuronal_delay = 5 # das hatte Jan G. angemerkt, dass wir den Stimulus um den neuronal Delay kompensieren sollten
|
|
sampling = stack_final1.sampling.iloc[0]
|
|
max_here = (xlim_e[1] + neuronal_delay) / 1000
|
|
time_eod = np.arange(0, max_here, 1 / sampling)
|
|
eod_interp, sampling_interp, time_eod_interp = get_stimulus_here(file_name, stack_final1, sampling=40000,
|
|
max=max_here)
|
|
fake_fish = fakefish.wavefish_eods('Alepto', frequency=eod_fr,
|
|
samplerate=sampling_interp,
|
|
duration=len(time_eod_interp) / sampling_interp,
|
|
phase0=0.0, noise_std=0.00)
|
|
size_fake_am = 0.5
|
|
if RAM:
|
|
try:
|
|
axe.plot(time_eod_interp * 1000 - neuronal_delay, fake_fish * (1 + eod_interp * size_fake_am), color='grey',
|
|
alpha=0.5, clip_on=True)
|
|
except:
|
|
print('axe thing')
|
|
embed()
|
|
axe.plot(time_eod_interp * 1000 - neuronal_delay, eod_interp * size_fake_am + 1 + add, color='red', linewidth=1)
|
|
else:
|
|
try:
|
|
axe.plot(time_eod_interp * 1000 - neuronal_delay, fake_fish + eod_interp * size_fake_am, color='grey',
|
|
alpha=0.5, clip_on=True)
|
|
except:
|
|
print('axe thing')
|
|
embed()
|
|
axe.plot(time_eod_interp * 1000 - neuronal_delay, eod_interp * size_fake_am + 1 + add, color='red', linewidth=1)
|
|
|
|
axe.set_xlim(xlim_e)
|
|
ylim_e = axe.get_ylim()
|
|
ylim_e = np.array(ylim_e)*1.05
|
|
#embed()
|
|
axe.set_ylim(ylim_e)
|
|
remove_xticks(axe)
|
|
|
|
|
|
def get_stimulus_here(file_name, stack_final1, max=0.4, sampling=None):
|
|
if not sampling:
|
|
sampling = stack_final1.sampling.iloc[0]
|
|
time_eod = np.arange(0, max, 1 / sampling)
|
|
# eod_interp, time_wn_cut, _ = load_noise(stack_final1.file_name.iloc[0])
|
|
if not file_name:
|
|
try:
|
|
eod_interp, time_wn_cut, _ = load_noise(stack_final1.file_name.iloc[0])
|
|
except:
|
|
try:
|
|
eod_interp, time_wn_cut, _ = load_noise(stack_final1.file_name2.iloc[0])
|
|
# print('open problem thing')
|
|
except:
|
|
eod_interp, time_wn_cut, _ = load_noise(stack_final1.file_name.iloc[0] + 's')
|
|
|
|
print('open problem thing2')
|
|
# embed()
|
|
else:
|
|
# embed()
|
|
try:
|
|
eod_interp, time_wn_cut, _ = load_noise(file_name)
|
|
except:
|
|
eod_interp, time_wn_cut, _ = load_noise(file_name + 's')
|
|
eod_interp = interpolate(time_wn_cut, eod_interp,
|
|
time_eod,
|
|
kind='cubic')
|
|
return eod_interp, sampling, time_eod
|
|
|
|
|
|
def same_lims_susept(axds, axis, axos, ims):
|
|
set_clim_same_here(ims, clims='all', same = 'same', lim_type='up')
|
|
set_same_ylim(axos)
|
|
set_same_ylim(axis)
|
|
set_same_ylim(axds)
|
|
|
|
|
|
def create_spikes(stack_final1, stack_spikes=[]):
|
|
spikes_here = []
|
|
if len(stack_spikes) > 0: # type(stack_final1.spikes.iloc[0]) == str
|
|
# spikes_here = stack_spikes#stack_final1.spikes.iloc[0].split('array(')#.split(',')
|
|
if type(stack_spikes) == list:
|
|
for sp in range(len(stack_spikes)):
|
|
try:
|
|
spi = stack_spikes[sp].dropna()
|
|
except:
|
|
spi = stack_spikes[sp]
|
|
# embed()
|
|
# if sp != '[[':
|
|
# spike_times = sp.replace('(','').replace('[','').replace('])','').replace(r'\n','').split(', ')
|
|
# try:
|
|
spikes_here.append(np.array(spi) * 1000)
|
|
# except:
|
|
# print('spike thing')
|
|
else:
|
|
for sp in range(np.shape(stack_spikes)[1]):
|
|
try:
|
|
spi = stack_spikes[sp].dropna()
|
|
except:
|
|
spi = stack_spikes[sp]
|
|
# embed()
|
|
# if sp != '[[':
|
|
# spike_times = sp.replace('(','').replace('[','').replace('])','').replace(r'\n','').split(', ')
|
|
# try:
|
|
spikes_here.append(np.array(spi) * 1000)
|
|
# except:
|
|
# print('spike thing')
|
|
# embed()
|
|
else:
|
|
# if it was pickle
|
|
# spikes_here = []#stack_final1.spikes.iloc[0][0]
|
|
for sp in stack_final1.spikes.iloc[0][0]:
|
|
try:
|
|
spikes_here.append(np.array(sp) * 1000)
|
|
except:
|
|
print('spike thing')
|
|
embed()
|
|
return spikes_here
|
|
|
|
|
|
def load_mt_data(axi, axs, c, cell, cells_plot, colors_hist, gg, grid_upper, stack_final1, xlim):
|
|
###########################################
|
|
data_dir = 'cells/'
|
|
data_name = cell
|
|
name_core = load_folder_name('data') + data_dir + data_name
|
|
nix_name = name_core + '/' + data_name + '.nix' # '/'
|
|
# embed()
|
|
f = nix.File.open(nix_name, nix.FileMode.ReadOnly)
|
|
b = f.blocks[0]
|
|
names_mt_gwn = stack_final1['names_mt_gwn'].unique()[0]
|
|
try:
|
|
mt = b.multi_tags[names_mt_gwn]
|
|
except:
|
|
names_mt_gwns = find_names_gwn(b)
|
|
# names_mt_gwn
|
|
mt = b.multi_tags[names_mt_gwns[0]]
|
|
print('mt thing')
|
|
embed()
|
|
features, id, data_between_2017_2018, mt_ids = find_feature_gwn_id(mt)
|
|
dataset, rlx_problem = load_rlxnix(nix_name)
|
|
# nix_name = '../data/cells/2012-05-15-ac-invivo-1/2012-05-15-ac-invivo-1.nix'
|
|
# dataset = rlx.Dataset(nix_name)
|
|
# hier schaue ich die verschiedenen Noise fiels an
|
|
# wir machen das hier für diese rlx only weil ich nur so an den Kontrast komme
|
|
spikes_loaded = []
|
|
if rlx_problem:
|
|
file_name, file_name_save, cut_off, file, sd = find_file_names(nix_name, mt,
|
|
names_mt_gwn)
|
|
|
|
file_extra, idx_c, base_properties, id_names = get_contrasts_over_rlx_calc_RAM(dataset)
|
|
dataset.close()
|
|
# contrasts_sort_idx = np.argsort(base_properties)
|
|
# ids_sort = np.array(ids)[contrasts_sort_idx]
|
|
# contrasts_sort = np.sort(base_properties)
|
|
try:
|
|
base_properties = base_properties.sort_values(by='c', ascending=False)
|
|
except:
|
|
print('contrast problem sorting')
|
|
embed()
|
|
|
|
# hier muss ich nochmal nach dem file sortieren!
|
|
if data_between_2017_2018 != 'all':
|
|
file_name_sorted = base_properties[base_properties.file_name == file_name]
|
|
else:
|
|
file_name_sorted = base_properties
|
|
|
|
# embed()
|
|
# embed()
|
|
if len(file_name_sorted) < 1:
|
|
print('file_name problem')
|
|
embed()
|
|
|
|
file_name_sorted = file_name_sorted.sort_values(by='start', ascending=False)[::-1]
|
|
# ich sollte auf dem level schon nach dem richtigen filename filtern!
|
|
# embed()
|
|
file_name_sorted = file_name_sorted[file_name_sorted['c_orig'] == stack_final1['c_orig'].unique()[0]]
|
|
grouped = file_name_sorted.groupby('c')
|
|
# ok es gibt wohl eine Zelle die erste, Zelle '2010-06-15-af' wo eben das nicht input arr heißt sondern gwn 300, was da passiert ist kann ich
|
|
# euch jetzt so auch nicht sagen, aber alle anderen Zellen sehen gut aus! Scheint die einzige zu sein°
|
|
data_array_names = get_data_array_names(b) # ,find_indices_to_match_contrats,get_data_array_names
|
|
if 'eod' in ''.join(data_array_names).lower():
|
|
for g, group in enumerate(grouped):
|
|
# hier erstmal alles nach dem Kontrast sortieren
|
|
sd, start, end, rep, cut_off, c_len, c_unit, c_orig, c_len, files_load, cc, id_g = open_group_gwn(group,
|
|
file_name,
|
|
cut_off,
|
|
sd,
|
|
data_between_2017_2018)
|
|
|
|
indices, ends_mt = find_indices_to_match_contrats(grouped, group, mt, id_g, mt_ids,
|
|
data_between_2017_2018)
|
|
|
|
indices = list(map(int, indices))
|
|
max_f = cut_off
|
|
if max_f == 0:
|
|
print('max f = 0')
|
|
embed()
|
|
counter_amp = 0
|
|
spikes_mats = []
|
|
smoothed = []
|
|
# embed()
|
|
# print(data_name + ' amp ' + str(c) + '% nfft ' + str(
|
|
# nfft) + mean + '\n' + ' gwn ' + str(names_mt_gwn) + ' file_name ' + str(
|
|
# file_name) + ' file ' + str(file))
|
|
|
|
spikes_mts = []
|
|
eod_interps = []
|
|
for mm, m in enumerate(indices):
|
|
first, minus, second, stimulus_length = find_first_second(b, names_mt_gwn, m, mt,
|
|
False,
|
|
mm=mm, ends_mt=ends_mt)
|
|
|
|
spikes_mt = link_arrays_spikes(b, first,
|
|
second, minus) #
|
|
spikes_loaded.append(spikes_mt * 1000)
|
|
eod_mt, sampling = link_arrays_eod(b, first,
|
|
second,
|
|
array_name='LocalEOD-1')
|
|
# hier noch das stimpresaved laden
|
|
|
|
# embed()
|
|
#########################################################################
|
|
|
|
# todo: das eventuell noch anpassen
|
|
# for hh, h in enumerate(hists_here):
|
|
# try:
|
|
# axi.hist(h, bins=100, color=colors_hist[gg], alpha=float(alpha - 0.05 * (hh)))
|
|
# except:
|
|
|
|
# embed()
|
|
axi.set_xlim(0, 13)
|
|
|
|
# if np.max(np.concatenate(hists_here)) > 10:
|
|
# axi.set_xlim(0, 10)
|
|
|
|
# plt.show()
|
|
# embed()
|
|
# axe.plot(time_eod*1000,eod,color = 'grey', linewidth = 0.5)
|
|
xlim_e = [0, 200]
|
|
|
|
axs = plt.subplot(grid_upper[1, 1::])
|
|
# embed()
|
|
axs.eventplot(spikes_loaded, color=colors_hist[gg], )
|
|
axs.set_xlim(xlim) # spikes_both[gg]
|
|
|
|
if c != len(cells_plot) - 1:
|
|
remove_xticks(axi)
|
|
remove_xticks(axs)
|
|
else:
|
|
axi.set_xlabel('ISI') # ($I_{spikes}/I_{EODf}$)
|
|
axs.set_xlabel('Time [ms]')
|
|
|
|
axi.set_ylabel('Nr')
|
|
axs.set_ylabel('Nr')
|
|
|
|
else:
|
|
print('rlx thing')
|
|
return axs, eod_mt, sampling, xlim_e
|
|
|
|
|
|
def exclude_cut_filenames(cell_type, stack, fexclude=False):
|
|
file_names_exclude = create_file_names_exclude(cell_type)
|
|
files = stack['file_name'].unique()
|
|
|
|
if fexclude:
|
|
if len(files) > 1:
|
|
stack = stack[~stack['file_name'].isin(file_names_exclude)]
|
|
files = stack['file_name'].unique()
|
|
print('file names excluded')
|
|
print(files)
|
|
return files, stack
|
|
|
|
|
|
def plt_cellbody_punitsingle(grid1, ax0, ax1, ax2, frame, colors, amps_desired, save_names, cells_plot, cell_type_type,
|
|
plus=1, ax3=[], xlim=[], burst_corr='_burst_corr_individual'):
|
|
stack = []
|
|
for c, cell in enumerate(cells_plot):
|
|
print(cell)
|
|
|
|
frame_cell = frame[(frame['cell'] == cell)]
|
|
|
|
frame_cell = unify_cell_names(frame_cell, cell_type=cell_type_type)
|
|
try:
|
|
cell_type = frame_cell[cell_type_type].iloc[0]
|
|
except:
|
|
print('cell type prob')
|
|
embed()
|
|
spikes = frame_cell.spikes.iloc[0]
|
|
|
|
eod, sampling_rate, ds, time_eod = find_eod(frame_cell)
|
|
|
|
spikes_all = []
|
|
hists = []
|
|
frs_calc = []
|
|
fr = frame_cell.fr.iloc[0]
|
|
cv = frame_cell.cv.iloc[0]
|
|
vs = frame_cell.vs.iloc[0]
|
|
eod_fr = frame_cell.EODf.iloc[0]
|
|
spikes_all, hists, frs_calc, cont_spikes = load_spikes(spikes, eod_fr)
|
|
# cont_spikes heißt dass die spikes nans sind oder leer sind, das heißt da ist gar nichts, auch keine scatter, das sind die weißen bilder die brauchen wir nicht
|
|
# also hier ist das ok das mit dem Cont spikes so zu machen weil wir wollen die ja haben!
|
|
# embed()
|
|
if cont_spikes:
|
|
|
|
# die zwei checken ob es mehr als paar spikes gibt,ohne die brauchen wir auch kein Bild
|
|
if len(hists) > 0:
|
|
if len(np.concatenate(hists)) > 0:
|
|
# add = ['', '_burst_corr_individual']
|
|
lim_here = find_lim_here(cell, burst_corr)
|
|
print(lim_here)
|
|
# embed()
|
|
if np.min(np.concatenate(hists)) < lim_here:
|
|
hists2, spikes_ex, frs_calc2 = correct_burstiness(hists, spikes_all, [eod_fr] * len(spikes_all),
|
|
[eod_fr] * len(spikes_all), lim=lim_here,
|
|
burst_corr=burst_corr)
|
|
|
|
spikes_both = [spikes_all, spikes_ex]
|
|
hists_both = [hists, hists2]
|
|
frs_calc_both = [frs_calc, frs_calc2]
|
|
else:
|
|
spikes_both = [spikes_all]
|
|
hists_both = [hists]
|
|
frs_calc_both = [frs_calc]
|
|
|
|
# das ist der title fals der square nicht plottet
|
|
|
|
for s, save_name in enumerate(save_names):
|
|
load_name = load_folder_name('calc_RAM') + '/' + save_name + '_' + cell
|
|
# embed()
|
|
axes = []
|
|
if os.path.exists(load_name + '.pkl'):
|
|
stack = pd.read_pickle(load_name + '.pkl')
|
|
file_names_exclude = create_file_names_exclude(cell_type)
|
|
|
|
files = stack['file_name'].unique()
|
|
fexclude = False
|
|
if fexclude:
|
|
if len(files) > 1:
|
|
stack = stack[~stack['file_name'].isin(file_names_exclude)]
|
|
files = stack['file_name'].unique()
|
|
amps = stack['amp'].unique()
|
|
|
|
row, col = find_row_col(np.arange(len(amps) * len(files)))
|
|
|
|
predefined_amp = True
|
|
amps_defined = True
|
|
if predefined_amp:
|
|
col = 4
|
|
amps_defined = amps_desired
|
|
else:
|
|
amps_defined = amps
|
|
col = len(amps)
|
|
# embed()
|
|
# for f, file in enumerate(files):
|
|
stack_file = stack[stack['file_name'] == files[0]]
|
|
amps = stack_file['amp'].unique()
|
|
# amps_defined = [np.min(amps)]
|
|
for aa, amp in enumerate(amps_defined):
|
|
|
|
if amp in np.array(stack_file['amp']):
|
|
stack_amp = stack_file[stack_file['amp'] == amp]
|
|
lengths = stack_file['stimulus_length'].unique()
|
|
length = np.max(lengths)
|
|
stack_final = stack_amp[stack_amp['stimulus_length'] == length]
|
|
trial_nr_double = stack_final.trial_nr.unique()
|
|
|
|
# ok das ist glaube ich ein Anzeichen von einem Fehler
|
|
if len(trial_nr_double) > 1:
|
|
print('trial_nr_double')
|
|
embed()
|
|
# ich hatte mal einen save fehler deswegen habe ich manche doppelt also einfach das letzte nehmen nehme ich an
|
|
|
|
try:
|
|
stack_final1 = stack_final[stack_final.trial_nr == np.max(trial_nr_double)]
|
|
except:
|
|
print('stack_final1 problem')
|
|
embed()
|
|
try:
|
|
grid_s = gridspec.GridSpecFromSubplotSpec(3, 1, grid1[c, aa + plus],
|
|
height_ratios=[1.5, 1.5, 5],
|
|
hspace=0.1)
|
|
|
|
# grid1[c, s + 1]
|
|
# axs = plt.subplot(grid1[c, s + 1])
|
|
axs = plt.subplot(grid_s[2])
|
|
except:
|
|
print('grid problem2')
|
|
embed()
|
|
|
|
cbar, mat, im = square_func2([axs], stack_final1)
|
|
if xlim:
|
|
axs.set_xlim(xlim)
|
|
axs.set_ylim(xlim)
|
|
axs.set_title('')
|
|
if aa == len(amps) - 1:
|
|
# if len(cbar) > 0:
|
|
cbar.set_label(nonlin_title(), rotation=90, labelpad=10)
|
|
fr = stack_final1.fr.unique()[0]
|
|
snippets = stack_final1['snippets'].unique()[0]
|
|
fr1 = np.unique(stack_final1.fr)
|
|
cv = stack_final1.cv.unique()[0]
|
|
|
|
ser = stack_final1.ser.unique()[0]
|
|
cv_stim = stack_final1.cv_stim.unique()[0]
|
|
fr_stim = stack_final1.fr_stim.unique()[0]
|
|
ser_stim = stack_final1.ser_stim.unique()[0]
|
|
# axs = plt.subplot(grid_s[2])
|
|
if xlim: # [0]
|
|
xmin = xlim[0]
|
|
xmax = xlim[1]
|
|
else:
|
|
xmin = mat.columns[0]
|
|
xmax = mat.columns[-1]
|
|
try:
|
|
axo, axi = plt_psd_traces(grid_s[0], grid_s[1], axs, xlim[0], xlim[-1], eod_fr,
|
|
fr, fr_stim, stack_final, )
|
|
except:
|
|
print('psd problem')
|
|
embed()
|
|
if (aa == 1):
|
|
axo.text(0.5, 1, cell, ha='center', transform=axo.transAxes)
|
|
axes.append(axi) # np.min(mat.columns)
|
|
axes.append(axo) # np.max(mat.columns)
|
|
if aa == 0:
|
|
axo.set_ylabel('Otp.')
|
|
axi.set_ylabel('Inp.')
|
|
if c == 0:
|
|
axo.set_title(' std = ' + str(amp) + '$\%$') # files[0] + ' l ' + str(length)
|
|
if aa != 0:
|
|
axi.set_ylabel('')
|
|
|
|
if c != len(cells_plot) - 1:
|
|
axs.set_xlabel('')
|
|
remove_xticks(axs)
|
|
else:
|
|
axs.set_xlabel(F1_xlabel())
|
|
if aa != 0:
|
|
remove_yticks(axs)
|
|
axs.set_ylabel('')
|
|
|
|
# axi.text() # +' VS '+str(vs)+'CV ' + str(np.round(np.std(h) / np.mean(h), 3))
|
|
# plt.show()
|
|
# embed()
|
|
################################
|
|
# do the scatter of these cells
|
|
add = ['', '_burst_corr', ]
|
|
add = ['', '_burst_corr_individual']
|
|
ax0.scatter(frame_cell['cv' + add[0]], frame_cell['fr' + add[0]], zorder=2, alpha=1,
|
|
label=cell_type, s=15,
|
|
color=colors[str(cell_type)], facecolor='white')
|
|
ax1.scatter(frame_cell['cv' + add[0]], frame_cell['vs' + add[0]], zorder=2, alpha=1,
|
|
label=cell_type, s=15,
|
|
color=colors[str(cell_type)], facecolor='white')
|
|
ax2.scatter(frame_cell['cv' + add[1]], frame_cell['fr' + add[1]], zorder=2, alpha=1,
|
|
label=cell_type, s=15,
|
|
color=colors[str(cell_type)], facecolor='white')
|
|
|
|
# embed()
|
|
if len(stack) > 0:
|
|
load_name = load_folder_name('calc_RAM') + '/' + save_names[s] + '_' + cell
|
|
if ax3 != []:
|
|
try:
|
|
frame_g = base_to_stim(load_name, frame, cell_type_type, cell_type, stack=stack)
|
|
except:
|
|
print('stim problem')
|
|
embed()
|
|
try:
|
|
ax3.scatter(frame_g['cv'], frame_g['cv_stim'], zorder=2, alpha=1,
|
|
label=cell_type, s=15,
|
|
color=colors[str(cell_type)], facecolor='white')
|
|
except:
|
|
print('scatter problem')
|
|
embed()
|
|
################################
|
|
# do the hist
|
|
alpha = 1
|
|
grid_s = gridspec.GridSpecFromSubplotSpec(4, 1, grid1[c, 0], height_ratios=[2.5, 1.5, 1.2, 2.5],
|
|
hspace=0.25)
|
|
|
|
axi = plt.subplot(grid_s[-1])
|
|
# if aa == 1:
|
|
axs.set_title(' ' + cell)
|
|
# axi.text(0, 1.75, ' ' + cell,
|
|
# transform=axi.transAxes,
|
|
# color=colors[str(cell_type)])
|
|
add = ['', '_burst_corr', ]
|
|
add = ['', '_burst_corr_individual']
|
|
colors_hist = ['grey', colors[str(cell_type)]]
|
|
if len(hists_both) > 1:
|
|
colors_hist = ['grey', colors[str(cell_type)]]
|
|
else:
|
|
colors_hist = [colors[str(cell_type)]]
|
|
for gg in range(len(hists_both)):
|
|
# if len(hists_both) > 1:
|
|
hists_here = hists_both[gg]
|
|
# embed()
|
|
# spikes_all, hists, frs_calc, cont_spikes = load_spikes(spikes, eod_fr, spikes_all, hists, frs_calc)
|
|
|
|
for hh, h in enumerate(hists_here):
|
|
try:
|
|
axi.hist(h, bins=100, color=colors_hist[gg], alpha=float(alpha - 0.05 * (hh)))
|
|
except:
|
|
print('alpha problem2')
|
|
embed()
|
|
axi.set_xlim(0, 13)
|
|
# if np.max(np.concatenate(hists_here)) > 10:
|
|
# axi.set_xlim(0, 10)
|
|
axe = plt.subplot(grid_s[0])
|
|
axe.plot(time_eod * 1000, eod, color='grey', linewidth=0.5)
|
|
axe.set_xlim(0, 40)
|
|
axs = plt.subplot(grid_s[1])
|
|
axs.eventplot(spikes_both[gg], color=colors_hist[gg], )
|
|
axs.set_xlim(0, 40)
|
|
|
|
if c != len(cells_plot) - 1:
|
|
remove_xticks(axi)
|
|
remove_xticks(axs)
|
|
else:
|
|
axi.set_xlabel('isi')
|
|
axs.set_xlabel('Time [ms]')
|
|
remove_xticks(axe)
|
|
axi.set_ylabel('Nr')
|
|
axs.set_ylabel('Nr')
|
|
axe.set_ylabel('mV')
|
|
|
|
|
|
def create_file_names_exclude(cell_type):
|
|
if 'p-unit' in cell_type: # == ['p-unit', ' P-unit']:
|
|
file_names_exclude = ['InputArr_350to400hz_30',
|
|
'InputArr_250to300hz_30',
|
|
'InputArr_150to200hz_30',
|
|
'InputArr_50to100hz_30',
|
|
'InputArr_50hz_30',
|
|
|
|
'gwn50Hz50s0.3',
|
|
'gwn50Hz10s0.3',
|
|
'gwn50Hz10.3',
|
|
'gwn50Hz10s0.3short',
|
|
|
|
'gwn25Hz10s0.3',
|
|
|
|
'FileStimulus-file-gaussian50.0',
|
|
'FileStimulus-file-gaussian25.0',
|
|
] #
|
|
else:
|
|
file_names_exclude = ['InputArr_350to400hz_30',
|
|
'InputArr_250to300hz_30',
|
|
'InputArr_150to200hz_30',
|
|
'InputArr_50to100hz_30',
|
|
'InputArr_50hz_30',
|
|
|
|
'blwn125Hz10s0.3',
|
|
'gwn50Hz10s0.3',
|
|
'FileStimulus-file-gaussian50.0',
|
|
'FileStimulus-file-gaussian25.0', 'gwn25Hz10s0.3', 'gwn50Hz10.3',
|
|
'gwn50Hz10s0.3short',
|
|
'gwn50Hz50s0.3', 'gwn25Hz10s0.3', ] #
|
|
return file_names_exclude
|
|
|
|
|
|
def plt_cell_body2(grid1, ax0, ax1, ax2, frame, colors, amps_desired, save_names, cells_plot, cell_type_type, ax3=[],
|
|
xlim=[]):
|
|
for c, cell in enumerate(cells_plot):
|
|
print(cell)
|
|
|
|
frame_cell = frame[(frame['cell'] == cell)]
|
|
frame_cell = unify_cell_names(frame_cell, cell_type=cell_type_type)
|
|
try:
|
|
cell_type = frame_cell[cell_type_type].iloc[0]
|
|
except:
|
|
embed()
|
|
spikes = frame_cell.spikes.iloc[0]
|
|
spikes_all = []
|
|
hists = []
|
|
frs_calc = []
|
|
fr = frame_cell.fr.iloc[0]
|
|
cv = frame_cell.cv.iloc[0]
|
|
vs = frame_cell.vs.iloc[0]
|
|
eod_fr = frame_cell.EODf.iloc[0]
|
|
spikes_all, hists, frs_calc, cont_spikes = load_spikes(spikes, eod_fr)
|
|
# cont_spikes heißt dass die spikes nans sind oder leer sind, das heißt da ist gar nichts, auch keine scatter, das sind die weißen bilder die brauchen wir nicht
|
|
# also hier ist das ok das mit dem Cont spikes so zu machen weil wir wollen die ja haben!
|
|
# embed()
|
|
if cont_spikes:
|
|
|
|
# die zwei checken ob es mehr als paar spikes gibt,ohne die brauchen wir auch kein Bild
|
|
if len(hists) > 0:
|
|
if len(np.concatenate(hists)) > 0:
|
|
|
|
if np.min(np.concatenate(hists)) < 1.5:
|
|
hists2, spikes_ex, frs_calc2 = correct_burstiness(hists, spikes_all, [eod_fr] * len(spikes_all),
|
|
[eod_fr] * len(spikes_all))
|
|
|
|
spikes_both = [spikes_all, spikes_ex]
|
|
hists_both = [hists, hists2]
|
|
frs_calc_both = [frs_calc, frs_calc2]
|
|
else:
|
|
spikes_both = [spikes_all]
|
|
hists_both = [hists]
|
|
frs_calc_both = [frs_calc]
|
|
|
|
# das ist der title fals der square nicht plottet
|
|
plt.suptitle(cell + ' EODf ' + str(np.round(eod_fr)) + ' Hz ' + ' % ' +
|
|
' Base: cv ' + str(np.round(cv, 2)) + ' fr ' + str(
|
|
np.round(fr)) + ' Hz',
|
|
fontsize=11, ) # cell[0:13] + color=color+ cell_type
|
|
|
|
save_names = [
|
|
'noise_data8_nfft1sec_original__LocalEOD_CutatBeginning_0.05_s_NeurDelay_0_s_burst_corr',
|
|
'noise_data8_nfft1sec_original__LocalEOD_CutatBeginning_0.05_s_NeurDelay_0.005_s_burst_corr',
|
|
'noise_data8_nfft1sec_original__LocalEOD_mean2__CutatBeginning_0.05_s_NeurDelay_0.005_s_burst_corr',
|
|
]
|
|
|
|
for a, save_name in enumerate(save_names):
|
|
load_name = load_folder_name('calc_RAM') + '/' + save_name + '_' + cell
|
|
# embed()
|
|
if os.path.exists(load_name + '.pkl'):
|
|
stack = pd.read_pickle(load_name + '.pkl')
|
|
if 'p-unit' in cell_type: # == ['p-unit', ' P-unit']:
|
|
file_names_exclude = ['InputArr_350to400hz_30',
|
|
'InputArr_250to300hz_30',
|
|
'InputArr_150to200hz_30',
|
|
'InputArr_50to100hz_30',
|
|
'InputArr_50hz_30',
|
|
|
|
'gwn50Hz50s0.3',
|
|
'gwn50Hz10s0.3',
|
|
'gwn50Hz10.3',
|
|
'gwn50Hz10s0.3short',
|
|
|
|
'gwn25Hz10s0.3',
|
|
|
|
'FileStimulus-file-gaussian50.0',
|
|
'FileStimulus-file-gaussian25.0',
|
|
] #
|
|
else:
|
|
file_names_exclude = ['InputArr_350to400hz_30',
|
|
'InputArr_250to300hz_30',
|
|
'InputArr_150to200hz_30',
|
|
'InputArr_50to100hz_30',
|
|
'InputArr_50hz_30',
|
|
|
|
'blwn125Hz10s0.3',
|
|
'gwn50Hz10s0.3',
|
|
'FileStimulus-file-gaussian50.0',
|
|
'FileStimulus-file-gaussian25.0', 'gwn25Hz10s0.3', 'gwn50Hz10.3',
|
|
'gwn50Hz10s0.3short',
|
|
'gwn50Hz50s0.3', 'gwn25Hz10s0.3', ] #
|
|
|
|
files = stack['file_name'].unique()
|
|
fexclude = False
|
|
if fexclude:
|
|
if len(files) > 1:
|
|
stack = stack[~stack['file_name'].isin(file_names_exclude)]
|
|
files = stack['file_name'].unique()
|
|
amps = stack['amp'].unique()
|
|
|
|
row, col = find_row_col(np.arange(len(amps) * len(files)))
|
|
|
|
predefined_amp = True
|
|
amps_defined = True
|
|
if predefined_amp:
|
|
col = 4
|
|
amps_defined = amps_desired
|
|
else:
|
|
amps_defined = amps
|
|
col = len(amps)
|
|
|
|
# for f, file in enumerate(files):
|
|
stack_file = stack[stack['file_name'] == files[0]]
|
|
amps = stack_file['amp'].unique()
|
|
amps_defined = [np.min(amps)]
|
|
for aa, amp in enumerate(amps_defined):
|
|
|
|
if amp in np.array(stack_file['amp']):
|
|
stack_amp = stack_file[stack_file['amp'] == amp]
|
|
lengths = stack_file['stimulus_length'].unique()
|
|
length = np.max(lengths)
|
|
stack_final = stack_amp[stack_amp['stimulus_length'] == length]
|
|
trial_nr_double = stack_final.trial_nr.unique()
|
|
|
|
# ok das ist glaube ich ein Anzeichen von einem Fehler
|
|
if len(trial_nr_double) > 1:
|
|
print('trial_nr_double')
|
|
embed()
|
|
# ich hatte mal einen save fehler deswegen habe ich manche doppelt also einfach das letzte nehmen nehme ich an
|
|
|
|
try:
|
|
stack_final1 = stack_final[stack_final.trial_nr == np.max(trial_nr_double)]
|
|
except:
|
|
print('stack_final1 problem')
|
|
embed()
|
|
try:
|
|
grid_s = gridspec.GridSpecFromSubplotSpec(3, 1, grid1[c, a + 1],
|
|
height_ratios=[1.5, 1.5, 5],
|
|
hspace=0)
|
|
|
|
# grid1[c, a + 1]
|
|
# axs = plt.subplot(grid1[c, a + 1])
|
|
axs = plt.subplot(grid_s[2])
|
|
except:
|
|
print('grid problem0')
|
|
embed()
|
|
|
|
cbar, mat, im = square_func2([axs], stack_final1)
|
|
if xlim:
|
|
axs.set_xlim(xlim)
|
|
axs.set_ylim(xlim)
|
|
if a == len(amps) - 1:
|
|
# if len(cbar) > 0:
|
|
cbar.set_label(nonlin_title(), rotation=90, labelpad=10)
|
|
fr = stack_final1.fr.unique()[0]
|
|
snippets = stack_final1['snippets'].unique()[0]
|
|
fr1 = np.unique(stack_final1.fr)
|
|
cv = stack_final1.cv.unique()[0]
|
|
|
|
ser = stack_final1.ser.unique()[0]
|
|
cv_stim = stack_final1.cv_stim.unique()[0]
|
|
fr_stim = stack_final1.fr_stim.unique()[0]
|
|
ser_stim = stack_final1.ser_stim.unique()[0]
|
|
|
|
# axs = plt.subplot(grid_s[2])
|
|
axo, axi = plt_psd_traces(grid_s[0], grid_s[1], axs, np.min(mat.columns),
|
|
np.max(mat.columns), eod_fr, fr, fr_stim, stack_final,
|
|
)
|
|
if c == 0:
|
|
axi.set_title(' std = ' + str(amp) + '$\%$') # files[0] + ' l ' + str(length)
|
|
if a != 0:
|
|
axi.set_ylabel('')
|
|
if c != 2:
|
|
axs.set_xlabel('')
|
|
remove_xticks(axi)
|
|
################################
|
|
# do the scatter of these cells
|
|
add = ['', '_burst_corr', ]
|
|
|
|
if ax3 != []:
|
|
frame_g = base_to_stim(load_name, frame, cell_type_type, cell_type)
|
|
try:
|
|
ax3.scatter(frame_g['cv'], frame_g['cv_stim'], zorder=2, alpha=1,
|
|
label=cell_type, s=15,
|
|
color=colors[str(cell_type)], facecolor='white')
|
|
except:
|
|
print('scatter problem')
|
|
embed()
|
|
################################
|
|
# do the hist
|
|
do_hist(grid1, c, colors, cell_type, hists_both, cell, cells_plot)
|
|
|
|
|
|
def do_hist(grid1, c, colors, cell_type, hists_both, cell, cells_plot):
|
|
alpha = 1
|
|
axi = plt.subplot(grid1[c, 0])
|
|
add = ['', '_burst_corr', ]
|
|
colors_hist = ['grey', colors[str(cell_type)]]
|
|
if len(hists_both) > 1:
|
|
colors_hist = ['grey', colors[str(cell_type)]]
|
|
else:
|
|
colors_hist = [colors[str(cell_type)]]
|
|
for gg in range(len(hists_both)):
|
|
# if len(hists_both) > 1:
|
|
hists_here = hists_both[gg]
|
|
# embed()
|
|
for hh, h in enumerate(hists_here):
|
|
try:
|
|
axi.hist(h, bins=100, color=colors_hist[gg], alpha=float(alpha - 0.05 * (hh)))
|
|
except:
|
|
print('alpha problem3')
|
|
embed()
|
|
# if np.max(np.concatenate(hists_here)) > 10:
|
|
# axi.set_xlim(0, 10)
|
|
|
|
axi.set_title('CV ' + str(np.round(np.std(h) / np.mean(h), 3)) + ' ' + cell) # +' VS '+str(vs)
|
|
axi.set_xlim(0, 13)
|
|
if c != len(cells_plot) - 1:
|
|
remove_xticks(axi)
|
|
else:
|
|
axi.set_xlabel('isi')
|
|
|
|
|
|
def cells_eigen(base_extra = False,amp_desired=[0.5, 1, 5], xlim=[0, 1.1], cell_class=' Ampullary', cells_plot2=[], show=False,
|
|
annotate=False, titles=['Baseline \n Susceptibility', 'Half EODf \n Susceptibility'],
|
|
peaks_extra=[False, False, False]):
|
|
plot_style()
|
|
|
|
save_names = ['noise_data8_nfft1sec_original__LocalEOD_CutatBeginning_0.05_s_NeurDelay_0.005_s_burst_corr']
|
|
|
|
# 'noise_data8_nfft1sec_original__LocalEOD_CutatBeginning_0.05_s_NeurDelay_0.005_s',#__burstIndividual_
|
|
# ]
|
|
save_names = ['noise_data8_nfft1sec_original__LocalEOD_CutatBeginning_0.05_s_NeurDelay_0.005_s__burstIndividual_']
|
|
save_names = ['noise_data8_nfft1sec_original__LocalEOD_CutatBeginning_0.05_s_NeurDelay_0.005_s_burst_corr']
|
|
save_names = ['noise_data8_nfft1sec_original__LocalEOD_CutatBeginning_0.05_s_NeurDelay_0.005_s_burst_corr',
|
|
'noise_data8_nfft1sec_original__LocalEOD_CutatBeginning_0.05_s_NeurDelay_0.005_s_burst_corr',
|
|
'noise_data10_nfft1sec_original__StimPreSaved4__mean5__CutatBeginning_0.05_s_NeurDelay_0.005_s_spikes_']
|
|
save_names = [
|
|
'noise_data10_nfft1sec_original__StimPreSaved4__mean5__CutatBeginning_0.05_s_NeurDelay_0.005_s_spikes_']
|
|
|
|
# save_names = ['noise_data10_nfft1sec_original__StimPreSaved4__mean5__CutatBeginning_0.05_s_NeurDelay_0.005_s_spikes_',
|
|
# 'noise_data10_nfft1sec_original__StimPreSaved4__mean5__CutatBeginning_0.05_s_NeurDelay_0.005_s_spikes_',
|
|
# 'noise_data10_nfft1sec_original__StimPreSaved4__mean5__CutatBeginning_0.05_s_NeurDelay_0.005_s_spikes_']
|
|
save_names = [version_final()]
|
|
amps_desired = amp_desired
|
|
# amps_desired, cell_type_type, cells_plot, frame, cell_types = load_isis(save_names, amps_desired = amp_desired, cell_class = cell_class)
|
|
cell_type_type = 'cell_type_reclassified'
|
|
# frame = load_cv_base_frame(cells_plot2, cell_type_type=cell_type_type, redo = True)
|
|
frame, frame_spikes = load_cv_vals_susept(cells_plot2, EOD_type='synch',
|
|
names_keep=['spikes', 'gwn', 'fs', 'EODf', 'cv', 'fr', 'width_75', 'vs',
|
|
'cv_burst_corr_individual',
|
|
'fr_burst_corr_individual',
|
|
'width_75_burst_corr_individual',
|
|
'vs_burst_corr_individual', 'cell_type_reclassified',
|
|
'cell'], path_sp='/calc_base_data-base_frame_overview.pkl',
|
|
frame_general=False)
|
|
# embed()
|
|
cells_plot = cells_plot2
|
|
default_figsize(column=2, width=12, length=3.25 * len(cells_plot)) #ts=10, fs=10, ls=10,
|
|
|
|
grid1 = big_grid_susept_pics(cells_plot)
|
|
|
|
grid = gridspec.GridSpec(1, 1, wspace=0.1, hspace=0.21, top=0.97, left=0.09, bottom=0.085, right=0.93)
|
|
|
|
grid1 = big_grid_susept_pics(cells_plot, top=0.94, bottom=0.065)
|
|
|
|
#grid1 = gridspec.GridSpecFromSubplotSpec(len(cells_plot), 1, grid[0], hspace=0.22,
|
|
# wspace=0.35) # ,
|
|
|
|
plt_cellbody_eigen(grid1, frame, amps_desired, save_names, cells_plot, cell_type_type, xlim=xlim, plus=1,
|
|
burst_corr='_burst_corr_individual',base_extra = base_extra, titles=titles, peaks_extra=peaks_extra)
|
|
|
|
save_visualization(pdf=True)
|
|
|
|
|
|
def ampullary_punit(permuted = False,eod_metrice = True,base_extra = False, color_same = True, fr_name = '$f_{Base}$', amp_desired = [5,20], isi_delta = None, xlim_p = [0, 1.1], tags_individual = False, xlim=[],add_texts = [0.25,0], cells_plot2=[], RAM=True,scale_val = False,
|
|
titles=['Low-CV P-unit,', 'High-CV P-unit', 'Ampullary cell,'], peaks_extra=[True, True, True]):#[0, 1.1]
|
|
plot_style()
|
|
|
|
save_names = ['noise_data8_nfft1sec_original__LocalEOD_CutatBeginning_0.05_s_NeurDelay_0.005_s_burst_corr']
|
|
|
|
# 'noise_data8_nfft1sec_original__LocalEOD_CutatBeginning_0.05_s_NeurDelay_0.005_s',#__burstIndividual_
|
|
# ]
|
|
save_names = ['noise_data8_nfft1sec_original__LocalEOD_CutatBeginning_0.05_s_NeurDelay_0.005_s__burstIndividual_']
|
|
save_names = ['noise_data8_nfft1sec_original__LocalEOD_CutatBeginning_0.05_s_NeurDelay_0.005_s_burst_corr']
|
|
save_names = ['noise_data8_nfft1sec_original__LocalEOD_CutatBeginning_0.05_s_NeurDelay_0.005_s_burst_corr',
|
|
'noise_data8_nfft1sec_original__LocalEOD_CutatBeginning_0.05_s_NeurDelay_0.005_s_burst_corr',
|
|
'noise_data10_nfft1sec_original__StimPreSaved4__mean5__CutatBeginning_0.05_s_NeurDelay_0.005_s_spikes_']
|
|
save_names = [
|
|
'noise_data10_nfft1sec_original__StimPreSaved4__mean5__CutatBeginning_0.05_s_NeurDelay_0.005_s_spikes_']
|
|
|
|
# save_names = ['noise_data10_nfft1sec_original__StimPreSaved4__mean5__CutatBeginning_0.05_s_NeurDelay_0.005_s_spikes_',
|
|
# 'noise_data10_nfft1sec_original__StimPreSaved4__mean5__CutatBeginning_0.05_s_NeurDelay_0.005_s_spikes_',
|
|
# 'noise_data10_nfft1sec_original__StimPreSaved4__mean5__CutatBeginning_0.05_s_NeurDelay_0.005_s_spikes_']
|
|
save_names = [version_final()]
|
|
amps_desired = amp_desired
|
|
# amps_desired, cell_type_type, cells_plot2, frame, cell_types = load_isis(save_names, amps_desired = amp_desired, cell_class = cell_class)
|
|
cell_type_type = 'cell_type_reclassified'
|
|
# frame = load_cv_base_frame(cells_plot2, cell_type_type=cell_type_type, redo = True)
|
|
frame, frame_spikes = load_cv_vals_susept(cells_plot2, EOD_type='synch',
|
|
names_keep=['spikes', 'gwn', 'fs', 'EODf', 'cv', 'fr', 'width_75', 'vs',
|
|
'cv_burst_corr_individual',
|
|
'fr_burst_corr_individual',
|
|
'width_75_burst_corr_individual',
|
|
'vs_burst_corr_individual', 'cell_type_reclassified',
|
|
'cell'], path_sp='/calc_base_data-base_frame_overview.pkl',
|
|
frame_general=False)
|
|
|
|
default_settings_cells_susept(cells_plot2)
|
|
|
|
if len(cells_plot2) == 1:
|
|
grid1 = big_grid_susept_pics(cells_plot2, top=0.9, bottom=0.12)
|
|
else:
|
|
grid1 = big_grid_susept_pics(cells_plot2, bottom=0.065)
|
|
|
|
plt_cellbody_singlecell(grid1, frame, amps_desired, save_names, cells_plot2, cell_type_type, xlim=xlim, plus=1,
|
|
burst_corr='_burst_corr_individual', permuted = permuted,base_extra = base_extra, color_same = color_same, fr_name = fr_name, eod_metrice = eod_metrice, isi_delta = isi_delta, tags_individual = tags_individual, RAM=RAM,add_texts = add_texts, titles=titles, xlim_p = xlim_p, peaks_extra=peaks_extra,scale_val = scale_val, )
|
|
|
|
# plt.show()
|
|
save_visualization(pdf=True, individual_tag = cells_plot2[0])
|
|
|
|
|
|
def default_settings_cells_susept(cells_plot, l = 3.7):
|
|
default_figsize(column=2, width=12, length=l * len(cells_plot)) #ts=10, fs=10, ls=10,
|
|
|
|
|
|
def big_grid_susept_pics(cells_plot, top=0.96, bottom=0.065):
|
|
grid = gridspec.GridSpec(1, 1, wspace=0.1, hspace=0.5, top=top, left=0.08, bottom=bottom, right=0.95)
|
|
# 0.21
|
|
grid1 = gridspec.GridSpecFromSubplotSpec(len(cells_plot), 1, grid[0], hspace=0.35,
|
|
wspace=0.35) # ,
|
|
return grid1
|
|
|
|
|
|
def show_func(show=True):
|
|
if show:
|
|
if os.path.exists('..\code\calc_model'):
|
|
plt.show()
|
|
else:
|
|
plt.close()
|
|
else:
|
|
plt.close()
|
|
|
|
|
|
# @jit(nopython=True) # add everywhere eod_fr
|
|
|
|
|
|
def plt_RAM_overview_all_filename_selected():
|
|
# calcdf_RAM_overview()
|
|
|
|
save_name = 'calc_RAM_overview-noise_data8_nfft1sec_original__LocalEOD_CutatBeginning_0.05_s_NeurDelay_0.005_s_burst_corr'
|
|
save_name = 'calc_RAM_overview-noise_data8_nfft1sec_original__LocalEOD_CutatBeginning_0.05_s_NeurDelay_0.005_s'
|
|
save_name = 'calc_RAM_overview-noise_data9_nfft1sec_original__StimPreSaved4__CutatBeginning_0.05_s_NeurDelay_0.005_s'
|
|
save_name = 'calc_RAM_overview-noise_data9_nfft1sec_original__StimPreSaved4__mean5__CutatBeginning_0.05_s_NeurDelay_0.005_s'
|
|
|
|
frame_load = pd.read_csv(load_folder_name('calc_RAM') + '/' + save_name + '.csv')
|
|
|
|
colors = colors_overview()
|
|
# embed()
|
|
fr_vars = [frame_load.cv] # , frame.fr
|
|
fr_names = ['cv', 'fr']
|
|
# embed()
|
|
scores = ['std_mean', 'std_mean_fr', 'std_mean_fr2']
|
|
scores = ['perc95_perc5_fr',
|
|
'perc80_perc5_fr',
|
|
'entropy_mat_fr',
|
|
'entropy_diagonal_fr',
|
|
|
|
]
|
|
|
|
# scores = ['perc90_perc10_fr']
|
|
col = 4
|
|
row = 2
|
|
|
|
cell_types = [' Ampullary', ' P-unit', ]
|
|
fig, ax = plt.subplots(row, col, sharex=True, figsize=(14, 7.5)) # constrained_layout=True,
|
|
# ax = np.concatenate(ax)
|
|
for c, cell_type_here in enumerate(cell_types):
|
|
|
|
cell_type = frame_load.cell_type
|
|
p_pos = np.where(np.array(cell_type) == cell_type_here) # ' P-unit'
|
|
# a_pos = np.where(np.array(cell_type) == ' Ampullary')
|
|
# embed()
|
|
frame = frame_load.loc[p_pos]
|
|
plt.suptitle(cell_type_here + ' \n ' + save_name)
|
|
for s, score in enumerate(scores):
|
|
|
|
file_names = frame.file_name.unique()
|
|
file_names = np.sort(file_names)
|
|
file_names = ['InputArr_50to100hz_30',
|
|
'InputArr_150to200hz_30', 'InputArr_250to300hz_30',
|
|
'InputArr_350to400hz_30',
|
|
'InputArr_50hz_30', 'gwn50Hz10s0.3', 'gwn50Hz50s0.3', 'gwn100Hz10s0.3', 'gwn150Hz10s0.3',
|
|
'gwn300Hz10s0.3', 'gwn300Hz10s0.3short', 'gwn300Hz50s0.3', 'InputArr_400hz_30'
|
|
]
|
|
file_names = ['gwn150Hz10s0.3',
|
|
'gwn300Hz10s0.3', 'gwn300Hz10s0.3short', 'gwn300Hz50s0.3', 'InputArr_400hz_30'
|
|
]
|
|
# embed()
|
|
|
|
cmap = rainbow_cmap(file_names, nrs=len(file_names))
|
|
for ff, file in enumerate(file_names):
|
|
# for f, fr_var in enumerate(fr_vars):
|
|
frame_file = frame[frame.file_name == file]
|
|
try:
|
|
ax[c, s].scatter(frame_file['cv_wo_burstcorr'], np.array(frame_file[score]), color=cmap[ff],
|
|
label=file) # colors[' P-unit']
|
|
except:
|
|
print('axs thing1')
|
|
embed()
|
|
# ax[s].scatter(np.array(fr_var)[a_pos], np.array(frame[score])[a_pos], color=colors[' Ampullary'])
|
|
# 'cv_wo_burstcorr'
|
|
|
|
# embed()
|
|
# ax[s].set_ylabel('std/mean')
|
|
# ax[s].set_ylabel(score)
|
|
ax[c, s].set_title(score, fontsize=11)
|
|
if s < row * col - col:
|
|
a = 'hi'
|
|
# #ax[s].set_xlabel('')
|
|
# remove_xticks(ax[s])
|
|
else:
|
|
ax[c, s].set_xlabel('CV') # fr_names[f]
|
|
ax[c, s].set_xlim(0, 2)
|
|
# triangle_labels(s,ax[s],col = col, row = row)
|
|
# ax[s].get_shared_x_axes().join(*ax[f, :])
|
|
if s == len(scores) - 1:
|
|
ax[c, s].legend(ncol=1, loc=(1.3, 0))
|
|
ax[c, 0].set_ylabel(cell_type_here)
|
|
for a in range(4):
|
|
# ax[0, a].get_shared_y_axes().join(* ax[:, a])
|
|
set_same_ylim(ax[:, a])
|
|
plt.subplots_adjust(left=0.06, right=0.8, top=0.83, wspace=0.45, hspace=0.3)
|
|
# plt.show()
|
|
save_visualization(individual_tag='_score_' + str(score) + '_celltype_' + str(cell_type_here))
|
|
|
|
#
|
|
|
|
|
|
def plt_data_noise(time_wn, stimulus_wn, nfft, sampling, mt, b, m):
|
|
plt.subplot(2, 3, 1)
|
|
plt.plot(time_wn, stimulus_wn)
|
|
plt.xlim(0, 0.3)
|
|
plt.subplot(2, 3, 4)
|
|
p, f = ml.psd(stimulus_wn - np.mean(stimulus_wn), Fs=sampling, NFFT=nfft,
|
|
noverlap=nfft // 2, sides='twosided')
|
|
|
|
plt.plot(f, p)
|
|
plt.xlim(0, 0.3)
|
|
eod_mt_test, spikes_mt, sampling = link_arrays(b, mt.positions[:][m],
|
|
mt.extents[:][m])
|
|
|
|
# eod_mt_test = eod[
|
|
# (time_whole > mt.positions[:][m]) & (
|
|
# time_whole < mt.positions[:][m] + mt.extents[:][m])]
|
|
time_here = np.arange(0, len(eod_mt_test) / sampling, 1 / sampling)
|
|
# time_here = time_whole [
|
|
# (time_whole > mt.positions[:][m]) & (
|
|
# time_whole < mt.positions[:][m] + mt.extents[:][m])]
|
|
plt.subplot(1, 3, 2)
|
|
plt.plot(time_here - np.min(time_here), eod_mt_test)
|
|
plt.xlim(0, 0.3)
|
|
|
|
plt.subplot(1, 3, 3)
|
|
|
|
plt.plot(time_here - np.min(time_here), eod_mt_test)
|
|
plt.plot(time_wn, amp * stimulus_wn + 0.4, color='red')
|
|
plt.xlim(0, 0.3)
|
|
plt.show()
|
|
|
|
|
|
def plt_data_overview_amps(ax):
|
|
save_names = [
|
|
'calc_RAM_overview-noise_data9_nfft1sec_original__StimPreSaved4__mean5__CutatBeginning_0.05_s_NeurDelay_0.005_s',
|
|
'calc_RAM_overview-noise_data9_nfft1sec_original__StimPreSaved4__mean5__CutatBeginning_0.05_s_NeurDelay_0.005_s__burstIndividual_',
|
|
'calc_RAM_overview-noise_data9_nfft1sec_original__StimPreSaved4__mean5__CutatBeginning_0.05_s_NeurDelay_0.005_s',
|
|
'calc_RAM_overview-noise_data9_nfft1sec_original__StimPreSaved4__mean5__CutatBeginning_0.05_s_NeurDelay_0.005_s__burstIndividual_',
|
|
]
|
|
|
|
x_axis = ["cv_base", "cv_base_w_burstcorr", "cv_stim_wo_burstcorr", "cv_stim_w_burstcorr"]
|
|
|
|
save_names_title = ['No burst correction (cv_base)', 'Burst correction (cv_base)', 'No burst correction (cv_stim)',
|
|
'Burst correction (cv_stim)']
|
|
# embed()
|
|
counter = 0
|
|
# for ss, save_name in enumerate(save_names):
|
|
# cv_names = ['cv_stim_w_burstcorr']
|
|
for cv_n, cv_name in enumerate(x_axis):
|
|
|
|
# todo: das hier noch resaven:
|
|
# if subfolder == ''
|
|
# load_data
|
|
# version_comp, subfolder, mod_name_slash, mod_name, subfolder_path = find_code_vs_not()
|
|
# if subfolder == '':
|
|
frame_load = load_overview_susept(save_names[cv_n])
|
|
|
|
colors = colors_overview()
|
|
|
|
scores = [
|
|
'perc95_perc5_fr',
|
|
]
|
|
cell_types = [' P-unit', ' Ampullary', ]
|
|
|
|
for c, cell_type_here in enumerate(cell_types):
|
|
|
|
cell_type = frame_load['celltype'] # 'cell_type_reclassified'
|
|
p_pos = np.where(np.array(cell_type) == cell_type_here) # ' P-unit'
|
|
frame = frame_load.loc[p_pos]
|
|
|
|
for s, score in enumerate(scores):
|
|
|
|
file_names = ['InputArr_50to100hz_30',
|
|
'InputArr_150to200hz_30', 'InputArr_250to300hz_30',
|
|
'InputArr_350to400hz_30',
|
|
'InputArr_50hz_30', 'gwn50Hz10s0.3', 'gwn50Hz50s0.3', 'gwn100Hz10s0.3',
|
|
'gwn150Hz10s0.3',
|
|
'gwn300Hz10s0.3', 'gwn300Hz10s0.3short', 'gwn300Hz50s0.3', 'InputArr_400hz_30'
|
|
]
|
|
|
|
file_names_there = ['gwn150Hz10s0.3',
|
|
'gwn300Hz10s0.3', 'gwn300Hz10s0.3short', 'gwn300Hz50s0.3', 'InputArr_400hz_30'
|
|
]
|
|
|
|
frame_file_ex = frame[frame.file_name.isin(file_names_there)]
|
|
|
|
frame_file_ex = frame_file_ex[frame_file_ex.snippets == 9]
|
|
print(len(file_names))
|
|
|
|
frame_file = frame_file_ex # frame_file_ex[frame_file_ex[var_name] == file]
|
|
|
|
amps = np.array(frame_file.amp.unique())
|
|
cmap = rainbow_cmap(amps, nrs=len(amps))
|
|
for a, amp in enumerate(amps):
|
|
frame_amp = frame_file[frame_file.amp == amp]
|
|
cvs = frame_amp[cv_name] #
|
|
|
|
x_axis = cvs[frame_amp[score] > 0]
|
|
y_axis = np.array(frame_amp[score])[frame_amp[score] > 0]
|
|
ax[counter].set_title(save_names_title[cv_n])
|
|
max_val = 1.5
|
|
if 'P-unit' in cell_type_here:
|
|
marker = '.'
|
|
else:
|
|
marker = '*'
|
|
try:
|
|
ax[counter].scatter(x_axis[x_axis < max_val], y_axis[x_axis < max_val],
|
|
color=cmap[a], alpha=0.45, marker=marker,
|
|
s=10) # colors[' P-unit']label = cell_type_here[1]+':'+' '+str(file), marker = marker,
|
|
except:
|
|
print('axs thing2')
|
|
embed()
|
|
ax[counter].set_xlabel(cv_name)
|
|
|
|
if counter == 0:
|
|
ax[counter].set_ylabel(score) # cell_type_here+, transform=ax[counter,l].transAxes
|
|
ax[counter].set_xlim(0, max_val)
|
|
# embed()
|
|
counter += 1
|
|
return cell_type_here, score
|
|
|
|
|
|
def plt_data_overview2(ax, scores=['perc95_perc5_fr']):
|
|
save_names = [
|
|
'calc_RAM_overview-noise_data9_nfft1sec_original__StimPreSaved4__mean5__CutatBeginning_0.05_s_NeurDelay_0.005_s',
|
|
'calc_RAM_overview-noise_data9_nfft1sec_original__StimPreSaved4__mean5__CutatBeginning_0.05_s_NeurDelay_0.005_s__burstIndividual_',
|
|
'calc_RAM_overview-noise_data9_nfft1sec_original__StimPreSaved4__mean5__CutatBeginning_0.05_s_NeurDelay_0.005_s',
|
|
'calc_RAM_overview-noise_data9_nfft1sec_original__StimPreSaved4__mean5__CutatBeginning_0.05_s_NeurDelay_0.005_s__burstIndividual_',
|
|
]
|
|
##########################
|
|
# Auswahl: wir nehmen den mean um nicht Stimulus abhängigen Noise rauszumitteln
|
|
save_names = [
|
|
'calc_RAM_overview-noise_data9_nfft1sec_original__StimPreSaved4__mean5__CutatBeginning_0.05_s_NeurDelay_0.005_s',
|
|
'calc_RAM_overview-noise_data9_nfft1sec_original__StimPreSaved4__mean5__CutatBeginning_0.05_s_NeurDelay_0.005_s__burstIndividual_',
|
|
'calc_RAM_overview-noise_data9_nfft1sec_original__StimPreSaved4__mean5__CutatBeginning_0.05_s_NeurDelay_0.005_s',
|
|
'calc_RAM_overview-noise_data9_nfft1sec_original__StimPreSaved4__mean5__CutatBeginning_0.05_s_NeurDelay_0.005_s__burstIndividual_',
|
|
]
|
|
|
|
x_axis = ["cv_base", "cv_base_w_burstcorr", "cv_stim_wo_burstcorr", "cv_stim_w_burstcorr"]
|
|
x_axis = ["cv_stim_wo_burstcorr", "cv_stim_wo_burstcorr", "cv_stim_w_burstcorr", "cv_stim_w_burstcorr"]
|
|
x_axis = ["cv_base", "cv_base", "cv_base_w_burstcorr", "cv_base_w_burstcorr"]
|
|
|
|
save_names_title = ['No burst correction', 'Burst correction', 'No burst correction',
|
|
'Burst correction']
|
|
# embed()
|
|
counter = 0
|
|
# for ss, save_name in enumerate(save_names):
|
|
# cv_names = ['cv_stim_w_burstcorr']
|
|
for cv_n, cv_name in enumerate(x_axis):
|
|
|
|
# todo: das hier noch resaven:
|
|
# if subfolder == ''
|
|
# load_data
|
|
# version_comp, subfolder, mod_name_slash, mod_name, subfolder_path = find_code_vs_not()
|
|
# if subfolder == '':
|
|
frame_load = load_overview_susept(save_names[cv_n])
|
|
|
|
colors = colors_overview()
|
|
|
|
cell_types = [' P-unit', ' Ampullary', ]
|
|
|
|
for c, cell_type_here in enumerate(cell_types):
|
|
|
|
cell_type = frame_load['cell_type_reclassified'] # 'celltype' 'cell_type_reclassified'
|
|
p_pos = np.where(np.array(cell_type) == cell_type_here) # ' P-unit'
|
|
frame = frame_load.loc[p_pos]
|
|
|
|
for s, score in enumerate(scores):
|
|
# todo: hier den Übergang womöglich soft machen
|
|
mod_limits = mod_lims_modulation(cell_type_here, frame_load, score)
|
|
if cell_type_here == ' P-unit':
|
|
cm = 'Blues'
|
|
else:
|
|
cm = 'Greens'
|
|
cmap = rainbow_cmap(np.arange(len(mod_limits) * 1.6), nrs=len(mod_limits) * 1.6, cm=cm)[
|
|
::-1] # len(amps)
|
|
cmap = cmap[0:len(mod_limits)][::-1]
|
|
for ff, amp in enumerate(range(len(mod_limits) - 1)):
|
|
file_names = ['InputArr_50to100hz_30',
|
|
'InputArr_150to200hz_30', 'InputArr_250to300hz_30',
|
|
'InputArr_350to400hz_30',
|
|
'InputArr_50hz_30', 'gwn50Hz10s0.3', 'gwn50Hz50s0.3', 'gwn100Hz10s0.3',
|
|
'gwn150Hz10s0.3',
|
|
'gwn300Hz10s0.3', 'gwn300Hz10s0.3short', 'gwn300Hz50s0.3', 'InputArr_400hz_30'
|
|
]
|
|
|
|
##############
|
|
# Auschlusskriterium 1, nur RAMs die bei Null anfangen
|
|
file_names_there = ['gwn150Hz10s0.3',
|
|
'gwn300Hz10s0.3', 'gwn300Hz10s0.3short', 'gwn300Hz50s0.3', 'InputArr_400hz_30'
|
|
]
|
|
|
|
frame_amp = frame[(frame['response_modulation'] > mod_limits[ff]) & (
|
|
frame['response_modulation'] <= mod_limits[ff + 1])]
|
|
# embed()
|
|
try:
|
|
frame_file_ex = frame_amp[frame_amp.file_name.isin(file_names_there)]
|
|
except:
|
|
print('file thing')
|
|
embed()
|
|
##############
|
|
# Auschlusskriterium 2, mindestens 9 Sekunden
|
|
frame_file_ex = frame_file_ex[frame_file_ex.snippets == 9]
|
|
print(len(file_names))
|
|
|
|
frame_file = frame_file_ex # frame_file_ex[frame_file_ex[var_name] == file]
|
|
|
|
##############
|
|
# Auschlusskriterium 3, kleiner als 10 % Kontrast
|
|
# oder nicht ausschließen und stattdessen Modulation Farben!
|
|
# frame_amp = frame_file[frame_file.amp < 9]
|
|
cvs = frame_file[cv_name] #
|
|
|
|
x_axis = cvs[frame_file[score] > 0]
|
|
y_axis = np.array(frame_file[score])[frame_file[score] > 0]
|
|
ax[counter].set_title(save_names_title[cv_n])
|
|
max_val = 1.5
|
|
try:
|
|
ax[counter].scatter(x_axis[x_axis < max_val], y_axis[x_axis < max_val],
|
|
alpha=1,
|
|
s=2.5, color=cmap[
|
|
ff], ) ##0.45 colors[' P-unit']label = cell_type_here[1]+':'+' '+str(file), marker = marker,
|
|
except:
|
|
print('axs thing3')
|
|
embed()
|
|
ax[counter].set_xlabel(cv_name)
|
|
test = False
|
|
if test:
|
|
for ff in range(len(cmap)):
|
|
plt.plot([1, 2], [1, 2 * ff], color=cmap[ff])
|
|
plt.show()
|
|
# embed()
|
|
if counter == 0:
|
|
ax[counter].set_ylabel(score) # cell_type_here+, transform=ax[counter,l].transAxes
|
|
ax[counter].set_xlim(0, max_val)
|
|
# embed()
|
|
counter += 1
|
|
return cell_type_here, score
|
|
|
|
|
|
def plt_data_overview(ax, scores=['perc95_perc5_fr']):
|
|
save_names = [
|
|
'calc_RAM_overview-noise_data9_nfft1sec_original__StimPreSaved4__mean5__CutatBeginning_0.05_s_NeurDelay_0.005_s',
|
|
'calc_RAM_overview-noise_data9_nfft1sec_original__StimPreSaved4__mean5__CutatBeginning_0.05_s_NeurDelay_0.005_s__burstIndividual_',
|
|
'calc_RAM_overview-noise_data9_nfft1sec_original__StimPreSaved4__mean5__CutatBeginning_0.05_s_NeurDelay_0.005_s',
|
|
'calc_RAM_overview-noise_data9_nfft1sec_original__StimPreSaved4__mean5__CutatBeginning_0.05_s_NeurDelay_0.005_s__burstIndividual_',
|
|
]
|
|
|
|
x_axis = ["cv_base", "cv_base_w_burstcorr", "cv_stim_wo_burstcorr", "cv_stim_w_burstcorr"]
|
|
|
|
save_names_title = ['No burst correction (cv_base)', 'Burst correction (cv_base)', 'No burst correction (cv_stim)',
|
|
'Burst correction (cv_stim)']
|
|
# embed()
|
|
counter = 0
|
|
# for ss, save_name in enumerate(save_names):
|
|
# cv_names = ['cv_stim_w_burstcorr']
|
|
for cv_n, cv_name in enumerate(x_axis):
|
|
|
|
# todo: das hier noch resaven:
|
|
# if subfolder == ''
|
|
# load_data
|
|
# version_comp, subfolder, mod_name_slash, mod_name, subfolder_path = find_code_vs_not()
|
|
# if subfolder == '':
|
|
frame_load = load_overview_susept(save_names[cv_n])
|
|
|
|
colors = colors_overview()
|
|
|
|
cell_types = [' P-unit', ' Ampullary', ]
|
|
|
|
for c, cell_type_here in enumerate(cell_types):
|
|
|
|
cell_type = frame_load['celltype'] # 'cell_type_reclassified'
|
|
p_pos = np.where(np.array(cell_type) == cell_type_here) # ' P-unit'
|
|
frame = frame_load.loc[p_pos]
|
|
|
|
for s, score in enumerate(scores):
|
|
|
|
file_names = ['InputArr_50to100hz_30',
|
|
'InputArr_150to200hz_30', 'InputArr_250to300hz_30',
|
|
'InputArr_350to400hz_30',
|
|
'InputArr_50hz_30', 'gwn50Hz10s0.3', 'gwn50Hz50s0.3', 'gwn100Hz10s0.3',
|
|
'gwn150Hz10s0.3',
|
|
'gwn300Hz10s0.3', 'gwn300Hz10s0.3short', 'gwn300Hz50s0.3', 'InputArr_400hz_30'
|
|
]
|
|
|
|
##############
|
|
# Auschlusskriterium 1, nur RAMs die bei Null anfangen
|
|
file_names_there = ['gwn150Hz10s0.3',
|
|
'gwn300Hz10s0.3', 'gwn300Hz10s0.3short', 'gwn300Hz50s0.3', 'InputArr_400hz_30'
|
|
]
|
|
|
|
frame_file_ex = frame[frame.file_name.isin(file_names_there)]
|
|
|
|
##############
|
|
# Auschlusskriterium 2, mindestens 9 Sekunden
|
|
frame_file_ex = frame_file_ex[frame_file_ex.snippets == 9]
|
|
print(len(file_names))
|
|
|
|
frame_file = frame_file_ex # frame_file_ex[frame_file_ex[var_name] == file]
|
|
|
|
##############
|
|
# Auschlusskriterium 3, kleiner als 10 % Kontrast
|
|
frame_amp = frame_file[frame_file.amp < 9]
|
|
cvs = frame_amp[cv_name] #
|
|
|
|
x_axis = cvs[frame_amp[score] > 0]
|
|
y_axis = np.array(frame_amp[score])[frame_amp[score] > 0]
|
|
ax[counter].set_title(save_names_title[cv_n])
|
|
max_val = 1.5
|
|
try:
|
|
ax[counter].scatter(x_axis[x_axis < max_val], y_axis[x_axis < max_val],
|
|
color=colors[cell_type_here], alpha=0.45,
|
|
s=5) # colors[' P-unit']label = cell_type_here[1]+':'+' '+str(file), marker = marker,
|
|
except:
|
|
print('axs thing4')
|
|
embed()
|
|
ax[counter].set_xlabel(cv_name)
|
|
|
|
if counter == 0:
|
|
ax[counter].set_ylabel(score) # cell_type_here+, transform=ax[counter,l].transAxes
|
|
ax[counter].set_xlim(0, max_val)
|
|
# embed()
|
|
counter += 1
|
|
return cell_type_here, score
|
|
|
|
|
|
def plt_power2(spikes_all_here, colors, cell_type, axp, color='blue'):
|
|
spikes_mat = [[]] * len(spikes_all_here)
|
|
sampling_calc = 40000
|
|
nfft = 2 ** 14
|
|
p_array = [[]] * len(spikes_all_here)
|
|
alpha = 1
|
|
for s, sp in enumerate(spikes_all_here):
|
|
spikes_mat[s] = cr_spikes_mat(np.array(sp) / 1000, sampling_rate=sampling_calc,
|
|
length=int(sampling_calc * np.array(sp[-1]) / 1000))
|
|
|
|
p_array[s], f_array = ml.psd(spikes_mat[s] - np.mean(spikes_mat[s]), Fs=sampling_calc, NFFT=nfft,
|
|
noverlap=nfft // 2)
|
|
axp.plot(f_array, p_array[s], alpha=float(alpha - 0.05 * s), color=color) # color=colors[str(cell_type)],
|
|
# axp.set_title('fr saved ' + str(np.round(fr)) + ' fr calc ' + str(np.round(frs_calc_both[g][s])))
|
|
# embed()
|
|
# plt_peaks(axp, p_array[s], [fr], f_array,alpha = 0.5, s=25, fr_color = 'red')
|
|
# plt_peaks(axp, p_array[s], [frs_calc[s]], f_array, alpha = 0.5, s=25, fr_color = 'orange')
|
|
|
|
axp.set_xlim(0, 1000)
|
|
axp.set_xlabel('Hz')
|
|
axp.set_ylabel('Hz')
|
|
return p_array, f_array
|
|
|
|
|
|
def find_names_gwn(b):
|
|
names_mt_gwns = []
|
|
for mts in b.multi_tags:
|
|
if find_gwn(mts):
|
|
names_mt_gwns.append(mts.name)
|
|
return names_mt_gwns
|
|
|
|
|
|
def find_gwn(trials):
|
|
return ('file' in trials.name) or ('noise' in trials.name) or ('gwn' in trials.name) or (
|
|
'InputArr' in trials.name) or (
|
|
'FileStimulus-file-gaussian' in trials.name)
|
|
|
|
|
|
def model_and_data_isi_power(nr_clim=10, many=False, width=0.005, row='no', HZ50=True, fs=8, hs=0.39, redo=False,
|
|
nffts=['whole'],
|
|
powers=[1], cells=["2013-01-08-aa-invivo-1"], col_desired=2, var_items=['contrasts'],
|
|
show=False,
|
|
contrasts=[0], noises_added=[''], fft_i='forward', fft_o='forward', spikes_unit='Hz',
|
|
mV_unit='mV',
|
|
D_extraction_method=['additiv_visual_d_4_scaled'], internal_noise=['eRAM'],
|
|
external_noise=['eRAM'], level_extraction=['_RAMdadjusted'], cut_off2=300,
|
|
repeats=[1000000],
|
|
receiver_contrast=[1], dendrids=[''], ref_types=[''], adapt_types=[''], c_noises=[0.1],
|
|
c_signal=[0.9],
|
|
cut_offs1=[300], clims='all', restrict='restrict', label=r'$\frac{1}{mV^2S}$'):
|
|
# plot_style()
|
|
|
|
duration_noise = '_short',
|
|
formula = 'code' ##'formula'
|
|
# ,int(2 ** 16) int(2 ** 16), int(2 ** 15),
|
|
stimulus_length = 1 # 20#550 # 30 # 15#45#0.5#1.5 15 45 100
|
|
trials_nrs = [1] # [100, 500, 1000, 3000, 10000, 100000, 1000000] # 500
|
|
stimulus_type = '_StimulusOrig_' # ,#
|
|
# ,3]#, 3, 1, 1.5, 0.5, ] # ,1,1.5, 0.5] #[1,1.5, 0.5] # 1.5,0.5]3, 1,
|
|
variant = 'sinz'
|
|
mimick = 'no'
|
|
cell_recording_save_name = ''
|
|
trans = 1 # 5
|
|
repeats = [9] # 30
|
|
powers = [3] # ,1]
|
|
# ,100000]
|
|
aa = 0
|
|
good_data, remaining = overlap_cells()
|
|
cells_all = good_data
|
|
# embed()
|
|
for cell, var_type, stim_type_afe, stim_type_noise, power, nfft, dendrid, trial_nr, cut_off1, c_sig, c_noise, ref_type, adapt_type, noise_added, extract, a_fr, a_fe, in it.product(
|
|
cells, D_extraction_method, external_noise, internal_noise, powers, nffts, dendrids, cut_offs1, trials_nrs,
|
|
c_signal,
|
|
c_noises,
|
|
ref_types, adapt_types, noises_added, level_extraction, receiver_contrast, contrasts, ):
|
|
# print(trials_stim,stim_type_noise, power, nfft, a_fe,a_fr, dendrid, cut_off1,trial_nrs)
|
|
# print(trial_nrs, stim_type_noise, trials_stim, power, nfft, a_fe, a_fr, var_type, cut_off1,trial_nrs)
|
|
aa += 1
|
|
# embed()
|
|
if row == 'no':
|
|
col, row = find_row_col(np.arange(aa), col=col_desired) # np.arange(
|
|
else:
|
|
col = col_desired
|
|
if row == 2:
|
|
default_settings(column=2, length=7.5) # 2+2.25+2.25
|
|
elif row == 1:
|
|
default_settings(column=2, length=4)
|
|
col = 3
|
|
row = 5 # 1.2
|
|
grid = gridspec.GridSpec(1, 4, wspace=0.6, bottom=0.075,
|
|
hspace=0.13, left=0.08, right=0.93, top=0.88, width_ratios=[0.7, 1, 1, 1])
|
|
|
|
|
|
a = 0
|
|
maxs = []
|
|
mins = []
|
|
ims = []
|
|
perc05 = []
|
|
perc95 = []
|
|
iternames = [D_extraction_method, external_noise,
|
|
internal_noise, powers, nffts, dendrids, cut_offs1, trials_nrs, c_signal,
|
|
c_noises,
|
|
ref_types, adapt_types, noises_added, level_extraction, receiver_contrast, contrasts, ]
|
|
|
|
nr = '2'
|
|
print(cells_all)
|
|
# embed()
|
|
for all in it.product(*iternames):
|
|
|
|
var_type, stim_type_afe, stim_type_noise, power, nfft, dendrid, cut_off1, trial_nrs, c_sig, c_noise, ref_type, adapt_type, noise_added, extract, a_fr, a_fe = all
|
|
# print(trials_stim,stim_type_noise, power, nfft, a_fe,a_fr, dendrid, var_type, cut_off1,trial_nrs)
|
|
fig = plt.figure()
|
|
|
|
hs = 0.45
|
|
|
|
#################################
|
|
# model cells
|
|
adapt_type_name, ax_model, cells_all, dendrid_name, ref_type_name, suptitles, width = plt_model_part(HZ50, a,
|
|
a_fe, a_fr,
|
|
adapt_type,
|
|
c_noise,
|
|
c_sig,
|
|
cell_recording_save_name,
|
|
cells_all,
|
|
cut_off1,
|
|
cut_off2,
|
|
dendrid,
|
|
duration_noise,
|
|
extract,
|
|
fft_i,
|
|
fft_o, fig,
|
|
formula,
|
|
fs,
|
|
grid, hs,
|
|
ims,
|
|
mV_unit,
|
|
many, maxs,
|
|
mimick,
|
|
mins, nfft,
|
|
noise_added,
|
|
nr, perc05,
|
|
perc95,
|
|
power,
|
|
ref_type,
|
|
repeats,
|
|
spikes_unit,
|
|
stim_type_afe,
|
|
stim_type_noise,
|
|
stimulus_length,
|
|
stimulus_type,
|
|
trans,
|
|
trial_nrs,
|
|
var_items,
|
|
var_type,
|
|
variant,
|
|
width)
|
|
|
|
#################################
|
|
# data cells
|
|
# embed()
|
|
grid_data = gridspec.GridSpecFromSubplotSpec(len(cells_all), 1, grid[1],
|
|
hspace=hs)
|
|
|
|
ax_data, stack_spikes_all, eod_frs = plt_data_susept(fig, grid_data, cells_all, cell_type='p-unit', width=width,
|
|
cbar_label=False)
|
|
for ax in ax_data:
|
|
ax.set_ylabel(F2_xlabel())
|
|
#################################
|
|
# plt isi of data
|
|
grid_isi = gridspec.GridSpecFromSubplotSpec(len(cells_all), 1, grid[0],
|
|
hspace=hs)
|
|
# embed()
|
|
ax_isi = plt_isi(cells_all, grid_isi, stack_spikes=stack_spikes_all, eod_frs=eod_frs)
|
|
|
|
# axes.join
|
|
ax_isi[0].get_shared_x_axes().join(*ax_isi)
|
|
|
|
end_name = suptitles + ' a_fr=' + str(a_fr) + ' ' + ' dendride=' + str(
|
|
dendrid_name) + ' refractory period=' + str(ref_type_name) + ' adapt=' + str(
|
|
adapt_type_name) + ' ' + ' cutoff1=' + str(cut_off1) + '' ' stimulus length=' + str(
|
|
stimulus_length) + ' ' + ' power=' + str(
|
|
power) + ' ' + restrict #
|
|
end_name = cut_title(end_name, datapoints=120)
|
|
name_title = end_name
|
|
plt.suptitle(name_title) # +' file '
|
|
|
|
set_clim_same_here(ims, perc05, perc95, mins, maxs, nr_clim, clims)
|
|
# plt.subplots_adjust(top=0.7, hspace=0.57, right=0.97, left=0.05) # , hspace = 0.6, wspace = 0.5
|
|
|
|
# name_save = cell + end_name_save.replace(':', '')
|
|
# individual_tag = name_save.replace(' ', '')
|
|
# individual_tag = individual_tag.replace('\n', '')
|
|
# fig = plt.gcf()
|
|
# embed()
|
|
# ax_isi = np.array(fig.axes)
|
|
# ax_isi.reshape(5,4)
|
|
# embed()
|
|
axes = np.array([np.array(ax_data), np.array(ax_model[0:int(len(ax_model) / 2)]),
|
|
np.array(ax_model[int(len(ax_model) / 2)::]), np.array(ax_isi)])
|
|
fig.tag(np.transpose(axes), xoffs=-3, yoffs=2.9, minor_index=2)
|
|
|
|
save_visualization(pdf=True)
|
|
# if show:
|
|
# plt.show()
|
|
# save_all(0, individual_tag, show, '')
|
|
|
|
|
|
def model_and_data(width=0.005, nffts=['whole'], powers=[1], cells=["2013-01-08-aa-invivo-1"], show=False,
|
|
contrasts=[0], noises_added=[''], D_extraction_method=['additiv_cv_adapt_factor_scaled'],
|
|
internal_noise=['RAM'], external_noise=['RAM'], level_extraction=[''], receiver_contrast=[1],
|
|
dendrids=[''], ref_types=[''], adapt_types=[''], c_noises=[0.1], c_signal=[0.9], cut_offs1=[300],
|
|
label=r'$\frac{1}{mV^2S}$'): # ['eRAM']
|
|
# plot_style()#['_RAMscaled']'_RAMscaled'
|
|
|
|
duration_noise = '_short',
|
|
formula = 'code' ##'formula'
|
|
# ,int(2 ** 16) int(2 ** 16), int(2 ** 15),
|
|
stimulus_length = 1 # 20#550 # 30 # 15#45#0.5#1.5 15 45 100
|
|
trials_nrs = [1] # [100, 500, 1000, 3000, 10000, 100000, 1000000] # 500
|
|
stimulus_type = '_StimulusOrig_' # ,#
|
|
# ,3]#, 3, 1, 1.5, 0.5, ] # ,1,1.5, 0.5] #[1,1.5, 0.5] # 1.5,0.5]3, 1,
|
|
variant = 'sinz'
|
|
mimick = 'no'
|
|
cell_recording_save_name = ''
|
|
trans = 1 # 5
|
|
rep = 1000000 # 500000#0
|
|
repeats = [20, rep] # 250000
|
|
aa = 0
|
|
good_data, remaining = overlap_cells()
|
|
cells_all = [good_data[0]]
|
|
|
|
plot_style()
|
|
default_settings(column=2, length=4.9) # 0.75
|
|
grid = gridspec.GridSpec(3, 4, wspace=0.95, bottom=0.07,
|
|
hspace=0.23, left=0.09, right=0.9, top=0.92)
|
|
|
|
a = 0
|
|
maxs = []
|
|
mins = []
|
|
mats = []
|
|
ims = []
|
|
perc05 = []
|
|
perc95 = []
|
|
iternames = [D_extraction_method, external_noise,
|
|
internal_noise, powers, nffts, dendrids, cut_offs1, trials_nrs, c_signal,
|
|
c_noises,
|
|
ref_types, adapt_types, noises_added, level_extraction, receiver_contrast, contrasts, ]
|
|
|
|
nr = '2'
|
|
# embed()
|
|
# cell_contrasts = ["2013-01-08-aa-invivo-1"]
|
|
# cells_triangl_contrast = np.concatenate([cells_all,cell_contrasts])
|
|
# cells_triangl_contrast = 1
|
|
# cell_contrasts = 1
|
|
|
|
rows = len(cells_all) # len(good_data)+len(cell_contrasts)
|
|
perc = 'perc'
|
|
lp = 2
|
|
label_model = r'Nonlinearity $\frac{1}{S}$'
|
|
for all in it.product(*iternames):
|
|
|
|
var_type, stim_type_afe, stim_type_noise, power, nfft, dendrid, cut_off1, trial_nrs, c_sig, c_noise, ref_type, adapt_type, noise_added, extract, a_fr, a_fe = all
|
|
# print(trials_stim,stim_type_noise, power, nfft, a_fe,a_fr, dendrid, var_type, cut_off1,trial_nrs)
|
|
fig = plt.figure()
|
|
|
|
hs = 0.45
|
|
|
|
#################################
|
|
# data cells
|
|
# embed()
|
|
grid_data = gridspec.GridSpecFromSubplotSpec(1, 1, grid[0, 1],
|
|
hspace=hs)
|
|
|
|
ax_data, stack_spikes_all, eod_frs = plt_data_susept(fig, grid_data, cells_all, cell_type='p-unit', width=width,
|
|
cbar_label=True, lp=lp, title=True)
|
|
for ax in ax_data:
|
|
# ax.set_ylabel(F2_xlabel())
|
|
# remove_xticks(ax)
|
|
ax.set_xticks_delta(100)
|
|
set_ylabel_arrow(ax, xpos=xpos_y_modelanddata(), ypos=0.87)
|
|
set_xlabel_arrow(ax)
|
|
# ax.text(-0.42, 0.87, F2_xlabel(), ha='center', va='center',
|
|
# transform=ax.transAxes, rotation = 90)
|
|
#ax.text(1.66, 0.5, nonlin_title(), rotation=90, ha='center', va='center',
|
|
# transform=ax.transAxes)
|
|
|
|
ax.arrow_spines('lb')
|
|
|
|
##################################
|
|
# model part
|
|
|
|
trial_nr = 500000
|
|
cell = '2013-01-08-aa-invivo-1'
|
|
cell = '2012-07-03-ak-invivo-1'
|
|
cells_given = [cell]
|
|
save_name_rev = load_folder_name(
|
|
'calc_model') + '/' + 'calc_RAM_model-2__nfft_whole_power_1_RAM_additiv_cv_adapt_factor_scaled_cNoise_0.1_cSig_0.9_cutoff1_300_cutoff2_300no_sinz_length1_TrialsStim_' + str(
|
|
trial_nr) + '_a_fr_1__trans1s__TrialsNr_1_fft_o_forward_fft_i_forward_Hz_mV_revQuadrant_'
|
|
# for trial in trials:#.009
|
|
save_names = [
|
|
'calc_RAM_model-2__nfft_whole_power_1_afe_0.009_RAM_cutoff1_300_cutoff2_300no_sinz_length1_TrialsStim_11_a_fr_1__trans1s__TrialsNr_1_fft_o_forward_fft_i_forward_Hz_mV',
|
|
'calc_RAM_model-2__nfft_whole_power_1_afe_0.009_RAM_cutoff1_300_cutoff2_300no_sinz_length1_TrialsStim_500000_a_fr_1__trans1s__TrialsNr_1_fft_o_forward_fft_i_forward_Hz_mV',
|
|
|
|
'calc_RAM_model-2__nfft_whole_power_1_RAM_additiv_cv_adapt_factor_scaled_cNoise_0.1_cSig_0.9_cutoff1_300_cutoff2_300no_sinz_length1_TrialsStim_11_a_fr_1__trans1s__TrialsNr_1_fft_o_forward_fft_i_forward_Hz_mV',
|
|
'calc_RAM_model-2__nfft_whole_power_1_RAM_additiv_cv_adapt_factor_scaled_cNoise_0.1_cSig_0.9_cutoff1_300_cutoff2_300no_sinz_length1_TrialsStim_500000_a_fr_1__trans1s__TrialsNr_1_fft_o_forward_fft_i_forward_Hz_mV',
|
|
|
|
'calc_RAM_model-2__nfft_whole_power_1_afe_0.009_RAM_RAM_additiv_cv_adapt_factor_scaled_cNoise_0.1_cSig_0.9_cutoff1_300_cutoff2_300no_sinz_length1_TrialsStim_11_a_fr_1__trans1s__TrialsNr_1_fft_o_forward_fft_i_forward_Hz_mV',
|
|
'calc_RAM_model-2__nfft_whole_power_1_afe_0.009_RAM_RAM_additiv_cv_adapt_factor_scaled_cNoise_0.1_cSig_0.9_cutoff1_300_cutoff2_300no_sinz_length1_TrialsStim_500000_a_fr_1__trans1s__TrialsNr_1_fft_o_forward_fft_i_forward_Hz_mV',
|
|
|
|
]
|
|
|
|
nrs_s = [2, 3, 6, 7, 10, 11]
|
|
titles = ['Trials=11 c=0.01', 'Trials=500000 c=0.01', 'Trials=11 \n Intrinsic split',
|
|
'Trials=500000\n Intrinsic split', 'Trials=11 c=0.01\n Intrinsic split',
|
|
'Trials=500000 c=0.01\n Intrinsic split']
|
|
ax_model = []
|
|
|
|
for s, sav_name in enumerate(save_names):
|
|
try:
|
|
ax = plt.subplot(grid[nrs_s[s]])
|
|
except:
|
|
print('vers something')
|
|
embed()
|
|
ax_model.append(ax)
|
|
|
|
save_name = load_folder_name('calc_model') + '/' + sav_name
|
|
|
|
cell_add, cells_save = find_cell_add(cells_given)
|
|
perc = 'perc'
|
|
|
|
path = save_name + '.pkl' # '../'+
|
|
# stack = get_stack_one_quadrant(cell, cell_add, cells_save, path, save_name)
|
|
|
|
# full_matrix = create_full_matrix2(np.array(stack), np.array(stack_rev))
|
|
# stack_final = get_axis_on_full_matrix(full_matrix, stack)
|
|
# im = plt_RAM_perc(ax, perc, np.abs(stack))
|
|
#embed()
|
|
stack = load_model_susept(path, cells_save, save_name.split(r'/')[-1] + cell_add)
|
|
|
|
add_nonlin_title, cbar, fig, stack_plot, im = plt_single_square_modl(ax, cell, stack, perc, titles[s],
|
|
width, titles_plot=True, resize=True)
|
|
|
|
# if s in [1,3,5]:
|
|
|
|
ims.append(im)
|
|
mats.append(stack_plot)
|
|
maxs.append(np.max(np.array(stack_plot)))
|
|
mins.append(np.min(np.array(stack_plot)))
|
|
col = 2
|
|
row = 3
|
|
ax.set_xticks_delta(100)
|
|
ax.set_yticks_delta(100)
|
|
#cbar[0].set_label(nonlin_title(add_nonlin_title)) # , labelpad=100
|
|
cbar.set_label(nonlin_title(' ['+add_nonlin_title), labelpad=lp) # rotation=270,
|
|
|
|
if (s in np.arange(col - 1, 100, col)) | (s == 0):
|
|
remove_yticks(ax)
|
|
else:
|
|
set_ylabel_arrow(ax, xpos=xpos_y_modelanddata(), ypos=0.87)
|
|
|
|
if s >= row * col - col:
|
|
set_xlabel_arrow(ax)
|
|
# ax.set_xlabel(F1_xlabel(), labelpad=20)
|
|
else:
|
|
remove_xticks(ax)
|
|
|
|
if len(cells) > 1:
|
|
a += 1
|
|
|
|
set_clim_same_here(ims, mats=mats, lim_type='up', nr_clim='perc', clims='', percnr=95)
|
|
|
|
#################################################
|
|
# Flowcharts
|
|
|
|
var_types = ['', 'additiv_cv_adapt_factor_scaled', 'additiv_cv_adapt_factor_scaled']
|
|
##additiv_cv_adapt_factor_scaled
|
|
a_fes = [0.009, 0, 0.009]
|
|
eod_fe = [750, 750, 750]
|
|
ylim = [-0.5, 0.5]
|
|
c_sigs = [0, 0.9, 0.9]
|
|
grid_left = [[], grid[1, 0], grid[2, 0]]
|
|
ax_ams = []
|
|
for g, grid_here in enumerate([grid[0, 0], grid[1, 1], grid[2, 1]]):
|
|
grid_lowpass = gridspec.GridSpecFromSubplotSpec(3, 1,
|
|
subplot_spec=grid_here, hspace=0.2, height_ratios = [1,1,0.1])
|
|
|
|
models = resave_small_files("models_big_fit_d_right.csv", load_folder='calc_model_core')
|
|
model_params = models[models['cell'] == '2012-07-03-ak-invivo-1'].iloc[0]
|
|
cell = model_params.pop('cell') # .iloc[0]# Werte für das Paper nachschauen
|
|
eod_fr = model_params['EODf'] # .iloc[0]
|
|
deltat = model_params.pop("deltat") # .iloc[0]
|
|
v_offset = model_params.pop("v_offset") # .iloc[0]
|
|
# embed()eod_fr = stack.eod_fr.iloc[0]
|
|
print(var_types[g] + ' a_fe ' + str(a_fes[g]))
|
|
noise_final_c, spike_times, stimulus, stimulus_here, time, v_dent_output, v_mem_output,frame = get_flowchart_params(
|
|
a_fes, a_fr, g, c_sigs[g], cell, deltat, eod_fr, model_params, stimulus_length, v_offset, var_types,
|
|
eod_fe=eod_fe)
|
|
#embed()
|
|
|
|
|
|
if (len(np.unique(frame.RAM_afe)) > 1) & (len(np.unique(frame.RAM_noise)) > 1):
|
|
grid_lowpass2 = gridspec.GridSpecFromSubplotSpec(2, 1,
|
|
subplot_spec=grid_left[g], hspace=0.2)
|
|
|
|
#if (np.unique(frame.RAM_afe) != 0):
|
|
|
|
axt_p2 = plt_time_arrays('red', grid_lowpass2, 1, frame.RAM_afe, time=time, nr=0)
|
|
#if (np.unique(frame.RAM_noise) != 0):
|
|
axt_p2 = plt_time_arrays('purple', grid_lowpass2, 1, frame.RAM_noise, time=time, nr=0)
|
|
axt_p2.text(-0.6, 0.5,'$\%$',rotation = 90, va = 'center', transform=axt_p2.transAxes)
|
|
#ax_ams.append(axt_p2)
|
|
color_timeseries = 'black'
|
|
axt_p2.set_xlabel('Time [ms]')
|
|
axt_p2.text(-0.6, 0.5,'$\%$', rotation = 90, va = 'center', transform=axt_p2.transAxes)
|
|
ax_ams.append(axt_p2)
|
|
|
|
elif (len(np.unique(frame.RAM_afe)) > 1):
|
|
color_timeseries = 'red'
|
|
elif (len(np.unique(frame.RAM_noise)) > 1):
|
|
color_timeseries = 'purple'
|
|
print(str(g)+' afevar '+str(np.var(frame.RAM_afe))+' afenoise '+str(np.var(frame.RAM_noise)))
|
|
try:
|
|
ax, ff, pp, ff_am, pp_am = plot_lowpass2([grid_lowpass[0]], time, frame.RAM_afe + frame.RAM_noise, deltat, eod_fr,
|
|
color1=color_timeseries, lw=1, extract = False)
|
|
except:
|
|
print('add up thing')
|
|
embed()
|
|
ax.text(-0.6, 0.5,'$\%$', va = 'center', rotation = 90,transform=ax.transAxes)
|
|
#if (len(np.unique(frame.RAM_afe)) > 1) & (len(np.unique(frame.RAM_noise)) > 1):
|
|
# remove_yticks(ax)
|
|
|
|
ax_ams.append(ax)
|
|
remove_xticks(ax)
|
|
#embed()
|
|
ax_n, ff, pp, ff_am, pp_am = plot_lowpass2([grid_lowpass[1]], time, noise_final_c, deltat, eod_fr,
|
|
extract=False, color1='grey', lw = 1)
|
|
remove_yticks(ax_n)
|
|
if g == 1:
|
|
remove_xticks(ax_n)
|
|
else:
|
|
ax_n.set_xlabel('Time [ms]')
|
|
ax_n.set_ylim(ylim)
|
|
|
|
set_same_ylim(ax_ams, up ='up')
|
|
#embed()
|
|
axes = np.concatenate([ax_data,ax_model])
|
|
axes = [ax_ams[0], axes[0], axes[1], axes[2],ax_ams[1], axes[3], axes[4],ax_ams[2],ax_ams[3],axes[5], axes[6],]
|
|
fig.tag(axes, xoffs=-3, yoffs=2)
|
|
|
|
save_visualization(pdf=True)
|
|
|
|
|
|
def xpos_y_modelanddata():
|
|
return -0.52
|
|
|
|
|
|
def F1_xlabel():
|
|
return '$f_{1}$\,[Hz]'
|
|
|
|
|
|
def plt_model_part(HZ50, a, a_fe, a_fr, adapt_type, c_noise, c_sig, cell_recording_save_name, cells_all,
|
|
cut_off1, cut_off2, dendrid, duration_noise, extract, fft_i, fft_o, fig, formula, fs, grid, hs, ims,
|
|
mV_unit, many, maxs, mimick, mins, nfft, noise_added, nr, perc05, perc95, power,
|
|
ref_type, repeats, spikes_unit, stim_type_afe, stim_type_noise, stimulus_length, stimulus_type,
|
|
trans, trial_nrs, var_items, var_type, variant, width, xlabels=True, perc='',
|
|
label=nonlin_title(), rows=2, title=True):
|
|
ax_model = []
|
|
# nrs = [1,2,4]
|
|
for t, trials_stim in enumerate(repeats):
|
|
grid_model = gridspec.GridSpecFromSubplotSpec(rows, 1, grid[2 + t],
|
|
hspace=hs)
|
|
|
|
# embed()
|
|
save_name = save_ram_model(stimulus_length, cut_off1, duration_noise, nfft, a_fe, formula,
|
|
stim_type_noise, mimick, variant, trials_stim, power,
|
|
stimulus_type,
|
|
cell_recording_save_name, nr=nr, fft_i=fft_i, fft_o=fft_o, Hz=spikes_unit,
|
|
mV=mV_unit, stim_type_afe=stim_type_afe, extract=extract,
|
|
noise_added=noise_added,
|
|
c_noise=c_noise, c_sig=c_sig, ref_type=ref_type, adapt_type=adapt_type,
|
|
var_type=var_type, cut_off2=cut_off2, dendrid=dendrid, a_fr=a_fr,
|
|
trials_nr=trial_nrs, trans=trans, zeros='ones')
|
|
|
|
# '../calc_model/noise2__nfft_whole_power_1_eRAM_RAMdadjusted_additiv_visual_d_4_scaled_cNoise_0.1_cSig_0.9_cutoff1_300_cutoff2_300no_sinz_length1_TrialsStim_30_a_fr_1__trans1s__TrialsNr_1_fft_o_forward_fft_i_forward_Hz_mV'
|
|
# embed()
|
|
|
|
path = save_name + '.pkl'
|
|
|
|
# print('path there')
|
|
print(t)
|
|
print(path)
|
|
# cell_add, cells_save = find_cell_add(cells_all)
|
|
|
|
model = load_model_susept(path, cells_all, save_name + 'all') # cells
|
|
# embed()
|
|
adapt_type_name, ref_type_name, dendrid_name, stim_type_noise_name = define_names(var_type, stim_type_noise,
|
|
dendrid, ref_type,
|
|
adapt_type)
|
|
|
|
path_cell_ref = load_folder_name(
|
|
'calc_model') + '/calc_RAM_model-22__nfft_whole_power_1_eRAM_RAMdadjusted_additiv_visual_d_4_scaled_cNoise_0.1_cSig_0.9_cutoff1_300_cutoff2_300no_sinz_length1_TrialsStim_100000_a_fr_1__trans1s__TrialsNr_1_fft_o_forward_fft_i_forward_Hz_mV.pkl'
|
|
# model_sorting = load_model_susept(path_cell_ref, cells, save_name)
|
|
# cells_sorted = model_sorting.cell.iloc[np.argsort(model_sorting.cv_stim)]
|
|
# cells_all = np.array(np.unique(cells_sorted, return_index=True)[0])[
|
|
# np.array(np.argsort(np.unique(cells_sorted, return_index=True)[1]))]
|
|
if len(model) > 0:
|
|
# embed()
|
|
model = model[model.cell.isin(cells_all)] # ('cv_stim')
|
|
# embed()
|
|
try:
|
|
cells_all = model.groupby('cv_stim').first().sort_values(by='cv_stim').cell # ('cv_stim')
|
|
except:
|
|
print('model thing')
|
|
# embed()
|
|
|
|
for c, cell in enumerate(cells_all):
|
|
# embed()
|
|
print(c)
|
|
try:
|
|
ax = plt.subplot(grid_model[c])
|
|
except:
|
|
print('something')
|
|
embed()
|
|
# embed()
|
|
|
|
titles = ''
|
|
suptitles = ''
|
|
stim_type_noise_name2, stim_type_afe_name = stim_type_names(a_fe, c_sig, stim_type_afe,
|
|
stim_type_noise_name)
|
|
|
|
suptitles, titles = find_titles_RAM(a_fe, cell, extract, noise_added, stim_type_afe_name,
|
|
stim_type_noise_name2, suptitles, titles, trials_stim, var_items,
|
|
var_type)
|
|
|
|
model_show = model[
|
|
(model.cell == cell)] # & (model_cell.file_name == file)& (model_cell.power == power)]
|
|
# embed()
|
|
new_keys = model_show.index.unique() # [0:490]
|
|
# np.abs(
|
|
# stack_plot = model_show[list(map(str, new_keys))]
|
|
try:
|
|
stack_plot = model_show[list(map(str, new_keys))]
|
|
except:
|
|
stack_plot = model_show[new_keys]
|
|
stack_plot = stack_plot.iloc[np.arange(0, len(new_keys), 1)]
|
|
stack_plot.columns = list(map(float, stack_plot.columns))
|
|
|
|
ax.set_xlim(0, 300)
|
|
ax.set_ylim(0, 300)
|
|
ax.set_aspect('equal')
|
|
ax.set_xticks_delta(100)
|
|
ax.set_yticks_delta(100)
|
|
ax.arrow_spines('lb')
|
|
# embed()
|
|
# model_cells = pd.read_csv(load_folder_name('calc_model_core')+"\models_big_fit_d_right.csv")
|
|
model_cells = resave_small_files("models_big_fit_d_right.csv")
|
|
|
|
model_params = model_cells[model_cells['cell'] == cell]
|
|
# embed()
|
|
if len(model_show) > 0:
|
|
noise_strength = model_params.noise_strength.iloc[0] # **2/2
|
|
D = noise_strength # (noise_strength ** 2) / 2
|
|
D_derived, var, cut_off = D_derive(model_show, save_name, c_sig, D=D, base='', nr=nr) # var_based
|
|
|
|
stack_plot = RAM_norm(stack_plot, trials_stim, D_derived, model_show=model_show)
|
|
# embed()
|
|
|
|
if many == True:
|
|
titles = titles + ' Ef=' + str(int(model_params.EODf.iloc[0]))
|
|
color = title_color(cell)
|
|
# print(color)
|
|
if title:
|
|
if t == 0:
|
|
ax.set_title(
|
|
titles + ' $fr_{B}$=' + str(int(np.round(model_show.fr.iloc[0]))) + ' $fr_{S}$=' + str(
|
|
int(np.round(model_show.fr_stim.iloc[0]))) + 'Hz\n $cv_{B}$=' + str(
|
|
np.round(model_show.cv.iloc[0], 2)) + ' $cv_{S}$=' + str(
|
|
np.round(model_show.cv_stim.iloc[0], 2)) + ' s=' + str(
|
|
np.round(model_show.ser_sum_stim.iloc[0], 2)), fontsize=fs,
|
|
color=color) # + ' $D_{sig}$=' + str(np.round(D_derived, 5))
|
|
# 'perc'
|
|
|
|
im = plt_RAM_perc(ax, perc, stack_plot)
|
|
|
|
ims.append(im)
|
|
maxs.append(np.max(np.array(stack_plot)))
|
|
mins.append(np.min(np.array(stack_plot)))
|
|
perc05.append(np.percentile(stack_plot, 5))
|
|
perc95.append(np.percentile(stack_plot, 95))
|
|
|
|
plt_triangle(ax, model_show.fr.iloc[0], np.round(model_show.fr_stim.iloc[0]),
|
|
model_show.eod_fr.iloc[0], 300)
|
|
if HZ50:
|
|
plt_50_Hz_noise(ax, 300)
|
|
ax.set_aspect('equal')
|
|
|
|
cbar, left, bottom, width, height = colorbar_outside(ax, im, fig, add=0, width=width)
|
|
# cax = divider.append_axes('right', size='5%', pad=0.05)
|
|
# cbar = plt.colorbar(im, ax=ax[a],cax=cax,orientation='vertical')# pad=0.2, shrink=0.5, "horizontal"
|
|
# embed()
|
|
if t == 1:
|
|
# cbar.set_label(nonlin_title(), rotation=90, labelpad=10)
|
|
# embed()
|
|
ax.text(1.5, 0.5, label, rotation=90, ha='center', va='center',
|
|
transform=ax.transAxes)
|
|
|
|
|
|
# ax.set_ylabel(F2_xlabel())
|
|
|
|
# if t == 0:
|
|
# ax.set_ylabel(F2_xlabel())
|
|
|
|
remove_yticks(ax)
|
|
|
|
if (c == len(cells_all) - 1) & (xlabels):
|
|
# ax.set_xlabel(F1_xlabel(), labelpad=20)
|
|
ax.text(1.05, -0.35, F1_xlabel(), ha='center', va='center',
|
|
transform=ax.transAxes)
|
|
ax.arrow_spines('lb')
|
|
else:
|
|
remove_xticks(ax)
|
|
print(c)
|
|
ax_model.append(ax)
|
|
a += 1
|
|
print('model done')
|
|
# embed()
|
|
return adapt_type_name, ax_model, cells_all, dendrid_name, ref_type_name, suptitles, width
|
|
|
|
|
|
def find_titles_RAM(a_fe, cell, extract, noise_added, stim_type_afe_name, stim_type_noise_name2, suptitles, titles,
|
|
trials_stim, var_items, var_type):
|
|
# for var_it in var_items:
|
|
if 'cells' in var_items:
|
|
titles += cell[2:13]
|
|
else:
|
|
suptitles += cell[2:13]
|
|
if 'internal_noise' in var_items:
|
|
titles += ' intrinsic noise=' + stim_type_noise_name2
|
|
else:
|
|
suptitles += ' intrinsic noise=' + stim_type_noise_name2
|
|
if 'external_noise' in var_items:
|
|
titles += ' additive RAM=' + stim_type_afe_name
|
|
else:
|
|
suptitles += ' additive RAM=' + stim_type_afe_name
|
|
if 'repeats' in var_items:
|
|
titles += ' $N_{repeat}=$' + str(trials_stim)
|
|
else:
|
|
suptitles += ' $N_{repeat}=$' + str(trials_stim)
|
|
if 'contrasts' in var_items:
|
|
titles += ' contrast=' + str(a_fe)
|
|
else:
|
|
suptitles += ' contrast=' + str(a_fe)
|
|
if 'level_extraction' in var_items:
|
|
titles += ' Extract Level=' + str(extract)
|
|
else:
|
|
suptitles += ' Extract Level=' + str(extract)
|
|
if 'D_extraction_method' in var_items:
|
|
titles += str(var_type)
|
|
else:
|
|
suptitles += str(var_type)
|
|
if 'noises_added' in var_items:
|
|
titles += ' high freq noise=' + str(noise_added)
|
|
else:
|
|
suptitles += ' high freq noise=' + str(noise_added)
|
|
return suptitles, titles
|
|
|
|
|
|
def set_clim_same_here(ims, perc05=[], val_chosen = None, percnr=None, perc95=[], mins=[], maxs=[], mats=[], nr_clim='perc', lim_type='',
|
|
clims='all', same = '', mean_type = False, clim_min = [], clim_max = []):
|
|
if clims == 'all':
|
|
# embed()
|
|
# if nr_clim == 'perc':
|
|
# embed()
|
|
if same == 'same':
|
|
if len(clim_min) < 1:
|
|
clim_min = []
|
|
clim_max = []
|
|
for a, im in enumerate(ims):
|
|
clim_min.append(im.get_clim()[0])
|
|
clim_max.append(im.get_clim()[1])
|
|
|
|
lim = np.max([np.abs(np.min(clim_min)), np.abs(np.max(clim_max))])
|
|
for a, im in enumerate(ims):
|
|
|
|
if lim_type == 'same':
|
|
ims[a].set_clim(-lim, lim)
|
|
elif lim_type == 'up':
|
|
ims[a].set_clim(0, lim)
|
|
# elif lim_type == 'perc95':
|
|
# ims[a].set_clim(0, lim)
|
|
else:
|
|
ims[a].set_clim(np.min(clim_min), np.max(clim_max))
|
|
else:
|
|
if len(mats) < 1:
|
|
if nr_clim == 'perc':
|
|
for im in ims:
|
|
if lim_type == 'up':
|
|
im.set_clim(0, np.max(perc95))
|
|
else:
|
|
im.set_clim(np.min(perc05), np.max(perc95))
|
|
else:
|
|
for im in ims:
|
|
im.set_clim(np.min(np.min(mins)) * nr_clim, np.max(np.max(maxs) / nr_clim))
|
|
else:
|
|
maxs, mins, perc05, perc95 = get_perc_vals(mats, maxs, mins, perc05, perc95, percnr)
|
|
for i, im in enumerate(ims):
|
|
if nr_clim == 'perc':
|
|
if lim_type == 'up':
|
|
if mean_type:
|
|
im.set_clim(0, np.mean(perc95))
|
|
else:
|
|
im.set_clim(0, np.max(perc95))
|
|
else:
|
|
im.set_clim(np.min(perc05), np.max(perc95))
|
|
else:
|
|
im.set_clim(np.min(mins) * nr_clim, np.max(maxs) / nr_clim)
|
|
|
|
# todo: noch alle clim funkcitonen fusioenier
|
|
|
|
# for im in ims:
|
|
# im.set_clim(np.min(np.min(mins)) * nr_clim, np.max(np.max(maxs) / nr_clim))
|
|
else:
|
|
if len(mats) < 1:
|
|
for i, im in enumerate(ims):
|
|
if nr_clim == 'perc':
|
|
if lim_type == 'up':
|
|
im.set_clim(0, perc95[i])
|
|
else:
|
|
im.set_clim(perc05[i], perc95[i])
|
|
elif nr_clim == 'None':
|
|
#embed()
|
|
values = im.get_clim()
|
|
if lim_type == 'up':
|
|
if val_chosen:
|
|
im.set_clim(0, val_chosen)
|
|
else:
|
|
im.set_clim(0, values[-1])
|
|
else:
|
|
if lim_type == 'up':
|
|
im.set_clim(0, maxs[i] / nr_clim)
|
|
else:
|
|
im.set_clim(mins[i] * nr_clim, maxs[i] / nr_clim)
|
|
else:
|
|
maxs, mins, perc05, perc95 = get_perc_vals(mats, maxs, mins, perc05, perc95, percnr)
|
|
# embed()
|
|
for i, im in enumerate(ims):
|
|
if nr_clim == 'perc':
|
|
if lim_type == 'up':
|
|
im.set_clim(0, perc95[i])
|
|
else:
|
|
im.set_clim(perc05[i], perc95[i])
|
|
|
|
else:
|
|
if lim_type == 'up':
|
|
im.set_clim(0, maxs[i] / nr_clim)
|
|
else:
|
|
im.set_clim(mins[i] * nr_clim, maxs[i] / nr_clim)
|
|
|
|
|
|
def get_perc_vals(mats, maxs, mins, perc05, perc95, percnr):
|
|
perc05 = []
|
|
perc95 = []
|
|
mins = []
|
|
maxs = []
|
|
for m in range(len(mats)):
|
|
|
|
mins.append(np.min(mats[m]))
|
|
if not percnr:
|
|
perc05.append(np.percentile(mats[m], 5))
|
|
perc95.append(np.percentile(mats[m], 95))
|
|
else:
|
|
# embed()
|
|
perc05.append(np.percentile(mats[m], 100 - percnr))
|
|
perc95.append(np.percentile(mats[m], percnr))
|
|
maxs.append(np.min(mats[m]))
|
|
return maxs, mins, perc05, perc95
|
|
|
|
|
|
def plt_isi(cells_all, grid_isi, stack_spikes=[], eod_frs=[]):
|
|
save_names = ['noise_data8_nfft1sec_original__LocalEOD_CutatBeginning_0.05_s_NeurDelay_0.005_s_burst_corr']
|
|
frame = load_cv_base_frame(cells_all)
|
|
# amps_desired, cell_type_type, cells_plot, frame, cell_types = load_isis(save_names, redo = True)
|
|
# embed()
|
|
ax_isi = []
|
|
for f, cell in enumerate(cells_all):
|
|
axi = plt.subplot(grid_isi[f])
|
|
|
|
frame_cell = frame[(frame['cell'] == cell)]
|
|
|
|
eod_fr = frame_cell.EODf.iloc[0]
|
|
|
|
# todo: hier mit dem EODfr nochmal schauen
|
|
if len(stack_spikes) > 0:
|
|
# print('spikes retrieve')
|
|
spikes = []
|
|
hists = []
|
|
for sp in range(len(stack_spikes[f].keys())):
|
|
spikes.append(np.array(stack_spikes[f][sp]))
|
|
hists.append(np.diff(spikes[-1]) / (1 / eod_frs[f]))
|
|
# embed()
|
|
else:
|
|
spikes = frame_cell.spikes.iloc[0]
|
|
spikes_all, hists, frs_calc, cont_spikes = load_spikes(spikes, eod_frs[f])
|
|
|
|
# if len(ax_isi)> 0:
|
|
remove_yticks(axi)
|
|
axi.spines['left'].set_visible(False)
|
|
|
|
alpha = 1
|
|
for hh, h in enumerate(hists):
|
|
try:
|
|
axi.hist(h, bins=100, color='blue', alpha=float(alpha - 0.05 * (hh)))
|
|
except:
|
|
print('hist i')
|
|
embed()
|
|
|
|
ax_isi.append(axi)
|
|
axi.spines['left'].set_visible(False)
|
|
# axi.spines['left'].set_visible(False)
|
|
remove_yticks(axi)
|
|
# axi.set_ylabel('Nr')
|
|
if f == len(cells_all) - 1:
|
|
axi.set_xlabel('EODf multiple')
|
|
# axi.set_ylabel('Nr')
|
|
# axi.set_xlim(0, 13)
|
|
return ax_isi
|
|
|
|
|
|
def group_the_certain_group(grouped, DF2_desired, DF1_desired):
|
|
# embed()
|
|
mult1 = np.array([a_tuple[2][0] for a_tuple in grouped.groups.keys()])
|
|
mult2 = np.array([a_tuple[2][1] for a_tuple in grouped.groups.keys()])
|
|
|
|
# restrict = (mult1 == DF1_desired) & (mult2 == DF2_desired)
|
|
# if np.sum(restrict) == 0:
|
|
mult_array = np.round(np.abs(mult1 - DF1_desired) + np.abs((mult2 - DF2_desired)), 2)
|
|
restrict = np.argmin(mult_array)
|
|
|
|
return restrict
|
|
|
|
|
|
def extract_waves(variant, cell, stimulus_length, deltat, eod_fr, a_fr, a_fe, eod_fe, e, eod_fj, a_fj, phase_r=0,
|
|
nfft_for_morph=4068 * 4, phase_e=0):
|
|
# if cell == '':
|
|
# time = np.arange(0, stimulus_length, deltat)
|
|
# time_fish_r = time * 2 * np.pi * eod_fr
|
|
# eod_fish_r = a_fr * np.sin(time_fish_r + phase)
|
|
# time_fish_e = time * 2 * np.pi * eod_fe[e]
|
|
# eod_fish_e = a_fe * np.sin(time_fish_e)
|
|
if 'receiver' in variant:
|
|
time, time_fish_r, eod_fish_r, ff_first, eod_fr_data_first, pp_first_not_log, eod_fish_r_first, p_array_new_first, f_new_first = load_waves(
|
|
nfft_for_morph, cell, a_fr=a_fr, stimulus_length=stimulus_length, sampling=1 / deltat, eod_fr=eod_fr)
|
|
else:
|
|
time = np.arange(0, stimulus_length, deltat)
|
|
time_fish_r = time * 2 * np.pi * eod_fr
|
|
eod_fish_r = a_fr * np.sin(time_fish_r + phase_r)
|
|
if 'emitter' in variant:
|
|
time, time_fish_e, eod_fish_e, ff_first, eod_fr_data_first, pp_first_not_log, eod_fish_r_first, p_array_new_first, f_new_first = load_waves(
|
|
nfft_for_morph, cell, a_fr=a_fe, stimulus_length=stimulus_length, sampling=1 / deltat, eod_fr=eod_fe[e])
|
|
# embed()
|
|
else:
|
|
time = np.arange(0, stimulus_length, deltat)
|
|
time_fish_e = time * 2 * np.pi * eod_fe[e]
|
|
eod_fish_e = a_fe * np.sin(time_fish_e + phase_e)
|
|
|
|
if 'jammer' in variant:
|
|
time, time_fish_e, eod_fish_e, ff_first, eod_fr_data_first, pp_first_not_log, eod_fish_r_first, p_array_new_first, f_new_first = load_waves(
|
|
nfft_for_morph, cell, a_fr=a_fj, stimulus_length=stimulus_length, sampling=1 / deltat, eod_fr=eod_fj)
|
|
else:
|
|
|
|
time = np.arange(0, stimulus_length, deltat)
|
|
time_fish_j = time * 2 * np.pi * eod_fj
|
|
eod_fish_j = a_fj * np.sin(time_fish_j + phase_e)
|
|
# else:
|
|
# eod_fish_e, time_array = create_fish_array(eod_fe[e], cell, stimulus_length, 1/deltat, a_fe)
|
|
# time_fish_e = time_array
|
|
|
|
time_fish_sam = time * 2 * np.pi * (eod_fe[e] - eod_fr)
|
|
eod_fish_sam = a_fe * np.sin(time_fish_sam)
|
|
stimulus_am = eod_fish_e + eod_fish_r + eod_fish_j
|
|
stimulus_sam = eod_fish_r * (1 + eod_fish_sam)
|
|
return eod_fish_j, time, time_fish_r, eod_fish_r, time_fish_e, eod_fish_e, time_fish_sam, eod_fish_sam, stimulus_am, stimulus_sam
|
|
|
|
|
|
def plot_shemes3(eod_fish_r, eod_fish_e, eod_fish_j, grid0, time, g=0,
|
|
waves_present=['receiver', 'emitter', 'jammer', 'all'], sheme_shift=0, title=[]):
|
|
stimulus = np.zeros(len(eod_fish_r))
|
|
ax = []
|
|
xlim = [0, 0.05]
|
|
for ww, w in enumerate(waves_present):
|
|
|
|
ax = plt.subplot(grid0[ww + sheme_shift, g])
|
|
if w == 'receiver':
|
|
if title:
|
|
plt.title(title)
|
|
# ax.text(0.5, 1.25, '$+$', transform=ax.transAxes, fontsize=20)
|
|
plt.plot(time, eod_fish_r, color='grey')
|
|
stimulus += eod_fish_r
|
|
plt.ylim(-1.1, 1.1)
|
|
plt.xlim(xlim)
|
|
ax.spines['bottom'].set_visible(False)
|
|
if g == 0:
|
|
plt.ylabel('f0')
|
|
elif w == 'emitter':
|
|
ax.text(0.5, 1.01, '$+$', va='center', ha='center', transform=ax.transAxes, fontsize=20)
|
|
plt.plot(time, eod_fish_e, color='orange')
|
|
stimulus += eod_fish_e
|
|
plt.ylim(-1.1, 1.1)
|
|
plt.xlim(xlim)
|
|
ax.spines['bottom'].set_visible(False)
|
|
if g == 0:
|
|
plt.ylabel('f1')
|
|
elif w == 'jammer':
|
|
ax.text(0.5, 1.01, '$+$', va='center', ha='center', transform=ax.transAxes, fontsize=20)
|
|
plt.plot(time, eod_fish_j, color='purple')
|
|
stimulus += eod_fish_j
|
|
# embed()
|
|
plt.ylim(-1.1, 1.1)
|
|
plt.xlim(xlim)
|
|
if g == 0:
|
|
plt.ylabel('f2')
|
|
elif w == 'all':
|
|
ax.text(0.5, 1.25, '$=$', va='center', ha='center', transform=ax.transAxes, fontsize=20)
|
|
plt.plot(time, stimulus, color='grey')
|
|
plt.ylim(-1.2, 1.2)
|
|
plt.xlim(xlim)
|
|
if g == 0:
|
|
plt.ylabel('Stimulus')
|
|
if (g == 0):
|
|
if (ww == 0):
|
|
plt.ylabel('f0')
|
|
elif (ww == 1):
|
|
plt.ylabel('f1')
|
|
elif (ww == 2):
|
|
plt.ylabel('f2')
|
|
elif (ww == 3):
|
|
plt.ylabel('Stimulus')
|
|
|
|
# if ax != []:
|
|
ax.spines['right'].set_visible(False)
|
|
ax.spines['left'].set_visible(False)
|
|
ax.spines['top'].set_visible(False)
|
|
ax.spines['bottom'].set_visible(False)
|
|
ax.set_xticks([])
|
|
ax.set_yticks([])
|
|
return ax
|
|
|
|
|
|
def plot_shemes4(eod_fish_r, eod_fish_e, eod_fish_j, grid0, time, ylim=[-1.1, 1.1], g=0, jammer_label='f2',
|
|
emitter_label='f1', receiver_label='f0',
|
|
waves_present=['receiver', 'emitter', 'jammer', 'all'], eod_fr=700, add=0, xlim=[0, 0.05],
|
|
sheme_shift=0,color_am2 = 'purple', extracted=False, extracted2=False, color_am='black', title_top=False, title=[]):
|
|
stimulus = np.zeros(len(eod_fish_r))
|
|
ax = []
|
|
ax = plt.subplot(grid0[0, g])
|
|
for ww, w in enumerate(waves_present):
|
|
|
|
if title_top:
|
|
if ww == 0:
|
|
# ok das ist alles anders zentriert, wie ich denke
|
|
# ha bedeutet dass das alignment horizontal ist nicht der anker
|
|
# und auch rechts und bottom ist genau anders herum
|
|
# EGOZENTRISCHE und nicht ALOZENTRISCHE Ausrichtung!!
|
|
# todo: vielleicht eine funktion die das in allozentrisch ändert, das kann sich doch keiner merken
|
|
ax.text(1, 1, title, va='bottom', ha='right', transform=ax.transAxes)
|
|
if w == 'receiver':
|
|
|
|
stimulus += eod_fish_r
|
|
elif w == 'emitter':
|
|
stimulus += eod_fish_e
|
|
elif w == 'jammer':
|
|
stimulus += eod_fish_j
|
|
elif w == 'all':
|
|
eod_interp, eod_norm = extract_am(stimulus, time, norm=False, sampling=1 / time[1], eodf=eod_fr,
|
|
emb=False, extract='')
|
|
|
|
plt.plot(time, stimulus, color='grey', linewidth=0.5)
|
|
if extracted: #
|
|
plt.plot(time, eod_interp, color=color_am, linewidth=1)
|
|
if extracted2: #
|
|
eod_interp2, eod_norm = extract_am(eod_interp, time, norm=False, sampling=1 / time[1], eodf=eod_fr,
|
|
emb=False, extract='')
|
|
test = False
|
|
if test:
|
|
nfft = 2**16
|
|
p, f = ml.psd(eod_interp2 - np.mean(eod_interp2), Fs=40000, NFFT=nfft,
|
|
noverlap=nfft // 2) #
|
|
p, f = ml.psd(eod_interp - np.mean(eod_interp), Fs=40000, NFFT=nfft,
|
|
noverlap=nfft // 2) #
|
|
#embed()
|
|
plt.plot(time, eod_interp2, color=color_am2, linewidth=1)
|
|
plt.ylim(-1.2, 1.2)
|
|
if len(xlim) > 0:
|
|
plt.xlim(xlim)
|
|
plt.ylim(ylim)
|
|
if g == 0:
|
|
plt.ylabel('stimulus')
|
|
if (g == 0):
|
|
if (ww == 3):
|
|
plt.ylabel('stimulus')
|
|
|
|
ax.spines['right'].set_visible(False)
|
|
ax.spines['left'].set_visible(False)
|
|
ax.spines['top'].set_visible(False)
|
|
ax.spines['bottom'].set_visible(False)
|
|
ax.set_xticks([])
|
|
ax.set_yticks([])
|
|
return ax
|
|
|
|
|
|
def motivation_small_roc(ylim=[-1.25, 1.25], c1=10, dfs=['m1', 'm2'], mult_type='_multsorted2_', top=0.94, devs=['2'],
|
|
mult=True, plottype='traces', savename=[], figsize=None, show=False, redo=False, save=True,
|
|
end='0', append_others='', cut_matrix='malefemale', chose_score='mean_nrs', a_fr=1,
|
|
restrict='modulation', adapt='adaptoffsetallall2', step=str(30), nrs=[0.5, 1.5, 3, 1, ],
|
|
detections=['AllTrialsIndex'], variant='no', sorted_on='LocalReconst0.2Norm'):
|
|
autodefines = [
|
|
'triangle_diagonal_fr'] # ['triangle_fr', 'triangle_diagonal_fr', 'triangle_df2_fr','triangle_df2_eodf''triangle_df1_eodf', ] # ,'triangle_df2_fr''triangle_df1_fr','_triangle_diagonal__fr',]
|
|
cells = ['2021-08-03-ac-invivo-1'] ##'2021-08-03-ad-invivo-1',,[10, ][5 ]
|
|
c1s = [10] # 1, 10,
|
|
c2s = [10]
|
|
|
|
plot_style()
|
|
default_settings(column=2, length=3.7) # 3.3ts=12, ls=12, fs=12
|
|
show = True
|
|
DF2_desired = [0.8]
|
|
DF1_desired = [0.87]
|
|
|
|
DF2_desired = [-0.23]
|
|
DF1_desired = [0.94]
|
|
|
|
# mean_type = '_MeanTrialsIndexPhaseSort_Min0.25sExcluded_'
|
|
extract = ''
|
|
datasets, data_dir = find_all_dir_cells()
|
|
cells = ['2022-01-28-ah-invivo-1'] # , '2022-01-28-af-invivo-1', '2022-01-28-ab-invivo-1',
|
|
# '2022-01-27-ab-invivo-1', ] # ,'2022-01-28-ah-invivo-1', '2022-01-28-af-invivo-1', ]
|
|
append_others = 'apend_others' # '#'apend_others'#'apend_others'#'apend_others'##'apend_others'
|
|
autodefine = '_DFdesired_'
|
|
autodefine = 'triangle_diagonal_fr' # ['triangle_fr', 'triangle_diagonal_fr', 'triangle_df2_fr','triangle_df2_eodf''triangle_df1_eodf', ] # ,'triangle_df2_fr''triangle_df1_fr','_triangle_diagonal__fr',]
|
|
DF2_desired = [-33]
|
|
DF1_desired = [133]
|
|
autodefine = '_dfchosen_closest_'
|
|
autodefine = '_dfchosen_closest_first_'
|
|
cells = ['2021-08-03-ac-invivo-1'] ##'2021-08-03-ad-invivo-1',,[10, ][5 ]
|
|
# c1s = [10] # 1, 10,
|
|
# c2s = [10]
|
|
minsetting = 'Min0.25sExcluded'
|
|
c2 = 10
|
|
|
|
# detections = ['MeanTrialsIndexPhaseSort'] # ['AllTrialsIndex'] # ,'MeanTrialsIndexPhaseSort''DetectionAnalysis''_MeanTrialsPhaseSort'
|
|
# detections = ['AllTrialsIndex'] # ['_MeanTrialsIndexPhaseSort_Min0.25sExcluded_extended_eod_loc_synch']
|
|
|
|
extend_trials = '' # 'extended'#''#'extended'#''#'extended'#''#'extended'#''#'extended'#''#'extended'# ok kein Plan was das hier ist
|
|
# phase_sorting = ''#'PhaseSort'
|
|
eodftype = '_psdEOD_'
|
|
concat = '' # 'TrialsConcat'
|
|
|
|
indices = ['_allindices_']
|
|
chirps = [
|
|
''] # '_ChirpsDelete3_',,'_ChirpsDelete3_'','','',''#'_ChirpsDelete3_'#''#'_ChirpsDelete3_'#'#'_ChirpsDelete2_'#''#'_ChirpsDelete_'#''#'_ChirpsDelete_'#''#'_ChirpsDelete_'#''#'_ChirpsCache_'
|
|
extract = '' # '_globalmax_'
|
|
devs_savename = ['original', '05'] # ['05']#####################
|
|
|
|
# control = pd.read_pickle(
|
|
# load_folder_name(
|
|
# 'calc_model') + '/modell_all_cell_no_sinz3_afe0.1__afr1__afj0.1__length1.5_adaptoffsetallall2___stepefish' + step + 'Hz_ratecorrrisidual35__modelbigfit_nfft4096.pkl')
|
|
|
|
if len(cells) < 1:
|
|
data_dir, cells = load_cells_three(end, data_dir=data_dir, datasets=datasets)
|
|
cells, p_units_cells, pyramidals = restrict_cell_type(cells, 'p-units')
|
|
|
|
# default_settings(fs=8)
|
|
|
|
start = 'min' #
|
|
cells = ['2021-08-03-ac-invivo-1']
|
|
cells = ['2022-01-28-ah-invivo-1']
|
|
DF2_desired = [-175]
|
|
DF1_desired = [-99]
|
|
for c, cell in enumerate(cells):
|
|
|
|
# c2_unique, c1_unique, combinations = find_c_unique(name, contrastc2, contrastc1)
|
|
|
|
if not c2:
|
|
# ok wir gehen hier einfach über alle potentiellen werte drüber
|
|
contrasts = [10, 5, 3, 1]
|
|
else:
|
|
contrasts = [c2]
|
|
|
|
if not c2:
|
|
contrasts = [10, 5, 3, 1]
|
|
else:
|
|
contrasts1 = [c1]
|
|
for c, contrast in enumerate(contrasts):
|
|
contrast_small = 'c2'
|
|
contrast_big = 'c1'
|
|
|
|
for contrast1 in contrasts1:
|
|
for devname_orig in devs:
|
|
datapoints = [1000]
|
|
for d in datapoints:
|
|
################################
|
|
# prepare DF1 desired
|
|
|
|
# chose_score = 'auci02_012-auci_base_01'
|
|
|
|
# hier muss das halt stimmen mit der auswahl
|
|
# hier wollen wir eigntlich kein autodefine
|
|
# sondern wir wollen so ein diagonal ding haben
|
|
divergnce, fr, pivot_chosen, max_val, max_x, max_y, mult, DF1_desired, DF2_desired, min_y, min_x, min_val, diff_cut = chose_mat_max_value(
|
|
DF1_desired, DF2_desired, '', mult_type, eodftype, indices, cell, contrast_small,
|
|
contrast_big, contrast1, dfs, start, devname_orig, contrast, autodefine=autodefine,
|
|
cut_matrix='cut', chose_score=chose_score) # chose_score = 'auci02_012-auci_base_01'
|
|
DF1_desired = DF1_desired # [::-1]
|
|
DF2_desired = DF2_desired # [::-1]
|
|
# embed()
|
|
|
|
#######################################
|
|
# ROC part
|
|
# fr, celltype = get_fr_from_info(cell, data_dir[c])
|
|
|
|
b = load_b_public(c, cell, data_dir)
|
|
|
|
mt_sorted = predefine_grouping_frame(b, eodftype=eodftype, cell_name=cell)
|
|
counter_waves = 0
|
|
# embed()
|
|
mt_sorted = mt_sorted[(mt_sorted['c2'] == c2) & (mt_sorted['c1'] == c1)]
|
|
for gg in range(len(DF1_desired)):
|
|
|
|
DF1_desired_ROC = [DF1_desired[gg]]
|
|
DF2_desired_ROC = [DF2_desired[gg]]
|
|
# embed()
|
|
# try:
|
|
t3 = time.time()
|
|
# except:
|
|
# print('time thing')
|
|
# embed()
|
|
###################
|
|
# all trials in one
|
|
grouped = mt_sorted.groupby(
|
|
['c1', 'c2', 'm1, m2'],
|
|
as_index=False)
|
|
# try:
|
|
grouped_mean = chose_certain_group(DF1_desired[gg],
|
|
DF2_desired[gg], grouped,
|
|
several=True, emb=False,
|
|
concat=True)
|
|
# except:
|
|
# print('grouped thing')
|
|
# embed()
|
|
###################
|
|
# groups sorted by repro tag
|
|
# todo: evnetuell die tuples gleich hier umspeichern vom csv ''
|
|
# embed()
|
|
grouped = mt_sorted.groupby(
|
|
['c1', 'c2', 'm1, m2', 'repro_tag_id'],
|
|
as_index=False)
|
|
grouped_orig = chose_certain_group(DF1_desired[gg],
|
|
DF2_desired[gg],
|
|
grouped,
|
|
several=True)
|
|
group_mean = [grouped_orig[0][0], grouped_mean]
|
|
|
|
for d, detection in enumerate(detections):
|
|
mean_type = '_' + detection # + '_' + minsetting + '_' + extend_trials + concat
|
|
|
|
####################################################
|
|
|
|
# fig = plt.figure()
|
|
# grid = gridspec.GridSpec(2, 1, wspace=0.7, left=0.05, top=0.95, bottom=0.15,
|
|
# right=0.98)
|
|
if figsize:
|
|
fig = plt.figure(figsize=figsize)
|
|
else:
|
|
fig = plt.figure()
|
|
grid = gridspec.GridSpec(1, 3, wspace=0.35, hspace=0.5, left=0.05, top=top,
|
|
bottom=0.14,
|
|
right=0.95, width_ratios=[4.2, 1,
|
|
1]) # height_ratios = [1,6]bottom=0.25, top=0.8,
|
|
hr = [1, 0.35, 1.2, 0, 3, 3] # 1
|
|
grid0 = gridspec.GridSpecFromSubplotSpec(3, 1, wspace=0.15, hspace=0.06,
|
|
subplot_spec=grid[0],
|
|
height_ratios=[0.4, 3, 3]) # height_ratios=hr,
|
|
grid_sheme = gridspec.GridSpecFromSubplotSpec(1, 4, wspace=0.15, hspace=0.35,
|
|
subplot_spec=grid0[0])
|
|
|
|
xlim = [0, 100]
|
|
|
|
# plt.savefig(r'C:\Users\alexi\OneDrive - bwedu\Präsentations\latex\experimental_protocol.pdf')
|
|
# embed()
|
|
fr_end = divergence_title_add_on(group_mean, fr[gg], autodefine)
|
|
|
|
###########################################
|
|
stimulus_length = 0.3
|
|
deltat = 1 / 40000
|
|
eodf = np.mean(group_mean[1].eodf)
|
|
eod_fr = eodf
|
|
# embed()
|
|
a_fr = 1
|
|
# embed()
|
|
eod_fe = eodf + np.mean(
|
|
group_mean[1].DF2) # data.eodf.iloc[0] + 10 # cell_model.eode.iloc[0]
|
|
a_fe = group_mean[0][1] / 100
|
|
eod_fj = eodf + np.mean(
|
|
group_mean[1].DF1) # data.eodf.iloc[0] + 50 # cell_model.eodj.iloc[0]
|
|
a_fj = group_mean[0][0] / 100
|
|
variant_cell = 'no' # 'receiver_emitter_jammer'
|
|
eod_fish_j, time_array, time_fish_r, eod_fish_r, time_fish_e, eod_fish_e, time_fish_sam, eod_fish_sam, stimulus_am, stimulus_sam = extract_waves(
|
|
variant_cell, '',
|
|
stimulus_length, deltat, eod_fr, a_fr, a_fe, [eod_fe], 0, eod_fj, a_fj)
|
|
|
|
jammer_name = 'female'
|
|
titles = ['receiver ',
|
|
'+' + 'intruder ',
|
|
'+' + jammer_name,
|
|
|
|
'+' + jammer_name + '+intruder',
|
|
[]] ##'receiver + ' + 'receiver + receiver
|
|
gs = [0, 1, 2, 3, 4]
|
|
waves_presents = [['receiver', '', '', 'all'],
|
|
['receiver', 'emitter', '', 'all'],
|
|
['receiver', '', 'jammer', 'all'],
|
|
|
|
['receiver', 'emitter', 'jammer', 'all'],
|
|
] # ['', '', '', ''],['receiver', '', '', 'all'],
|
|
# ['receiver', '', 'jammer', 'all'],
|
|
# ['receiver', 'emitter', '', 'all'],'receiver', 'emitter', 'jammer',
|
|
symbols = [''] # '$+$', '$-$', '$-$', '$=$',
|
|
symbols = ['', '', '', '', '']
|
|
|
|
time_array = time_array * 1000
|
|
|
|
color0 = 'green'
|
|
color0_burst = 'darkgreen'
|
|
color01 = 'blue'
|
|
color02 = 'red'
|
|
color012 = 'orange'
|
|
color01_2 = 'purple'
|
|
colors_am = ['black', 'black', 'black', 'black'] # color01, color02, color012]
|
|
extracted = [False, True, True, True]
|
|
ax_w = []
|
|
for i in range(len(waves_presents)):
|
|
ax = plot_shemes4(eod_fish_r, eod_fish_e, eod_fish_j, grid_sheme, time_array,
|
|
g=gs[i], title_top=True, add=0.1, eod_fr=eod_fr,
|
|
waves_present=waves_presents[i], ylim=ylim,
|
|
xlim=xlim, jammer_label='f2', color_am=colors_am[i],
|
|
emitter_label='f1', receiver_label='f0',
|
|
extracted=extracted[i],
|
|
title=titles[i]) # 'intruder','receiver'#jammer_name
|
|
|
|
ax_w.append(ax)
|
|
if ax != []:
|
|
ax.text(1.1, 0.45, symbols[i], fontsize=35, transform=ax.transAxes)
|
|
bar = False
|
|
if bar:
|
|
if i == 0:
|
|
ax.plot([0, 20], [ylim[0] + 0.01, ylim[0] + 0.01], color='black')
|
|
ax.text(0, -0.16, '20 ms', va='center', fontsize=10,
|
|
transform=ax.transAxes)
|
|
# plt.show()
|
|
printing = True
|
|
if printing:
|
|
print('time of arrays plotting: ' + str(time.time() - t3))
|
|
|
|
##########################################
|
|
# spike response
|
|
means_here = ['_MeanTrialsIndexPhaseSort', 'AllTrialsIndex']
|
|
array_chosen = 1
|
|
# for mean_type_h in means_here:
|
|
for m, mean_type in enumerate(means_here):
|
|
hr = [0.35, 1.2, 0, 3]
|
|
grid_psd = gridspec.GridSpecFromSubplotSpec(4, 4, wspace=0.15, hspace=0.35,
|
|
subplot_spec=grid0[m + 1],
|
|
height_ratios=hr, )
|
|
|
|
if d == 0: #
|
|
##############################################################
|
|
# load plotting arrays
|
|
arrays, arrays_original, spikes_pure = save_arrays_susept(
|
|
data_dir, cell, c, b, chirps, devs, extract, group_mean, mean_type,
|
|
plot_group=0,
|
|
rocextra=False, sorted_on=sorted_on)
|
|
#embed()
|
|
fr_isi, ax_ps, ax_as = plot_arrays_ROC_psd_single3(
|
|
[arrays[0], arrays[2], arrays[1], arrays[3]],
|
|
[arrays_original[0], arrays_original[2], arrays_original[1],
|
|
arrays_original[3]], spikes_pure, fr, cell, grid_psd, chirps, extract,
|
|
mean_type,
|
|
group_mean, b, devs,
|
|
xlim=xlim, row=d * 3,
|
|
array_chosen=array_chosen, ylim_log=(-50.5, 3),
|
|
color0_burst=color0_burst, xlim_psd=[0, 550],
|
|
color01=color01, color02=color02, mean_types=means_here,
|
|
color012=color012, add_burst_corr=True, log='',
|
|
color01_2=color01_2)
|
|
# arrays, arrays_original, spikes_pure
|
|
###########################################
|
|
#############
|
|
# plt roc
|
|
###################################################################
|
|
nrs = [1, 2]
|
|
|
|
for n, nr in enumerate(nrs):
|
|
grid2 = gridspec.GridSpecFromSubplotSpec(2, 1, wspace=0.3, hspace=0.4,
|
|
subplot_spec=grid[nr],
|
|
height_ratios=[1, 1])
|
|
plot_group = 0
|
|
subdevision_nr = 3
|
|
# dev, color, datapoints_way, subdevision_nr,
|
|
dev = '05'
|
|
datapoints_way = ['absolut']
|
|
color = ['red', 'green', 'lightblue', 'pink', ]
|
|
|
|
fig = plt.gcf()
|
|
|
|
plot_group = 0
|
|
ranges = [plot_group]
|
|
|
|
frame, devname, spikes_pure, spike_pures_split, delays_split = roc_part(
|
|
titles, devs, group_mean, ranges, fig, subdevision_nr, datapoints,
|
|
datapoints_way, color, c, chose_score, cell, DF1_desired_ROC,
|
|
DF2_desired_ROC, contrast_small,
|
|
contrast_big, d, contrast1, dfs, start, dev, contrast, grid2[0],
|
|
plot_group, autodefine2='_dfchosen_', sorted_on=sorted_on,
|
|
cut_matrix=cut_matrix,
|
|
mean_type=means_here[n], extract=extract, mult_type=mult_type,
|
|
eodftype=eodftype,
|
|
indices=indices, c1=c1, c2=c2, autodefine=autodefine)
|
|
ax = plt.gca()
|
|
ax.set_title(means_here[n])
|
|
plot_group = 1
|
|
ranges = [plot_group]
|
|
frame, devname, spikes_pure, spike_pures_split, delays_split = roc_part(
|
|
titles, devs, group_mean, ranges, fig,
|
|
subdevision_nr, datapoints,
|
|
datapoints_way, color, c, chose_score,
|
|
cell, DF1_desired_ROC,
|
|
DF2_desired_ROC, contrast_small,
|
|
contrast_big, d, contrast1, dfs, start,
|
|
dev, contrast, grid2[1],
|
|
plot_group, sorted_on=sorted_on, autodefine2='_dfchosen_',
|
|
cut_matrix=cut_matrix,
|
|
mean_type=means_here[n], extract=extract, mult_type=mult_type,
|
|
eodftype=eodftype,
|
|
indices=indices, c1=c1, c2=c2, autodefine=autodefine)
|
|
|
|
# plt.show()
|
|
###########################################
|
|
|
|
# save_visualization()
|
|
# if 'same' in mean_type:
|
|
# mean_type_name = mean_type
|
|
# else:
|
|
# mean_type_name = ''
|
|
|
|
# plt.show()
|
|
suptitle = cell + ' c1: ' + str(group_mean[0][0]) + '$\%$ m1: ' + str(
|
|
group_mean[0][2][0]) + ' DF1: ' + str(
|
|
group_mean[1]['DF1, DF2'].iloc[0][0]) + ' c2: ' + str(
|
|
group_mean[0][1]) + '$\%$ m2: ' + str(
|
|
group_mean[0][2][1]) + ' DF2: ' + str(
|
|
group_mean[1]['DF1, DF2'].iloc[0][1]) + ' Trials nr ' + str(
|
|
len(group_mean[1])) + fr_end
|
|
# plt.suptitle(suptitle)
|
|
# embed()
|
|
individual_tag = 'DF1' + str(DF1_desired[gg]) + 'DF2' + str(
|
|
DF2_desired[gg]) + cell + '_c1_' + str(c1) + '_c2_' + str(c2) + mean_type
|
|
|
|
# save_all(individual_tag, show, counter_contrast=0, savename='')
|
|
# print('individual_tag')
|
|
# embed()
|
|
axes = []
|
|
axes.append(ax_w)
|
|
axes.extend(np.transpose(ax_as))
|
|
axes.append(np.transpose(ax_ps))
|
|
# np.transpose(axes)
|
|
fig.tag(ax_w, xoffs=-1.5, yoffs=1.4)
|
|
# ax_w, np.transpose(ax_as), ax_ps
|
|
# if save:
|
|
save_visualization(individual_tag=individual_tag, show=show, pdf=True)
|
|
# fig = plt.gcf()
|
|
# fig.savefig()
|
|
# plt.show()
|
|
return suptitle
|
|
|
|
|
|
def load_b_public(c, cell, data_dir):
|
|
version_comp, subfolder, mod_name_slash, mod_name, subfolder_path = find_code_vs_not()
|
|
|
|
if version_comp != 'public':
|
|
full_path = find_nix_full_path(c, cell, data_dir)
|
|
if os.path.exists(full_path): # todo: this maybe also has to be fixed
|
|
print('do ' + cell)
|
|
file = nix.File.open(full_path, nix.FileMode.ReadOnly)
|
|
b = file.blocks[0]
|
|
else:
|
|
b = []
|
|
else:
|
|
b = []
|
|
return b
|
|
|
|
|
|
def motivation_all(ylim=[-1.25, 1.25], c1=10, dfs=['m1', 'm2'], mult_type='_multsorted2_', top=0.94, devs=['2'],
|
|
figsize=None, redo=False, save=True, end='0', cut_matrix='malefemale', chose_score='mean_nrs',
|
|
a_fr=1, restrict='modulation', adapt='adaptoffsetallall2', step=str(30),
|
|
detections=['AllTrialsIndex'], variant='no', sorted_on='LocalReconst0.2Norm'):
|
|
autodefines = [
|
|
'triangle_diagonal_fr'] # ['triangle_fr', 'triangle_diagonal_fr', 'triangle_df2_fr','triangle_df2_eodf''triangle_df1_eodf', ] # ,'triangle_df2_fr''triangle_df1_fr','_triangle_diagonal__fr',]
|
|
cells = ['2021-08-03-ac-invivo-1'] ##'2021-08-03-ad-invivo-1',,[10, ][5 ]
|
|
c1s = [10] # 1, 10,
|
|
c2s = [10]
|
|
|
|
plot_style()
|
|
default_settings(column=2, length=6.7) # 3.3ts=12, ls=12, fs=12
|
|
show = True
|
|
DF2_desired = [0.8]
|
|
DF1_desired = [0.87]
|
|
|
|
DF2_desired = [-0.23]
|
|
DF1_desired = [0.94]
|
|
|
|
# mean_type = '_MeanTrialsIndexPhaseSort_Min0.25sExcluded_'
|
|
extract = ''
|
|
datasets, data_dir = find_all_dir_cells()
|
|
cells = ['2022-01-28-ah-invivo-1'] # , '2022-01-28-af-invivo-1', '2022-01-28-ab-invivo-1',
|
|
# '2022-01-27-ab-invivo-1', ] # ,'2022-01-28-ah-invivo-1', '2022-01-28-af-invivo-1', ]
|
|
append_others = 'apend_others' # '#'apend_others'#'apend_others'#'apend_others'##'apend_others'
|
|
autodefine = '_DFdesired_'
|
|
autodefine = 'triangle_diagonal_fr' # ['triangle_fr', 'triangle_diagonal_fr', 'triangle_df2_fr','triangle_df2_eodf''triangle_df1_eodf', ] # ,'triangle_df2_fr''triangle_df1_fr','_triangle_diagonal__fr',]
|
|
DF2_desired = [-33]
|
|
DF1_desired = [133]
|
|
autodefine = '_dfchosen_closest_'
|
|
autodefine = '_dfchosen_closest_first_'
|
|
cells = ['2021-08-03-ac-invivo-1'] ##'2021-08-03-ad-invivo-1',,[10, ][5 ]
|
|
# c1s = [10] # 1, 10,
|
|
# c2s = [10]
|
|
minsetting = 'Min0.25sExcluded'
|
|
c2 = 10
|
|
|
|
# detections = ['MeanTrialsIndexPhaseSort'] # ['AllTrialsIndex'] # ,'MeanTrialsIndexPhaseSort''DetectionAnalysis''_MeanTrialsPhaseSort'
|
|
# detections = ['AllTrialsIndex'] # ['_MeanTrialsIndexPhaseSort_Min0.25sExcluded_extended_eod_loc_synch']
|
|
|
|
extend_trials = '' # 'extended'#''#'extended'#''#'extended'#''#'extended'#''#'extended'#''#'extended'# ok kein Plan was das hier ist
|
|
# phase_sorting = ''#'PhaseSort'
|
|
eodftype = '_psdEOD_'
|
|
concat = '' # 'TrialsConcat'
|
|
|
|
indices = ['_allindices_']
|
|
chirps = [
|
|
''] # '_ChirpsDelete3_',,'_ChirpsDelete3_'','','',''#'_ChirpsDelete3_'#''#'_ChirpsDelete3_'#'#'_ChirpsDelete2_'#''#'_ChirpsDelete_'#''#'_ChirpsDelete_'#''#'_ChirpsDelete_'#''#'_ChirpsCache_'
|
|
extract = '' # '_globalmax_'
|
|
devs_savename = ['original', '05'] # ['05']#####################
|
|
|
|
# control = pd.read_pickle(
|
|
# load_folder_name(
|
|
# 'calc_model') + '/modell_all_cell_no_sinz3_afe0.1__afr1__afj0.1__length1.5_adaptoffsetallall2___stepefish' + step + 'Hz_ratecorrrisidual35__modelbigfit_nfft4096.pkl')
|
|
|
|
if len(cells) < 1:
|
|
data_dir, cells = load_cells_three(end, data_dir=data_dir, datasets=datasets)
|
|
cells, p_units_cells, pyramidals = restrict_cell_type(cells, 'p-units')
|
|
|
|
# default_settings(fs=8)
|
|
|
|
start = 'min' #
|
|
cells = ['2021-08-03-ac-invivo-1']
|
|
tag_cells = []
|
|
for c, cell in enumerate(cells):
|
|
counter_pic = 0
|
|
contrasts = [c2]
|
|
tag_cell = []
|
|
for c, contrast in enumerate(contrasts):
|
|
contrast_small = 'c2'
|
|
contrast_big = 'c1'
|
|
contrasts1 = [c1]
|
|
for contrast1 in contrasts1:
|
|
for devname_orig in devs:
|
|
datapoints = [1000]
|
|
for d in datapoints:
|
|
################################
|
|
# prepare DF1 desired
|
|
|
|
# chose_score = 'auci02_012-auci_base_01'
|
|
|
|
# hier muss das halt stimmen mit der auswahl
|
|
# hier wollen wir eigntlich kein autodefine
|
|
# sondern wir wollen so ein diagonal ding haben
|
|
divergnce, fr, pivot_chosen, max_val, max_x, max_y, mult, DF1_desired, DF2_desired, min_y, min_x, min_val, diff_cut = chose_mat_max_value(
|
|
DF1_desired, DF2_desired, '', mult_type, eodftype, indices, cell, contrast_small,
|
|
contrast_big, contrast1, dfs, start, devname_orig, contrast, autodefine=autodefine,
|
|
cut_matrix='cut', chose_score=chose_score) # chose_score = 'auci02_012-auci_base_01'
|
|
DF1_desired = DF1_desired # [::-1]
|
|
DF2_desired = DF2_desired # [::-1]
|
|
# embed()
|
|
|
|
#######################################
|
|
# ROC part
|
|
# fr, celltype = get_fr_from_info(cell, data_dir[c])
|
|
|
|
version_comp, subfolder, mod_name_slash, mod_name, subfolder_path = find_code_vs_not()
|
|
b = load_b_public(c, cell, data_dir)
|
|
|
|
mt_sorted = predefine_grouping_frame(b, eodftype=eodftype, cell_name=cell)
|
|
counter_waves = 0
|
|
|
|
mt_sorted = mt_sorted[(mt_sorted['c2'] == c2) & (mt_sorted['c1'] == c1)]
|
|
for gg in range(len(DF1_desired)):
|
|
|
|
# embed()
|
|
# try:
|
|
t3 = time.time()
|
|
# except:
|
|
# print('time thing')
|
|
# embed()
|
|
ax_w = []
|
|
|
|
|
|
###################
|
|
# all trials in one
|
|
grouped = mt_sorted.groupby(
|
|
['c1', 'c2', 'm1, m2'],
|
|
as_index=False)
|
|
# try:
|
|
grouped_mean = chose_certain_group(DF1_desired[gg],
|
|
DF2_desired[gg], grouped,
|
|
several=True, emb=False,
|
|
concat=True)
|
|
# except:
|
|
# print('grouped thing')
|
|
# embed()
|
|
###################
|
|
# groups sorted by repro tag
|
|
# todo: evnetuell die tuples gleich hier umspeichern vom csv ''
|
|
# embed()
|
|
grouped = mt_sorted.groupby(
|
|
['c1', 'c2', 'm1, m2', 'repro_tag_id'],
|
|
as_index=False)
|
|
grouped_orig = chose_certain_group(DF1_desired[gg],
|
|
DF2_desired[gg],
|
|
grouped,
|
|
several=True)
|
|
gr_trials = len(grouped_orig)
|
|
###################
|
|
|
|
groups_variants = [grouped_mean]
|
|
group_mean = [grouped_orig[0][0], grouped_mean]
|
|
|
|
|
|
for d, detection in enumerate(detections):
|
|
mean_type = '_' + detection # + '_' + minsetting + '_' + extend_trials + concat
|
|
|
|
##############################################################
|
|
# load plotting arrays
|
|
arrays, arrays_original, spikes_pure = save_arrays_susept(
|
|
data_dir, cell, c, b, chirps, devs, extract, group_mean, mean_type, plot_group=0,
|
|
rocextra=False, sorted_on=sorted_on)
|
|
####################################################
|
|
|
|
|
|
####################################################
|
|
# hier checken wir ob für diesen einen Punkt das funkioniert mit der standardabweichung
|
|
#embed()
|
|
try:
|
|
check_var_substract_method(spikes_pure)
|
|
except:
|
|
print('var checking not possible')
|
|
# fig = plt.figure()
|
|
# grid = gridspec.GridSpec(2, 1, wspace=0.7, left=0.05, top=0.95, bottom=0.15,
|
|
# right=0.98)
|
|
if figsize:
|
|
fig = plt.figure(figsize=figsize)
|
|
else:
|
|
fig = plt.figure()
|
|
grid = gridspec.GridSpec(2, 3, wspace=0.7, hspace=0.35, left=0.075, top=top,
|
|
bottom=0.1, height_ratios=[1,2],
|
|
right=0.935) # height_ratios = [1,6]bottom=0.25, top=0.8,
|
|
hr = [1, 0.35, 1.2, 0, 3, ] # 1
|
|
# embed()#0.75, 0.55, 0.75,
|
|
# hr = [1, 0.8, 1, 1, 1, 1.4]
|
|
|
|
##########################################################################
|
|
# several coherence plot
|
|
|
|
|
|
# frame_psd = pd.read_pickle(load_folder_name('calc_RAM')+'/noise_data11_nfft1sec_original__StimPreSaved4__first__CutatBeginning_0.05_s_NeurDelay_0.005_s_2021-08-03-ab-invivo-1.pkl')
|
|
# frame_psd = pd.read_pickle(load_folder_name('calc_RAM') + '/noise_data11_nfft1sec_original__StimPreSaved4__first__CutatBeginning_0.05_s_NeurDelay_0.005_s_2021-08-03-ab-invivo-1.pkl')
|
|
|
|
ax_w, d, data_dir, devs = plt_coherences(ax_w, d, data_dir, devs, grid)
|
|
|
|
# ax_cohs = plt.subplot(grid[0,1])
|
|
|
|
##########################################################################
|
|
# part with the power spectra
|
|
grid0 = gridspec.GridSpecFromSubplotSpec(5, 4, wspace=0.15, hspace=0.35,
|
|
subplot_spec=grid[1, :],
|
|
height_ratios=hr)
|
|
|
|
xlim = [0, 100]
|
|
|
|
# plt.savefig(r'C:\Users\alexi\OneDrive - bwedu\Präsentations\latex\experimental_protocol.pdf')
|
|
# embed()
|
|
fr_end = divergence_title_add_on(group_mean, fr[gg], autodefine)
|
|
|
|
###########################################
|
|
stimulus_length = 0.3
|
|
deltat = 1 / 40000
|
|
eodf = np.mean(group_mean[1].eodf)
|
|
eod_fr = eodf
|
|
# embed()
|
|
a_fr = 1
|
|
# embed()
|
|
eod_fe = eodf + np.mean(
|
|
group_mean[1].DF2) # data.eodf.iloc[0] + 10 # cell_model.eode.iloc[0]
|
|
a_fe = group_mean[0][1] / 100
|
|
eod_fj = eodf + np.mean(
|
|
group_mean[1].DF1) # data.eodf.iloc[0] + 50 # cell_model.eodj.iloc[0]
|
|
a_fj = group_mean[0][0] / 100
|
|
variant_cell = 'no' # 'receiver_emitter_jammer'
|
|
eod_fish_j, time_array, time_fish_r, eod_fish_r, time_fish_e, eod_fish_e, time_fish_sam, eod_fish_sam, stimulus_am, stimulus_sam = extract_waves(
|
|
variant_cell, '',
|
|
stimulus_length, deltat, eod_fr, a_fr, a_fe, [eod_fe], 0, eod_fj, a_fj)
|
|
|
|
jammer_name = 'female'
|
|
cocktail_names = False
|
|
if cocktail_names:
|
|
titles = ['receiver ',
|
|
'+' + 'intruder ',
|
|
'+' + jammer_name,
|
|
|
|
'+' + jammer_name + '+intruder',
|
|
[]] ##'receiver + ' + 'receiver + receiver
|
|
else:
|
|
titles = title_motivation() ##'receiver + ' + 'receiver + receiver
|
|
gs = [0, 1, 2, 3, 4]
|
|
waves_presents = [['receiver', '', '', 'all'],
|
|
['receiver', 'emitter', '', 'all'],
|
|
['receiver', '', 'jammer', 'all'],
|
|
|
|
['receiver', 'emitter', 'jammer', 'all'],
|
|
] # ['', '', '', ''],['receiver', '', '', 'all'],
|
|
# ['receiver', '', 'jammer', 'all'],
|
|
# ['receiver', 'emitter', '', 'all'],'receiver', 'emitter', 'jammer',
|
|
symbols = [''] # '$+$', '$-$', '$-$', '$=$',
|
|
symbols = ['', '', '', '', '']
|
|
|
|
time_array = time_array * 1000
|
|
|
|
color0 = 'green'
|
|
color0_burst = 'darkgreen'
|
|
color01 = 'green'
|
|
color02 = 'red'
|
|
color012 = 'orange'
|
|
color01_2 = 'purple'
|
|
colors_am = ['black', 'black', 'black', 'black'] # color01, color02, color012]
|
|
extracted = [False, True, True, True]
|
|
|
|
for i in range(len(waves_presents)):
|
|
ax = plot_shemes4(eod_fish_r, eod_fish_e, eod_fish_j, grid0, time_array,
|
|
g=gs[i], title_top=True, add=0.1, eod_fr=eod_fr,
|
|
waves_present=waves_presents[i], ylim=ylim,
|
|
xlim=xlim, jammer_label='f2', color_am=colors_am[i],
|
|
emitter_label='f1', receiver_label='f0',
|
|
extracted=extracted[i],
|
|
title=titles[i]) # 'intruder','receiver'#jammer_name
|
|
|
|
ax_w.append(ax)
|
|
if ax != []:
|
|
ax.text(1.1, 0.45, symbols[i], fontsize=35, transform=ax.transAxes)
|
|
bar = False
|
|
if bar:
|
|
if i == 0:
|
|
ax.plot([0, 20], [ylim[0] + 0.01, ylim[0] + 0.01], color='black')
|
|
ax.text(0, -0.16, '20 ms', va='center', fontsize=10,
|
|
transform=ax.transAxes)
|
|
|
|
printing = True
|
|
if printing:
|
|
print(time.time() - t3)
|
|
|
|
# embed()
|
|
|
|
##########################################
|
|
# spike response
|
|
array_chosen = 1
|
|
if d == 0: #
|
|
# embed()
|
|
fr_isi, ax_ps, ax_as = plot_arrays_ROC_psd_single3(
|
|
[arrays[0], arrays[2], arrays[1], arrays[3]],
|
|
[arrays_original[0], arrays_original[2], arrays_original[1],
|
|
arrays_original[3]], spikes_pure, fr, cell, grid0, chirps, extract,
|
|
mean_type,
|
|
group_mean, b, devs,
|
|
xlim=xlim, row=1 + d * 3,
|
|
array_chosen=array_chosen,
|
|
color0_burst=color0_burst, mean_types=[mean_type],
|
|
color01=color01, color02=color02,
|
|
color012=color012,
|
|
color01_2=color01_2)
|
|
|
|
|
|
##########################################################################
|
|
|
|
# save_visualization()
|
|
# if 'same' in mean_type:
|
|
# mean_type_name = mean_type
|
|
# else:
|
|
# mean_type_name = ''
|
|
|
|
# plt.show()
|
|
suptitle = cell + ' c1: ' + str(group_mean[0][0]) + '$\%$ m1: ' + str(
|
|
group_mean[0][2][0]) + ' DF1: ' + str(
|
|
group_mean[1]['DF1, DF2'].iloc[0][0]) + ' c2: ' + str(
|
|
group_mean[0][1]) + '$\%$ m2: ' + str(
|
|
group_mean[0][2][1]) + ' DF2: ' + str(
|
|
group_mean[1]['DF1, DF2'].iloc[0][1]) + ' Trials nr ' + str(
|
|
len(group_mean[1])) + fr_end
|
|
# plt.suptitle(suptitle)
|
|
# embed()
|
|
individual_tag = 'DF1' + str(DF1_desired[gg]) + 'DF2' + str(
|
|
DF2_desired[gg]) + cell + '_c1_' + str(c1) + '_c2_' + str(c2) + mean_type
|
|
|
|
# save_all(individual_tag, show, counter_contrast=0, savename='')
|
|
# print('individual_tag')
|
|
# embed()
|
|
axes = []
|
|
axes.append(ax_w)
|
|
#axes.extend(np.transpose(ax_as))
|
|
#axes.append(np.transpose(ax_ps))
|
|
# np.transpose(axes)
|
|
#embed()
|
|
fig.tag(ax_w[0:3], xoffs=-2.3, yoffs=1.7)
|
|
fig.tag(ax_w[3::], xoffs=-1.9, yoffs=1.4)
|
|
# ax_w, np.transpose(ax_as), ax_ps
|
|
if save:
|
|
save_visualization(individual_tag=individual_tag, show=show, pdf=True)
|
|
# fig = plt.gcf()
|
|
# fig.savefig()
|
|
# plt.show()
|
|
return suptitle
|
|
|
|
|
|
def check_var_substract_method(spikes_pure):
|
|
vars = {}
|
|
for k, key in enumerate(spikes_pure.keys()):
|
|
for j in range(len(spikes_pure[key])):
|
|
spikes_mat = cr_spikes_mat(spikes_pure[key][j] / 1000, 40000,
|
|
int(spikes_pure[key][j][-1] / 1000 * 40000)) # len(arrays[k][j])
|
|
smoothed = gaussian_filter(spikes_mat, sigma=0.0005 * 40000)
|
|
if key not in vars:
|
|
vars[key] = [np.var(smoothed)]
|
|
else:
|
|
vars[key].append(np.var(smoothed))
|
|
var_vals = []
|
|
for j in range(len(spikes_pure[key])):
|
|
var_vals.append(vars['012'][j] - vars['control_01'][j] - vars['control_02'][j] + vars['base_0'][j])
|
|
# ja wenn das stabil wäre wäre das in Ordnung aber so weiß nciht
|
|
print('single var vals:' + str(var_vals))
|
|
print('mean of single var vals:' + str(np.mean(var_vals)))
|
|
|
|
|
|
def plt_coherences(ax_w, d, data_dir, devs, grid):
|
|
# embed()
|
|
data_names, data_dir = find_all_dir_cells()
|
|
# embed()
|
|
cell_here = ['2021-08-03-ab-invivo-1'] # cell
|
|
cell_here.extend(data_names)
|
|
data_names = ['2021-08-03-ab-invivo-1']
|
|
|
|
names = [''] # , '_firstsnippet_', '_firstfrozen_', ]
|
|
for data_name in data_names:
|
|
# for name in names:
|
|
|
|
frame = load_coherence_file(data_name,'05')
|
|
#embed()
|
|
#if os.path.exists(save_name):
|
|
#frame = pd.read_csv(save_name, index_col=0)
|
|
if len(frame) > 0:
|
|
amps = np.sort(frame.amp.unique())[::-1]
|
|
file_names = frame.file_name.unique()
|
|
devs = ['05'] # original
|
|
#embed()
|
|
for a, amp in enumerate(amps):
|
|
for file_name in file_names:
|
|
# fig, ax = plt.subplots(2, 2, figsize=(16, 8.5), sharex=True,
|
|
# sharey=True)
|
|
|
|
ax = plt.subplot(grid[0, a])
|
|
ax.set_ylim(0, 1)
|
|
# ax = np.concatenate(ax)
|
|
for d, dev in enumerate(devs):
|
|
frame = load_coherence_file(data_name, dev)
|
|
if len(frame) > 0:
|
|
frame_cell = frame[
|
|
(frame.file_name == file_name) & (frame.amp == amp)]
|
|
names = ['coherence_s', 'coherence_r', 'coherence_r_exp'
|
|
] # 'coherence_r_direct_restrict',
|
|
labels = ['SR', '$\sqrt{RR}$', 'RR$_{exp}$',
|
|
]
|
|
colors = ['black', 'grey', 'brown'] # 'coherence_r_firstsnippet',
|
|
linestyles = ['-', '-', '--', '-', '--', '-',
|
|
'--'] # 'purple','-',
|
|
for n, name in enumerate(names):
|
|
# embed()
|
|
# todo: wenn ich das neu gerechnet habe das noch updaten
|
|
if 'coherence_s' in name:
|
|
ax.plot(frame_cell['f'], frame_cell[name] ** 2,
|
|
label=labels[n], color=colors[n],
|
|
linestyle=linestyles[
|
|
n]) # , 'MI_r_direct', 'coherence_r_direct_restrict',
|
|
else:
|
|
ax.plot(frame_cell['f'], frame_cell[name],
|
|
label=labels[n], color=colors[n],
|
|
linestyle=linestyles[
|
|
n]) # , 'MI_r_direct', 'coherence_r_direct_restrict',
|
|
if amp < 1:
|
|
amp_name = amp
|
|
else:
|
|
amp_name = int(amp)
|
|
ax.set_title('Contrast=' + str(amp_name))
|
|
if a == 0:
|
|
ax.legend(loc=(0.75, 0.75))
|
|
ax.set_ylabel('Coherence')
|
|
ax.set_xlabel('Frequency [Hz]')
|
|
|
|
ax.set_ylabel('Coherence')
|
|
xlim = ax.get_xlim()
|
|
ax.set_xlim(0, xlim[-1])
|
|
ax_w.append(ax)
|
|
return ax_w, d, data_dir, devs
|
|
|
|
|
|
def load_coherence_file(data_name, dev):
|
|
save_name = load_folder_name(
|
|
'calc_RAM') + '/calc_coherence-coherence__cell_' + data_name + '_dev_' + dev + '.csv'
|
|
# save_name = 'calc_RAM/calc_coherence-coherence_'+dev + data_name + '.csv'
|
|
# embed()
|
|
load_function = find_load_function()
|
|
name1 = load_function + save_name.split('/')[-1]
|
|
if not os.path.exists(name1):
|
|
frame = pd.read_csv(save_name, index_col=0)
|
|
# embed()
|
|
frame.to_csv(name1)
|
|
frame = pd.read_csv(name1, index_col=0)
|
|
# if os.path.exists(save_name):
|
|
frame = pd.read_csv(save_name, index_col=0)
|
|
else:
|
|
frame = pd.read_csv(name1, index_col=0)
|
|
return frame
|
|
|
|
|
|
def motivation_small(ylim=[-1.25, 1.25], c1=10, dfs=['m1', 'm2'],
|
|
mult_type='_multsorted2_',
|
|
visualize=False, top=0.94,
|
|
devs=['2'], emb=False, mult=True, plottype='traces',
|
|
DF1_desired=[], savename=[],
|
|
DF2_desired=[], figsize=None, show=False, redo=False, save=True, end='0',
|
|
datasets='', data_dir='', append_others='', cut_matrix='malefemale',
|
|
chose_score='mean_nrs', a_fr=1, restrict='modulation', adapt='adaptoffsetallall2', step=str(30),
|
|
nrs=[0.5, 1.5, 3, 1, ], detections=['AllTrialsIndex'], variant='no',
|
|
sorted_on='LocalReconst0.2Norm'):
|
|
autodefines = [
|
|
'triangle_diagonal_fr'] # ['triangle_fr', 'triangle_diagonal_fr', 'triangle_df2_fr','triangle_df2_eodf''triangle_df1_eodf', ] # ,'triangle_df2_fr''triangle_df1_fr','_triangle_diagonal__fr',]
|
|
cells = ['2021-08-03-ac-invivo-1'] ##'2021-08-03-ad-invivo-1',,[10, ][5 ]
|
|
c1s = [10] # 1, 10,
|
|
c2s = [10]
|
|
|
|
plot_style()
|
|
default_settings(column=2, length=3.5) # 3.3ts=12, ls=12, fs=12
|
|
show = True
|
|
DF2_desired = [0.8]
|
|
DF1_desired = [0.87]
|
|
|
|
DF2_desired = [-0.23]
|
|
DF1_desired = [0.94]
|
|
|
|
# mean_type = '_MeanTrialsIndexPhaseSort_Min0.25sExcluded_'
|
|
extract = ''
|
|
datasets, data_dir = find_all_dir_cells()
|
|
cells = ['2022-01-28-ah-invivo-1'] # , '2022-01-28-af-invivo-1', '2022-01-28-ab-invivo-1',
|
|
# '2022-01-27-ab-invivo-1', ] # ,'2022-01-28-ah-invivo-1', '2022-01-28-af-invivo-1', ]
|
|
append_others = 'apend_others' # '#'apend_others'#'apend_others'#'apend_others'##'apend_others'
|
|
autodefine = '_DFdesired_'
|
|
autodefine = 'triangle_diagonal_fr' # ['triangle_fr', 'triangle_diagonal_fr', 'triangle_df2_fr','triangle_df2_eodf''triangle_df1_eodf', ] # ,'triangle_df2_fr''triangle_df1_fr','_triangle_diagonal__fr',]
|
|
DF2_desired = [-33]
|
|
DF1_desired = [133]
|
|
autodefine = '_dfchosen_closest_'
|
|
autodefine = '_dfchosen_closest_first_'
|
|
cells = ['2021-08-03-ac-invivo-1'] ##'2021-08-03-ad-invivo-1',,[10, ][5 ]
|
|
# c1s = [10] # 1, 10,
|
|
# c2s = [10]
|
|
minsetting = 'Min0.25sExcluded'
|
|
c2 = 10
|
|
|
|
# detections = ['MeanTrialsIndexPhaseSort'] # ['AllTrialsIndex'] # ,'MeanTrialsIndexPhaseSort''DetectionAnalysis''_MeanTrialsPhaseSort'
|
|
# detections = ['AllTrialsIndex'] # ['_MeanTrialsIndexPhaseSort_Min0.25sExcluded_extended_eod_loc_synch']
|
|
|
|
extend_trials = '' # 'extended'#''#'extended'#''#'extended'#''#'extended'#''#'extended'#''#'extended'# ok kein Plan was das hier ist
|
|
# phase_sorting = ''#'PhaseSort'
|
|
eodftype = '_psdEOD_'
|
|
concat = '' # 'TrialsConcat'
|
|
|
|
indices = ['_allindices_']
|
|
chirps = [
|
|
''] # '_ChirpsDelete3_',,'_ChirpsDelete3_'','','',''#'_ChirpsDelete3_'#''#'_ChirpsDelete3_'#'#'_ChirpsDelete2_'#''#'_ChirpsDelete_'#''#'_ChirpsDelete_'#''#'_ChirpsDelete_'#''#'_ChirpsCache_'
|
|
extract = '' # '_globalmax_'
|
|
devs_savename = ['original', '05'] # ['05']#####################
|
|
|
|
# control = pd.read_pickle(
|
|
# load_folder_name(
|
|
# 'calc_model') + '/modell_all_cell_no_sinz3_afe0.1__afr1__afj0.1__length1.5_adaptoffsetallall2___stepefish' + step + 'Hz_ratecorrrisidual35__modelbigfit_nfft4096.pkl')
|
|
|
|
if len(cells) < 1:
|
|
data_dir, cells = load_cells_three(end, data_dir=data_dir, datasets=datasets)
|
|
cells, p_units_cells, pyramidals = restrict_cell_type(cells, 'p-units')
|
|
|
|
# default_settings(fs=8)
|
|
|
|
start = 'min' #
|
|
cells = ['2021-08-03-ac-invivo-1']
|
|
tag_cells = []
|
|
for c, cell in enumerate(cells):
|
|
counter_pic = 0
|
|
contrasts = [c2]
|
|
tag_cell = []
|
|
for c, contrast in enumerate(contrasts):
|
|
contrast_small = 'c2'
|
|
contrast_big = 'c1'
|
|
contrasts1 = [c1]
|
|
for contrast1 in contrasts1:
|
|
for devname_orig in devs:
|
|
datapoints = [1000]
|
|
for d in datapoints:
|
|
################################
|
|
# prepare DF1 desired
|
|
|
|
# chose_score = 'auci02_012-auci_base_01'
|
|
|
|
# hier muss das halt stimmen mit der auswahl
|
|
# hier wollen wir eigntlich kein autodefine
|
|
# sondern wir wollen so ein diagonal ding haben
|
|
divergnce, fr, pivot_chosen, max_val, max_x, max_y, mult, DF1_desired, DF2_desired, min_y, min_x, min_val, diff_cut = chose_mat_max_value(
|
|
DF1_desired, DF2_desired, '', mult_type, eodftype, indices, cell, contrast_small,
|
|
contrast_big, contrast1, dfs, start, devname_orig, contrast, autodefine=autodefine,
|
|
cut_matrix='cut', chose_score=chose_score) # chose_score = 'auci02_012-auci_base_01'
|
|
DF1_desired = DF1_desired # [::-1]
|
|
DF2_desired = DF2_desired # [::-1]
|
|
# embed()
|
|
|
|
#######################################
|
|
# ROC part
|
|
# fr, celltype = get_fr_from_info(cell, data_dir[c])
|
|
|
|
version_comp, subfolder, mod_name_slash, mod_name, subfolder_path = find_code_vs_not()
|
|
b = load_b_public(c, cell, data_dir)
|
|
|
|
mt_sorted = predefine_grouping_frame(b, eodftype=eodftype, cell_name=cell)
|
|
counter_waves = 0
|
|
|
|
mt_sorted = mt_sorted[(mt_sorted['c2'] == c2) & (mt_sorted['c1'] == c1)]
|
|
for gg in range(len(DF1_desired)):
|
|
|
|
# embed()
|
|
# try:
|
|
t3 = time.time()
|
|
# except:
|
|
# print('time thing')
|
|
# embed()
|
|
###################
|
|
# all trials in one
|
|
grouped = mt_sorted.groupby(
|
|
['c1', 'c2', 'm1, m2'],
|
|
as_index=False)
|
|
# try:
|
|
grouped_mean = chose_certain_group(DF1_desired[gg],
|
|
DF2_desired[gg], grouped,
|
|
several=True, emb=False,
|
|
concat=True)
|
|
# except:
|
|
# print('grouped thing')
|
|
# embed()
|
|
###################
|
|
# groups sorted by repro tag
|
|
# todo: evnetuell die tuples gleich hier umspeichern vom csv ''
|
|
# embed()
|
|
grouped = mt_sorted.groupby(
|
|
['c1', 'c2', 'm1, m2', 'repro_tag_id'],
|
|
as_index=False)
|
|
grouped_orig = chose_certain_group(DF1_desired[gg],
|
|
DF2_desired[gg],
|
|
grouped,
|
|
several=True)
|
|
gr_trials = len(grouped_orig)
|
|
###################
|
|
|
|
groups_variants = [grouped_mean]
|
|
group_mean = [grouped_orig[0][0], grouped_mean]
|
|
|
|
for d, detection in enumerate(detections):
|
|
mean_type = '_' + detection # + '_' + minsetting + '_' + extend_trials + concat
|
|
|
|
##############################################################
|
|
# load plotting arrays
|
|
arrays, arrays_original, spikes_pure = save_arrays_susept(
|
|
data_dir, cell, c, b, chirps, devs, extract, group_mean, mean_type, plot_group=0,
|
|
rocextra=False, sorted_on=sorted_on)
|
|
####################################################
|
|
|
|
# fig = plt.figure()
|
|
# grid = gridspec.GridSpec(2, 1, wspace=0.7, left=0.05, top=0.95, bottom=0.15,
|
|
# right=0.98)
|
|
if figsize:
|
|
fig = plt.figure(figsize=figsize)
|
|
else:
|
|
fig = plt.figure()
|
|
grid = gridspec.GridSpec(1, 1, wspace=0.7, hspace=0.5, left=0.05, top=top,
|
|
bottom=0.14,
|
|
right=0.95) # height_ratios = [1,6]bottom=0.25, top=0.8,
|
|
hr = [1, 0.35, 1.2, 0, 3, ] # 1
|
|
# embed()#0.75, 0.55, 0.75,
|
|
# hr = [1, 0.8, 1, 1, 1, 1.4]
|
|
grid0 = gridspec.GridSpecFromSubplotSpec(5, 4, wspace=0.15, hspace=0.35,
|
|
subplot_spec=grid[0],
|
|
height_ratios=hr, )
|
|
|
|
xlim = [0, 100]
|
|
|
|
# plt.savefig(r'C:\Users\alexi\OneDrive - bwedu\Präsentations\latex\experimental_protocol.pdf')
|
|
# embed()
|
|
fr_end = divergence_title_add_on(group_mean, fr[gg], autodefine)
|
|
|
|
###########################################
|
|
stimulus_length = 0.3
|
|
deltat = 1 / 40000
|
|
eodf = np.mean(group_mean[1].eodf)
|
|
eod_fr = eodf
|
|
# embed()
|
|
a_fr = 1
|
|
# embed()
|
|
eod_fe = eodf + np.mean(
|
|
group_mean[1].DF2) # data.eodf.iloc[0] + 10 # cell_model.eode.iloc[0]
|
|
a_fe = group_mean[0][1] / 100
|
|
eod_fj = eodf + np.mean(
|
|
group_mean[1].DF1) # data.eodf.iloc[0] + 50 # cell_model.eodj.iloc[0]
|
|
a_fj = group_mean[0][0] / 100
|
|
variant_cell = 'no' # 'receiver_emitter_jammer'
|
|
eod_fish_j, time_array, time_fish_r, eod_fish_r, time_fish_e, eod_fish_e, time_fish_sam, eod_fish_sam, stimulus_am, stimulus_sam = extract_waves(
|
|
variant_cell, '',
|
|
stimulus_length, deltat, eod_fr, a_fr, a_fe, [eod_fe], 0, eod_fj, a_fj)
|
|
|
|
jammer_name = 'female'
|
|
titles = ['receiver ',
|
|
'+' + 'intruder ',
|
|
'+' + jammer_name,
|
|
|
|
'+' + jammer_name + '+intruder',
|
|
[]] ##'receiver + ' + 'receiver + receiver
|
|
gs = [0, 1, 2, 3, 4]
|
|
waves_presents = [['receiver', '', '', 'all'],
|
|
['receiver', 'emitter', '', 'all'],
|
|
['receiver', '', 'jammer', 'all'],
|
|
|
|
['receiver', 'emitter', 'jammer', 'all'],
|
|
] # ['', '', '', ''],['receiver', '', '', 'all'],
|
|
# ['receiver', '', 'jammer', 'all'],
|
|
# ['receiver', 'emitter', '', 'all'],'receiver', 'emitter', 'jammer',
|
|
symbols = [''] # '$+$', '$-$', '$-$', '$=$',
|
|
symbols = ['', '', '', '', '']
|
|
|
|
time_array = time_array * 1000
|
|
|
|
color0 = 'green'
|
|
color0_burst = 'darkgreen'
|
|
color01 = 'green'
|
|
color02 = 'red'
|
|
color012 = 'orange'
|
|
color01_2 = 'purple'
|
|
colors_am = ['black', 'black', 'black', 'black'] # color01, color02, color012]
|
|
extracted = [False, True, True, True]
|
|
ax_w = []
|
|
for i in range(len(waves_presents)):
|
|
ax = plot_shemes4(eod_fish_r, eod_fish_e, eod_fish_j, grid0, time_array,
|
|
g=gs[i], title_top=True, add=0.1, eod_fr=eod_fr,
|
|
waves_present=waves_presents[i], ylim=ylim,
|
|
xlim=xlim, jammer_label='f2', color_am=colors_am[i],
|
|
emitter_label='f1', receiver_label='f0',
|
|
extracted=extracted[i],
|
|
title=titles[i]) # 'intruder','receiver'#jammer_name
|
|
|
|
ax_w.append(ax)
|
|
if ax != []:
|
|
ax.text(1.1, 0.45, symbols[i], fontsize=35, transform=ax.transAxes)
|
|
bar = False
|
|
if bar:
|
|
if i == 0:
|
|
ax.plot([0, 20], [ylim[0] + 0.01, ylim[0] + 0.01], color='black')
|
|
ax.text(0, -0.16, '20 ms', va='center', fontsize=10,
|
|
transform=ax.transAxes)
|
|
|
|
printing = True
|
|
if printing:
|
|
print(time.time() - t3)
|
|
|
|
# embed()
|
|
|
|
##########################################
|
|
# spike response
|
|
array_chosen = 1
|
|
if d == 0: #
|
|
# embed()
|
|
fr_isi, ax_ps, ax_as = plot_arrays_ROC_psd_single3(
|
|
[arrays[0], arrays[2], arrays[1], arrays[3]],
|
|
[arrays_original[0], arrays_original[2], arrays_original[1],
|
|
arrays_original[3]], spikes_pure, fr, cell, grid0, chirps, extract,
|
|
mean_type,
|
|
group_mean, b, devs,
|
|
xlim=xlim, row=1 + d * 3,
|
|
array_chosen=array_chosen,
|
|
color0_burst=color0_burst, mean_types=[mean_type],
|
|
color01=color01, color02=color02,
|
|
color012=color012,
|
|
color01_2=color01_2)
|
|
|
|
# save_visualization()
|
|
# if 'same' in mean_type:
|
|
# mean_type_name = mean_type
|
|
# else:
|
|
# mean_type_name = ''
|
|
|
|
# plt.show()
|
|
suptitle = cell + ' c1: ' + str(group_mean[0][0]) + '$\%$ m1: ' + str(
|
|
group_mean[0][2][0]) + ' DF1: ' + str(
|
|
group_mean[1]['DF1, DF2'].iloc[0][0]) + ' c2: ' + str(
|
|
group_mean[0][1]) + '$\%$ m2: ' + str(
|
|
group_mean[0][2][1]) + ' DF2: ' + str(
|
|
group_mean[1]['DF1, DF2'].iloc[0][1]) + ' Trials nr ' + str(
|
|
len(group_mean[1])) + fr_end
|
|
# plt.suptitle(suptitle)
|
|
# embed()
|
|
individual_tag = 'DF1' + str(DF1_desired[gg]) + 'DF2' + str(
|
|
DF2_desired[gg]) + cell + '_c1_' + str(c1) + '_c2_' + str(c2) + mean_type
|
|
|
|
# save_all(individual_tag, show, counter_contrast=0, savename='')
|
|
# print('individual_tag')
|
|
# embed()
|
|
axes = []
|
|
axes.append(ax_w)
|
|
axes.extend(np.transpose(ax_as))
|
|
axes.append(np.transpose(ax_ps))
|
|
# np.transpose(axes)
|
|
fig.tag(ax_w, xoffs=-1.5, yoffs=1.4)
|
|
# ax_w, np.transpose(ax_as), ax_ps
|
|
if save:
|
|
save_visualization(individual_tag=individual_tag, show=show, pdf=True)
|
|
# fig = plt.gcf()
|
|
# fig.savefig()
|
|
# plt.show()
|
|
return suptitle
|
|
|
|
|
|
def csvReader(filename):
|
|
context = open(filename).read(2048)
|
|
dialect = csv.Sniffer().sniff(context)
|
|
return csv.reader(open(filename), dialect)
|
|
|
|
|
|
def plot_arrays_ROC_psd_single(arrays, arrays_original, spikes_pure, fr, cell, grid0, chirps, extract, mean_type,
|
|
group_mean, b, devs, plot_group=0,
|
|
rocextra=False, xlim=[0, 100], row=4, subdevision_nr=3, way='absolut', datapoints=1000,
|
|
colors=['grey'], xlim_psd=[0, 250], color0='green', color0_burst='darkgreen',
|
|
color01='blue', ylim_log=(-13.5, 3), add_burst_corr=False, color02='red',
|
|
array_chosen=1, color012='orange', color01_2='purple'):
|
|
# mean_type = '_AllTrialsIndex_Min0.25sExcluded_'#'_MeanTrialsIndexPhaseSort_Min0.25sExcluded_'
|
|
|
|
# time_array = np.arange(0, len(arrays[0][0]) / 40, 1 / 40)
|
|
arrs = []
|
|
for a, arr in enumerate(arrays):
|
|
time_array = np.arange(0, len(arrays[a][0]) / 40, 1 / 40)
|
|
if len(xlim) > 0:
|
|
arrs.append(np.array(arr[0])[(time_array > xlim[0]) & (time_array < xlim[-1])])
|
|
else:
|
|
arrs.append(np.array(arr[0]))
|
|
|
|
key_names = [k for k in spikes_pure] # .keys()
|
|
# if rocextra:
|
|
# key_names = [[key_names[0], key_names[1]], [key_names[2], key_names[3]]]
|
|
# key_names = key_names[plot_group]
|
|
# embed()
|
|
ylim = [-2, np.max(arrs) + 30]
|
|
# embed()
|
|
ps = {}
|
|
p_means = {}
|
|
p_means_all = {}
|
|
ax_ps = []
|
|
# embed()
|
|
key_names = ['base_0', 'control_02', 'control_01', '012']
|
|
names = ['0', '02', '01', '012'] # color012color0, color02, color01,
|
|
colors = ['grey', 'grey', 'grey', 'grey', color0_burst, color0_burst, color0, color0]
|
|
colors_p = [color0, color02, color01, color012, color02, color01, color0_burst, color0_burst, color0, color0]
|
|
|
|
xlim_psd = [0, 1000]
|
|
ylim_both_psd = [-40, 40]
|
|
ylim_psd = [] # [-40, 10]
|
|
color_psd = 'black'
|
|
# embed()
|
|
ax_as = []
|
|
for j in range(len(arrays)):
|
|
ax0 = plt.subplot(grid0[row, j])
|
|
|
|
# embed()
|
|
ax_a = []
|
|
ax_a.append(ax0)
|
|
for i in range(len(spikes_pure[key_names[j]])):
|
|
# embed()
|
|
spikes = spikes_pure[key_names[j]][i]
|
|
|
|
|
|
ax0.eventplot(spikes_pure[key_names[j]],
|
|
color=colors[j])
|
|
ax0.spines['bottom'].set_visible(False)
|
|
|
|
ax0.spines['left'].set_visible(False)
|
|
ax0.spines['top'].set_visible(False)
|
|
ax0.spines['right'].set_visible(False)
|
|
ax0.set_xticks([])
|
|
ax0.set_yticks([])
|
|
|
|
if len(xlim) > 0:
|
|
ax0.set_xlim(xlim)
|
|
|
|
ax00 = plt.subplot(grid0[row + 1, j])
|
|
ax_a.append(ax00)
|
|
# hier wird nur der erste Array geplottet
|
|
time_array = np.arange(0, len(arrays[j][0]) / 40, 1 / 40)
|
|
# embed()
|
|
# vlines = np.arange(0, xlim[-1] + 50, 1000 / 40)
|
|
# plt.vlines(x=vlines, ymin=ylim[0], ymax=ylim[-1], color='pink')
|
|
if rocextra:
|
|
if '_AllTrialsIndex' in mean_type:
|
|
color = 'purple'
|
|
else:
|
|
color = 'purple'
|
|
else:
|
|
color = 'grey'
|
|
try:
|
|
if '_AllTrialsIndex' in mean_type:
|
|
ax00.plot(time_array, arrays[j][array_chosen], color=colors[j])
|
|
else:
|
|
ax00.plot(time_array, arrays[j][0], color=colors[j])
|
|
except:
|
|
print('array thing')
|
|
embed()
|
|
if ('mult' in way): # 'mult_minimum','mult_env', 'mult_f1', 'mult_f2'
|
|
datapoints = find_env(way, group_mean[1], group_mean[1].index[0], 40000, datapoints, f0='EODf')
|
|
|
|
t_off = 10
|
|
trials = np.arange(datapoints + t_off, len(arrays[j][0]), datapoints + t_off)
|
|
# embed()
|
|
# ax00.vlines(x=trials / 40, ymin=ylim[0], ymax=ylim[1], linestyle='--', color='grey')
|
|
if len(xlim) > 0:
|
|
ax00.set_xlim(xlim)
|
|
|
|
ax00.set_ylim(ylim)
|
|
ax00.spines['top'].set_visible(False)
|
|
ax00.spines['right'].set_visible(False)
|
|
|
|
ax00.spines['bottom'].set_visible(False)
|
|
ax00.spines['left'].set_visible(False)
|
|
ax00.set_xticks([])
|
|
ax00.set_yticks([])
|
|
if j == 0:
|
|
length = 20
|
|
plus_here = 5
|
|
try:
|
|
ax00.xscalebar(0.1, -0.02, length, 'ms', va='right', ha='bottom') ##ylim[0]
|
|
ax00.yscalebar(-0.02, 0.35, 500, 'Hz', va='center', ha='left')
|
|
except:
|
|
ax00.plot([0, length], [ylim[0] + plus_here, ylim[0] + plus_here], color='black')
|
|
ax00.text(0, -0.2, str(length) + ' ms', va='center', fontsize=10,
|
|
transform=ax00.transAxes)
|
|
if len(xlim) > 0:
|
|
ax00.plot([xlim[0] + 0.01, xlim[0] + 0.01], [ylim[0], 500],
|
|
color='black')
|
|
else:
|
|
ax00.plot([time_array[0] + 0.01, time_array[0] + 0.01], [ylim[0], 500],
|
|
color='black')
|
|
ax00.text(-0.1, 0.4, ' 500 Hz', rotation=90, va='center', fontsize=10,
|
|
transform=ax00.transAxes)
|
|
# ax00.plot([0, length], [ylim[0] + 0.01, ylim[0] + 0.01],
|
|
# color='black')
|
|
|
|
########################################
|
|
# plot the corresponding psds
|
|
# hier kann man aussuchen welches power spektrum machen haben will
|
|
nfft = 2 ** 13 # 2 ** 18 # 17#16
|
|
|
|
p_mean_all_here = []
|
|
if '_AllTrialsIndex' in mean_type:
|
|
range_here = [array_chosen]
|
|
psd_type = 'single'
|
|
else:
|
|
range_here = range(len(arrays[j]))
|
|
psd_type = 'mean_freq'
|
|
for i in range_here:
|
|
|
|
p_type = '05'
|
|
if 'original' in p_type:
|
|
p_mean_all, f = ml.psd(arrays_original[j][i] - np.mean(arrays_original[j][i]), Fs=40000, NFFT=nfft,
|
|
noverlap=nfft // 2) #
|
|
else:
|
|
p_mean_all, f = ml.psd(arrays[j][i] - np.mean(arrays[j][i]), Fs=40000, NFFT=nfft,
|
|
noverlap=nfft // 2) #
|
|
p_mean_all_here.append(p_mean_all)
|
|
p_means_all[names[j]] = p_mean_all_here
|
|
ax_as.append(ax_a)
|
|
# das machen wir nochmal für einen gemeinsamen Ref Wert
|
|
# ax_ps = []
|
|
psd_type = 'mean_freq'
|
|
for j in range(len(arrays)):
|
|
log = 'log' # '' # 'log'#''#'log'#''#
|
|
ref, ax00 = plt_single_pds(nfft, f, p_means, p_means_all[names[j]], ylim_psd, xlim_psd, color_psd, names,
|
|
ps,
|
|
arrays, ax_ps, grid0, row + 1, j, p_means_all, psd_type='mean_freq', log=log)
|
|
# ax_ps.append(ax00)
|
|
# embed()
|
|
if j == 0:
|
|
if log == 'log':
|
|
ax00.set_ylabel('dB')
|
|
else:
|
|
ax00.set_ylabel('Hz/Hz$^2$')
|
|
# xlim_psd = [0, 400]
|
|
|
|
ax00.set_xlim(xlim_psd)
|
|
# embed()
|
|
# print('at df question')
|
|
DF1 = group_mean[1].DF1.iloc[-1]
|
|
DF2 = group_mean[1].DF2.iloc[-1]
|
|
# embed()
|
|
# todo: hier pkl und csv nicht das gleiche!
|
|
path = load_folder_name('calc_base') + '/calc_base_data-base_frame.pkl'
|
|
# frame_spikes = load_cv_table(path)
|
|
# np.array(np.nanmax(frame_spikes['fr_burst_corr_individual'])),np.array(np.nanmax(frame_spikes['fr_given_burst_corr_individual'])),
|
|
# np.array(np.nanmax(frame_spikes['fr'])),np.array(np.nanmax(frame_spikes['fr_given']))
|
|
# todo: hier noch die Feuerraten dazu tun!
|
|
|
|
# frame, frame_spikes = load_cv_vals_susept([cell],
|
|
# names_keep=[])
|
|
|
|
# frame_spikes.filter(like = 'cv')
|
|
# frame_spikes.filter(like = 'fr')
|
|
# fr = group_mean[1].fr.iloc[-1]
|
|
|
|
# for p in range(len(p0_means)):
|
|
# todo: das mit dem nanmax ist noch nicht optimal aber igendwas ist beim laden noch falshc
|
|
# frame_spikes['cell'] == cell]
|
|
effective_duration = time_array[-1] / 1000
|
|
fr_isi = len(spikes_pure['base_0'][0]) / effective_duration
|
|
fr_isis = []
|
|
if add_burst_corr:
|
|
frs_burst_corr = []
|
|
for i in range(len(spikes_pure['base_0'])):
|
|
fr_isis.append(1 / np.mean(np.diff(spikes_pure['base_0'][i] / 1000))) # np.mean(fr), fr_calc,
|
|
lim_here = find_lim_here(cell, 'individual')
|
|
print(lim_here)
|
|
# if lim_here
|
|
eod_fr = group_mean[1].EODf.iloc[i]
|
|
spikes_all = spikes_pure['base_0'][i]
|
|
isi = calc_isi(spikes_all, eod_fr)
|
|
if np.min(isi) < lim_here:
|
|
hists2, spikes_ex, fr_burst_corr = correct_burstiness(isi, spikes_all,
|
|
[eod_fr] * len(spikes_all),
|
|
[eod_fr] * len(spikes_all), lim=lim_here,
|
|
burst_corr='individual')
|
|
frs_burst_corr.append(fr_burst_corr)
|
|
else:
|
|
frs_burst_corr.append(fr_isis[-1])
|
|
else:
|
|
for i in range(len(spikes_pure['base_0'])):
|
|
fr_isis.append(1 / np.mean(np.diff(spikes_pure['base_0'][i] / 1000))) # np.mean(fr), fr_calc,
|
|
|
|
fr_isi = np.nanmean(fr_isis)
|
|
|
|
# else:
|
|
freqs = [fr_isi, np.abs(DF2), np.abs(DF1),
|
|
np.abs(DF1) + np.abs(DF2), 2 * np.abs(DF2), 2 * np.abs(DF1),
|
|
]
|
|
try:
|
|
labels = ['Baseline=' + str(int(np.round(fr_isi))) + 'Hz',
|
|
'DF1=' + str(DF2) + 'Hz',
|
|
'DF2=' + str(DF1) + 'Hz',
|
|
'$|$DF1+DF2$|$=' + str(np.abs(DF1) + np.abs(DF2)) + 'Hz',
|
|
'DF1$_{H}$=' + str(DF2 * 2) + 'Hz',
|
|
'DF2$_{H}$=' + str(DF1 * 2) + 'Hz',
|
|
'fr_burst_corr_individual',
|
|
'fr_given_burst_corr_individual', 'highest_fr_burst_corr_individual', 'fr', 'fr_given',
|
|
'highest_fr'] # '$|$DF1-DF2$|$=' + str(np.abs(np.abs(DF1) - np.abs(DF2))) + 'Hz',
|
|
except:
|
|
print('label thing')
|
|
embed()
|
|
if add_burst_corr:
|
|
frs_burst_corr_mean = np.nanmean(frs_burst_corr)
|
|
freqs.extend([
|
|
frs_burst_corr_mean]) # np.abs(np.abs(DF1) - np.abs(DF2)),,np.array(np.nanmax(frame_spikes['highest_fr'])),np.array(np.nanmax(frame_spikes['highest_fr_burst_corr_individual']))
|
|
labels.extend(['Baseline_Burstcorr'])
|
|
colors_p.extend(['pink'])
|
|
choice = [[0], [1, 4], [2], [0, 1, 2, 3, 6]]
|
|
else:
|
|
choice = [[0], [1, 4], [2], [0, 1, 2, 3]]
|
|
# embed()
|
|
# np.array(np.nanmax(frame_spikes['fr_burst_corr_individual'])),np.array(np.nanmax(frame_spikes['fr_given_burst_corr_individual'])),
|
|
# np.array(np.nanmax(frame_spikes['fr'])),np.array(np.nanmax(frame_spikes['fr_given']))
|
|
# todo: hier noch die Feuerraten dazu tun!#color01_2,
|
|
# embed()
|
|
# labels = ['baseline=' + str(int(np.round(fr_isi))) + 'Hz', 'DF2=' + str(DF2) + 'Hz', 'DF1=' + str(DF1) + 'Hz',
|
|
# '$|$DF1+DF2$|$=' + str(np.abs(DF1) + np.abs(DF2)) + 'Hz',
|
|
# 'fr_burst_corr_individual',
|
|
# 'fr_given_burst_corr_individual', 'highest_fr_burst_corr_individual', 'fr', 'fr_given',
|
|
# 'highest_fr'] # '$|$DF1-DF2$|$=' + str(np.abs(np.abs(DF1) - np.abs(DF2))) + 'Hz',
|
|
|
|
df_passed = []
|
|
if log == 'log':
|
|
pp = 10 * np.log10(p_means_all[names[j]] / ref)
|
|
pp_mean = 10 * np.log10(np.mean(p_means_all[names[j]], axis=0) / ref)
|
|
else:
|
|
pp = p_means_all[names[j]]
|
|
pp_mean = np.mean(p_means_all[names[j]], axis=0)
|
|
|
|
# embed()
|
|
try: # todo: if log müsste hier was anderes rein, das log veränderte nämlich!
|
|
plt_peaks_several(np.array(labels)[choice[j]], np.array(freqs)[choice[j]], pp, j,
|
|
ax00, pp_mean, np.array(colors_p)[choice[j]], f, add_log=2.5, text_extra=True,
|
|
exact=False, ms=14, perc=0.08, log=log, clip_on=True) # True
|
|
except:
|
|
print('peaks thing0')
|
|
embed()
|
|
|
|
if log == 'log':
|
|
ax00.set_ylim(ylim_log)
|
|
|
|
# if j == 1:
|
|
# ax00.legend(loc=(-0.2, 1), ncol=4) # 0.3,0.75
|
|
# ax00
|
|
ax00.show_spines('b')
|
|
if j == 0:
|
|
ax00.yscalebar(-0.02, 0.5, 10, 'dB', va='center', ha='left')
|
|
# plt_peaks_several()
|
|
# ax_ps.append(ax00)
|
|
################################
|
|
# hier noch das Summen Diff Bild
|
|
# ax00 = plt_psd_diff(ref, p_means_all, p_means, f, ps, ylim_both_psd, xlim_psd, ax_ps, psd_type, grid0, row)
|
|
# ax00.get_shared_x_axes().join(*ax_ps)
|
|
ax00.get_shared_y_axes().join(*ax_ps)
|
|
|
|
return fr_isi, ax_ps, ax_as
|
|
|
|
def plot_arrays_ROC_psd_single3(arrays, arrays_original, spikes_pure, fr, cell, grid0, chirps, extract, mean_type,
|
|
group_mean, b, devs, plot_group=0,names = ['0', '02', '01', '012'],
|
|
rocextra=False, xlim=[0, 100], row=4, subdevision_nr=3, way='absolut', datapoints=1000,
|
|
colors=['grey'], xlim_psd=[0, 235], color0='blue', color0_burst='darkgreen',
|
|
color01='green', ylim_log=(-15, 3), add_burst_corr=False, color02='red',
|
|
array_chosen=1,color012_minus = 'purple', mean_types=[], color012='orange', color01_2='purple', log='log'):
|
|
# mean_type = '_AllTrialsIndex_Min0.25sExcluded_'#'_MeanTrialsIndexPhaseSort_Min0.25sExcluded_'
|
|
|
|
# time_array = np.arange(0, len(arrays[0][0]) / 40, 1 / 40)
|
|
arrs = []
|
|
for a, arr in enumerate(arrays):
|
|
time_array = np.arange(0, len(arrays[a][0]) / 40, 1 / 40)
|
|
if len(xlim) > 0:
|
|
arrs.append(np.array(arr[0])[(time_array > xlim[0]) & (time_array < xlim[-1])])
|
|
else:
|
|
arrs.append(np.array(arr[0]))
|
|
|
|
ylim = [-2, np.max(arrs) + 30]
|
|
|
|
|
|
ax_ps = []
|
|
key_names = ['base_0', 'control_02', 'control_01', '012']
|
|
|
|
colors = ['grey', 'grey', 'grey', 'grey', color0_burst, color0_burst, color0, color0]
|
|
|
|
colors_p = [color0, color02, color01, color012, color02, color01, color012_minus, color0_burst, color0_burst,
|
|
color0, color0]
|
|
|
|
# xlim_psd = [0, 1000]
|
|
ylim_both_psd = [-40, 40]
|
|
ylim_psd = [] # [-40, 10]
|
|
color_psd = 'black'
|
|
# embed()
|
|
ax_as = []
|
|
#embed()
|
|
for j in range(len(arrays)):
|
|
###################################
|
|
# plt spikes
|
|
ax0 = plt.subplot(grid0[row, j])
|
|
plt_spikes_ROC(ax0, colors[j], spikes_pure[key_names[j]], xlim, key_names=key_names, j = j)
|
|
ax_a = []
|
|
ax_a.append(ax0)
|
|
|
|
#########################################
|
|
ax00 = plt.subplot(grid0[row + 1, j])
|
|
ax_a.append(ax00)
|
|
time_array = plt_traces_ROC(array_chosen, arrays, ax00, colors, datapoints, group_mean, j, mean_type,
|
|
time_array, way, xlim, ylim)
|
|
|
|
var_val = np.var(arrays[3])-np.var(arrays[2])-np.var(arrays[1])+np.var(arrays[0])
|
|
print('mean var val:'+str(var_val))
|
|
# for m,mean_type in enumerate(mean_types):
|
|
p_means_all = {}
|
|
for j in range(len(arrays)):
|
|
########################################
|
|
# get the corresponding psds
|
|
# hier kann man aussuchen welches power spektrum machen haben will
|
|
f, nfft = get_psds_ROC(array_chosen, arrays, arrays_original, j, mean_type, names, p_means_all)
|
|
ax_as.append(ax_a)
|
|
#embed()
|
|
|
|
#########################################
|
|
# plot the psds
|
|
ps = {}
|
|
p_means = {}
|
|
ax00, fr_isi = plt_psds_ROC(arrays, ax00, ax_ps, cell, colors_p, f, grid0, group_mean, nfft, p_means,p_means_all, ps, row, spikes_pure,
|
|
time_array, names = names, color_psd = color_psd, add_burst_corr = add_burst_corr, xlim_psd = xlim_psd,
|
|
ylim_log = ylim_log, ylim_psd = ylim_psd, log=log)
|
|
|
|
ax00.get_shared_y_axes().join(*ax_ps)
|
|
# embed()
|
|
return fr_isi, ax_ps, ax_as
|
|
|
|
|
|
def plt_spikes_ROC(ax0, colors, spikes_pure, xlim, lw = None, key_names=[''], j=0):
|
|
#for i in range(len(spikes_pure[key_names[j]])):
|
|
# embed()
|
|
#spikes = spikes_pure[key_names[j]][i]
|
|
|
|
#embed()
|
|
|
|
if lw:
|
|
ax0.eventplot(spikes_pure,
|
|
color=colors, linewidth = lw)
|
|
else:
|
|
ax0.eventplot(spikes_pure,
|
|
color=colors)
|
|
ax0.spines['bottom'].set_visible(False)
|
|
|
|
ax0.spines['left'].set_visible(False)
|
|
ax0.spines['top'].set_visible(False)
|
|
ax0.spines['right'].set_visible(False)
|
|
ax0.set_xticks([])
|
|
ax0.set_yticks([])
|
|
if len(xlim) > 0:
|
|
ax0.set_xlim(xlim)
|
|
|
|
|
|
#rocextra=False, xlim=[0, 100], row=4, subdevision_nr=3, way='absolut', datapoints=1000,
|
|
# colors=['grey'], xlim_psd=[0, 235], color0='blue', color0_burst='darkgreen',
|
|
# color01='green', ylim_log=(-15, 3), add_burst_corr=False, color02='red',
|
|
# array_chosen=1,color012_minus = 'purple', mean_types=[], color012='orange', color01_2='purple', log='log'
|
|
def plt_psds_ROC(arrays, ax00, ax_ps, cell, colors_p, f, grid0, group_mean, nfft, p_means, p_means_all, ps, row,
|
|
spikes_pure, time_array, names=['0', '02', '01', '012'], color_psd='black', add_burst_corr=False,
|
|
xlim_psd=[0, 235], clip_on = True, choice = [], labels = [], text_extra = True, alphas = [], range_plot = [], ylim_log=(-15, 3), ylim_psd=[], log='log', ax01 = None):
|
|
psd_type = 'mean_freq'
|
|
if not range_plot:
|
|
range_plot = range(len(arrays))
|
|
for j in range_plot:
|
|
# '' # 'log'#''#'log'#''#
|
|
#embed()
|
|
try:
|
|
ref, ax00 = plt_single_pds(nfft, f, p_means, p_means_all[names[j]], ylim_psd, xlim_psd, color_psd, names,
|
|
ps,
|
|
arrays, ax_ps, grid0, row + 1, j, p_means_all, ax00 = ax01, psd_type='mean_freq', log=log)
|
|
except:
|
|
print('ref not working')
|
|
embed()
|
|
# ax_ps.append(ax00)
|
|
# embed()
|
|
if j == 0:
|
|
if log == 'log':
|
|
ax00.set_ylabel('dB')
|
|
else:
|
|
ax00.set_ylabel('Hz/Hz$^2$')
|
|
# xlim_psd = [0, 400]
|
|
|
|
ax00.set_xlim(xlim_psd)
|
|
DF1 = group_mean[1].DF1.iloc[-1]
|
|
DF2 = group_mean[1].DF2.iloc[-1]
|
|
|
|
effective_duration = time_array[-1] / 1000
|
|
fr_isi = len(spikes_pure['base_0'][0]) / effective_duration
|
|
fr_isis = []
|
|
if add_burst_corr:
|
|
frs_burst_corr = get_burst_corr_peak(cell, fr_isis, group_mean, spikes_pure)
|
|
else:
|
|
for i in range(len(spikes_pure['base_0'])):
|
|
fr_isis.append(1 / np.mean(np.diff(spikes_pure['base_0'][i] / 1000))) # np.mean(fr), fr_calc,
|
|
|
|
fr_isi = np.nanmean(fr_isis)
|
|
|
|
# else:
|
|
freqs = [fr_isi, np.abs(DF2), np.abs(DF1),
|
|
np.abs(DF1) + np.abs(DF2), 2 * np.abs(DF2), 2 * np.abs(DF1),
|
|
np.abs(np.abs(DF1) - np.abs(DF2)), ]
|
|
try:
|
|
if not labels:
|
|
if j == 3:
|
|
labels = ['',
|
|
'',
|
|
'',
|
|
fsum_core(DF1, DF2),
|
|
'',
|
|
'',
|
|
fdiff_core(DF1, DF2),
|
|
'fr_bc',
|
|
'fr_given_burst_corr_individual', 'highest_fr_burst_corr_individual', 'fr', 'fr_given',
|
|
'highest_fr'] # '$|$DF1-DF2$|$=' + str(np.abs(np.abs(DF1) - np.abs(DF2))) + 'Hz',
|
|
elif j == 2:
|
|
labels = ['',
|
|
df1_core(DF2),
|
|
df2_core(DF1),
|
|
fsum_core(DF1, DF2),
|
|
f1_core(DF2),
|
|
f2_core(DF1),
|
|
fdiff_core(DF1, DF2),
|
|
'fr_bc',
|
|
'fr_given_burst_corr_individual', 'highest_fr_burst_corr_individual', 'fr', 'fr_given',
|
|
'highest_fr'] # '$|$DF1-DF2$|$=' + str(np.abs(np.abs(DF1) - np.abs(DF2))) + 'Hz',
|
|
|
|
else:
|
|
labels = labels_all_motivation(DF1, DF2, fr_isi)
|
|
|
|
except:
|
|
print('label thing')
|
|
embed()
|
|
if add_burst_corr:
|
|
if not choice:
|
|
choice = update_burst_corr_peaks(colors_p, freqs, frs_burst_corr, labels)
|
|
rots = [[45], [45, 45], [45], [45, 45, 45, 45, 45, 45]]
|
|
extra = []
|
|
left = 40
|
|
else:
|
|
if not choice:
|
|
choice = [[0], [1, 4], [0,2], [0, 1, 2, 3, 4, 6]]
|
|
|
|
rots = [[0], [0, 0], [0,0], [55, 55, 57, 45, 45, 45]]#45
|
|
lefts = [[10], [25, 3], [0,105], [10, 10, 10, 13, 12, 40]]#40
|
|
extras = [[1], [1, 1], [1,1], [1, 1, 2.5, 1.7, 4, 4]]#4,1
|
|
extra = extras[j]
|
|
try:
|
|
left = np.array(lefts)[j]
|
|
except:
|
|
print('left something')
|
|
embed()
|
|
pp, pp_mean = decide_log_ROCs(j, log, names, p_means_all, ref)
|
|
|
|
#embed()
|
|
# add_log = 10.5#2.5
|
|
try: # todo: if log müsste hier was anderes rein, das log veränderte nämlich!#2.5
|
|
plt_peaks_several(np.array(labels)[choice[j]], np.array(freqs)[choice[j]], pp, j,
|
|
ax00, pp_mean, np.array(colors_p)[choice[j]], f, texts_left=left, add_log=1.5, text_extra=text_extra,
|
|
exact=False, add_texts=extra, rots=np.array(rots)[j], ms=14, perc=0.08, log=log,
|
|
clip_on=clip_on, alphas = alphas) # True
|
|
except:
|
|
print('peaks thing2')
|
|
embed()
|
|
# embed()
|
|
if log == 'log':
|
|
ax00.set_ylim(ylim_log)
|
|
ax00.show_spines('b')
|
|
if log == 'log':
|
|
if j == 0:
|
|
ax00.yscalebar(-0.02, 0.5, 10, 'dB', va='center', ha='left')
|
|
|
|
return ax00, fr_isi
|
|
|
|
|
|
def labels_all_motivation(DF1, DF2, fr_isi):
|
|
labels = ['$f_{base}=%s$' % (int(np.round(fr_isi))) + '\,Hz',
|
|
df1_core(DF2),
|
|
df2_core(DF1),
|
|
fsum_core(DF1, DF2),
|
|
f1_core(DF2),
|
|
f2_core(DF1),
|
|
fdiff_core(DF1, DF2),
|
|
'fr_bc',
|
|
'fr_given_burst_corr_individual', 'highest_fr_burst_corr_individual', 'fr', 'fr_given',
|
|
'highest_fr'] # '$|$DF1-DF2$|$=' + str(np.abs(np.abs(DF1) - np.abs(DF2))) + 'Hz',
|
|
return labels
|
|
|
|
|
|
def df2_core(DF1):
|
|
return '$|\Delta f_{2}|=|f_{2}-f_{EOD}|=%s$' %(np.abs(DF1)) + '\,Hz'
|
|
|
|
|
|
def df1_core(DF2):
|
|
return '$|\Delta f_{1}|=|f_{1}-f_{EOD}|=%s$' %(np.abs(DF2)) + '\,Hz'
|
|
|
|
|
|
def f2_core(DF1):
|
|
return '$2 |\Delta f_{2}|=%s$' %(DF1 * 2) + '\,Hz'
|
|
|
|
|
|
def f1_core(DF2):
|
|
return '$2 |\Delta f_{1}|=%s$' %(np.abs(DF2) * 2) + '\,Hz'
|
|
|
|
|
|
def fdiff_core(DF1, DF2):
|
|
return '$||\Delta f_{1}|-|\Delta f_{2}||=%s$' %(np.abs(np.abs(DF1) - np.abs(DF2))) + '\,Hz'
|
|
|
|
|
|
def fsum_core(DF1, DF2):
|
|
return '$||\Delta f_{1}| + |\Delta f_{2}||=%s$' %(np.abs(DF1) + np.abs(DF2)) + '\,Hz'#)
|
|
|
|
|
|
def decide_log_ROCs(j, log, names, p_means_all, ref):
|
|
if log == 'log':
|
|
pp = 10 * np.log10(p_means_all[names[j]] / ref)
|
|
pp_mean = 10 * np.log10(np.mean(p_means_all[names[j]], axis=0) / ref)
|
|
else:
|
|
pp = p_means_all[names[j]]
|
|
pp_mean = np.mean(p_means_all[names[j]], axis=0)
|
|
return pp, pp_mean
|
|
|
|
|
|
def update_burst_corr_peaks(colors_p, freqs, frs_burst_corr, labels):
|
|
frs_burst_corr_mean = np.nanmean(frs_burst_corr)
|
|
freqs.extend([
|
|
frs_burst_corr_mean]) # np.abs(np.abs(DF1) - np.abs(DF2)),,np.array(np.nanmax(frame_spikes['highest_fr'])),np.array(np.nanmax(frame_spikes['highest_fr_burst_corr_individual']))
|
|
labels.extend(['Baseline_Burstcorr'])
|
|
colors_p.extend(['pink'])
|
|
choice = [[0, 7], [1, 4], [2], [0, 1, 2, 3, 7]]
|
|
return choice
|
|
|
|
|
|
def get_burst_corr_peak(cell, fr_isis, group_mean, spikes_pure):
|
|
frs_burst_corr = []
|
|
for i in range(len(spikes_pure['base_0'])):
|
|
fr_isis.append(1 / np.mean(np.diff(spikes_pure['base_0'][i] / 1000))) # np.mean(fr), fr_calc,
|
|
lim_here = find_lim_here(cell, 'individual')
|
|
# print(lim_here)
|
|
# if lim_here
|
|
eod_fr = group_mean[1].EODf.iloc[i]
|
|
spikes_all = spikes_pure['base_0'][i]
|
|
isi = calc_isi(np.array(spikes_all) / 1000, eod_fr)
|
|
if np.min(isi) < lim_here:
|
|
hists2, spikes_ex, fr_burst_corr = correct_burstiness([isi], [spikes_all],
|
|
[eod_fr],
|
|
[eod_fr], lim=lim_here,
|
|
burst_corr='individual')
|
|
frs_burst_corr.append(fr_burst_corr)
|
|
else:
|
|
frs_burst_corr.append(fr_isis[-1])
|
|
# embed()
|
|
return frs_burst_corr
|
|
|
|
|
|
def get_psds_ROC(array_chosen, arrays, arrays_original, j, mean_type, names, p_means_all, nfft = 2 ** 13 ):
|
|
# 2 ** 18 # 17#16
|
|
p_mean_all_here = []
|
|
if 'AllTrialsIndex' in mean_type: # AllTrialsIndex
|
|
range_here = [array_chosen]
|
|
print('alltrials choice')
|
|
# embed()
|
|
psd_type = 'single'
|
|
else:
|
|
range_here = range(len(arrays[j]))
|
|
psd_type = 'mean_freq'
|
|
# embed()
|
|
for i in range_here:
|
|
|
|
p_type = '05'
|
|
if 'original' in p_type:
|
|
p_mean_all, f = ml.psd(arrays_original[j][i] - np.mean(arrays_original[j][i]), Fs=40000, NFFT=nfft,
|
|
noverlap=nfft // 2) #
|
|
else:
|
|
p_mean_all, f = ml.psd(arrays[j][i] - np.mean(arrays[j][i]), Fs=40000, NFFT=nfft,
|
|
noverlap=nfft // 2) #
|
|
p_mean_all_here.append(p_mean_all)
|
|
try:
|
|
p_means_all[names[j]] = p_mean_all_here
|
|
except:
|
|
print('assign p problem')
|
|
embed()
|
|
return f, nfft
|
|
|
|
|
|
def plt_traces_ROC(array_chosen, arrays, ax00, colors, datapoints, group_mean, j, mean_type, time_array, way, xlim,
|
|
ylim):
|
|
# hier wird nur der erste Array geplottet
|
|
time_array = np.arange(0, len(arrays[j][0]) / 40, 1 / 40)
|
|
try:
|
|
if '_AllTrialsIndex' in mean_type:
|
|
ax00.plot(time_array, arrays[j][array_chosen], color=colors[j])
|
|
else:
|
|
ax00.plot(time_array, arrays[j][0], color=colors[j])
|
|
except:
|
|
print('array thing')
|
|
embed()
|
|
if ('mult' in way): # 'mult_minimum','mult_env', 'mult_f1', 'mult_f2'
|
|
datapoints = find_env(way, group_mean[1], group_mean[1].index[0], 40000, datapoints, f0='EODf')
|
|
t_off = 10
|
|
trials = np.arange(datapoints + t_off, len(arrays[j][0]), datapoints + t_off)
|
|
if len(xlim) > 0:
|
|
ax00.set_xlim(xlim)
|
|
ax00.set_ylim(ylim)
|
|
ax00.spines['top'].set_visible(False)
|
|
ax00.spines['right'].set_visible(False)
|
|
ax00.spines['bottom'].set_visible(False)
|
|
ax00.spines['left'].set_visible(False)
|
|
ax00.set_xticks([])
|
|
ax00.set_yticks([])
|
|
if j == 0:
|
|
length = 20
|
|
plus_here = 5
|
|
try:
|
|
ax00.xscalebar(0.1, -0.02, length, 'ms', va='right', ha='bottom') ##ylim[0]
|
|
ax00.yscalebar(-0.02, 0.35, 500, 'Hz', va='center', ha='left')
|
|
except:
|
|
ax00.plot([0, length], [ylim[0] + plus_here, ylim[0] + plus_here], color='black')
|
|
ax00.text(0, -0.2, str(length) + ' ms', va='center', fontsize=10,
|
|
transform=ax00.transAxes)
|
|
if len(xlim) > 0:
|
|
ax00.plot([xlim[0] + 0.01, xlim[0] + 0.01], [ylim[0], 500],
|
|
color='black')
|
|
else:
|
|
ax00.plot([time_array[0] + 0.01, time_array[0] + 0.01], [ylim[0], 500],
|
|
color='black')
|
|
ax00.text(-0.1, 0.4, ' 500 Hz', rotation=90, va='center', fontsize=10,
|
|
transform=ax00.transAxes)
|
|
# ax00.plot([0, length], [ylim[0] + 0.01, ylim[0] + 0.01],
|
|
# color='black')
|
|
return time_array
|
|
|
|
|
|
def save_arrays_susept(data_dir, cell, c, b, chirps, devs, extract, group_mean, mean_type, plot_group, rocextra,
|
|
sorted_on='LocalReconst0.2Norm', base_several = False, dev_desired = '1',mean_type0 = ''):#'_MeanTrialsIndex'
|
|
# sorted_on = 'LocalReconst' # 'EodLocSynch'
|
|
|
|
version_comp, subfolder, mod_name_slash, mod_name, subfolder_path = find_code_vs_not()
|
|
load_name = find_load_function()
|
|
if (version_comp == 'develop') | (version_comp == 'code'):
|
|
results_diff = pd.DataFrame()
|
|
|
|
full_path = find_nix_full_path(c, cell, data_dir)
|
|
# embed()
|
|
if os.path.exists(full_path): # todo: this maybe also has to be fixed
|
|
print('do ' + cell)
|
|
file = nix.File.open(full_path, nix.FileMode.ReadOnly)
|
|
b = file.blocks[0]
|
|
all_mt_names, mt_names, t_names = get_all_nix_names(b, what='Three')
|
|
|
|
if mt_names:
|
|
nix_there = check_nix_fish(b)
|
|
if nix_there: ##
|
|
|
|
printing = True
|
|
t3 = time.time()
|
|
|
|
|
|
#embed()
|
|
|
|
spikes_pure, fish_number_base, chirp, fish_cuts, time_array, fish_number, smoothened2, smoothed05, eod_mt, eod_interp, effective_duration, cut, devname, frame = cut_spikes_and_eod_three(
|
|
group_mean, b, extract, chirps=chirps, emb=False,
|
|
mean_type=mean_type, sorted_on=sorted_on,
|
|
devname_orig=[dev_desired, '05', 'original']) # times_sort=times_sort,
|
|
#features, mt, name_here, l = get_mt_features3(b, group_mean)
|
|
#fish_cuts, whole_duration, delay, contrast1, contrast2, repro_position = get_fish_number(b,
|
|
# group_mean,
|
|
# mean_type)
|
|
|
|
|
|
if printing: # todo: also das dauert lange das könnte man optimizieren
|
|
print('arrays1 ' + str(time.time() - t3))
|
|
# embed()
|
|
auc_names_condition = []
|
|
auc_names_control = []
|
|
|
|
# if len(devname) > 0:
|
|
# plot mean
|
|
try:
|
|
dev_nrs = find_right_dev(devname, devs)
|
|
except:
|
|
print('dev nr thing')
|
|
embed()
|
|
# embed()
|
|
t = dev_nrs[0]
|
|
# t = 0
|
|
# frame_dev = frame[frame['dev'] == devname[t]]
|
|
delays_length = define_delays_trials(mean_type,
|
|
frame, sorted_on=sorted_on)
|
|
|
|
printing = True
|
|
t3 = time.time()
|
|
|
|
# embed()
|
|
if ('Phase' not in mean_type0) & (mean_type0 != ''):
|
|
#embed()
|
|
for i in range(len(delays_length['base_0'])):
|
|
delays_length['base_0'][i] = np.arange(0, delays_length['base_0'][i][-1], 1)
|
|
try:
|
|
array0, array01, array02, array012, mean_nrs, array012_all, array01_all, array02_all, array0_all = assign_trials(
|
|
frame,
|
|
dev_desired,
|
|
delays_length,
|
|
mean_type )
|
|
except:
|
|
print('sorting thing')
|
|
embed()
|
|
|
|
array0_original, array01_original, array02_original, array012_original, mean_nrs, array012_all, array01_all, array02_all, array0_all = assign_trials(
|
|
frame,
|
|
'original',
|
|
delays_length,
|
|
mean_type)
|
|
|
|
#embed()
|
|
|
|
if printing:
|
|
print('arrays2 ' + str(time.time() - t3))
|
|
|
|
# embed()
|
|
if 'TrialsConcat' in mean_type:
|
|
array0 = array0[0]
|
|
array01 = array01[0]
|
|
array02 = array02[0]
|
|
array012 = array012[0]
|
|
ax = 0
|
|
test = False
|
|
if test:
|
|
test_arrays(array0, array01, array02, array012)
|
|
printing = True
|
|
t3 = time.time()
|
|
if 'Mean' not in mean_type:
|
|
delays_length_m = define_delays_trials('_MeanTrialsIndexPhaseSort_Min0.25sExcluded_',
|
|
frame, sorted_on=sorted_on)
|
|
# array0_m, array01_m, array02_m, array012_m, mean_nrs, array012_all, array01_all, array02_all, array0_all = assign_trials(
|
|
# frame,
|
|
# '05',
|
|
# delays_length,
|
|
# '_MeanTrialsIndexPhaseSort_Min0.25sExcluded_')
|
|
if printing:
|
|
print('arrays3 ' + str(time.time() - t3))
|
|
|
|
# else:
|
|
# array0_m = array0
|
|
# array01_m = array01
|
|
# array02_m = array02
|
|
# array012_m = array012
|
|
# embed()
|
|
if rocextra:
|
|
arrays = [[array0, array01], [array02, array012]]
|
|
arrays = arrays[plot_group]
|
|
# arrays_m = [[array0_m, array01_m], [array02_m, array012_m]]
|
|
# arrays_m = arrays_m[plot_group]
|
|
else:
|
|
arrays = [array0, array01, array02, array012]
|
|
arrays_original = [array0_original, array01_original, array02_original, array012_original]
|
|
# arrays_m = [array0_m, array01_m, array02_m, array012_m]
|
|
|
|
names = ['base_0', 'control_01', 'control_02', '012']
|
|
spikes_all_out = {}
|
|
for n, name in enumerate(names):
|
|
spikes_all = []
|
|
for s, sp in enumerate(np.array(spikes_pure[name])):
|
|
spikes = spikes_pure[name].iloc[s] * 1000
|
|
# spikes = spikes_pure[key_names[j]].iloc[i]*1000
|
|
if name != 'base_0':
|
|
# embed()
|
|
if s != 0:
|
|
# sort the spikes here!
|
|
|
|
if len(delays_length) > 0:
|
|
cut = delays_length[name][s - 1][0] / 40
|
|
spikes = spikes[spikes > cut] - cut
|
|
else:
|
|
try:
|
|
cut = delays_length_m[name][s - 1][0] / 40
|
|
except:
|
|
print('delay thing')
|
|
embed()
|
|
spikes = spikes[spikes > cut] - cut
|
|
# embed()
|
|
spikes_all.append(np.array(spikes))
|
|
spikes_all_out[name] = spikes_all
|
|
|
|
if (version_comp == 'develop'):
|
|
# embed()
|
|
for n, name in enumerate(names):
|
|
# save_here = pd.DataFrame(np.transpose(arrays[n]))
|
|
save_here = save_csv_to_pandas(arrays[n])
|
|
save_here.to_csv(load_name + '_05_' + name + '.csv')
|
|
|
|
# np.savetxt(load_name +'_05_'+name+'.csv', arrays[n], delimiter=",")
|
|
# save_here = pd.DataFrame(np.transpose(arrays_original[n]))
|
|
save_here = save_csv_to_pandas(arrays_original[n])
|
|
# np.savetxt(load_name + '_original_' + name + '.csv', arrays_original[n], delimiter=",")
|
|
save_here.to_csv(load_name + '_original_' + name + '.csv')
|
|
|
|
save_here = save_csv_to_pandas(spikes_all_out[name])
|
|
# save_here = pd.DataFrame(np.transpose(np.array(spikes_all_out[name])))
|
|
save_here.to_csv(load_name + '_spikes_' + name + '.csv')
|
|
|
|
# np.savetxt(load_name + '_original_' + name + '.csv', arrays_original[n], delimiter=",")
|
|
# save_here.to_csv(load_name + '_spikes_' + name + '.csv')
|
|
# a = numpy.asarray([ [10,10,30,20], [56,1337,20], [20,20,20] ])
|
|
# np.savetxt(load_name + '_spikes_' + name + '.csv', a, delimiter=",")
|
|
# np.savetxt(load_name + '_spikes_' + name + '.csv', np.array(spikes_all_out[name]), fmt="%s", delimiter=",")
|
|
# embed()
|
|
# arrays_original
|
|
# spikes_pure
|
|
# todo: das noch mit den normalen spike resave funktionen machen
|
|
# embed()
|
|
test = False
|
|
if test:
|
|
test_arrays()
|
|
# todo: hier arrays, arrays_original und spikes_pure speichern
|
|
elif version_comp == 'public':
|
|
spikes_all_out = {}
|
|
arrays_original = []
|
|
arrays = []
|
|
names = ['base_0', 'control_01', 'control_02', '012']
|
|
# embed()
|
|
for n, name in enumerate(names):
|
|
spikes = pd.read_csv(load_name + '_spikes_' + name + '.csv', index_col=0)
|
|
array_o = pd.read_csv(load_name + '_original_' + name + '.csv', index_col=0)
|
|
array_05 = pd.read_csv(load_name + '_05_' + name + '.csv', index_col=0)
|
|
|
|
spikes_all_out[name] = np.array(np.transpose(spikes))
|
|
arrays_original.append(np.array(np.transpose(array_o)))
|
|
arrays.append(np.array(np.transpose(array_05)))
|
|
# with open(load_name + '_original_' + name + '.csv') as csv_file:
|
|
# array_p = csv.reader(csv_file, delimiter=',')
|
|
|
|
# spikes_all_out[name] = spikesspikes = []
|
|
# for row in csvReader(load_name + '_spikes_' + name + '.csv'):
|
|
# spikes.append(row)
|
|
# spikes_all_out[name] = spikes
|
|
# embed()
|
|
|
|
return arrays, arrays_original, spikes_all_out
|
|
|
|
|
|
def find_nix_full_path(c, cell, data_dir):
|
|
base = cell.split(os.path.sep)[-1] + ".nix"
|
|
if data_dir == '':
|
|
path = '../data/ThreeFish/' + cell
|
|
else:
|
|
# try:
|
|
path = load_folder_name('data') + data_dir[c] + cell
|
|
# except:
|
|
# print('load thing')
|
|
# embed()
|
|
full_path = path + '/' + base
|
|
return full_path
|
|
|
|
|
|
# , cut, delays_length, delays_length_m, effective_duration, frame,
|
|
|
|
def plt_single_pds(nfft, f, p_means, p_mean_all_here, ylim_psd, xlim_psd, color_psd, names, ps, arrays, ax_ps, grid0,
|
|
row, j, p_means_all, psd_type='mean_freq', log='log', ax00 = None):
|
|
# embed()
|
|
|
|
if psd_type == 'single':
|
|
ref = np.max([p_means_all['012'][0], p_means_all['01'][0], p_means_all['02'][0], p_means_all['0'][0]])
|
|
|
|
if not ax00:
|
|
ax00 = plt.subplot(grid0[row + 2, j])
|
|
ax_ps.append(ax00)
|
|
nfft = 2 ** 16
|
|
p, f = ml.psd(arrays[j][0] - np.mean(arrays[j][0]), Fs=40000, NFFT=nfft,
|
|
noverlap=nfft // 2) #
|
|
|
|
# if j == 0:
|
|
# ps[names[j]] = []
|
|
ps[names[j]] = p
|
|
# p = 10 * np.log10(p_array / ref)
|
|
p = log_calc_psd(ax00, color_psd, f, log, p, ref)
|
|
ax00.plot(f, p, color=color_psd)
|
|
# embed()
|
|
ax00.set_xlim(xlim_psd)
|
|
if len(ylim_psd) > 0:
|
|
ax00.set_ylim(ylim_psd)
|
|
remove_xticks(ax00)
|
|
if j != 0:
|
|
remove_yticks(ax00)
|
|
# remove_yticks(ax00)
|
|
|
|
# if j == 0:
|
|
# hier mache ich nur einen trial
|
|
elif psd_type == 'mean_temporal':
|
|
|
|
if not ax00:
|
|
ax00 = plt.subplot(grid0[row + 2, j])
|
|
ax_ps.append(ax00)
|
|
# hier mache ich noch den temporal mean
|
|
p_mean, f_mean = ml.psd(np.mean(arrays[j], axis=0) - np.mean(np.mean(arrays[j], axis=0)), Fs=40000, NFFT=nfft,
|
|
noverlap=nfft // 2) #
|
|
p = log_calc_psd(ax00, color_psd, f, log, p_mean, ref)
|
|
ax00.plot(f, p, color=color_psd)
|
|
ax00.set_xlim(xlim_psd)
|
|
if len(ylim_psd) > 0:
|
|
ax00.set_ylim(ylim_psd)
|
|
p_means[names[j]] = p_mean
|
|
# if j != 3:
|
|
remove_xticks(ax00)
|
|
if j != 0:
|
|
remove_yticks(ax00)
|
|
# hier mache ich einen mean über die differenz
|
|
# p_mean_all_all, f_meanall = ml.psd(arrays[j] - np.mean(arrays), Fs=40000, NFFT=nfft,
|
|
# noverlap=nfft // 2) #
|
|
|
|
|
|
|
|
elif psd_type == 'all':
|
|
if not ax00:
|
|
ax00 = plt.subplot(grid0[row + 2, j])
|
|
ax_ps.append(ax00)
|
|
|
|
for p in p_mean_all_here:
|
|
p = log_calc_psd(ax00, 'grey', f, log, p, ref)
|
|
ax00.plot(f, p, color='grey')
|
|
ax00.set_xlim(xlim_psd)
|
|
if len(ylim_psd) > 0:
|
|
ax00.set_ylim(ylim_psd)
|
|
remove_xticks(ax00)
|
|
if j != 0:
|
|
remove_yticks(ax00)
|
|
|
|
elif psd_type == 'mean_freq':
|
|
# try:
|
|
#embed()
|
|
array_here = []
|
|
for name in names:
|
|
array_here.append(np.mean(p_means_all[name], axis=0))
|
|
ref = np.max(array_here)
|
|
#ref = np.max([np.mean(p_means_all['012'], axis=0), np.mean(p_means_all['01'], axis=0),
|
|
# np.mean(p_means_all['02'], axis=0), np.mean(p_means_all['0'], axis=0)])
|
|
# except:
|
|
# print('ref something')
|
|
# embed()
|
|
#ref = np.max([np.mean(p_means_all['012'], axis=0), np.mean(p_means_all['01'], axis=0),
|
|
# np.mean(p_means_all['02'], axis=0), np.mean(p_means_all['0'], axis=0)])
|
|
|
|
if not ax00:
|
|
ax00 = plt.subplot(grid0[row + 2, j])
|
|
ax_ps.append(ax00)
|
|
# embed()
|
|
# embed()
|
|
if log == 'log':
|
|
ax00.plot(f, 10 * np.log10(np.mean(p_mean_all_here, axis=0) / ref), color=color_psd)
|
|
if j == 0:
|
|
ax00.set_ylabel('dB')
|
|
else:
|
|
ax00.plot(f, np.mean(p_mean_all_here, axis=0), color=color_psd)
|
|
|
|
ax00.set_xlim(xlim_psd)
|
|
if len(ylim_psd) > 0:
|
|
ax00.set_ylim(ylim_psd)
|
|
try:
|
|
ax00.set_xlabel('Frequency [Hz]')
|
|
except:
|
|
print('freq')
|
|
embed()
|
|
|
|
# remove_xticks(ax00)
|
|
if j != 0:
|
|
remove_yticks(ax00)
|
|
#embed()
|
|
return ref, ax00
|
|
|
|
|
|
def log_calc_psd(ax00, color_psd, f, log, p, ref):
|
|
if log == 'log':
|
|
p = 10 * np.log10(p / ref)
|
|
return p
|
|
|
|
def test_arrays(array0, array01, array02, array012):
|
|
fig, ax = plt.subplots(5, 1, sharex=True, sharey=True)
|
|
ax[0].plot(array0[0])
|
|
ax[1].plot(array01[0])
|
|
ax[2].plot(array02[0])
|
|
ax[3].plot(array012[0])
|
|
ax[4].plot(array0[0], label='0')
|
|
ax[4].plot(array01[0], label='01')
|
|
ax[4].plot(array02[0], label='02')
|
|
ax[4].plot(array012[0], label='012')
|
|
plt.legend()
|
|
plt.show()
|
|
|
|
|
|
def chose_certain_group(DF1_desired, DF2_desired, grouped, concat=False, several=False, emb=False):
|
|
if DF1_desired == 'all' or DF2_desired == 'all':
|
|
return
|
|
# embed()
|
|
if several:
|
|
if (type(DF1_desired) == float) & (type(DF2_desired) == float):
|
|
restrict = group_the_certain_group_several(grouped, DF2_desired, DF1_desired, emb=False)
|
|
# embed()
|
|
if concat:
|
|
# embed()
|
|
# keys_r = np.array([k for k in grouped.groups])[restrict]
|
|
# embed()
|
|
key_list = list(map(tuple, grouped.groups.keys()))
|
|
keys_r = np.array(key_list, dtype=object)[np.array(restrict)]
|
|
# result = np.asarray(key_list).shape
|
|
# key_list[np.array(restrict)]
|
|
# grouped.apply(lambda x: x.name)
|
|
groups = []
|
|
for r in keys_r:
|
|
# embed()
|
|
if len(groups) < 1:
|
|
groups = grouped.get_group(tuple(r))
|
|
else:
|
|
groups = pd.concat([groups, grouped.get_group(tuple(r))])
|
|
print(len(grouped.get_group(tuple(r))))
|
|
# pd.concat([df1, df_success], axis=1)
|
|
|
|
final_grouped = groups
|
|
# embed()
|
|
else:
|
|
# embed()
|
|
|
|
# keys_r = np.array(list(map(tuple, grouped.groups.keys())))[restrict]
|
|
# grouped.get_group(keys_r)
|
|
# embed()
|
|
try:
|
|
final_grouped = np.array(list(grouped), dtype=object)[restrict]
|
|
except:
|
|
# embed()
|
|
keys_r = np.array([k for k in grouped.groups])[restrict]
|
|
keys_r = np.array(list(map(tuple, grouped.groups.keys())))[restrict]
|
|
|
|
# grouped.apply(lambda x: x.name)
|
|
groups = []
|
|
for r in keys_r:
|
|
# embed()
|
|
if len(groups) < 1:
|
|
groups = [tuple(r), grouped.get_group(tuple(r))]
|
|
else:
|
|
groups = pd.concat([groups, grouped.get_group(tuple(r))])
|
|
print(len(grouped.get_group(tuple(r))))
|
|
# pd.concat([df1, df_success], axis=1)
|
|
|
|
final_grouped = groups
|
|
# embed()
|
|
# embed()
|
|
else:
|
|
# embed()
|
|
restricts = []
|
|
final_grouped = []
|
|
for d in range(len(DF1_desired)):
|
|
restrict = group_the_certain_group_several(grouped, DF2_desired[d], DF1_desired[d], emb=False)
|
|
print(restrict)
|
|
|
|
if concat:
|
|
keys_r = np.array(list(map(tuple, grouped.groups.keys())))[restrict]
|
|
|
|
# grouped.apply(lambda x: x.name)
|
|
groups = []
|
|
for r in keys_r:
|
|
if len(groups) < 1:
|
|
groups = grouped.get_group(tuple(r))
|
|
else:
|
|
groups = pd.concat([groups, grouped.get_group(tuple(r))])
|
|
# pd.concat([df1, df_success], axis=1)
|
|
|
|
final_grouped.append(groups)
|
|
else:
|
|
final_grouped.append(np.array(list(grouped))[restrict])
|
|
restricts.append(restrict)
|
|
|
|
# embed()
|
|
# grouped = list(grouped) # [::-1]
|
|
# final_grouped
|
|
# embed()
|
|
# embed()
|
|
else:
|
|
|
|
if (type(DF1_desired) == float) & (type(DF2_desired) == float):
|
|
restrict = group_the_certain_group(grouped, DF2_desired, DF1_desired)
|
|
grouped = list(grouped) # [::-1]
|
|
final_grouped = grouped[restrict]
|
|
else:
|
|
restricts = []
|
|
final_grouped = []
|
|
|
|
for d in range(len(DF1_desired)):
|
|
# embed()
|
|
restrict = group_the_certain_group(grouped, DF2_desired[d], DF1_desired[d])
|
|
print(restrict)
|
|
final_grouped.append(list(grouped)[restrict])
|
|
restricts.append(restrict)
|
|
|
|
# grouped = list(grouped) # [::-1]
|
|
# grouped = final_grouped
|
|
# embed()
|
|
# embed()
|
|
if emb:
|
|
embed()
|
|
return final_grouped
|
|
|
|
|
|
def phase_sort_arrays(f, delays_length, frame_dev):
|
|
# try:
|
|
if f != 0:
|
|
|
|
# embed()
|
|
if delays_length['012'][f - 1] != []:
|
|
frame_dev.iloc[f]['012'] = frame_dev['012'].iloc[f][
|
|
np.arange(delays_length['012'][f - 1][0], len(frame_dev['012'].iloc[f]),
|
|
1)] # np.array(frame_dev['012'].iloc[f])[np.array(list(map(int, delays_length['012'][f - 1])))]
|
|
# frame_dev['012'].iloc[f]
|
|
if delays_length['control_01'][f - 1] != []:
|
|
frame_dev.iloc[f]['control_01'] = frame_dev['control_01'].iloc[f][
|
|
np.arange(delays_length['control_01'][f - 1][0], len(frame_dev['control_01'].iloc[f]),
|
|
1)] # frame_dev['control_01'].iloc[f][delays_length['control_01'][f - 1]]
|
|
if delays_length['control_02'][f - 1] != []:
|
|
frame_dev.iloc[f]['control_02'] = frame_dev['control_02'].iloc[f][
|
|
np.arange(delays_length['control_02'][f - 1][0], len(frame_dev['control_02'].iloc[f]), 1)]
|
|
if 'base_0' in delays_length.keys():
|
|
if delays_length['base_0'][f - 1] != []:
|
|
frame_dev.iloc[f]['base_0'] = frame_dev['base_0'].iloc[f][ np.arange(delays_length['base_0'][f - 1][0], len(frame_dev['base_0'].iloc[f]), 1)]
|
|
|
|
return frame_dev
|
|
|
|
|
|
def cut_uneven_trials(frame, devname, mean_type, delays_length, sampling=40000):
|
|
# embed()
|
|
frame_dev = frame[frame['dev'] == devname]
|
|
|
|
# 'Min' ja, Phase nein
|
|
#####################################
|
|
# wenn das alles phase sorted sein soll, werden die davor ausgerichtet
|
|
# für das Threewave nicht notwenig
|
|
length = []
|
|
# embed()
|
|
for f in range(len(frame_dev['012'])):
|
|
if 'Phase' in mean_type:
|
|
# try:
|
|
frame_dev = phase_sort_arrays(f, delays_length, frame_dev)
|
|
# except:
|
|
# print('uneven thing')
|
|
# embed()
|
|
# nicht default! Für Benjamin relevant!
|
|
length.append([len(frame_dev['012'].iloc[f]), len(frame_dev['control_01'].iloc[f]),
|
|
len(frame_dev['control_02'].iloc[f]), len(frame_dev['base_0'].iloc[f])])
|
|
# except:
|
|
|
|
#######################
|
|
# hier werden alle trials auf die gleiche Länge geschnitten
|
|
array0_all, array01_all, array02_all, array012_all = cut_even_arrays(length, sampling, mean_type, frame_dev)
|
|
|
|
return array012_all, array01_all, array02_all, array0_all
|
|
|
|
|
|
def cut_even_arrays(length, sampling, mean_type, frame_dev):
|
|
# hier sagen wir mindestens z.B. 0.25 S!
|
|
if 'Min' in mean_type: # 0.25sExcluded # DEFAULT
|
|
ms_exclude = float(mean_type.split('Min')[1].split('sExcluded')[0])
|
|
exclude_array = np.array(length) > ms_exclude * sampling
|
|
length_min = np.min(np.array(length)[np.array(length) > 0.25 * sampling])
|
|
else:
|
|
exclude_array = np.ones_like(length)
|
|
length_min = np.min(length)
|
|
|
|
array012_all = [] # [[]] * len(frame_dev['012'])
|
|
array01_all = [] # [[]] * len(frame_dev['012'])
|
|
array02_all = [] # [[]] * len(frame_dev['012'])
|
|
array0_all = [] # [[]] * len(frame_dev['012'])
|
|
for f in range(len(frame_dev['012'])):
|
|
if exclude_array[f][0]:
|
|
array012_all.append(frame_dev['012'].iloc[f][0:length_min])
|
|
if exclude_array[f][1]:
|
|
array01_all.append(frame_dev['control_01'].iloc[f][0:length_min])
|
|
if exclude_array[f][2]:
|
|
array02_all.append(frame_dev['control_02'].iloc[f][0:length_min])
|
|
if exclude_array[f][3]:
|
|
array0_all.append(frame_dev['base_0'].iloc[f][0:length_min])
|
|
return array0_all, array01_all, array02_all, array012_all
|
|
|
|
|
|
def plt_phase_sorted_trials(frame, devname, array0_all, array0, array01_all, array01, array02_all, array02,
|
|
array012_all, array012, ):
|
|
fig, ax = plt.subplots(4, 2, sharey=True, sharex=True)
|
|
lmax = np.nanmax([np.nanmax(np.transpose(array02_all)), np.nanmax(np.transpose(array01_all)),
|
|
np.nanmax(np.transpose(array0_all)), np.nanmax(np.transpose(array012_all))])
|
|
lmin = np.nanmin([np.nanmin(np.transpose(array02_all)), np.nanmin(np.transpose(array01_all)),
|
|
np.nanmin(np.transpose(array0_all)), np.nanmin(np.transpose(array012_all))])
|
|
|
|
names = ['base_0', 'control_01', 'control_02', '012']
|
|
xlim = 4000
|
|
x = 1000
|
|
# for ff, f in enumerate(frame.dev.unique()):
|
|
for nn, n in enumerate(names):
|
|
frame_dev = frame[frame.dev == devname]
|
|
|
|
for i in range(len(frame_dev[n])):
|
|
if nn == 0:
|
|
ax[nn, 1].set_title('not sorted')
|
|
ax[nn, 1].plot(frame_dev[n].iloc[i])
|
|
ax[nn, 0].set_xlim(0, xlim)
|
|
ax[nn, 0].axvline(x=x)
|
|
p, freq = ml.psd(frame_dev[n].iloc[i] - np.mean(frame_dev[n].iloc[i]),
|
|
Fs=40000,
|
|
NFFT=8000, noverlap=8000 / 2)
|
|
# if len(id_group) > 0:
|
|
# max_f = freq[np.argmax(p[freq < np.mean(id_group[1]['eodf'])])]
|
|
# ax[nn, o].set_title( n + ' ' + str(max_f))
|
|
# counter += 1
|
|
|
|
plt.suptitle(devname)
|
|
|
|
ax[3, 0].set_ylabel('012')
|
|
|
|
ax[3, 0].plot(np.transpose(array012_all))
|
|
ax[3, 0].plot(array012[0], color='red')
|
|
ax[3, 0].set_ylim(lmin, lmax)
|
|
ax[3, 0].set_xlim(0, xlim)
|
|
ax[3, 0].axvline(x=x)
|
|
|
|
ax[1, 0].set_ylabel('01')
|
|
ax[1, 0].plot(np.transpose(array01_all))
|
|
ax[1, 0].plot(array01[0], color='red')
|
|
ax[1, 0].set_ylim(lmin, lmax)
|
|
ax[1, 0].set_xlim(0, xlim)
|
|
ax[1, 0].axvline(x=x)
|
|
|
|
ax[2, 0].set_ylabel('02')
|
|
ax[2, 0].plot(np.transpose(array02_all))
|
|
ax[2, 0].plot(array02[0], color='red')
|
|
ax[2, 0].set_ylim(lmin, lmax)
|
|
ax[2, 0].set_xlim(0, xlim)
|
|
ax[2, 0].axvline(x=x)
|
|
|
|
ax[0, 0].set_ylabel('0')
|
|
ax[0, 0].set_title('sorted')
|
|
ax[0, 0].plot(np.transpose(array0_all))
|
|
ax[0, 0].plot(array0[0], color='red')
|
|
ax[0, 0].set_ylim(lmin, lmax)
|
|
ax[0, 0].set_xlim(0, xlim)
|
|
ax[0, 0].axvline(x=x)
|
|
plt.subplots_adjust(hspace=0.4, wspace=0.35)
|
|
save_visualization(show=False)
|
|
|
|
|
|
def assign_trials(frame, devname, delays_length, mean_type, sampling=40000):
|
|
# get all trails together
|
|
array012_all, array01_all, array02_all, array0_all = cut_uneven_trials(frame, devname, mean_type, delays_length,
|
|
sampling=sampling)
|
|
|
|
# calculate mean or also not
|
|
array0, array012, array01, array02, mean_nrs = assign_trials_mean(devname, frame, array012_all, mean_type,
|
|
array01_all,
|
|
array02_all, array0_all)
|
|
|
|
return array0, array01, array02, array012, mean_nrs, array012_all, array01_all, array02_all, array0_all
|
|
|
|
|
|
def assign_trials_mean(devname, frame, array012_all, mean_type, array01_all, array02_all, array0_all):
|
|
if '_MeanTrials' in mean_type:
|
|
|
|
if 'TrialsConcat' in mean_type:
|
|
# embed()
|
|
trial_concats = int(mean_type.split('TrialsConcat_')[1][0])
|
|
|
|
length = len(array012_all)
|
|
array012 = []
|
|
array01 = []
|
|
array02 = []
|
|
array0 = []
|
|
for trial_concat in range(trial_concats):
|
|
array012.append([np.mean(np.array(array012_all[int(length * (trial_concat / trial_concats)):int(
|
|
length * ((trial_concat + 1) / trial_concats))]), axis=0)])
|
|
array01.append([np.mean(np.array(array01_all[int(length * (trial_concat / trial_concats)):int(
|
|
length * ((trial_concat + 1) / trial_concats))]), axis=0)])
|
|
array02.append([np.mean(np.array(array02_all[int(length * (trial_concat / trial_concats)):int(
|
|
length * ((trial_concat + 1) / trial_concats))]), axis=0)])
|
|
array0.append([np.mean(np.array(array0_all[int(length * (trial_concat / trial_concats)):int(
|
|
length * ((trial_concat + 1) / trial_concats))]), axis=0)])
|
|
|
|
else:
|
|
if 'snippets' in mean_type:
|
|
# embed()
|
|
snippets = int(mean_type.split('snippets')[0][-1])
|
|
array012 = [np.mean(np.array(array012_all)[0:int(len(array012_all) / snippets)], axis=0),
|
|
np.mean(np.array(array012_all)[int(len(array012_all) / snippets):-1], axis=0)]
|
|
array01 = [np.mean(np.array(array01_all)[0:int(len(array012_all) / snippets)], axis=0),
|
|
np.mean(np.array(array01_all)[int(len(array01_all) / snippets):-1], axis=0)]
|
|
array02 = [np.mean(np.array(array02_all)[0:int(len(array012_all) / snippets)], axis=0),
|
|
np.mean(np.array(array02_all)[int(len(array02_all) / snippets):-1], axis=0)]
|
|
array0 = [np.mean(np.array(array0_all)[0:int(len(array012_all) / snippets)], axis=0),
|
|
np.mean(np.array(array0_all)[int(len(array0_all) / snippets):-1], axis=0)]
|
|
|
|
else:
|
|
array012 = [np.mean(np.array(array012_all), axis=0)]
|
|
array01 = [np.mean(np.array(array01_all), axis=0)]
|
|
array02 = [np.mean(np.array(array02_all), axis=0)]
|
|
array0 = [np.mean(np.array(array0_all), axis=0)]
|
|
mean_nrs = len(array012_all)
|
|
# if np.isnan(array02[0]).all():
|
|
test = False
|
|
# embed()
|
|
if test:
|
|
if devname == 'eod':
|
|
plt_phase_sorted_trials(frame, devname, array0_all, array0, array01_all, array01, array02_all, array02,
|
|
array012_all, array012, )
|
|
# plot_traces_frame_three_roc(frame, [], show=True)
|
|
|
|
plt.show()
|
|
# embed()
|
|
test = False
|
|
if test == True:
|
|
# plt.figure(figsize=(12, 6))
|
|
# embed()
|
|
|
|
plot_traces_frame_three_roc(frame, [], show=True)
|
|
|
|
else:
|
|
mean_nrs = 1
|
|
array012 = array012_all # np.array(frame_dev['012'])
|
|
array01 = array01_all # np.array(frame_dev['control_01'])
|
|
array02 = array02_all # np.array(frame_dev['control_02'])
|
|
array0 = array0_all # np.array(frame_dev['base_0'])
|
|
test = False
|
|
if test == True:
|
|
test_assign_trials(devname, array01, array02, array0, array012)
|
|
# embed()
|
|
return array0, array012, array01, array02, mean_nrs
|
|
|
|
|
|
def test_assign_trials(devname, array01, array02, array0, array012):
|
|
plt.suptitle(devname)
|
|
plt.subplot(2, 2, 1)
|
|
plt.title('012')
|
|
|
|
plt.plot(array012[0], color='red')
|
|
plt.subplot(2, 2, 2)
|
|
plt.title('01')
|
|
# plt.title(times_sort.DF1)
|
|
plt.plot(array01[0], color='red')
|
|
plt.subplot(2, 2, 3)
|
|
plt.title('02')
|
|
plt.plot(array02[0], color='red')
|
|
plt.subplot(2, 2, 4)
|
|
plt.title('0')
|
|
plt.plot(array0[0], color='red')
|
|
save_visualization()
|
|
plt.show()
|
|
|
|
|
|
def plot_traces_frame_three_roc(frame, id_group, show=True, names=['base_0', 'control_01', 'control_02', '012']):
|
|
#########################################
|
|
# plot thre arrays of the data
|
|
|
|
counter = 0
|
|
|
|
frame_dev = frame[frame.dev == 'eod']
|
|
fig, axis = plt.subplots(len(frame.dev.unique()), len(names), sharex=True)
|
|
if len(id_group) > 0:
|
|
plt.suptitle('DF1 ' + str(np.mean(id_group[1]['DF1'])) + ' DF2' + str(
|
|
np.mean(id_group[1]['DF2'])))
|
|
|
|
for ff, f in enumerate(frame.dev.unique()):
|
|
for nn, n in enumerate(names):
|
|
frame_dev = frame[frame.dev == f]
|
|
|
|
for i in range(len(frame_dev[n])):
|
|
axis[ff, nn].plot(frame_dev[n].iloc[i])
|
|
p, freq = ml.psd(frame_dev[n].iloc[i] - np.mean(frame_dev[n].iloc[i]),
|
|
Fs=40000,
|
|
NFFT=8000, noverlap=8000 / 2)
|
|
if len(id_group) > 0:
|
|
max_f = freq[np.argmax(p[freq < np.mean(id_group[1]['eodf'])])]
|
|
axis[ff, nn].set_title(f + ' ' + n + ' ' + str(max_f))
|
|
counter += 1
|
|
plt.subplots_adjust(hspace=0.6, wspace=0.6)
|
|
|
|
save_visualization(show=False)
|
|
if show:
|
|
plt.show()
|
|
|
|
|
|
def divergence_title_add_on(group_mean, fr, autodefine):
|
|
if 'triangle' in autodefine:
|
|
if 'df1' in autodefine:
|
|
try:
|
|
divergence = np.abs(np.abs(group_mean[1]['DF1, DF2'].iloc[0][0]) - fr)
|
|
except:
|
|
print('df1 divergence problems')
|
|
embed()
|
|
elif 'df2' in autodefine:
|
|
divergence = np.abs(np.abs(group_mean[1]['DF1, DF2'].iloc[0][1]) - fr)
|
|
elif 'diagonal' in autodefine:
|
|
try:
|
|
divergence = np.abs(np.abs(
|
|
np.abs(group_mean[1]['DF1, DF2'].iloc[0][0]) + np.abs(group_mean[1]['DF1, DF2'].iloc[0][1])) - fr)
|
|
except:
|
|
print('diagonal divergence problems')
|
|
embed()
|
|
else:
|
|
divergence = ''
|
|
fr_end = '\n fr ' + str(fr) + ' Hz ' + ' fr_m ' + str(
|
|
np.round(np.mean(fr / group_mean[1].EODf + 1), 2)) + ' Hz ' + 'diverge from Fr by ' + str(
|
|
divergence) + ' Hz ' + autodefine
|
|
else:
|
|
fr_end = ''
|
|
return fr_end
|
|
|
|
|
|
def find_env(way, results_diff, position_diff, sampling, datapoints, f0='f0'):
|
|
# embed()
|
|
#try:
|
|
beat1 = np.abs(results_diff.loc[position_diff, 'f1'] - results_diff.loc[position_diff, f0])
|
|
#except:
|
|
# print('eodf something')
|
|
# embed()
|
|
|
|
beat2 = np.abs(results_diff.loc[position_diff, 'f2'] - results_diff.loc[position_diff, f0])
|
|
if 'mult_minimum' in way:
|
|
env_f = np.min([np.min(beat1), np.min(beat2)])
|
|
elif 'mult_env' in way:
|
|
env_f = np.abs(beat1 - beat2)
|
|
if env_f == 0:
|
|
env_f = np.min([np.min(beat1), np.min(beat2)])
|
|
elif 'mult_f1' in way:
|
|
env_f = beat1
|
|
elif 'mult_f2' in way:
|
|
env_f = beat2
|
|
else:
|
|
if 'f1' in results_diff.keys():
|
|
env_f = np.abs(results_diff.loc[position_diff, 'f1'] - results_diff.loc[position_diff, 'f2'])
|
|
'mult_minimum', 'mult_env', 'mult_f1', 'mult_f2'
|
|
|
|
|
|
# try:
|
|
# embed()
|
|
datapoints = int((1 / env_f) * int(way[-1]) * sampling)
|
|
# except:
|
|
# print('problem datapoints')
|
|
# embed()
|
|
|
|
return datapoints
|
|
|
|
|
|
def check_nix_fish(b, with_fish2='with_fish2'):
|
|
nix_there = False
|
|
names_mt = []
|
|
names_f = []
|
|
for t_nr, mt in enumerate(
|
|
b.multi_tags): # todo: hier kann man immer noch die Daten anschaeun die ohne Nix sind aber die waren glaube ich nciht so gut
|
|
names_mt.append(mt.name)
|
|
if ('Three' in mt.name) and not nix_there:
|
|
|
|
# ok man braucht das hier wenn man nicht erst über alle mts gehen will!
|
|
if with_fish2:
|
|
for ff, f in enumerate(mt.features):
|
|
if 'id' not in f.data.name and not nix_there:
|
|
names_f.append(f.data.name)
|
|
if 'fish2' in f.data.name:
|
|
nix_there = True
|
|
else:
|
|
nix_there = False
|
|
else:
|
|
nix_there = True
|
|
# embed()
|
|
return nix_there
|
|
|
|
|
|
|
|
|
|
def load_data_arrays(extract, mt_group, sampling_rate, sorted_on, b, mt, mt_nr, delay, printing=False):
|
|
array_eod = {}
|
|
############################################
|
|
t1 = time.time()
|
|
# global + Efield
|
|
# die brauchen wir weil wir die als stimulus mit abspeichern wollen
|
|
# embed()
|
|
eod_globalEfield, sampling = link_arrays_eod(b, mt.positions[:][mt_nr] - delay,
|
|
mt.extents[:][mt_nr] + delay, array_name='GlobalEFieldStimulus')
|
|
eod_global, sampling = link_arrays_eod(b, mt.positions[:][mt_nr] - delay,
|
|
mt.extents[:][mt_nr] + delay, array_name='EOD')
|
|
|
|
array_eod['Global'] = eod_global
|
|
array_eod['EField'] = eod_globalEfield
|
|
if printing:
|
|
print('second0 ' + str(time.time() - t1))
|
|
|
|
#######################################################
|
|
# das brauchen wir auf jeden Fall halt womöglich zum plotten
|
|
|
|
# 'LocalReconst', 'Global', 'EField'
|
|
t1 = time.time()
|
|
time_eod = np.arange(0, len(eod_global) / 40000, 1 / 40000) - delay
|
|
|
|
spikes_mt = link_arrays_spikes(b, first=mt.positions[:][mt_nr] - delay, second=mt.extents[:][mt_nr] + delay,
|
|
minus_spikes=mt.positions[:][mt_nr])
|
|
array_eod['spikes_mt'] = spikes_mt
|
|
array_eod['time_eod'] = time_eod
|
|
if printing:
|
|
print('second1 ' + str(time.time() - t1))
|
|
# if sorted_on == 'LocalReconstAm':
|
|
# eod_local_recondstruct_am, eods_local_reconstruct_norm = extract_am(array_eod['LocalReconst'],
|
|
# array_eod['time_eod'],
|
|
# sampling=sampling_rate,norm = False,
|
|
# eodf=mt_group[1].eodf[
|
|
# mt_nr], emb=False,
|
|
# extract=extract)#
|
|
# else:
|
|
# eod_local_recondstruct_am = []
|
|
# eods_local_reconstruct_norm = []
|
|
# array_eod['LocalReconstAm'] = eod_local_recondstruct_am
|
|
|
|
############## PHASE SORTING
|
|
|
|
t1 = time.time()
|
|
nrs = ['', '0.2', '0.4']
|
|
norms = ['', 'Norm']
|
|
# hier define ich die ich minimal brauche
|
|
sorted_ons = ['LocalReconst', sorted_on]
|
|
for sorted_on_here in sorted_ons:
|
|
for norm in norms:
|
|
if norm == 'Norm':
|
|
norm_ex = True
|
|
else:
|
|
norm_ex = False
|
|
for nr in nrs:
|
|
# das Ganze jetzt auch nochmal groß machen für das sorting
|
|
name = 'LocalReconst' + str(nr) + norm
|
|
name_am = 'LocalReconst' + str(nr) + norm + 'Am'
|
|
if nr != '':
|
|
if name in sorted_on_here:
|
|
t1 = time.time()
|
|
eod_global_norm = zenter_and_normalize(eod_global, 1)
|
|
eod_globalEfield_norm02 = zenter_and_normalize(eod_globalEfield, float(nr))
|
|
eod_local = cut_ends(eod_global_norm, eod_globalEfield_norm02)
|
|
if printing:
|
|
print('second20 ' + str(time.time() - t1))
|
|
else:
|
|
eod_local = []
|
|
else:
|
|
eod_local = cut_ends(eod_global, eod_globalEfield)
|
|
# update_array_matrix(array_eod, eod_local_reconstruct, name)
|
|
|
|
########################################
|
|
# ich glaube wir brauchen das jetzt nicht für alle
|
|
# weil hier will ich dass nur die ams rauskommen die ich brauche ich muss das ja nicht üfr alle local global etcs. machen
|
|
# todo: aber das muss man noch shcauen ob das nicht hier crashed
|
|
if (name_am in sorted_on_here):
|
|
if (len(eod_local) > 0):
|
|
t1 = time.time()
|
|
eod_final_am, eod_final = extract_am(
|
|
eod_local,
|
|
array_eod['time_eod'],
|
|
sampling=sampling_rate,
|
|
eodf=mt_group[1].eodf[
|
|
mt_nr],
|
|
emb=False, norm=norm_ex,
|
|
extract=extract)
|
|
if printing:
|
|
print('second21 ' + str(time.time() - t1))
|
|
if sorted_on_here == name_am:
|
|
eod_final = []
|
|
else:
|
|
eod_final_am = []
|
|
# eod_final = []
|
|
else:
|
|
eod_final_am = []
|
|
eod_final = []
|
|
else:
|
|
if (len(eod_local) > 0):
|
|
if norm_ex:
|
|
ed_final = zenter_and_normalize(eod_local, 1)
|
|
else:
|
|
eod_final = eod_local
|
|
eod_final_am = []
|
|
else:
|
|
eod_final_am = []
|
|
eod_final = []
|
|
# if name_am == 'LocalReconst0.2AmNorm':
|
|
# embed()#
|
|
t1 = time.time()
|
|
array_eod = update_array_matrix(array_eod, eod_final, name)
|
|
array_eod = update_array_matrix(array_eod, eod_final_am, name_am)
|
|
if printing:
|
|
print('second22 ' + str(time.time() - t1))
|
|
if printing:
|
|
print('second2 ' + str(time.time() - t1))
|
|
# embed()
|
|
# array_eod['LocalReconst'+str(nr)+''+norm] = eod_local_reconstruct_big_norm
|
|
# array_eod['LocalReconst'+str(nr)+'Am'+norm] = eod_local_reconstruct_big_am
|
|
# embed()
|
|
# array_eod['LocalReconst']
|
|
#####################
|
|
## normalize for deptiction purposes
|
|
# eod_global_norm = zenter_and_normalize(eod_global, 1)
|
|
# eod_globalEfield_norm = zenter_and_normalize(eod_globalEfield, 0.20)
|
|
# eod_local_reconstruct_norm = eod_global_norm + eod_globalEfield_norm
|
|
# embed()
|
|
############################################
|
|
# local
|
|
|
|
# eod_local, spikes_mt, sampling = link_arrays(b, first=mt.positions[:][mt_nr] - delay,
|
|
# second=mt.extents[:][mt_nr] + delay,
|
|
# minus_spikes=mt.positions[:][mt_nr],load_eod_array='EOD')
|
|
|
|
t1 = time.time()
|
|
if 'LocalEOD' in sorted_on:
|
|
eod_local, sampling = link_arrays_eod(b, mt.positions[:][mt_nr] - delay,
|
|
mt.extents[:][mt_nr] + delay, array_name='LocalEOD-1')
|
|
else:
|
|
eod_local = []
|
|
if sorted_on == 'LocalEOD':
|
|
array_eod['LocalEOD'] = eod_local
|
|
else:
|
|
array_eod['LocalEOD'] = []
|
|
|
|
for norm in norms:
|
|
if norm == 'Norm':
|
|
norm_ex = True
|
|
else:
|
|
norm_ex = False
|
|
if 'LocalEOD' + norm in sorted_on:
|
|
eod_final_am, eod_final = extract_am(
|
|
eod_local,
|
|
array_eod['time_eod'],
|
|
sampling=sampling_rate,
|
|
eodf=mt_group[1].eodf[
|
|
mt_nr],
|
|
emb=False, norm=norm_ex,
|
|
extract=extract)
|
|
if 'LocalEOD' + norm + 'Am' in sorted_on:
|
|
array_eod['LocalEOD' + norm + 'Am'] = eod_final_am
|
|
else:
|
|
array_eod['LocalEOD' + norm + 'Am'] = []
|
|
if 'LocalEOD' + norm in sorted_on:
|
|
array_eod['LocalEOD' + norm] = eod_final
|
|
else:
|
|
array_eod['LocalEOD' + norm] = []
|
|
if printing:
|
|
print('second3 ' + str(time.time() - t1))
|
|
# embed()
|
|
return array_eod
|
|
|
|
|
|
def update_array_matrix(array_eod, eod_local_reconstruct_big_norm, name):
|
|
if name not in array_eod.keys():
|
|
array_eod[name] = eod_local_reconstruct_big_norm
|
|
else:
|
|
if len(array_eod[name]) == 0:
|
|
array_eod[name] = eod_local_reconstruct_big_norm
|
|
return array_eod
|
|
|
|
|
|
def chirps_delete_analysis(eod_local_interp, eod_norm, fish_cuts, time_eod, cut, fish_number, fish_number_base):
|
|
eods, _ = cut_eod_sequences(eod_norm, fish_cuts, time_eod, cut=cut,
|
|
rec=False, fish_number=fish_number,
|
|
fillup=False,
|
|
fish_number_base=fish_number_base)
|
|
eods_int, _ = cut_eod_sequences(eod_local_interp, fish_cuts, time_eod,
|
|
cut=cut, rec=False,
|
|
fish_number=fish_number,
|
|
fillup=False,
|
|
fish_number_base=fish_number_base)
|
|
keys = [k for k in eods]
|
|
fish_number_final = fish_number * 1
|
|
for e in range(len(eods)):
|
|
if len(eods[keys[e]]) > 0:
|
|
try:
|
|
freq, freq1, freq2, freq3, freq4 = calc_power(
|
|
eods[keys[e]], nfft=2 ** 9,
|
|
sampling_rate=40000,
|
|
shift_by=0.001)
|
|
except:
|
|
print('freq problem')
|
|
embed()
|
|
eods_time = np.arange(0, len(eods[keys[e]]) / 40000, 1 / 40000)
|
|
time_freq = np.linspace(eods_time[0] + 2 ** 9 / (40000 * 2),
|
|
eods_time[-1] - 2 ** 9 / (40000 * 2),
|
|
len(freq))
|
|
|
|
detection = 'No_Chirp_detected'
|
|
time_detected = []
|
|
range_exeed = 0.45
|
|
chirp_size = 35
|
|
# np.mean(eods_int[keys[e]])-np.std(eods_int[keys[e]])*2,np.mean(eods_int[keys[e]])-np.std(eods_int[keys[e]])*2)
|
|
random_data_std = np.std(eods_int[keys[e]])
|
|
random_data_mean = np.mean(eods_int[keys[e]])
|
|
anomaly_cut_off = random_data_std * 3
|
|
lower_limit = random_data_mean - anomaly_cut_off
|
|
upper_limit = random_data_mean + anomaly_cut_off
|
|
range_exeed = upper_limit - lower_limit
|
|
|
|
if (np.ptp(freq) > chirp_size) & (
|
|
np.ptp(eods_int[keys[e]]) > range_exeed): # > 0.3
|
|
|
|
perc95 = np.median(freq) + chirp_size
|
|
pos = np.diff(np.where(freq > perc95))
|
|
if 1 in pos:
|
|
if 1 in np.diff(np.where(pos == 1)):
|
|
|
|
lim_w = 0.04
|
|
lower_window = time_freq[
|
|
np.where(np.diff(freq))] - lim_w
|
|
upper_window = time_freq[
|
|
np.where(np.diff(freq))] + lim_w
|
|
time_detected = []
|
|
|
|
for nr_w in range(len(lower_window)):
|
|
eods_cut = eods_int[keys[e]][
|
|
(eods_time > lower_window[nr_w]) & (
|
|
eods_time < upper_window[nr_w])]
|
|
diverge = np.median(eods_int[keys[e]]) - np.min(
|
|
eods_cut)
|
|
|
|
if (diverge > 0.25) & (
|
|
detection != 'Chirp_detected'): #
|
|
time_detected.append(
|
|
lower_window[nr_w] + lim_w)
|
|
if keys[e] not in chirp.keys():
|
|
|
|
chirp[keys[e]] = [mt_idx]
|
|
|
|
else:
|
|
chirp[keys[e]].append(mt_idx)
|
|
fish_number_final[fish_number_final.index(
|
|
keys[e])] = 'interspace'
|
|
|
|
if len(np.unique(fish_number_final)) == 1:
|
|
if np.unique(fish_number_final)[
|
|
0] == 'interspace':
|
|
print('to many chirps')
|
|
# embed()
|
|
detection = 'Chirp_detected'
|
|
elif (np.ptp(eods_cut) > range_exeed): # > 0.55
|
|
time_detected.append(
|
|
lower_window[nr_w] + lim_w)
|
|
# else:
|
|
|
|
test = False
|
|
if test:
|
|
check_chirp_del_directly(time_detected, eods_time, eods,
|
|
range_exeed, eods_int, keys, e,
|
|
freq,
|
|
detection, time_freq, freq1, freq2,
|
|
freq3,
|
|
freq4)
|
|
|
|
return fish_number_final
|
|
|
|
|
|
def cut_spikes_and_eod_three(mt_group, b, extract, cut_nr=0, chirps='', devname_orig=['05'], emb=False, test=False,
|
|
mean_type='', mean_type0='', sorted_on='LocalReconst', sampling_rate=40000, devname=[], done=False,
|
|
counter=0, printing=False, printing_all=False):
|
|
# todo: das könnte man noch vereinfachen dass nur die wichtigen Sachen rauskommen
|
|
t1 = time.time()
|
|
# time = a
|
|
mt_list = mt_group[1]['mt']
|
|
frame = []
|
|
chirp = {}
|
|
spikes_pure = []
|
|
print('cut_spikes_and_eod_three is running')
|
|
for mt_idx, mt_nr in enumerate(list(map(int, mt_list))): # range(start_l, len(mt.positions[:]))
|
|
repro_position = mt_nr
|
|
features, mt, name_here, l = get_mt_features3(b, mt_group, mt_idx)
|
|
# somehow we have mts with negative extend, we exclude these
|
|
t0 = time.time()
|
|
if (mt.extents[:][mt_nr] > 0).any():
|
|
|
|
t1 = time.time()
|
|
_, _, _, _, fish_number, fish_cuts, whole_duration, cont = load_durations(mt_nr, mt, mt_group[1], mt_idx,
|
|
mean_type=mean_type, emb=False)
|
|
#embed()
|
|
delay = np.abs(fish_cuts[0])
|
|
if printing:
|
|
print('first ' + str(time.time() - t1))
|
|
if cont:
|
|
contrast1 = mt_group[1]['c1'].iloc[
|
|
mt_idx] # mt_group[1]['c1'].loc[indices[mt_idx]] # mt.metadata.sections[0]['fish1alone']['Contrast']
|
|
contrast2 = mt_group[1]['c2'].iloc[mt_idx] # mt.metadata.sections[0]['fish2alone']['Contrast']
|
|
# embed()
|
|
########################################
|
|
# load the according EOD arrays
|
|
# basics und reconstructs
|
|
t1 = time.time()
|
|
array_eod = load_data_arrays(extract, mt_group, sampling_rate, sorted_on, b, mt, mt_nr, delay)
|
|
|
|
if printing: # todo:das dauert ewig!
|
|
print('second ' + str(time.time() - t1))
|
|
# embed()
|
|
# eod_local_reconstruct & spikes_mt werden auf jeden Fall da sein, das sind unsere Ausschlussarrays
|
|
if (len(array_eod['LocalReconst']) > 0) & (len(array_eod['spikes_mt']) > 0) & (
|
|
not ((len(array_eod['LocalReconst']) < 1) or (len(array_eod['spikes_mt']) < 1))):
|
|
|
|
########################################
|
|
# extract the am of the loaded arrays
|
|
# das phase sorting sollte nicht anhand dieser AMs passieren, sondern anhand des gesamten Stimulus
|
|
# if 'PhaseSort' in mean_type:
|
|
# eod_local_am, eods_local_norm = extract_am(eod_local, time_eod, sampling=sampling_rate,
|
|
# eodf=mt_group[1].eodf[mt_nr], emb=False,
|
|
# extract=extract)
|
|
|
|
eod_local_am = []
|
|
eods_local_norm = []
|
|
cut_edge = [cut_nr] # 0.02
|
|
for cut in cut_edge:
|
|
if (len(array_eod['time_eod']) > 0) & (len(array_eod['spikes_mt']) > 0) & (
|
|
array_eod['time_eod'][-1] + delay > whole_duration * 0.9) & (
|
|
array_eod['spikes_mt'][-1] + delay > whole_duration * 0.6) & any_spikes(
|
|
array_eod['spikes_mt'],
|
|
minimal=fish_cuts[0] + cut,
|
|
maximal=fish_cuts[-1] - cut):
|
|
|
|
t1 = time.time()
|
|
fish_number_base = remove_interspace_fish_nr(fish_number)
|
|
if 'ChirpsDelete' in chirps:
|
|
# die Snippets ausschließen wo der Fisch gechirpt hat
|
|
fish_number_final = chirps_delete_analysis(eod_local_recondstruct_am,
|
|
eods_local_reconstruct_norm, fish_cuts,
|
|
array_eod['time_eod'], cut, fish_number,
|
|
fish_number_base)
|
|
else:
|
|
fish_number_final = fish_number
|
|
|
|
devname, smoothened2, smoothed05, mat, time_array, arrays_calc, effective_duration, spikes_cut = cut_spikes_sequences(
|
|
delay, array_eod['time_eod'][-1] + np.abs(
|
|
array_eod['time_eod'][0]) - cut * 2,
|
|
array_eod['spikes_mt'], sampling_rate, fish_cuts,
|
|
cut=cut, fish_number_base=fish_number_base,
|
|
fish_number=fish_number_final, devname_orig=devname_orig * 1,
|
|
mean_type=mean_type)
|
|
|
|
|
|
#embed()
|
|
lengths = []
|
|
if printing:
|
|
print('Forth ' + str(time.time() - t1))
|
|
for name in fish_number_final[::-1]:
|
|
if 'interspace' not in name:
|
|
lengths.append(len(
|
|
arrays_calc[0][name])) # lengths.append(len(np.unique(arrays_calc[0][name])))
|
|
|
|
if np.min(lengths) > 2:
|
|
|
|
# das sind die verschiedenen EOD versions die man zum sortieren brauchen könnte
|
|
# if 'PhaseSort' in mean_type:
|
|
# eod_arrays = [eod_global, eod_local_am, eods_local_norm, eod_local_recondstruct_am, eod_local_reconstruct, eods_local_reconstruct_norm, eod_local_reconstruct_big_am, eod_local_reconstruct_big_norm]
|
|
# names = ['global','local_am','local_norm','local_reconst_am','local_reconst_norm','local_reconst','local_reconst_big_am','local_reconst_big_norm']
|
|
# eod_arrays = [eod_local_reconstruct_norm_huge,eod_global,eod_local_reconstruct, eod_local_reconstruct_big_norm]
|
|
# names = ['local','global','local_reconst','local_reconst_big_norm']
|
|
# todo da das nehmen was wir für das sort on so brauchen
|
|
|
|
# die braucen wir später fürs plotten einmal den stimulus mit machen ist immer gut
|
|
# das ist einmal reconstruiert und einmal das auf die richtige contrast größe gebracht
|
|
|
|
# todo das jetzt nochmal richtig machen und das so machen das man nur das macht was man braucht
|
|
# das sind die basics, das sind die die wir später plotten
|
|
###############################################################
|
|
t1 = time.time()
|
|
|
|
names = ['LocalReconst', 'Global', 'EField']
|
|
eod_arrays = [array_eod['LocalReconst'], array_eod['Global'], array_eod['EField']]
|
|
|
|
###############################################################
|
|
# und das ist fürs sorting, da nehmen wir jetzt auch noch das was wir eignetlich wollen
|
|
# todo: das muss man noch systematisch machen und bequemer implementieren
|
|
# eod_arrays_possible = [array_eod['Local'],
|
|
# array_eod['LocalReconst0.4Norm'],
|
|
# eod_local_recondstruct_am, eods_local_reconstruct_norm,
|
|
# eod_local_reconstruct_big_norm,
|
|
# eod_local_reconstruct_big_am]
|
|
|
|
# names_possible = ['Local',
|
|
# 'LocalReconst0.4Norm',
|
|
# 'LocalReconstAm', 'LocalReconst',
|
|
# 'LocalReconst0.2Norm', 'LocalReconst0.2Am']
|
|
# where_pos = np.where(np.array(names_possible) == sorted_on)[0]
|
|
if sorted_on in array_eod.keys(): # len(where_pos) > 0:
|
|
eod_arrays.append(array_eod[sorted_on]) # eod_arrays_possible[where_pos[0]])
|
|
names.append(sorted_on) # names_possible[where_pos[0]]
|
|
|
|
# names = ['EodLocSynch', 'EodAmSynch']
|
|
# embed()
|
|
for e, eod_array in enumerate(eod_arrays):
|
|
try:
|
|
eods_cut, _ = cut_eod_sequences(eod_array, fish_cuts,
|
|
cut=cut, rec=False,
|
|
fish_number=fish_number_final,
|
|
fillup=True,
|
|
fish_number_base=fish_number_base)
|
|
except:
|
|
print('eod problem0')
|
|
embed()
|
|
arrays_calc.append(eods_cut)
|
|
time_array.append(array_eod['time_eod'])
|
|
devname.append(names[e])
|
|
if names[e] == 'Global':
|
|
idx = len(arrays_calc) - 1 + e
|
|
if printing:
|
|
print('Fifth ' + str(time.time() - t1))
|
|
# embed()
|
|
t1 = time.time()
|
|
# 'EodLocSynch', 'EodAmSynch'
|
|
names_synch = ['EodLocSynch', 'EodAmSynch']
|
|
if 'Synch' in sorted_on:
|
|
#####################
|
|
# synthetisiere den stimulus aus dem global und dem idealen stimulus
|
|
# das ist gar nicht so schlecht
|
|
# das ist das gleiche wie das globale und das Efield
|
|
eods_loc_synch, eods_am_synch = synthetise_eod(mt_nr, extract, sampling_rate,
|
|
sampling_rate, mt_idx, idx,
|
|
arrays_calc,
|
|
mt_group)
|
|
|
|
eod_arrays = [eods_loc_synch, eods_am_synch]
|
|
|
|
# names = ['eod_loc_synch', 'eod_am_synch']
|
|
for e, eod_array in enumerate(eod_arrays):
|
|
arrays_calc.append(eods_cut)
|
|
time_array.append(array_eod['time_eod'])
|
|
devname.append(names_synch[e])
|
|
# embed()
|
|
if test: # eod_local_am, eods_local_norm,'local_am','local_norm',
|
|
arrays_calc, devname, eods_cut, idx, time_array = test_EOD_arrays(arrays_calc,
|
|
cut, devname,
|
|
e, eods_cut,
|
|
eods_loc_synch,
|
|
fish_cuts,
|
|
fish_number_base,
|
|
fish_number_final,
|
|
idx,
|
|
time_array)
|
|
else:
|
|
array_eod[names_synch[0]] = []
|
|
array_eod[names_synch[1]] = []
|
|
# embed()
|
|
|
|
if printing:
|
|
print('six ' + str(time.time() - t1))
|
|
|
|
##################################
|
|
# das in dataframe speichern
|
|
t1 = time.time()
|
|
frame, spikes_cut, spikes_pure, done = transform_dataframe(frame, spikes_pure, done,
|
|
arrays_calc, devname,
|
|
spikes_cut)
|
|
|
|
if printing:
|
|
print('seventh ' + str(time.time() - t1))
|
|
counter += 1
|
|
test = False
|
|
if test:
|
|
compare_chirp_nfft(time_eod, eod_local)
|
|
|
|
compare_chirp_nfft_traces(chirp, eod_local, time_eod, time_array[0],
|
|
smoothed05, fish_cuts)
|
|
|
|
else:
|
|
print('negative mt')
|
|
if done == False:
|
|
devname = []
|
|
frame = []
|
|
# embed()
|
|
if printing_all:
|
|
print('all ' + str(mt_idx) + ' ' + str(time.time() - t0))
|
|
# embed()
|
|
if emb:
|
|
embed()
|
|
# embed()
|
|
if test == True:
|
|
test_eod_arrays2(frame)
|
|
if printing:
|
|
print('a_all ' + str(time.time() - t1))
|
|
# embed()
|
|
if test == True:
|
|
names = []
|
|
for f in fish_number_base:
|
|
if not 'interspace' in f:
|
|
names.append(f)
|
|
overview_of_mt_group(frame, names=names)
|
|
if len(frame) < 1:
|
|
# embed()
|
|
print('devname to short!')
|
|
# embed()
|
|
return [[]] * 22
|
|
else:
|
|
return spikes_pure, fish_number_base, chirp, fish_cuts, time_array, fish_number_final, smoothened2, smoothed05, \
|
|
array_eod['LocalEOD'], eod_local_am, effective_duration, cut, devname, frame
|
|
|
|
|
|
def get_mt_features3(b, mt_group, mt_idx=-1):
|
|
name_here = mt_group[1]['mt_names'].iloc[mt_idx]
|
|
mt = b.multi_tags[name_here]
|
|
features, delay_name = feature_extract(mt)
|
|
# embed()
|
|
l = mt_group[1]['mt'].iloc[-1]
|
|
# l = len(mt_group[1]['mt_names'])
|
|
return features, mt, name_here, l
|
|
|
|
|
|
def test_eod_arrays2(frame):
|
|
keys = ['base_0', 'control_01', 'control_02', '012']
|
|
types = ['local_reconst', 'local_reconst_big_norm']
|
|
fig, ax = plt.subplots(5, len(keys), sharex=True, sharey=True)
|
|
for kk, key in enumerate(keys):
|
|
for tt in range(5):
|
|
ax[tt, kk].plot(frame[frame.dev == 'local_reconst_big_norm'][key].iloc[tt])
|
|
plt.show()
|
|
|
|
|
|
def test_EOD_arrays(arrays_calc, cut, devname, e, eods_cut, eods_loc_synch, fish_cuts, fish_number_base,
|
|
fish_number_final, idx, time_array):
|
|
eod_arrays = [eod_global, eod_local_recondstruct_am, eod_local_reconstruct,
|
|
eods_local_reconstruct_norm, eod_local_reconstruct_big_am,
|
|
eod_local_reconstruct_big_norm]
|
|
names = ['global', 'local_reconst_am', 'local_reconst_norm', 'local_reconst',
|
|
'local_reconst_big_am', 'local_reconst_big_norm']
|
|
arrays_calc = []
|
|
time_array = []
|
|
devname = []
|
|
for e, eod_array in enumerate(eod_arrays):
|
|
eods_cut, _ = cut_eod_sequences(eod_array, fish_cuts, time_eod,
|
|
cut=cut, rec=False,
|
|
fish_number=fish_number_final,
|
|
fillup=True,
|
|
fish_number_base=fish_number_base)
|
|
|
|
arrays_calc.append(eods_cut)
|
|
time_array.append(time_eod)
|
|
devname.append(names[e])
|
|
if names[e] == 'global':
|
|
idx = len(arrays_calc) - 1 + e
|
|
fig, ax = plt.subplots(len(eod_arrays) + 1, 4, sharex=True, sharey=True,
|
|
constrained_layout=True)
|
|
keys = ['base_0', 'control_01', 'control_02', '012']
|
|
# eod_arrays = [eod_local, eod_global, eod_local_reconstruct,
|
|
# eod_local_reconstruct_big_norm, eods_loc_synch]
|
|
# local reconstruct ist das was ich normalerweise machen würde nicht wahr
|
|
names = ['local', 'global', 'local_reconst', 'local_reconst_big_norm',
|
|
'local synch']
|
|
for k, key in enumerate(keys):
|
|
for e in range(len(eod_arrays)):
|
|
ax[e, k].plot(arrays_calc[e][key])
|
|
ax[e, k].set_title(devname[e])
|
|
for k, key in enumerate(keys):
|
|
ax[e + 1, k].plot(eods_loc_synch[key])
|
|
ax[e + 1, k].set_title('synch')
|
|
plt.show()
|
|
# fig, ax = plt.subplots(1, 1)
|
|
# ax.plot(eods_local_reconstruct_norm)
|
|
# plt.show()
|
|
return arrays_calc, devname, eods_cut, idx, time_array
|
|
|
|
|
|
def transform_dataframe(frame, spikes_pure, done, arrays_calc, devname, spikes_cut):
|
|
if done == False:
|
|
frame = pd.DataFrame(arrays_calc)
|
|
frame['dev'] = devname
|
|
spikes_pure = pd.DataFrame(spikes_cut)
|
|
done = True
|
|
else:
|
|
frame_new = pd.DataFrame(arrays_calc)
|
|
frame_new['dev'] = devname
|
|
frame = pd.concat([frame, frame_new])
|
|
spikes_cut = pd.DataFrame(spikes_cut)
|
|
spikes_pure = pd.concat([spikes_pure, spikes_cut])
|
|
return frame, spikes_cut, spikes_pure, done
|
|
|
|
|
|
def overview_of_mt_group(frame, names=['012', 'control_01', 'control_02', 'base_0']):
|
|
deveod = frame[frame.dev == 'eod']
|
|
trial_nr = len(frame) / len(frame.dev.unique())
|
|
|
|
for i in range(int(trial_nr)):
|
|
|
|
fig, ax = plt.subplots(len(frame.dev.unique()), len(names), sharex=True)
|
|
for nn, name in enumerate(names):
|
|
for dd, dev in enumerate(frame.dev.unique()):
|
|
dev10 = frame[frame.dev == dev]
|
|
ax[dd, nn].plot(dev10[name].iloc[i])
|
|
ax[dd, nn].set_title(name)
|
|
save_visualization()
|
|
plt.show()
|
|
|
|
|
|
def calc_power(arr, nfft=2 ** 17, sampling_rate=40000, time_show=False, shift_by=0.01, test=False):
|
|
t1 = time.time()
|
|
shifts = np.arange(0, len(arr) - nfft, shift_by * sampling_rate)
|
|
# embed()
|
|
np.arange(0, len(arr) - nfft, shift_by * sampling_rate)
|
|
freq = np.zeros(len(shifts))
|
|
freq1 = np.zeros(len(shifts))
|
|
freq2 = np.zeros(len(shifts))
|
|
freq3 = np.zeros(len(shifts))
|
|
freq4 = np.zeros(len(shifts))
|
|
pps = [[]] * len(shifts)
|
|
for s, start in enumerate(shifts):
|
|
pps[s], freq[s], freq1[s], freq2[s], freq3[s], freq4[s] = get_mult_freqs(arr[int(start):int(start + nfft)],
|
|
sampling_rate, nfft)
|
|
|
|
if time_show:
|
|
print('calc power' + str(time.time() - t1))
|
|
|
|
return freq, freq1, freq2, freq3, freq4
|
|
|
|
|
|
def get_mult_freqs(arr, sampling_rate, nfft, ):
|
|
p, f = ml.psd(
|
|
arr - np.mean(arr),
|
|
Fs=sampling_rate, NFFT=nfft, noverlap=nfft // 2)
|
|
# embed()
|
|
pps = p
|
|
freq = f[np.argmax(p)]
|
|
freq1, freq2, freq3, freq4 = find_mult_freqs(p, freq, f)
|
|
return pps, freq, freq1, freq2, freq3, freq4
|
|
|
|
|
|
def find_mult_freqs(p, freq, f):
|
|
first_harm = (f > freq * 1.8) & (f < freq * 2.2)
|
|
freq1 = f[first_harm][np.argmax(p[first_harm])] / 2
|
|
second_harm = (f > freq * 2.8) & (f < freq * 3.2)
|
|
freq2 = f[second_harm][np.argmax(p[second_harm])] / 3
|
|
third_harm = (f > freq * 3.8) & (f < freq * 4.2)
|
|
freq3 = f[third_harm][np.argmax(p[third_harm])] / 4
|
|
forth_harm = (f > freq * 4.8) & (f < freq * 5.2)
|
|
freq4 = f[forth_harm][np.argmax(p[forth_harm])] / 5
|
|
return freq1, freq2, freq3, freq4
|
|
|
|
|
|
def find_corr_time(corr1):
|
|
corr_time_negative = corr1 * 1
|
|
corr_time = np.arange(0, len(corr_time_negative), 1)
|
|
corr_time_negative[corr_time > len(corr1) / 2] = 0
|
|
corr_time_neg_zentered = (corr_time - len(corr_time_negative) / 2) / 40000
|
|
return corr_time_neg_zentered, corr_time_negative, corr_time
|
|
|
|
|
|
def plt_frame_traces_original(frame_dev_eod, n):
|
|
fig, ax = plt.subplots(len(frame_dev_eod[n]), 1, sharex=True)
|
|
plt.title('Original Traces')
|
|
for i in range(len(frame_dev_eod[n])):
|
|
ax[i].plot(frame_dev_eod[n].iloc[i])
|
|
save_visualization()
|
|
plt.show()
|
|
|
|
|
|
def plt_delays_pair(i, inputs, outputs, titles, n, autocorr1, frame_dev_eod, shifted_eod, i_nr, delay,
|
|
corr_time_neg_zent, corr1):
|
|
grid1 = gridspec.GridSpec(4, 1, hspace=0.8,
|
|
wspace=1.2) #
|
|
test = False
|
|
if test == True:
|
|
plot_crosscorrelations()
|
|
|
|
plt.subplot(grid1[0])
|
|
plt.title(titles + ' ' + n)
|
|
corr_time_neg_zent_a, corr_time_negative, corr_time = find_corr_time(
|
|
autocorr1)
|
|
|
|
plt.plot(corr_time_neg_zent_a, autocorr1, label='autocorr',
|
|
color='blue')
|
|
# delay_test1, corr_test1 = find_delay_arrays(minmax=False,
|
|
# input=inputs[0:-delay],
|
|
# output=outputs[delay::])
|
|
|
|
plt.plot(corr_time_neg_zent, corr1, label='corr initial',
|
|
color='red')
|
|
|
|
plt.axvline(x=0, color='grey', label='mitte')
|
|
|
|
plt.xlim(-0.1, 0.1)
|
|
|
|
plt.subplot(grid1[1])
|
|
plt.plot(corr_time_neg_zent_a, autocorr1, label='autocorr',
|
|
color='blue')
|
|
# plt.plot(corr_time_neg_zent,corr1, label = 'corr initial')
|
|
corr_test1 = scipy.signal.correlate(inputs[0:-delay], outputs[delay::])
|
|
|
|
corr_time_neg_zent_1, corr_time_negative, corr_time = find_corr_time(
|
|
corr_test1)
|
|
delay2 = np.abs(np.argmax(corr_time_negative) - int(
|
|
len(corr_time_negative) / 2))
|
|
plt.plot(corr_time_neg_zent_1, corr_test1, label='corr after',
|
|
color='red')
|
|
plt.axvline(x=0, color='grey', label='mitte')
|
|
plt.legend(loc=(0, 4), ncol=2)
|
|
plt.xlim(-0.1, 0.1)
|
|
|
|
plt.subplot(grid1[2])
|
|
plt.title('eod before')
|
|
plt.plot(
|
|
np.arange(0, len(frame_dev_eod[n].iloc[i_nr]) / 40000, 1 / 40000),
|
|
frame_dev_eod[n].iloc[i_nr], label='i')
|
|
plt.plot(np.arange(0, len(frame_dev_eod[n].iloc[i + 1]) / 40000,
|
|
1 / 40000),
|
|
frame_dev_eod[n].iloc[i + 1],
|
|
label='i+1', color='red')
|
|
plt.xlim(0, 0.3)
|
|
|
|
plt.subplot(grid1[3])
|
|
plt.title('eod after')
|
|
plt.plot(
|
|
np.arange(0, len(frame_dev_eod[n].iloc[i_nr]) / 40000, 1 / 40000),
|
|
frame_dev_eod[n].iloc[i_nr], label='i')
|
|
plt.plot(np.arange(0, len(shifted_eod) / 40000, 1 / 40000),
|
|
shifted_eod, label='after2',
|
|
color='red')
|
|
# plt.xlim(0, 0.3)
|
|
plt.legend()
|
|
save_visualization()
|
|
plt.show()
|
|
|
|
|
|
def plt_shifted_input(inputs, delay, outputs):
|
|
plt.subplot(3, 1, 1)
|
|
plt.plot(inputs[0:-delay])
|
|
plt.subplot(3, 1, 2)
|
|
plt.plot(outputs[delay::])
|
|
plt.subplot(3, 1, 3)
|
|
plt.plot(inputs[0:-delay])
|
|
plt.plot(outputs[delay::])
|
|
save_visualization()
|
|
plt.show()
|
|
|
|
|
|
def find_delays_length(frame_dev_eod, n, name_orig, i, mean_type, delays_length, i_nr=0):
|
|
inputs = frame_dev_eod[name_orig].iloc[i_nr] - np.nanmean(
|
|
frame_dev_eod[name_orig].iloc[i_nr]) # , input_eod,
|
|
|
|
if inputs != []:
|
|
|
|
outputs = frame_dev_eod[name_orig].iloc[i + 1] - np.nanmean(
|
|
frame_dev_eod[name_orig].iloc[i + 1]) # , output_eod,
|
|
titles = 'eod' # 'eod smoothed', '05', '2']
|
|
if outputs != []:
|
|
try:
|
|
autocorr1 = scipy.signal.correlate(inputs,
|
|
inputs)
|
|
|
|
corr1 = scipy.signal.correlate(inputs, outputs)
|
|
except:
|
|
print('corr1 in utils function')
|
|
embed()
|
|
corr_time_neg_zent, corr_time_negative, corr_time = find_corr_time(
|
|
corr1)
|
|
# embed()
|
|
if 'Min' in mean_type:
|
|
minimum = float(mean_type.split('Min')[1].split('sExcluded_')[0])
|
|
corr_time_negative[corr_time < len(corr_time_negative) / 2 - minimum * 40000] = 0
|
|
|
|
delay = np.abs(np.argmax(corr_time_negative) - int(len(corr_time_negative) / 2))
|
|
max_val = np.max(np.argmax(corr_time_negative))
|
|
shifted_eod = frame_dev_eod[name_orig].iloc[i + 1][delay::]
|
|
array_length = np.arange(0, len(outputs), 1)
|
|
delays_length[n].append(array_length[delay::])
|
|
# embed()
|
|
plot = False
|
|
if plot == True:
|
|
###################
|
|
# plot traces
|
|
plt_frame_traces_original(frame_dev_eod, name_orig)
|
|
|
|
############
|
|
# plot crosscorrelation
|
|
|
|
plt_delays_pair(i, inputs, outputs, titles, name_orig, autocorr1, frame_dev_eod, shifted_eod, i_nr,
|
|
delay,
|
|
corr_time_neg_zent, corr1)
|
|
|
|
############
|
|
# plot shifted input
|
|
plt_shifted_input(inputs, delay, outputs)
|
|
|
|
# plt.subplot(grid1[4])
|
|
# plt.title('smoothed after')
|
|
# plt.plot(np.arange(0,len(frame_dev_05[n].iloc[i])/40000,1/40000), frame_dev_05[n].iloc[i], label='i')
|
|
# plt.plot(np.arange(0,len(shifted_05)/40000,1/40000), shifted_05, label='after2', color='red')
|
|
# plt.xlim(0,0.1)
|
|
# plt.legend()
|
|
# test_phase_shift_algorithm()
|
|
|
|
else:
|
|
delays_length[n].append([])
|
|
else:
|
|
array_length = np.arange(0, len(frame_dev_eod[n].iloc[i_nr + 1]), 1)
|
|
delays_length[n].append(array_length)
|
|
i_nr += 1
|
|
# embed()
|
|
return delays_length, i_nr
|
|
|
|
|
|
def plot_crosscorrelations():
|
|
ax = plt.subplot(2, 1, 1)
|
|
|
|
plt.title('Crosscorrelation')
|
|
ax0 = ax.twinx()
|
|
ax0.plot(corr_time_neg_zent, corrs[-1], color='red', alpha=0.5, label=titles[-1])
|
|
plt.legend(loc=(0, 0))
|
|
ax1 = ax.twinx()
|
|
ax1.plot(corr_time_neg_zent, corrs[-2], color='green', alpha=0.5, label=titles[-2])
|
|
plt.legend(loc=(0.8, 0.8))
|
|
ax2 = ax.twinx()
|
|
ax2.plot(corr_time_neg_zent, corrs[-3], color='blue', alpha=0.5, label=titles[-3])
|
|
plt.axvline(x=0, color='grey')
|
|
plt.legend(loc=(0, 1))
|
|
|
|
ax = plt.subplot(2, 1, 2)
|
|
ax.plot(corr_time, corrs[0], color='red', alpha=0.5, label=titles[0])
|
|
plt.legend(loc=(0, 0.2))
|
|
plt.show()
|
|
|
|
|
|
def create_arrays(df1, i, j, sampling_rate=10000):
|
|
time = np.arange(0, 30, 1 / sampling_rate) # period[-1]
|
|
time_fish_r = time * 2 * np.pi * df1[i]
|
|
eod_fish_r = 1 * np.sin(time_fish_r)
|
|
time_fish_e = time * 2 * np.pi * df1[j]
|
|
eod_fish_e = 1 * np.sin(time_fish_e)
|
|
stimulus = eod_fish_e + eod_fish_r
|
|
return stimulus, eod_fish_e, eod_fish_r, time
|
|
|
|
|
|
def exclude_ratios(f3, df, diff_max, integers, i, j, ratio_f, f_max, f_max2, diff_mean, diff_min, bigger, ratio, df1):
|
|
self = True
|
|
integers[i, j] = False
|
|
if (ratio % 1 == 0) or (ratio_f % 1 == 0):
|
|
if self == True:
|
|
f_max[i, j] = 1 / bigger
|
|
df[i, j] = 1 / bigger
|
|
f3[i, j] = 1 / bigger
|
|
f_max2[i, j] = 1 / bigger
|
|
diff_mean[i, j] = 1 / bigger
|
|
diff_min[i, j] = 1 / bigger
|
|
diff_max[i, j] = 1 / bigger
|
|
else:
|
|
f_max[i, j] = diff_mean[i, j]
|
|
integers[i, j] = True
|
|
if df1[i] == df1[j]:
|
|
if self == True:
|
|
f_max[i, j] = df1[j]
|
|
f_max2[i, j] = df1[j]
|
|
diff_mean[i, j] = df1[j]
|
|
diff_min[i, j] = df1[j]
|
|
diff_max[i, j] = df1[j]
|
|
df[i, j] = df1[j]
|
|
f3[i, j] = df1[j]
|
|
else:
|
|
f_max[i, j] = diff_mean[i, j]
|
|
integers[i, j] = True
|
|
return integers, f_max, diff_max, diff_min, diff_mean, f_max2
|
|
|
|
|
|
def do_splits(period_cut, sampling_rate, stimulus, length=0.4):
|
|
# embed()
|
|
splits = period_cut * sampling_rate
|
|
if length != 'no':
|
|
stim0 = stimulus[int(splits[0]):int(splits[0] + length * sampling_rate)] # [int(splits[0]):int(splits[1])]
|
|
stim1 = stimulus[int(splits[1]):int(splits[1] + length * sampling_rate)] # [int(splits[1]):int(splits[2])]
|
|
stim2 = stimulus[int(splits[2]):int(splits[2] + length * sampling_rate)] # [int(splits[2]):int(splits[3])]
|
|
stim3 = stimulus[int(splits[3]):int(splits[3] + length * sampling_rate)] # [int(splits[3]):int(splits[4])]
|
|
else:
|
|
stim0 = stimulus[int(splits[0]):int(splits[1])]
|
|
stim1 = stimulus[int(splits[1]):int(splits[2])]
|
|
stim2 = stimulus[int(splits[2]):int(splits[3])]
|
|
stim3 = stimulus[int(splits[3]):int(splits[4])]
|
|
|
|
return stim0, stim1, stim2, stim3, splits
|
|
|
|
|
|
def calc_dist(stim0, stim1):
|
|
stim01 = stim0 * 1
|
|
stim02 = stim1 * 1
|
|
if len(stim0) > len(stim1):
|
|
stim01 = stim0[0:len(stim1)]
|
|
elif len(stim0) < len(stim1):
|
|
stim02 = stim1[0:len(stim0)]
|
|
dist = np.mean(np.sqrt((stim01 - stim02) ** 2))
|
|
return dist, stim01, stim02
|
|
|
|
|
|
def get_different_periods(df1, df2):
|
|
f_max = np.zeros([len(df1), len(df2)])
|
|
df = np.zeros([len(df1), len(df2)])
|
|
f3 = np.zeros([len(df1), len(df2)])
|
|
f_max2 = np.zeros([len(df1), len(df2)])
|
|
dist_min = np.zeros([len(df1), len(df2)])
|
|
durations = np.zeros([len(df1), len(df2)])
|
|
diff_mean = np.zeros([len(df1), len(df2)])
|
|
diff_min = np.zeros([len(df1), len(df2)])
|
|
diff_max = np.zeros([len(df1), len(df2)])
|
|
var = np.zeros([len(df1), len(df2)])
|
|
size_diffs = np.zeros([len(df1), len(df2)])
|
|
dist_variable = np.zeros([len(df1), len(df2)])
|
|
dist_max = np.zeros([len(df1), len(df2)])
|
|
dist_max2 = np.zeros([len(df1), len(df2)])
|
|
dist_min = np.zeros([len(df1), len(df2)])
|
|
dist_mean = np.zeros([len(df1), len(df2)])
|
|
dist_fmax = np.zeros([len(df1), len(df2)])
|
|
dist_f3 = np.zeros([len(df1), len(df2)])
|
|
dist_df = np.zeros([len(df1), len(df2)])
|
|
ratios = np.zeros([len(df1), len(df2)])
|
|
integers = np.zeros([len(df1), len(df2)])
|
|
limit = 0.1 # 0.09 # 0.05
|
|
plot_type = '' # 'dist'#''#'True'#'dist'#''#'dist'#'period'#
|
|
for i in range(len(df1)):
|
|
for j in range(len(df2)):
|
|
|
|
print('i ' + str(df1[i]) + ' j ' + str(df2[j]))
|
|
DF1_per = 1 / df1[i]
|
|
DF2_per = 1 / df2[j]
|
|
if not (np.isinf(DF1_per) | np.isinf(DF2_per)):
|
|
bigger = np.max([DF2_per, DF1_per])
|
|
smaller = np.min([DF2_per, DF1_per])
|
|
bigger_f = np.max([df1[j], df2[i]])
|
|
smaller_f = np.min([df1[j], df2[i]])
|
|
ratio_f = bigger_f / smaller_f
|
|
ratio = bigger / smaller
|
|
ratios[i, j] = ratio
|
|
|
|
dim = 4000
|
|
period = np.arange(0, dim, 1) * bigger # this is the window we are ready to sacrify t[-1]
|
|
period_final = period * 1
|
|
time_bigger_f = (np.arange(0, dim, 1) * ratio)
|
|
rests_final = time_bigger_f % 1
|
|
period_interp = np.arange(0, period[-1], 1 / 1000)
|
|
interpolated = interpolate(period, rests_final, period_interp, kind='linear')
|
|
p, f = ml.psd(interpolated - np.mean(interpolated), Fs=1 / np.diff(period_interp)[0], NFFT=5000,
|
|
noverlap=5000 / 2)
|
|
test = False
|
|
if test == True:
|
|
plot_psd()
|
|
|
|
#####################################
|
|
# find the right euclidean distance
|
|
sampling_rate = 10000
|
|
stimulus, eod_fish_e, eod_fish_r, time = create_arrays(df1, i, j, sampling_rate=sampling_rate)
|
|
|
|
p, f = ml.psd(rests_final - np.mean(rests_final), Fs=1 / np.diff(period)[0], NFFT=5000,
|
|
noverlap=5000 / 2)
|
|
# embed()
|
|
f_max[i, j] = f[np.argmax(p)]
|
|
|
|
f3[i, j] = 1 / np.abs((1 / df1[i] + 1 / df1[j]))
|
|
df[i, j] = np.abs(df1[i] - df1[j])
|
|
|
|
one_zero = (rests_final < limit) | (rests_final - 1 > -limit)
|
|
period_cut = period[one_zero]
|
|
|
|
diff_mean[i, j] = 1 / np.mean(np.diff(period_cut))
|
|
diff_min[i, j] = 1 / np.min(np.diff(period_cut))
|
|
diff_max[i, j] = 1 / np.max(np.diff(period_cut))
|
|
# embed()
|
|
|
|
p2, f2 = ml.psd(one_zero - np.mean(one_zero), Fs=1 / np.diff(period)[0], NFFT=20000,
|
|
noverlap=20000 / 2)
|
|
f_max2[i, j] = f2[np.argmax(p2)]
|
|
|
|
#####################
|
|
# period_cut paramteres
|
|
size_diff = np.max(np.diff(period_cut)) - np.min(np.diff(period_cut))
|
|
size_diffs[i, j] = size_diff
|
|
|
|
integers, f_max, diff_max, diff_min, diff_mean, f_max2 = exclude_ratios(f3, df, diff_max, integers, i,
|
|
j,
|
|
ratio_f, f_max, f_max2,
|
|
diff_mean, diff_min, bigger,
|
|
ratio, df1)
|
|
dist_f3[i, j] = find_dist_pure(1 / f3[i, j], sampling_rate, stimulus)
|
|
dist_df[i, j] = find_dist_pure(1 / df[i, j], sampling_rate, stimulus)
|
|
dist_fmax[i, j] = find_dist_pure(1 / f_max[i, j], sampling_rate, stimulus)
|
|
dist_mean[i, j] = find_dist_pure(1 / diff_mean[i, j], sampling_rate, stimulus)
|
|
dist_min[i, j] = find_dist_pure(1 / diff_min[i, j], sampling_rate, stimulus)
|
|
dist_max[i, j] = find_dist_pure(1 / diff_max[i, j], sampling_rate, stimulus)
|
|
dist_max2[i, j] = find_dist_pure(1 / f_max2[i, j], sampling_rate, stimulus)
|
|
|
|
# repeat_period = period[(rests_final == 0) | (rests_final == 1)][1]
|
|
# repeat_period = period[(rests <0.05) | (rests > 0.95)][1]
|
|
|
|
var[i, j] = np.std(np.diff(period_cut))
|
|
dist_variable[i, j] = find_dist_pure(period_cut, sampling_rate, stimulus)
|
|
|
|
# durations[i,j] = splits[10]
|
|
print(dist_min[i, j])
|
|
if plot_type == 'True':
|
|
test = True
|
|
elif plot_type != '':
|
|
if plot_type == 'dist':
|
|
if dist_min[i, j] > 0.2: # (:
|
|
test = True
|
|
else:
|
|
test = False
|
|
elif plot_type == 'period': #
|
|
if 1 / dist_variable[i, j] > 0.1: # (:1/diff_min[i,j] > 0.2
|
|
test = True
|
|
else:
|
|
test = False
|
|
|
|
if test:
|
|
plt_period()
|
|
# embed()
|
|
|
|
else:
|
|
print('inf')
|
|
f_max[i, j] = float('nan')
|
|
f_max2[i, j] = float('nan')
|
|
df[i, j] = float('nan')
|
|
f3[i, j] = float('nan')
|
|
diff_mean[i, j] = float('nan')
|
|
diff_min[i, j] = float('nan')
|
|
diff_max[i, j] = float('nan')
|
|
size_diffs[i, j] = float('nan')
|
|
ratios[i, j] = float('nan')
|
|
integers[i, j] = float('nan')
|
|
return dist_f3, dist_df, dist_fmax, dist_max2, dist_mean, dist_min, dist_max, dist_variable, var, diff_min, integers, ratios, size_diffs, diff_max, diff_mean, f3, df, f_max2, f_max
|
|
|
|
|
|
def plt_period(period_cut, sampling_rate, stimulus, one_zero, df1, i, period, rests_final, j, limit):
|
|
fig, ax = plt.subplots(7, 1, sharex=True)
|
|
fig.suptitle(' i ' + str(df1[i]) + ' j ' + str(df1[j]))
|
|
ax[0].set_title('rests')
|
|
ax[0].plot(period, rests_final)
|
|
ax[0].axhline(0)
|
|
ax[0].axhline(1)
|
|
ax[0].axhline(0 + limit, color='grey', linestyle='--')
|
|
ax[0].axhline(1 - limit, color='grey', linestyle='--')
|
|
# plt.subplot(3, 3, 5)
|
|
ax[1].set_title('rests')
|
|
ax[1].plot(period, one_zero)
|
|
period_cut = period[one_zero]
|
|
stim0, stim1, stim2, stim3, splits = do_splits(period_cut, sampling_rate, stimulus)
|
|
|
|
ax[2].plot(time, stimulus)
|
|
ax[2].plot(np.linspace(splits[3], len(stim3) / sampling_rate, len(stim3)), stim3, color='red',
|
|
linestyle='-')
|
|
ax[2].plot(np.linspace(splits[0], len(stim0) / sampling_rate, len(stim0)), stim0, color='blue',
|
|
linestyle='-.')
|
|
ax[2].plot(np.linspace(splits[1], len(stim1) / sampling_rate, len(stim1)), stim1, color='orange',
|
|
linestyle=':')
|
|
ax[2].plot(np.linspace(splits[2], len(stim2) / sampling_rate, len(stim2)), stim2, color='green',
|
|
linestyle='--')
|
|
ax[2].set_xlim(0, 0.3)
|
|
# splits = np.arange(0,len(one_zero),1)[one_zero]
|
|
|
|
period_cut = np.arange(0, 20, 1 / diff_min[i, j])
|
|
stim0, stim1, stim2, stim3, splits = do_splits(period_cut, sampling_rate, stimulus)
|
|
|
|
ax[3].set_title('diff min')
|
|
ax[3].plot(np.linspace(0, len(stim3) / sampling_rate, len(stim3)), stim3, color='red',
|
|
linestyle='-')
|
|
ax[3].plot(np.linspace(0, len(stim0) / sampling_rate, len(stim0)), stim0, color='blue',
|
|
linestyle='-.')
|
|
ax[3].plot(np.linspace(0, len(stim1) / sampling_rate, len(stim1)), stim1, color='orange',
|
|
linestyle=':')
|
|
ax[3].plot(np.linspace(0, len(stim2) / sampling_rate, len(stim2)), stim2, color='green',
|
|
linestyle='--')
|
|
ax[3].set_xlim(0, 1)
|
|
|
|
# period_cut =
|
|
period_cut = np.arange(0, 20, 1 / f3[i, j])
|
|
stim0, stim1, stim2, stim3, splits = do_splits(period_cut, sampling_rate, stimulus)
|
|
ax[4].set_title('Vladik ')
|
|
ax[4].plot(np.linspace(0, len(stim3) / sampling_rate, len(stim3)), stim3, color='red',
|
|
linestyle='-')
|
|
ax[4].plot(np.linspace(0, len(stim0) / sampling_rate, len(stim0)), stim0, color='blue',
|
|
linestyle='-.')
|
|
ax[4].plot(np.linspace(0, len(stim1) / sampling_rate, len(stim1)), stim1, color='orange',
|
|
linestyle=':')
|
|
ax[4].plot(np.linspace(0, len(stim2) / sampling_rate, len(stim2)), stim2, color='green',
|
|
linestyle='--')
|
|
ax[4].set_xlim(0, 1)
|
|
|
|
period_cut = period[one_zero]
|
|
stim0, stim1, stim2, stim3, splits = do_splits(period_cut, sampling_rate, stimulus)
|
|
ax[5].set_title('exact one zero cut')
|
|
ax[5].plot(np.linspace(0, len(stim3) / sampling_rate, len(stim3)), stim3, color='red',
|
|
linestyle='-')
|
|
ax[5].plot(np.linspace(0, len(stim0) / sampling_rate, len(stim0)), stim0, color='blue',
|
|
linestyle='-.')
|
|
ax[5].plot(np.linspace(0, len(stim1) / sampling_rate, len(stim1)), stim1, color='orange',
|
|
linestyle=':')
|
|
ax[5].plot(np.linspace(0, len(stim2) / sampling_rate, len(stim2)), stim2, color='green',
|
|
linestyle='--')
|
|
ax[5].set_xlim(0, 1)
|
|
|
|
period_cut = np.arange(0, 20, 1 / f_max[i, j]) # f_max[i,j]
|
|
stim0, stim1, stim2, stim3, splits = do_splits(period_cut, sampling_rate, stimulus)
|
|
ax[6].set_title('f_max')
|
|
ax[6].plot(np.linspace(0, len(stim3) / sampling_rate, len(stim3)), stim3, color='red',
|
|
linestyle='-')
|
|
ax[6].plot(np.linspace(0, len(stim0) / sampling_rate, len(stim0)), stim0, color='blue',
|
|
linestyle='-.')
|
|
ax[6].plot(np.linspace(0, len(stim1) / sampling_rate, len(stim1)), stim1, color='orange',
|
|
linestyle=':')
|
|
ax[6].plot(np.linspace(0, len(stim2) / sampling_rate, len(stim2)), stim2, color='green',
|
|
linestyle='--')
|
|
ax[6].set_xlim(0, 0.05)
|
|
|
|
save_visualization(str(i) + '_' + str(j))
|
|
# plt.savefig('\Desktop\work\results\period\period' + str(i) + '_' + str(j) + '.png')
|
|
# plt.close()
|
|
|
|
|
|
def find_optimal_period():
|
|
# embed()
|
|
df1 = np.arange(45, 500, 10) # die Frequenzen die wir haben fangen nicht unter 25 Hz an
|
|
df2 = np.arange(45, 500, 10)
|
|
# df2 = np.arange(0, 500, 25)
|
|
# i = 10
|
|
# j = 42
|
|
integers, ratios, size_diffs, diff_max, diff_mean, f3, df, f_max2, f_max = get_different_periods(df1, df2)
|
|
|
|
# todo: irgendwas stimmt noch nicht mit den langen Abschnitten
|
|
|
|
i = 7
|
|
j = 5
|
|
|
|
i = 16
|
|
j = 17
|
|
# save_visualization()
|
|
# embed()
|
|
|
|
embed()
|
|
plt.imshow(1 / diff_max)
|
|
plt.colorbar()
|
|
save_visualization()
|
|
plt.show()
|
|
|
|
embed()
|
|
# small picture
|
|
grid = gridspec.GridSpec(2, 4, wspace=0.2, hspace=0.3)
|
|
plt.subplot(grid[0])
|
|
plt.title('f_max')
|
|
plt.imshow(1 / f_max, origin='lower')
|
|
plt.colorbar()
|
|
|
|
plt.subplot(grid[1])
|
|
plt.title('psd from OneZerroArray')
|
|
plt.imshow(1 / f_max2, origin='lower')
|
|
plt.colorbar()
|
|
|
|
plt.subplot(grid[2])
|
|
plt.title('df')
|
|
plt.imshow(1 / df, origin='lower')
|
|
plt.colorbar()
|
|
|
|
plt.subplot(grid[3])
|
|
plt.title('Vladik prediction')
|
|
plt.imshow(1 / f3, origin='lower')
|
|
plt.colorbar()
|
|
|
|
plt.subplot(grid[4])
|
|
plt.title('diff mean')
|
|
plt.imshow(1 / diff_mean, origin='lower')
|
|
plt.colorbar()
|
|
|
|
plt.subplot(grid[5])
|
|
plt.title('diff min')
|
|
plt.imshow(1 / diff_min, origin='lower')
|
|
plt.colorbar()
|
|
|
|
plt.subplot(grid[6])
|
|
plt.title('diff min')
|
|
plt.imshow(1 / diff_min, origin='lower')
|
|
plt.colorbar()
|
|
|
|
plt.subplot(grid[7])
|
|
plt.title('euclidean distance')
|
|
plt.imshow(dist_min, origin='lower')
|
|
plt.colorbar()
|
|
|
|
plt.subplot(grid[8])
|
|
plt.title('variance of differences')
|
|
plt.imshow(var, origin='lower')
|
|
plt.colorbar()
|
|
save_visualization()
|
|
plt.show()
|
|
|
|
embed()
|
|
|
|
# big picture
|
|
grid = gridspec.GridSpec(2, 1, wspace=0.2, hspace=0.3)
|
|
grid1 = gridspec.GridSpecFromSubplotSpec(2, 5,
|
|
subplot_spec=grid[0], wspace=0.2, hspace=0.1)
|
|
|
|
plt.subplot(grid1[0])
|
|
plt.title('psd \n' + str(np.nanmax(1 / f_max)))
|
|
plt.imshow(1 / f_max, origin='lower')
|
|
plt.colorbar()
|
|
|
|
plt.subplot(grid1[1])
|
|
plt.title('psd from OneZerroArray \n' + str(np.nanmax(1 / f_max2)))
|
|
plt.imshow(1 / f_max2, origin='lower')
|
|
plt.colorbar()
|
|
|
|
plt.subplot(grid1[2])
|
|
plt.title('period detection \n' + str(np.nanmax(1 / diff_mean)))
|
|
plt.imshow(1 / diff_mean, origin='lower')
|
|
plt.colorbar()
|
|
|
|
plt.subplot(grid1[3])
|
|
plt.title('size diff')
|
|
plt.imshow(size_diffs, origin='lower')
|
|
plt.colorbar()
|
|
|
|
plt.subplot(grid1[4])
|
|
plt.title('integers')
|
|
plt.imshow(integers, origin='lower')
|
|
plt.colorbar()
|
|
|
|
plt.subplot(grid1[5])
|
|
plt.title('psd \n' + str(np.nanmax(1 / f_max)))
|
|
plt.imshow(f_max, origin='lower')
|
|
plt.colorbar()
|
|
|
|
plt.subplot(grid1[6])
|
|
plt.title('psd from OneZerroArray \n' + str(np.nanmax(1 / f_max2)))
|
|
plt.imshow(f_max2, origin='lower')
|
|
plt.colorbar()
|
|
|
|
plt.subplot(grid1[7])
|
|
plt.title('period detection \n' + str(np.nanmax(1 / diff_mean)))
|
|
plt.imshow(diff_mean, origin='lower')
|
|
plt.colorbar()
|
|
|
|
plt.subplot(grid1[8])
|
|
plt.title('size diff')
|
|
plt.imshow(size_diffs, origin='lower')
|
|
plt.colorbar()
|
|
|
|
plt.subplot(grid1[9])
|
|
plt.title('ratios')
|
|
plt.imshow(ratios, origin='lower')
|
|
plt.colorbar()
|
|
# plt.show()
|
|
|
|
grid2 = gridspec.GridSpecFromSubplotSpec(2, 1,
|
|
subplot_spec=grid[1], wspace=0.2, hspace=0.1)
|
|
|
|
plt.subplot(grid2[0])
|
|
plt.title('period')
|
|
plt.hist(np.sort(1 / np.concatenate(f_max)), label='psd', alpha=0.5)
|
|
# plt.hist(np.sort(1/np.concatenate(f_max2)),label = 'psd one zero',alpha = 0.5)
|
|
plt.hist(np.sort(1 / np.concatenate(diff_mean)), label='period', alpha=0.5)
|
|
plt.subplot(grid2[1])
|
|
plt.title('frequency')
|
|
plt.hist(np.sort(np.concatenate(f_max)), label='psd', alpha=0.5)
|
|
# plt.hist(np.sort(1/np.concatenate(f_max2)),label = 'psd one zero',alpha = 0.5)
|
|
plt.hist(np.sort(np.concatenate(diff_mean)), label='period', alpha=0.5)
|
|
save_visualization()
|
|
plt.show()
|
|
|
|
embed()
|
|
frame_dev_eod = frame[frame.dev == 'eod']
|
|
fs = 40000
|
|
|
|
grid = gridspec.GridSpec(3, 3, bottom=0.1, hspace=0.4, top=0.85,
|
|
left=0.05, wspace=0, width_ratios=[0.2, 4, 4],
|
|
right=0.97) #
|
|
|
|
plt.suptitle('DF1 ' + str(id_group[1].DF1.unique()) + ' DF2 ' + str(
|
|
id_group[1].DF2.unique()))
|
|
|
|
f, t, Zxx = scipy.signal.stft(frame_dev_eod[n].iloc[i], fs,
|
|
nperseg=1000)
|
|
f2, t2, Zxx2 = scipy.signal.stft(frame_dev_eod[n].iloc[i + 1], fs,
|
|
nperseg=1000)
|
|
|
|
amp = 2 * np.sqrt(2)
|
|
plt.subplot(grid[0, :])
|
|
plt.plot(frame_dev_eod[n].iloc[i + 1])
|
|
plt.plot(frame_dev_eod[n].iloc[i])
|
|
|
|
plt.subplot(grid[4])
|
|
plt.pcolormesh(t, f, np.log10(np.abs(Zxx)),
|
|
shading='gouraud') # vmax=amp,
|
|
plt.title('STFT Magnitude')
|
|
plt.ylabel('Frequency [Hz]')
|
|
plt.xlabel('Time [sec]')
|
|
plt.ylim(0, 1000)
|
|
plt.colorbar()
|
|
plt.axhline(y=id_group[1].DF1.unique(), color='brown', linestyle='--')
|
|
plt.axhline(y=id_group[1].DF2.unique(), color='brown', linestyle='--')
|
|
plt.xlim(t[0], t[-1])
|
|
|
|
amp = 2 * np.sqrt(3)
|
|
plt.subplot(grid[5])
|
|
plt.pcolormesh(t2, f2, np.log10(np.abs(Zxx2)),
|
|
shading='gouraud') # vmax=amp,
|
|
plt.title('STFT Magnitude')
|
|
plt.ylabel('Frequency [Hz]')
|
|
plt.xlabel('Time [sec]')
|
|
plt.ylim(0, 1000)
|
|
plt.colorbar()
|
|
plt.axhline(y=id_group[1].DF1.unique(), color='brown', linestyle='--')
|
|
plt.axhline(y=id_group[1].DF2.unique(), color='brown', linestyle='--')
|
|
plt.xlim(t[0], t[-1])
|
|
|
|
plt.subplot(grid[7])
|
|
plt.pcolormesh(t, f, np.angle(Zxx), shading='gouraud') # vmax=amp,
|
|
plt.title('STFT Magnitude')
|
|
plt.ylabel('Phase')
|
|
plt.xlabel('Time [sec]')
|
|
DF1_per = 1 / id_group[1].DF1.unique()
|
|
DF2_per = 1 / id_group[1].DF2.unique()
|
|
bigger = np.max([DF2_per, DF1_per])
|
|
smaller = np.min([DF2_per, DF1_per])
|
|
ratio = bigger / smaller
|
|
period = np.arange(0, 100, 1) * bigger
|
|
|
|
time_bigger_f = (np.arange(0, 100, 1) * ratio)[
|
|
period < 0.05] # this is the window we are ready to sacrify t[-1]
|
|
period = period[period < 0.05]
|
|
|
|
rests = time_bigger_f % 1
|
|
# todo: here würde man die amplitdue rausfinden wo man slicen sollte
|
|
# repeat_period = period[rests == 0][1]
|
|
# repeat_period = period[(rests <0.05) | (rests > 0.95)][1]
|
|
np.argmin(rests)
|
|
freq_abs = 1 / repeat_period
|
|
freq_abs = 1 / repeat_period
|
|
lines = np.arange(0, 100, 1)
|
|
|
|
# plt.axhline(y = id_group[1].DF1.unique(), color = 'brown', linestyle = '--')
|
|
# plt.axhline(y = id_group[1].DF2.unique(), color = 'brown', linestyle = '--')
|
|
|
|
# plt.vlines(lines* DF1_per, ymin = 0, ymax = 1000, color = 'black', linestyle = '--')
|
|
# plt.vlines(lines * DF2_per, ymin = 0, ymax = 1000, color = 'grey', linestyle = '--')
|
|
# plt.axvline(x=repeat_period, color='red')
|
|
|
|
plt.colorbar()
|
|
plt.ylim(0, 1000)
|
|
plt.xlim(t[0], t[-1])
|
|
|
|
plt.subplot(grid[8])
|
|
plt.pcolormesh(t2, f2, np.angle(Zxx2), shading='gouraud') # vmax=amp,
|
|
plt.title('STFT Magnitude')
|
|
plt.ylabel('Phase')
|
|
plt.xlabel('Time [sec]')
|
|
|
|
# plt.axhline(y = id_group[1].DF1.unique(), color = 'brown', linestyle = '--')
|
|
# plt.axhline(y = id_group[1].DF2.unique(), color = 'brown', linestyle = '--')
|
|
# plt.vlines(lines* DF1_per, ymin = 0, ymax = 1000, color = 'black', linestyle = '--')
|
|
# plt.vlines(lines * DF2_per, ymin = 0, ymax = 1000, color = 'grey', linestyle = '--')
|
|
# plt.axvline(x=repeat_period, color='red')
|
|
plt.colorbar()
|
|
plt.ylim(0, 1000)
|
|
plt.xlim(t[0], t[-1])
|
|
|
|
plt.subplot(grid[3])
|
|
p, ff = ml.psd(
|
|
frame_dev_eod[n].iloc[i] - np.mean(frame_dev_eod[n].iloc[i]),
|
|
Fs=40000,
|
|
NFFT=10000, noverlap=10000 / 2)
|
|
plt.plot(p, ff)
|
|
plt.axhline(y=id_group[1].DF1.unique(), color='grey', linestyle='--')
|
|
plt.axhline(y=id_group[1].DF2.unique(), color='grey', linestyle='--')
|
|
plt.ylim(0, 1000)
|
|
|
|
plt.subplot(grid[6])
|
|
p, ff = ml.psd(
|
|
frame_dev_eod[n].iloc[i] - np.mean(frame_dev_eod[n].iloc[i]),
|
|
Fs=40000,
|
|
NFFT=10000, noverlap=10000 / 2)
|
|
plt.plot(p, ff)
|
|
plt.axhline(y=id_group[1].DF1.unique(), color='grey', linestyle='--')
|
|
plt.axhline(y=id_group[1].DF2.unique(), color='grey', linestyle='--')
|
|
plt.ylim(0, 1000)
|
|
save_visualization()
|
|
plt.show()
|
|
|
|
embed()
|
|
|
|
|
|
def find_dist_pure(f3, sampling_rate, stimulus):
|
|
# embed()
|
|
if type(f3) == np.float64:
|
|
period_cut = np.arange(0, 20, f3)
|
|
else:
|
|
period_cut = f3
|
|
# embed()
|
|
stim0, stim1, stim2, stim3, splits = do_splits(period_cut, sampling_rate, stimulus)
|
|
dist_f3, stim01, stim02 = calc_dist(stim0, stim1)
|
|
return dist_f3
|
|
|
|
|
|
def test_delays(frame):
|
|
# embed()
|
|
test = False
|
|
deveod = frame[frame.dev == 'eod']
|
|
lengths = []
|
|
row, col = np.shape(deveod)
|
|
for i in range(row):
|
|
for j in range(col):
|
|
if 'eod' not in np.array(deveod)[i][j]:
|
|
lengths.append(len(np.array(deveod)[i][j]))
|
|
# embed()
|
|
if np.min(lengths) < 2:
|
|
print('length smaller as 2')
|
|
embed()
|
|
|
|
|
|
def test_delay2():
|
|
frame_dev_eod_loc = frame[frame.dev == 'eod_loc_synch']
|
|
stimulus_loc = zenter_and_normalize(frame_dev_eod_loc.iloc[0]['012'], 1)
|
|
fig, ax = plt.subplots(5, 1, sharex=True, constrained_layout=True)
|
|
# ax = np.concatenate(ax)
|
|
stimulus = -eod_fish_r + 0.2 * np.sin(2 * np.pi * time * f1) + 0.2 * np.sin(
|
|
2 * np.pi * time * f2)
|
|
|
|
stimulus_first = -eod_fish_r + 0.2 * np.sin(
|
|
2 * np.pi * time * f1 + 2 * np.pi / 4) + 0.2 * np.sin(2 * np.pi * time * f2)
|
|
stimulus_second = -eod_fish_r + 0.2 * np.sin(2 * np.pi * time * f1) + 0.2 * np.sin(
|
|
2 * np.pi * time * f2 + 2 * np.pi / 4)
|
|
stimulus_third = -eod_fish_r + 0.2 * np.sin(
|
|
2 * np.pi * time * f1 + 2 * np.pi / 4) + 0.2 * np.sin(
|
|
2 * np.pi * time * f2 + 2 * np.pi / 4)
|
|
|
|
# WICHTIG: IN 2022.03.01_Besprechung_ROC_Projekt drin
|
|
# aussiehrt, am anfang hat der null und der zweite zusätzlichn hat pi/2 verschoben
|
|
ax[0].plot(stimulus)
|
|
ax[0].set_title('Phase 0 f1 f2')
|
|
ax[1].plot(stimulus_first)
|
|
ax[1].set_title('Phase 1/4 f1')
|
|
ax[2].plot(stimulus_second)
|
|
ax[2].set_title('Phase 1/4 f2')
|
|
ax[3].plot(stimulus_third)
|
|
ax[3].set_title('Phase 1/4 f1 f2')
|
|
ax[4].plot(stimulus_loc)
|
|
ax[4].set_title('Local EOD')
|
|
plt.show()
|
|
|
|
# compare with only second wave recreation
|
|
frame_dev_eod_loc = frame[frame.dev == 'eod_loc']
|
|
stimulus_loc = zenter_and_normalize(frame_dev_eod_loc.iloc[0]['control_01'], 1)
|
|
fig, ax = plt.subplots(3, 1, sharex=True, constrained_layout=True)
|
|
# ax = np.concatenate(ax)
|
|
stimulus = -eod_fish_r + 0.2 * np.sin(2 * np.pi * time * f1)
|
|
stimulus_first = -eod_fish_r + 0.2 * np.sin(2 * np.pi * time * f1 + np.pi / 2)
|
|
|
|
# stimulus_first = -eod_fish_r + 0.2 * np.sin(2 * np.pi * time * f1+2*np.pi/4) + 0.2 * np.sin(2 * np.pi * time * f2)
|
|
# stimulus_second = -eod_fish_r + 0.2 * np.sin(2 * np.pi * time * f1 ) + 0.2 * np.sin(
|
|
# 2 * np.pi * time * f2+ 2 * np.pi / 4)
|
|
# stimulus_third = -eod_fish_r + 0.2 * np.sin(2 * np.pi * time * f1 + 2 * np.pi / 4) + 0.2 * np.sin(
|
|
# 2 * np.pi * time * f2 + 2 * np.pi / 4)
|
|
|
|
# WICHTIG: IN 2022.03.01_Besprechung_ROC_Projekt drin
|
|
# aussiehrt, am anfang hat der null und der zweite zusätzlichn hat pi/2 verschoben
|
|
ax[0].plot(stimulus)
|
|
ax[0].set_title('Phase 0 f1')
|
|
ax[1].plot(stimulus_first)
|
|
ax[1].set_title('Phase 1/4 f1')
|
|
# ax[2].plot(stimulus_second)
|
|
# ax[2].set_title('Phase 1/4 f2')
|
|
# ax[3].plot(stimulus_third)
|
|
# ax[3].set_title('Phase 1/4 f1 f2')
|
|
ax[2].plot(stimulus_loc)
|
|
ax[2].set_title('Local EOD')
|
|
plt.show()
|
|
|
|
|
|
def define_delays_trials(mean_type, frame, sorted_on='local_reconst_big_norm', f1=[], f2=[]):
|
|
if 'PhaseSort' in mean_type:
|
|
# embed()
|
|
|
|
frame_dev_eod = frame[frame.dev == 'eod']
|
|
frame_dev_05 = frame[frame.dev == '05']
|
|
|
|
##############################################
|
|
# try the cross spektrum
|
|
test = False
|
|
|
|
frame_dev_eod = frame[frame.dev == sorted_on]
|
|
# embed()
|
|
frame_dev_eod = frame[frame.dev == sorted_on]
|
|
|
|
names = frame_dev_eod.keys()[0:-1][::-1]
|
|
delays_length = {}
|
|
if test:
|
|
test_delays(frame)
|
|
|
|
# embed()
|
|
if 'Same' in mean_type:
|
|
# embed()
|
|
names_orig = ['control_02', 'control_02', 'control_02', 'control_02']
|
|
else:
|
|
names_orig = names
|
|
for nn, n in enumerate(names):
|
|
name_orig = names_orig[nn]
|
|
# delays = [np.arange(0, len(frame_dev_05[n].iloc[0]), 1)]
|
|
if 'base' not in n:
|
|
# for the case i want to recreate to stimulus to sort
|
|
# if sorted_on != 'eod':
|
|
|
|
delays_length[n] = []
|
|
i_nr = 0
|
|
for i in range(len(frame_dev_eod) - 1):
|
|
delays_length, i_nr = find_delays_length(frame_dev_eod, n, name_orig, i, mean_type, delays_length,
|
|
i_nr=i_nr)
|
|
# else:
|
|
# else:
|
|
# embed()
|
|
# time = np.arange(0, len(frame_dev_eod.iloc[0]['012']) / 40000, 1 / 40000)
|
|
|
|
# embed()
|
|
if test:
|
|
test_delay2()
|
|
else:
|
|
|
|
frame_dev_eod_glob = frame[frame.dev == 'eod_glob']
|
|
delays_length[n] = []
|
|
i_nr = 0
|
|
for i in range(len(frame_dev_eod) - 1):
|
|
delays_length, i_nr = find_delays_length(frame_dev_eod, n, name_orig, i, mean_type,
|
|
delays_length, i_nr=i_nr)
|
|
|
|
# embed()
|
|
if 'Same' in mean_type:
|
|
delays_length[n] = []
|
|
i_nr = 0
|
|
for i in range(len(frame_dev_eod) - 1):
|
|
delays_length, i_nr = find_delays_length(frame_dev_eod, n, name_orig, i, mean_type,
|
|
delays_length,
|
|
i_nr=i_nr)
|
|
|
|
# embed()
|
|
|
|
test = False
|
|
if test == True:
|
|
test_delays3()
|
|
|
|
else:
|
|
delays_length = []
|
|
# embed()
|
|
return delays_length
|
|
|
|
|
|
def test_delays3():
|
|
#######################################
|
|
# IDEA 2
|
|
# try to align waves
|
|
# Here I can calculate how many cicles I need in order for this to be periodic
|
|
find_optimal_period() # todo: not saved yet
|
|
#######################################
|
|
if test == True:
|
|
# toy data with simulated waves
|
|
plot_just_traces([]) # SAVED
|
|
|
|
#######################################
|
|
# IDEA 3
|
|
# just direct shifting
|
|
direct_shifting() # todo: not saved yet
|
|
|
|
|
|
def direct_shifting():
|
|
fig, ax = plt.subplots(5, 1, sharex=True)
|
|
ax[0].set_title('plot before')
|
|
|
|
ax[0].plot(frame_dev[n].iloc[i])
|
|
ax[0].plot(frame_dev[n].iloc[i + 1])
|
|
|
|
ax[1].set_title('plot after')
|
|
|
|
shifts = [0, 200, 300, 500]
|
|
for ll, l in enumerate(shifts):
|
|
eod_after = frame_dev[n].iloc[i + 1][0:-l]
|
|
dev_before = frame_dev[n].iloc[i][l::]
|
|
|
|
ax[ll].plot(eod_after)
|
|
ax[ll].plot(dev_before)
|
|
plt.show()
|
|
|
|
|
|
def plot_just_traces(id_group):
|
|
time = np.arange(0, 1, 1 / 10000)
|
|
eod_fr = 500
|
|
if len(id_group) > 0:
|
|
f1 = np.mean(id_group[1]['eodf'])
|
|
f2 = np.mean(id_group[1]['fish1alone.Frequency'])
|
|
f3 = np.mean(id_group[1]['fish2alone.Frequency']) - 55
|
|
else:
|
|
f1 = 750
|
|
f2 = 800
|
|
f3 = 800 - 55
|
|
|
|
time1 = time * 2 * np.pi * f1
|
|
eod1 = 1 * np.sin(time1)
|
|
time2 = time * 2 * np.pi * f2
|
|
eod2 = 0.2 * np.sin(time2)
|
|
time3 = time * 2 * np.pi * f3
|
|
eod3 = 0.2 * np.sin(time3)
|
|
stimulus = eod1 + eod2 + eod3
|
|
df1 = np.abs(f2 - f1)
|
|
df2 = np.abs(f3 - f1)
|
|
df3 = np.abs(f2 - f3)
|
|
env_f = np.abs(np.abs(f2 - f1) - np.abs(f3 - f1))
|
|
time_f = time * 2 * np.pi * env_f
|
|
eod_env = 1 * np.sin(time_f)
|
|
time_f = time * 2 * np.pi * df1
|
|
eod_df1 = 1 * np.sin(time_f)
|
|
time_f = time * 2 * np.pi * df2
|
|
eod_df2 = 1 * np.sin(time_f)
|
|
time_f = time * 2 * np.pi * df3
|
|
eod_df3 = 1 * np.sin(time_f)
|
|
fig, ax = plt.subplots(8, 1, sharex=True, sharey=True)
|
|
ax[0].plot(stimulus)
|
|
ax[0].set_title('all')
|
|
|
|
ax[3].set_title('env ' + str(env_f))
|
|
ax[1].plot(eod_env)
|
|
ax[2].set_title('df1 ' + str(df1))
|
|
ax[2].plot(eod_df1)
|
|
ax[3].set_title('df2 ' + str(df2))
|
|
ax[3].plot(eod_df2)
|
|
ax[4].set_title('df3 ' + str(df3))
|
|
ax[4].plot(eod_df3)
|
|
|
|
ax[5].set_title('all dfs')
|
|
ax[5].plot(eod_df2)
|
|
ax[5].plot(eod_env)
|
|
ax[5].plot(eod_df1)
|
|
ax[5].plot(eod_df3)
|
|
|
|
stimulus_rec = stimulus * 1
|
|
stimulus_rec[stimulus_rec < 0] = 0
|
|
ax[6].plot(stimulus_rec ** 3)
|
|
eod_interp, eod_norm = extract_am(stimulus ** 3, time, eodf=f1)
|
|
ax[7].plot(eod_interp)
|
|
|
|
p, f = ml.psd(eod_interp - np.mean(eod_interp),
|
|
Fs=40000,
|
|
NFFT=8000, noverlap=8000 / 2)
|
|
# plt.plot(f, p)
|
|
f_max = f[np.argmax(p)]
|
|
pos_max = np.argmax(p)
|
|
f_max1 = f[pos_max + 1::][np.argmax(p[pos_max + 1::])]
|
|
time_f = time * 2 * np.pi * f_max
|
|
eod_fmax = 1 * np.sin(time_f)
|
|
ax[5].plot(eod_fmax, color='red')
|
|
save_visualization(show=False)
|
|
plt.show()
|
|
|
|
|
|
def group_the_certain_group_several(grouped, DF2_desired, DF1_desired, emb=False):
|
|
try:
|
|
mult1 = np.array([a_tuple[2][0] for a_tuple in grouped.groups.keys()])
|
|
mult2 = np.array([a_tuple[2][1] for a_tuple in grouped.groups.keys()])
|
|
except:
|
|
print('tuple problem')
|
|
embed()
|
|
|
|
if str(mult1[0]) == '(':
|
|
# a_tuple[-1]
|
|
# [a_tuple for a_tuple in grouped.groups.keys()]
|
|
tuples = np.array([a_tuple[2] for a_tuple in grouped.groups.keys()])
|
|
# ast.literal_eval(tuples)
|
|
# tuples.literal_eval(strTup)
|
|
try:
|
|
tuples_convert = np.array([ast.literal_eval(a_tuple) for a_tuple in tuples])
|
|
except:
|
|
print('tuple thing')
|
|
embed()
|
|
mult1 = np.array([a_tuple[0] for a_tuple in tuples_convert])
|
|
mult2 = np.array([a_tuple[1] for a_tuple in tuples_convert])
|
|
|
|
try:
|
|
mult_array = np.round(np.abs(mult1 - DF1_desired) + np.abs((mult2 - DF2_desired)), 2)
|
|
except:
|
|
print('mult tuple problem')
|
|
embed()
|
|
restrict = np.argmin(mult_array)
|
|
min_val = mult_array[restrict]
|
|
restrict = mult_array == min_val
|
|
|
|
# embed()
|
|
|
|
if emb:
|
|
embed()
|
|
return restrict
|
|
|
|
|
|
def calc_mult(freq1, eodf, freq2):
|
|
DeltaF1 = freq1 - eodf
|
|
DeltaF2 = freq2 - eodf
|
|
mult1 = DeltaF1 / eodf + 1
|
|
mult2 = DeltaF2 / eodf + 1
|
|
return mult1, mult2, DeltaF2, DeltaF1
|
|
|
|
|
|
def save_features(features, mt, mt_sorted):
|
|
for f in range(len(features)):
|
|
name = features[f][len(mt.name) + 1::]
|
|
# try:
|
|
mt_feature = np.concatenate(mt.features[features[f]].data[:])
|
|
if len(mt_feature) == len(mt.positions[:]):
|
|
mt_sorted[name] = mt_feature
|
|
else:
|
|
# es gibt diese alle ersten Zellen wo wir nur die Daten hatten und dann später in Nix files konvertiert hatten
|
|
# die mit sehr niedriegen Kontrasten
|
|
# if len(mt_feature) == 2:
|
|
if (name == 'Frequency') | (name == 'DeltaF'):
|
|
mt_sorted[name + '1'] = mt_feature[0:len(mt_feature):2]
|
|
mt_sorted[name + '2'] = mt_feature[1:len(mt_feature):2]
|
|
else:
|
|
print('mt problems')
|
|
embed()
|
|
# else:
|
|
# print('mt problems')
|
|
# embed()
|
|
# if len(mt.positions[:]) == 1:
|
|
# mt_sorted[name] = np.mean(mt_feature)
|
|
# else:
|
|
# print('mt problems')
|
|
# embed()
|
|
return mt_sorted
|
|
|
|
|
|
def load_metadata_infos_three(mt_sorted, mt, ver_here='new'):
|
|
if ('fish1.DeltaF' in mt_sorted) and (ver_here == 'new'):
|
|
phase = mt.metadata.sections[0]['fish1']['fish2']['Phase']
|
|
#######################################
|
|
# contrasts
|
|
contrast1 = mt.metadata.sections[0]['fish1alone']['Contrast']
|
|
if 'fish2alone' in mt.metadata.sections[0].sections:
|
|
contrast2 = mt.metadata.sections[0]['fish2alone']['Contrast']
|
|
else:
|
|
# das ist im Fall wenn der eine Kontrast Null ist, also solche Zellen sollten wir eigentlich nicht haben
|
|
# aber der Vollständigkeithalber ist das hier jetzt drin!
|
|
contrast2 = mt.metadata.sections[0]['fish1']['fish2']['Contrast']
|
|
|
|
freq1_orig = mt_sorted['fish1.Frequency']
|
|
freq2_orig = mt_sorted['fish2.Frequency']
|
|
# if 'firstEODf' in eodftype:
|
|
# eodf = mt_sorted['EODf'].iloc[0]
|
|
# elif 'meanEODf' in eodftype:
|
|
# eodf = np.mean(mt_sorted['EODf'])
|
|
# elif 'pureEODf' in eodftype:
|
|
|
|
eodf_orig = mt_sorted['EODf'] # .iloc[0]
|
|
|
|
# das ist für die älteren Zellen, die haben ein bisschen eine andere Namens gebeung
|
|
elif 'fish1.Frequency' in mt_sorted:
|
|
# mt.metadata.pprint(max_depth=-1)
|
|
phase = mt.metadata.sections[0]['fish2']['Phase']
|
|
ver_here = 'code_old'
|
|
contrast1 = mt.metadata.sections[0]['Contrast']
|
|
contrast2 = mt.metadata.sections[0]['fish2']['Contrast']
|
|
freq1_orig = mt_sorted['fish1.Frequency'] # todo das eventuell noch ändern
|
|
freq2_orig = mt_sorted['fish2.Frequency']
|
|
# das ist für die sehr alteren Zellen, die haben ein bisschen eine andere Namens gebeung
|
|
else: # für z.B. Zelle ['2021-06-23-ab-invivo-1']
|
|
# mt.metadata.pprint(max_depth=-1)
|
|
phase = mt.metadata.sections[0].sections[0]['Phase']
|
|
ver_here = 'code_very_old'
|
|
# embed()
|
|
# mt.metadata.pprint(max_depth = -1)
|
|
contrast1 = mt.metadata.sections[0]['Contrast']
|
|
contrast2 = mt.metadata.sections[0].sections[0]['Contrast']
|
|
# try:
|
|
freq1_orig = np.array(mt_sorted['Frequency']) # todo das eventuell noch ändern
|
|
try:
|
|
mt_sorted['fish1.Frequency'] = freq1_orig
|
|
except:
|
|
print('freq problem1')
|
|
embed()
|
|
freq2_orig = np.array(mt_sorted['fish2.Frequency'])
|
|
mt_sorted['fish2.Frequency'] = freq2_orig
|
|
# mt.metadata.pprint(max_depth = -1)
|
|
# eodf = times_sort['Frequency'].iloc[0]
|
|
# if 'firstEODf' in eodftype:
|
|
# eodf = mt_sorted['Frequency'].iloc[0]
|
|
# elif 'meanEODf' in eodftype:
|
|
# eodf = np.mean(mt_sorted['Frequency'])
|
|
# elif 'pureEODf' in eodftype:
|
|
# wir machen im Prinzip immer pure EODf das macht einfach Sinn
|
|
# embed()
|
|
eodf_orig = mt_sorted['fish2.Frequency'] * float('nan') # .iloc[0]
|
|
return phase, ver_here, contrast1, contrast2, eodf_orig, freq1_orig, freq2_orig
|
|
|
|
|
|
def feautures_in_mtframe(mt):
|
|
mt_range = np.arange(0, len(mt.positions[:]))
|
|
mt_sorted = pd.DataFrame(mt_range, columns=['mt'])
|
|
mt_sorted['mt_names'] = mt.name
|
|
|
|
##############################
|
|
# features in nix
|
|
features, delay_name = feature_extract(mt)
|
|
mt_sorted = save_features(features, mt, mt_sorted)
|
|
return mt_sorted
|
|
|
|
|
|
def find_eodf(times_final, eodf_orig, eodftype, freq1_orig, freq2_orig, mt_sorted, b, mt, mt_idx=[]):
|
|
if eodftype == '_psdEOD_': # DEFAULT
|
|
# ok das andere das kann ich auf einem mehrere MT Level extrahieren, aber diese Analyse muss ich hier einzeln machen
|
|
# also viele einzelne psds. Deswegen speichern wir das alles ab um das nicht jedes Mal neu zu machen, weil ich ja später nochmal über die Zelle
|
|
# iteriere
|
|
# und ich mache das nicht erst später, weil ich ja nach den Mehrfachen gruppiere und den Frequenzen die sich ja
|
|
# ändern können, deswegen ist das schon gut wenn das hier schon passieren kann
|
|
# vielleicht muss ichs gar nicht speichern weils doch schnell geht
|
|
|
|
eodf, eodf_orig,freq_steps = find_eodf_three(b, mt, eodf_orig, mt_idx=mt_idx)
|
|
|
|
# embed()
|
|
if np.isnan(eodf).any():
|
|
eodf = np.ones(len(eodf)) * times_final['EODf'].iloc[0]
|
|
else:
|
|
eodf = eodf_orig
|
|
return eodf
|
|
|
|
|
|
def predefine_grouping_frame(b, redo=False, load=True, eodftype='_psdEOD_', freqtype='', printing=True, ver_here='new',
|
|
intial=False, cell_name=[]):
|
|
# if printing:
|
|
|
|
########################################
|
|
##'spikes_core_AUCI'
|
|
# frame_base = pd.read_pickle(load_folder_name('threefish')+'/calc_auc_three_core-spikes_core_AUCI.pkl')
|
|
# go over all mts
|
|
name = 'calc_auc_three_core-spikes_core_AUCI_multsorted2__psdEOD_all.pkl'
|
|
path = load_folder_name('threefish') + '/' + name
|
|
version_comp, subfolder, mod_name_slash, mod_name, subfolder_path = find_code_vs_not()
|
|
load_function = find_load_function()
|
|
path_local = load_function + '-' + name.replace('.pkl', '.csv')
|
|
path_local_pkl = load_function + '-' + name
|
|
#embed()
|
|
if (version_comp == 'public') & (redo == False):
|
|
# todo: ja das könnte man noch ausbauen
|
|
mt_sorted = pd.read_csv(path_local, index_col=0) #
|
|
# mt_sorted = pd.read_pickle(path_local_pkl)
|
|
if len(cell_name) > 0:
|
|
times_final = mt_sorted[mt_sorted['cell'] == cell_name]
|
|
else:
|
|
times_final = mt_sorted[mt_sorted['cell'] == b.name]
|
|
# embed()
|
|
elif os.path.exists(path) & (load == True):
|
|
# embed()
|
|
mt_sorted = pd.read_pickle(path)
|
|
times_final = mt_sorted[mt_sorted['cell'] == b.name]
|
|
# name1
|
|
if version_comp == 'develop':
|
|
# embed()
|
|
# todo: das noch implentieren
|
|
mt_sorted.to_pickle(path_local_pkl)
|
|
# mt_sorted.to_csv(path_local)
|
|
print('reloaded mt')
|
|
else:
|
|
t1 = time.time()
|
|
for mt_nr, mt in enumerate(b.multi_tags):
|
|
# todo: dieses Predefined vielleicht abspeichern damit man nicht so lange plotten muss!
|
|
# if printing:
|
|
t3 = time.time()
|
|
if ('Three' in mt.name):
|
|
# if printing:
|
|
t2 = time.time()
|
|
mt_sorted = feautures_in_mtframe(mt)
|
|
# embed()
|
|
|
|
# das ist für die meisten Zellen die aller neueste Version
|
|
phase, ver_here, contrast1, contrast2, eodf_orig, freq1_orig, freq2_orig = load_metadata_infos_three(
|
|
mt_sorted, mt, ver_here=ver_here)
|
|
if printing:
|
|
print('metadata: ' + str(time.time() - t2))
|
|
|
|
# if printing:
|
|
t4 = time.time()
|
|
# das hier machen wir einmal für alle mts!
|
|
try:
|
|
eodf = find_eodf(mt_sorted, eodf_orig, eodftype, freq1_orig, freq2_orig, mt_sorted, b, mt)
|
|
except:
|
|
print('problem stuff')
|
|
embed()
|
|
|
|
if printing:
|
|
print('load_eod: ' + str(time.time() - t4))
|
|
|
|
if freqtype == '_psd_':
|
|
# die Frequenzen bestimmen wir so wie sie abgespeichert sind das ist sonst ein Problem mit den niedriegen Kotnrasten
|
|
freq1, freq1_orig, freq2, freq2_orig = find_freqs_three(b, mt, freq1_orig, freq2_orig, mt_sorted)
|
|
else: # DEFAULT
|
|
# das ist für die Bilder gut, da muss das glaube ich nicht so genau sein
|
|
freq1 = freq1_orig
|
|
freq2 = freq2_orig
|
|
|
|
t5 = time.time()
|
|
mult1, mult2, DeltaF2, DeltaF1 = calc_mult(freq1, eodf, freq2)
|
|
|
|
if printing:
|
|
print('calc_mult: ' + str(time.time() - t5))
|
|
|
|
# das runden wir auch zum gruppieren
|
|
mt_sorted['EODmult1'] = np.round(mult1, 2)
|
|
mt_sorted['EODmult2'] = np.round(mult2, 2)
|
|
mt_sorted['f1'] = freq1
|
|
mt_sorted['f2'] = freq2
|
|
mt_sorted['f1_orig'] = freq1_orig
|
|
mt_sorted['f2_orig'] = freq2_orig
|
|
|
|
# wir runden das DeltaF1 und DeltaF2, weil wir die dann ja groupieren wollen
|
|
# quit
|
|
# embed()
|
|
# embed()
|
|
try:
|
|
DeltaF1 = np.array(list(map(int, np.round(freq1 - eodf))))
|
|
except:
|
|
print('eodf thing')
|
|
embed()
|
|
DeltaF2 = np.array(list(map(int, np.round(freq2 - eodf))))
|
|
mt_sorted['DF2'] = DeltaF2
|
|
mt_sorted['DF1'] = DeltaF1
|
|
mt_sorted['phase'] = phase
|
|
mt_sorted['eodf'] = eodf
|
|
mt_sorted['eodf_orig'] = eodf_orig
|
|
mt_sorted['DF1, DF2'] = list(zip(DeltaF1, DeltaF2))
|
|
mt_sorted['m1, m2'] = list(zip(mt_sorted['EODmult1'], mt_sorted['EODmult2']))
|
|
mt_sorted['c1'] = contrast1
|
|
mt_sorted['c2'] = contrast2
|
|
|
|
restrict = np.arange(0, len(mt.positions[:]))
|
|
mt_sorted = mt_sorted.iloc[restrict]
|
|
|
|
###########################################################
|
|
# das machen wir weil das eine Loop ist, das heißt wir concatenaten was wir schon haben (times_final) mit dem
|
|
# neuen (mt_sorted)
|
|
if intial == False:
|
|
times_final = mt_sorted
|
|
intial = True
|
|
else:
|
|
times_final = pd.concat([times_final, mt_sorted])
|
|
|
|
test = False
|
|
if test == True:
|
|
plt_freqs()
|
|
if printing:
|
|
print('predefine_grouping_frame2: ' + str(time.time() - t2))
|
|
if printing:
|
|
print('predefine_grouping_frame3: ' + str(time.time() - t3))
|
|
if printing:
|
|
print('predefine_grouping_frame: ' + str(time.time() - t1))
|
|
# embed()
|
|
return times_final
|
|
|
|
|
|
def find_freqs_three(b, mt, freq1_orig, freq2_orig, mt_sorted):
|
|
freq1 = []
|
|
freq2 = []
|
|
for mt_nr_small in range(len(mt.positions[:])):
|
|
##################
|
|
# get the times where to cut the stimulus
|
|
zeroth_cut, first_cut, second_cut, third_cut, fish_type, fish_cuts, whole_duration, delay, cont = load_four_durations(
|
|
mt, mt_sorted, mt_nr_small, mt_nr_small)
|
|
|
|
##################
|
|
# get the stimulus
|
|
eod_global, sampling = link_arrays_eod(b, mt.positions[:][mt_nr_small] - delay,
|
|
mt.extents[:][mt_nr_small] + delay,
|
|
array_name='GlobalEFieldStimulus')
|
|
# fish_number_base = remove_interspace_fish_nr(fish_number)
|
|
eods_glb, _ = cut_eod_sequences(eod_global, fish_cuts, cut=0, rec=False,
|
|
fish_number=fish_type, fillup=True, fish_number_base=fish_type)
|
|
|
|
if len(eods_glb['control_01']) > 0:
|
|
f1, p1, f = calc_freq_from_psd(eods_glb['control_01'], sampling_rate) # v
|
|
else:
|
|
f1 = freq1_orig.iloc[mt_nr_small]
|
|
freq1.append(f1)
|
|
if np.max(np.abs(freq1 - freq1_orig)) > 25:
|
|
print('f1 diff too big')
|
|
embed()
|
|
sampling_rate = 40000
|
|
frequency_saves, frequency = nfft_improval(sampling_rate, freq1_orig.iloc[mt_nr_small],
|
|
eods_glb['control_01'], freq1)
|
|
# problem: Bei kleinen Kontrasten ist das wohl keine so gute Idee..
|
|
# wir sollten dann doch davon ausgehen dass das stimmt mit den Frequenzen!
|
|
|
|
test = False
|
|
if test:
|
|
fig, ax = plt.subplots(2, 1)
|
|
ax[0].plot(eods_glb['control_01'])
|
|
ax[1].plot(f, p1)
|
|
plt.show()
|
|
|
|
if len(eods_glb['control_02']) > 0:
|
|
f2, p2, f = calc_freq_from_psd(eods_glb['control_02'], sampling_rate) # v
|
|
else:
|
|
f2 = freq2_orig.iloc[mt_nr_small]
|
|
freq2.append(f2)
|
|
if np.max(np.abs(freq2 - freq2_orig)) > 25:
|
|
print('f2 diff too big')
|
|
embed()
|
|
freq1 = np.array(freq1)
|
|
freq2 = np.array(freq2)
|
|
|
|
return freq1, freq1_orig, freq2, freq2_orig
|
|
|
|
|
|
def find_eodf_three(b, mt, eodf_orig, max_eod = False, mt_idx=[], freq_step_nfft_eod=0.6103515625):
|
|
eodf = []
|
|
|
|
# je nach dem ob ich alle mt freqs extrahieren will oder nur einen bestimmten index!
|
|
if not mt_idx:
|
|
ranges_here = range(len(mt.positions[:]))
|
|
else:
|
|
ranges_here = mt_idx
|
|
# embed()
|
|
freq_steps = []
|
|
for mt_nr_small in ranges_here:
|
|
##################
|
|
# get the global EOD
|
|
# hier können wir alles vom mt nehmen weil sich das ja nicht im Abhängigkeit vom Stimulus ändert
|
|
# eod_global, sampling = link_arrays_eod(b, mt.positions[:][mt_nr] - delay,
|
|
# mt.extents[:][mt_nr] + delay, mt.positions[:][mt_nr],
|
|
# load_eod_array='EOD')
|
|
# die Dauer sollte mindestens eine halbe Sekunde haben sonst hat das nicht genug Power!
|
|
duration = mt.extents[:][mt_nr_small]
|
|
|
|
sampling = get_sampling(b, 'EOD')
|
|
|
|
# embed()
|
|
|
|
# ok das mache ich hier jetzt anders!
|
|
#if freq_step_nfft_eod:
|
|
nfft_eod = int(sampling / freq_step_nfft_eod)
|
|
# freq_step = sampling/nfft_eod
|
|
|
|
# das ist das wir die minimal frequenz auflösung bekommen
|
|
if duration < nfft_eod / sampling:
|
|
duration = nfft_eod / sampling
|
|
global_eod, sampling = get_global_eod_for_eodf(b, duration, mt, mt_nr_small)
|
|
|
|
##################
|
|
# das sollte die minimal Frequenz Auflösung sein
|
|
#if
|
|
|
|
if max_eod:
|
|
maximal_nfft = len(global_eod)
|
|
else:
|
|
maximal_nfft = nfft_eod
|
|
eod_fr = get_eodf_here(b, eodf_orig, global_eod, mt_nr_small, maximal_nfft, sampling)
|
|
freq_step_maximal = get_freq_steps(maximal_nfft, sampling)
|
|
freq_steps.append(freq_step_maximal)
|
|
eodf.append(eod_fr)
|
|
|
|
eodf = np.array(eodf)
|
|
|
|
return eodf, eodf_orig, freq_steps
|
|
|
|
|
|
def plt_freqs():
|
|
fig, ax = plt.subplots(4, 1, sharex=True)
|
|
# plt.subplot(4,1,1)
|
|
ax[0].set_title('freq 1')
|
|
ax[0].plot(freq1)
|
|
ax[1].set_title('DeltaF 1')
|
|
ax[1].plot(DeltaF1)
|
|
ax[2].set_title('mult 1')
|
|
ax[2].plot(mult1)
|
|
ax[3].set_title('eodf')
|
|
ax[3].plot(eodf)
|
|
plt.show()
|
|
|
|
|
|
def find_all_dir_cells():
|
|
datasets = []
|
|
data_dir = []
|
|
data_dir_all = []
|
|
dirs = ['cells'] # , 'cells_o', 'cells_l', 'cells_gp'
|
|
for dir in dirs:
|
|
# if subfolder ==
|
|
version_comp, subfolder, mod_name_slash, mod_name, subfolder_path = find_code_vs_not()
|
|
if version_comp == 'develop': # version_comp == 'develop'
|
|
dir_path = '../../data/' + dir
|
|
else:
|
|
dir_path = '../data/' + dir
|
|
if os.path.exists(dir_path):
|
|
list_dir = os.listdir(dir_path + '/')[::-1]
|
|
|
|
for l, list_name in enumerate(list_dir):
|
|
if os.path.isdir(dir_path + '/' + list_name):
|
|
if ('noise' not in list_name): # ('invivo' in list_name) and
|
|
if list_name not in datasets:
|
|
datasets.append(list_name)
|
|
data_dir.append(dir + '/')
|
|
# data_dir_all.append('../data/'+dir + '/')
|
|
# embed()
|
|
return datasets, data_dir
|
|
|
|
|
|
def get_all_nix_names(b, what='Three'):
|
|
all_mt_names = find_mt_all(b)
|
|
mt_names = find_mt(b, what)
|
|
t_names = []
|
|
# try:
|
|
# b.tags
|
|
# for trials in b.tags:
|
|
# print(trials)
|
|
# except:
|
|
# print('ts problem here')
|
|
# embed()
|
|
for trials in b.tags:
|
|
if (what in trials.name):
|
|
t_names.append(trials.name)
|
|
|
|
return all_mt_names, mt_names, t_names
|
|
|
|
|
|
def find_mt(b, what):
|
|
mt_names = []
|
|
for t_nr, trials in enumerate(b.multi_tags):
|
|
if (what in trials.name):
|
|
mt_names.append(trials.name)
|
|
return mt_names
|
|
|
|
|
|
def find_right_dev(devname, devs):
|
|
dev_nrs = np.arange(len(devname))
|
|
dev_nrs = np.array(dev_nrs)[
|
|
np.array(devname) == devs[0]]
|
|
return dev_nrs
|
|
|
|
|
|
def load_cells_three(end, data_dir=[], datasets=[]):
|
|
if end == 'v2_2021-07-06':
|
|
cells = ['2021-07-06-ag-invivo-1', '2021-07-06-ab-invivo-1', '2021-07-06-ac-invivo-1', '2021-07-06-aa-invivo-1',
|
|
] # '2021-06-23-ac-invivo-1',
|
|
# Das sind glaube ich nochmal vier vom falschen Quadranten
|
|
elif end == 'v2_2021-07-08':
|
|
cells = ['2021-07-08-ab-invivo-1', '2021-07-08-aa-invivo-1', '2021-07-08-ac-invivo-1', '2021-07-08-ad-invivo-1']
|
|
# das werden nochmal vier sein wo aber nur ein Quadrant dabei ist
|
|
elif end == 'v2_2021-08-02':
|
|
cells = ['2021-08-02-ab-invivo-1', '2021-08-02-ac-invivo-1', '2021-08-02-ae-invivo-1']
|
|
# das sind drei Zellen wo ich das teilweise mit dem direkt mache
|
|
elif end == 'v2_2021-08-03':
|
|
cells = ['2021-08-03-ac-invivo-1', '2021-08-03-af-invivo-1', '2021-08-03-ad-invivo-1']
|
|
# das sind zwei Zellen wo ich das auch mit dem direkt mache
|
|
elif end == 'v2':
|
|
cells = ['2021-07-08-aa-invivo-1', '2021-07-08-ab-invivo-1', '2021-07-08-ac-invivo-1', '2021-07-08-ad-invivo-1',
|
|
'2021-08-03-ac-invivo-1', '2021-08-03-af-invivo-1', '2021-08-03-ad-invivo-1',
|
|
'2021-08-02-ab-invivo-1', '2021-08-02-ac-invivo-1', '2021-08-02-ae-invivo-1',
|
|
'2021-07-06-ag-invivo-1', '2021-07-06-ab-invivo-1', '2021-07-06-ac-invivo-1', '2021-07-06-aa-invivo-1',
|
|
]
|
|
elif end == 'all':
|
|
cells = datasets
|
|
cells = cells[::-1]
|
|
data_dir = data_dir[::-1] # todo: hier noch anpassen, weil es bei manchen nicht durchgeht!!
|
|
return data_dir, cells
|
|
|
|
|
|
def spikes_for_desired_cells(spikes, data_names=[],
|
|
names=['intro', 'contrasts', 'bursts', 'ampullary_small', 'model', 'eigen_small',
|
|
'eigemania_low_cv', 'eigenmania_high_cv', 'low_cv_punit', 'ampullary',
|
|
'bursts_all']):
|
|
if spikes != '':
|
|
data_names = find_names_cells(data_names, names)
|
|
return data_names
|
|
|
|
|
|
def find_names_cells(data_names, names):
|
|
data_names = []
|
|
for name in names:
|
|
try:
|
|
data_names.extend(p_units_to_show(type_here=name))
|
|
except:
|
|
print('embed thing')
|
|
embed()
|
|
return data_names
|
|
|
|
|
|
def plt_model_overview2(ax, cells=[], color_special='white', color_all='grey', color='brown',
|
|
scores=['perc95_perc5_fr']):
|
|
# embed()
|
|
# ax = np.concatenate(ax)
|
|
a = 0
|
|
nr = '2'
|
|
position = 0
|
|
|
|
# scores = ['perc80_perc5']
|
|
save_names = [load_folder_name('calc_model') +
|
|
'/calc_RAM_model-2__nfft_whole_power_1_eRAM_RAMdadjusted_additiv_cv_adapt_factor_scaled_cNoise_0.1_cSig_0.9_cutoff1_300_cutoff2_300no_sinz_length1_TrialsStim_9_a_fr_1__trans1s__TrialsNr_1_fft_o_forward_fft_i_forward_Hz_mV'
|
|
] # load_folder_name('calc_model') +'/calc_RAM_model-2__nfft_whole_power_1_eRAM_RAMdadjusted_additiv_cv_adapt_factor_scaled_cNoise_0.1_cSig_0.9_cutoff1_300_cutoff2_300no_sinz_length1_TrialsStim_30_a_fr_1__trans1s__TrialsNr_1_fft_o_forward_fft_i_forward_Hz_mV_burstIndividual_']
|
|
cvs = []
|
|
cv_names = ['cv_wo_burstcorr'] # ,'cv_w_burstcorr']
|
|
cells_here = []
|
|
frames = []
|
|
for save_name in save_names:
|
|
# for all in it.product(*iternames):
|
|
|
|
# burst_corr, var_type, stim_type_afe, trials_stim, stim_type_noise, power, nfft, dendrid, cut_off1, trial_nrs, c_sig, c_noise, ref_type, adapt_type, noise_added, extract, a_fr, a_fe = all
|
|
# print(trials_stim,stim_type_noise, power, nfft, a_fe,a_fr, dendrid, var_type, cut_off1,trial_nrs)
|
|
|
|
frame = pd.DataFrame()
|
|
frame = load_model_overview(cells, frame, nr, position, save_name, redo=True)
|
|
# print(frame.cell)
|
|
frames.append(frame)
|
|
cvs.append(frame.cv_stim)
|
|
# cvs_burstcorr.append(frame.cv)
|
|
cells_here.append(frame.cell)
|
|
# embed()
|
|
|
|
# todo: in der Burst corr version werden das weniger Zellen, schauen warum!
|
|
for c, cv in enumerate(cvs):
|
|
for s, save_name in enumerate(save_names):
|
|
# for all in it.product(*iternames):
|
|
cells_plot2 = p_units_to_show(type_here='model')
|
|
cells_plot2.extend(["2013-01-08-aa-invivo-1", "2012-12-13-an-invivo-1"])
|
|
# burst_corr, var_type, stim_type_afe, trials_stim, stim_type_noise, power, nfft, dendrid, cut_off1, trial_nrs, c_sig, c_noise, ref_type, adapt_type, noise_added, extract, a_fr, a_fe = all
|
|
# print(trials_stim,stim_type_noise, power, nfft, a_fe,a_fr, dendrid, var_type, cut_off1,trial_nrs)
|
|
# frame = pd.DataFrame()
|
|
frame = frames[s] # load_model_overview(cells, frame, nr, position, save_name)
|
|
cells_chosen = []
|
|
for s, score in enumerate(scores):
|
|
# embed()
|
|
ax.scatter(cv, frame[score], s=3.5, color=color_all) # , color = color)#, alpha = 0.45
|
|
ax.scatter(cv[frame['cell'].isin(cells_plot2)], frame[score][frame['cell'].isin(cells_plot2)], s=5,
|
|
edgecolor='black', alpha=0.5, color=color_special) # , alpha = 0.45
|
|
a += 1
|
|
|
|
|
|
def plt_model_overview(ax, cells=[], scores=['perc95_perc5_fr']):
|
|
# embed()
|
|
# ax = np.concatenate(ax)
|
|
a = 0
|
|
nr = '2'
|
|
position = 0
|
|
frame = pd.DataFrame()
|
|
# scores = ['perc80_perc5']
|
|
save_names = [load_folder_name('calc_model') +
|
|
'/calc_RAM_model-2__nfft_whole_power_1_eRAM_RAMdadjusted_additiv_cv_adapt_factor_scaled_cNoise_0.1_cSig_0.9_cutoff1_300_cutoff2_300no_sinz_length1_TrialsStim_30_a_fr_1__trans1s__TrialsNr_1_fft_o_forward_fft_i_forward_Hz_mV'
|
|
,
|
|
load_folder_name(
|
|
'calc_model') + '/calc_RAM_model-2__nfft_whole_power_1_eRAM_RAMdadjusted_additiv_cv_adapt_factor_scaled_cNoise_0.1_cSig_0.9_cutoff1_300_cutoff2_300no_sinz_length1_TrialsStim_30_a_fr_1__trans1s__TrialsNr_1_fft_o_forward_fft_i_forward_Hz_mV_burstIndividual_']
|
|
for save_name in save_names:
|
|
# for all in it.product(*iternames):
|
|
|
|
# burst_corr, var_type, stim_type_afe, trials_stim, stim_type_noise, power, nfft, dendrid, cut_off1, trial_nrs, c_sig, c_noise, ref_type, adapt_type, noise_added, extract, a_fr, a_fe = all
|
|
# print(trials_stim,stim_type_noise, power, nfft, a_fe,a_fr, dendrid, var_type, cut_off1,trial_nrs)
|
|
|
|
frame = load_model_overview(cells, frame, nr, position, save_name)
|
|
|
|
for s, score in enumerate(scores):
|
|
ax[a].scatter(frame['cv'], frame[score])
|
|
ax[a].set_ylabel(score)
|
|
ax[a].set_xlabel('cv')
|
|
# ax[a].text(0, 1.2, transform=ax[a].transAxes, )
|
|
# + ' $D_{sig}$=' + str np.round(D_derived, 5)
|
|
# ,' $fr_{B}$=' + str(int(np.round(model_show.fr.iloc[0]))) + ' $fr_{S}$=' + str(
|
|
# int(np.round(model_show.fr_stim.iloc[0]))) + 'Hz $cv_{B}$=' + str(
|
|
# np.round(model_show.cv.iloc[0], 2)) + \
|
|
# ' $cv_{S}$=' + str(
|
|
# np.round(model_show.cv_stim.iloc[0], 2)) + ' s=' + str(
|
|
# np.round(model_show.ser_sum_stim.iloc[0], 2)
|
|
a += 1
|
|
|
|
|
|
# load_data_susept
|
|
def load_model_overview(cells, frame, nr, position, save_name, redo=False):
|
|
path = save_name + '.pkl' # '../'+
|
|
model = load_model_susept(path, cells, save_name, save=False)
|
|
# embed()
|
|
# model.cv_stim_mean
|
|
# load_folder_name('calc_model')+'/calc_RAM_model-2__nfft_whole_power_1_eRAM_RAMdadjusted_additiv_visual_d_4_scaled_cNoise_0.1_cSig_0.9_cutoff1_300_cutoff2_300no_sinz_length1_TrialsStim_100000_a_fr_1__trans1s__TrialsNr_1_noiseadded__fft_o_forward_fft_i_forward_Hz_mV'
|
|
# cells_sorted = model.cell.iloc[np.argsort(model.cv_stim)]
|
|
path_cell_ref = load_folder_name(
|
|
'calc_model') + '/calc_RAM_model-2__nfft_whole_power_1_eRAM_RAMdadjusted_additiv_visual_d_4_scaled_cNoise_0.1_cSig_0.9_cutoff1_300_cutoff2_300no_sinz_length1_TrialsStim_100000_a_fr_1__trans1s__TrialsNr_1_fft_o_forward_fft_i_forward_Hz_mV.pkl'
|
|
# model_sorting = load_model_susept(path_cell_ref, cells, save_name, save = False)
|
|
# ok hier sortiere ich das irgendwie und irgendwas geht dabei schief
|
|
# embed()
|
|
# cells_sorted = model_sorting.cell.iloc[np.argsort(model_sorting.cv)]
|
|
# cv_sort = True
|
|
# if cv_sort:
|
|
# cells = np.array(np.unique(cells_sorted, return_index=True)[0])[
|
|
# np.array(np.argsort(np.unique(cells_sorted, return_index=True)[1]))]
|
|
# embed()
|
|
# cells = ['2014-12-11-aa-invivo-1']
|
|
# cells_for_sort = model.cell
|
|
# cvs = model.cv_stim
|
|
# cells_sorted = make_cell_unique(cvs, cells_for_sort)
|
|
# embed()
|
|
version_comp, subfolder, mod_name_slash, mod_name, subfolder_path = find_code_vs_not()
|
|
# embed()
|
|
trials = path.split('TrialsStim_')[1].split('_a_fr_')[0]
|
|
trials_stim = int(trials)
|
|
save_name_final = find_load_function() + '_model' + trials + '.csv'
|
|
try:
|
|
(not os.path.exists(save_name_final)) | (redo == True)
|
|
except:
|
|
print('stil problems')
|
|
embed()
|
|
|
|
if ((not os.path.exists(save_name_final)) | (redo == True)) & (
|
|
version_comp != 'public'): # (version_comp == 'code') | (version_comp == 'develop'):
|
|
for cell in cells:
|
|
|
|
# embed()
|
|
|
|
# initial_function = inspect.stack()[-1][1].split('\\')[-1].split('.')[0]
|
|
|
|
# if os.path.exists(path):
|
|
# model = pd.read_pickle(path)
|
|
# embed()
|
|
|
|
if len(model) > 0:
|
|
# cells = model.cell.unique() # model = pd.read_pickle(path)
|
|
# if len(cells_orig)<1:
|
|
# cells = [cells[0]]
|
|
# else:
|
|
# cells = cells_orig
|
|
# embed()
|
|
# for c, cell in enumerate(cells):
|
|
# titles = ''
|
|
suptitles = ''
|
|
model_show = model[
|
|
(model.cell == cell)] # & (model_cell.file_name == file)& (model_cell.power == power)]
|
|
# embed()
|
|
new_keys = model_show.index.unique() # [0:490]
|
|
try: # je nach dem in welchem folder wir sind also im übergeordneten oder untergerodneten
|
|
stack_plot = model_show[list(map(str, new_keys))]
|
|
except:
|
|
stack_plot = model_show[new_keys]
|
|
# print('loaded prob')
|
|
# embed()
|
|
stack_plot = stack_plot.iloc[np.arange(0, len(new_keys), 1)]
|
|
stack_plot.columns = list(map(float, stack_plot.columns))
|
|
# embed()
|
|
# ax[a].set_xlim(0, 300)
|
|
# ax[a].set_ylim(0, 300)
|
|
# ax[a].set_aspect('equal')
|
|
# try:
|
|
# model_cells = pd.read_csv(load_folder_name('calc_model_core')+"\models_big_fit_d_right.csv")
|
|
model_cells = resave_small_files("models_big_fit_d_right.csv")
|
|
# except:
|
|
# model_cells = resave_small_files("models_big_fit_d_right.csv", load_folder = 'calc_model_core')
|
|
|
|
model_params = model_cells[model_cells['cell'] == cell]
|
|
# embed()
|
|
# model[1,'cell']
|
|
if len(model_show) > 0:
|
|
noise_strength = model_params.noise_strength.iloc[0] # **2/2
|
|
deltat = model_params.deltat.iloc[0]
|
|
D = noise_strength # (noise_strength ** 2) / 2
|
|
# das war halt falsch mit diesem D und diesem sig
|
|
D_derived = D
|
|
# try:
|
|
c_sig = 0.1
|
|
# das hier mit dem D zu machen ist keine gute Idee :D
|
|
# / (4 * cut_off)
|
|
# hier ist das c_sig halt falsch, es muss 1 sein
|
|
# aber das Ding ist es ist ja kein Dierkter input
|
|
# wenn ich das mit d_isf nehmen sollte das c_sig = 1 sein
|
|
c_sig = float(save_name.split('cSig_')[1].split('_cutoff1_')[0])
|
|
c_sig = 1
|
|
# todo: doch das stimmt für den Egerland Fall!
|
|
D_derived, var, cut_off = D_derive(model_show, save_name, c_sig, nr=nr) # var_basedD=D,
|
|
# doch ich glaube das stimmt schon, ich muss halt aufpassen worüber ich mittel
|
|
# ok doch das stimmt auch
|
|
stack_plot = RAM_norm(stack_plot, trials_stim, D_derived)
|
|
# except:
|
|
# embed()
|
|
# print(D_derived)
|
|
power_spektrum = ((2 * (2 * D_derived) ** 2))
|
|
norm = 1 / power_spektrum # * stimulus_length input_scaling* *300/2000*stimulus_length
|
|
# print(norm)
|
|
# embed()
|
|
# stack_plot = np.abs((stack_plot) * norm)
|
|
# print(trials_stim)
|
|
# stack_plot = (np.abs(stack_plot) / trials_stim) #
|
|
# stack_plot = ((np.abs((stack_plot) * norm)))# ** 1 / trials_stim) #
|
|
|
|
# stack_plot = RAM_norm(D_derived, stack_plot, trials_stim)
|
|
# embed()
|
|
|
|
# if many == True:
|
|
# titles = titles + ' Ef=' + str(int(model_params.EODf.iloc[0]))
|
|
color = title_color(cell)
|
|
# print(color)
|
|
# ax[a].set_title(
|
|
# titles + '\n $fr_{B}$=' + str(int(np.round(model_show.fr.iloc[0]))) + ' $fr_{S}$=' + str(
|
|
# int(np.round(model_show.fr_stim.iloc[0]))) + 'Hz\n $cv_{B}$=' + str(
|
|
# np.round(model_show.cv.iloc[0], 2)) + \
|
|
# ' $cv_{S}$=' + str(
|
|
# np.round(model_show.cv_stim.iloc[0], 2)) + '\n $D_{sig}$=' + str(
|
|
# np.round(D_derived, 5)) + ' s=' + str(
|
|
# np.round(model_show.ser_sum_stim.iloc[0], 2)), fontsize=fs, color = color)
|
|
perc = '' # 'perc'
|
|
|
|
# frame.loc[position, 'cell'] =stack_plot.cell.iloc[0] # float('nan')
|
|
# frame.loc[position, 'fr'] = model_show.fr.iloc[0]
|
|
# frame.loc[position, 'cv'] = model_show.cv.iloc[0]
|
|
# todo: das normieren fehlt halt noch und das andere Maß ohne std korr ist wohl anfälliger
|
|
diagonal, frame = get_overview_scores('', frame, stack_plot, position)
|
|
diag, diagonals_prj_l = get_mat_diagonals(np.array(stack_plot))
|
|
frame = signal_to_noise_ratios(diagonals_prj_l, frame, position, '')
|
|
# embed()
|
|
frame = fill_frame_with_non_float_vals(frame, position, model_show)
|
|
position += 1
|
|
# else:
|
|
# print('len problem2')
|
|
# embed()
|
|
# else:
|
|
# print('len problem3')
|
|
# embed()
|
|
if (version_comp == 'develop'):
|
|
frame.to_csv(save_name_final)
|
|
else:
|
|
frame = pd.read_csv(save_name_final)
|
|
return frame
|
|
|
|
|
|
def get_overview_scores(add, frame, mat, position):
|
|
# embed()
|
|
mat = np.array(mat)
|
|
maximum = np.max(np.array(mat))
|
|
minimum = np.min(np.array(mat))
|
|
percentiel99 = np.percentile(mat, 99)
|
|
percentiel90 = np.percentile(mat, 90)
|
|
percentiel10 = np.percentile(mat, 10)
|
|
percentiel80 = np.percentile(mat, 80)
|
|
percentiel70 = np.percentile(mat, 70)
|
|
percentiel10 = np.percentile(mat, 10)
|
|
percentiel95 = np.percentile(mat, 95)
|
|
percentiel5 = np.percentile(mat, 5)
|
|
percentiel1 = np.percentile(mat, 1)
|
|
# embed()
|
|
frame.loc[position, 'std_mean' + add] = np.std(np.array(mat)) / np.mean(np.array(mat))
|
|
frame.loc[position, 'max_min' + add] = (maximum - minimum) / (maximum + minimum)
|
|
frame.loc[position, 'perc80_perc5' + add] = (percentiel80 - percentiel5) / (percentiel80 + percentiel5)
|
|
frame.loc[position, 'perc70_perc5' + add] = (percentiel70 - percentiel5) / (percentiel70 + percentiel5)
|
|
frame.loc[position, 'perc90_perc5' + add] = (percentiel90 - percentiel5) / (
|
|
percentiel90 + percentiel5)
|
|
|
|
frame.loc[position, 'perc90_perc10' + add] = (percentiel90 - percentiel10) / (
|
|
percentiel90 + percentiel10)
|
|
|
|
frame.loc[position, 'perc95_perc5' + add] = (percentiel95 - percentiel5) / (percentiel95 + percentiel5)
|
|
frame.loc[position, 'perc99_perc1' + add] = (percentiel99 - percentiel1) / (percentiel99 + percentiel1)
|
|
|
|
test = False
|
|
if test:
|
|
test_percentile()
|
|
# embed()
|
|
extra = False
|
|
if extra:
|
|
diagonal = mat.diagonal()
|
|
diagonal_norm = diagonal / np.sum(diagonal)
|
|
mat_norm = mat / np.sum(diagonal)
|
|
# np.log2(diagonal_norm)-np.sum(diagonal_norm)*np.log(diagonal_norm)
|
|
entropy_mat = scipy.stats.entropy(np.concatenate(mat_norm))
|
|
entropy_diagonal = scipy.stats.entropy(diagonal_norm)
|
|
frame.loc[position, 'entropy_mat' + add] = entropy_mat
|
|
frame.loc[position, 'entropy_diagonal' + add] = entropy_diagonal
|
|
else:
|
|
diagonal = []
|
|
return diagonal, frame
|
|
|
|
|
|
def fill_frame_with_non_float_vals(frame, position, stack_here):
|
|
types = list(map(type, stack_here.keys()))
|
|
|
|
keys_else = stack_here.keys()[np.where(np.array(types) != float)]
|
|
stack_vals = stack_here[keys_else].iloc[0]
|
|
if 'osf' in stack_vals.keys():
|
|
stack_vals.pop('osf')
|
|
if 'spikes' in stack_vals.keys():
|
|
stack_vals.pop('spikes')
|
|
stack_vals.pop('isf')
|
|
stack_vals.pop('freqs')
|
|
if 'freqs_idx' in stack_vals.keys():
|
|
stack_vals.pop('freqs_idx')
|
|
frame.loc[position, list(np.array(stack_vals.keys()))] = stack_vals # stack_else
|
|
return frame
|
|
|
|
|
|
def convert_csv_str_to_float(stack_final):
|
|
stack_plot = stack_final
|
|
keys = stack_plot.keys()
|
|
# embed()
|
|
# new_keys = keys[np.array(list(map(type, keys))) == float]
|
|
# new_keys = np.sort(new_keys)
|
|
new_keys = stack_plot.index
|
|
# embed()
|
|
# stack_plot.columns = list(map(float,stack_plot.columns))
|
|
try:
|
|
stack_plot = stack_plot[new_keys]
|
|
except:
|
|
new_keys = list(map(str, new_keys))
|
|
try:
|
|
stack_plot = stack_plot[new_keys]
|
|
except:
|
|
new_keys = np.round(stack_plot.index, 1)
|
|
new_keys = list(map(str, new_keys))
|
|
new_keys = [k + '.0' for k in new_keys]
|
|
stack_plot = stack_plot[new_keys]
|
|
print('stack two still not working')
|
|
embed()
|
|
# embed()
|
|
# pd.to_numeric(stack_plot)
|
|
stack_plot = stack_plot.astype(complex)
|
|
# stack_plot[new_keys] = stack_plot[new_keys].apply(pd.to_numeric)
|
|
stack_plot.columns = list(map(float, stack_plot.columns))
|
|
|
|
|
|
return new_keys, stack_plot
|
|
|
|
|
|
def change_model_from_csv_to_plots(model_show):
|
|
new_keys = model_show.index.unique() # [0:490]
|
|
try: # je nach dem in welchem folder wir sind also im übergeordneten oder untergerodneten
|
|
stack_plot = model_show[list(map(str, new_keys))]
|
|
except:
|
|
stack_plot = model_show[new_keys]
|
|
# print('loaded prob')
|
|
# embed()
|
|
stack_plot = stack_plot.iloc[np.arange(0, len(new_keys), 1)]
|
|
stack_plot.columns = list(map(float, stack_plot.columns))
|
|
|
|
return stack_plot
|
|
|
|
|
|
def file_names_exlude_func(frame):
|
|
file_names_there = ['gwn150Hz10s0.3',
|
|
'gwn300Hz10s0.3', 'gwn300Hz10s0.3short', 'gwn300Hz50s0.3', 'InputArr_400hz_30'
|
|
]
|
|
frame_file_ex = frame[frame.file_name.isin(file_names_there)]
|
|
return frame_file_ex
|
|
|
|
|
|
def extract_mat(stack_here, keys=[], e=0, sens='', ends_nr=[2000], abs=True, norm=''):
|
|
# .iloc[0:int(stack_here['snippets'].iloc[0])]#stack_here['d_isf1'].iloc[0]
|
|
# embed()
|
|
if len(keys) < 1:
|
|
keys = get_float_keys(stack_here)
|
|
mat_to_div = stack_here[keys[keys < ends_nr[e]]]
|
|
mat_to_div = mat_to_div.loc[mat_to_div.index < ends_nr[e]]
|
|
mat_val = ram_norm_choice(mat_to_div, norm, stack_here, abs=abs)
|
|
# hier adden wir nochmal die Zell Sensitivitäts Bereinigung durch die Var der Spikes
|
|
if sens != '':
|
|
spikes_var = stack_here['response_modulation'].iloc[
|
|
0] # stack_here['var_spikes'].iloc[0] / stack_here['snippets'].unique()[0]
|
|
|
|
mat_val = mat_val / spikes_var
|
|
# todo: das ist eigneltich egal weil die Maße danach beziehen das mit ein!
|
|
# std_mean.append(np.std(np.array(mat)) / np.mean(np.array(mat)))
|
|
mat = np.array(mat_val)
|
|
return mat, mat_to_div
|
|
|
|
|
|
def ram_norm_choice(mat_to_div, norm, stack_here, abs=True):
|
|
if 'constnorm' in norm: # _constnorm
|
|
# const norm mit diesem d_isf1 ist generell falsch
|
|
# damals haben wir an der NUller vom Power SPectrum geschaut und das als Abschätung
|
|
# der varianz gemacht und nicht mal über die Power sondern das abs gemittelt deswegen ist das alles falsch
|
|
mat_val = RAM_norm_data(stack_here['d_isf1'].iloc[0],
|
|
mat_to_div,
|
|
stack_here['snippets'].unique()[0])
|
|
else:
|
|
if 'old' in norm:
|
|
power = 1
|
|
else:
|
|
power = 2
|
|
mat_val = RAM_norm_data(stack_here['isf'].iloc[0], mat_to_div,
|
|
stack_here['snippets'].unique()[0], abs=abs, power=power, stack_here=stack_here)
|
|
# embed()
|
|
return mat_val
|
|
|
|
|
|
def get_mat_diagonals(mat):
|
|
diagonals = []
|
|
shapes = []
|
|
diagonals_prj = []
|
|
diagonals_prj_l = []
|
|
for m in range(len(mat)):
|
|
# todo: ich glaube ich mache diese Projektion falsch
|
|
try:
|
|
diagonals.append(np.diagonal(mat[:, ::-1][m::, :])) # [0:-m, 0:-m]mat[m:, m:]
|
|
except:
|
|
print('diagonal thing')
|
|
embed()
|
|
diagonals_prj.append(np.mean(np.diagonal(mat[:, ::-1][m::, :])))
|
|
diagonals_prj_l.append(
|
|
np.mean(np.diagonal(np.transpose(mat[:, ::-1])[m::, :])))
|
|
|
|
shapes.append(np.shape(mat[m:, m:]))
|
|
diag = np.diagonal(mat)
|
|
diagonals_prj_l = diagonals_prj_l[::-1]
|
|
diagonals_prj_l.extend(diagonals_prj)
|
|
return diag, diagonals_prj_l
|
|
|
|
|
|
def axis_projection(mat_val, axis='orig_axis'):
|
|
if 'orig_axis' in axis:
|
|
diff_val = np.diff(np.array(mat_val.index))[0] / 2
|
|
axis_d = np.arange(mat_val.index[0] - diff_val,
|
|
mat_val.index[-1] + diff_val, diff_val)
|
|
else:
|
|
# embed()
|
|
axis_new = mat_val.index + mat_val.columns
|
|
diff_val = np.diff(np.array(axis_new))[0] / 2
|
|
axis_d = np.arange(axis_new[0] - diff_val,
|
|
axis_new[-1] + diff_val, diff_val)
|
|
|
|
return axis_d
|
|
|
|
|
|
|
|
|
|
|
|
def mod_lims_modulation(cell_type_here, frame_file, score_m, std_est=None):
|
|
if not std_est:
|
|
if 'P-Unit' in cell_type_here:
|
|
mod_limits = np.arange(0, 100,
|
|
5) # np.linspace(0,100,11)#np.max(frame_file[score_m])
|
|
mod_limits = np.concatenate([mod_limits, [np.max(frame_file[score_m])]])
|
|
else:
|
|
mod_limits = np.arange(0, 60,
|
|
5) # np.linspace(0,100,11)#np.max(frame_file[score_m])
|
|
mod_limits = np.concatenate([mod_limits, [np.max(frame_file[score_m])]])
|
|
else:
|
|
nbins = 70
|
|
std_estimate, center = hist_threshold(frame_file[score_m][~np.isnan(frame_file[score_m])],
|
|
thresh_fac=1,
|
|
nbins=nbins)
|
|
mod_limits = np.linspace(0, np.median(frame_file[score_m]) + 3 * std_estimate,
|
|
30)
|
|
mod_limits = np.concatenate([mod_limits, [np.max(frame_file[score_m])]])
|
|
if test:
|
|
std_estimate, center = hist_threshold(frame[score][~np.isnan(frame[score])],
|
|
thresh_fac=1,
|
|
nbins=nbins)
|
|
return mod_limits
|
|
|
|
|
|
def signal_to_noise_ratios(diag_val, frame, position, add):
|
|
sub_mods = ['', '-med', '-center', '-m'] # , richtig = ''
|
|
perc_nrs = [99, 99.9] # ,99, 10092.5, 80, 85, 90,98,
|
|
# die gaussian Werte vom Jan
|
|
nbins = 70
|
|
std_estimate, center = hist_threshold(diag_val,
|
|
thresh_fac=1,
|
|
nbins=nbins)
|
|
std_sigma = np.percentile(diag_val, 84) - np.median(diag_val)
|
|
std_orig = np.std(diag_val)
|
|
div_mods = ['', 'med', 'stdthunder'] # , 'stdsigma','stdorig' ,'mean']# richtig = 'med' 'stdthunder2.576',
|
|
for sub_mod in sub_mods:
|
|
for perc_nr in perc_nrs:
|
|
for div_mod in div_mods:
|
|
percentiel99 = np.percentile(diag_val,
|
|
perc_nr)
|
|
frame.loc[position, 'perc' + str(perc_nr) + '_' + add] = percentiel99
|
|
frame.loc[position, 'med' + '_' + add] = np.median(
|
|
diag_val)
|
|
frame.loc[position, 'stdthunder' + '_' + add] = std_estimate
|
|
frame.loc[position, 'stdthunder2.576' + '_' + add] = std_estimate * 2.576
|
|
frame.loc[
|
|
position, 'stdsigma' + '_' + add] = std_sigma
|
|
frame.loc[
|
|
position, 'stdorig' + '_' + add] = std_orig
|
|
frame.loc[position, 'center' + '_' + add] = center
|
|
if div_mod == 'med':
|
|
div = np.median(diag_val)
|
|
elif div_mod == 'stdthunder':
|
|
div = std_estimate
|
|
elif div_mod == 'stdthunder2.576':
|
|
div = std_estimate * 2.576
|
|
elif div_mod == 'stdsigma':
|
|
div = std_sigma
|
|
elif div_mod == 'stdorig':
|
|
div = std_orig
|
|
elif div_mod == '':
|
|
div = 1
|
|
else:
|
|
div = np.mean(diag_val)
|
|
if sub_mod == '-m':
|
|
# if div_mod == 'med':
|
|
sub = div
|
|
elif sub_mod == '-med':
|
|
# if div_mod == 'med':
|
|
sub = np.median(diag_val)
|
|
elif sub_mod == '-center':
|
|
# if div_mod == 'med':
|
|
sub = center
|
|
else:
|
|
sub = 0
|
|
frame.loc[
|
|
position, 'perc' + str(perc_nr) + sub_mod + '/' + div_mod + '_' + add] = (percentiel99 - sub) / div
|
|
return frame
|
|
|
|
|
|
def restrict_base_durationts(duration):
|
|
if duration > 30:
|
|
duration = 30
|
|
else:
|
|
duration = duration
|
|
return duration
|
|
|
|
|
|
def update_fav_snippet(nfft, fav_snippet=9):
|
|
return int(np.round(
|
|
fav_snippet / float(nfft.replace('sec', ''))))
|
|
|
|
|
|
def find_cell_cont(redo, cell, frame, saved):
|
|
if saved == True:
|
|
try:
|
|
np.array(frame.cell.unique())
|
|
except:
|
|
print('problem')
|
|
embed()
|
|
# embed()
|
|
if cell not in np.array(frame.cell.unique()):
|
|
cont = True
|
|
else:
|
|
cont = False
|
|
else:
|
|
cont = True
|
|
if redo:
|
|
cont = True
|
|
return cont
|
|
|
|
|
|
def load_frame(redo, name):
|
|
if redo == False:
|
|
if os.path.exists(name):
|
|
if 'csv' in name:
|
|
try:
|
|
frame = pd.read_csv(name, index_col=0)
|
|
except:
|
|
print('parse thing')
|
|
embed()
|
|
else:
|
|
frame = pd.read_pickle(name)
|
|
position = len(frame)
|
|
saved = True
|
|
else:
|
|
frame = pd.DataFrame()
|
|
position = 0
|
|
saved = False
|
|
else:
|
|
frame = pd.DataFrame()
|
|
position = 0
|
|
saved = False
|
|
return frame, position, saved
|
|
|
|
|
|
def find_common_mod(save_names=[
|
|
'calc_RAM_overview-noise_data9_nfft1sec_original__StimPreSaved4__mean5__CutatBeginning_0.05_s_NeurDelay_0.005_s__burstIndividual_',
|
|
]):
|
|
amps = []
|
|
mods_p = []
|
|
mods_a = []
|
|
mods = []
|
|
cell_type_type = 'cell_type_reclassified'
|
|
for ss, save_name in enumerate(save_names):
|
|
save_name_here = load_folder_name('calc_RAM') + '/' + save_name + '.csv'
|
|
frame_load = pd.read_csv(save_name_here, index_col=0)
|
|
# embed()
|
|
amps.extend(frame_load.amp.unique())
|
|
spikes_var = np.sqrt(frame_load['var_spikes'] / frame_load['snippets'])
|
|
frame_load['modulation'] = spikes_var
|
|
# embed()
|
|
mods_p.extend(frame_load[frame_load[cell_type_type] == ' P-unit']['modulation'])
|
|
mods_a.extend(frame_load[frame_load[cell_type_type] == ' Ampullary']['modulation'])
|
|
mods.extend(frame_load['modulation'])
|
|
amps = np.unique(amps)
|
|
mod_limits_p = np.linspace(0, 1200, 8)
|
|
mod_limits_p = np.concatenate([mod_limits_p, [np.max(mods)]])
|
|
mod_limits_a = np.linspace(0, 500, 8)
|
|
mod_limits_a = np.concatenate([mod_limits_a, [np.max(mods)]])
|
|
return mod_limits_a, mod_limits_p, mods_a, mods_p, frame_load
|
|
|
|
|
|
def find_norm_compars(isf, isf_mean, osf, deltat, stack_plot, mean=True):
|
|
f_range = np.arange(len(stack_plot))
|
|
|
|
try:
|
|
f_mat1, f_mat2, f_idx_sum, mat_single = fft_matrix(deltat, osf[0], f_range, isf[0], norm='') # stimulus,
|
|
except:
|
|
print('fmat thing')
|
|
embed()
|
|
f_mat1, f_mat2, f_idx_sum, cross_norm = fft_matrix(deltat, osf[0], f_range, isf[0],
|
|
norm='_normPS_') # stimulus,
|
|
mats_all = []
|
|
mats_all_norm = []
|
|
scales = []
|
|
for t in range(len(osf)):
|
|
f_mat1, f_mat2, f_idx_sum, mat_all = fft_matrix(deltat, osf[t], f_range, isf[t],
|
|
norm='') # stimulus,
|
|
f_mat1, f_mat2, f_idx_sum, cross_norm = fft_matrix(deltat, osf[t], f_range, isf[t],
|
|
norm='_normPS_') # stimulus,
|
|
|
|
mats_all_norm.append(cross_norm)
|
|
mats_all.append(mat_all)
|
|
scale = find_norm_susept(f_idx_sum, isf[t][f_range])
|
|
scales.append(scale)
|
|
if mean:
|
|
mats_all_here = np.mean(mats_all, axis=0)
|
|
else:
|
|
mats_all_here = np.sum(mats_all, axis=0)
|
|
mats_all_here_norm = np.mean(mats_all_norm, axis=0)
|
|
scales = np.mean(scales, axis=0)
|
|
power_isf_1 = (np.abs(isf_mean[f_range]))
|
|
power_isf_1 = [power_isf_1] * len(stack_plot)
|
|
power_isf_2 = np.transpose(power_isf_1)
|
|
norm_char = power_isf_2 * power_isf_1
|
|
# embed()
|
|
# power_isf_1 = (np.abs(isf_mean[f_range]) ** 2)
|
|
# power_isf_1 = [power_isf_1] * len(stack_plot)
|
|
# power_isf_2 = np.transpose(power_isf_1)
|
|
# norm_char2 = power_isf_2 * power_isf_1
|
|
norm_char22 = find_norm_susept(stack_plot, isf_mean[f_range])
|
|
norm_char2 = 1 / norm_char22
|
|
return scales, cross_norm, f_mat2, mats_all_here, mats_all_here_norm, norm_char2
|
|
|
|
|
|
def overview_model(individual_tag='', nr_clim=10, many=False, width=0.02, row='no', HZ50=True, fs=8, hs=0.39,
|
|
redo=False, nffts=['whole'],
|
|
powers=[1], cells=["2013-01-08-aa-invivo-1"], col_desired=2, var_items=['contrasts'], show=False,
|
|
contrasts=[0], noises_added=[''], fft_i='forward', fft_o='forward', spikes_unit='Hz', mV_unit='mV',
|
|
D_extraction_method=['additiv_visual_d_4_scaled'], internal_noise=['eRAM'],
|
|
external_noise=['eRAM'], level_extraction=['_RAMdadjusted'], cut_off2=300,
|
|
repeats=[1000000],
|
|
receiver_contrast=[1], dendrids=[''], ref_types=[''], adapt_types=[''], c_noises=[0.1],
|
|
c_signal=[0.9],
|
|
cut_offs1=[300], burst_corrs=[''], clims='all', restrict='restrict', label=r'$\frac{1}{mV^2S}$'):
|
|
# plot_style()
|
|
|
|
duration_noise = '_short',
|
|
formula = 'code' ##'formula'
|
|
# ,int(2 ** 16) int(2 ** 16), int(2 ** 15),
|
|
stimulus_length = 1 # 20#550 # 30 # 15#45#0.5#1.5 15 45 100
|
|
trials_nrs = [1] # [100, 500, 1000, 3000, 10000, 100000, 1000000] # 500
|
|
stimulus_type = '_StimulusOrig_' # ,#
|
|
# ,3]#, 3, 1, 1.5, 0.5, ] # ,1,1.5, 0.5] #[1,1.5, 0.5] # 1.5,0.5]3, 1,
|
|
variant = 'sinz'
|
|
mimick = 'no'
|
|
cell_recording_save_name = ''
|
|
trans = 1 # 5
|
|
|
|
aa = 0
|
|
for burst_corr, cell, var_type, stim_type_afe, trials_stim, stim_type_noise, power, nfft, dendrid, cut_off1, trial_nrs, c_sig, c_noise, ref_type, adapt_type, noise_added, extract, a_fr, a_fe, in it.product(
|
|
burst_corrs, cells, D_extraction_method, external_noise
|
|
, repeats, internal_noise, powers, nffts, dendrids, cut_offs1, trials_nrs, c_signal,
|
|
c_noises,
|
|
ref_types, adapt_types, noises_added, level_extraction, receiver_contrast, contrasts, ):
|
|
# print(trials_stim,stim_type_noise, power, nfft, a_fe,a_fr, dendrid, cut_off1,trial_nrs)
|
|
# print(trial_nrs, stim_type_noise, trials_stim, power, nfft, a_fe, a_fr, var_type, cut_off1,trial_nrs)
|
|
aa += 1
|
|
|
|
# embed()
|
|
fig, ax = plt.subplots(2, 4, sharex=True,
|
|
figsize=(12, 5.5)) # sharey=True,constrained_layout=True,, figsize=(11, 5)
|
|
|
|
plt.subplots_adjust(wspace=0.8, bottom=0.067, top=0.86, hspace=hs, right=0.88,
|
|
left=0.075) # , hspace = 0.6, wspace = 0.5
|
|
|
|
ax = np.concatenate(ax)
|
|
a = 0
|
|
iternames = [burst_corrs, D_extraction_method, external_noise,
|
|
repeats, internal_noise, powers, nffts, dendrids, cut_offs1, trials_nrs, c_signal,
|
|
c_noises,
|
|
ref_types, adapt_types, noises_added, level_extraction, receiver_contrast, contrasts, ]
|
|
|
|
nr = '2'
|
|
position = 0
|
|
frame = pd.DataFrame()
|
|
for all in it.product(*iternames):
|
|
|
|
burst_corr, var_type, stim_type_afe, trials_stim, stim_type_noise, power, nfft, dendrid, cut_off1, trial_nrs, c_sig, c_noise, ref_type, adapt_type, noise_added, extract, a_fr, a_fe = all
|
|
# print(trials_stim,stim_type_noise, power, nfft, a_fe,a_fr, dendrid, var_type, cut_off1,trial_nrs)
|
|
|
|
save_name = save_ram_model(stimulus_length, cut_off1, duration_noise, nfft, a_fe, formula,
|
|
stim_type_noise, mimick, variant, trials_stim, power,
|
|
stimulus_type,
|
|
cell_recording_save_name, nr=nr, fft_i=fft_i, fft_o=fft_o, Hz=spikes_unit,
|
|
mV=mV_unit, burst_corr=burst_corr, stim_type_afe=stim_type_afe, extract=extract,
|
|
noise_added=noise_added,
|
|
c_noise=c_noise, c_sig=c_sig, ref_type=ref_type, adapt_type=adapt_type,
|
|
var_type=var_type, cut_off2=cut_off2, dendrid=dendrid, a_fr=a_fr,
|
|
trials_nr=trial_nrs, trans=trans, zeros='ones')
|
|
|
|
path = save_name + '.pkl' # '../'+
|
|
|
|
model = load_model_susept(path, cells, save_name)
|
|
# embed()
|
|
# model.cv_stim_mean
|
|
# load_folder_name('calc_model')+'/calc_RAM_model-2__nfft_whole_power_1_eRAM_RAMdadjusted_additiv_visual_d_4_scaled_cNoise_0.1_cSig_0.9_cutoff1_300_cutoff2_300no_sinz_length1_TrialsStim_100000_a_fr_1__trans1s__TrialsNr_1_noiseadded__fft_o_forward_fft_i_forward_Hz_mV'
|
|
# cells_sorted = model.cell.iloc[np.argsort(model.cv_stim)]
|
|
|
|
path_cell_ref = load_folder_name(
|
|
'calc_model') + '/calc_RAM_model-2__nfft_whole_power_1_eRAM_RAMdadjusted_additiv_visual_d_4_scaled_cNoise_0.1_cSig_0.9_cutoff1_300_cutoff2_300no_sinz_length1_TrialsStim_100000_a_fr_1__trans1s__TrialsNr_1_fft_o_forward_fft_i_forward_Hz_mV.pkl'
|
|
model_sorting = load_model_susept(path_cell_ref, cells, save_name)
|
|
# ok hier sortiere ich das irgendwie und irgendwas geht dabei schief
|
|
cells_sorted = model_sorting.cell.iloc[np.argsort(model_sorting.cv)]
|
|
cv_sort = True
|
|
if cv_sort:
|
|
cells = np.array(np.unique(cells_sorted, return_index=True)[0])[
|
|
np.array(np.argsort(np.unique(cells_sorted, return_index=True)[1]))]
|
|
# embed()
|
|
# cells = ['2014-12-11-aa-invivo-1']
|
|
# cells_for_sort = model.cell
|
|
# cvs = model.cv_stim
|
|
# cells_sorted = make_cell_unique(cvs, cells_for_sort)
|
|
# embed()
|
|
|
|
for cell in cells:
|
|
|
|
if 'additiv' in var_type: # ' ser1 ' + str(np.round(model_show.ser_first_stim.iloc[0], 2))+ ' ser mean ' + str(np.round(model_show.ser_stim.iloc[0], 5))
|
|
stim_type_noise_name = stim_type_noise
|
|
else:
|
|
stim_type_noise_name = ''
|
|
if dendrid == '':
|
|
dendrid_name = 'standard'
|
|
else:
|
|
dendrid_name = dendrid
|
|
if ref_type == '':
|
|
ref_type_name = 'standard'
|
|
else:
|
|
ref_type_name = dendrid
|
|
if adapt_type == '':
|
|
adapt_type_name = 'standard'
|
|
else:
|
|
adapt_type_name = adapt_type
|
|
|
|
# embed()
|
|
|
|
# initial_function = inspect.stack()[-1][1].split('\\')[-1].split('.')[0]
|
|
|
|
# if os.path.exists(path):
|
|
# model = pd.read_pickle(path)
|
|
# embed()
|
|
|
|
if len(model) > 0:
|
|
# cells = model.cell.unique() # model = pd.read_pickle(path)
|
|
# if len(cells_orig)<1:
|
|
# cells = [cells[0]]
|
|
# else:
|
|
# cells = cells_orig
|
|
# embed()
|
|
# for c, cell in enumerate(cells):
|
|
titles = ''
|
|
suptitles = ''
|
|
stim_type_noise_name2, stim_type_afe_name = stim_type_names(a_fe, c_sig, stim_type_afe,
|
|
stim_type_noise_name)
|
|
|
|
# for var_it in var_items:
|
|
if 'cells' in var_items:
|
|
titles += cell[2:13]
|
|
else:
|
|
suptitles += cell[2:13]
|
|
if 'internal_noise' in var_items:
|
|
titles += ' intrinsic noise=' + stim_type_noise_name2
|
|
else:
|
|
suptitles += ' intrinsic noise=' + stim_type_noise_name2
|
|
if 'external_noise' in var_items:
|
|
titles += ' additive RAM=' + stim_type_afe_name
|
|
else:
|
|
suptitles += ' additive RAM=' + stim_type_afe_name
|
|
if 'repeats' in var_items:
|
|
titles += ' $N_{repeat}=$' + str(trials_stim)
|
|
else:
|
|
suptitles += ' $N_{repeat}=$' + str(trials_stim)
|
|
if 'contrasts' in var_items:
|
|
titles += ' contrast=' + str(a_fe)
|
|
else:
|
|
suptitles += ' contrast=' + str(a_fe)
|
|
if 'level_extraction' in var_items:
|
|
titles += ' Extract Level=' + str(extract)
|
|
else:
|
|
suptitles += ' Extract Level=' + str(extract)
|
|
if 'D_extraction_method' in var_items:
|
|
titles += str(var_type)
|
|
else:
|
|
suptitles += str(var_type)
|
|
|
|
if 'noises_added' in var_items:
|
|
titles += ' high freq noise=' + str(noise_added)
|
|
else:
|
|
suptitles += ' high freq noise=' + str(noise_added)
|
|
|
|
model_show = model[
|
|
(model.cell == cell)] # & (model_cell.file_name == file)& (model_cell.power == power)]
|
|
# embed()
|
|
new_keys = model_show.index.unique() # [0:490]
|
|
try: # je nach dem in welchem folder wir sind also im übergeordneten oder untergerodneten
|
|
stack_plot = model_show[list(map(str, new_keys))]
|
|
except:
|
|
stack_plot = model_show[new_keys]
|
|
# print('loaded prob')
|
|
# embed()
|
|
stack_plot = stack_plot.iloc[np.arange(0, len(new_keys), 1)]
|
|
stack_plot.columns = list(map(float, stack_plot.columns))
|
|
# embed()
|
|
# ax[a].set_xlim(0, 300)
|
|
# ax[a].set_ylim(0, 300)
|
|
# ax[a].set_aspect('equal')
|
|
# try:
|
|
# model_cells = pd.read_csv(load_folder_name('calc_model_core')+"\models_big_fit_d_right.csv")
|
|
model_cells = resave_small_files("models_big_fit_d_right.csv")
|
|
# except:
|
|
# model_cells = resave_small_files("models_big_fit_d_right.csv", load_folder = 'calc_model_core')
|
|
|
|
model_params = model_cells[model_cells['cell'] == cell]
|
|
# embed()
|
|
# model[1,'cell']
|
|
if len(model_show) > 0:
|
|
noise_strength = model_params.noise_strength.iloc[0] # **2/2
|
|
deltat = model_params.deltat.iloc[0]
|
|
D = noise_strength # (noise_strength ** 2) / 2
|
|
D_derived = D
|
|
# try:
|
|
D_derived, var, cut_off = D_derive(model_show, save_name, c_sig, D=D, base='', nr=nr) # var_based
|
|
# except:
|
|
# embed()
|
|
# print(D_derived)
|
|
power_spektrum = ((2 * (2 * D_derived) ** 2))
|
|
norm = 1 / power_spektrum # * stimulus_length input_scaling* *300/2000*stimulus_length
|
|
# print(norm)
|
|
# embed()
|
|
# stack_plot = np.abs((stack_plot) * norm)
|
|
# print(trials_stim)
|
|
# stack_plot = (np.abs(stack_plot) / trials_stim) #
|
|
# stack_plot = ((np.abs((stack_plot) * norm)))# ** 1 / trials_stim) #
|
|
|
|
stack_plot = RAM_norm(stack_plot, trials_stim, D_derived)
|
|
# embed()
|
|
|
|
if many == True:
|
|
titles = titles + ' Ef=' + str(int(model_params.EODf.iloc[0]))
|
|
color = title_color(cell)
|
|
print(color)
|
|
# ax[a].set_title(
|
|
# titles + '\n $fr_{B}$=' + str(int(np.round(model_show.fr.iloc[0]))) + ' $fr_{S}$=' + str(
|
|
# int(np.round(model_show.fr_stim.iloc[0]))) + 'Hz\n $cv_{B}$=' + str(
|
|
# np.round(model_show.cv.iloc[0], 2)) + \
|
|
# ' $cv_{S}$=' + str(
|
|
# np.round(model_show.cv_stim.iloc[0], 2)) + '\n $D_{sig}$=' + str(
|
|
# np.round(D_derived, 5)) + ' s=' + str(
|
|
# np.round(model_show.ser_sum_stim.iloc[0], 2)), fontsize=fs, color = color)
|
|
perc = '' # 'perc'
|
|
|
|
# frame.loc[position, 'cell'] =stack_plot.cell.iloc[0] # float('nan')
|
|
# frame.loc[position, 'fr'] = model_show.fr.iloc[0]
|
|
# frame.loc[position, 'cv'] = model_show.cv.iloc[0]
|
|
diagonal, frame = get_overview_scores('', frame, stack_plot, position)
|
|
# embed()
|
|
frame = fill_frame_with_non_float_vals(frame, position, model_show)
|
|
position += 1
|
|
else:
|
|
print('len problem2')
|
|
embed()
|
|
else:
|
|
print('len problem')
|
|
embed()
|
|
a += 1
|
|
scores = ['std_mean', 'max_min', 'perc80_perc5', 'perc70_perc5', 'perc90_perc10', 'perc95_perc5', 'entropy_mat',
|
|
'entropy_diagonal']
|
|
for s, score in enumerate(scores):
|
|
ax[s].scatter(frame['cv'], frame[score])
|
|
ax[s].set_title(score)
|
|
# embed()
|
|
|
|
end_name = suptitles + ' a_fr=' + str(a_fr) + ' ' + ' dendride=' + str(
|
|
dendrid_name) + ' refractory period=' + str(ref_type_name) + ' adapt=' + str(
|
|
adapt_type_name) + ' ' + ' cutoff1=' + str(cut_off1) + '' ' stimulus length=' + str(
|
|
stimulus_length) + ' ' + ' power=' + str(
|
|
power) + ' ' + restrict #
|
|
end_name = cut_title(end_name, datapoints=120)
|
|
name_title = end_name
|
|
plt.suptitle(name_title + titles + '\n $fr_{B}$=' + str(int(np.round(model_show.fr.iloc[0]))) + ' $fr_{S}$=' + str(
|
|
int(np.round(model_show.fr_stim.iloc[0]))) + 'Hz\n $cv_{B}$=' + str(
|
|
np.round(model_show.cv.iloc[0], 2)) + \
|
|
' $cv_{S}$=' + str(
|
|
np.round(model_show.cv_stim.iloc[0], 2)) + '\n $D_{sig}$=' + str(
|
|
np.round(D_derived, 5)) + ' s=' + str(
|
|
np.round(model_show.ser_sum_stim.iloc[0], 2)), fontsize=fs, color=color) # +' file '
|
|
save_visualization(individual_tag=individual_tag, pdf=True, show=show)
|
|
|
|
|
|
def overview_model_trials(individual_tag='', nr_clim=10, many=False, width=0.02, row='no', HZ50=True, fs=8, hs=0.39,
|
|
redo=False, nffts=['whole'],
|
|
powers=[1], cells=["2013-01-08-aa-invivo-1"], col_desired=8, var_items=['contrasts'],
|
|
show=False,
|
|
contrasts=[0], noises_added=[''], fft_i='forward', fft_o='forward', spikes_unit='Hz',
|
|
mV_unit='mV',
|
|
D_extraction_method=['additiv_visual_d_4_scaled'], internal_noise=['eRAM'],
|
|
external_noise=['eRAM'],
|
|
scores=['std_mean', 'max_min', 'perc80_perc5', 'perc70_perc5', 'perc90_perc10',
|
|
'perc95_perc5', 'entropy_mat', 'entropy_diagonal']
|
|
, level_extraction=['_RAMdadjusted'], cut_off2=300, repeats=[1000000],
|
|
receiver_contrast=[1], dendrids=[''], ref_types=[''], adapt_types=[''], c_noises=[0.1],
|
|
c_signal=[0.9],
|
|
cut_offs1=[300], burst_corrs=[''], clims='all', restrict='restrict',
|
|
label=r'$\frac{1}{mV^2S}$'):
|
|
# plot_style()
|
|
|
|
duration_noise = '_short',
|
|
formula = 'code' ##'formula'
|
|
# ,int(2 ** 16) int(2 ** 16), int(2 ** 15),
|
|
stimulus_length = 1 # 20#550 # 30 # 15#45#0.5#1.5 15 45 100
|
|
trials_nrs = [1] # [100, 500, 1000, 3000, 10000, 100000, 1000000] # 500
|
|
stimulus_type = '_StimulusOrig_' # ,#
|
|
# ,3]#, 3, 1, 1.5, 0.5, ] # ,1,1.5, 0.5] #[1,1.5, 0.5] # 1.5,0.5]3, 1,
|
|
variant = 'sinz'
|
|
mimick = 'no'
|
|
cell_recording_save_name = ''
|
|
trans = 1 # 5
|
|
|
|
aa = 0
|
|
for burst_corr, cell, var_type, stim_type_afe, trials_stim, stim_type_noise, power, nfft, dendrid, cut_off1, trial_nrs, c_sig, c_noise, ref_type, adapt_type, noise_added, extract, a_fr, a_fe, in it.product(
|
|
burst_corrs, cells, D_extraction_method, external_noise
|
|
, repeats, internal_noise, powers, nffts, dendrids, cut_offs1, trials_nrs, c_signal,
|
|
c_noises,
|
|
ref_types, adapt_types, noises_added, level_extraction, receiver_contrast, contrasts, ):
|
|
# print(trials_stim,stim_type_noise, power, nfft, a_fe,a_fr, dendrid, cut_off1,trial_nrs)
|
|
# print(trial_nrs, stim_type_noise, trials_stim, power, nfft, a_fe, a_fr, var_type, cut_off1,trial_nrs)
|
|
aa += 1
|
|
|
|
# embed()
|
|
if row == 'no':
|
|
col, row = find_row_col(np.arange(aa * 8 / len(cells)), col=col_desired) # np.arange(
|
|
else:
|
|
col = col_desired
|
|
# embed()
|
|
fig, ax = plt.subplots(row, col, sharex=True,
|
|
figsize=(12, 5.5)) # sharey=True,constrained_layout=True,, figsize=(11, 5)
|
|
|
|
plt.subplots_adjust(wspace=0.8, bottom=0.067, top=0.86, hspace=hs, right=0.88,
|
|
left=0.075) # , hspace = 0.6, wspace = 0.5
|
|
|
|
# embed()
|
|
# ax = np.concatenate(ax)
|
|
a = 0
|
|
iternames = [burst_corrs, D_extraction_method, external_noise,
|
|
repeats, internal_noise, powers, nffts, dendrids, cut_offs1, trials_nrs, c_signal,
|
|
c_noises,
|
|
ref_types, adapt_types, noises_added, level_extraction, receiver_contrast, contrasts, ]
|
|
|
|
nr = '2'
|
|
position = 0
|
|
frame = pd.DataFrame()
|
|
for all in it.product(*iternames):
|
|
|
|
burst_corr, var_type, stim_type_afe, trials_stim, stim_type_noise, power, nfft, dendrid, cut_off1, trial_nrs, c_sig, c_noise, ref_type, adapt_type, noise_added, extract, a_fr, a_fe = all
|
|
# print(trials_stim,stim_type_noise, power, nfft, a_fe,a_fr, dendrid, var_type, cut_off1,trial_nrs)
|
|
|
|
save_name = save_ram_model(stimulus_length, cut_off1, duration_noise, nfft, a_fe, formula,
|
|
stim_type_noise, mimick, variant, trials_stim, power,
|
|
stimulus_type,
|
|
cell_recording_save_name, nr=nr, fft_i=fft_i, fft_o=fft_o, Hz=spikes_unit,
|
|
mV=mV_unit, burst_corr=burst_corr, stim_type_afe=stim_type_afe, extract=extract,
|
|
noise_added=noise_added,
|
|
c_noise=c_noise, c_sig=c_sig, ref_type=ref_type, adapt_type=adapt_type,
|
|
var_type=var_type, cut_off2=cut_off2, dendrid=dendrid, a_fr=a_fr,
|
|
trials_nr=trial_nrs, trans=trans, zeros='ones')
|
|
|
|
path = save_name + '.pkl' # '../'+
|
|
|
|
model = load_model_susept(path, cells, save_name)
|
|
# embed()
|
|
# model.cv_stim_mean
|
|
# load_folder_name('calc_model')+'/calc_RAM_model-2__nfft_whole_power_1_eRAM_RAMdadjusted_additiv_visual_d_4_scaled_cNoise_0.1_cSig_0.9_cutoff1_300_cutoff2_300no_sinz_length1_TrialsStim_100000_a_fr_1__trans1s__TrialsNr_1_noiseadded__fft_o_forward_fft_i_forward_Hz_mV'
|
|
# cells_sorted = model.cell.iloc[np.argsort(model.cv_stim)]
|
|
|
|
path_cell_ref = load_folder_name(
|
|
'calc_model') + '/calc_RAM_model-2__nfft_whole_power_1_eRAM_RAMdadjusted_additiv_visual_d_4_scaled_cNoise_0.1_cSig_0.9_cutoff1_300_cutoff2_300no_sinz_length1_TrialsStim_100000_a_fr_1__trans1s__TrialsNr_1_fft_o_forward_fft_i_forward_Hz_mV.pkl'
|
|
model_sorting = load_model_susept(path_cell_ref, cells, save_name)
|
|
# ok hier sortiere ich das irgendwie und irgendwas geht dabei schief
|
|
cells_sorted = model_sorting.cell.iloc[np.argsort(model_sorting.cv)]
|
|
cv_sort = True
|
|
if cv_sort:
|
|
cells = np.array(np.unique(cells_sorted, return_index=True)[0])[
|
|
np.array(np.argsort(np.unique(cells_sorted, return_index=True)[1]))]
|
|
# embed()
|
|
# cells = ['2014-12-11-aa-invivo-1']
|
|
# cells_for_sort = model.cell
|
|
# cvs = model.cv_stim
|
|
# cells_sorted = make_cell_unique(cvs, cells_for_sort)
|
|
# embed()
|
|
|
|
for cell in cells:
|
|
|
|
if 'additiv' in var_type: # ' ser1 ' + str(np.round(model_show.ser_first_stim.iloc[0], 2))+ ' ser mean ' + str(np.round(model_show.ser_stim.iloc[0], 5))
|
|
stim_type_noise_name = stim_type_noise
|
|
else:
|
|
stim_type_noise_name = ''
|
|
if dendrid == '':
|
|
dendrid_name = 'standard'
|
|
else:
|
|
dendrid_name = dendrid
|
|
if ref_type == '':
|
|
ref_type_name = 'standard'
|
|
else:
|
|
ref_type_name = dendrid
|
|
if adapt_type == '':
|
|
adapt_type_name = 'standard'
|
|
else:
|
|
adapt_type_name = adapt_type
|
|
|
|
# embed()
|
|
|
|
# initial_function = inspect.stack()[-1][1].split('\\')[-1].split('.')[0]
|
|
|
|
# if os.path.exists(path):
|
|
# model = pd.read_pickle(path)
|
|
# embed()
|
|
|
|
if len(model) > 0:
|
|
# cells = model.cell.unique() # model = pd.read_pickle(path)
|
|
# if len(cells_orig)<1:
|
|
# cells = [cells[0]]
|
|
# else:
|
|
# cells = cells_orig
|
|
# embed()
|
|
# for c, cell in enumerate(cells):
|
|
titles = ''
|
|
suptitles = ''
|
|
stim_type_noise_name2, stim_type_afe_name = stim_type_names(a_fe, c_sig, stim_type_afe,
|
|
stim_type_noise_name)
|
|
|
|
# for var_it in var_items:
|
|
if 'cells' in var_items:
|
|
titles += cell[2:13]
|
|
else:
|
|
suptitles += cell[2:13]
|
|
if 'internal_noise' in var_items:
|
|
titles += ' intrinsic noise=' + stim_type_noise_name2
|
|
else:
|
|
suptitles += ' intrinsic noise=' + stim_type_noise_name2
|
|
if 'external_noise' in var_items:
|
|
titles += ' additive RAM=' + stim_type_afe_name
|
|
else:
|
|
suptitles += ' additive RAM=' + stim_type_afe_name
|
|
if 'repeats' in var_items:
|
|
titles += ' $N_{repeat}=$' + str(trials_stim)
|
|
else:
|
|
suptitles += ' $N_{repeat}=$' + str(trials_stim)
|
|
if 'contrasts' in var_items:
|
|
titles += ' contrast=' + str(a_fe)
|
|
else:
|
|
suptitles += ' contrast=' + str(a_fe)
|
|
if 'level_extraction' in var_items:
|
|
titles += ' Extract Level=' + str(extract)
|
|
else:
|
|
suptitles += ' Extract Level=' + str(extract)
|
|
if 'D_extraction_method' in var_items:
|
|
titles += str(var_type)
|
|
else:
|
|
suptitles += str(var_type)
|
|
|
|
if 'noises_added' in var_items:
|
|
titles += ' high freq noise=' + str(noise_added)
|
|
else:
|
|
suptitles += ' high freq noise=' + str(noise_added)
|
|
|
|
model_show = model[
|
|
(model.cell == cell)] # & (model_cell.file_name == file)& (model_cell.power == power)]
|
|
# embed()
|
|
new_keys = model_show.index.unique() # [0:490]
|
|
try: # je nach dem in welchem folder wir sind also im übergeordneten oder untergerodneten
|
|
stack_plot = model_show[list(map(str, new_keys))]
|
|
except:
|
|
stack_plot = model_show[new_keys]
|
|
# print('loaded prob')
|
|
# embed()
|
|
stack_plot = stack_plot.iloc[np.arange(0, len(new_keys), 1)]
|
|
stack_plot.columns = list(map(float, stack_plot.columns))
|
|
# embed()
|
|
# ax[a].set_xlim(0, 300)
|
|
# ax[a].set_ylim(0, 300)
|
|
# ax[a].set_aspect('equal')
|
|
# try:
|
|
# model_cells = pd.read_csv(load_folder_name('calc_model_core')+"\models_big_fit_d_right.csv")
|
|
model_cells = resave_small_files("models_big_fit_d_right.csv")
|
|
# except:
|
|
# model_cells = resave_small_files("models_big_fit_d_right.csv", load_folder = 'calc_model_core')
|
|
|
|
model_params = model_cells[model_cells['cell'] == cell]
|
|
# embed()
|
|
# model[1,'cell']
|
|
if len(model_show) > 0:
|
|
noise_strength = model_params.noise_strength.iloc[0] # **2/2
|
|
deltat = model_params.deltat.iloc[0]
|
|
D = noise_strength # (noise_strength ** 2) / 2
|
|
D_derived = D
|
|
# try:
|
|
D_derived, var, cut_off = D_derive(model_show, save_name, c_sig, D=D, base='', nr=nr) # var_based
|
|
# except:
|
|
# embed()
|
|
# print(D_derived)
|
|
power_spektrum = ((2 * (2 * D_derived) ** 2))
|
|
norm = 1 / power_spektrum # * stimulus_length input_scaling* *300/2000*stimulus_length
|
|
# print(norm)
|
|
# embed()
|
|
# stack_plot = np.abs((stack_plot) * norm)
|
|
# print(trials_stim)
|
|
# stack_plot = (np.abs(stack_plot) / trials_stim) #
|
|
# stack_plot = ((np.abs((stack_plot) * norm)))# ** 1 / trials_stim) #
|
|
|
|
stack_plot = RAM_norm(stack_plot, trials_stim, D_derived)
|
|
# embed()
|
|
|
|
if many == True:
|
|
titles = titles + ' Ef=' + str(int(model_params.EODf.iloc[0]))
|
|
color = title_color(cell)
|
|
print(color)
|
|
# ax[a].set_title(
|
|
# titles + '\n $fr_{B}$=' + str(int(np.round(model_show.fr.iloc[0]))) + ' $fr_{S}$=' + str(
|
|
# int(np.round(model_show.fr_stim.iloc[0]))) + 'Hz\n $cv_{B}$=' + str(
|
|
# np.round(model_show.cv.iloc[0], 2)) + \
|
|
# ' $cv_{S}$=' + str(
|
|
# np.round(model_show.cv_stim.iloc[0], 2)) + '\n $D_{sig}$=' + str(
|
|
# np.round(D_derived, 5)) + ' s=' + str(
|
|
# np.round(model_show.ser_sum_stim.iloc[0], 2)), fontsize=fs, color = color)
|
|
perc = '' # 'perc'
|
|
|
|
# frame.loc[position, 'cell'] =stack_plot.cell.iloc[0] # float('nan')
|
|
# frame.loc[position, 'fr'] = model_show.fr.iloc[0]
|
|
# frame.loc[position, 'cv'] = model_show.cv.iloc[0]
|
|
diagonal, frame = get_overview_scores('', frame, stack_plot, position)
|
|
# embed()
|
|
frame = fill_frame_with_non_float_vals(frame, position, model_show)
|
|
position += 1
|
|
else:
|
|
print('len problem2')
|
|
embed()
|
|
else:
|
|
print('len problem')
|
|
embed()
|
|
|
|
for s, score in enumerate(scores):
|
|
ax[a, s].scatter(frame['cv'], frame[score])
|
|
ax[0, s].set_title(score)
|
|
ax[-1, s].set_xlabel('cv')
|
|
ax[a, 0].text(0, 1.2, titles + ' $fr_{B}$=' + str(int(np.round(model_show.fr.iloc[0]))) + ' $fr_{S}$=' + str(
|
|
int(np.round(model_show.fr_stim.iloc[0]))) + 'Hz $cv_{B}$=' + str(
|
|
np.round(model_show.cv.iloc[0], 2)) + \
|
|
' $cv_{S}$=' + str(
|
|
np.round(model_show.cv_stim.iloc[0], 2)) + ' $D_{sig}$=' + str(
|
|
np.round(D_derived, 5)) + ' s=' + str(
|
|
np.round(model_show.ser_sum_stim.iloc[0], 2)), transform=ax[a, 0].transAxes, )
|
|
|
|
a += 1
|
|
end_name = suptitles + ' a_fr=' + str(a_fr) + ' ' + ' dendride=' + str(
|
|
dendrid_name) + ' refractory period=' + str(ref_type_name) + ' adapt=' + str(
|
|
adapt_type_name) + ' ' + ' cutoff1=' + str(cut_off1) + '' ' stimulus length=' + str(
|
|
stimulus_length) + ' ' + ' power=' + str(
|
|
power) + ' ' + restrict #
|
|
end_name = cut_title(end_name, datapoints=120)
|
|
name_title = end_name
|
|
plt.suptitle(name_title, fontsize=fs, color=color) # +' file '
|
|
save_visualization(individual_tag=individual_tag, pdf=True, show=show)
|
|
|
|
|
|
def model_cells(individual_tag='', nr_clim=10, many=False, width=0.02, row='no', HZ50=True, fs=8, hs=0.39, redo=False,
|
|
nffts=['whole'],
|
|
powers=[1], cells=["2013-01-08-aa-invivo-1"], col_desired=2, var_items=['contrasts'], show=False,
|
|
contrasts=[0], noises_added=[''], fft_i='forward', fft_o='forward', spikes_unit='Hz', mV_unit='mV',
|
|
D_extraction_method=['additiv_visual_d_4_scaled'], internal_noise=['eRAM'],
|
|
external_noise=['eRAM'], level_extraction=['_RAMdadjusted'], cut_off2=300, repeats=[1000000],
|
|
receiver_contrast=[1], dendrids=[''], ref_types=[''], adapt_types=[''], c_noises=[0.1], c_signal=[0.9],
|
|
cut_offs1=[300], burst_corrs=[''], clims='all', restrict='restrict', label=r'$\frac{1}{mV^2S}$'):
|
|
# plot_style()
|
|
|
|
duration_noise = '_short',
|
|
formula = 'code' ##'formula'
|
|
# ,int(2 ** 16) int(2 ** 16), int(2 ** 15),
|
|
stimulus_length = 1 # 20#550 # 30 # 15#45#0.5#1.5 15 45 100
|
|
trials_nrs = [1] # [100, 500, 1000, 3000, 10000, 100000, 1000000] # 500
|
|
stimulus_type = '_StimulusOrig_' # ,#
|
|
# ,3]#, 3, 1, 1.5, 0.5, ] # ,1,1.5, 0.5] #[1,1.5, 0.5] # 1.5,0.5]3, 1,
|
|
variant = 'sinz'
|
|
mimick = 'no'
|
|
cell_recording_save_name = ''
|
|
trans = 1 # 5
|
|
|
|
aa = 0
|
|
for burst_corr, cell, var_type, stim_type_afe, trials_stim, stim_type_noise, power, nfft, dendrid, cut_off1, trial_nrs, c_sig, c_noise, ref_type, adapt_type, noise_added, extract, a_fr, a_fe, in it.product(
|
|
burst_corrs, cells, D_extraction_method, external_noise
|
|
, repeats, internal_noise, powers, nffts, dendrids, cut_offs1, trials_nrs, c_signal,
|
|
c_noises,
|
|
ref_types, adapt_types, noises_added, level_extraction, receiver_contrast, contrasts, ):
|
|
# print(trials_stim,stim_type_noise, power, nfft, a_fe,a_fr, dendrid, cut_off1,trial_nrs)
|
|
# print(trial_nrs, stim_type_noise, trials_stim, power, nfft, a_fe, a_fr, var_type, cut_off1,trial_nrs)
|
|
aa += 1
|
|
# embed()
|
|
if row == 'no':
|
|
col, row = find_row_col(np.arange(aa), col=col_desired) # np.arange(
|
|
else:
|
|
col = col_desired
|
|
if row == 2:
|
|
default_settings(column=2, length=7.5) # 2+2.25+2.25
|
|
elif row == 1:
|
|
default_settings(column=2, length=4)
|
|
# embed()
|
|
fig, ax = plt.subplots(row, col, sharex=True,
|
|
sharey=True) # constrained_layout=True,, figsize=(11, 5)
|
|
|
|
if row == 2:
|
|
plt.subplots_adjust(bottom=0.067, wspace=0.45, top=0.81, hspace=hs, right=0.88,
|
|
left=0.075) # , hspace = 0.6, wspace = 0.5
|
|
elif row == 1:
|
|
plt.subplots_adjust(bottom=0.1, wspace=0.45, top=0.81, hspace=hs, right=0.88,
|
|
left=0.075) # , hspace = 0.6, wspace = 0.5
|
|
else:
|
|
plt.subplots_adjust(wspace=0.8, bottom=0.067, top=0.86, hspace=hs, right=0.88,
|
|
left=0.075) # , hspace = 0.6, wspace = 0.5
|
|
|
|
if row != 1:
|
|
ax = np.concatenate(ax)
|
|
a = 0
|
|
maxs = []
|
|
mins = []
|
|
ims = []
|
|
perc05 = []
|
|
perc95 = []
|
|
iternames = [burst_corrs, D_extraction_method, external_noise,
|
|
repeats, internal_noise, powers, nffts, dendrids, cut_offs1, trials_nrs, c_signal,
|
|
c_noises,
|
|
ref_types, adapt_types, noises_added, level_extraction, receiver_contrast, contrasts, ]
|
|
|
|
nr = '2'
|
|
|
|
for all in it.product(*iternames):
|
|
|
|
burst_corr, var_type, stim_type_afe, trials_stim, stim_type_noise, power, nfft, dendrid, cut_off1, trial_nrs, c_sig, c_noise, ref_type, adapt_type, noise_added, extract, a_fr, a_fe = all
|
|
# print(trials_stim,stim_type_noise, power, nfft, a_fe,a_fr, dendrid, var_type, cut_off1,trial_nrs)
|
|
|
|
save_name = save_ram_model(stimulus_length, cut_off1, duration_noise, nfft, a_fe, formula,
|
|
stim_type_noise, mimick, variant, trials_stim, power,
|
|
stimulus_type,
|
|
cell_recording_save_name, nr=nr, fft_i=fft_i, fft_o=fft_o, Hz=spikes_unit,
|
|
mV=mV_unit, burst_corr=burst_corr, stim_type_afe=stim_type_afe, extract=extract,
|
|
noise_added=noise_added,
|
|
c_noise=c_noise, c_sig=c_sig, ref_type=ref_type, adapt_type=adapt_type,
|
|
var_type=var_type, cut_off2=cut_off2, dendrid=dendrid, a_fr=a_fr,
|
|
trials_nr=trial_nrs, trans=trans, zeros='ones')
|
|
|
|
path = save_name + '.pkl' # '../'+
|
|
|
|
model = load_model_susept(path, cells, save_name)
|
|
# embed()
|
|
# model.cv_stim_mean
|
|
# load_folder_name('calc_model')+'/calc_RAM_model-2__nfft_whole_power_1_eRAM_RAMdadjusted_additiv_visual_d_4_scaled_cNoise_0.1_cSig_0.9_cutoff1_300_cutoff2_300no_sinz_length1_TrialsStim_100000_a_fr_1__trans1s__TrialsNr_1_noiseadded__fft_o_forward_fft_i_forward_Hz_mV'
|
|
# cells_sorted = model.cell.iloc[np.argsort(model.cv_stim)]
|
|
|
|
path_cell_ref = load_folder_name(
|
|
'calc_model') + '/calc_RAM_model-2__nfft_whole_power_1_eRAM_RAMdadjusted_additiv_visual_d_4_scaled_cNoise_0.1_cSig_0.9_cutoff1_300_cutoff2_300no_sinz_length1_TrialsStim_100000_a_fr_1__trans1s__TrialsNr_1_fft_o_forward_fft_i_forward_Hz_mV.pkl'
|
|
model_sorting = load_model_susept(path_cell_ref, cells, save_name)
|
|
# ok hier sortiere ich das irgendwie und irgendwas geht dabei schief
|
|
cells_sorted = model_sorting.cell.iloc[np.argsort(model_sorting.cv)]
|
|
cv_sort = True
|
|
if cv_sort:
|
|
cells = np.array(np.unique(cells_sorted, return_index=True)[0])[
|
|
np.array(np.argsort(np.unique(cells_sorted, return_index=True)[1]))]
|
|
# embed()
|
|
# cells = ['2014-12-11-aa-invivo-1']
|
|
# cells_for_sort = model.cell
|
|
# cvs = model.cv_stim
|
|
# cells_sorted = make_cell_unique(cvs, cells_for_sort)
|
|
# embed()
|
|
|
|
for cell in cells:
|
|
|
|
if 'additiv' in var_type: # ' ser1 ' + str(np.round(model_show.ser_first_stim.iloc[0], 2))+ ' ser mean ' + str(np.round(model_show.ser_stim.iloc[0], 5))
|
|
stim_type_noise_name = stim_type_noise
|
|
else:
|
|
stim_type_noise_name = ''
|
|
if dendrid == '':
|
|
dendrid_name = 'standard'
|
|
else:
|
|
dendrid_name = dendrid
|
|
if ref_type == '':
|
|
ref_type_name = 'standard'
|
|
else:
|
|
ref_type_name = dendrid
|
|
if adapt_type == '':
|
|
adapt_type_name = 'standard'
|
|
else:
|
|
adapt_type_name = adapt_type
|
|
|
|
# embed()
|
|
|
|
# initial_function = inspect.stack()[-1][1].split('\\')[-1].split('.')[0]
|
|
|
|
# if os.path.exists(path):
|
|
# model = pd.read_pickle(path)
|
|
# embed()
|
|
|
|
if len(model) > 0:
|
|
# cells = model.cell.unique() # model = pd.read_pickle(path)
|
|
# if len(cells_orig)<1:
|
|
# cells = [cells[0]]
|
|
# else:
|
|
# cells = cells_orig
|
|
# embed()
|
|
# for c, cell in enumerate(cells):
|
|
titles = ''
|
|
suptitles = ''
|
|
stim_type_noise_name2, stim_type_afe_name = stim_type_names(a_fe, c_sig, stim_type_afe,
|
|
stim_type_noise_name)
|
|
|
|
# for var_it in var_items:
|
|
if 'cells' in var_items:
|
|
titles += cell[2:13]
|
|
else:
|
|
suptitles += cell[2:13]
|
|
if 'internal_noise' in var_items:
|
|
titles += ' intrinsic noise=' + stim_type_noise_name2
|
|
else:
|
|
suptitles += ' intrinsic noise=' + stim_type_noise_name2
|
|
if 'external_noise' in var_items:
|
|
titles += ' additive RAM=' + stim_type_afe_name
|
|
else:
|
|
suptitles += ' additive RAM=' + stim_type_afe_name
|
|
if 'repeats' in var_items:
|
|
titles += ' $N_{repeat}=$' + str(trials_stim)
|
|
else:
|
|
suptitles += ' $N_{repeat}=$' + str(trials_stim)
|
|
if 'contrasts' in var_items:
|
|
titles += ' contrast=' + str(a_fe)
|
|
else:
|
|
suptitles += ' contrast=' + str(a_fe)
|
|
if 'level_extraction' in var_items:
|
|
titles += ' Extract Level=' + str(extract)
|
|
else:
|
|
suptitles += ' Extract Level=' + str(extract)
|
|
if 'D_extraction_method' in var_items:
|
|
titles += str(var_type)
|
|
else:
|
|
suptitles += str(var_type)
|
|
|
|
if 'noises_added' in var_items:
|
|
titles += ' high freq noise=' + str(noise_added)
|
|
else:
|
|
suptitles += ' high freq noise=' + str(noise_added)
|
|
|
|
model_show = model[
|
|
(model.cell == cell)] # & (model_cell.file_name == file)& (model_cell.power == power)]
|
|
# embed()
|
|
stack_plot = change_model_from_csv_to_plots(model_show)
|
|
|
|
# embed()
|
|
ax[a].set_xlim(0, 300)
|
|
ax[a].set_ylim(0, 300)
|
|
ax[a].set_aspect('equal')
|
|
# try:
|
|
# model_cells = pd.read_csv(load_folder_name('calc_model_core')+"\models_big_fit_d_right.csv")
|
|
model_cells = resave_small_files("models_big_fit_d_right.csv")
|
|
# except:
|
|
# model_cells = resave_small_files("models_big_fit_d_right.csv", load_folder = 'calc_model_core')
|
|
|
|
model_params = model_cells[model_cells['cell'] == cell]
|
|
# embed()
|
|
# model[1,'cell']
|
|
if len(model_show) > 0:
|
|
noise_strength = model_params.noise_strength.iloc[0] # **2/2
|
|
deltat = model_params.deltat.iloc[0]
|
|
D = noise_strength # (noise_strength ** 2) / 2
|
|
D_derived = D
|
|
# try:
|
|
D_derived, var, cut_off = D_derive(model_show, save_name, c_sig, D=D, base='', nr=nr) # var_based
|
|
# except:
|
|
# embed()
|
|
# print(D_derived)
|
|
power_spektrum = ((2 * (2 * D_derived) ** 2))
|
|
norm = 1 / power_spektrum # * stimulus_length input_scaling* *300/2000*stimulus_length
|
|
# print(norm)
|
|
# embed()
|
|
# stack_plot = np.abs((stack_plot) * norm)
|
|
# print(trials_stim)
|
|
# stack_plot = (np.abs(stack_plot) / trials_stim) #
|
|
# stack_plot = ((np.abs((stack_plot) * norm)))# ** 1 / trials_stim) #
|
|
|
|
stack_plot = RAM_norm(stack_plot, trials_stim, D_derived)
|
|
# embed()
|
|
|
|
if many == True:
|
|
titles = titles + ' Ef=' + str(int(model_params.EODf.iloc[0]))
|
|
color = title_color(cell)
|
|
print(color)
|
|
ax[a].set_title(
|
|
titles + '\n $fr_{B}$=' + str(int(np.round(model_show.fr.iloc[0]))) + ' $fr_{S}$=' + str(
|
|
int(np.round(model_show.fr_stim.iloc[0]))) + 'Hz\n $cv_{B}$=' + str(
|
|
np.round(model_show.cv.iloc[0], 2)) + \
|
|
' $cv_{S}$=' + str(
|
|
np.round(model_show.cv_stim.iloc[0], 2)) + '\n $D_{sig}$=' + str(
|
|
np.round(D_derived, 5)) + ' s=' + str(
|
|
np.round(model_show.ser_sum_stim.iloc[0], 2)), fontsize=fs, color=color)
|
|
perc = '' # 'perc'
|
|
im = plt_RAM_perc(ax[a], perc, stack_plot)
|
|
|
|
ims.append(im)
|
|
maxs.append(np.max(np.array(stack_plot)))
|
|
mins.append(np.min(np.array(stack_plot)))
|
|
perc05.append(np.percentile(stack_plot, 5))
|
|
perc95.append(np.percentile(stack_plot, 95))
|
|
# print(model_show.fr.iloc[0])
|
|
plt_triangle(ax[a], model_show.fr.iloc[0], np.round(model_show.fr_stim.iloc[0]),
|
|
model_show.eod_fr.iloc[0], 300)
|
|
if HZ50:
|
|
plt_50_Hz_noise(ax[a], 300)
|
|
ax[a].set_aspect('equal')
|
|
|
|
cbar = colorbar_outside(ax[a], im, fig, add=0, width=width)
|
|
# cax = divider.append_axes('right', size='5%', pad=0.05)
|
|
# cbar = plt.colorbar(im, ax=ax[a],cax=cax,orientation='vertical')# pad=0.2, shrink=0.5, "horizontal"
|
|
# embed()
|
|
if many == False:
|
|
cbar[0].set_label(label, labelpad=100) # rotation=270,
|
|
else:
|
|
if a in np.arange(col - 1, 100, col):
|
|
cbar[0].set_label(label, labelpad=100)
|
|
|
|
if a >= row * col - col:
|
|
ax[a].set_xlabel(F1_xlabel(), labelpad=20)
|
|
ax[0].set_ylabel(F2_xlabel())
|
|
if a in np.arange(0, 10, 1) * col:
|
|
ax[a].set_ylabel(F2_xlabel())
|
|
else:
|
|
print('len problem2')
|
|
embed()
|
|
else:
|
|
print('len problem')
|
|
embed()
|
|
a += 1
|
|
# embed()
|
|
# stim_type_afe_name = stim_type_afe
|
|
# stim_type_noise_name = stim_type_noise_name
|
|
# end_name_save = ' intrinsic noise=' + stim_type_noise_name + ' additive RAM=' + stim_type_afe_name + ' ('+str(
|
|
# var_type) + ') a_fr=' + str(a_fr) + ' ' + '\n dendride=' + str(
|
|
# dendrid_name) + ' refractory period=' + str(ref_type_name) + ' adapt=' + str(
|
|
# adapt_type_name) + ' ' + ' cutoff1=' + str(cut_off1) + '\n' + '' ' stimulus length=' + str(
|
|
# stimulus_length) + ' ' + ' power=' + str(
|
|
# power) + ' ' + restrict + ' high freq noise=' + str(noise_added) #
|
|
|
|
# embed()
|
|
end_name = suptitles + ' a_fr=' + str(a_fr) + ' ' + ' dendride=' + str(
|
|
dendrid_name) + ' refractory period=' + str(ref_type_name) + ' adapt=' + str(
|
|
adapt_type_name) + ' ' + ' cutoff1=' + str(cut_off1) + '' ' stimulus length=' + str(
|
|
stimulus_length) + ' ' + ' power=' + str(
|
|
power) + ' ' + restrict #
|
|
end_name = cut_title(end_name, datapoints=120)
|
|
name_title = end_name
|
|
plt.suptitle(name_title) # +' file '
|
|
|
|
set_clim_shared(clims, ims, maxs, mins, nr_clim, perc05, perc95)
|
|
|
|
# else:
|
|
# else:
|
|
# plt.subplots_adjust(top=0.7, hspace=0.57, right=0.97, left=0.05) # , hspace = 0.6, wspace = 0.5
|
|
|
|
# name_save = cell + end_name_save.replace(':', '')
|
|
# individual_tag = name_save.replace(' ', '')
|
|
# individual_tag = individual_tag.replace('\n', '')
|
|
|
|
save_visualization(individual_tag=individual_tag, pdf=True, show=show)
|
|
|
|
# save_all(0, individual_tag, show, '')
|
|
|
|
|
|
def plt_punit(amp_desired=[0.5, 1, 5], xlim=[], cell_class=' Ampullary', cells_plot2=[], show=False, annotate=False):
|
|
plot_style()
|
|
default_settings(column=2, width=12, length=8) #ts=10, fs=10, ls=10,
|
|
save_names = ['noise_data8_nfft1sec_original__LocalEOD_CutatBeginning_0.05_s_NeurDelay_0.005_s_burst_corr']
|
|
|
|
# 'noise_data8_nfft1sec_original__LocalEOD_CutatBeginning_0.05_s_NeurDelay_0.005_s',#__burstIndividual_
|
|
# ]
|
|
save_names = ['noise_data8_nfft1sec_original__LocalEOD_CutatBeginning_0.05_s_NeurDelay_0.005_s__burstIndividual_']
|
|
save_names = ['noise_data8_nfft1sec_original__LocalEOD_CutatBeginning_0.05_s_NeurDelay_0.005_s_burst_corr']
|
|
|
|
amps_desired = amp_desired
|
|
# amps_desired, cell_type_type, cells_plot, frame, cell_types = load_isis(save_names, amps_desired = amp_desired, cell_class = cell_class)
|
|
cell_type_type = 'cell_type_reclassified'
|
|
frame = load_cv_base_frame(cells_plot2, cell_type_type=cell_type_type)
|
|
|
|
# if len(cells_plot2)>0:
|
|
cells_plot = cells_plot2
|
|
# '2012-05-15-ac-invivo-1','2010-06-21-ac-invivo-1','2010-06-18-ah-invivo-1'
|
|
# elif len(cells_plot)>6:
|
|
# cells_plot = cells_plot[0:6]
|
|
# cells_plot = cells_plot[0:6]
|
|
|
|
# embed()
|
|
################################################
|
|
# fig = plt.figure(figsize=(11.5, 6))
|
|
# das entscheided ob wir ein burst pic haben werden
|
|
|
|
grid = gridspec.GridSpec(2, 1, wspace=0.1, height_ratios=[1, 4.5], hspace=0.25, top=0.96, left=0.095, bottom=0.07,
|
|
right=0.92)
|
|
# grid = gridspec.GridSpec(1, 1, wspace=0.45, hspace=0.35, top=0.87, left=0.075, right=0.95)
|
|
# height_ratios=[2, 4],
|
|
###############################################
|
|
# plot all scatter
|
|
colors = {'unkown': 'grey',
|
|
' P-unit': 'blue',
|
|
' Ampullary': 'green',
|
|
'nan': 'grey',
|
|
' T-unit': 'purple',
|
|
' E-cell': 'red',
|
|
' Pyramidal': 'darkred',
|
|
' I-cell': 'pink',
|
|
' E-cell superficial': 'orange',
|
|
' Ovoid': 'cyan'}
|
|
|
|
grid2 = gridspec.GridSpecFromSubplotSpec(1, 4, grid[0], wspace=0.5,
|
|
hspace=0.2)
|
|
# embed()
|
|
cell_types = [' P-unit', ' Ampullary']
|
|
ax0, ax1, ax2 = plt_scatter_three2(grid2, frame, cell_type_type, annotate, colors)
|
|
|
|
ax3 = plt.subplot(grid2[3])
|
|
# ax4 = plt.subplot(grid2[4])
|
|
axs = [ax3]
|
|
burst_name = ['', ' burst corr ']
|
|
save_names1 = [save_names[0]]
|
|
# todo: um das mit dem burst cv aus der baseline zu machen muss man das auch aus dem baseline file laden
|
|
for s, save_name in enumerate(save_names1):
|
|
load_name = load_folder_name('calc_RAM') + '/' + save_name + '.csv'
|
|
|
|
# embed()
|
|
|
|
# stack_cell = load_data(load_name + '_' + cell + '.pkl', load_name + '_' + cell)
|
|
|
|
# embed()
|
|
sorts = ['cv', 'cv_stim']
|
|
sorts_fr = [['fr', 'fr_stim']] # ,['vs','vs'],
|
|
add = ''
|
|
for c, cell_type_it in enumerate(cell_types):
|
|
frame_g = base_to_stim(load_name, frame, cell_type_type, cell_type_it)
|
|
# frame_g_stim = frame_all[(frame_all['cell'] == cell)].iloc[0]
|
|
# embed()
|
|
# todo: diese CVs sind noch nicht ganz klar
|
|
axs[s].scatter(np.array(frame_g['cv']), np.array(frame_g['cv_stim']), alpha=0.5, s=7,
|
|
color=colors[str(cell_type_it)])
|
|
# exclude = np.isnan(frame_g['cv' + add]) | np.isnan(frame_g['fr' + add])
|
|
# frame_g_ex = frame_g[~exclude]
|
|
axs[s].set_xlim(0, 1.5)
|
|
axs[s].set_ylim(0, 1.5)
|
|
axs[s].set_ylabel('CV stim ' + burst_name[s])
|
|
axs[s].set_xlabel('CV ' + burst_name[s])
|
|
|
|
# embed()
|
|
#####################################################################
|
|
# now iterate over cells
|
|
# embed()
|
|
if len(amps_desired) + 1 == 4:
|
|
wr = [0.5, 0, 1, 1, 1]
|
|
elif len(amps_desired) + 1 == 3:
|
|
wr = [0.5, 0, 1, 1]
|
|
elif len(amps_desired) + 1 == 5:
|
|
wr = [0.5, 0, 1, 1, 1, 1]
|
|
# embed()
|
|
grid1 = gridspec.GridSpecFromSubplotSpec(len(cells_plot), len(amps_desired) + 2, grid[1], hspace=0.17,
|
|
wspace=0.35, width_ratios=wr) # ,
|
|
# embed()
|
|
plt_cellbody_punitsingle(grid1, ax0, ax1, ax2, frame, colors, amps_desired, save_names, cells_plot, cell_type_type,
|
|
ax3=ax3, xlim=xlim, plus=2, burst_corr='_burst_corr_individual')
|
|
|
|
# embed()
|
|
save_visualization(pdf=True)
|
|
# save_all(0, cell+save_name+cell_sorted, show, '')
|
|
show_func(show=show)
|
|
|
|
|
|
def plt_sqaure_isf2(fig, grid1, ax0, ax1, ax2, b, cell, frame, colors, amps_desired, save_names, cells_plot,
|
|
cell_type_type,
|
|
xlim=[0, 13], hist_plot=True, colorbar=False, labeloff=True, predefined_amps2=False, norm=False):
|
|
print(cell)
|
|
|
|
frame_cell = frame[(frame['cell'] == cell)]
|
|
frame_cell = unify_cell_names(frame_cell, cell_type=cell_type_type)
|
|
cell_type = frame_cell[cell_type_type].iloc[0]
|
|
spikes = frame_cell.spikes.iloc[0]
|
|
spikes_all = []
|
|
hists = []
|
|
frs_calc = []
|
|
fr = frame_cell.fr.iloc[0]
|
|
cv = frame_cell.cv.iloc[0]
|
|
vs = frame_cell.vs.iloc[0]
|
|
eod_fr = frame_cell.EODf.iloc[0]
|
|
# spikes_all, hists, frs_calc, spikes_cont = load_spikes(frs_calc, spikes, eod_fr, hists, spikes_all)
|
|
# spikes_cont heißt dass die spikes nans sind oder leer sind, das heißt da ist gar nichts, auch keine scatter, das sind die weißen bilder die brauchen wir nicht
|
|
|
|
# das ist der title fals der square nicht plottet
|
|
plt.suptitle(cell + ' EODf ' + str(np.round(eod_fr)) + ' Hz ' + ' % ' +
|
|
' Base: cv ' + str(np.round(cv, 2)) + ' fr ' + str(
|
|
np.round(fr)) + ' Hz',
|
|
fontsize=11, ) # cell[0:13] + color=color+ cell_type
|
|
|
|
load_name = load_folder_name('calc_RAM') + '/' + save_names[0] + '_' + cell
|
|
im = []
|
|
axs = []
|
|
if os.path.exists(load_name + '.pkl'):
|
|
im, axs = plt_stack_single(cell_type, load_name, b, cells_plot, norm, cell, amps_desired, labeloff, grid1,
|
|
eod_fr, save_names, predefined_amps2, colorbar=colorbar)
|
|
################################
|
|
# do the scatter of these cells
|
|
add = ['', '_burst_corr', ]
|
|
if ax0 != []:
|
|
ax0.scatter(frame_cell['cv' + add[0]], frame_cell['fr' + add[0]], zorder=2, alpha=1,
|
|
label=cell_type, s=15,
|
|
color=colors[str(cell_type)], facecolor='white')
|
|
|
|
if ax1 != []:
|
|
ax1.scatter(frame_cell['cv' + add[0]], frame_cell['vs' + add[0]], zorder=2, alpha=1,
|
|
label=cell_type, s=15,
|
|
color=colors[str(cell_type)], facecolor='white')
|
|
if ax2 != []:
|
|
ax2.scatter(frame_cell['cv' + add[1]], frame_cell['fr' + add[1]], zorder=2, alpha=1,
|
|
label=cell_type, s=15,
|
|
color=colors[str(cell_type)], facecolor='white')
|
|
return im, axs
|
|
|
|
|
|
def hist_part2(axi, cell_type, burst_corr, colors, cell, spikes, eod_fr, ):
|
|
spikes_all, hists, frs_calc, spikes_cont = load_spikes(spikes, eod_fr)
|
|
|
|
alpha = 1
|
|
|
|
lim_here = []
|
|
if 'burst' in burst_corr:
|
|
lim_here = find_lim_here(cell, burst_corr)
|
|
print(lim_here)
|
|
# if lim_here
|
|
if np.min(np.concatenate(hists)) < lim_here:
|
|
hists2, spikes_ex, frs_calc2 = correct_burstiness(hists, spikes_all,
|
|
[eod_fr] * len(spikes_all),
|
|
[eod_fr] * len(spikes_all), lim=lim_here,
|
|
burst_corr=burst_corr)
|
|
|
|
spikes_both = [spikes_all, spikes_ex]
|
|
hists_both = [hists, hists2]
|
|
frs_calc_both = [frs_calc, frs_calc2]
|
|
else:
|
|
spikes_both = [spikes_all]
|
|
hists_both = [hists]
|
|
frs_calc_both = [frs_calc]
|
|
################################
|
|
else:
|
|
spikes_both = [spikes_all]
|
|
hists_both = [hists]
|
|
frs_calc_both = [frs_calc]
|
|
|
|
add = ['', '_burst_corr', ]
|
|
colors_hist = ['grey', colors[str(cell_type)]]
|
|
if len(hists_both) > 1:
|
|
colors_hist = ['grey', colors[str(cell_type)]]
|
|
else:
|
|
colors_hist = [colors[str(cell_type)]]
|
|
for gg in range(len(hists_both)):
|
|
hists_here = hists_both[gg]
|
|
# embed()
|
|
|
|
plt_hist2(axi, hists_here, cell, colors_hist, gg, alpha)
|
|
|
|
|
|
def vals_modulation():
|
|
mod_p_vals = np.linspace(0, 150, 5)
|
|
mod_a_vals = np.linspace(0, 150, 5)
|
|
mod_var_p_vals = np.linspace(0, 150, 5)
|
|
mod_var_a_vals = np.linspace(0, 70, 5)
|
|
|
|
|
|
def plt_power3(spikes_all_here, colors, cell_type, axp, color='blue', only_one=False):
|
|
spikes_mat = [[]] * len(spikes_all_here)
|
|
sampling_calc = 40000
|
|
nfft = 2 ** 14
|
|
p_array = [[]] * len(spikes_all_here)
|
|
f_array = []
|
|
alpha = 1
|
|
if only_one:
|
|
one = [spikes_all_here[0]]
|
|
else:
|
|
one = spikes_all_here
|
|
for s, sp in enumerate(one):
|
|
if len(sp) > 0:
|
|
try:
|
|
spikes_mat[s] = cr_spikes_mat(np.array(sp) / 1000, sampling_rate=sampling_calc,
|
|
length=int(sampling_calc * np.array(sp[-1]) / 1000))
|
|
except:
|
|
print('spikes_mat[s] =')
|
|
embed()
|
|
p_array[s], f_array = ml.psd(spikes_mat[s] - np.mean(spikes_mat[s]), Fs=sampling_calc, NFFT=nfft,
|
|
noverlap=nfft // 2)
|
|
axp.plot(f_array, p_array[s], color=color) # alpha=float(alpha - 0.05 * s) color=colors[str(cell_type)],
|
|
# axp.set_title('fr saved ' + str(np.round(fr)) + ' fr calc ' + str(np.round(frs_calc_both[g][s])))
|
|
# embed()
|
|
# plt_peaks(axp, p_array[s], [fr], f_array,alpha = 0.5, s=25, fr_color = 'red')
|
|
# plt_peaks(axp, p_array[s], [frs_calc[s]], f_array, alpha = 0.5, s=25, fr_color = 'orange')
|
|
|
|
axp.set_xlim(0, 1000)
|
|
axp.set_xlabel('Hz')
|
|
axp.set_ylabel('Hz')
|
|
return p_array, f_array
|
|
|
|
|
|
def plt_hist2(axi, hists_here, cell, colors_hist, gg, alpha):
|
|
if len(hists_here) > 0:
|
|
h = np.concatenate(hists_here)
|
|
# for hh, h in enumerate(hists_here):
|
|
# if not (hh == 0) & (cell == '2021-08-03-aa-invivo-1'):
|
|
axi.hist(h, bins=100, color=colors_hist[gg],
|
|
label='CV ' + str(np.round(np.std(h) / np.mean(h), 3)),
|
|
alpha=0.7) # float(alpha - 0.05 * (hh))
|
|
|
|
|
|
def plt_stack_single(cell_type, load_name, b, cells_plot, norm, cell, amps_desired, labeloff, grid1, eod_fr, save_names,
|
|
predefined_amps2, colorbar=True):
|
|
im = []
|
|
axs = []
|
|
stack = pd.read_pickle(load_name + '.pkl')
|
|
# stack_file['amp'].unique()
|
|
if 'p-unit' in cell_type: # == ['p-unit', ' P-unit']:
|
|
file_names_exclude = ['InputArr_350to400hz_30',
|
|
'InputArr_250to300hz_30',
|
|
'InputArr_150to200hz_30',
|
|
'InputArr_50to100hz_30',
|
|
'InputArr_50hz_30',
|
|
|
|
'gwn50Hz50s0.3',
|
|
'gwn50Hz10s0.3',
|
|
'gwn50Hz10.3',
|
|
'gwn50Hz10s0.3short',
|
|
|
|
'gwn25Hz10s0.3',
|
|
|
|
'FileStimulus-file-gaussian50.0',
|
|
'FileStimulus-file-gaussian25.0',
|
|
] #
|
|
else:
|
|
file_names_exclude = ['InputArr_350to400hz_30',
|
|
'InputArr_250to300hz_30',
|
|
'InputArr_150to200hz_30',
|
|
'InputArr_50to100hz_30',
|
|
'InputArr_50hz_30',
|
|
|
|
'blwn125Hz10s0.3',
|
|
'gwn50Hz10s0.3',
|
|
'FileStimulus-file-gaussian50.0',
|
|
'FileStimulus-file-gaussian25.0', 'gwn25Hz10s0.3', 'gwn50Hz10.3',
|
|
'gwn50Hz10s0.3short',
|
|
'gwn50Hz50s0.3', 'gwn25Hz10s0.3', ] #
|
|
|
|
files = stack['file_name'].unique()
|
|
fexclude = False
|
|
if fexclude:
|
|
if len(files) > 1:
|
|
stack = stack[~stack['file_name'].isin(file_names_exclude)]
|
|
files = stack['file_name'].unique()
|
|
amps = stack['amp'].unique()
|
|
|
|
row, col = find_row_col(np.arange(len(amps) * len(files)))
|
|
|
|
predefined_amp = True
|
|
amps_defined = True
|
|
if predefined_amps2:
|
|
for a, amp in enumerate(amps):
|
|
if amp not in amps_desired:
|
|
predefined_amp = False
|
|
if predefined_amp:
|
|
col = 4
|
|
amps_defined = amps_desired
|
|
else:
|
|
amps_defined = amps
|
|
col = len(amps)
|
|
amps_defined = [np.min(amps)]
|
|
# for f, file in enumerate(files):
|
|
stack_file = stack[stack['file_name'] == files[0]]
|
|
amps = stack_file['amp'].unique()
|
|
# embed()
|
|
for a, amp in enumerate(amps_defined):
|
|
|
|
if amp in np.array(stack_file['amp']):
|
|
stack_amp = stack_file[stack_file['amp'] == amp]
|
|
lengths = stack_file['stimulus_length'].unique()
|
|
length = np.max(lengths)
|
|
stack_final = stack_amp[stack_amp['stimulus_length'] == length]
|
|
trial_nr_double = stack_final.trial_nr.unique()
|
|
|
|
# ok das ist glaube ich ein Anzeichen von einem Fehler
|
|
if len(trial_nr_double) > 1:
|
|
print('trial_nr_double')
|
|
# embed()
|
|
# ich hatte mal einen save fehler deswegen habe ich manche doppelt also einfach das letzte nehmen nehme ich an
|
|
|
|
# embed()
|
|
try:
|
|
stack_final1 = stack_final[stack_final.trial_nr == np.max(trial_nr_double)]
|
|
except:
|
|
print('stack_final1 problem')
|
|
embed()
|
|
# try:
|
|
axs = plt.subplot(grid1[2])
|
|
# except:
|
|
# print('grid problem')
|
|
# embed()
|
|
|
|
osf = stack_final1.osf
|
|
isf = stack_final1.isf
|
|
|
|
im, min_lim, max_lim = square_func([axs], stack_final1, isf=isf, osf=osf, norm=norm)
|
|
plt.colorbar(im, ax=axs)
|
|
# cbar = colorbar_outside_right(axs, fig, im, add=0)
|
|
ax_pos = np.array(axs.get_position()) # [[xmin, ymin], [xmax, ymax]].
|
|
# embed()
|
|
xmin = ax_pos[0][0]
|
|
ymin = ax_pos[0][1]
|
|
xmax = ax_pos[1][0]
|
|
ymax = ax_pos[1][1]
|
|
# cbar.set_label(nonlin_title(), rotation=90, labelpad=10)
|
|
# cbar = colobar_right(fig, axs, nonlin_title())
|
|
|
|
|
|
fr = stack_final1.fr.unique()[0]
|
|
snippets = stack_final1['snippets'].unique()[0]
|
|
fr1 = np.unique(stack_final1.fr)
|
|
cv = stack_final1.cv.unique()[0]
|
|
|
|
ser = stack_final1.ser.unique()[0]
|
|
cv_stim = stack_final1.cv_stim.unique()[0]
|
|
fr_stim = stack_final1.fr_stim.unique()[0]
|
|
ser_stim = stack_final1.ser_stim.unique()[0]
|
|
plt.suptitle(cell + ' EODf ' + str(np.round(eod_fr)) + ' Hz ' + '' + 'S.Nr ' + str(
|
|
snippets) + ' % ' +
|
|
' Base: cv ' + str(np.round(cv, 2)) + ' fr ' + str(
|
|
np.round(fr)) + ' Hz' + ' ser ' + str(np.round(ser))
|
|
+ ' Stim: cv ' + str(np.round(cv_stim, 2)) + ' fr ' + str(
|
|
np.round(fr_stim)) + ' Hz' + ' ser ' + str(np.round(ser_stim)) + ' length ' + str(length)
|
|
,
|
|
fontsize=11, ) # cell[0:13] + color=color+ cell_type
|
|
|
|
eod_fr_half_color = 'purple'
|
|
power_noise_color = 'blue'
|
|
fr_color = 'red'
|
|
eod_fr_color = 'magenta'
|
|
fr_stim_color = 'darkred'
|
|
if labeloff:
|
|
if b != len(cells_plot) - 1:
|
|
remove_xticks(axs)
|
|
axs.set_xlabel('')
|
|
|
|
# plot the input above
|
|
|
|
axs2 = plt.subplot(grid1[1])
|
|
ax_pos2 = np.array(axs2.get_position()) # das würde auch gehen:.y0,.y1,.x0,.x1,.width
|
|
axs2.set_position([ax_pos[0][0], ax_pos2[0][1], ax_pos[1][0] - ax_pos[0][0], ax_pos2[1][1] - ax_pos2[0][1]])
|
|
|
|
# ax.set_position(pos2
|
|
# xmin
|
|
# add = np.mean(isf)
|
|
clip_on = True
|
|
freqs = [fr, fr * 2, fr_stim, fr_stim * 2, eod_fr, eod_fr * 2, eod_fr / 2]
|
|
colors_f = [fr_color, fr_color, fr_stim_color, fr_stim_color, eod_fr_color, eod_fr_color,
|
|
eod_fr_half_color]
|
|
plt_isf_ps_red(eod_fr_color, stack_final1, isf, 0, axs2, freqs=freqs, colors=colors_f, clip_on=clip_on)
|
|
axs2.set_xlim(min_lim, max_lim)
|
|
remove_xticks(axs2)
|
|
|
|
# embed()
|
|
# plot the output below
|
|
axs1 = plt.subplot(grid1[0])
|
|
names = cut_title(save_names[0], datapoints=30)
|
|
if '2.5' in save_names[0]:
|
|
burst_name = '2.5 EOD burst corr'
|
|
elif 'Individual' in save_names[0]:
|
|
burst_name = 'individual burst corr'
|
|
elif 'burst' in save_names[0]:
|
|
burst_name = '1.5 EOD burst corr'
|
|
else:
|
|
burst_name = ''
|
|
axs1.set_title(' std ' + str(amp) + ' ' + burst_name) # + files[0] + '\n' + names)
|
|
remove_xticks(axs1)
|
|
ax_pos2 = np.array(axs1.get_position()) # das würde auch gehen:.y0,.y1,.x0,.x1,.width
|
|
axs1.set_position([ax_pos[0][0], ax_pos2[0][1], ax_pos[1][0] - ax_pos[0][0],
|
|
ax_pos2[1][1] - ax_pos2[0][1]])
|
|
|
|
plt_isf_ps_red(eod_fr_color, stack_final1, osf, 0, axs1, freqs=freqs, colors=colors_f, clip_on=clip_on)
|
|
axs1.set_xlim(min_lim, max_lim)
|
|
return im, axs
|
|
|
|
|
|
def fft_matrix(deltat, osf, f_range, isf, norm='', quadrant=''): # stimulus,
|
|
|
|
# frequencies xaxis
|
|
f_mat1 = [f_range] * len(f_range)
|
|
# freqeuncies yxis
|
|
f_mat2 = np.transpose(f_mat1)
|
|
|
|
# sum frequency
|
|
f_idx_sum = f_mat1 + f_mat2
|
|
# diff frequency
|
|
f_idx_diff = f_mat1 - f_mat2
|
|
|
|
rate_matrix1, rate_matrix2 = find_isf_matrices(f_idx_sum, isf[f_range])
|
|
|
|
# rate_matrix11 = isf[f_range]
|
|
# rate_matrix11 = [rate_matrix11] * len(f_idx_sum)
|
|
# rate_matrix22 = np.transpose(rate_matrix11)
|
|
|
|
time_extent = len(f_idx_sum) * deltat
|
|
scale = find_norm_susept(f_idx_sum, isf[f_range])
|
|
|
|
# scale = time_extent / (2 * np.array(power_isf_1 * power_isf_2))
|
|
|
|
osf_mat = [osf] * len(f_range) # [f_range+f_range]
|
|
rate_matrix = [[]] * len(f_idx_sum)
|
|
cross = [[]] * len(f_idx_sum)
|
|
dot1 = [[]] * len(f_idx_sum)
|
|
dot2 = [[]] * len(f_idx_sum)
|
|
dot1 = [] # [[]] * len(f_idx_sum)
|
|
dot2 = [] # [[]] * len(f_idx_sum)
|
|
osf_mat = [[]] * len(f_idx_sum)
|
|
suscept_nonlin = [[]] * len(f_idx_sum)
|
|
abs_result = [[]] * len(f_idx_sum)
|
|
complex = [[]] * len(f_idx_sum)
|
|
dot11 = []
|
|
dot22 = []
|
|
|
|
test = False
|
|
if test:
|
|
c = isf[f_range][0]
|
|
a = np.abs(c) ** 2
|
|
b = c ** 2
|
|
# abs einer complexen Zahl berechnet den pythagoras aufgezogen in dem Raum
|
|
np.abs(c)
|
|
np.sqrt(np.real(c) ** 2 + np.imag(c) ** 2)
|
|
|
|
for ff in range(len(f_idx_sum)):
|
|
rate_matrix[ff] = osf[f_idx_sum[ff]]
|
|
|
|
if quadrant == '':
|
|
if norm != '':
|
|
cross[ff] = osf[f_idx_sum[ff]] * rate_matrix1[ff] * rate_matrix2[ff] * scale[ff]
|
|
else:
|
|
cross[ff] = osf[f_idx_sum[ff]] * rate_matrix1[ff] * rate_matrix2[ff] # *scale
|
|
else:
|
|
# scale_nonlin * (std::conj(osf[i - j]) * isf[i] * std::conj(isf[j])
|
|
# print('did the quadrant thing')
|
|
if norm != '':
|
|
cross[ff] = np.conj(osf[np.abs(f_idx_diff[ff])]) * np.conj(rate_matrix1[ff]) * rate_matrix2[ff] * scale[
|
|
ff]
|
|
else:
|
|
cross[ff] = np.conj(osf[np.abs(f_idx_diff[ff])]) * np.conj(rate_matrix1[ff]) * rate_matrix2[
|
|
ff] # *scale
|
|
# hier mache ich quasi die conjunktion des zweiten Arguments weg
|
|
|
|
# todo: hier das norm einbauen!
|
|
# dot1[ff] = np.conj(np.conj(osf[f_idx_sum[ff]])* rate_matrix1[ff])* rate_matrix2[ff]
|
|
# dot2[ff] = np.conj(np.conj(osf[f_idx_sum[ff]]) * rate_matrix11[ff])*rate_matrix22[ff]
|
|
# embed()
|
|
# dot2.append(osf[f_idx_sum[f][fff]]*rate_matrix1[f][fff]*rate_matrix2[f][fff])
|
|
|
|
# abs_result[ff] = np.abs(osf[f_idx_sum[ff]]) * np.abs(rate_matrix1[ff]) * np.abs(rate_matrix2[ff]) # *scale
|
|
|
|
suscept_nonlin[ff] = osf[f_idx_sum[ff]] * rate_matrix1[ff] * rate_matrix2[ff] * scale[ff]
|
|
test = False
|
|
if test:
|
|
fig, ax = plt.subplots(1, 3)
|
|
ax[0].pcolormesh(np.abs(cross))
|
|
ax[1].pcolormesh(abs_result)
|
|
ax[2].pcolormesh(np.abs(osf_mat))
|
|
plt.show()
|
|
# np.array(dot1), np.array(dot2), , np.array(suscept_nonlin), np.array(rate_matrix), np.array(rate_matrix1), np.array(rate_matrix2), np.array(scale)
|
|
|
|
return np.array(f_mat1), np.array(f_mat2), np.array(f_idx_sum), np.array(cross)
|
|
|
|
|
|
def exclude_nans_for_corr(file_here, var_item, x=[], y=[], max_x = None, cv_name='cv_base', score='perc99/med'):
|
|
# embed()
|
|
if len(x) == 0:
|
|
x = file_here[cv_name]
|
|
if len(y) == 0:
|
|
y = file_here[score]
|
|
c_axis = file_here[var_item]
|
|
# c_axis = c_axis # [x_axis_cv < 2]
|
|
# try:
|
|
exclude_here = exclude_nans(x, y)
|
|
# except :
|
|
# print('except thing')
|
|
# embed()
|
|
x = x[~exclude_here]
|
|
y = y[~exclude_here]
|
|
c_axis = c_axis[~exclude_here]
|
|
|
|
if max_x:
|
|
#embed()
|
|
if np.sum(x > max_x) > 0:
|
|
y = y[x < max_x]
|
|
try:
|
|
c_axis = c_axis.loc[x < max_x]
|
|
except:
|
|
print('c something')
|
|
embed()
|
|
x = x[x < max_x]
|
|
|
|
|
|
return c_axis, x, y, exclude_here
|
|
|
|
|
|
def exclude_nans(x, y):
|
|
exclude_here = (np.isnan(x)) | (np.isnan(y)) | (np.isinf(x)) | (np.isinf(y))
|
|
return exclude_here
|
|
|
|
|
|
def fav_calc_RAM_cell_sorting(save_names_load=[
|
|
'calc_RAM_overview-_simplified_noise_data9_nfft1sec_original__StimPreSaved4__mean5__CutatBeginning_0.05_s_NeurDelay_0.005_s'],
|
|
base_sorted='base_ram_sorted', sorted_cv='cv_base', redo=False, redo_base=False,
|
|
cell_types_sort=[' P-unit', ' Ampullary', ' P-unit_problem', 'unkown', ' unknown_problem',
|
|
' Ampullary_problem', 'unkown', ' Pyramidal',
|
|
' T-unit']):
|
|
cell_sorted = 'cv_cell_sorted' # ''#'cv_cell_sorted'#''#'cell_sorted'
|
|
if 'cell_sorted' in cell_sorted:
|
|
cell_type_type = 'cell_type_reclassified'
|
|
|
|
# frame_load = pd.read_csv(load_folder_name('calc_RAM') + '/calc_RAM_overview-' + save_name + '.csv', index_col=0)
|
|
# sorted_cv = 'cv_stim_w_burstcorr' # base_sorted = 'stim_sorted'
|
|
# base_sorted = 'base_sorted' # 'stim_sorted'
|
|
|
|
# _simplified_
|
|
# 'base_ram_sorted_only'
|
|
for s, save in enumerate(save_names_load):
|
|
if 'calc_RAM_overview-_simplified_' not in save:
|
|
save_names_load[s] = 'calc_RAM_overview-_simplified_' + save
|
|
data_names, frame, cell_types = sort_cells_base(small_cvs_first=True,
|
|
name='calc_base_data-base_frame_overview.pkl',
|
|
cell_sorted=cell_sorted, cell_type_type=cell_type_type,
|
|
save_names=save_names_load, sorted_cv=sorted_cv,
|
|
base_sorted=base_sorted, cell_type_sort=cell_types_sort,
|
|
gwn_filtered=True, redo=redo, redo_base=redo_base)
|
|
return data_names
|
|
|
|
|
|
def version_final():
|
|
save_name = 'noise_data12_nfft0.5sec_original__StimPreSaved4__first1_order_'
|
|
return save_name
|
|
|
|
|
|
def find_stimuli(b):
|
|
names = []
|
|
for t in b.tags:
|
|
if 'filestimulus' in t.name.lower():
|
|
names.append(t.name)
|
|
return names
|
|
|
|
|
|
def pearson_label(corr, p_value, y, n=True):
|
|
if n:
|
|
n_add = ', $n=%s$' %(len(y))
|
|
else:
|
|
n_add = ''
|
|
if p_value < 0.001:
|
|
p_name = ', $p<0.001$'#***
|
|
elif p_value < 0.01:
|
|
p_name = ', $p<0.01$'#**
|
|
elif p_value < 0.05:
|
|
# embed()
|
|
p_name = ', $p=%s$' %(np.round(p_value, 2))# + '*'
|
|
else:
|
|
p_name = ', $p=%s$' %(np.round(p_value, 2))
|
|
if np.abs(corr) < 0.01:
|
|
add = np.round(
|
|
corr, 3)
|
|
else:
|
|
add = np.round(
|
|
corr, 2)
|
|
#embed()
|
|
return ' $r=%s$' %add + p_name + n_add
|
|
|
|
|
|
def chose_class_cells(cell_types_sort=[' P-unit_problem', 'unkown', ' unknown_problem', ' Ampullary_problem', 'unkown',
|
|
' Pyramidal', ' T-unit', ' P-unit',
|
|
' Ampullary', ]):
|
|
cell_type_type = 'cell_type_reclassified'
|
|
cell_sorted = 'cv_cell_sorted' # ''#'cv_cell_sorted'#''#'cell_sorted'
|
|
if 'cell_sorted' in cell_sorted:
|
|
# cell_types_sort = [' P-unit', ' Ampullary', ' Pyramidal', 'unkown', ' T-unit']
|
|
# [] # , ' Pyramidal', 'unkown', ' T-unit']
|
|
|
|
# frame_load = pd.read_csv(load_folder_name('calc_RAM') + '/calc_RAM_overview-' + save_name + '.csv', index_col=0)
|
|
save_names_load = [
|
|
'calc_RAM_overview-_simplified_noise_data9_nfft1sec_original__StimPreSaved4__mean5__CutatBeginning_0.05_s_NeurDelay_0.005_s'] # noise_data9_nfft1sec_original__StimPreSaved4__mean5__CutatBeginning_0.05_s_NeurDelay_0.005_s
|
|
sorted_cv = 'cv_stim_w_burstcorr' # base_sorted = 'stim_sorted'
|
|
base_sorted = 'stim_sorted'
|
|
sorted_cv = 'cv_base'
|
|
cells, frame, cell_types = sort_cells_base(small_cvs_first=True, cell_sorted=cell_sorted,
|
|
cell_type_type=cell_type_type,
|
|
save_names=save_names_load, sorted_cv=sorted_cv,
|
|
base_sorted=base_sorted, cell_type_sort=cell_types_sort,
|
|
gwn_filtered=True)
|
|
else:
|
|
frame = load_RAM_frame(cell_type_type)
|
|
cell_types = frame[cell_type_type].unique()
|
|
|
|
# embed()
|
|
|
|
cells = ['2019-11-13-ab-invivo-1']
|
|
cells = ['2012-02-06-ao-invivo-1']
|
|
cells = ['2022-01-06-ab-invivo-1']
|
|
cells = ['2012-03-09-af-invivo-1']
|
|
# tood:hier späer einfach alle Zellen plotten
|
|
# example cell
|
|
cells = [frame[(frame.gwn == True) & (frame.cell_type_reclassified == ' P-unit')].cell.unique()[0]]
|
|
|
|
cells_all = False
|
|
# if cells_all:
|
|
cells, data_dir = find_all_dir_cells()
|
|
cells = np.sort(cells)[::-1]
|
|
stop_cell = '2018-03-28-ab-invivo-1'
|
|
|
|
# wir brauchen eine Zelle die das nix hat (neue Zelle) und eine wo wir die RAM Datei kopiert haben
|
|
|
|
# else:
|
|
#
|
|
return cell_sorted, cell_type_type, cell_types, cells, frame
|
|
|
|
|
|
def kernel_scatter(axy, cell_types, axx, axs, ax_j, c, cell_type_here, colors, cv_n, cv_name, frame_file, grid, max_val,
|
|
score, xmin='no', alpha = 1, ymin='no', n = True, log=True):
|
|
###########################
|
|
# version comparison with all cells, and no modulation
|
|
x_axis = plot_kernels_on_side(axx, axy, cell_type_here, colors[str(cell_type_here)], cv_name, frame_file, score,
|
|
xmin=xmin, ymin=ymin)
|
|
|
|
# todo: hier noch das andere seiteliche histogram machen
|
|
# if 'Ampullary' in cell_type_here:
|
|
# embed()
|
|
|
|
x_axis = plt_overview_scatter(axs, c, cell_type_here, colors, cv_name, frame_file,
|
|
score, alpha = alpha, n = n, color_text=colors[str(cell_type_here)])
|
|
if log:
|
|
axy.set_yscale('log')
|
|
axs.set_yscale('log')
|
|
# remove_yticks(axl)
|
|
axy.set_yticks_blank()
|
|
axy.minorticks_off()
|
|
|
|
#axs.get_shared_y_axes().join(*[axs, axy])
|
|
#axx.get_shared_x_axes().join(*[axs, axx])
|
|
join_x([axs, axx])
|
|
join_y([axy,axs])
|
|
#axy.set_ylim(0,6)
|
|
#embed()
|
|
if log:
|
|
make_log_ticks([axy, axs])
|
|
remove_yticks(axy)
|
|
axy.minorticks_off()
|
|
return axs, x_axis
|
|
|
|
|
|
def plot_kernels_on_side(ax_x, ax_y, cell_type_here, color, cv_name, frame_file, score, step_y=0, xmin='no', ymin='no',
|
|
step_x=0, ymax = 'no', xlim = None):
|
|
x_axis, y_axis = get_axis(cv_name, frame_file, score)
|
|
#embed()
|
|
if xlim:
|
|
x_axis = x_axis[x_axis < xlim[1]]
|
|
kernel_histogram(ax_x, color, np.array(x_axis), xmin=xmin, norm='density', step=step_x, alpha=0.5) # step_x = 0.03
|
|
ax_x.show_spines('b')
|
|
remove_yticks(ax_x)
|
|
remove_xticks(ax_x)
|
|
|
|
# embed()
|
|
test = False
|
|
if test:
|
|
test_kernel()
|
|
|
|
kernel_histogram(ax_y, color, np.array(y_axis), orientation='vertical', norm=True, step=step_y,
|
|
alpha=0.5, xmin=ymin, xmax = ymax)
|
|
|
|
ax_y.set_yticks_blank()
|
|
ax_y.show_spines('l')
|
|
remove_yticks(ax_y)
|
|
remove_xticks(ax_y)
|
|
|
|
return x_axis
|
|
|
|
|
|
def plt_albi(ax, cell_type_here, colors, max_val, species, x_axis, y_axis):
|
|
try:
|
|
ax.scatter(x_axis[x_axis < max_val], y_axis[x_axis < max_val],
|
|
alpha=1,
|
|
s=2.5, color=colors[
|
|
str(cell_type_here)],
|
|
clip_on=False) ##0.45 colors[' P-unit']label = cell_type_here[1]+':'+' '+str(file), marker = marker,
|
|
ax.axhline(2.576, color='grey', linestyle='--', linewidth=1)
|
|
|
|
ax.set_title(species)
|
|
ax.set_yscale('log')
|
|
except:
|
|
print('axs thing3')
|
|
embed()
|
|
|
|
|
|
def plt_eigen(cv_name, ax, c, cell_type_here, cells_extra, colors, frame_file, max_val, score, species, x_axis, y_axis):
|
|
x_axis, y_axis = get_axis(cv_name, frame_file, score)
|
|
# c_axis = np.array(frame_file['response_modulation'])[frame_file[score] > 0]
|
|
# c_axis, x, y, exclude_here = exclude_nans_for_corr(frame_file, 'response_modulation', x_axis,
|
|
# y_axis)
|
|
# y =
|
|
x = x_axis[x_axis < max_val]
|
|
y = y_axis[x_axis < max_val]
|
|
try:
|
|
ax.scatter(x, y,
|
|
alpha=1,
|
|
s=2.5, color=colors[
|
|
str(cell_type_here)], label='r=' + str(np.round(np.corrcoef(x, y)[0][1], 2)) + ' n=' + str(
|
|
len(y)),
|
|
clip_on=False) ##0.45 colors[' P-unit']label = cell_type_here[1]+':'+' '+str(file), marker = marker,
|
|
ax.set_title(species)
|
|
ax.set_yscale('log')
|
|
ax.axhline(2.576, color='grey', linestyle='--', linewidth=1)
|
|
if c == 1:
|
|
ax.legend()
|
|
except:
|
|
print('axs thing2')
|
|
embed()
|
|
# if c == 0:
|
|
if cell_type_here == ' P-unit':
|
|
cells_plot2 = p_units_to_show(type_here='eigen_small')[1::]
|
|
else:
|
|
cells_plot2 = [p_units_to_show(type_here='eigen_small')[0]]
|
|
# for cell_plt in cells_plot2:
|
|
try:
|
|
cells_extra = frame_file[frame_file['cell'].isin(cells_plot2)].index
|
|
except:
|
|
print('cells extra here')
|
|
embed()
|
|
ax.scatter(frame_file[cv_name].loc[cells_extra], frame_file[score].loc[cells_extra],
|
|
alpha=1,
|
|
s=2.5, color=colors[
|
|
str(cell_type_here)], clip_on=False, marker='D', edgecolor='black')
|
|
|
|
|
|
def plt_overview_scatter(ax, c, cell_type_here, colors, cv_name, frame_file, score, x_pos=0, labelpad = 0, n = True, alpha = 1, color_text='black', ha = 'left'):
|
|
x_axis, y_axis = x_axis_wo_c(cv_name, frame_file, score)
|
|
try:
|
|
x = x_axis # [x_axis < max_val]
|
|
y = y_axis # [x_axis < max_val]
|
|
ax.scatter(x, y,
|
|
alpha=alpha,
|
|
s=2.5, color=colors[
|
|
str(cell_type_here)],
|
|
clip_on=True) ##, label=corr0.45 colors[' P-unit']label = cell_type_here[1]+':'+' '+str(file), marker = marker,
|
|
print(' mean('+str(cv_name)+str(np.mean(x))+') '+' mean('+str(score)+str(np.mean(y))+') ')
|
|
except:
|
|
print('axs thing1')
|
|
embed()
|
|
#embed()
|
|
# 0.25, 0.05
|
|
legend_wo_dot(ax, 0.9 - 0.1 * c, x, y, ha = ha, color=color_text, x_pos=x_pos, n = n)
|
|
|
|
# if c == 1:
|
|
# legend = ax.legend(handlelength=0, handletextpad=0)
|
|
# #color_l = ['blue', 'orange', 'green']
|
|
# for n, text in enumerate(legend.texts):
|
|
# #print(n, text)
|
|
# #text = legend.texts[-1]
|
|
# text.set_color(colors[cell_types[c]])
|
|
|
|
ax.set_xlabel(cv_name, labelpad = labelpad)
|
|
|
|
return x_axis
|
|
|
|
|
|
def x_axis_wo_c(cv_name, frame_file, score):
|
|
x_axis, y_axis = get_axis(cv_name, frame_file, score)
|
|
exclude_here = exclude_nans(x_axis, y_axis)
|
|
x_axis = x_axis[~exclude_here]
|
|
y_axis = y_axis[~exclude_here]
|
|
return x_axis, y_axis
|
|
|
|
|
|
def legend_wo_dot(ax, y_pos, x, y, color='black', x_pos=0.5, ha='left', n = True): # , ha = 'right'
|
|
# corr = 'r$=%s$' % np.round(np.corrcoef(x, y)[0][1], 2) + ' n$=%s$' % str(len(y))
|
|
corr, p_value = stats.pearsonr(x, y)
|
|
pears_l = pearson_label(corr,
|
|
p_value,
|
|
y, n=n)
|
|
ax.text(x_pos, y_pos, pears_l, fontsize=7.5, color=color,
|
|
transform=ax.transAxes, ha=ha) # ha="left", va="top",corr
|
|
# embed()
|
|
# transform=ax[a].transAxes
|
|
|
|
|
|
def get_axis(cv_name, frame_file, score):
|
|
cvs = frame_file[cv_name] #
|
|
x_axis = cvs[frame_file[score] > 0]
|
|
y_axis = np.array(frame_file[score])[frame_file[score] > 0]
|
|
return x_axis, y_axis
|
|
|
|
|
|
def plt_burst_modulation_hists(axk, axl, var_item_name, ax, cell_type_here, cv_name, frame_file, score, ymin='no',
|
|
xmin='no', ymax='no', top=False,
|
|
burst_fraction_reset='burst_fraction_burst_corr_individual_base',
|
|
var_item='response_modulation', labelpad = 0, max_x=None, n=True, xlim=None, x_pos=0, burst_fraction=1,
|
|
ha='left'):
|
|
cmap = []
|
|
x_axis = []
|
|
y_axis = []
|
|
if len(frame_file) > 0:
|
|
mod_limits = mod_lims_modulation(cell_type_here, frame_file, score)
|
|
if cell_type_here == ' P-unit':
|
|
cm = 'coolwarm' # 'Blues' #
|
|
else:
|
|
cm = 'coolwarm' # 'Greens'
|
|
|
|
#also ich fand coolwarm immer noch am Besten denn das hat grau in der Mitte
|
|
#cm = 'RdYlBu_r' # 'Greens'
|
|
#print(cm)
|
|
#embed()
|
|
cmap = rainbow_cmap(np.arange(len(mod_limits) * 1.6), nrs=len(mod_limits) * 1.6, cm=cm)[
|
|
::-1] # len(amps)
|
|
cmap = cmap[0:len(mod_limits)][::-1]
|
|
# for ff, amp in enumerate(range(len(mod_limits) - 1)):
|
|
# frame_amp = frame#[
|
|
# #(frame['response_modulation'] > mod_limits[ff]) & (frame['response_modulation'] <= mod_limits[ff + 1])]
|
|
# embed()
|
|
# try:
|
|
# frame_file_ex = frame_amp[frame_amp.file_name.isin(file_names_there)]
|
|
# except:
|
|
# print('file thing')
|
|
# embed()
|
|
frame_file = frame_file[frame_file[burst_fraction_reset] < burst_fraction]
|
|
|
|
colors = colors_overview()
|
|
x_axis = plot_kernels_on_side(axk, axl, cell_type_here, colors[cell_type_here], cv_name, frame_file, score,
|
|
xmin=xmin,ymax = ymax, ymin=ymin, xlim = xlim)
|
|
|
|
if var_item != '':
|
|
|
|
##############
|
|
# Auschlusskriterium 2, mindestens 9 Sekunden
|
|
# frame_file_ex = frame_file_ex[frame_file_ex.snippets == 9]
|
|
# print(len(file_names))
|
|
|
|
# frame_file = frame_file_ex # frame_file_ex[frame_file_ex[var_name] == file]
|
|
# cvs = frame_file[cv_name] #
|
|
# x_axis = cvs[frame_file[score] > 0]
|
|
# y_axis = np.array(frame_file[score])[frame_file[score] > 0]
|
|
# c_axis = np.array(frame_file[var_item])[frame_file[score] > 0]
|
|
x_axis = frame_file[cv_name] #
|
|
# x_axis = cvs[frame_file[score] > 0]
|
|
y_axis = frame_file[score] # np.array(frame_file[score])[frame_file[score] > 0]
|
|
# c_axis = np.array(frame_file['response_modulation'])[frame_file[score] > 0]
|
|
c_axis, x_axis, y_axis, exclude_here = exclude_nans_for_corr(frame_file, var_item, cv_name=cv_name,
|
|
score=score, max_x = max_x)
|
|
# corr, p_value = stats.pearsonr(x, y)
|
|
# y =
|
|
# c=c_axis[x_axis < max_val], cmap=cm,
|
|
if len(x_axis) > 0:
|
|
# ax.set_title(cell_type_here + species)
|
|
# ax.axhline(2.576, color='grey', linestyle='--', linewidth=1)
|
|
|
|
# x = x_axis[x_axis < max_val]
|
|
# y = y_axis[x_axis < max_val][x_axis < max_val]
|
|
im = ax.scatter(x_axis, y_axis,
|
|
alpha=1,
|
|
s=2.5, c=c_axis, clip_on=True, cmap=cm) # color=cmap[
|
|
#ax.set_aspect('equal')
|
|
# ff])
|
|
corr = 'r=' + str(np.round(np.corrcoef(x_axis, y_axis)[0][1], 2))
|
|
# if c == 1:
|
|
legend_wo_dot(ax, 0.9, x_axis, y_axis, ha = ha, x_pos=x_pos, n = n)
|
|
# legend_wo_dot(ax, 0.9 - 0.1 * c, x, y, color=colors[str(cell_type_here)])
|
|
|
|
# plt.show()
|
|
# ax.text(0.9, 0.9, corr, transform=ax.transAxes)
|
|
# ax.legend()
|
|
# ax[2, c].colorbar()
|
|
# embed()
|
|
# if top:
|
|
# cbar_ax,left, bottom, width, height = colorbar_outside(ax, plt.gcf(), axk)#, add=add
|
|
# else:
|
|
if top:
|
|
ax_tag = ax
|
|
else:
|
|
ax_tag = axl
|
|
cbar, left, bottom, width, height = colorbar_outside(ax_tag, im, plt.gcf(), width=0.01,
|
|
pos_axis='top', orientation='bottom', top=top)
|
|
if 'burst_fraction' in cv_name:
|
|
ax.set_xlim(0,1.01)
|
|
ax.set_xticks_delta(0.5)
|
|
if 'burst_fraction' in score:
|
|
ax.set_ylim(0,1.01)
|
|
ax.set_yticks_delta(0.5)
|
|
|
|
if 'burst_fraction' in var_item:
|
|
val_chosen = 1
|
|
else:
|
|
val_chosen = None
|
|
set_clim_same_here([im], clims = '', val_chosen = val_chosen ,lim_type='up', nr_clim = 'None')
|
|
# embed()
|
|
# colorbar_outside_right
|
|
# cbar = plt.colorbar(im, ax=ax, labelpad=15, orientation='vertical') # pad=0.2, shrink=0.5, "horizontal"
|
|
# embed()
|
|
|
|
cbar.set_label(var_item_name) ##+cell_type_here rotation=270,, labelpad=100
|
|
else:
|
|
colors = colors_overview()
|
|
x_axis = plt_overview_scatter(ax, 0, cell_type_here, colors, cv_name, frame_file, score, x_pos=x_pos, ha = ha, labelpad = labelpad)
|
|
axl.get_shared_y_axes().join(*[ax, axl])
|
|
axk.get_shared_x_axes().join(*[ax, axk])
|
|
axk.show_spines('')
|
|
axl.show_spines('')
|
|
# axl.join
|
|
# embed()
|
|
return cmap, x_axis, y_axis
|
|
|
|
|
|
def plt_burst_modulation(var_item_name, ax, c, cell_type_here, cv_name, frame_file, max_val,
|
|
score, species, var_item='response_modulation'):
|
|
mod_limits = mod_lims_modulation(cell_type_here, frame_file, score)
|
|
if cell_type_here == ' P-unit':
|
|
cm = 'coolwarm' # 'Blues' #
|
|
else:
|
|
cm = 'coolwarm' # 'Greens'
|
|
cmap = rainbow_cmap(np.arange(len(mod_limits) * 1.6), nrs=len(mod_limits) * 1.6, cm=cm)[
|
|
::-1] # len(amps)
|
|
cmap = cmap[0:len(mod_limits)][::-1]
|
|
# for ff, amp in enumerate(range(len(mod_limits) - 1)):
|
|
# frame_amp = frame#[
|
|
# #(frame['response_modulation'] > mod_limits[ff]) & (frame['response_modulation'] <= mod_limits[ff + 1])]
|
|
# embed()
|
|
# try:
|
|
# frame_file_ex = frame_amp[frame_amp.file_name.isin(file_names_there)]
|
|
# except:
|
|
# print('file thing')
|
|
# embed()
|
|
##############
|
|
# Auschlusskriterium 2, mindestens 9 Sekunden
|
|
# frame_file_ex = frame_file_ex[frame_file_ex.snippets == 9]
|
|
# print(len(file_names))
|
|
|
|
# frame_file = frame_file_ex # frame_file_ex[frame_file_ex[var_name] == file]
|
|
# cvs = frame_file[cv_name] #
|
|
# x_axis = cvs[frame_file[score] > 0]
|
|
# y_axis = np.array(frame_file[score])[frame_file[score] > 0]
|
|
# c_axis = np.array(frame_file[var_item])[frame_file[score] > 0]
|
|
x_axis = frame_file[cv_name] #
|
|
# x_axis = cvs[frame_file[score] > 0]
|
|
y_axis = frame_file[score] # np.array(frame_file[score])[frame_file[score] > 0]
|
|
# c_axis = np.array(frame_file['response_modulation'])[frame_file[score] > 0]
|
|
c_axis, x_axis, y_axis, exclude_here = exclude_nans_for_corr(frame_file, var_item, cv_name=cv_name, score=score)
|
|
# y =
|
|
# c=c_axis[x_axis < max_val], cmap=cm,
|
|
if len(x_axis) > 0:
|
|
# ax.set_title(cell_type_here + species)
|
|
# ax.axhline(2.576, color='grey', linestyle='--', linewidth=1)
|
|
|
|
# x = x_axis[x_axis < max_val]
|
|
# y = y_axis[x_axis < max_val][x_axis < max_val]
|
|
im = ax.scatter(x_axis, y_axis,
|
|
alpha=1,
|
|
s=2.5, c=c_axis, clip_on=False, cmap=cm) # color=cmap[
|
|
# ff])
|
|
corr = 'r=' + str(np.round(np.corrcoef(x_axis, y_axis)[0][1], 2))
|
|
# if c == 1:
|
|
legend_wo_dot(ax, 0.9, x_axis, y_axis, x_pos=0)
|
|
# ax.text(0.9, 0.9, corr, transform=ax.transAxes)
|
|
# ax.legend()
|
|
# ax[2, c].colorbar()
|
|
# embed()
|
|
cbar = plt.colorbar(im, ax=ax, orientation='vertical') # pad=0.2, shrink=0.5, "horizontal"
|
|
# embed()
|
|
cbar.set_label(var_item_name + '\n' + cell_type_here) # rotation=270,, labelpad=100
|
|
|
|
# embed()
|
|
return cmap, x_axis, y_axis
|
|
|
|
|
|
def plt_modulation_overview(ax, c, cell_type_here, cv_name, frame_file, max_val,
|
|
score, species):
|
|
mod_limits = mod_lims_modulation(cell_type_here, frame_file, score)
|
|
if cell_type_here == ' P-unit':
|
|
cm = 'coolwarm' # 'Blues' #
|
|
else:
|
|
cm = 'coolwarm' # 'Greens'
|
|
cmap = rainbow_cmap(np.arange(len(mod_limits) * 1.6), nrs=len(mod_limits) * 1.6, cm=cm)[
|
|
::-1] # len(amps)
|
|
cmap = cmap[0:len(mod_limits)][::-1]
|
|
# for ff, amp in enumerate(range(len(mod_limits) - 1)):
|
|
# frame_amp = frame#[
|
|
# (frame['response_modulation'] > mod_limits[ff]) & (frame['response_modulation'] <= mod_limits[ff + 1])]
|
|
# embed()
|
|
# try:
|
|
# frame_file_ex = frame_amp[frame_amp.file_name.isin(file_names_there)]
|
|
# except:
|
|
# print('file thing')
|
|
# embed()
|
|
##############
|
|
# Auschlusskriterium 2, mindestens 9 Sekunden
|
|
# frame_file_ex = frame_file_ex[frame_file_ex.snippets == 9]
|
|
# print(len(file_names))
|
|
|
|
# frame_file = frame_file_ex # frame_file_ex[frame_file_ex[var_name] == file]
|
|
x_axis = frame_file[cv_name] #
|
|
# x_axis = cvs[frame_file[score] > 0]
|
|
y_axis = frame_file[score] # np.array(frame_file[score])[frame_file[score] > 0]
|
|
# c_axis = np.array(frame_file['response_modulation'])[frame_file[score] > 0]
|
|
c_axis, x_axis, y_axis, exclude_here = exclude_nans_for_corr(frame_file, 'response_modulation',
|
|
cv_name=cv_name, score=score)
|
|
# y =
|
|
# c=c_axis[x_axis < max_val], cmap=cm,
|
|
if len(x_axis) > 0:
|
|
# ax.set_title(cell_type_here + species)
|
|
# ax.axhline(2.576, color='grey', linestyle='--', linewidth=1)
|
|
ax.set_yscale('log')
|
|
# x = x_axis[x_axis < max_val]
|
|
# y = y_axis[x_axis < max_val][x_axis < max_val]
|
|
im = ax.scatter(x_axis, y_axis,
|
|
alpha=1,
|
|
s=2.5, c=c_axis, clip_on=False, cmap=cm,
|
|
label='r=' + str(np.round(np.corrcoef(x_axis, y_axis)[0][1], 2))) # color=cmap[
|
|
# ff])
|
|
# if c == 1:
|
|
legend_wo_dot(ax, 0.98, x_axis, y_axis, x_pos=0.4)
|
|
|
|
# ax[2, c].colorbar()
|
|
# embed()
|
|
cbar = plt.colorbar(im, ax=ax, orientation='vertical') # pad=0.2, shrink=0.5, "horizontal"
|
|
# embed()
|
|
cbar.set_label(
|
|
'Modulation Depth\n' + cell_type_here + '(' + str(species[0:5]) + '.)') # rotation=270,, labelpad=100
|
|
|
|
# embed()
|
|
return cmap, x_axis, y_axis
|
|
|
|
|
|
def data_overview():
|
|
# calcdf_RAM_overview()
|
|
|
|
save_name = 'calc_RAM_overview-noise_data8_nfft1sec_original__LocalEOD_CutatBeginning_0.05_s_NeurDelay_0.005_s_burst_corr'
|
|
save_name = 'calc_RAM_overview-noise_data8_nfft1sec_original__LocalEOD_CutatBeginning_0.05_s_NeurDelay_0.005_s'
|
|
save_name = 'calc_RAM_overview-noise_data9_nfft1sec_original__StimPreSaved4__CutatBeginning_0.05_s_NeurDelay_0.005_s'
|
|
save_name = 'calc_RAM_overview-noise_data9_nfft1sec_original__StimPreSaved4__mean5__CutatBeginning_0.05_s_NeurDelay_0.005_s'
|
|
|
|
col = 4
|
|
row = 2 # sharex=True,
|
|
|
|
plot_style()
|
|
default_settings(column=2, length=8.5)
|
|
# fig, ax = plt.subplots(4, 2) # , figsize=(14, 7.5) constrained_layout=True,
|
|
grid0 = gridspec.GridSpec(3, 1, wspace=0.54, bottom=0.1,
|
|
hspace=0.25, height_ratios=[1, 1, 2], left=0.1, right=0.87, top=0.95)
|
|
|
|
###################################
|
|
###############################
|
|
# Das ist der Finale Score
|
|
scoreall = 'perc99/med'
|
|
|
|
###################################
|
|
scores = [scoreall + '_diagonal_proj']
|
|
|
|
##########################
|
|
# Auswahl: wir nehmen den mean um nicht Stimulus abhängigen Noise rauszumitteln
|
|
|
|
# save_names = []
|
|
save_names = [
|
|
'calc_RAM_overview-_simplified_' + version_final(),
|
|
] # 'calc_RAM_overview-_simplified_noise_data9_nfft1sec_original__StimPreSaved4__mean5__CutatBeginning_0.05_s_NeurDelay_0.005_s__burstIndividual_','calc_RAM_overview-noise_data9_nfft1sec_original__StimPreSaved4__mean5__CutatBeginning_0.05_s_NeurDelay_0.005_s__burstIndividual_',
|
|
|
|
x_axis = ["cv_base", "cv_base_w_burstcorr", "cv_base", ]
|
|
cv_name_title = ['CV', 'CV$_{BurstCorr}$', 'CV']
|
|
species_all = [' Apteronotus leptorhynchus', ' Apteronotus leptorhynchus', ' Eigenmannia virescens']
|
|
|
|
counter = 0
|
|
|
|
colors = colors_overview()
|
|
ax_j = []
|
|
axls = []
|
|
|
|
for cv_n, cv_name in enumerate(x_axis):
|
|
if cv_n == 0:
|
|
redo = False
|
|
else:
|
|
redo = False
|
|
redo = False
|
|
frame_load_sp = load_overview_susept(save_names[0], redo=redo, redo_class=redo)
|
|
# frame_file = setting_overview_score(cell_type_here, frame_load_sp, min_amp=True, species=species)
|
|
|
|
# print(np.isnan(species))
|
|
cell_types = [' P-unit', ' Ampullary', ]
|
|
|
|
score = scores[0]
|
|
max_val = 1.5
|
|
for c, cell_type_here in enumerate(cell_types):
|
|
|
|
species = species_all[cv_n]
|
|
frame_file = setting_overview_score(frame_load_sp, cell_type_here, min_amp='min', species=species)
|
|
|
|
##################################
|
|
# modulation and species comparison
|
|
# x_axis, y_axis = get_axis(cv_name, frame_file, score)
|
|
# if cv_n == 0:
|
|
|
|
###############################
|
|
#######################
|
|
# Kernel Histogram
|
|
|
|
# plot the histograms of the values above the according vals
|
|
grid = gridspec.GridSpecFromSubplotSpec(1, 3, grid0[0],
|
|
hspace=0, wspace=0.15)
|
|
#
|
|
if c == 0:
|
|
grid_k = gridspec.GridSpecFromSubplotSpec(2, 2, grid[0, cv_n],
|
|
hspace=0.1, wspace=0.1, height_ratios=[0.35, 3],
|
|
width_ratios=[3, 0.5])
|
|
try:
|
|
axk = plt.subplot(grid_k[0, 0])
|
|
except:
|
|
print('grid something')
|
|
embed()
|
|
ax_j.append(axk)
|
|
axs = plt.subplot(grid_k[1, 0])
|
|
ax_j.append(axs)
|
|
axl = plt.subplot(grid_k[1, 1])
|
|
axls.append(axl)
|
|
if c in [0, 2]:
|
|
axk.set_title(species)
|
|
# embed()
|
|
axs, x_axis = kernel_scatter(axl, cell_types, axk, axs, ax_j, c, cell_type_here, colors, cv_n, cv_name,
|
|
frame_file, grid[0, cv_n], max_val,
|
|
score)
|
|
axs.set_xlabel(cv_name_title[cv_n])
|
|
if cv_n == 0:
|
|
axs.set_ylabel('Perc(99)/Median')
|
|
|
|
if cv_n == 0:
|
|
axm = [axs]
|
|
|
|
grid_lower = gridspec.GridSpecFromSubplotSpec(2, 2, grid0[2], hspace=0.55, wspace=0.5)
|
|
#
|
|
cv_name = "cv_base"
|
|
species = ' Apteronotus leptorhynchus'
|
|
for c, cell_type_here in enumerate(cell_types):
|
|
frame_file = setting_overview_score(frame_load_sp, cell_type_here, min_amp='min', species=species)
|
|
|
|
# embed()
|
|
|
|
##############################################
|
|
# jetzt kommen die extra P-unit statistiken
|
|
if cell_type_here == ' P-unit':
|
|
if c == 0:
|
|
################################
|
|
# Modulation, cell type comparison
|
|
var_types = ['burst_fraction_burst_corr_base', 'cv_base']
|
|
x_axis = ['cv_base', 'burst_fraction_burst_corr_base', ]
|
|
var_item_names = ['Burst Fraction', 'CV$_{Base}$']
|
|
x_axis_names = ['CV$_{Base}$', 'Burst Fraction', ]
|
|
|
|
for v, var_type in enumerate(var_types):
|
|
ax = plt.subplot(grid_lower[0, v])
|
|
cmap, _, y_axis = plt_burst_modulation(var_item_names[v], ax, c, cell_type_here,
|
|
x_axis[v], frame_file, max_val, score,
|
|
species, var_item=var_type)
|
|
ax.set_ylabel(score)
|
|
ax.set_xlabel(x_axis_names[v])
|
|
ax.set_yscale('log')
|
|
|
|
if v == 0:
|
|
############################
|
|
# extra Zellen Scatter
|
|
# todo: diese Zellen müssen noch runter konvertiert werden
|
|
# todo: extra funktion für Zellen über 9 Snippets schreiben und die nochmal extra machen
|
|
cells_plot2 = p_units_to_show(type_here='bursts')
|
|
# for cell_plt in cells_plot2:
|
|
cells_extra = frame_file[frame_file['cell'].isin(cells_plot2)].index
|
|
# ax = plt.subplot(grid[1, cv_n])
|
|
ax.scatter(frame_file[cv_name].loc[cells_extra], frame_file[score].loc[cells_extra],
|
|
s=5, color='white', edgecolor='black', alpha=0.5,
|
|
clip_on=False) # colors[str(cell_type_here)]
|
|
|
|
##########################################
|
|
# burst gegen CV
|
|
var_types = ['burst_fraction_burst_corr_base', 'response_modulation']
|
|
var_item_names = ['Burst Fraction', 'Modulatoin']
|
|
|
|
x_axis = ['cv_base', 'burst_fraction_burst_corr_base']
|
|
x_axis_names = ['Burst Fraction$_{Base}$', 'Burst Fraction$_{Base}$'] # 'CV$_{Base}$'
|
|
scores_here = ['coherence_', 'burst_fraction_burst_corr_stim'] # 'wo_burstcorr'
|
|
for v, var_type in enumerate(var_types):
|
|
if scores_here[v] in frame_file.keys():
|
|
ax = plt.subplot(grid_lower[1, v])
|
|
cmap, _, y_axis = plt_burst_modulation(var_item_names[v], ax, c, cell_type_here,
|
|
x_axis[v], frame_file, max_val, scores_here[v],
|
|
species, var_item=var_type)
|
|
if v == 1:
|
|
ax.plot([0, 1], [0, 1], color='grey', linewidth=0.5)
|
|
ax.set_xlabel(x_axis_names[v])
|
|
ax.set_ylabel(scores_here[v])
|
|
else:
|
|
embed()
|
|
|
|
grid_lower_lower = gridspec.GridSpecFromSubplotSpec(1, 2, grid0[1], wspace=0.5,
|
|
hspace=0.55) # , height_ratios = [1,3]
|
|
|
|
for c, cell_type_here in enumerate(cell_types):
|
|
frame_file = setting_overview_score(frame_load_sp, cell_type_here, min_amp='range', species=species)
|
|
|
|
##############################################
|
|
# modulatoin comparison for both cell_types
|
|
################################
|
|
# Modulation, cell type comparison
|
|
# todo: hier die diff werte über die zellen
|
|
|
|
# ax_here = []
|
|
# axd = plt.subplot(grid_lower_lower[0, c])
|
|
# embed()
|
|
# kernel_histogram(axk, colors[str(cell_type_here)], np.array(x_axis), norm=True, step=0.03, alpha=0.5)
|
|
# embed()
|
|
|
|
# axk.show_spines('lb')
|
|
|
|
axs = plt.subplot(grid_lower_lower[c])
|
|
cmap, _, y_axis = plt_modulation_overview(axs, c, cell_type_here,
|
|
cv_name, frame_file, max_val, score,
|
|
species)
|
|
axs.set_ylabel(score)
|
|
# embed()#frame_file[(frame_file.cv_base < 0.65) & (frame_file.response_modulation > 200)].response_modulation
|
|
axs.set_xlabel(cv_name)
|
|
|
|
# axs.get_shared_x_axes().join(*[axs, axd])
|
|
|
|
######################################################
|
|
# hier kommen die kontrast Punkte dazu
|
|
# für die Zellen spielt Burst correctin ja keine Rolle
|
|
# if cv_n == 0:
|
|
if cell_type_here == ' P-unit':
|
|
cells_plot2 = p_units_to_show(type_here='contrasts')[1::]
|
|
else:
|
|
cells_plot2 = [p_units_to_show(type_here='contrasts')[0]]
|
|
|
|
# for cell_plt in cells_plot2:
|
|
cells_extra = frame_file[frame_file['cell'].isin(cells_plot2)].index
|
|
# ax = plt.subplot(grid[1, cv_n])
|
|
axs.scatter(frame_file[cv_name].loc[cells_extra], frame_file[score].loc[cells_extra],
|
|
s=5, color='white', edgecolor='black', alpha=0.5, clip_on=False) # colors[str(cell_type_here)]
|
|
|
|
# elif species == ' Apteronotus albifrons':
|
|
# plt_albi(ax[4, 1], cell_type_here, colors, max_val, species, x_axis, y_axis)
|
|
|
|
# ax[1,cv_n].set_xlim(0, max_val)
|
|
# set_same_ylim(np.concatenate(ax[1::, :]))
|
|
# set_same_ylim(np.concatenate(ax[1::, :]),ylim_type ='xlim')
|
|
# set_same_ylim(ax[0, :], ylim_type='xlim')
|
|
|
|
# set_ylim_same()
|
|
# ax[1, 1].get_shared_y_axes().join(*ax[1, 1::])
|
|
# embed()
|
|
counter += 1
|
|
|
|
# ax_j
|
|
##############################################
|
|
# jetzt kommen die extra P-unit Eigen statistiken
|
|
# species = ' Eigenmannia virescens'
|
|
|
|
# cv_name = 'cv_base'
|
|
# ax = plt.subplot(grid[4, 0])
|
|
# for c, cell_type_here in enumerate(cell_types):
|
|
# frame_file = setting_overview_score(cell_type_here, frame_load_sp, species=species)
|
|
# plt_eigen(cv_name, ax, c, cell_type_here, cells_extra, colors, frame_file, max_val, score,
|
|
# species, x_axis, y_axis)
|
|
|
|
########################
|
|
# modell
|
|
model = resave_small_files("models_big_fit_d_right.csv", load_folder='calc_model_core')
|
|
cells = model.cell.unique()
|
|
plt_model_overview2(ax_j[1], cells, scores=[scoreall + '_'])
|
|
plt.subplots_adjust(left=0.07, right=0.95, top=0.98, bottom=0.05, wspace=0.45, hspace=0.55)
|
|
|
|
# ax_j[0].get_shared_y_axes().join(*[ax_j[0],ax_j[2],ax_j[3]])
|
|
ax_j[0].get_shared_y_axes().join(*[ax_j[1], ax_j[3], ax_j[5], axls[0], axls[1], axls[2]])
|
|
|
|
ax_j[0].get_shared_x_axes().join(*ax_j)
|
|
# ax_j[0].get_shared_x_axes().join(*[ax_j[0],ax_j[1]])
|
|
# ax_j[2].get_shared_x_axes().join(*[ax_j[2], ax_j[3]])
|
|
# ax_j[4].get_shared_x_axes().join(*[ax_j[4], ax_j[5]])
|
|
|
|
save_visualization(pdf=True)
|
|
|
|
|
|
def calc_averag_spike_per_burst_package(burst_corr, h, lim, spikes_all):
|
|
# also hier nimmt man einfach all jene spikes die übrig bleiben, nur die erste Verteilung zu nehmen ist je unmöglich
|
|
if 'inverse' in burst_corr:
|
|
first_true = [False]
|
|
first_true.extend(h < lim)
|
|
else:
|
|
first_true = [True]
|
|
first_true.extend(h > lim)
|
|
test = False
|
|
|
|
# todo: also entweder man schneidet zusammen nur die teile des inputs und des outputs wo die bursts waren,
|
|
# fr_base = len(spikes_all[0]) / (spikes_all[0][-1] / 1000)
|
|
#
|
|
# todo: hier vielleicht auch noch ein <= machen
|
|
# spike_ex = np.array(spikes_all)[np.array(first_true)]
|
|
nrs_first_spike = np.arange(0, len(spikes_all), 1)[np.array(first_true)]
|
|
burst_nr = np.diff(nrs_first_spike)
|
|
# if np.sum(h > lim) < 0:
|
|
# print('burst something')
|
|
# embed()
|
|
return burst_nr, test
|
|
|
|
|
|
def get_float_keys(stack_here):
|
|
types = list(map(type, stack_here.keys()))
|
|
keys = stack_here.keys()[np.where(np.array(types) == float)]
|
|
# keys = stack_file.keys()[0:int(np.where(type(stack_file.keys()) == 'd_isf_all')[0])]
|
|
if len(stack_here) != len(keys):
|
|
keys = stack_here.index # ()
|
|
# print('some length problem')
|
|
# np.array(stack_here.keys())
|
|
return keys
|
|
|
|
|
|
def calc_serial(isi):
|
|
corrs2 = []
|
|
# t = time.time()
|
|
if len(isi) > 100:
|
|
length = len(isi) - 50
|
|
else:
|
|
length = len(isi)
|
|
corrs = [[]] * (length - 1)
|
|
# if length >100:
|
|
# length = 100
|
|
for l in range(1, length):
|
|
# l = 1
|
|
previous = isi # [0:-l]
|
|
next = np.roll(isi, l)
|
|
cut = True
|
|
if cut:
|
|
previous = previous[l::] # [0:-l]
|
|
next = next[l::] # np.roll(isi, l)
|
|
corrs2.append(np.corrcoef(next, previous)[0][1])
|
|
# embed()
|
|
# print('corr3 ' + str(time.time() - t))
|
|
corr = np.mean(corrs2)
|
|
sum_corr = np.sum(corrs2)
|
|
# np.corrcoef(isi, isi)[0][1]
|
|
|
|
test = False
|
|
if test:
|
|
corr_test()
|
|
# try:
|
|
# corrs2[0]
|
|
# except:
|
|
# print('corrs2 problem')
|
|
# embed()
|
|
return corr, corrs2[0], sum_corr
|
|
|
|
|
|
def roc_part(titles, devs, group_mean, ranges, fig, subdevision_nr, datapoints, datapoints_way, color, c, chose_score,
|
|
cell, DF1_desired_ROC, DF2_desired_ROC, contrast_small,
|
|
contrast_big, d, contrast1, dfs, start, dev, contrast, grid2, plot_group, autodefine2='_dfchosen_',
|
|
sorted_on='eod_loc_synch', c1=10, c2=10, cut_matrix='malefemale', autodefine='_dfchosen_closest_first_',
|
|
chirps='', data_dir='', mean_type='MeanTrialsIndexPhaseSort', extract='', mult_type='_multsorted2_',
|
|
indices=['_allindices_'], eodftype='_psdEOD_', titles_up=['Without female', 'With female']):
|
|
###################################################################
|
|
# ROC Part
|
|
|
|
# mean_type = '_MeanTrialsIndexPhaseSort_Min0.25sExcluded_'
|
|
# mean_type = '_AllTrialsIndex_Min0.25sExcluded_'
|
|
# savename = r'C:\Users\alexi\OneDrive - bwedu\Präsentations\latex\ROC_squares_traces.pdf'
|
|
# DF2_desired = [0.8]
|
|
# DF1_desired = [0.87]
|
|
|
|
cells = [
|
|
'2022-01-28-ah-invivo-1'] # ,'2022-01-28-af-invivo-1','2022-01-28-ab-invivo-1','2022-01-27-ab-invivo-1',]#,'2022-01-28-ah-invivo-1', '2022-01-28-af-invivo-1', ]
|
|
append_others = '_dfchosen_'
|
|
|
|
# embed()#
|
|
_, fr, pivot_chosen, max_val, max_x, max_y, mult, DF1_desired_ROC_exact, DF2_desired_ROC_exact, min_y, min_x, min_val, diff_cut = chose_mat_max_value(
|
|
DF1_desired_ROC, DF2_desired_ROC, extract, mult_type, eodftype, indices, cell,
|
|
contrast_small,
|
|
contrast_big, contrast1, dfs, start, dev, contrast,
|
|
autodefine=autodefine2,
|
|
cut_matrix=cut_matrix,
|
|
chose_score=chose_score, mean_type=mean_type) # chose_score = 'auci02_012-auci_base_01'
|
|
|
|
colors = ['orange', 'green']
|
|
|
|
# results_diff = pd.DataFrame()
|
|
|
|
base = cell.split(os.path.sep)[-1] + ".nix"
|
|
if data_dir == '':
|
|
path = load_folder_name('threefish') + '/' + cell
|
|
else:
|
|
path = '../data/' + data_dir[c] + cell
|
|
full_path = path + '/' + base
|
|
|
|
try:
|
|
file = nix.File.open(full_path, nix.FileMode.ReadOnly)
|
|
except:
|
|
full_path = '../data/cells/' + cell + '/' + cell + ".nix"
|
|
file = nix.File.open(full_path, nix.FileMode.ReadOnly)
|
|
print('load extra' + full_path)
|
|
# embed()
|
|
b = file.blocks[0]
|
|
all_mt_names, mt_names, t_names = get_all_nix_names(b, what='Three')
|
|
|
|
if mt_names:
|
|
nix_there = check_nix_fish(b)
|
|
if nix_there:
|
|
|
|
times_sort = predefine_grouping_frame(b, eodftype=eodftype)
|
|
# embed()
|
|
counter_waves = 0
|
|
# embed()
|
|
times_sort = times_sort[
|
|
(times_sort['c2'] == c2) & (times_sort['c1'] == c1)]
|
|
|
|
for gg in range(len(DF1_desired_ROC_exact)):
|
|
|
|
plot_nr = 0
|
|
ax1_3 = {}
|
|
###################
|
|
# all trials in one
|
|
grouped = times_sort.groupby(
|
|
['c1', 'c2', 'm1, m2'],
|
|
as_index=False)
|
|
grouped_mean = chose_certain_group(DF1_desired_ROC_exact[gg],
|
|
DF2_desired_ROC_exact[gg], grouped,
|
|
several=True, emb=False,
|
|
concat=True)
|
|
|
|
# for g in range(len(grouped_mean)):
|
|
|
|
# if 'Trials' not in mean_type:
|
|
|
|
###################
|
|
# groups sorted by repro tag
|
|
grouped = times_sort.groupby(
|
|
['c1', 'c2', 'm1, m2', 'repro_tag_id'],
|
|
as_index=False)
|
|
grouped_orig = chose_certain_group(DF1_desired_ROC_exact[gg],
|
|
DF2_desired_ROC_exact[gg],
|
|
grouped,
|
|
several=True)
|
|
# embed()
|
|
gr_trials = len(grouped_orig)
|
|
###################
|
|
# other group variants
|
|
groups_variants = [grouped_orig]
|
|
|
|
append_others = ''
|
|
# if append_others == 'apend_others':
|
|
|
|
# embed()
|
|
groups_variants = groups_variants[::-1]
|
|
# embed()
|
|
# for gg, grouped in enumerate(grouped_orig):
|
|
|
|
# ax0_0, ax1_0, ax0_1, ax1_1, ax1_2, ax1_3 = define_ax_roc_plot(
|
|
# DF1_desired, grid_orig, gg)
|
|
|
|
colors_groups = ['black', 'brown', 'red', 'pink', 'orange',
|
|
'yellow',
|
|
'lightgreen', 'green', 'darkgreen',
|
|
'lightblue', 'blue', 'navy', 'purple'] # [::-1]
|
|
|
|
#########################################################
|
|
|
|
# embed()
|
|
# if plot_nr == 0:
|
|
|
|
plot_nr = -1
|
|
# embed()
|
|
groups_variants = [[grouped_mean]]
|
|
# embed()
|
|
ax1_3[plot_group] = plt.subplot(grid2, aspect='auto')
|
|
|
|
# grouped_mean
|
|
# embed()
|
|
|
|
for g, grouped2 in enumerate(groups_variants):
|
|
|
|
# embed()
|
|
results_diff = grouped2[0].copy()
|
|
# embed()
|
|
cv0, spike_pures_split, delays_split = plt_error_bar(plot_group, group_mean, extract, ax1_3,
|
|
subdevision_nr, groups_variants.copy(), b,
|
|
chirps, mean_type, devs, counter_waves,
|
|
results_diff, datapoints, datapoints_way,
|
|
grouped_orig, sorted_on=sorted_on,
|
|
color=color) #
|
|
# RANGES determines which of the two ROCs schould be plottet
|
|
|
|
# ax1_3[1] = []
|
|
|
|
#
|
|
# embed()
|
|
# if g == 1:
|
|
# plt.show()
|
|
# try:
|
|
frame, devname, spikes_pure, group_name, auc_names_condition, auc_names_control = plt_only_roc_repetitive(
|
|
extract, ax1_3, fig, grouped2, g,
|
|
b,
|
|
chirps,
|
|
mean_type, devs,
|
|
counter_waves,
|
|
results_diff, datapoints,
|
|
datapoints_way,
|
|
grouped_orig,
|
|
colors_groups, ranges=ranges, sorted_on=sorted_on, lw=1.5)
|
|
# except:
|
|
# print('roc only problem')
|
|
# embed()
|
|
# embed()
|
|
|
|
# ax1_3[0].set_title('receiver + jammer')
|
|
# ax1_3[1].set_title('receiver + jammer + courting')
|
|
# embed()
|
|
fr_end = divergence_title_add_on(group_mean, fr[gg], autodefine)
|
|
# fr
|
|
plt.suptitle(
|
|
cell + ' c1: ' + str(group_name[0]) + '% m1: ' + str(
|
|
group_name[2][0]) + ' DF1: ' + str(
|
|
grouped_mean['DF1, DF2'].iloc[0][
|
|
0]) + ' c2: ' + str(
|
|
group_name[1]) + '% m2: ' + str(
|
|
group_name[2][1]) + ' DF2: ' + str(
|
|
grouped_mean['DF1, DF2'].iloc[0][
|
|
1]) + '\n Trials nr ' + str(
|
|
len(grouped_mean)) + ' sorted on ' + sorted_on + ' ' + mean_type + ' cv ' + str(
|
|
np.round(cv0, 2)) + ' ' + fr_end)
|
|
# embed()
|
|
try:
|
|
mt_group1 = grouped2[0][1]
|
|
# mt_group = grouped[0][]
|
|
except:
|
|
mt_group1 = grouped2[0]
|
|
try:
|
|
eodf = np.mean(mt_group1.eodf)
|
|
except:
|
|
print('eod problem4')
|
|
embed()
|
|
|
|
gr_trials = len(grouped_orig)
|
|
sum_trials = len(grouped_mean)
|
|
gr_trials = len(grouped2)
|
|
|
|
sum_trials, lengths = find_length_of_all_trials(grouped2,
|
|
group_name)
|
|
|
|
if g == 0:
|
|
if len(auc_names_control) > 0:
|
|
ax1_3[plot_group].text(0.5, 2,
|
|
auc_names_control[0][0] + '-' +
|
|
auc_names_control[0][1], va='center',
|
|
ha='center',
|
|
transform=ax1_3[plot_group].transAxes, )
|
|
# ax1_3[1].text(0.5, 2,
|
|
# auc_names_condition[0][0] + '-' +
|
|
# auc_names_condition[0][1],
|
|
# va='center', ha='center',
|
|
# transform=ax1_3[1].transAxes, )
|
|
else:
|
|
ax1_3[plot_group].text(0.5, 2,
|
|
'base' + '-' + '01',
|
|
auc_names_control[0][1], va='center',
|
|
ha='center',
|
|
transform=ax1_3[plot_group].transAxes, )
|
|
# ax1_3[1].text(0.5, 2,
|
|
# '02' + '-' +
|
|
# '012',
|
|
# va='center', ha='center',
|
|
# transform=ax1_3[1].transAxes, )
|
|
|
|
ax1_3[plot_group].text(0.7, 1.5, 'm1: ' + str(
|
|
group_name[2][0]) + ' /DF1: ' + str(
|
|
int((group_name[2][0] - 1) * eodf))
|
|
+ '[Hz]', va='center', ha='center',
|
|
transform=ax1_3[plot_group].transAxes,
|
|
color=colors[gg])
|
|
#
|
|
# print(g)
|
|
# try:
|
|
ax1_3[plot_group].text(0.7, 1.7, ' m2: ' + str(
|
|
group_name[2][1]) + '/ DF2: ' + str(
|
|
int((group_name[2][1] - 1) * eodf)) + '[Hz] ',
|
|
va='center', ha='center',
|
|
transform=ax1_3[plot_group].transAxes,
|
|
)
|
|
|
|
# plt.suptitle(cell + ' C2 ' + str(c2) + ' % C1_' + str(c1) + ' % dev'+str(dev))
|
|
|
|
if (gg == 0) & (g == len(groups_variants) - 1):
|
|
ax1_3[plot_group].set_ylabel('Correct-Detection Rate: ' + titles[plot_group][1])
|
|
ax1_3[plot_group].set_xlabel('False-Positive Rate: ' + titles[plot_group][0])
|
|
ax1_3[plot_group].set_title(titles_up[plot_group])
|
|
# ax1_3[1].set_xlabel('False Detection')#
|
|
return frame, devname, spikes_pure, spike_pures_split, delays_split
|
|
|
|
|
|
def plt_error_bar(plot_group, group_mean, extract, ax1_3, subdevision_nr, groups_variants, b, chirps, mean_type, devs,
|
|
counter_waves, results_diff, datapoints, datapoints_way, grouped_orig, sorted_on='eod_loc_synch',
|
|
color=['grey', 'grey', 'grey', 'grey', 'grey', 'grey', 'grey', 'grey', 'grey', 'grey', 'grey',
|
|
'grey']):
|
|
spike_pures = []
|
|
delays_split = []
|
|
if '_AllTrialsIndex' in mean_type:
|
|
plt_error_bar_trials_roc(counter_waves, results_diff, mean_type, extract, chirps, ax1_3, plot_group, group_mean,
|
|
datapoints_way, b, datapoints, devs, groups_variants, grouped_orig, test=False)
|
|
else:
|
|
# embed()
|
|
range_nr = int(len(group_mean[1]) / subdevision_nr)
|
|
grouped_borders = find_group_variants(group_mean[1],
|
|
[], start=1, steps=1, ranges=[range_nr])
|
|
|
|
groups_variants = grouped_borders
|
|
for g, grouped in enumerate(groups_variants):
|
|
print('group_variants' + str(g))
|
|
group_name = grouped_orig[0][0]
|
|
|
|
if type(list(grouped)[0]) != str:
|
|
grouped = list(grouped)
|
|
# roc_color = colors_groups[g]
|
|
tp = {}
|
|
fp = {}
|
|
for ggg in range(len(grouped)):
|
|
|
|
# frame, spikes_pure, devname
|
|
# if (len(frame) < 1) & (len(spikes_pure) < 1)& (len(devname) < 1):
|
|
# todo: ob man das jetzt jedes Mal neu laufen lassen muss ist ein andere Frage vielleicht könnte man ja die alten Arrays verwenden
|
|
try:
|
|
# if len(grouped[ggg]) != 2:
|
|
grouped2 = [group_name, grouped[ggg]]
|
|
spikes_pure, fish_number_base, chirp, fish_cuts, time_array, fish_number, smoothened2, smoothed05, eod_mt, eod_interp, effective_duration, cut, devname, frame = cut_spikes_and_eod_three(
|
|
grouped2, b, extract, chirps=chirps,
|
|
emb=False, mean_type=mean_type, sorted_on=sorted_on)
|
|
features, mt, name_here, l = get_mt_features3(b, grouped2)
|
|
except:
|
|
# else:
|
|
grouped2 = grouped[ggg]
|
|
spikes_pure, fish_number_base, chirp, fish_cuts, time_array, fish_number, smoothened2, smoothed05, eod_mt, eod_interp, effective_duration, cut, devname, frame = cut_spikes_and_eod_three(
|
|
grouped2, b, extract, chirps=chirps,
|
|
emb=False, mean_type=mean_type)
|
|
features, mt, name_here, l = get_mt_features3(b, grouped2)
|
|
print('grouped2 problem')
|
|
embed()
|
|
spike_pures.append(spikes_pure)
|
|
mean_isi, std_isi, fr, isi, cv0, ser0, ser_first, sum_corr = calc_baseline_char(
|
|
np.array(spikes_pure.base_0), np.abs(fish_cuts[0]), len(spikes_pure.base_0))
|
|
t1 = time.time()
|
|
# embed()
|
|
|
|
range_nr = int(len(frame) / 3)
|
|
|
|
t2 = time.time() - t1
|
|
print('spikes pure' + str(t2))
|
|
dev_nrs = find_right_dev(devname, devs)
|
|
t = dev_nrs[0]
|
|
# t = 0
|
|
frame_dev = frame[frame['dev'] == devname[t]]
|
|
delays_length = define_delays_trials(mean_type,
|
|
frame, sorted_on=sorted_on)
|
|
# embed()
|
|
delays_split.append(delays_length)
|
|
t1 = time.time()
|
|
array0, array01, array02, array012, mean_nrs, array012_all, array01_all, array02_all, array0_all = assign_trials(
|
|
frame,
|
|
devname[t],
|
|
delays_length,
|
|
mean_type)
|
|
t2 = time.time() - t1
|
|
# embed()
|
|
# print(len(array0[0]))
|
|
print('array' + str(t2))
|
|
# embed()
|
|
t1 = time.time()
|
|
# embed()
|
|
plt_error_bar0(array0, array01, array012, array02, ax1_3, color, counter_waves, datapoints,
|
|
datapoints_way, frame_dev, g, ggg, group_mean,
|
|
plot_group, results_diff, tp=tp, fp=fp)
|
|
return cv0, spike_pures, delays_split
|
|
|
|
|
|
def plt_error_bar0(array0, array01, array012, array02, ax1_3, color, counter_waves, datapoints, datapoints_way,
|
|
frame_dev, g, ggg, group_mean, plot_group, results_diff, tp={}, fp={}): # mt, name_here, mt
|
|
threshhold, roc_0, roc_02, roc_012, tp_012_all, tp_01_all, fp_all, tp_02_all, roc_01, results_diff, counter_savename, counter_waves = calc_auci_values(
|
|
array0, array01, array02, array012, datapoints_way[0], datapoints[0], results_diff, counter_waves=counter_waves,
|
|
id_group=group_mean)
|
|
arrow, second, counter1, counter2, auc_names_condition, roc_array_eod_control, auc_tp_condition, auc_names_control, auc_fp_control, roc_array_control, roc_array1_eod_condition, roc_array_condition = define_arrays_for_roc_plotting(
|
|
[],
|
|
[], roc_01, roc_012,
|
|
tp_01_all, tp_012_all, frame_dev, 0,
|
|
fp_all, tp_02_all, roc_0, roc_02,
|
|
[], [])
|
|
# embed()
|
|
if ggg == 0:
|
|
tp[g] = [auc_tp_condition[0][plot_group]]
|
|
fp[g] = [auc_fp_control[0][plot_group]]
|
|
else:
|
|
tp[g].append(auc_tp_condition[0][plot_group])
|
|
fp[g].append(auc_fp_control[0][plot_group])
|
|
# print(g_in)
|
|
try:
|
|
ax1_3[plot_group].plot(np.transpose(fp[g][ggg]), np.transpose(tp[g][ggg]),
|
|
color=color[ggg]) # , alpha=0.5
|
|
ax1_3[plot_group].plot(np.transpose(fp[g][ggg]), np.transpose(tp[g][ggg]),
|
|
color=color[ggg]) # , alpha=0.5
|
|
print(color[ggg])
|
|
except:
|
|
print('ggg problem')
|
|
embed()
|
|
|
|
test = False
|
|
if test:
|
|
some_roc_test(fp, tp)
|
|
|
|
|
|
def some_roc_test(fp, tp):
|
|
fig, ax = plt.subplots(3, 3, sharex=True, sharey=True)
|
|
ax = np.concatenate(ax)
|
|
for g in range(len(tp)):
|
|
ax[g].plot(np.transpose(fp[g]), np.transpose(tp[g]))
|
|
ax[g].plot(np.percentile(fp[g], 95, axis=0), np.percentile(tp[g], 5, axis=0),
|
|
color='grey', alpha=0.5)
|
|
ax[g].plot(
|
|
np.percentile(fp[g], 5, axis=0), np.percentile(tp[g], 5, axis=0),
|
|
color='grey',
|
|
alpha=0.5)
|
|
|
|
|
|
def define_arrays_for_roc_plotting(roc_01_eod, roc_012_eod, roc_01, roc_012, tp_01_all, tp_012_all, frame_dev, d,
|
|
fp_all, tp_02_all, roc_0, roc_02, roc_02_eod, base_here_eod):
|
|
roc_array1_eod_condition = []
|
|
roc_array_condition = []
|
|
second = []
|
|
counter1 = []
|
|
counter2 = []
|
|
auc_names_condition = []
|
|
roc_array_eod_control = []
|
|
rasters = []
|
|
auc_array_condition = []
|
|
if frame_dev['control_02'].iloc[d] != []:
|
|
second = 'first_sw'
|
|
counter1 = 0
|
|
counter2 = 2
|
|
arrow = True
|
|
# embed()
|
|
if second == 'first_sw':
|
|
##################################
|
|
# das plottet nur diese Combi
|
|
|
|
##################################
|
|
# NICHT VERWIRREN LASSEN; VON OBEN NACH UNTEN LESEN; hier ist BASE und 01 das erste Bild!
|
|
auc_names_control = [['base', '02', ]]
|
|
# baseline array
|
|
auc_array_control = [[fp_all, tp_02_all, ]]
|
|
roc_array_control = [[roc_0, roc_02, ]]
|
|
roc_array_eod_control = [[base_here_eod, roc_02_eod, ]]
|
|
arrow = False
|
|
auc_names_condition = [['01', '012']]
|
|
auc_array_condition = [[tp_01_all, tp_012_all]]
|
|
if len(roc_01_eod) > 0:
|
|
roc_array_condition = [[roc_01, roc_012]]
|
|
roc_array1_eod_condition = [[roc_01_eod, roc_012_eod]]
|
|
counter1 = 1
|
|
counter2 = 3
|
|
elif second == 'first':
|
|
##################################
|
|
# das plottet nur diese Combi
|
|
auc_names_control = [['02', 'base']]
|
|
# baseline array
|
|
auc_array_control = [[tp_02_all, fp_all]]
|
|
roc_array_control = [[roc_02, roc_0]]
|
|
roc_array_eod_control = [
|
|
[roc_02_eod, base_here_eod]]
|
|
|
|
auc_names_condition = [['012', '01']]
|
|
auc_array_condition = [[tp_012_all, tp_01_all]]
|
|
roc_array_condition = [[roc_012, roc_01]]
|
|
if len(roc_01_eod) > 0:
|
|
roc_array1_eod_condition = [
|
|
[roc_012_eod, roc_01_eod]]
|
|
|
|
elif second == 'second':
|
|
##################################
|
|
# das plottet nur diese Combi
|
|
auc_names_control = [['01', 'base']]
|
|
auc_array_control = [[tp_01_all, fp_all]]
|
|
roc_array_control = [[roc_01, roc_0]]
|
|
if len(roc_01_eod) > 0:
|
|
roc_array_eod_control = [
|
|
[roc_01_eod, base_here_eod]]
|
|
|
|
auc_names_condition = [['012', '02']]
|
|
auc_array_condition = [[tp_012_all, tp_02_all]]
|
|
roc_array_condition = [[roc_012, roc_02]]
|
|
roc_array1_eod_condition = [[roc_012_eod, roc_02_eod]]
|
|
|
|
else:
|
|
##################################
|
|
# das plottet nur die zwei Kombis einmal kontrast 01 zu base und einmal kontrast 02 zu bas
|
|
auc_names_control = [['01', 'base'], ['02', 'base']]
|
|
auc_array_control = [[tp_01_all, fp_all],
|
|
[tp_02_all, fp_all]]
|
|
roc_array_control = [[roc_01, roc_0],
|
|
[roc_02, roc_0]]
|
|
if len(roc_01_eod) > 0:
|
|
roc_array_eod_control = [
|
|
[roc_01_eod, base_here_eod],
|
|
[roc_02_eod, base_here_eod]]
|
|
|
|
auc_names_condition = [['012', '02'], ['012', '01']]
|
|
auc_array_condition = [[tp_012_all, tp_02_all],
|
|
[tp_012_all, tp_01_all]]
|
|
if len(roc_012) > 0:
|
|
roc_array_condition = [[roc_012, roc_02],
|
|
[roc_012, roc_01]]
|
|
roc_array1_eod_condition = [[roc_012_eod, roc_02_eod],
|
|
[roc_012_eod, roc_01_eod]]
|
|
|
|
|
|
else:
|
|
auc_names_control = [['base', '01'], '012', ]
|
|
auc_array_control = [[fp_all, tp_01_all], tp_012_all]
|
|
roc_array_control = [[roc_0, roc_01], roc_012]
|
|
|
|
return arrow, second, counter1, counter2, auc_names_condition, roc_array_eod_control, auc_array_condition, auc_names_control, auc_array_control, roc_array_control, roc_array1_eod_condition, roc_array_condition
|
|
|
|
|
|
def find_length_of_all_trials(grouped, group_name):
|
|
lengths = []
|
|
for l in range(len(grouped)):
|
|
if len(grouped[l]) != 2:
|
|
grouped2 = [group_name, grouped[l]]
|
|
else:
|
|
grouped2 = grouped[l]
|
|
lengths.append(len(grouped2[1]))
|
|
sum_trials = lengths
|
|
return sum_trials, lengths
|
|
|
|
|
|
def plt_error_bar_trials_roc(counter_waves, results_diff, mean_type, extract, chirps, ax1_3, plot_group, group_mean,
|
|
datapoints_way, b, datapoints, devs, groups_variants, grouped_orig, test=False):
|
|
for g, grouped in enumerate(groups_variants):
|
|
print('group_variants' + str(g))
|
|
group_name = grouped_orig[0][0]
|
|
|
|
if type(list(grouped)[0]) != str:
|
|
grouped = list(grouped)
|
|
# roc_color = colors_groups[g]
|
|
for ggg in range(len(grouped)):
|
|
|
|
if len(grouped[ggg]) != 2:
|
|
grouped2 = [group_name, grouped[ggg]]
|
|
else:
|
|
grouped2 = grouped[ggg]
|
|
spikes_pure, fish_number_base, chirp, fish_cuts, time_array, fish_number, smoothened2, smoothed05, eod_mt, eod_interp, effective_duration, cut, devname, frame = cut_spikes_and_eod_three(
|
|
group_mean, b, extract, chirps=chirps,
|
|
emb=False, mean_type=mean_type)
|
|
features, mt, name_here, l = get_mt_features3(b, grouped_mean)
|
|
dev_nrs = find_right_dev(devname, devs)
|
|
t = dev_nrs[0]
|
|
# t = 0
|
|
frame_dev = frame[frame['dev'] == devname[t]]
|
|
delays_length = define_delays_trials(mean_type,
|
|
frame)
|
|
array0, array01, array02, array012, mean_nrs, array012_all, array01_all, array02_all, array0_all = assign_trials(
|
|
frame,
|
|
devname[t],
|
|
delays_length,
|
|
mean_type)
|
|
# embed()
|
|
range_nr = int(len(array0) / 3)
|
|
array0_gr = find_group_variants(array0, [], start=1,
|
|
steps=1, ranges=[range_nr])
|
|
array01_gr = find_group_variants(array01, [], start=1,
|
|
steps=1, ranges=[range_nr])
|
|
array02_gr = find_group_variants(array02, [], start=1,
|
|
steps=1, ranges=[range_nr])
|
|
array012_gr = find_group_variants(array012, [], start=1,
|
|
steps=1, ranges=[range_nr])
|
|
# embed()
|
|
tp = {}
|
|
fp = {}
|
|
for g in range(len(array012_gr)):
|
|
print(g)
|
|
for g_in in range(len(array012_gr[g])):
|
|
threshhold, roc_0, roc_02, roc_012, tp_012_all, tp_01_all, fp_all, tp_02_all, roc_01, results_diff, counter_savename, counter_waves = calc_auci_values(
|
|
array0_gr[g][g_in], array01_gr[g][g_in], array02_gr[g][g_in], array012_gr[g][g_in],
|
|
datapoints_way[0], datapoints[0], results_diff, mean_nrs, l, features, name_here, mt,
|
|
counter_waves=counter_waves, id_group=group_mean)
|
|
|
|
frame_raster = frame[frame['dev'] == 'raster']
|
|
|
|
arrow, second, counter1, counter2, auc_names_condition, roc_array_eod_control, auc_tp_condition, auc_names_control, auc_fp_control, roc_array_control, roc_array1_eod_condition, roc_array_condition = define_arrays_for_roc_plotting(
|
|
[],
|
|
[], roc_01, roc_012,
|
|
tp_01_all, tp_012_all, frame_dev, 0,
|
|
fp_all, tp_02_all, roc_0, roc_02,
|
|
[], [])
|
|
# embed()
|
|
if g_in == 0:
|
|
tp[g] = [auc_tp_condition[0][plot_group]]
|
|
fp[g] = [auc_fp_control[0][plot_group]]
|
|
else:
|
|
tp[g].append(auc_tp_condition[0][plot_group])
|
|
fp[g].append(auc_fp_control[0][plot_group])
|
|
|
|
print(g_in)
|
|
ax1_3[plot_group].plot(np.transpose(fp[g]), np.transpose(tp[g]), color='grey', alpha=0.5)
|
|
ax1_3[plot_group].plot(np.transpose(fp[g]), np.transpose(tp[g]), color='grey', alpha=0.5)
|
|
|
|
# embed()
|
|
|
|
if test:
|
|
test_groups()
|
|
# auc_fp_control[0][plot_group]
|
|
|
|
|
|
def plt_only_roc_repetitive(extract, ax1_3, fig, grouped, g, b, chirps, mean_type,
|
|
devs, counter_waves, results_diff, datapoints, datapoints_way,
|
|
grouped_orig, colors_groups, sorted_on='eod_loc_synch', ranges=[], lw=0.4):
|
|
print('group_variants' + str(g))
|
|
# if (g == 0):
|
|
group_name = grouped_orig[0][0]
|
|
|
|
# embed()
|
|
# if len(grouped) != 2:
|
|
# grouped = [[group_name, grouped[0]]]
|
|
if type(list(grouped)[0]) != str:
|
|
grouped = list(grouped)
|
|
roc_color = colors_groups[g]
|
|
# todo: diese Funktion funktioniert eigentlich nur für den Mean
|
|
# embed()
|
|
for ggg in range(len(grouped)):
|
|
|
|
if len(grouped[ggg]) != 2:
|
|
grouped2 = [group_name, grouped[ggg]]
|
|
else:
|
|
grouped2 = grouped[ggg]
|
|
|
|
frame, devname, spikes_pure, auc_names_condition, auc_names_control = plt_only_roc_plot(extract, counter_waves,
|
|
results_diff,
|
|
datapoints,
|
|
datapoints_way, ax1_3,
|
|
fig, grouped2, b,
|
|
chirps, mean_type, devs,
|
|
roc_color=roc_color,
|
|
sorted_on=sorted_on,
|
|
range_roc=ranges, lw=lw)
|
|
|
|
return frame, devname, spikes_pure, group_name, auc_names_condition, auc_names_control
|
|
|
|
|
|
def plt_only_roc_plot(extract, counter_waves, results_diff, datapoints, datapoints_way, ax1_3, fig, group_mean, b,
|
|
chirps, mean_type, devs, roc_color='black', sorted_on='eod_loc_synch', range_roc=[], lw=0.7):
|
|
# embed()
|
|
spikes_pure, fish_number_base, chirp, fish_cuts, time_array, fish_number, smoothened2, smoothed05, eod_mt, eod_interp, effective_duration, cut, devname, frame = cut_spikes_and_eod_three(
|
|
group_mean, b, extract, chirps=chirps, emb=False, mean_type=mean_type, sorted_on=sorted_on)
|
|
|
|
features, mt, name_here, l = get_mt_features3(b, group_mean)
|
|
fish_cuts, whole_duration, delay, contrast1, contrast2, repro_position = get_fish_number(b, group_mean, mean_type)
|
|
|
|
auc_names_condition = []
|
|
auc_names_control = []
|
|
if len(devname) > 0:
|
|
# plot mean
|
|
dev_nrs = find_right_dev(devname, devs)
|
|
t = dev_nrs[0]
|
|
# t = 0
|
|
frame_dev = frame[frame['dev'] == devname[t]]
|
|
# embed()
|
|
delays_length = define_delays_trials(mean_type,
|
|
frame, sorted_on=sorted_on)
|
|
|
|
# embed()
|
|
if len(delays_length) > 1:
|
|
if not delays_length['012']:
|
|
print('DEBUGG: add sorted_on=sorted_on in cut_spikes_and_eod_three!!!')
|
|
|
|
array0, array01, array02, array012, mean_nrs, array012_all, array01_all, array02_all, array0_all = assign_trials(
|
|
frame,
|
|
devname[t],
|
|
delays_length,
|
|
mean_type)
|
|
test = False
|
|
# embed()
|
|
if test:
|
|
plt_arrays_sort()
|
|
|
|
plt_phase_sorted_trials(frame, devname, array0_all, array0, array01_all, array01, array02_all, array02,
|
|
array012_all, array012, )
|
|
|
|
auc_names_condition, auc_names_control = plt_only_roc_plot0(array0, array01, array012, array02, ax1_3,
|
|
counter_waves, datapoints, datapoints_way, features,
|
|
fig, frame_dev, group_mean, l, lw, mean_nrs,
|
|
mt, name_here, range_roc, results_diff, roc_color)
|
|
|
|
return frame, devname, spikes_pure, auc_names_condition, auc_names_control
|
|
|
|
|
|
def plt_only_roc_plot0(array0, array01, array012, array02, ax1_3, counter_waves, datapoints, datapoints_way, features,
|
|
fig, frame_dev, group_mean, l, lw, mean_nrs, mt, name_here, range_roc, results_diff,
|
|
roc_color):
|
|
threshhold, roc_0, roc_02, roc_012, tp_012_all, tp_01_all, fp_all, tp_02_all, roc_01, results_diff, counter_savename, counter_waves = calc_auci_values(
|
|
array0, array01, array02, array012, datapoints_way[0], datapoints[0], results_diff, mean_nrs, l, features,
|
|
name_here, mt, counter_waves=counter_waves, id_group=group_mean)
|
|
|
|
arrow, second, counter1, counter2, auc_names_condition, roc_array_eod_control, auc_tp_condition, auc_names_control, auc_fp_control, roc_array_control, roc_array1_eod_condition, roc_array_condition = define_arrays_for_roc_plotting(
|
|
[],
|
|
[], roc_01, roc_012,
|
|
tp_01_all, tp_012_all, frame_dev, 0,
|
|
fp_all, tp_02_all, roc_0, roc_02,
|
|
[], [])
|
|
single = False
|
|
a_all = 0
|
|
counter_a = 0
|
|
# here we choose which of the two arrays comparison we want, only the base-01 or also the 01-012
|
|
if len(range_roc) < 1:
|
|
range_roc = range(len(auc_fp_control[0]))
|
|
for a in range_roc:
|
|
if (type(ax1_3) == list) | (type(ax1_3) == dict):
|
|
ax = ax1_3[a]
|
|
else:
|
|
ax = ax1_3
|
|
# embed()
|
|
try:
|
|
plot_rocs(fig, ax, counter_a, auc_names_control[a_all][a],
|
|
a,
|
|
auc_names_condition[a_all],
|
|
auc_fp_control[a_all],
|
|
auc_tp_condition[a_all], results_diff,
|
|
auc_names_control[a_all][a],
|
|
auc_names_condition[a_all][a],
|
|
pos=[0, -0.35], legend=False, arrow=arrow, add=0.2, alpha=1,
|
|
counter1=counter1, counter2=counter2, roc_color=roc_color, emb=False, second_roc=False, lw=lw)
|
|
except:
|
|
print('ax something')
|
|
embed()
|
|
return auc_names_condition, auc_names_control
|
|
|
|
|
|
|
|
|
|
def traces_new(array012, position_diff, array01, way, array02, array0):
|
|
datapoints_all = [250, 500, 750, 1000, 1500]
|
|
restricts = np.arange(1000, len(array012[0]), 4000)
|
|
# datapoints_all = [500, 1000, ]
|
|
# restricts = [7000,len(array012[0])]
|
|
counter = 0
|
|
# fig, ax = plt.subplots(2, 2, sharex=True, sharey=True)
|
|
# ax[0, 0].plot(array012[0])
|
|
# ax[0, 1].plot(array01[0])
|
|
# ax[1, 0].plot(array02[0])
|
|
# ax[1, 1].plot(array0[0])
|
|
|
|
# fig, ax = plt.subplots(len(datapoints_all), len(restricts), sharex = True, sharey = True)
|
|
grid0 = gridspec.GridSpec(len(datapoints_all), len(restricts),
|
|
bottom=0.07, top=0.93, wspace=0.24,
|
|
left=0.06, right=0.92) # hspace=0.4,wspace=0.2,
|
|
|
|
# ax[0, 0].plot(str(restrict) + 'res ' + str(datapoints) + 'dp')
|
|
ax = None
|
|
for d, datapoints in enumerate(datapoints_all):
|
|
for r, restrict in enumerate(restricts):
|
|
print(len(array012[0][0:restrict]))
|
|
|
|
try:
|
|
trials, results_diff, tp_012_all, tp_01_all, tp_02_all, fp_all, roc_01, roc_0, roc_02, roc_012, threshhold = calc_auci_pd(
|
|
results_diff, position_diff, [array012[0][0:restrict]], [array01[0][0:restrict]],
|
|
[array02[0][0:restrict]], [array0[0][0:restrict]], t_off=10, way=way, emb=False,
|
|
datapoints=datapoints) # , threshhold=threshhold
|
|
# embed()
|
|
if type(ax) is None:
|
|
ax = plt.subplot(grid1[0, 0], sharey=ax)
|
|
else:
|
|
ax = plt.subplot(grid1[0, 0])
|
|
ax.set_title(str(restrict) + 'dp at all, ' + str(datapoints) + 'dp window', fontsize=7)
|
|
|
|
plt.plot(np.transpose(roc_0), color='orange')
|
|
plt.plot(np.transpose(roc_01), color='green')
|
|
|
|
plt.subplot(grid1[1, 0], sharey=ax, sharex=ax)
|
|
plt.plot(np.transpose(roc_02), color='orange')
|
|
plt.plot(np.transpose(roc_012), color='blue')
|
|
|
|
ax = plt.subplot(grid1[:, 1])
|
|
ax.plot(fp_all, tp_01_all, label='base-01', color='green')
|
|
ax.plot(tp_02_all, tp_012_all, label='02-012', color='blue')
|
|
counter += 1
|
|
except:
|
|
a = 0
|
|
# plt.subplot(len(datapoints_all), len(restricts), 1+counter)
|
|
grid1 = gridspec.GridSpecFromSubplotSpec(2, 2,
|
|
hspace=0.4,
|
|
wspace=0.2,
|
|
|
|
subplot_spec=
|
|
grid0[counter]) #
|
|
|
|
plt.legend()
|
|
save_visualization()
|
|
plt.show()
|
|
|
|
|
|
def calc_auci_values(array0, array01, array02, array012, way, datapoints, results_diff, mean_nrs='', l=[], features=[],
|
|
name_here=[], mt=[], counter_waves=[], t_off=10, sampling=40000, position_diff=[],
|
|
time_sacrifice=0, id_group=[]):
|
|
if position_diff == []:
|
|
position_diff = len(results_diff)
|
|
|
|
# todo: noch hier das mit Mehrfachen einbauen
|
|
results_diff.loc[position_diff, 'time_sacrifice'] = time_sacrifice
|
|
# embed()
|
|
trials, results_diff, tp_012_all, tp_01_all, tp_02_all, fp_all, roc_01, roc_0, roc_02, roc_012, threshhold = calc_auci_pd(
|
|
results_diff, position_diff, array012, array01, array02, array0, t_off=t_off, way=way, datapoints=datapoints)
|
|
test = False
|
|
if test:
|
|
traces_new(array012, position_diff, array01, way, array02, array0)
|
|
|
|
if len(features) > 0:
|
|
results_diff = feature_extract_cut(mt, l, name_here, results_diff, position_diff, features)
|
|
|
|
results_diff.loc[position_diff, 'datapoints'] = datapoints
|
|
results_diff.loc[position_diff, 'datapoints_time'] = np.round(datapoints / sampling, 3)
|
|
results_diff.loc[position_diff, 'datapoints_way'] = way
|
|
results_diff.loc[position_diff, 'trial_nrs'] = len(roc_01)
|
|
results_diff.loc[position_diff, 'mean_nrs'] = mean_nrs
|
|
results_diff.loc[position_diff, 't_off'] = t_off
|
|
# embed()
|
|
try:
|
|
results_diff = save_structure_to_frame(position_diff, results_diff, np.array(id_group[1]['mt']), name='mt')
|
|
except:
|
|
print(traceback.format_exc())
|
|
embed()
|
|
|
|
results_diff = save_structure_to_frame(position_diff, results_diff, id_group[0], name='g_idx')
|
|
|
|
counter_savename = []
|
|
return threshhold, roc_0, roc_02, roc_012, tp_012_all, tp_01_all, fp_all, tp_02_all, roc_01, results_diff, counter_savename, counter_waves
|
|
|
|
|
|
def concat_rocs(control_02, base_orig, control_01, array_012, datapoints, t_off, start1=True, start2=True):
|
|
# insgesamt habe ich 4 arrays
|
|
roc_012_con = [] # [[]] * len(trials)
|
|
roc_01_con = [] # [[]] * len(trials)
|
|
base_con = [] # [[]] * len(trials)
|
|
roc_02_con = []
|
|
roc2_there = False
|
|
arrays = [array_012, control_02, control_01, base_orig]
|
|
names = ['012', '02', '01', 'base']
|
|
arrays_new = {}
|
|
arrays_last = {}
|
|
# todo: hier noch was machen
|
|
# for a, array in enumerate(arrays):#array_012
|
|
for a, array in enumerate(arrays):
|
|
start1 = True
|
|
for d in range(len(array)):
|
|
# try:
|
|
trials = np.arange(datapoints + t_off, len(array[d]), datapoints + t_off)
|
|
|
|
# except:
|
|
# print('trials problem')
|
|
# embed()
|
|
# trials = np.arange(datapoints + t_off, len(array_012[d]), datapoints + t_off)
|
|
|
|
if len(array[d]) > 0:
|
|
arrays_new[names[a]] = np.split(array[d], trials)
|
|
arrays_new[names[a]] = arrays_new[names[a]][0:-1]
|
|
# embed()
|
|
arrays_new[names[a]] = np.array(arrays_new[names[a]])[:, 0:-t_off]
|
|
# embed()
|
|
# roc_012 = np.split(array_012[d], trials)
|
|
# roc_01 = np.split(control_01[d], trials)
|
|
# base = np.split(base_orig[d], trials)
|
|
|
|
try:
|
|
if (len(arrays_new[names[a]]) != 1):
|
|
if (len(arrays_new[names[a]][-1]) != len(arrays_new[names[a]][-2])):
|
|
arrays_new[names[a]] = arrays_new[names[a]][0:-1]
|
|
# roc_01 = roc_01[0:-1]
|
|
# base = base[0:-1]
|
|
except:
|
|
print('utils func roc to short')
|
|
embed()
|
|
|
|
if start1 == True:
|
|
arrays_last[names[a]] = arrays_new[names[a]]
|
|
# base_con = base
|
|
# roc_01_con = roc_01
|
|
start1 = False
|
|
else:
|
|
try:
|
|
prev = list(arrays_last[names[a]])
|
|
prev.extend(arrays_new[names[a]])
|
|
arrays_last[names[a]] = prev
|
|
# embed()
|
|
except:
|
|
print('array append problem')
|
|
embed()
|
|
|
|
if '012' in arrays_last.keys():
|
|
roc_012_con = arrays_last['012']
|
|
else:
|
|
roc_012_con = []
|
|
|
|
if 'base' in arrays_last.keys():
|
|
base_con = arrays_last['base']
|
|
else:
|
|
base_con = []
|
|
|
|
if '01' in arrays_last.keys():
|
|
roc_01_con = arrays_last['01']
|
|
else:
|
|
roc_01_con = []
|
|
if '02' in arrays_last.keys():
|
|
roc_02_con = arrays_last['02']
|
|
roc2_there = True
|
|
else:
|
|
roc2_there = False
|
|
|
|
return trials, roc2_there, roc_02_con, roc_012_con, roc_01_con, base_con
|
|
|
|
|
|
def calc_auci_pd(results_diff, position_diff, array_012, control_01, control_02, base_orig, add='', t_off=5, way='',
|
|
emb=[], printing=False, datapoints=[], threshhold_step=50, f0='EODf', sampling=40000, nfft=int(4096)):
|
|
## better to not convert to pandas to much especially if it has numerous of columns.. this might take really long!
|
|
time0 = time.time()
|
|
if ('mult' in way): # 'mult_minimum','mult_env', 'mult_f1', 'mult_f2'
|
|
try:
|
|
datapoints = find_env(way, results_diff, position_diff, sampling, datapoints, f0=f0)
|
|
except:
|
|
try:
|
|
f0 = 'f0'
|
|
datapoints = find_env(way, results_diff, position_diff, sampling, datapoints, f0=f0)
|
|
except:
|
|
f0 = 'EODf'
|
|
#embed()
|
|
datapoints = find_env(way, results_diff, position_diff, sampling, datapoints, f0=f0)
|
|
times = 0
|
|
|
|
t1 = time.time()
|
|
trials, roc2_there, roc_02_con, roc_012_con, roc_01_con, base_con = concat_rocs(control_02, base_orig, control_01,
|
|
|
|
array_012, datapoints, t_off,
|
|
start2=True)
|
|
# print(way)
|
|
# print(datapoints)
|
|
if printing:
|
|
print('ROC0' + str(time.time() - t1))
|
|
# embed()
|
|
t1 = time.time()
|
|
# embed()
|
|
tp_02, tp_01, tp_012, fp_base, threshhold = threshold_roc(threshhold_step, roc2_there, base_con, roc_01_con,
|
|
roc_02_con,
|
|
roc_012_con)
|
|
|
|
if printing:
|
|
print('ROC1' + str(time.time() - t1))
|
|
|
|
t1 = time.time()
|
|
|
|
tp_012_all = np.mean(tp_012, axis=0)
|
|
tp_01_all = np.mean(tp_01, axis=0)
|
|
fp_base_all = np.mean(fp_base, axis=0)
|
|
if roc2_there == True:
|
|
tp_02_all = np.mean(tp_02, axis=0)
|
|
else:
|
|
tp_02_all = []
|
|
|
|
results_diff, names_present, names_present_real = calc_auc_diff(tp_02_all, add, results_diff, position_diff,
|
|
tp_012_all, fp_base_all, tp_01_all, tp_02,
|
|
roc2_there)
|
|
if printing:
|
|
print('ROC2' + str(time.time() - t1))
|
|
|
|
t1 = time.time()
|
|
if roc2_there == True:
|
|
results_diff.loc[position_diff, 'auc_' + '02' + '_' + '01' + add] = metrics.auc(tp_02_all, tp_01_all)
|
|
results_diff.loc[position_diff, 'auci_' + '02' + '_' + '01' + add] = np.abs(
|
|
np.asarray(results_diff.loc[position_diff, 'auc_' + '02' + '_' + '01' + add]) - 0.5)
|
|
names_present_real.append('02' + '_' + '01')
|
|
try:
|
|
_, interp = interp_arrays(fp_base_all, tp_02_all, step=0.05)
|
|
except:
|
|
print('Interp line 6662')
|
|
embed()
|
|
# try:
|
|
results_diff = save_structure_to_frame(position_diff, results_diff, interp, name='base_02' + add, double=False)
|
|
_, interp = interp_arrays(tp_02_all, tp_012_all, step=0.05)
|
|
results_diff = save_structure_to_frame(position_diff, results_diff, interp, name='02_012' + add, double=False)
|
|
# except:
|
|
# print('settng elemnt with a sequence')
|
|
# embed()
|
|
try:
|
|
_, interp = interp_arrays(fp_base_all, tp_01_all, step=0.05)
|
|
except:
|
|
print('interp fp_base_all in utils_func')
|
|
embed()
|
|
test = False
|
|
if test:
|
|
fig, ax = plt.subplots(4, 1, sharex=True)
|
|
ax[0].plot(control_02[0])
|
|
ax[1].plot(control_01[0])
|
|
ax[2].plot(array_012[0])
|
|
ax[3].plot(base_orig[0])
|
|
# embed()
|
|
results_diff = save_structure_to_frame(position_diff, results_diff, interp, name='base_01' + add, double=False)
|
|
time_array, interp = interp_arrays(tp_01_all, tp_012_all, step=0.05)
|
|
results_diff = save_structure_to_frame(position_diff, results_diff, interp, name='01_012' + add, double=False)
|
|
results_diff = save_structure_to_frame(position_diff, results_diff, interp, name='time_array' + add, double=False)
|
|
if printing:
|
|
print('ROC3' + str(time.time() - t1))
|
|
|
|
t1 = time.time()
|
|
diff_tuples = [
|
|
['base_012', 'base_02'],
|
|
['base_012', 'base_01'],
|
|
['02_012', 'base_02'],
|
|
['01_012', 'base_01'],
|
|
['02_012', 'base_01'],
|
|
['01_012', 'base_02'],
|
|
['01_02', 'base_01'],
|
|
['02_01', 'base_02']
|
|
]
|
|
|
|
for diff_tuple in diff_tuples:
|
|
if ('auc_' + diff_tuple[0] + add in results_diff.keys()) and (
|
|
'auc_' + diff_tuple[1] + add in results_diff.keys()):
|
|
results_diff.loc[position_diff, 'auc_' + diff_tuple[0] + '-' + 'auc_' + diff_tuple[1] + add] = \
|
|
results_diff.loc[position_diff, 'auc_' + diff_tuple[0] + add] - results_diff.loc[
|
|
position_diff, 'auc_' + diff_tuple[1] + add]
|
|
results_diff.loc[position_diff, 'auci' + diff_tuple[0] + '-' + 'auci_' + diff_tuple[1] + add] = \
|
|
results_diff.loc[position_diff, 'auci_' + diff_tuple[0] + add] - results_diff.loc[
|
|
position_diff, 'auci_' + diff_tuple[1] + add]
|
|
if printing:
|
|
print('ROC4' + str(time.time() - t1))
|
|
plot = False
|
|
if plot:
|
|
plot_roc_in_function(tp_02_all, array_all, t, eod_fe, e, eod_fr, eod_fj, j, fpr, tpr,
|
|
tp_012_all, fp_base_all, tp_01_all)
|
|
|
|
if emb:
|
|
embed()
|
|
return trials, results_diff, tp_012_all, tp_01_all, tp_02_all, fp_base_all, roc_01_con, base_con, roc_02_con, roc_012_con, threshhold
|
|
|
|
|
|
def threshold_roc(threshhold_step, roc2_there, base_con, roc_01_con, roc_02_con, roc_012_con):
|
|
if roc2_there == True:
|
|
max_arrays = np.concatenate([np.nanmax(base_con, axis=1),
|
|
np.nanmax(roc_012_con, axis=1),
|
|
np.nanmax(roc_01_con, axis=1),
|
|
np.nanmax(roc_02_con, axis=1)])
|
|
|
|
else:
|
|
try:
|
|
max_arrays = np.concatenate([np.nanmax(base_con, axis=1),
|
|
np.nanmax(roc_012_con, axis=1),
|
|
np.nanmax(roc_01_con, axis=1)])
|
|
except:
|
|
print('base_con problem')
|
|
embed()
|
|
higher_max = np.nanmax(max_arrays)
|
|
lower_max = np.nanmin(max_arrays)
|
|
|
|
threshhold = np.linspace(0.97 * lower_max,
|
|
1.02 * higher_max,
|
|
threshhold_step)
|
|
# if lower_max == higher_max:
|
|
# print('lower and higher max')
|
|
# embed()
|
|
|
|
try:
|
|
tp_012 = np.transpose(
|
|
[np.max(roc_012_con, axis=1)] * len(threshhold) > np.transpose(
|
|
[threshhold] * len(np.max(roc_012_con, axis=1))))
|
|
tp_01 = np.transpose([np.max(roc_01_con, axis=1)] * len(threshhold) > np.transpose(
|
|
[threshhold] * len(np.max(roc_01_con, axis=1))))
|
|
fp_base = np.transpose([np.max(base_con, axis=1)] * len(threshhold) > np.transpose(
|
|
[threshhold] * len(np.max(base_con, axis=1))))
|
|
except:
|
|
print('threshold in utils_func')
|
|
# print('ROC' + str(time.time() - t1))
|
|
|
|
if roc2_there == True:
|
|
tp_02 = np.transpose([np.max(roc_02_con, axis=1)] * len(threshhold) > np.transpose(
|
|
[threshhold] * len(np.max(roc_02_con, axis=1))))
|
|
else:
|
|
tp_02 = []
|
|
# embed()
|
|
return tp_02, tp_01, tp_012, fp_base, threshhold
|
|
|
|
|
|
def calc_auc_diff(tp_02_all, add, results_diff, position_diff, tp_012_all, fp_base_all, tp_01_all, tp_02, roc2_there):
|
|
time1 = time.time()
|
|
if roc2_there == True:
|
|
# tp_02_all = np.mean(tp_02, axis=0)
|
|
auc_names = ['base', '01', '02', '012', ]
|
|
auc_array = [fp_base_all, tp_01_all, tp_02_all, tp_012_all]
|
|
else:
|
|
# tp_02_all = []
|
|
auc_names = ['base', '01', '012', ]
|
|
auc_array = [fp_base_all, tp_01_all, tp_012_all]
|
|
|
|
counter_a = 0
|
|
names_present = []
|
|
names_present_real = []
|
|
for a in range(len(auc_array)):
|
|
for aa in range(0, len(auc_array), 1):
|
|
if auc_names[a] != auc_names[aa]:
|
|
if auc_names[a] + '_' + auc_names[aa] not in names_present:
|
|
# plt.title('auci_' + str(auc_names[a]) + '_' + auc_names[aa])
|
|
names_present.append(str(auc_names[a]) + '_' + auc_names[aa])
|
|
names_present.append(str(auc_names[aa]) + '_' + auc_names[a])
|
|
names_present_real.append(str(auc_names[a]) + '_' + auc_names[aa])
|
|
results_diff = results_diff.copy()
|
|
results_diff.loc[position_diff, 'auc_' + auc_names[a] + '_' + auc_names[aa] + add] = metrics.auc(
|
|
auc_array[a], auc_array[aa])
|
|
results_diff.loc[position_diff, 'auci_' + auc_names[a] + '_' + auc_names[aa] + add] = np.abs(
|
|
np.asarray(
|
|
results_diff.loc[position_diff, 'auc_' + auc_names[a] + '_' + auc_names[aa] + add]) - 0.5)
|
|
# results_diff.loc[position_diff, 'auc_'+auc_names[aa]+'_'+auc_names[a]] = metrics.auc(auc_array[aa], auc_array[a])
|
|
# results_diff.loc[position_diff, 'auci_' + auc_names[aa] + '_' + auc_names[a]] = np.abs(np.asarray(results_diff.loc[position_diff, 'auc_'+auc_names[aa]+'_'+auc_names[a]]) - 0.5)
|
|
counter_a += 1
|
|
return results_diff, names_present, names_present_real
|
|
|
|
|
|
def plot_roc_in_function(tp_02_all, array_all, t, eod_fe, e, eod_fr, eod_fj, j, fpr, tpr, tp_012_all, fp_base_all,
|
|
tp_01_all):
|
|
plt.title('fe' + str(eod_fe[e]) + 'Hz fj' + str(
|
|
eod_fj[j]) + 'Hz fr ' + str(eod_fr) + 'Hz')
|
|
plt.subplot(2, 3, 1)
|
|
plt.title('012')
|
|
plt.plot(array_all['012'][t], color='red')
|
|
plt.subplot(2, 3, 2)
|
|
plt.title('01')
|
|
plt.plot(array_all['control_01'][t], color='blue')
|
|
plt.subplot(2, 3, 3)
|
|
plt.plot(array_all['012'][t], color='red')
|
|
plt.plot(array_all['control_01'][t], color='blue')
|
|
plt.subplot(2, 3, 4)
|
|
plt.plot(fpr, tpr)
|
|
plt.subplot(2, 3, 5)
|
|
plt.hist(array_all['012'][t], bins=100, color='red')
|
|
plt.hist(array_all['control_01'][t], bins=100, color='blue')
|
|
plt.subplot(2, 3, 6)
|
|
plt.plot(np.sort(array_all['012'][t]))
|
|
plt.plot(np.sort(array_all['control_01'][t]))
|
|
plt.show()
|
|
plt.subplot(3, 1, 1)
|
|
plt.plot(fp_base_all, tp_012_all)
|
|
plt.subplot(3, 1, 2)
|
|
plt.plot(fp_base_all, tp_01_all) #
|
|
plt.subplot(3, 1, 3)
|
|
plt.plot(fp_base_all, tp_02_all)
|
|
plt.show()
|
|
|
|
|
|
def calc_baseline_char(spike_adapted, stimulus_length, trials_nr_base, data_restrict=[], burst_corr=False, emb=False):
|
|
if emb:
|
|
embed()
|
|
fr = len(np.concatenate(spike_adapted)) / (stimulus_length * trials_nr_base)
|
|
# frate, isis_diff = ISI_frequency(time_array, spike_adapted[0], fill=0.0)
|
|
if len(data_restrict) > 0:
|
|
max_pos = np.argmax(data_restrict)
|
|
isi = np.diff(spike_adapted[max_pos])
|
|
lenghts = []
|
|
|
|
# if len(isi)< 1:
|
|
# isi = np.diff(spike_adapted[int(len(data_restrict)/2)])
|
|
else:
|
|
isi = np.diff(spike_adapted[0])
|
|
if len(isi) < 3:
|
|
for i in range(len(spike_adapted)):
|
|
# lenghts.append(len(spike_adapted[i]))
|
|
if len(spike_adapted[i]) > 2:
|
|
isi = np.diff(spike_adapted[i])
|
|
if len(isi) > 1:
|
|
std_isi = np.std(isi)
|
|
mean_isi = np.mean(isi)
|
|
cv0 = std_isi / mean_isi
|
|
try:
|
|
ser0, ser_first, sum_corr = calc_serial(isi)
|
|
except:
|
|
print('ser problem')
|
|
embed()
|
|
else:
|
|
cv0 = np.float('nan')
|
|
ser0 = np.float('nan')
|
|
std_isi = np.float('nan')
|
|
mean_isi = np.float('nan')
|
|
ser_first = np.float('nan')
|
|
sum_corr = np.float('nan')
|
|
return mean_isi, std_isi, fr, isi, cv0, ser0, ser_first, sum_corr
|
|
|
|
|
|
def find_group_variants(grouped_mean, groups_variants, start=15, steps=10, ranges=[]):
|
|
if len(ranges) < 1:
|
|
# split in groups of ten the trials
|
|
ranges = np.arange(start, len(grouped_mean), steps)
|
|
for rr in range(len(ranges)):
|
|
# das hier geht über die ranges und sagt wie viele einträge jeweils in einer gruppe sein sollen
|
|
# das sind sozusagen unterkategorien von means
|
|
# np.shape(groups_variants[0])
|
|
# so würde das zum bespeil das gruppieren
|
|
# Out[36]: (2, 15, 18523)
|
|
# In [37]: np.shape(groups_variants[1])
|
|
# Out[37]: (1, 25, 18523)
|
|
# In [38]: np.shape(groups_variants[2])
|
|
# Out[38]: (1, 35, 18523)
|
|
|
|
splits = np.arange(ranges[rr], len(grouped_mean), ranges[rr])
|
|
splits_done = np.split(grouped_mean, splits)
|
|
if len(splits_done[-1]) != ranges[rr]:
|
|
splits_done = splits_done[0:-1]
|
|
splits_append = splits_done
|
|
# splits_append = [[[]] * len(splits_done), splits_done]
|
|
groups_variants.append(splits_append)
|
|
# embed()
|
|
return groups_variants
|
|
|
|
|
|
def plot_second_roc(ax1, fig, array1, array2_0, array2_1, time_interp, results_diff, names1_0, names1_1, names2_0,
|
|
names2_1, add_name='', lw=0.2, arrow=True, arrow2=True, pos=[1, -0.45], add=0.1):
|
|
if arrow:
|
|
ax1.annotate('', ha='center',
|
|
xy=(1, 0.5),
|
|
xytext=(1.4, 0.5),
|
|
arrowprops={"arrowstyle": "->",
|
|
"linestyle": "-",
|
|
"linewidth": 3,
|
|
"color":
|
|
'black'},
|
|
zorder=1)
|
|
fig.texts.append(ax1.texts.pop())
|
|
time_interp, array2 = interp_arrays(array2_0[::-1], array2_1[::-1], step=0.01)
|
|
auc1 = np.round(
|
|
results_diff.iloc[-1][
|
|
'auci_' + str(
|
|
names1_0) + '_' +
|
|
names1_1 + add_name] * 100) / 100
|
|
auc2 = np.round(
|
|
results_diff.iloc[-1][
|
|
'auci_' + str(names2_0) + '_' +
|
|
names2_1 + add_name] * 100) / 100
|
|
auci_diff = np.round((auc1 - auc2) * 100) / 100
|
|
auci_label = 'auci ' + str(auc1) + '-' + str(auc2) + '=' + str(auci_diff)
|
|
auc1 = np.round(
|
|
results_diff.iloc[-1][
|
|
'auc_' + str(names1_0) + '_' + names1_1 + add_name] * 100) / 100
|
|
auc2 = np.round(
|
|
results_diff.iloc[-1][
|
|
'auc_' + str(names2_0) + '_' + names2_1 + add_name] * 100) / 100
|
|
auc_diff = np.round((auc1 - auc2) * 100) / 100
|
|
auc_label = 'auc ' + str(
|
|
auc1) + '-' + str(auc2) + '=' + str(
|
|
auc_diff)
|
|
|
|
if auc_diff > 0:
|
|
ax1.text(pos[0], pos[1] - add, auc_label, fontsize=10, transform=ax1.transAxes, color='red')
|
|
plt.fill_between(time_interp,
|
|
array2,
|
|
array1,
|
|
color='red', alpha=0.5)
|
|
ypos1 = array2[int(len(time_interp) / 2)]
|
|
ypos2 = array1[int(len(time_interp) / 2 - 5)]
|
|
xpos1 = time_interp[int(len(time_interp) / 2)]
|
|
xpos2 = time_interp[int(len(time_interp) / 2 - 5)]
|
|
mod = np.sqrt((ypos2 - ypos1) ** 2 + (xpos2 - xpos1) ** 2)
|
|
print(arrow)
|
|
|
|
if (arrow2 == True):
|
|
# embed()
|
|
if (mod > 0.1):
|
|
ax1.annotate('', ha='center', xy=(xpos1,
|
|
ypos1),
|
|
xytext=(xpos2,
|
|
ypos2), arrowprops={
|
|
"arrowstyle": "<-",
|
|
"linestyle": "-",
|
|
"linewidth": 1,
|
|
"color":
|
|
'black'}, zorder=1)
|
|
else:
|
|
ax1.text(pos[0], pos[1] - add, auc_label,
|
|
fontsize=10,
|
|
transform=ax1.transAxes,
|
|
color='blue')
|
|
plt.fill_between(time_interp,
|
|
array2,
|
|
array1,
|
|
color='blue', alpha=0.5)
|
|
|
|
ypos1 = array1[
|
|
int(len(time_interp) / 2)]
|
|
ypos2 = array2[
|
|
int(len(time_interp) / 2 - 5)]
|
|
xpos1 = time_interp[
|
|
int(len(time_interp) / 2)]
|
|
xpos2 = time_interp[
|
|
int(len(time_interp) / 2 - 5)]
|
|
|
|
mod = np.sqrt((ypos2 - ypos1) ** 2 + (
|
|
xpos2 - xpos1) ** 2)
|
|
if (arrow2 == True):
|
|
# embed()
|
|
if mod > 0.1:
|
|
ax1.annotate('', ha='center', xy=(xpos1, ypos1), xytext=(xpos2, ypos2),
|
|
arrowprops={"arrowstyle": "->",
|
|
"linestyle": "-",
|
|
"linewidth": 1,
|
|
"color":
|
|
'black'}, zorder=1)
|
|
if auci_diff > 0:
|
|
ax1.text(pos[0], pos[1], auci_label, fontsize=10, transform=ax1.transAxes, color='red') # transform
|
|
else:
|
|
ax1.text(pos[0], pos[1], auci_label,
|
|
fontsize=10,
|
|
transform=ax1.transAxes,
|
|
color='blue') # transform
|
|
plt.plot(time_interp, array2,
|
|
color='black') # label=auci_label,
|
|
# embed()
|
|
|
|
|
|
def plot_rocs(fig, ax, counter_a, auc_names, a, auc_names1, fp_arrays, tp_arrays, results_diff, names, names1,
|
|
counter1=0, counter2=2, legend=True, roc_color=[], alpha=1, lw=0.3, emb=False, second_roc=True,
|
|
arrow=True, pos=[1, -0.45], add=-0.1, add_name=''):
|
|
if emb:
|
|
embed()
|
|
fp_array = fp_arrays[a]
|
|
if len(tp_arrays) > 0:
|
|
tp_array = tp_arrays[a]
|
|
fp, tp = interp_arrays(fp_array[::-1], tp_array[::-1], step=0.01)
|
|
else:
|
|
tp_array = []
|
|
fp = []
|
|
tp = []
|
|
|
|
if (counter_a == counter1) or (counter_a == counter2):
|
|
if (counter_a == 0) or (counter_a == 2):
|
|
array2_0 = fp_arrays[a + 1]
|
|
else:
|
|
array2_0 = fp_arrays[a - 1]
|
|
|
|
if len(tp_arrays) > 0:
|
|
##############################
|
|
# je nach dem ob man das mit dem vorhergehenden oder nachkommenden array vergleicht
|
|
if (counter_a == 0) or (counter_a == 2):
|
|
array2_1 = tp_arrays[a + 1]
|
|
else:
|
|
array2_1 = tp_arrays[a - 1]
|
|
else:
|
|
array2_1 = []
|
|
if len(roc_color) > 0:
|
|
color = roc_color
|
|
else:
|
|
color = 'purple'
|
|
# color_condition_roc = roc_color
|
|
ax.plot(fp, tp,
|
|
color=color, linewidth=lw, alpha=alpha, label=(np.round(results_diff.iloc[-1][
|
|
'auci_' + str(auc_names[a]) + '_' +
|
|
auc_names1[
|
|
a] + add_name] * 100) / 100)) # label=auci_label,
|
|
|
|
if second_roc:
|
|
if (counter_a == 0) or (counter_a == 2):
|
|
plot_second_roc(ax, fig, tp, array2_0, array2_1, fp, results_diff, auc_names[a], auc_names1[
|
|
a], auc_names[a + 1], auc_names1[a + 1], pos=pos, linewidth=lw, add=add, add_name=add_name,
|
|
arrow=arrow)
|
|
else:
|
|
plot_second_roc(ax, fig, tp, array2_0, array2_1, fp, results_diff, auc_names[a], auc_names1[
|
|
a], auc_names[a - 1], auc_names1[a - 1], pos=pos, linewidth=lw, add=add, add_name=add_name,
|
|
arrow=arrow)
|
|
else:
|
|
if len(roc_color) > 0:
|
|
color = roc_color
|
|
else:
|
|
color = 'black'
|
|
ax.plot(fp, tp,
|
|
label=(np.round(results_diff.iloc[-1][
|
|
'auci_' + str(names) + '_' + names1 + add_name] * 100) / 100),
|
|
color=color, linewidth=lw, alpha=alpha)
|
|
if legend:
|
|
plt.legend()
|
|
|
|
ax.plot([0, 1], [0, 1], color='grey',
|
|
linestyle='--', linewidth=0.5)
|
|
|
|
|
|
def find_c_unique(name0, contrastc2, contrastc1, ):
|
|
c1_uniques = []
|
|
c2_uniques = []
|
|
combinations = []
|
|
# for m in range(len(mean_types)):
|
|
# for c in range(len(chirps)):
|
|
# embed()
|
|
# name0, save_name_all = load_three_fish_savename(mean_types[0], chirps[0], mult_type, eodftype, indices[1],
|
|
# cell, extract)
|
|
dir_version = find_all_threewave_versions()
|
|
# embed()
|
|
if os.path.exists(name0):
|
|
spikes_o = pd.read_pickle(name0)
|
|
# spikes_o[contrastc1,contrastc2]
|
|
combinations = spikes_o.groupby(
|
|
[contrastc1, contrastc2]).groups.keys() # [[contrastc1,contrastc2]].unique()
|
|
c2_unique = spikes_o[contrastc2].unique()
|
|
c1_unique = spikes_o[contrastc1].unique()
|
|
# embed()
|
|
c1_uniques.append(c1_unique)
|
|
c2_uniques.append(c2_unique)
|
|
c1_unique = np.unique(c1_uniques)[::-1]
|
|
c2_unique = np.unique(c2_uniques)[::-1]
|
|
return c2_unique, c1_unique, combinations
|
|
|
|
|
|
def find_all_threewave_versions():
|
|
dirs = os.listdir(load_folder_name('threefish'))
|
|
dir_version = []
|
|
sizes = []
|
|
for dir in dirs:
|
|
if 'invivo' not in dir:
|
|
if ('DetectionAnalysis' not in dir) & ('pdf' not in dir) & ('png' not in dir) & ('AllTrials' in dir):
|
|
# if chirps[0] in dir:
|
|
# if indices[1] in dir:if eodftype in dir:if mult_type in dir:
|
|
dir_version.append(dir)
|
|
sizes.append(os.path.getsize(load_folder_name('threefish') + '/' + dir))
|
|
dir_version = np.array(dir_version)
|
|
dir_version = dir_version[np.argsort(sizes)[::-1]]
|
|
sizes = np.sort(sizes)[::-1]
|
|
return dir_version, sizes
|
|
|
|
def get_fish_number(b, mt_group, mean_type):
|
|
mt_list = mt_group[1]['mt']
|
|
# todo: da könnte man noch die schleife rausnehmen
|
|
for mt_idx, mt_nr in enumerate(list(map(int, mt_list))): # range(start_l, len(mt.positions[:]))
|
|
repro_position = mt_nr
|
|
features, mt, name_here, l = get_mt_features3(b, mt_group, mt_idx)
|
|
# somehow we have mts with negative extend, we exclude these
|
|
if (mt.extents[:][mt_nr] > 0).any():
|
|
|
|
t1 = time.time()
|
|
_, _, _, _, fish_number, fish_cuts, whole_duration, cont = load_durations(mt_nr, mt, mt_group[1], mt_idx,
|
|
mean_type=mean_type, emb=False)
|
|
delay = np.abs(fish_cuts[0])
|
|
if cont:
|
|
contrast1 = mt_group[1]['c1'].iloc[
|
|
mt_idx] # mt_group[1]['c1'].loc[indices[mt_idx]] # mt.metadata.sections[0]['fish1alone']['Contrast']
|
|
contrast2 = mt_group[1]['c2'].iloc[mt_idx] # mt.metadata.sections[0]['fish2alone']['Contrast']
|
|
return fish_cuts, whole_duration, delay, contrast1, contrast2, repro_position
|
|
|
|
|
|
def model_and_data_isi(nr_clim=10, many=False, width=0.005, row='no', HZ50=True, fs=8, hs=0.39, redo=False,
|
|
nffts=['whole'],
|
|
powers=[1], cells=["2013-01-08-aa-invivo-1"], col_desired=2, var_items=['contrasts'], show=False,
|
|
contrasts=[0], noises_added=[''], fft_i='forward', fft_o='forward', spikes_unit='Hz',
|
|
mV_unit='mV',
|
|
D_extraction_method=['additiv_cv_adapt_factor_scaled'], internal_noise=['RAM'],
|
|
external_noise=['RAM'], level_extraction=[''], cut_off2=300,
|
|
repeats=[1000000],
|
|
receiver_contrast=[1], dendrids=[''], ref_types=[''], adapt_types=[''], c_noises=[0.1],
|
|
c_signal=[0.9],
|
|
cut_offs1=[300], clims='all', restrict='restrict',
|
|
label=r'$\frac{1}{mV^2S}$'): # ['eRAM']
|
|
# plot_style()#['_RAMscaled']'_RAMscaled'
|
|
|
|
duration_noise = '_short',
|
|
formula = 'code' ##'formula'
|
|
# ,int(2 ** 16) int(2 ** 16), int(2 ** 15),
|
|
stimulus_length = 1 # 20#550 # 30 # 15#45#0.5#1.5 15 45 100
|
|
trials_nrs = [1] # [100, 500, 1000, 3000, 10000, 100000, 1000000] # 500
|
|
stimulus_type = '_StimulusOrig_' # ,#
|
|
# ,3]#, 3, 1, 1.5, 0.5, ] # ,1,1.5, 0.5] #[1,1.5, 0.5] # 1.5,0.5]3, 1,
|
|
variant = 'sinz'
|
|
mimick = 'no'
|
|
cell_recording_save_name = ''
|
|
trans = 1 # 5
|
|
rep = 500000 # 500000#0
|
|
repeats = [20, rep] # 250000
|
|
aa = 0
|
|
good_data, remaining = overlap_cells()
|
|
cells_all = good_data
|
|
|
|
default_settings(column=2, length=4.9) # 0.75
|
|
grid = gridspec.GridSpec(1, 4, wspace=0.95, bottom=0.115,
|
|
hspace=0.13, left=0.04, right=0.9, top=0.92, width_ratios=[0.7, 1, 1, 1])
|
|
|
|
a = 0
|
|
maxs = []
|
|
mins = []
|
|
ims = []
|
|
perc05 = []
|
|
perc95 = []
|
|
iternames = [D_extraction_method, external_noise,
|
|
internal_noise, powers, nffts, dendrids, cut_offs1, trials_nrs, c_signal,
|
|
c_noises,
|
|
ref_types, adapt_types, noises_added, level_extraction, receiver_contrast, contrasts, ]
|
|
|
|
nr = '2'
|
|
# embed()
|
|
cell_contrasts = ["2013-01-08-aa-invivo-1"]
|
|
cells_triangl_contrast = np.concatenate([cells_all, cell_contrasts])
|
|
rows = len(good_data) + len(cell_contrasts)
|
|
perc = 'perc'
|
|
lp = 10
|
|
# embed()
|
|
label_model = r'Nonlinearity $\frac{1}{S}$'
|
|
for all in it.product(*iternames):
|
|
|
|
var_type, stim_type_afe, stim_type_noise, power, nfft, dendrid, cut_off1, trial_nrs, c_sig, c_noise, ref_type, adapt_type, noise_added, extract, a_fr, a_fe = all
|
|
# print(trials_stim,stim_type_noise, power, nfft, a_fe,a_fr, dendrid, var_type, cut_off1,trial_nrs)
|
|
fig = plt.figure()
|
|
|
|
hs = 0.45
|
|
|
|
#################################
|
|
# model cells
|
|
|
|
adapt_type_name, ax_model, cells_all, dendrid_name, ref_type_name, suptitles, width = plt_model_part(HZ50, a,
|
|
a_fe, a_fr,
|
|
adapt_type,
|
|
c_noise,
|
|
c_sig,
|
|
cell_recording_save_name,
|
|
cells_all,
|
|
cut_off1,
|
|
cut_off2,
|
|
dendrid,
|
|
duration_noise,
|
|
extract,
|
|
fft_i,
|
|
fft_o, fig,
|
|
formula,
|
|
fs,
|
|
grid, hs,
|
|
ims,
|
|
mV_unit,
|
|
many, maxs,
|
|
mimick,
|
|
mins, nfft,
|
|
noise_added,
|
|
nr, perc05,
|
|
perc95,
|
|
power,
|
|
ref_type,
|
|
repeats,
|
|
spikes_unit,
|
|
stim_type_afe,
|
|
stim_type_noise,
|
|
stimulus_length,
|
|
stimulus_type,
|
|
trans,
|
|
trial_nrs,
|
|
var_items,
|
|
var_type,
|
|
variant,
|
|
width,
|
|
label=label_model,
|
|
rows=rows,
|
|
perc=perc,
|
|
xlabels=False,
|
|
title=False)
|
|
|
|
#################################
|
|
# data cells
|
|
# embed()
|
|
grid_data = gridspec.GridSpecFromSubplotSpec(rows, 1, grid[1],
|
|
hspace=hs)
|
|
print('here')
|
|
# embed()
|
|
ax_data, stack_spikes_all, eod_frs = plt_data_susept(fig, grid_data, cells_all, cell_type='p-unit', width=width,
|
|
cbar_label=False, lp=lp, title=False)
|
|
for ax in ax_data: #
|
|
# ax.set_ylabel(F2_xlabel())
|
|
remove_xticks(ax)
|
|
ax.set_xticks_delta(100)
|
|
ax.text(-0.42, 0.87, F2_xlabel(), ha='center', va='center',
|
|
transform=ax.transAxes, rotation=90)
|
|
ax.text(1.66, 0.5, nonlin_title(), rotation=90, ha='center', va='center',
|
|
transform=ax.transAxes)
|
|
|
|
ax.arrow_spines('lb')
|
|
#################################
|
|
# plt isi of data
|
|
grid_isi = gridspec.GridSpecFromSubplotSpec(rows, 1, grid[0],
|
|
hspace=hs)
|
|
# embed()
|
|
|
|
spikes_type = 'base'
|
|
if spikes_type == 'base':
|
|
ax_isi = []
|
|
|
|
for f, cell in enumerate(cells_triangl_contrast):
|
|
######################################################
|
|
# frame = load_cv_base_frame(good_data, cell_type_type='cell_type_reclassified')
|
|
frame, frame_spikes = load_cv_vals_susept(cells_triangl_contrast, EOD_type='synch',
|
|
names_keep=['spikes', 'gwn', 'fs', 'EODf', 'cv', 'fr',
|
|
'width_75', 'vs',
|
|
'cv_burst_corr_individual',
|
|
'fr_burst_corr_individual',
|
|
'width_75_burst_corr_individual',
|
|
'vs_burst_corr_individual',
|
|
'cell_type_reclassified',
|
|
'cell'],
|
|
path_sp='/calc_base_data-base_frame_overview.pkl',
|
|
frame_general=False)
|
|
# embed()
|
|
cell_type, eod_fr, fr, frs_calc, isi, spikes, spikes_all = get_base_params(cell,
|
|
'cell_type_reclassified',
|
|
frame)
|
|
|
|
spikes_base, isi, frs_calc, cont_spikes = load_spikes(spikes, eod_fr)
|
|
|
|
ax = plt.subplot(grid_isi[f])
|
|
colors = colors_overview()
|
|
plt_susept_isi_base(f, cell_type, good_data, colors[cell_type], ax, isi, delta=5, xlim=[0, 15],
|
|
ypos=-0.15, clip_on=True)
|
|
# ax.set_title(cell)#
|
|
ax_isi.append(ax)
|
|
|
|
else:
|
|
ax_isi = plt_isi(cells_all, grid_isi, stack_spikes=stack_spikes_all, eod_frs=eod_frs)
|
|
|
|
######################################################################
|
|
print('started model contrasts')
|
|
# hier das mit den Kontrasten
|
|
# ok der code ist jetzt halt complex, aber den hab ich jetzt halt schon
|
|
# daraus wollen wir so eine Übersicht machen
|
|
params_ext = {'level_extraction': ['_extractVdent', '_RAMdadjusted', '_RAMadjusted', '']} # '_RAMscaled',
|
|
params_rp = {'repeats': [30, 1000, 10000, 1000000]}
|
|
params_c = {'contrasts': [0, 0.01, 0.025]} # 0.01,
|
|
# default_settings(column = 2, length = 7)
|
|
def_repeats = [1000000]
|
|
def_repeats = [rep]
|
|
def_contrasts = [0]
|
|
def_D_extraction_method = ['additiv_cv_adapt_factor_scaled'] # ich glaube das müsste es sein
|
|
def_D_extraction_method = ['additiv_visual_d_4_scaled']
|
|
|
|
# def_level_extraction = ['_RAMdadjusted']
|
|
# {'level_extraction': [params_ext['level_extraction'][0]],'repeats':def_repeats, 'contrasts': def_contrasts, 'D_extraction_method':def_D_extraction_method},
|
|
# {'level_extraction': [params_ext['level_extraction'][1]],'repeats':def_repeats, 'contrasts': def_contrasts, 'D_extraction_method':def_D_extraction_method},
|
|
# {'level_extraction': [params_ext['level_extraction'][2]],'repeats':def_repeats, 'contrasts': def_contrasts, 'D_extraction_method':def_D_extraction_method},
|
|
# {'level_extraction': [params_ext['level_extraction'][3]],'repeats':def_repeats, 'contrasts': def_contrasts, 'D_extraction_method':def_D_extraction_method}
|
|
params = [
|
|
{'level_extraction': level_extraction, 'repeats': def_repeats, 'contrasts': [params_c['contrasts'][0]],
|
|
'D_extraction_method': D_extraction_method},
|
|
{'level_extraction': level_extraction, 'repeats': def_repeats, 'contrasts': [params_c['contrasts'][1]],
|
|
'D_extraction_method': D_extraction_method},
|
|
{'level_extraction': level_extraction, 'repeats': def_repeats, 'contrasts': [params_c['contrasts'][2]],
|
|
'D_extraction_method': D_extraction_method},
|
|
|
|
]
|
|
axes_contrast = []
|
|
for a in range(3):
|
|
grid_model = gridspec.GridSpecFromSubplotSpec(rows, 1, grid[1 + a], hspace=hs)
|
|
ax = plt.subplot(grid_model[-1])
|
|
axes_contrast.append(ax)
|
|
# embed()
|
|
plt_squares_special(params, col_desired=3, var_items=['contrasts', 'repeats', 'level_extraction'], clims='',
|
|
show=False, width=width, share=False, cells_given=[cells_all.iloc[0]], perc=perc,
|
|
internal_noise=internal_noise, external_noise=external_noise, lp=lp, ax=axes_contrast,
|
|
label='', new_plot=False,
|
|
titles_plot=False) # 'D_extraction_method','all'"2013-01-08-aa-invivo-1"
|
|
|
|
print('finished model contrasts')
|
|
for a, ax in enumerate(axes_contrast):
|
|
grid_model = gridspec.GridSpecFromSubplotSpec(rows, 1, grid[1 + a], hspace=hs)
|
|
# ax = plt.subplot(grid_model[-1])
|
|
# axes_contrast.append(ax)
|
|
if a == 0:
|
|
ax_data.append(ax)
|
|
ax.text(-0.42, 0.87, F2_xlabel(), ha='center', va='center',
|
|
transform=ax.transAxes, rotation=90)
|
|
elif a == 1:
|
|
# embed()
|
|
ax_model.insert(2, ax)
|
|
else:
|
|
ax_model.append(ax)
|
|
|
|
if a != 0:
|
|
remove_yticks(ax)
|
|
ax.text(1.05, -0.25, F1_xlabel(), ha='center', va='center',
|
|
transform=ax.transAxes)
|
|
ax.arrow_spines('lb')
|
|
ax.set_xlabel('')
|
|
ax.set_ylabel('')
|
|
if a == 2:
|
|
ax.text(1.5, 0.5, label_model, rotation=90, ha='center', va='center',
|
|
transform=ax.transAxes)
|
|
# if cbar_label:
|
|
# cbar.set_label(nonlin_title(), rotation=90, labelpad=10)
|
|
###################################################################
|
|
|
|
# axes.join
|
|
ax_isi[0].get_shared_x_axes().join(*ax_isi)
|
|
|
|
end_name = suptitles + ' a_fr=' + str(a_fr) + ' ' + ' dendride=' + str(
|
|
dendrid_name) + ' refractory period=' + str(ref_type_name) + ' adapt=' + str(
|
|
adapt_type_name) + ' ' + ' cutoff1=' + str(cut_off1) + '' ' stimulus length=' + str(
|
|
stimulus_length) + ' ' + ' power=' + str(
|
|
power) + ' ' + restrict #
|
|
end_name = cut_title(end_name, datapoints=120)
|
|
name_title = end_name
|
|
# plt.suptitle(name_title) # +' file '
|
|
|
|
# set_clim_same_here(clims, ims, maxs, mins, nr_clim, perc05, perc95)
|
|
# set_clim_same_here(ims, perc05, perc95, mins, maxs, nr_clim, clims)
|
|
set_clim_same_here(ims, perc05=perc05, perc95=perc95, lim_type='up', nr_clim=nr_clim, clims=clims)
|
|
# embed()
|
|
axes = np.array([np.array(ax_isi),
|
|
np.array(ax_data),
|
|
np.array(ax_model[0:int(len(ax_model) / 2)]),
|
|
np.array(ax_model[int(len(ax_model) / 2)::])])
|
|
# axes = np.concatenate([np.array(ax_isi),
|
|
# np.array(ax_data),
|
|
# np.array(ax_model[0:int(len(ax_model) / 2)]),
|
|
# np.array(ax_model[int(len(ax_model) / 2)::])])
|
|
# embed()
|
|
axes = np.transpose(axes)
|
|
# plt.show()
|
|
fig.tag([list(axes[0])], xoffs=-3, yoffs=2) # , minor_index=2
|
|
fig.tag([list(axes[1])], xoffs=-3, yoffs=2) # , minor_index=2
|
|
fig.tag([list(axes[2])], xoffs=-3, yoffs=2) # , minor_index=2
|
|
# ATTENTION: niemals dieses minor index machen
|
|
# #embed()
|
|
# fig.tag(axes[3], xoffs=-3, yoffs=2, minor_index=2)
|
|
|
|
save_visualization(pdf=True)
|
|
# fig.savefig()
|
|
# if show:
|
|
# plt.show()
|
|
# save_all(0, individual_tag, show, '')
|
|
|
|
|
|
def create_full_matrix2(chi_2_ur_numeric, chi_2_ul_numeric):
|
|
"""
|
|
Creates all areas in the frequency plot from the reduced numeric matrix.
|
|
:param chi_2_numeric: The numeric matrix
|
|
:return: The full matrix
|
|
"""
|
|
steps = chi_2_ur_numeric.shape[0]
|
|
# steps = chi_2_ul.shape[0]
|
|
|
|
# matrix for upper right corner
|
|
chi_2_ur = chi_2_ur_numeric.copy()
|
|
for i in range(steps):
|
|
for j in range(steps):
|
|
if i >= j:
|
|
chi_2_ur[i][j] = chi_2_ur[j][i]
|
|
|
|
# matrix for lower left corner
|
|
chi_2_ll = np.conj(np.flip(chi_2_ur))
|
|
# ok man könnte das auch gleich richtig abspeichern aber so geht das halt auch
|
|
# matrix for upper left corner
|
|
chi_2_ul = np.transpose(chi_2_ul_numeric).copy()
|
|
for i in range(steps):
|
|
for j in range(steps):
|
|
if i <= j:
|
|
chi_2_ul[i][j] = np.conj(chi_2_ul[j][i])
|
|
|
|
chi_2_ul = np.flip(chi_2_ul, 1)
|
|
|
|
# matrix for lower right corner
|
|
chi_2_lr = np.conj(np.flip(chi_2_ul))
|
|
|
|
# put all domains together
|
|
chi_2 = np.zeros(shape=(2 * steps, 2 * steps), dtype=complex)
|
|
for i in range(2 * steps):
|
|
for j in range(2 * steps):
|
|
# upper right
|
|
if i >= steps and j >= steps:
|
|
chi_2[i][j] = chi_2_ur[i - steps][j - steps]
|
|
|
|
# upper left
|
|
if i >= steps > j:
|
|
chi_2[i][j] = chi_2_ul[i - steps][j - steps]
|
|
|
|
# lower left
|
|
if i < steps and j < steps:
|
|
chi_2[i][j] = chi_2_ll[i][j]
|
|
|
|
# lower right
|
|
if i < steps <= j:
|
|
try:
|
|
chi_2[i][j] = chi_2_lr[i][j - steps]
|
|
except:
|
|
print('chi something')
|
|
embed()
|
|
return chi_2
|
|
|
|
|
|
def create_full_matrix(chi_2_numeric):
|
|
"""
|
|
Creates all areas in the frequency plot from the reduced numeric matrix.
|
|
:param chi_2_numeric: The numeric matrix
|
|
:return: The full matrix
|
|
"""
|
|
steps = chi_2_numeric.shape[0]
|
|
|
|
# matrix for upper right corner
|
|
chi_2_ur = chi_2_numeric.copy()
|
|
for i in range(steps):
|
|
for j in range(steps):
|
|
if i >= j:
|
|
chi_2_ur[i][j] = chi_2_ur[j][i]
|
|
|
|
# matrix for lower left corner
|
|
chi_2_ll = np.conj(np.flip(chi_2_ur))
|
|
|
|
# matrix for upper left corner
|
|
chi_2_ul = chi_2_numeric.copy()
|
|
for i in range(steps):
|
|
for j in range(steps):
|
|
if i <= j:
|
|
chi_2_ul[i][j] = np.conj(chi_2_numeric[j][i])
|
|
chi_2_ul = np.flip(chi_2_ul, 1)
|
|
|
|
# matrix for lower right corner
|
|
chi_2_lr = np.conj(np.flip(chi_2_ul))
|
|
|
|
# put all domains together
|
|
chi_2 = np.zeros(shape=(2 * steps, 2 * steps), dtype=complex)
|
|
for i in range(2 * steps):
|
|
for j in range(2 * steps):
|
|
# upper right
|
|
if i >= steps and j >= steps:
|
|
chi_2[i][j] = chi_2_ur[i - steps][j - steps]
|
|
|
|
# upper left
|
|
if i >= steps > j:
|
|
chi_2[i][j] = chi_2_ul[i - steps][j - steps]
|
|
|
|
# lower left
|
|
if i < steps and j < steps:
|
|
chi_2[i][j] = chi_2_ll[i][j]
|
|
|
|
# lower right
|
|
if i < steps <= j:
|
|
chi_2[i][j] = chi_2_lr[i][j - steps]
|
|
|
|
return chi_2
|
|
|
|
|
|
def get_axis_on_full_matrix(full_matrix, stack_final):
|
|
stack_final = pd.DataFrame(full_matrix, index=np.array(list(map(int, np.concatenate(
|
|
[-stack_final.index[::-1], stack_final.index])))),
|
|
columns=np.array(list(map(int, np.concatenate(
|
|
[-stack_final.columns[::-1],
|
|
stack_final.columns])))))
|
|
return stack_final
|
|
|
|
|
|
def get_stack_one_quadrant(cell, cell_add, cells_save, path1, save_name_rev, direct_load = False):
|
|
|
|
if direct_load:
|
|
if '.pkl' in path1:
|
|
model = pd.read_pickle(path1) # pd.read_pickle(path)
|
|
else:
|
|
model = pd.read_csv(path1, index_col = 0) # pd.read_pickle(path)
|
|
else:
|
|
model = load_model_susept(path1, cells_save, save_name_rev.split(r'/')[-1] + cell_add)
|
|
model_show = model[(model.cell == cell)] # & (model_cell.file_name == file)& (model_cell.power == power)]
|
|
|
|
stack_plot = change_model_from_csv_to_plots(model_show)
|
|
try:
|
|
stack_plot1 = RAM_norm(stack_plot, model_show=model_show)
|
|
except:
|
|
print('model thing2')
|
|
embed()
|
|
return stack_plot1
|
|
|
|
|
|
def find_noise_names(b, base=''):
|
|
try:
|
|
noise_names = find_stimuli(b)
|
|
noise_there = True
|
|
except:
|
|
noise_there = False
|
|
if noise_there:
|
|
if base == '':
|
|
names_mt_gwns = find_names_gwn(b)
|
|
else:
|
|
names_mt_gwns = find_mt(b, 'init')
|
|
# ich glaube das stimmt so nicht!
|
|
else:
|
|
names_mt_gwns = []
|
|
return names_mt_gwns, noise_there
|
|
|
|
|
|
def get_groups_ram(base_properties, file_name, data_between_2017_2018=''):
|
|
try:
|
|
base_properties = base_properties.sort_values(by='c', ascending=False)
|
|
except:
|
|
print('contrast problem sorting')
|
|
embed()
|
|
# hier muss ich nochmal nach dem file sortieren!
|
|
if data_between_2017_2018 != 'all':
|
|
file_name_sorted = base_properties[base_properties.file_name == file_name]
|
|
else:
|
|
file_name_sorted = base_properties
|
|
del base_properties
|
|
# embed()
|
|
# embed()
|
|
if len(file_name_sorted) < 1:
|
|
print('file_name problem')
|
|
embed()
|
|
file_name_sorted = file_name_sorted.sort_values(by='start', ascending=False)[::-1]
|
|
# ich sollte auf dem level schon nach dem richtigen filename filtern!
|
|
grouped = file_name_sorted.groupby('c')
|
|
return grouped
|
|
|
|
|
|
def calc_abs_power(isfs):
|
|
cross = np.zeros(len(isfs[0]), dtype=np.complex_)
|
|
for i, isf in enumerate(isfs):
|
|
cross += np.abs(isf) ** 2
|
|
return cross
|
|
|
|
|
|
def get_osf_restricted(deltat, max_f, spikes_hann, stimulus_hann, fft_i='forward', fft_o='forward'):
|
|
f_orig = np.fft.fftfreq(len(stimulus_hann), deltat)
|
|
f_orig = np.fft.fftfreq(len(stimulus_hann), deltat)
|
|
#osf = np.fft.fft(spikes_hann) # das sollte ortho seid
|
|
f, restrict = restrict_freqs(f_orig, max_f)
|
|
f_range = np.arange(0, len(f), 1)
|
|
f_same = f_orig[restrict]
|
|
#
|
|
# also hier haben wir auch ortho weil das ist auch nah an der Formeln dran!
|
|
# embed()
|
|
# ALSO FORWARD IST AUCHLAUT MASCHA RICHTIG!
|
|
# embed()
|
|
# this is for the different versions numpy 1.19.5 has no possibility forward and backward
|
|
# there none is backward and for forward you need an extra version
|
|
try:
|
|
osf = np.fft.fft(spikes_hann - np.mean(spikes_hann), norm=fft_o) # das sollte ortho seid
|
|
|
|
# Und wenn ich den Input genau so nehme wie er produziert wird sollte das passen nicht wahr?
|
|
# also forward ist hier das richtige denn es ist das gegenteil von der generierung
|
|
# also das soll wohl hier hin weil das genau das ist was wir geneirt haben
|
|
isf = np.fft.fft(stimulus_hann - np.mean(stimulus_hann), norm=fft_i) # /nfft # nas sollte forward sein
|
|
except:
|
|
# embed()
|
|
if fft_o == 'backward':
|
|
osf = np.fft.fft(spikes_hann) # das sollte ortho seid
|
|
elif fft_o == 'forward':
|
|
osf = np.fft.fft(spikes_hann) * deltat
|
|
if fft_i == 'backward':
|
|
isf = np.fft.fft(stimulus_hann) # /nfft # nas sollte forward sein
|
|
elif fft_i == 'forward':
|
|
isf = np.fft.fft(stimulus_hann) * deltat # /nfft # nas sollte forward sein
|
|
left = np.argmin(np.abs(np.sort(f_orig)) - 0) - 10
|
|
left2 = np.argmin(np.abs(np.sort(f_orig)) - 0)
|
|
d_isf = np.mean(np.abs(isf)[np.argsort(f_orig)][left:left2])
|
|
d_osf = np.mean(np.abs(osf)[np.argsort(f_orig)][left:left2])
|
|
# ah wir haben für dieses d_osf wieder an der Null geschaut und nicht die varianz genommen,
|
|
# ja deswegen ist das so komisch, und nicht mal hoch zwei
|
|
d_osf1 = np.abs(osf)[np.argsort(f_orig)][left2 - 1]
|
|
d_isf1 = np.abs(isf)[np.argsort(f_orig)][left2 - 1]
|
|
isf = isf[restrict]
|
|
osf = osf[restrict]
|
|
return d_isf, d_isf1, d_osf, d_osf1, f, f_orig, f_range, f_same, isf, osf, restrict
|
|
|
|
|
|
def get_psds_for_coherence(amp, b, cut_off, file_name_save, indices, max_val, mt, names_mt_gwn, nfft, nr_snippets,
|
|
sampling, p11s=[], stimulus_given=[], p12s=[],give_stimulus = False, p22s=[], spikes_mat_given=[], overlapp='',
|
|
dev='original', mean = ''):
|
|
if overlapp == '':
|
|
nr_snippets = nr_snippets * 2
|
|
if len(p11s) < 1:
|
|
p22s = np.zeros(int(nfft / 2 - 1), dtype=np.complex_)
|
|
p12s = np.zeros(int(nfft / 2 - 1), dtype=np.complex_)
|
|
p11s = np.zeros(int(nfft / 2 - 1), dtype=np.complex_)
|
|
# length = np.arange(0, max_val * sampling, nfft)
|
|
length = range_with_overlap(nfft, overlapp, max_val * sampling)
|
|
|
|
# embed()
|
|
length_array_isf = [[]] * len(length)
|
|
length_array_osf = [[]] * len(length)
|
|
#if give_stimulus:
|
|
length_array_stimulus = [[]] * len(length)
|
|
length_array_spikes = [[]] * len(length)
|
|
a_mi = 0
|
|
# if 'firstfrozen' in firsts:
|
|
# indices = [indices[0]]
|
|
mats = []
|
|
stims = []
|
|
count_final = 0
|
|
for mm, m in enumerate(indices):
|
|
print(mm)
|
|
first, minus, second, stimulus_length = find_first_second(b,
|
|
names_mt_gwn,
|
|
m, mt,
|
|
mm=mm)
|
|
|
|
if len(spikes_mat_given) > 0:
|
|
spikes_mt = spikes_mat_given[m]
|
|
else:
|
|
spikes_mt = link_arrays_spikes(b, first,
|
|
second, minus)
|
|
if len(spikes_mt)> 2:
|
|
|
|
if 'first' in mean:
|
|
if second > 10:
|
|
second = 10
|
|
if len(stimulus_given) > 0:
|
|
eod_interp = stimulus_given
|
|
deltat = 1 / sampling
|
|
else:
|
|
deltat, eod_interp, eodf_size, sampling, time_array = load_presaved(b, amp,
|
|
file_name_save,
|
|
first,
|
|
m, mt,
|
|
sampling,
|
|
second)
|
|
|
|
if len(spikes_mat_given) > 0:
|
|
spikes_mat = spikes_mat_given[m]
|
|
else:
|
|
spikes_mat = cr_spikes_mat(spikes_mt, sampling,
|
|
len(eod_interp)) # [0:-2]int(stimulus_length * 1 / deltat)
|
|
|
|
if dev == '05': # 'original':
|
|
window05 = 0.0005 * sampling
|
|
spikes_mat = gaussian_filter(spikes_mat, sigma=window05)
|
|
elif dev == '2':
|
|
window05 = 0.002 * sampling
|
|
spikes_mat = gaussian_filter(spikes_mat, sigma=window05)
|
|
elif dev == '5':
|
|
window05 = 0.005 * sampling
|
|
spikes_mat = gaussian_filter(spikes_mat, sigma=window05)
|
|
elif dev == '10':
|
|
window05 = 0.01 * sampling
|
|
spikes_mat = gaussian_filter(spikes_mat, sigma=window05)
|
|
|
|
mats.append(spikes_mat)
|
|
stims.append(eod_interp) #
|
|
fft_i = 'forward'
|
|
fft_o = 'forward'
|
|
|
|
if overlapp == '':
|
|
length_restricted = int(nfft / 2) # embed()
|
|
else:
|
|
length_restricted = nfft
|
|
# if 'firstsnippet' in firsts:
|
|
# length = [length[0]]
|
|
isfs = []
|
|
osfs = []
|
|
stimulus = []
|
|
spikes = []
|
|
|
|
for aa, a in enumerate(length):
|
|
stimulus_array = eod_interp[int(0 + a):int(a + nfft)]
|
|
spikes_array = spikes_mat[int(0 + a):int(a + nfft)]
|
|
|
|
hann_true = True
|
|
if hann_true:
|
|
hann = np.hanning(len(stimulus_array))
|
|
try:
|
|
stimulus_hann = (stimulus_array - np.mean(stimulus_array)) * hann
|
|
except:
|
|
print('stimulus something')
|
|
embed()
|
|
hann = np.hanning(len(spikes_array))
|
|
spikes_hann = (spikes_array - np.mean(spikes_array)) * hann
|
|
|
|
if (len(stimulus_hann) == nfft) and (len(spikes_hann) == nfft):
|
|
f_orig = np.fft.fftfreq(len(stimulus_hann), deltat)
|
|
d_isf, d_isf1, d_osf, d_osf1, f, f_orig, f_range, f_same, isf, osf, restrict = get_osf_restricted(
|
|
deltat,
|
|
cut_off,
|
|
spikes_hann,
|
|
stimulus_hann,
|
|
fft_i,
|
|
fft_o)
|
|
isfs.append(isf)
|
|
osfs.append(osf)
|
|
spikes.append(np.array(spikes_hann))
|
|
stimulus.append(np.array(stimulus_hann))
|
|
a_mi += 1
|
|
else:
|
|
isf = float('nan') * np.zeros(int(nfft / 2 - 1), dtype=np.complex_)
|
|
isfs.append(isf)
|
|
osf = float('nan') * np.zeros(int(nfft / 2 - 1), dtype=np.complex_)
|
|
osfs.append(osf)
|
|
spikes_hann = float('nan') * np.zeros(int(nfft)) # , dtype=np.complex_
|
|
stimulus_hann = float('nan') * np.zeros(int(nfft)) # , dtype=np.complex_
|
|
spikes.append(spikes_hann)
|
|
stimulus.append(stimulus_hann)
|
|
try:
|
|
length_array_isf[aa]
|
|
except:
|
|
print('length vals')
|
|
embed()
|
|
if len(length_array_isf[aa]) < 1:
|
|
length_array_isf[aa] = [isf]
|
|
if give_stimulus:
|
|
length_array_spikes[aa] = [spikes_hann]
|
|
length_array_stimulus[aa] = [stimulus_hann]
|
|
else:
|
|
try:
|
|
length_array_isf[aa].append(isf)
|
|
except:
|
|
print('append thing')
|
|
embed()
|
|
if give_stimulus:
|
|
length_array_spikes[aa].append(spikes_hann)
|
|
length_array_stimulus[aa].append(stimulus_hann)
|
|
# embed()
|
|
|
|
if len(length_array_osf[aa]) < 1:
|
|
length_array_osf[aa] = [osf]
|
|
else:
|
|
try:
|
|
length_array_osf[aa].append(osf)
|
|
except:
|
|
print('append thing')
|
|
embed()
|
|
|
|
p22, count_final = crossSpectrum(osfs, osfs)
|
|
p12, count_final = crossSpectrum(isfs, osfs)
|
|
p11, count_final = crossSpectrum(isfs, isfs)
|
|
# try:
|
|
# das müsste man hier demensprechend noch teilen
|
|
p22s += p22
|
|
|
|
p12s += p12
|
|
p11s += p11
|
|
count_final += 1
|
|
|
|
|
|
if len(length_array_osf) > nr_snippets:
|
|
print('length something0')
|
|
embed()
|
|
length_array_osf = np.array(length_array_osf)
|
|
length_array_isf = np.array(length_array_isf)
|
|
if give_stimulus:
|
|
length_array_stimulus = np.array(length_array_stimulus)
|
|
length_array_spikes = np.array(length_array_spikes)
|
|
|
|
print('done mm')
|
|
return count_final, stims, mats, a_mi, f_same, length, p11s, p12s, p22s, length_array_isf, length_array_osf, length_array_spikes, length_array_stimulus,
|
|
|
|
|
|
def coherence_and_mutual_response_wo_sqrt(a_mir, a_mir2, cut_vals, p12_rrs, p22_rrs):
|
|
coh_resp = np.abs(p12_rrs / a_mir) ** 2 / (p22_rrs.real / a_mir2) ** 2
|
|
mutual_information_resp = - np.log2(1 - coh_resp[cut_vals]) # np.sum(* np.diff(freq)[0]
|
|
return coh_resp, mutual_information_resp
|
|
|
|
|
|
def prepeare_test_arrays(indices, length, length_array_isf, length_array_osf, nr_snippets):
|
|
length_array_isf_test = [[]] * nr_snippets
|
|
length_array_osf_test = [[]] * nr_snippets
|
|
for mm, m in enumerate(indices):
|
|
for aa, a in enumerate(length):
|
|
if len(length_array_isf_test[aa]) < 1:
|
|
length_array_isf_test[aa] = [length_array_isf[0][0]]
|
|
length_array_osf_test[aa] = [length_array_osf[0][0]]
|
|
else:
|
|
try:
|
|
length_array_isf_test[aa].append(length_array_isf[0][0])
|
|
length_array_osf_test[aa].append(length_array_osf[0][0])
|
|
except:
|
|
print('append thing')
|
|
embed()
|
|
length_array_osf_test = np.array(length_array_osf_test)
|
|
length_array_isf_test = np.array(length_array_isf_test)
|
|
return length_array_osf_test, length_array_isf_test
|
|
|
|
|
|
def rescale_colorbar_and_values(abs_matrix,add_nonlin_title = None, resize_val=None):
|
|
# das auf jeden Fall auf der finalen Matrix machen!
|
|
if add_nonlin_title:
|
|
resize_val = find_resize(add_nonlin_title)
|
|
max_val = np.max(np.max(abs_matrix, axis = 0), axis = 0)
|
|
if not resize_val:
|
|
if max_val > 1000000000000:
|
|
resize_val = 1000000000000
|
|
elif max_val > 1000000000:
|
|
resize_val = 1000000000
|
|
elif max_val > 1000000:
|
|
resize_val = 1000000
|
|
elif max_val > 1000:
|
|
resize_val = 1000
|
|
elif max_val < 0.000000000001:
|
|
resize_val = 0.000000000001# pico
|
|
elif max_val < 0.000000001:
|
|
resize_val = 0.000000001# nano
|
|
elif max_val < 0.000001:
|
|
resize_val = 0.000001# micro
|
|
elif max_val < 0.001:
|
|
resize_val = 0.001# mili
|
|
else:
|
|
resize_val = 1
|
|
#embed()
|
|
try:
|
|
abs_matrix = abs_matrix / resize_val
|
|
except:
|
|
print('resize thing')
|
|
embed()
|
|
|
|
add_nonlin_title = find_add_title(resize_val)
|
|
return abs_matrix, add_nonlin_title, resize_val
|
|
|
|
def find_resize(add_nonlin_title ):
|
|
if add_nonlin_title == 'k':
|
|
resize_val = 1000
|
|
elif add_nonlin_title == 'M':
|
|
resize_val = 1000000
|
|
elif add_nonlin_title == 'G':
|
|
resize_val = 1000000000
|
|
elif add_nonlin_title == 'T':
|
|
resize_val = 1000000000000
|
|
elif add_nonlin_title == 'P':
|
|
resize_val = 1000000000000000
|
|
elif add_nonlin_title == 'E':
|
|
resize_val = 1000000000000000000
|
|
elif add_nonlin_title == 'p':
|
|
resize_val = 0.000000000001
|
|
elif add_nonlin_title == 'n':
|
|
resize_val = 0.000000001
|
|
elif add_nonlin_title == '$\mu$':
|
|
resize_val = 0.000001
|
|
|
|
elif add_nonlin_title == 'm':
|
|
resize_val = 0.001
|
|
elif add_nonlin_title == 'c':
|
|
resize_val = 0.01
|
|
elif add_nonlin_title == 'd':
|
|
resize_val = 0.1
|
|
elif add_nonlin_title == '':
|
|
resize_val =1
|
|
|
|
|
|
#embed()
|
|
# ok ich hab mal mehr Einheiten geadded als zur Zeit benötigt werden wir müssen uns mal über die Auflösung einigen
|
|
return resize_val
|
|
|
|
def find_add_title(resize_val):
|
|
if resize_val == 1000:
|
|
add_nonlin_title = 'k'
|
|
elif resize_val == 1000000:
|
|
add_nonlin_title = 'M'
|
|
elif resize_val == 1000000000:
|
|
add_nonlin_title = 'G'
|
|
elif resize_val == 1000000000000:
|
|
add_nonlin_title = 'T'
|
|
elif resize_val == 1000000000000000:
|
|
add_nonlin_title = 'P'#Peta
|
|
elif resize_val == 1000000000000000000:
|
|
add_nonlin_title = 'E'#Peta
|
|
elif resize_val == 0.000000000001:# pico
|
|
add_nonlin_title = 'p'
|
|
elif resize_val == 0.000000001: # pico
|
|
add_nonlin_title = 'n'
|
|
elif resize_val == 0.000001:
|
|
add_nonlin_title = '$\mu$'
|
|
elif resize_val == 0.001:
|
|
add_nonlin_title = 'm'#mili
|
|
elif resize_val == 0.01:
|
|
add_nonlin_title = 'c'#centi
|
|
elif resize_val == 0.1:
|
|
add_nonlin_title = 'd'#deci
|
|
elif resize_val == 1:
|
|
add_nonlin_title = '' # deci
|
|
#embed()
|
|
# ok ich hab mal mehr Einheiten geadded als zur Zeit benötigt werden wir müssen uns mal über die Auflösung einigen
|
|
return add_nonlin_title
|
|
|
|
|
|
def range_with_overlap(nfft, overlap, lenth_here):
|
|
if overlap == '_nooverlap_':
|
|
length = np.arange(0, lenth_here, nfft)
|
|
else:
|
|
# if snippet_fav:
|
|
length = list(map(int, np.arange(0, lenth_here, nfft / 2)))
|
|
return length
|
|
|
|
|
|
def gaussKernel(sigma, dt):
|
|
""" Creates a Gaussian kernel with a given standard deviation and an integral of 1.
|
|
|
|
Parameters
|
|
----------
|
|
sigma : float
|
|
The standard deviation of the kernel in seconds
|
|
dt : float
|
|
The temporal resolution of the kernel, given in seconds.
|
|
|
|
Returns:
|
|
np.array
|
|
The kernel in the range -4 to +4 sigma
|
|
"""
|
|
x = np.arange(-4. * sigma, 4. * sigma, dt)
|
|
y = np.exp(-0.5 * (x / sigma) ** 2) / np.sqrt(2. * np.pi) / sigma
|
|
return y
|
|
|
|
|
|
def firing_rate(spikes, duration, sigma=0.005, dt=1. / 20000.):
|
|
"""Convert spike times to a firing rate estimated by kernel convolution with a Gaussian kernel.
|
|
|
|
Args:
|
|
spikes (np.array): the spike times
|
|
duration (float): the trial duration
|
|
sigma (float, optional): standard deviation of the Gaussian kernel. Defaults to 0.005.
|
|
dt (float, optional): desired temporal resolution of the firing rate. Defaults to 1./20000..
|
|
|
|
Returns:
|
|
np.array: the firing rate
|
|
"""
|
|
binary = np.zeros(int(np.round(duration / dt)))
|
|
indices = np.asarray(np.round(spikes / dt), dtype=int)
|
|
binary[indices[indices < len(binary)]] = 1
|
|
kernel = gaussKernel(sigma, dt)
|
|
|
|
rate = np.convolve(kernel, binary, mode="same")
|
|
return rate
|
|
|
|
|
|
def get_rates(rr, time, dt, sigma):
|
|
# try:
|
|
valid_stim_count = sum([1 for s in rr if s.duration == time[-1]])
|
|
# except:
|
|
# print('valid something')
|
|
# embed()
|
|
|
|
|
|
rates = np.zeros((valid_stim_count, len(time)))
|
|
index = 0
|
|
for i in range(rr.stimulus_count):
|
|
if rr[i].duration != time[-1]:
|
|
continue
|
|
spikes = rr.spikes(i)
|
|
rates[index, :] = firing_rate(spikes, time[-1], sigma, dt=dt)
|
|
index += 1
|
|
return rates
|
|
|
|
|
|
def coherence(rates, stim, nperseg, noverlap, dt):
|
|
assert (rates.shape[1] == len(stim))
|
|
all_rate_spectra, all_stim_spectra, f = get_rates_stacked(dt, noverlap, nperseg, rates, stim)
|
|
|
|
csd = cross_spectrum(all_stim_spectra, all_rate_spectra)
|
|
stimasd = auto_spectrum(all_stim_spectra)
|
|
respasd = auto_spectrum(all_rate_spectra)
|
|
|
|
coh = csd / (stimasd * respasd)
|
|
return f[f >= 0], coh[f >= 0], all_rate_spectra, all_stim_spectra
|
|
|
|
|
|
def get_rates_stacked(dt, noverlap, nperseg, rates, stim):
|
|
stim_segments = get_segments(stim, nperseg, noverlap)
|
|
f, stim_spectra = spectra(stim_segments, dt)
|
|
for i in range(rates.shape[0]):
|
|
rate_segments = get_segments(rates[i, :], nperseg, noverlap)
|
|
_, rate_spectra = spectra(rate_segments, dt)
|
|
if i == 0:
|
|
all_rate_spectra = rate_spectra
|
|
all_stim_spectra = stim_spectra
|
|
else:
|
|
all_rate_spectra = np.vstack((all_rate_spectra, rate_spectra))
|
|
all_stim_spectra = np.vstack((all_stim_spectra, stim_spectra))
|
|
# hier hat er sie alle appended also nicht direct
|
|
return all_rate_spectra, all_stim_spectra, f
|
|
|
|
|
|
def exp_coherence(rates, nperseg, noverlap, dt):
|
|
mrate = np.mean(rates, axis=0)
|
|
mrate_segments = get_segments(mrate, nperseg, noverlap)
|
|
f, mrate_spectra = spectra(mrate_segments, dt)
|
|
|
|
for i in range(rates.shape[0]):
|
|
rate_segments = get_segments(rates[i, :], nperseg, noverlap)
|
|
_, rate_spectra = spectra(rate_segments, dt)
|
|
|
|
if i == 0:
|
|
all_mrate_spectra = mrate_spectra
|
|
all_rate_spectra = rate_spectra
|
|
else:
|
|
all_mrate_spectra = np.vstack((all_mrate_spectra, mrate_spectra))
|
|
all_rate_spectra = np.vstack((all_rate_spectra, rate_spectra))
|
|
|
|
csd = cross_spectrum(all_mrate_spectra, all_rate_spectra)
|
|
mrateasd = auto_spectrum(all_mrate_spectra)
|
|
rateasd = auto_spectrum(all_rate_spectra)
|
|
c = csd / (rateasd * mrateasd)
|
|
|
|
return f[f >= 0], c[f >= 0]
|
|
|
|
|
|
def coherences(rates, t, s, dt, nperseg=2 ** 14):
|
|
f, gamma, all_rate_spectra, all_stim_spectra = coherence(rates, s, nperseg, nperseg // 2, dt)
|
|
_, exp_gamma = exp_coherence(rates, nperseg, nperseg // 2, dt)
|
|
_, rr_gamma = rr_coherence(rates, nperseg, nperseg // 2, dt)
|
|
|
|
return f, gamma, exp_gamma, rr_gamma, all_rate_spectra, all_stim_spectra
|
|
|
|
|
|
def plt_cohs_ich(ax, coh, coh_resp, coh_resp_mean, coh_resp_directs, coh_resp_restrict, coh_s_directs, cut_off, f_same):
|
|
# cut_vals = f_same < cut_off
|
|
ax[1].plot(f_same[f_same < cut_off], np.sqrt(coh_resp_restrict[f_same < cut_off]),
|
|
label='coherence_r_restrict', color='purple')
|
|
ax[1].plot(f_same[f_same < cut_off], np.sqrt(coh_resp[f_same < cut_off]), label='coherence_r', color='orange')
|
|
|
|
ax[1].plot(f_same[f_same < cut_off], np.sqrt(coh_resp_directs[f_same < cut_off]),
|
|
label='coherence_r_direct', color='orange', linestyle='--')
|
|
ax[1].plot(f_same[f_same < cut_off], np.sqrt(coh_s_directs[f_same < cut_off]),
|
|
label='coh_s_directs', color='blue', linestyle='--')
|
|
|
|
ax[1].plot(f_same[f_same < cut_off], coh_resp_mean[f_same < cut_off],
|
|
label='coherence_r_expected', color='green')
|
|
ax[1].plot(f_same[f_same < cut_off], coh[f_same < cut_off],
|
|
label='coherence_s', color='blue')
|
|
|
|
|
|
def plt_cohs_jan(ax, cut_off, exp_gamma, f_jan, gamma, rr_gamma):
|
|
ax[0].plot(f_jan[f_jan < cut_off], gamma[f_jan < cut_off], label='gamma')
|
|
ax[0].plot(f_jan[f_jan < cut_off], exp_gamma[f_jan < cut_off], label='exp_gamma')
|
|
ax[0].plot(f_jan[f_jan < cut_off], rr_gamma[f_jan < cut_off], label='rr_gamma')
|
|
ax[0].legend()
|
|
|
|
|
|
def get_mats_same_shape(indices, mats, mt, sampling, stims):
|
|
length_val = np.max(mt.extents[:][indices]) * sampling
|
|
mats_jan = []
|
|
for mm, m in enumerate(mats):
|
|
if len(m) == length_val:
|
|
mats_jan.append(np.array(m))
|
|
stim_jan = stims[mm]
|
|
mats_jan = np.array(mats_jan)
|
|
return mats_jan, stim_jan
|
|
|
|
def tranfer_xlabel():
|
|
return '$f/f_{EOD}$'#\,[Hz]
|
|
|
|
def tranfer_xlabel_hz():
|
|
return '$f$ [Hz]'#\,[Hz]
|
|
|
|
|
|
def diagonal_xlabel():
|
|
return '$f_{1}+f_{2}$\,[Hz]'
|
|
|
|
def diagonal_xlabel_nothz():
|
|
return '$(f_{1}+f_{2})/f_{EOD}$'
|
|
|
|
def NLI_scorename():
|
|
return 'NLI$(f_{Base})$'
|
|
|
|
|
|
def join_x(axts_all):
|
|
axts_all[0].get_shared_x_axes().join(*axts_all)
|
|
|
|
|
|
def join_y(axts_all):
|
|
axts_all[0].get_shared_y_axes().join(*axts_all)
|
|
if axts_all[0].get_ylim()[-1] != axts_all[1].get_ylim()[-1]:
|
|
first = axts_all[0].get_ylim()[-1]
|
|
second = axts_all[1].get_ylim()[-1]
|
|
starting_val = np.min([first[0], second[0]])
|
|
end_val = np.max([first[1], second[1]])
|
|
axts_all[0].set_ylim(starting_val,end_val)
|
|
axts_all[1].set_ylim(starting_val,end_val)
|
|
|
|
|
|
def find_peaks_simple(eodf, freq1,freq2, name, color1, color2):
|
|
if name == '01':
|
|
freqs = [np.abs(freq1), eodf, freq1 + eodf]
|
|
colors_peaks = [color1, 'black', color1]
|
|
alpha = [1, 1, 0.5]
|
|
labels = ['DF1', 'EODf', 'F1']
|
|
elif name == '02':
|
|
freqs = [np.abs(freq2), eodf, freq2 + eodf]
|
|
colors_peaks = [color2, 'black', color2]
|
|
alpha = [1, 1, 0.5]
|
|
labels = ['DF2', 'EODf', 'F2']
|
|
elif name == '012':
|
|
freqs = [np.abs(freq1), np.abs(freq2), eodf, freq1 + eodf, freq2 + eodf]
|
|
colors_peaks = ['blue', 'red', 'black', 'blue', 'red']
|
|
alpha = [1, 1, 1, 0.5, 0.5]
|
|
labels = ['DF1', 'DF2', 'EODf', 'F1', 'F2']
|
|
elif name == '0':
|
|
freqs = [np.abs(freq1), eodf, freq1 + eodf]
|
|
colors_peaks = [color1, 'black', color1]
|
|
alpha = [1, 1, 0.5]
|
|
labels = ['DF1', 'EODf', 'F1']
|
|
return labels,alpha,colors_peaks, freqs
|
|
|
|
|
|
def plt_single_contrast(f_counter,axts,axps, f, grid_ll, c_nn, freq1,freq2,eodf,datapoints, auci_wo, auci_w, results_diff, a_f2s, fish_jammer, a,
|
|
trials_nr, nfft, us_name, gain, runs, a_fr, nfft_for_morph, beat, printing, stimulus_length,
|
|
model_cells, position_diff, colors_array, reshuffled,dev,sampling, cell_here, c_nr, n, dev_name,min_amps,c_nn_nr = 1, xpos = 1, ypos = 1.35, small_peaks = True, second = True, ws = 0.6,start = 1, legend = False, v_mem_choice = True):
|
|
# ax_u1.scatter(c_nrs,np.zeros(len(c_nrs)), color='black', marker='^', clip_on=False)
|
|
|
|
array_mat,v_mems,arrays_spikes,arrays_stim, results_diff, position_diff, auci_wo, auci_w, arrays, names = calc_roc_amp_core_cocktail_for_plot(
|
|
[freq1 + eodf], [freq2 + eodf], datapoints, auci_wo, auci_w, results_diff, a_f2s, fish_jammer, a,
|
|
trials_nr, nfft, '', us_name, gain, runs, a_fr, nfft_for_morph, beat, printing, stimulus_length,
|
|
model_cells, position_diff, 0.0005, cell_here, dev_name=dev_name, a_f1s=[c_nr], n=n,
|
|
reshuffled=reshuffled, min_amps=min_amps)
|
|
|
|
array_mat,v_mems,arrays_spikes,arrays_stim, results_diff, position_diff, auci_wo, auci_w, arrays_orig, names = calc_roc_amp_core_cocktail_for_plot(
|
|
[freq1 + eodf], [freq2 + eodf], datapoints, auci_wo, auci_w, results_diff, a_f2s, fish_jammer, a,
|
|
trials_nr, nfft, '', us_name, gain, runs, a_fr, nfft_for_morph, beat, printing, stimulus_length,
|
|
model_cells, position_diff, 'original', cell_here, dev_name=dev_name, a_f1s=[c_nr], n=n,
|
|
reshuffled=reshuffled, min_amps=min_amps)
|
|
|
|
time = np.arange(0, len(arrays[a][0]) / sampling, 1 / sampling)
|
|
# arrays
|
|
if v_mem_choice:
|
|
arrays_here = v_mems[start::]
|
|
else:
|
|
if start == 1:
|
|
arrays_here = [arrays[start::][0][0],arrays[start::][1][0],arrays[start::][2][0]]
|
|
else:
|
|
arrays_here = [arrays[start::][0][0], arrays[start::][1][0], arrays[start::][2][0], arrays[start::][3][0]]
|
|
|
|
if start == 1:
|
|
arrays_here_psd = [arrays_orig[start::][0][0], arrays_orig[start::][1][0], arrays_orig[start::][2][0]]
|
|
else:
|
|
arrays_here_psd = [arrays_orig[start::][0][0], arrays_orig[start::][1][0], arrays_orig[start::][2][0], arrays_orig[start::][3][0]]
|
|
names = np.array(['0','01','02','012'])[start::]
|
|
names_here = names[start::]
|
|
spikes_here = arrays_spikes[start::]
|
|
stim_here = arrays_stim[start::]
|
|
#embed()
|
|
colors_array_here = colors_array[start::]
|
|
pps = []
|
|
for a in range(len(arrays_here)):
|
|
# if c_nn == 0:
|
|
grid_pt = gridspec.GridSpecFromSubplotSpec(1, 2,
|
|
hspace=0.45,
|
|
wspace=ws,width_ratios = [1,1.2],
|
|
subplot_spec=grid_ll[a, c_nn]) # hspace=0.4,wspace=0.2,len(chirps)
|
|
|
|
axt = plt.subplot(grid_pt[0])
|
|
axp = plt.subplot(grid_pt[1])
|
|
if v_mem_choice:
|
|
axt.eventplot(spikes_here[a], lineoffsets=np.max(arrays_here[a]), color='black') # np.max(v1)*
|
|
else:
|
|
axt.eventplot(spikes_here[a], lineoffsets=np.max(arrays_here[a]),linelengths=np.max(arrays_here[a])*0.1, color='black') # np.max(v1)*
|
|
#embed()
|
|
axts.append(axt)
|
|
axps.append(axp)
|
|
|
|
if f != 0:
|
|
remove_yticks(axt)
|
|
#remove_yticks(axs)
|
|
if a != len(arrays_here) - 1:
|
|
remove_xticks(axt)
|
|
#remove_xticks(axs)
|
|
if f_counter == 0:
|
|
axt.set_ylabel(names[a])
|
|
#axs.set_ylabel(names[a])
|
|
set_amplitude_titles(a, a_f2s, arrays_here, axt, c_nr, colors_array_here, start, time)
|
|
|
|
axt.set_xlim(0.1, 0.22)
|
|
#axs.set_xlim(1, 1.12)
|
|
|
|
try:
|
|
pp, ff = ml.psd(arrays_here_psd[a] - np.mean(arrays_here_psd[a]), Fs=sampling, NFFT=nfft, noverlap=nfft // 2)
|
|
except:
|
|
print('pp problems')
|
|
embed()
|
|
pps.append(pp)
|
|
# B_score = score.replace('amp_','').split('_')[0]
|
|
axp.plot(ff, pp, color=colors_array_here[a]) # colors_contrasts[c_nn]
|
|
|
|
|
|
maxx = 1000
|
|
axp.set_xlim(-10, maxx)
|
|
|
|
if small_peaks:
|
|
labels, alpha, colors_peaks, freqs = find_peaks_simple(eodf, freq1,freq2, names[a],colors_array[1],colors_array[2])
|
|
else:
|
|
#freqs,colors_peaks,labels,alpha = chose_all_freq_combos(freq2,colors_array,a, freq1, maxx, eodf, color_eodf = 'black', color_stim = 'pink', color_stim_mult = 'pink')
|
|
alpha, labels, colors_peaks, freqs = mult_beat_freqs(eodf, maxx, freq1, color_here=colors_array[1],
|
|
color_df_mult=colors_array[1], color_eodf='black',
|
|
color_stim='orange',
|
|
color_stim_mult='pink', )
|
|
# embed()
|
|
|
|
set_titles_freqs(a, axt, c_nn, c_nn_nr, eodf, freq1, freq2, second, start, xpos, ypos)
|
|
|
|
#try:
|
|
#embed()
|
|
plt_peaks_several(labels, freqs, [pp], 0,
|
|
axp, pp, colors_peaks, ff, alphas = alpha)
|
|
#except:
|
|
# print('Df thing')
|
|
# embed()
|
|
|
|
# axp
|
|
if a != 2:
|
|
remove_xticks(axp)
|
|
if c_nn != 0:
|
|
remove_yticks(axt)
|
|
remove_yticks(axp)
|
|
else:
|
|
axt.set_ylabel('Hz')
|
|
axp.set_ylabel('Hz')
|
|
if legend:
|
|
axp.legend(loc = (-0.3,1.2), ncol = 3)
|
|
|
|
|
|
axt.set_xlabel('Time [s]')
|
|
axp.set_xlabel('Frequency [Hz]')
|
|
|
|
try:
|
|
f_counter += 1
|
|
except:
|
|
print('counter thing')
|
|
embed()
|
|
return f_counter
|
|
|
|
|
|
def set_amplitude_titles(a, a_f2s, arrays_here, axt, c_nr, colors_array_here, start, time):
|
|
if start == 1:
|
|
if a == 0:
|
|
axt.set_title(' Amplitude 1 = ' + str(c_nr) + ', Amplitude 2 = 0')
|
|
elif a == 1:
|
|
axt.set_title(' Amplitude 1 = 0,' + ' Amplitude 2 = ' + str(a_f2s[0]))
|
|
else:
|
|
axt.set_title(' Amplitude 1 = ' + str(c_nr) + ', Amplitude 2 = ' + str(a_f2s[0]))
|
|
try:
|
|
axt.plot(time, arrays_here[a], color=colors_array_here[a]) # colors_contrasts[c_nn]
|
|
except:
|
|
print('time something')
|
|
embed()
|
|
|
|
|
|
def set_titles_freqs(a, axt, c_nn, c_nn_nr, eodf, freq1, freq2, second, start, xpos, ypos):
|
|
if c_nn == c_nn_nr:
|
|
if start == 1:
|
|
if a == 0: #
|
|
if second:
|
|
second_part = 'F1=' + str(np.round(int(freq1 + eodf))) + 'Hz' + ' DF1=F1-EODf=' + str(
|
|
int(np.round(freq1))) + 'Hz'
|
|
else:
|
|
second_part = ''
|
|
axt.text(xpos, ypos, 'Only Frequency 1 (F1): \n' + second_part, fontweight='bold', ha='center',
|
|
fontsize=10, transform=axt.transAxes, )
|
|
elif a == 1:
|
|
if second:
|
|
second_part = 'F2=' + str(np.round(int(freq2 + eodf))) + 'Hz ' + 'F2-EODf=' + str(
|
|
int(np.round(freq2))) + ' Hz '
|
|
else:
|
|
second_part = ''
|
|
axt.text(xpos, ypos, 'Only Frequency 2 (F2): \n' + second_part, fontweight='bold', ha='center',
|
|
fontsize=10, transform=axt.transAxes, )
|
|
else:
|
|
if second:
|
|
second_part = 'F1=' + str(int(np.round(freq1 + eodf))) + 'Hz' + ' F1-EODf=' + str(
|
|
int(np.round(freq1))) + 'Hz' + ' F2=' + str(int(freq2 + eodf)) + 'Hz ' + 'DF2=F2-EODf=' + str(
|
|
int(np.round(freq2))) + ' Hz '
|
|
else:
|
|
second_part = ''
|
|
axt.text(xpos, ypos,
|
|
'Frequency 1 (F1) + Frequency 2 (F2): \n' + second_part,
|
|
fontweight='bold', ha='center', fontsize=10, transform=axt.transAxes, )
|
|
|
|
|
|
def find_diffs(c, frame_cell, diffs, add = ''):
|
|
if c == 'c1': # 'B1_diff'
|
|
try:
|
|
frame_cell['diff'] = np.sqrt((frame_cell['amp_B1_012_mean'+add])**2 - frame_cell['amp_B1_01_mean'+add]**2) * diffs
|
|
except:
|
|
# irgnedwann habe ich das Format geändert deswegen
|
|
try:
|
|
add = '_original'
|
|
frame_cell['diff'] = np.sqrt(
|
|
(frame_cell['amp_B1_012_mean' + add]) ** 2 - frame_cell['amp_B1_01_mean' + add] ** 2) * diffs
|
|
except:
|
|
add = ''
|
|
frame_cell['diff'] = np.sqrt(
|
|
(frame_cell['amp_B1_012_mean' + add]) ** 2 - frame_cell['amp_B1_01_mean' + add] ** 2) * diffs
|
|
else: # 'B2_diff'
|
|
try:
|
|
frame_cell['diff'] = np.sqrt(frame_cell['amp_B2_012_mean'+add]**2 - frame_cell['amp_B2_02_mean'+add]**2) * diffs
|
|
except:
|
|
try:
|
|
add = '_original'
|
|
frame_cell['diff'] = np.sqrt(
|
|
frame_cell['amp_B2_012_mean' + add] ** 2 - frame_cell['amp_B2_02_mean' + add] ** 2) * diffs
|
|
except:
|
|
add = ''
|
|
frame_cell['diff'] = np.sqrt(
|
|
frame_cell['amp_B2_012_mean' + add] ** 2 - frame_cell['amp_B2_02_mean' + add] ** 2) * diffs
|
|
return frame_cell
|
|
|
|
|
|
def find_deltas(frame_cell, c):
|
|
diffs = list(np.diff(frame_cell[c]))
|
|
diffs.extend([np.diff(frame_cell[c])[-1]])
|
|
diffs = np.array(diffs)
|
|
return diffs
|
|
|
|
|
|
def find_dfs(frame_cell):
|
|
f1s = np.unique(frame_cell.f1)
|
|
f2s = np.unique(frame_cell.f2)
|
|
#embed()
|
|
df1s = f1s - frame_cell.f0.unique()
|
|
df2s = f2s - frame_cell.f0.unique()
|
|
# für den Fall dass df falsch ausgerechnet wurde
|
|
|
|
frame_cell['df1'] = frame_cell.f1 - frame_cell.f0
|
|
frame_cell['df2'] = frame_cell.f2 - frame_cell.f0
|
|
return frame_cell, df1s, df2s, f1s, f2s
|
|
|
|
|
|
def plt_single_trace(ax_upper,ax_u1,frame, frame_cell_orig, freq1, freq2,add = '', B_replace = 'DF', sum = True, add_label = '',
|
|
alpha = [1,1,1,1],linewidths = [],xscale = '',c_dist_recalc = True, lw = 1.5,
|
|
linestyles = ['-', '-', '-', '-', '-'], nr = 4, labels = [],
|
|
scores = ['amp_B1_01_mean_original', 'amp_B1_012_mean_original', 'amp_B2_02_mean_original', 'amp_B2_012_mean_original'],
|
|
colors = ['green', 'blue', 'orange', 'red', 'grey'], default_colors = True, delta = True):
|
|
if default_colors:
|
|
if 'amp_B1_01_mean_original' in frame_cell_orig.keys():
|
|
add = '_mean_original'
|
|
else:
|
|
add = '_mean'
|
|
#:
|
|
labels, alpha, color01, color01_012, color02, color02_012, colors, colors_array, linestyles, scores,linewidths = colors_susept(
|
|
add=add, nr = nr)
|
|
#try:
|
|
#cells = np.unique(frame.cell)
|
|
|
|
#f1s = np.unique(frame.f1)
|
|
#f2s = np.unique(frame.f2)
|
|
|
|
|
|
frame_cell = frame_cell_orig[(frame_cell_orig.df1 == freq1) & (frame_cell_orig.df2 == freq2)]
|
|
|
|
#embed()
|
|
#scores = ['amp_B1_01_mean', 'amp_B1_012_mean', 'amp_B2_02_mean', 'amp_B2_012_mean']
|
|
|
|
colors_array = ['grey', 'green', 'orange', 'purple']
|
|
|
|
if len(labels)< 1:
|
|
labels = scores#.replace('amp_','')
|
|
|
|
# embed()
|
|
|
|
# if cont:
|
|
# embed()
|
|
sampling = 20000
|
|
#embed()
|
|
# axs.scatter(freq1, freq2 )# - frame_cell.f0.unique()#- frame_cell.f0.unique()
|
|
#embed()
|
|
c1 = c_dist_recalc_here(c_dist_recalc, frame_cell)
|
|
|
|
for sss, score in enumerate(scores):
|
|
|
|
if len(linewidths)>1:
|
|
lw = linewidths[sss]
|
|
#embed()
|
|
try:
|
|
ax_u1.plot(c1, frame_cell[score], zorder=100, color=colors[sss],
|
|
alpha = alpha[sss], label=labels[sss].replace('_mean', '').replace('amp_', '').replace('B',B_replace).replace('original','').replace('original','or').replace('distance','dist').replace('power','') +add_label,
|
|
linestyle=linestyles[sss], linewidth = lw)
|
|
except:# vals = frame_cell.keys()#frame_cell.filter(like='var').keys()
|
|
print('linestyle problem')
|
|
embed()
|
|
|
|
ax_upper.append(ax_u1)
|
|
if sum:
|
|
ax_u1.plot(c1, np.sqrt(frame_cell['amp_B2_012_mean'+add]**2 + frame_cell['amp_B1_012_mean'+add]**2), zorder=100, color='grey',
|
|
label='B1+B2_012', linestyle='--')
|
|
ax_u1.plot(c1, np.sqrt(frame_cell['amp_B2_02_mean'+add]**2 + frame_cell['amp_B1_01_mean'+add]**2), zorder=100,
|
|
color='black',
|
|
label='B1_01+B2_02', linestyle='-')
|
|
if c_dist_recalc:
|
|
ax_u1.set_xlim(0, 70)
|
|
ax_u1.set_xlabel('C1 Distance [cm]')
|
|
else:
|
|
ax_u1.set_xlabel('Contrast$_{1}$ [$\%$]')
|
|
#embed()
|
|
#ax_us.append(ax_u1)
|
|
# ax_u0.plot(frame_cell.c1, frame_cell['amp_B2_012_mean']+frame_cell['amp_B1_012_mean'], zorder=100, color='grey',
|
|
# label='B1_012+B2_012', linestyle='--')
|
|
|
|
# ax[0, f_counter].set_xscale('log')
|
|
if xscale == 'log':
|
|
ax_u1.set_xscale('log')
|
|
|
|
ax_u1.set_ylabel(representation_ylabel(delta = delta))
|
|
#embed()
|
|
return ax_upper
|
|
|
|
|
|
def c_dist_recalc_here(c_dist_recalc, frame_cell):
|
|
c1 = c_dist_recalc_func(frame_cell, cell=frame_cell.cell.unique()[0], c_dist_recalc=c_dist_recalc)
|
|
if not c_dist_recalc:
|
|
c1 = np.array(c1) * 100
|
|
return c1
|
|
|
|
|
|
def representation_ylabel(delta = True):
|
|
if delta:
|
|
val = 'Amplitude $A(\Delta f)$ [Hz]'
|
|
else:
|
|
val = 'Amplitude $A(f)$ [Hz]'
|
|
return val
|
|
|
|
#Signal Representation \n
|
|
#Signal Representation \n
|
|
def c_dist_recalc_func(frame_cell=[], mult_eod = 0.5, c_nrs=[], cell=[],eod_size_change = True, c_dist_recalc=True, recalc_contrast_in_perc = 1):
|
|
if len(c_nrs)<1:
|
|
c_nrs = frame_cell.c1
|
|
else:
|
|
c_nrs = np.array(c_nrs)
|
|
if c_dist_recalc: #
|
|
# ich weiß noch nicht ob das jetzt für mv oder kontraste stimmen sollte
|
|
|
|
if eod_size_change:
|
|
try:
|
|
baseline, b, eod_size, = load_eod_size(cell, max = 'perc')
|
|
except:
|
|
try:
|
|
update_ssh_file()
|
|
baseline, b, eod_size, = load_eod_size(cell, max='perc')
|
|
except:
|
|
print('EODF SIZE ESTIMATION BIASED')
|
|
|
|
eod_size = 1
|
|
#embed()
|
|
else:
|
|
eod_size = 1
|
|
|
|
#bassiert auf henninger 2020
|
|
|
|
print('eodfsize'+str(eod_size))
|
|
# also eod size mal 0.5 um den maximalen wert zu haben und mal den kotnrast
|
|
#embed()
|
|
c1 = c_to_dist(eod_size * mult_eod * c_nrs)
|
|
else:
|
|
c1 = np.array(c_nrs) * recalc_contrast_in_perc#frame_cell.c1
|
|
return c1
|
|
|
|
|
|
def calc_cv_three_wave(results_diff, position_diff, arrays = [], adds = []):
|
|
|
|
#arrays = [spikes_base,spikes_01,spikes_02, spikes_012]
|
|
for a,add in enumerate(adds):
|
|
if len(arrays[0]) > 1: # das ist für mehrere Trials
|
|
isi = np.diff(arrays[a][0]) # auch hier nehmen wir erstmal nur den ersten Trial sonst wird das komplex und zu viel
|
|
else: # für einen Trial
|
|
isi = np.diff(arrays[a][0])
|
|
|
|
#np.diff(spikes_01[0])
|
|
try:
|
|
results_diff.loc[position_diff, 'cv'+add] = np.std(isi) / np.mean(isi)
|
|
except:
|
|
print('ROC problem')
|
|
embed()
|
|
results_diff.loc[position_diff,'std_isi'+add] = np.std(isi)
|
|
results_diff.loc[position_diff, 'mean_isi'+add] = np.mean(isi)
|
|
results_diff.loc[position_diff, 'mean_isi'+add] = np.median(isi)
|
|
#embed()
|
|
burst_1, burst_2 = calc_burst_perc(results_diff.loc[position_diff, 'f0'], isi)
|
|
results_diff.loc[position_diff, 'burst_1'+add] = burst_1
|
|
results_diff.loc[position_diff, 'burst_2'+add] = burst_2
|
|
|
|
return results_diff
|
|
|
|
|
|
def deltat_sampling_factor(sampling_factor, deltat, eod_fr):
|
|
if sampling_factor == 'EODmult':
|
|
deltat = 1 / (eod_fr * 2)
|
|
elif sampling_factor != '':
|
|
deltat = sampling_factor
|
|
return deltat
|
|
|
|
|
|
def eod_fish_e_generation(time_array, a_fe=0.2, eod_fe=[750], e=0, nfft_for_morph=2 ** 14, phaseshift_fr=0,
|
|
cell_recording='', fish_morph_harmonics_var='analyze', zeros='zeros', mimick='no',
|
|
fish_emitter='Alepto', sampling=20000, stimulus_length=1, thistype='emitter'):
|
|
# WICHTIG: die ersten vier
|
|
#a_fe * np.sin(time_fish_e)
|
|
time_fish_e = time_array * 2 * np.pi * eod_fe[e]
|
|
#eod_fish_e = a_fe * np.sin(time_fish_e)
|
|
if (a_fe == 0) and (zeros != 'zeros'):
|
|
eod_fish_e = np.ones(len(time_array))
|
|
else:
|
|
# in case you want to mimick the second here you just can do it based on the dictonary of the thunderfish,
|
|
# since here we were not interested in more but one could adapt this based on the eod_fish_r_genration function
|
|
if ('Emitter' in mimick) and (thistype == 'emitter'):
|
|
if 'Wavemorph' in mimick:
|
|
input, eod_fr_data, data_array_eod, time_data_eod, eod_fish_e, pp, ff, p_array_new, f_new, amp, phase, b, t = thunder_morph_func(
|
|
phaseshift_fr, cell_recording, eod_fe[e], sampling, stimulus_length, a_fe, nfft_for_morph,
|
|
fish_morph_harmonics_var=fish_morph_harmonics_var)
|
|
else:
|
|
eod_fish_e = fakefish.wavefish_eods(fish_emitter, frequency=eod_fe[e], samplerate=sampling,
|
|
duration=stimulus_length, phase0=0.0, noise_std=0.00)
|
|
if ('Zenter' in mimick) and ('NotZentered' not in mimick):
|
|
eod_fish_e = zenter_and_normalize(eod_fish_e, a_fe)
|
|
elif ('Jammer' in mimick) and (thistype == 'jammer'):
|
|
if 'Wavemorph' in mimick:
|
|
input, eod_fr_data, data_array_eod, time_data_eod, eod_fish_e, pp, ff, p_array_new, f_new, amp, phase, b, t = thunder_morph_func(
|
|
phaseshift_fr, cell_recording, eod_fe[e], sampling, stimulus_length, a_fe, nfft_for_morph,
|
|
fish_morph_harmonics_var=fish_morph_harmonics_var)
|
|
else:
|
|
eod_fish_e = fakefish.wavefish_eods(fish_jammer, frequency=eod_fe[e], samplerate=sampling,
|
|
duration=stimulus_length, phase0=0.0, noise_std=0.00)
|
|
if ('Zenter' in mimick) and ('NotZentered' not in mimick):
|
|
eod_fish_e = zenter_and_normalize(eod_fish_e, a_fe)
|
|
else:
|
|
#time_fish_e = time_array * 2 * np.pi * eod_fe[e]
|
|
eod_fish_e = a_fe * np.sin(time_fish_e)
|
|
# this is since some of the zeros can be negative, so just made them all positiv
|
|
if (a_fe == 0) and (zeros == 'zeros'):
|
|
eod_fish_e = np.abs(eod_fish_e)
|
|
#embed()
|
|
return eod_fish_e, time_fish_e
|
|
|
|
|
|
def deltat_choice(model_params, sampling_factor, eod_fr, stimulus_length, deltat = None):
|
|
if not deltat:
|
|
deltat = model_params.pop("deltat")
|
|
deltat = deltat_sampling_factor(sampling_factor, deltat, eod_fr)
|
|
sampling = 1 / deltat
|
|
time_array = np.arange(0, stimulus_length, deltat)
|
|
return time_array, sampling, deltat
|
|
|
|
|
|
def get_arrays_for_three(cell, a_f2, a_f1, SAM, eod_stimulus, eod_fish_r, freq2, eod_fish1, eod_fishr, eod_fish2,
|
|
stimulus_length, baseline_with_wave_damping,
|
|
baseline_without_wave,
|
|
offset, model_params, n, variant,
|
|
t, adapt_offset,
|
|
upper_tol, lower_tol,
|
|
dent_tau_change,
|
|
constant_reduction,
|
|
exponential, plus,
|
|
slope, add, deltat, alpha,
|
|
sig_val,
|
|
v_exp, exp_tau, f2, trials_nr, time_array, f1, freq1,
|
|
damping_type, gain, eod_fr, damping, us_name, reshuffle='reshuffled', length_adapt = True, dev = 0.0005,
|
|
zeros = '', a_fr = 1, params_dict = {'burst_corr': ''}, redo_stim = True, nfft ='', cell_recording='', phaseshift_fr= 0, fish_emitter='', fish_receiver ='', beat ='', fish_jammer='', fish_morph_harmonics_var='', mimick ='', nfft_for_morph='', phase_right ='', sampling =''):
|
|
|
|
|
|
#######################################
|
|
# do the 01
|
|
|
|
#stimulus_01 = eod_fish1 + eod_fish_r
|
|
|
|
params_dict['eod_fish1'] = eod_fish1#}
|
|
|
|
#embed()
|
|
stimulus_01,meansmoothed05_01, spikes_01,smoothed01, mat01, offset_new, v_mem_output_01 = do_array_for_three(nfft,
|
|
a_fr,
|
|
fish_receiver,
|
|
beat,
|
|
zeros,
|
|
cell_recording,
|
|
fish_emitter,
|
|
fish_jammer,
|
|
fish_morph_harmonics_var,
|
|
mimick,
|
|
nfft_for_morph,
|
|
phase_right,
|
|
sampling,
|
|
eod_fish2,
|
|
SAM,
|
|
eod_stimulus,
|
|
eod_fish_r,
|
|
freq2,
|
|
a_f1,
|
|
a_f2,
|
|
cell,
|
|
stimulus_length,
|
|
baseline_with_wave_damping,
|
|
baseline_without_wave,
|
|
offset,
|
|
model_params,
|
|
n,
|
|
adapt_offset,
|
|
deltat,
|
|
f2,
|
|
trials_nr,
|
|
time_array,
|
|
f1,
|
|
freq1,
|
|
[],
|
|
phaseshift_fr,
|
|
dent_tau_change,
|
|
variant,
|
|
plus,
|
|
upper_tol,
|
|
lower_tol,
|
|
constant_reduction,
|
|
exponential,
|
|
slope,
|
|
add,
|
|
alpha,
|
|
v_exp,
|
|
sig_val,
|
|
exp_tau,
|
|
damping_type,
|
|
gain,
|
|
eod_fr,
|
|
damping,
|
|
us_name,
|
|
length_adapt=length_adapt,
|
|
dict_here=params_dict,
|
|
redo_stim=redo_stim,
|
|
stim_type='01',
|
|
reshuffle=reshuffle,
|
|
dev=dev)
|
|
#embed()
|
|
#######################################
|
|
# do the 02
|
|
#stimulus_02 = eod_fish2 + eod_fish_r
|
|
|
|
stimulus_02,meansmoothed05_02, spikes_02,smoothed02, mat02, offset_new, v_mem_output_02 = do_array_for_three(nfft,
|
|
a_fr,
|
|
fish_receiver,
|
|
beat,
|
|
zeros,
|
|
cell_recording,
|
|
fish_emitter,
|
|
fish_jammer,
|
|
fish_morph_harmonics_var,
|
|
mimick,
|
|
nfft_for_morph,
|
|
phase_right,
|
|
sampling,
|
|
eod_fish2,
|
|
SAM,
|
|
eod_stimulus,
|
|
eod_fish_r,
|
|
freq2,
|
|
a_f1,
|
|
a_f2,
|
|
cell,
|
|
stimulus_length,
|
|
baseline_with_wave_damping,
|
|
baseline_without_wave,
|
|
offset,
|
|
model_params,
|
|
n,
|
|
adapt_offset,
|
|
deltat,
|
|
f2,
|
|
trials_nr,
|
|
time_array,
|
|
f1,
|
|
freq1,
|
|
[],
|
|
phaseshift_fr,
|
|
dent_tau_change,
|
|
variant,
|
|
plus,
|
|
upper_tol,
|
|
lower_tol,
|
|
constant_reduction,
|
|
exponential,
|
|
slope,
|
|
add,
|
|
alpha,
|
|
v_exp,
|
|
sig_val,
|
|
exp_tau,
|
|
damping_type,
|
|
gain,
|
|
eod_fr,
|
|
damping,
|
|
us_name,
|
|
length_adapt=length_adapt,
|
|
dict_here=params_dict,
|
|
redo_stim=redo_stim,
|
|
stim_type='02',
|
|
reshuffle=reshuffle,
|
|
dev=dev)
|
|
|
|
#######################################
|
|
# do the 012
|
|
|
|
stimulus_012,meansmoothed05_012, spikes_012,smoothed012, mat012, offset_new, v_mem_output_012 = do_array_for_three(
|
|
nfft, a_fr, fish_receiver, beat, zeros, cell_recording, fish_emitter, fish_jammer, fish_morph_harmonics_var,
|
|
mimick, nfft_for_morph, phase_right, sampling, eod_fish2, SAM, eod_stimulus, eod_fish_r, freq2, a_f1, a_f2,
|
|
cell, stimulus_length, baseline_with_wave_damping, baseline_without_wave, offset, model_params, n, adapt_offset,
|
|
deltat, f2, trials_nr, time_array, f1, freq1, [], phaseshift_fr, dent_tau_change, variant, plus, upper_tol,
|
|
lower_tol, constant_reduction, exponential, slope, add, alpha, v_exp, sig_val, exp_tau, damping_type, gain,
|
|
eod_fr, damping, us_name, length_adapt=length_adapt, dict_here=params_dict, redo_stim=redo_stim,
|
|
stim_type='012', reshuffle=reshuffle, dev=dev)
|
|
print(offset)
|
|
test = False
|
|
if test:
|
|
test_stimulus()
|
|
return np.array([v_mem_output_01, v_mem_output_02, v_mem_output_012]), offset_new, mat01, mat02, mat012,smoothed01, smoothed02, smoothed012, stimulus_01, stimulus_02, stimulus_012, meansmoothed05_01, spikes_01, meansmoothed05_02, spikes_02, meansmoothed05_012, spikes_012
|
|
|
|
|
|
def calc_roc_amp_core_cocktail_for_plot( freq1, freq2, datapoints, auci_wo, auci_w, results_diff, a_f2s, fish_jammer, a, trials_nr, nfft, titles_amp, us_name, gain, runs, a_fr, nfft_for_morph, beat, printing, stimulus_length, model_cells, position_diff, dev, cell_here, indices ='', a_f1s = [],dev_name = '05', min_amps = '',n = 1, reshuffled = '',way_all = '',test = False, AUCI = 'AUCI', SAM = '_SAM_', means_differnet = '_means_',points = 5):
|
|
#embed()
|
|
model_params = model_cells[model_cells['cell'] == cell_here].iloc[0]
|
|
# model_params = model_cells.iloc[cell_nr]
|
|
|
|
# embed()
|
|
eod_fr = model_params['EODf'] # .iloc[0]
|
|
|
|
offset = model_params.pop('v_offset')
|
|
|
|
cell = model_params.pop('cell')
|
|
print(cell)
|
|
f1 = 0
|
|
f2 = 0
|
|
sampling_factor = ''
|
|
|
|
phaseshift_fr = 0
|
|
cell_recording = ''
|
|
mimick = 'no'
|
|
zeros = 'zeros'
|
|
fish_morph_harmonics_var = 'harmonic'
|
|
fish_emitter = 'Alepto' # ['Sternarchella', 'Sternopygus']
|
|
fish_receiver = 'Alepto' #
|
|
phase_right = '_phaseright_'
|
|
adapt_offset = ''#'adaptoffsetallall2'
|
|
adapt_offset = 'adaptoffset_bisecting'
|
|
constant_reduction = ''
|
|
# a_fr = 1
|
|
|
|
corr_nr = 35
|
|
lower_tol = 0.995
|
|
upper_tol = 1.005
|
|
|
|
damping = 0.45 # 0.65,0.2,0.5,0.2,0.6,0.45,0.6,0.35
|
|
damping_type = ''
|
|
exponential = ''
|
|
# embed()
|
|
dent_tau_change = 1
|
|
# in case you want a different sampling here we can adujust
|
|
time_array, sampling, deltat = deltat_choice(model_params, sampling_factor, eod_fr,
|
|
stimulus_length)
|
|
|
|
# generate the eod_fish_r in the four mimick variants (copy, thunderfish, mimick, just sinus)
|
|
eod_fish_r, deltat, eod_fr, time_array = eod_fish_r_generation(time_array, eod_fr, a_fr, stimulus_length,
|
|
phaseshift_fr, cell_recording, zeros, mimick,
|
|
sampling, fish_receiver, deltat, nfft,
|
|
nfft_for_morph,
|
|
fish_morph_harmonics_var=fish_morph_harmonics_var,
|
|
beat=beat)
|
|
sampling = 1 / deltat
|
|
multiple = 0
|
|
slope = 0
|
|
add = 0
|
|
plus = 0
|
|
sig_val = (7, 1)
|
|
variant = 'sinz'
|
|
sqrt = '_sqrt_'
|
|
if exponential == '':
|
|
v_exp = 1
|
|
exp_tau = 0.001
|
|
# prepare for adapting offset due to baseline modification
|
|
|
|
baseline_with_wave_damping, baseline_without_wave = prepare_baseline_array(time_array, eod_fr, nfft_for_morph,
|
|
phaseshift_fr, mimick, zeros,
|
|
cell_recording, sampling,
|
|
stimulus_length, fish_receiver, deltat,
|
|
nfft, damping_type, damping, us_name,
|
|
gain, beat=beat,
|
|
fish_morph_harmonics_var=fish_morph_harmonics_var)
|
|
|
|
spikes_base = [[]] * trials_nr
|
|
for run in range(runs):
|
|
print(run)
|
|
|
|
#t1 = time.time()
|
|
for t in range(trials_nr):
|
|
# get the baseline properties here
|
|
# baseline_after,spikes_base,rate_adapted, rate_baseline_before, rate_baseline_after, np.array(spike_times), stimulus_power, v_dent_output[int(0.05 / deltat):-1], offset, v_mem_output
|
|
stimulus_0 = eod_fish_r
|
|
stimulus_base = eod_fish_r
|
|
power_here = 'sinz'
|
|
|
|
#if aa == 0:
|
|
adapt_offset = 'adaptoffset_bisecting'
|
|
#else:
|
|
# adapt_offset = '' # 'adaptoffsetallall2'
|
|
#embed()
|
|
cvs, adapt_output, baseline_after_b, _, rate_adapted_b, rate_baseline_before_b, rate_baseline_after_b, \
|
|
spikes_base[t], _, _, offset_new, v_mem0,noise_final = simulate(cell, offset, stimulus_0, f1, n, power_here,
|
|
adapt_offset=adapt_offset, add=add,
|
|
alpha=alpha, reshuffle=reshuffled,
|
|
lower_tol=lower_tol, upper_tol=upper_tol,
|
|
v_exp=v_exp, exp_tau=exp_tau,
|
|
dent_tau_change=dent_tau_change,
|
|
alter_taus=constant_reduction,
|
|
exponential=exponential, exponential_mult=1,
|
|
exponential_plus=plus,
|
|
exponential_slope=slope, sig_val=sig_val,
|
|
j=f2, deltat=deltat, t=t, **model_params)
|
|
|
|
print(' offset orig '+str(offset))
|
|
#embed()
|
|
test = False
|
|
if test:
|
|
test_cvs2()
|
|
if t == 0:
|
|
# here we record the changes in the offset due to the adaptation
|
|
change_offset = offset - offset_new
|
|
# and we subsequently reset the offset to be the new adapted for all subsequent trials
|
|
offset = offset_new * 1
|
|
print(' Base ' + str(adapt_offset) + ' offset ' + str(offset))
|
|
|
|
if printing:
|
|
print('Baseline time' + str(time.time() - t1))
|
|
base_cut, mat_base = find_base_fr(spikes_base, deltat, stimulus_length, time_array, dev=dev)
|
|
|
|
#embed()
|
|
sampling_rate = 1 / deltat
|
|
length_adapt = False
|
|
base_cut, mat_base, smoothed0, mat0 = find_base_fr2(sampling_rate, spikes_base, deltat, stimulus_length, time_array, dev=dev, length_adapt = length_adapt)
|
|
#titles_amp = ['base eodf'] # ,'baseline to Zero',]
|
|
#if len(freqs1)<1:
|
|
# freqs1, freqs2 = find_rel_freq(base_cut, diagonal, freq2_ratio, freq1_ratio, eod_fr)
|
|
|
|
fr = np.mean(base_cut)
|
|
frate, isis_diff = ISI_frequency(time_array, spikes_base[0], fill=0.0)
|
|
isi = np.diff(spikes_base[0])
|
|
cv0 = np.std(isi) / np.mean(isi)
|
|
cv1 = np.std(frate) / np.mean(frate)
|
|
#embed()
|
|
|
|
#t1 = time.time()
|
|
#embed()
|
|
#if len(freqs1)>1:
|
|
# print(cell+'f1 '+str(freq1[0])+' f2 '+str(freq2[0]))
|
|
#for t in range(trials_nr):
|
|
for aaa, a_f2 in enumerate(a_f2s): # [0]
|
|
for aa, a_f1 in enumerate(a_f1s): # [0]
|
|
t1 = time.time()
|
|
phaseshift_f1, phaseshift_f2 = get_phaseshifts(a_f1, a_f2, phase_right, phaseshift_fr)
|
|
|
|
eod_fish1, time_fish_e = eod_fish_e_generation(time_array, a_f1, freq1, f1, nfft_for_morph,
|
|
phaseshift_f1, cell_recording, fish_morph_harmonics_var,
|
|
zeros, mimick, fish_emitter, sampling, stimulus_length,
|
|
thistype='emitter')
|
|
eod_fish2, time_fish_j = eod_fish_e_generation(time_array, a_f2, freq2, f2, nfft_for_morph,
|
|
phaseshift_f2, cell_recording, fish_morph_harmonics_var,
|
|
zeros, mimick, fish_jammer, sampling, stimulus_length,
|
|
thistype='jammer')
|
|
|
|
|
|
|
|
#if 'SAM' not in SAM:
|
|
# das ist egal obs SAM ist oder nicht das entshceidet sich später!
|
|
eod_stimulus = eod_fish1 + eod_fish2
|
|
#else:
|
|
if test:
|
|
eod_stimulus_d = eod_fish1 + eod_fish2
|
|
fig, ax = plt.subplots(2, 1, sharex=True, sharey=True)
|
|
ax[0].plot(time_array, eod_stimulus_d)
|
|
ax[1].plot(time_array, eod_stimulus)
|
|
plt.show()
|
|
#eod_stimulus, sam_stimulus = create_stimulus_SAM(SAM, eod_fish2, eod_fish_r, freq2, f2, eod_fr, time_array, a_f2)
|
|
if test:
|
|
fig, ax = plt.subplots(4,1, sharex = True, sharey = True)
|
|
ax[0].plot(time_array, eod_fish_r)
|
|
ax[1].plot(time_array, eod_fish2)
|
|
ax[2].plot(time_array, eod_stimulus)
|
|
ax[3].plot(time_array, eod_stimulus)
|
|
ax[0].set_xlim(0,0.1)
|
|
plt.show()
|
|
#embed()
|
|
adapt_offset_later = ''
|
|
#v_mem, offset_new, mat01, mat02, mat012,smoothed01, smoothed02, smoothed012, stimulus_01, stimulus_02, stimulus_012, meansmoothed05_01, spikes_01, meansmoothed05_02, spikes_02, meansmoothed05_012, spikes_012
|
|
|
|
|
|
v_mem, offset_new, mat01, mat02, mat012, smoothed01, smoothed02, smoothed012, stimulus_01, stimulus_02, stimulus_012, mat05_01, spikes_01, mat05_02, spikes_02, mat05_012, spikes_012 = get_arrays_for_three(
|
|
cell, a_f2, a_f1,
|
|
SAM, eod_stimulus, eod_fish_r, freq2, eod_fish1, eod_fish_r,
|
|
eod_fish2, stimulus_length,
|
|
baseline_with_wave_damping, baseline_without_wave,
|
|
offset, model_params, n, variant, t, adapt_offset_later,
|
|
upper_tol, lower_tol, dent_tau_change, constant_reduction,
|
|
exponential, plus, slope, add,
|
|
deltat, alpha, sig_val, v_exp, exp_tau, f2,
|
|
trials_nr, time_array,
|
|
f1, freq1, damping_type,
|
|
gain, eod_fr, damping, us_name, dev=dev, length_adapt = length_adapt, reshuffle=reshuffled)
|
|
|
|
#embed()
|
|
if test:
|
|
fig, ax = plt.subplots(4,1, sharex = True, sharey = True)
|
|
ax[0].plot(stimulus_0)
|
|
ax[1].plot(stimulus_01)
|
|
ax[2].plot(stimulus_02)
|
|
ax[3].plot(stimulus_012)
|
|
#ax[3].plot(eod_stimulus+stimulus_0)
|
|
plt.show()
|
|
|
|
if printing:
|
|
print('Generation process' + str(time.time() - t1))
|
|
|
|
v_mems = np.concatenate([[v_mem0],v_mem])
|
|
array0 = [mat_base]
|
|
array01 = [mat05_01]
|
|
array02 = [mat05_02]
|
|
array012 = [mat05_012]
|
|
t_off = 10
|
|
|
|
|
|
for dev_n in dev_name:
|
|
results_diff.loc[position_diff, 'fr'] = fr
|
|
results_diff.loc[position_diff, 'f1'] = freq1[0]
|
|
results_diff.loc[position_diff, 'f2'] = freq2[0]
|
|
results_diff.loc[position_diff, 'f0'] = eod_fr
|
|
|
|
results_diff.loc[position_diff, 'df1'] = np.abs(eod_fr - freq1)
|
|
results_diff.loc[position_diff, 'df2'] = np.abs(eod_fr - freq2)
|
|
results_diff.loc[position_diff, 'cell'] = cell
|
|
results_diff.loc[position_diff, 'c1'] = a_f1
|
|
results_diff.loc[position_diff, 'c2'] = a_f2
|
|
results_diff.loc[position_diff, 'trial_nr'] = trials_nr
|
|
|
|
####################################
|
|
# calc cvs
|
|
results_diff = calc_cv_three_wave(results_diff, position_diff, arrays = [spikes_base,spikes_01,spikes_02, spikes_012],adds = ['_0','_01','_02','_012'])
|
|
|
|
if dev_n == '05':
|
|
dev = 0.0005
|
|
# tp_02_all, tp_012_all
|
|
# das mit den Means ist jetzt einfach nur ein
|
|
# test wie ich die std und var und psd eigentlich gruppieren müsste
|
|
|
|
if dev_n == 'original':
|
|
array0 = [np.mean(mat0, axis=0)]
|
|
array01 = [np.mean(mat01, axis=0)]
|
|
array02 = [np.mean(mat02, axis=0)]
|
|
array012 = [np.mean(mat012, axis=0)]
|
|
elif dev_n == '05':
|
|
array0 = [np.mean(smoothed0, axis=0)]
|
|
array01 = [np.mean(smoothed01, axis=0)]
|
|
array02 = [np.mean(smoothed02, axis=0)]
|
|
array012 = [np.mean(smoothed012, axis=0)]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
####################################################################
|
|
arrays_stim = [stimulus_0, stimulus_01, stimulus_02, stimulus_012]
|
|
arrays = [array0, array01, array02, array012]
|
|
arrays_spikes = [spikes_base, spikes_01, spikes_02, spikes_012]
|
|
array_smoothed = [smoothed0, smoothed01, smoothed02, smoothed012]
|
|
array_mat = [mat0, mat01, mat02, mat012]
|
|
|
|
names = ['0', '01', '02', '012']
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
######################################
|
|
# upper and lower bound berechnen
|
|
array_smoothed = [smoothed0, smoothed01, smoothed02, smoothed012]
|
|
names = ['0', '01', '02', '012']
|
|
|
|
|
|
|
|
|
|
position_diff += 1
|
|
#embed()
|
|
#embed()
|
|
return array_mat,v_mems, arrays_spikes, arrays_stim, results_diff, position_diff,auci_wo,auci_w, arrays, names
|
|
|
|
|
|
def huxley():
|
|
np.random.seed(1000)
|
|
|
|
# Start and end time (in milliseconds)
|
|
tmin = 0.0
|
|
tmax = 50.0
|
|
|
|
# Average potassium channel conductance per unit area (mS/cm^2)
|
|
gK = 36.0
|
|
|
|
# Average sodoum channel conductance per unit area (mS/cm^2)
|
|
gNa = 120.0
|
|
|
|
# Average leak channel conductance per unit area (mS/cm^2)
|
|
gL = 0.3
|
|
|
|
# Membrane capacitance per unit area (uF/cm^2)
|
|
Cm = 1.0
|
|
|
|
# Potassium potential (mV)
|
|
VK = -12.0
|
|
|
|
# Sodium potential (mV)
|
|
VNa = 115.0
|
|
|
|
# Leak potential (mV)
|
|
Vl = 10.613
|
|
|
|
# Time values
|
|
T = np.linspace(tmin, tmax, 10000)
|
|
|
|
# Potassium ion-channel rate functions
|
|
|
|
def alpha_n(Vm):
|
|
return (0.01 * (10.0 - Vm)) / (np.exp(1.0 - (0.1 * Vm)) - 1.0)
|
|
|
|
def beta_n(Vm):
|
|
return 0.125 * np.exp(-Vm / 80.0)
|
|
|
|
# Sodium ion-channel rate functions
|
|
|
|
def alpha_m(Vm):
|
|
return (0.1 * (25.0 - Vm)) / (np.exp(2.5 - (0.1 * Vm)) - 1.0)
|
|
|
|
def beta_m(Vm):
|
|
return 4.0 * np.exp(-Vm / 18.0)
|
|
|
|
def alpha_h(Vm):
|
|
return 0.07 * np.exp(-Vm / 20.0)
|
|
|
|
def beta_h(Vm):
|
|
return 1.0 / (np.exp(3.0 - (0.1 * Vm)) + 1.0)
|
|
|
|
# n, m, and h steady-state values
|
|
|
|
def n_inf(Vm=0.0):
|
|
return alpha_n(Vm) / (alpha_n(Vm) + beta_n(Vm))
|
|
|
|
def m_inf(Vm=0.0):
|
|
return alpha_m(Vm) / (alpha_m(Vm) + beta_m(Vm))
|
|
|
|
def h_inf(Vm=0.0):
|
|
return alpha_h(Vm) / (alpha_h(Vm) + beta_h(Vm))
|
|
|
|
# Input stimulus
|
|
def Id(t):
|
|
if 0.0 < t < 1.0:
|
|
return 150.0
|
|
elif 10.0 < t < 11.0:
|
|
return 50.0
|
|
return 0.0
|
|
|
|
# Compute derivatives
|
|
def compute_derivatives(y, t0):
|
|
dy = np.zeros((4,))
|
|
|
|
Vm = y[0]
|
|
n = y[1]
|
|
m = y[2]
|
|
h = y[3]
|
|
|
|
# dVm/dt
|
|
GK = (gK / Cm) * np.power(n, 4.0)
|
|
GNa = (gNa / Cm) * np.power(m, 3.0) * h
|
|
GL = gL / Cm
|
|
|
|
dy[0] = (Id(t0) / Cm) - (GK * (Vm - VK)) - (GNa * (Vm - VNa)) - (
|
|
GL * (Vm - Vl))
|
|
|
|
# dn/dt
|
|
dy[1] = (alpha_n(Vm) * (1.0 - n)) - (beta_n(Vm) * n)
|
|
|
|
# dm/dt
|
|
dy[2] = (alpha_m(Vm) * (1.0 - m)) - (beta_m(Vm) * m)
|
|
|
|
# dh/dt
|
|
dy[3] = (alpha_h(Vm) * (1.0 - h)) - (beta_h(Vm) * h)
|
|
|
|
return dy
|
|
|
|
# State (Vm, n, m, h)
|
|
Y = np.array([0.0, n_inf(), m_inf(), h_inf()])
|
|
|
|
# Solve ODE system
|
|
# Vy = (Vm[t0:tmax], n[t0:tmax], m[t0:tmax], h[t0:tmax])
|
|
Vy = odeint(compute_derivatives, Y, T)
|
|
|
|
|
|
def damping_kashimori(stimulus, time, GbCa_=15, GbKCa_=500):
|
|
@jit(nopython=True) # (nopython=True)
|
|
def func1(x, t, R, F, stimulus, dt, GbCa, GbKCa, T, CiCa, convert_milli, convert_micro):
|
|
volt_to_milli = 1000
|
|
volt_to_milli = 1
|
|
volt_to_milli2 = 1
|
|
convert_milli = 0.001
|
|
|
|
# valance
|
|
zCl = -1
|
|
zNa = 1
|
|
zCa = 2
|
|
zK = 1
|
|
|
|
# area
|
|
Sb = 1
|
|
Sa = 20
|
|
St = Sb
|
|
|
|
# capacitance F/m^2
|
|
Ca = 0.01
|
|
Cb = 0.01
|
|
Ct = 0.01
|
|
C = 0.01
|
|
|
|
# Concentration milli Mol/l
|
|
ClNa = 15 # * convert_milli
|
|
ClK = 0.000000001 # * convert_milli
|
|
ClCa = 0.000000001 # * convert_milli
|
|
CcNa = 5 # * convert_milli
|
|
CcK = 150 # * convert_milli
|
|
CcCa = 0.01 # * convert_milli
|
|
CiNa = 150 # * convert_milli
|
|
CiK = 5 # * convert_milli
|
|
|
|
# Permeability m/s
|
|
PaNa = 1 * (10 ** -11)
|
|
PaK = 9.8 * (10 ** -11)
|
|
PaCl = 0.5 * (10 ** -11)
|
|
PbNa = 2 * (10 ** -9)
|
|
PbK = 5 * (10 ** -9)
|
|
PbCl = 1 * (10 ** -9)
|
|
PtNa = 5 * (10 ** -11)
|
|
PtK = 5 * (10 ** -11)
|
|
PtCl = 5 * (10 ** -11)
|
|
|
|
# Initialize
|
|
Fa = x[0]
|
|
Fb = x[1]
|
|
mc = x[2]
|
|
CcCaI = x[3]
|
|
# CcCa = CcCaI
|
|
C0 = x[4]
|
|
C1 = x[5]
|
|
C2 = x[6]
|
|
O2 = x[7]
|
|
O3 = x[8]
|
|
V = x[9]
|
|
m = x[10]
|
|
h = x[11]
|
|
n = x[12]
|
|
F_rest = x[13]
|
|
|
|
# concentration S/m^2
|
|
ClCl = ClNa + ClK + 2 * ClCa
|
|
CcCl = CcNa + CcK + 2 * CcCa
|
|
CiCl = CiNa + CiK + 2 * CiCa
|
|
|
|
# area
|
|
|
|
ra = Sa / Sb
|
|
rt = St / Sb
|
|
Rat = ra + rt + rt * ra
|
|
Ft = Fa - Fb
|
|
|
|
# The equillimbium potential: V
|
|
FaNa = ((R * T) / (zNa * F)) * np.log(ClNa / CcNa) * volt_to_milli
|
|
FaK = ((R * T) / (zK * F)) * np.log(ClK / CcK) * volt_to_milli
|
|
FaCl = ((R * T) / (zCl * F)) * np.log(ClCl / CcCl) * volt_to_milli
|
|
|
|
FbNa = ((R * T) / (zNa * F)) * np.log(CiNa / CcNa) * volt_to_milli
|
|
FbK = ((R * T) / (zK * F)) * np.log(CiK / CcK) * volt_to_milli
|
|
FbCa = ((R * T) / (zCa * F)) * np.log(CiCa / CcCa) * volt_to_milli
|
|
FbCl = ((R * T) / (zCl * F)) * np.log(CiCl / CcCl) * volt_to_milli
|
|
|
|
FtNa = ((R * T) / (zNa * F)) * np.log(ClNa / CiNa) * volt_to_milli
|
|
FtK = ((R * T) / (zK * F)) * np.log(ClK / CiK) * volt_to_milli
|
|
FtCl = ((R * T) / (zCl * F)) * np.log(ClCl / CiCl) * volt_to_milli
|
|
|
|
# equation 14 : Conductivity leaky channels S/m^2
|
|
etaa = (F * Fa / volt_to_milli) / (R * T) # no unit, Fa has to be in Volt for cancellation
|
|
faNa = ((zNa ** 2) * (F ** 2) * Fa * PaNa * (ClNa - CcNa * np.exp(zNa * etaa))) / (
|
|
(R * T * (Fa - FaNa)) * (1 - np.exp(zNa * etaa)))
|
|
faK = ((zK ** 2) * (F ** 2) * Fa * PaK * (ClK - CcK * np.exp(zK * etaa))) / (
|
|
(R * T * (Fa - FaK)) * (1 - np.exp(zK * etaa)))
|
|
faCl = ((zCl ** 2) * (F ** 2) * Fa * PaCl * (ClCl - CcCl * np.exp(zCl * etaa))) / (
|
|
(R * T * (Fa - FaCl)) * (1 - np.exp(zCl * etaa)))
|
|
|
|
etat = (F * Ft / volt_to_milli) / (R * T)
|
|
ftNa = ((zNa ** 2) * (F ** 2) * Ft * PtNa * (ClNa - CiNa * np.exp(zNa * etat))) / (
|
|
(R * T * (Ft - FtNa)) * (1 - np.exp(zNa * etat)))
|
|
ftK = ((zK ** 2) * (F ** 2) * Ft * PtK * (ClK - CiK * np.exp(zK * etat))) / (
|
|
(R * T * (Ft - FtK)) * (1 - np.exp(zK * etat)))
|
|
ftCl = ((zCl ** 2) * (F ** 2) * Ft * PtCl * (ClCl - CiCl * np.exp(zCl * etat))) / (
|
|
(R * T * (Ft - FtCl)) * (1 - np.exp(zCl * etat)))
|
|
|
|
etab = (F * Fb / volt_to_milli) / (R * T)
|
|
fbNa = ((zNa ** 2) * (F ** 2) * Fb * PbNa * (CiNa - CcNa * np.exp(zNa * etab))) / (
|
|
(R * T * (Fb - FbNa)) * (1 - np.exp(zNa * etab)))
|
|
fbK = ((zK ** 2) * (F ** 2) * Fb * PbK * (CiK - CcK * np.exp(zK * etab))) / (
|
|
(R * T * (Fb - FbK)) * (1 - np.exp(zK * etab)))
|
|
fbCl = ((zCl ** 2) * (F ** 2) * Fb * PbCl * (CiCl - CcCl * np.exp(zCl * etab))) / (
|
|
(R * T * (Fb - FbCl)) * (1 - np.exp(zCl * etab)))
|
|
|
|
# A5,6,7,8: Conductivity K and Ca
|
|
k_1 = 6 * (10 ** 3)
|
|
k_2 = 100 * (10 ** 3)
|
|
k_3 = 30 * (10 ** 3)
|
|
betac = 1000
|
|
delta1 = 0.2
|
|
delta2 = 0
|
|
delta3 = 0.2
|
|
K10 = 6 * (10 ** -3) # mmol/l
|
|
K20 = 45 * (10 ** -3) # mmol/l
|
|
K30 = 20 * (10 ** -3) # mmol/l
|
|
Valpha = 33 * (10 ** -3) * volt_to_milli # V
|
|
alphac0 = 450 # -s
|
|
Ks = 28000 # -s
|
|
U = 0.2
|
|
|
|
k1 = (k_1 / K10) * np.exp(
|
|
(-2 * delta1 * F * Fb / volt_to_milli) / (R * T)) # Fb has to be in V for cancellation
|
|
k2 = (k_2 / K20) * np.exp((-2 * delta2 * F * Fb / volt_to_milli) / (R * T))
|
|
k3 = (k_3 / K30) * np.exp((-2 * delta3 * F * Fb / volt_to_milli) / (R * T))
|
|
alphac = alphac0 * np.exp(-Fb / Valpha)
|
|
GbCa_var = GbCa * (mc ** 3)
|
|
dC0 = k_1 * C1 - k1 * CcCaI * C0
|
|
dC1 = k1 * CcCaI * C0 + k_2 * C2 - (k_1 + k2 * CcCaI) * C1
|
|
dC2 = k2 * CcCaI * C1 + alphac * O2 - (k_2 + betac) * C2
|
|
dO2 = betac * C2 + k_3 * O3 - (alphac + k3 * CcCaI) * O2
|
|
dO3 = k3 * CcCaI * O2 - k_3 * O3
|
|
|
|
GbKCa_var = GbKCa * (O2 + O3)
|
|
# GbKCa_var = GbKCa_ * ((np.abs(O2) + np.abs(O3))/(np.abs(C0)+np.abs(C1)+np.abs(C2)+np.abs(O2)+np.abs(O3)))
|
|
|
|
mv = 1000
|
|
Ga = faNa * (Fa - FaNa) + faK * (Fa - FaK) + faCl * (
|
|
Fa - FaCl)
|
|
Gb = fbNa * (Fb - FbNa) + fbCl * (
|
|
Fb - FbCl) + fbK * (Fb - FbK) + GbCa_var * (Fb - FbCa) + GbKCa_var * (
|
|
Fb + FbK)
|
|
# print('Na:')
|
|
# print((fbNa * FbNa))
|
|
# print('K:')
|
|
# print((fbK *FbK))
|
|
# print('Cl:')
|
|
# print((fbCl *FbCl))
|
|
# print('Ca:')
|
|
# print(((GbCa_) *FbCa))
|
|
# print('Kgated:')
|
|
# print(((FbK)))
|
|
# embed()
|
|
# print(fbNa * FbNa+ fbK *FbK+fbCl *FbCl+(GbCa_) *FbCa+(GbKCa_) *FbK)
|
|
|
|
Gt = ftNa * (Fa - Fb - FtNa) + ftK * (Fa - Fb - FtK) + ftCl * (
|
|
Fa - Fb - FtCl)
|
|
Gt_resting = (ftNa * FtNa + ftK * FtK + ftCl * FtCl) / (ftNa + ftK + ftCl)
|
|
# print(Gt_resting)
|
|
# embed()
|
|
try:
|
|
stimulus1 = stimulus[int(np.round(t / dt))] * convert_micro * 10000 * volt_to_milli
|
|
except:
|
|
stimulus1 = stimulus[0] * convert_micro * 10000 * volt_to_milli
|
|
print('error in indexing')
|
|
print(int(np.round(t / dt)))
|
|
# print(int(np.round(t / dt)))
|
|
|
|
dFa = (1 / (C * Rat)) * (-(ra + rt) * stimulus1 - ra * (
|
|
1 + rt) * Ga - rt * Gb - rt * Gt)
|
|
dFb = (1 / (C * Rat)) * (ra * (ra + rt) * stimulus1 - ra * rt * Ga - (
|
|
ra + rt) * Gb + ra * rt * Gt)
|
|
# dFb_rest = (faNa * (F_rest - FaNa) + faK * (F_rest - FaK) + faCl * (
|
|
# F_rest - FaCl))/C
|
|
# embed()
|
|
dFb_rest = (1 / (C * Rat)) * (- ra * rt * Ga - (
|
|
ra + rt) * Gb + ra * rt * Gt)
|
|
# dFb_rest = (ftNa * (F_rest - FtNa) + ftK * (F_rest - FtK) + ftCl * (
|
|
# F_rest - FtCl))/ C
|
|
# A2,3,4 gating paramter of calcium conductivity
|
|
V0 = 70 * convert_milli * volt_to_milli
|
|
Vb = 6.17 * convert_milli * volt_to_milli
|
|
beta0 = 0.97
|
|
Kb = 940
|
|
alpha0 = 22800
|
|
Va = 8.01 * convert_milli * volt_to_milli
|
|
Ka = 510
|
|
beta = beta0 * np.exp((Fb + V0) / Vb) + Kb # s^-1
|
|
alpha = alpha0 * np.exp(-(Fb + V0) / Va) + Ka # s^-1
|
|
dmc = beta * (1 - mc) - alpha * mc # s^-1
|
|
|
|
IbCa = GbCa * (mc ** 3) * (Fb - FbCa)
|
|
if IbCa == -0:
|
|
IbCa = 0
|
|
l = 25 * (10 ** -6) # m
|
|
Xi = 3.4 * (10 ** -6) # fraction of the volume that aborbs Ca the bigger the fraction the smaller Ca should be
|
|
const = (U) / (2 * Xi * l * F) # * 1000
|
|
dCcCa = const * IbCa - Ks * CcCaI
|
|
|
|
# embed()
|
|
Cn = 0.01 # S/m^2
|
|
gNa_ = 1200 # S/m^2
|
|
gK_ = 400 # S/m^2
|
|
gl = 2.4 # S/m^2
|
|
VNa = 0.056 * volt_to_milli2 # V
|
|
# VNa = 56
|
|
VK = -0.093 * volt_to_milli2 # V
|
|
# VK = -93
|
|
Vl = -0.03 * volt_to_milli2 # V
|
|
# Vl = -30
|
|
w = 4.7
|
|
eta = 0.150 * volt_to_milli2 # A/m^2
|
|
e = 0.050 * volt_to_milli2 # A/m^2
|
|
# alpha = np.pi
|
|
Ips = ((w) / (1 + np.exp(-(np.abs(IbCa * volt_to_milli2) - eta) / e))) * volt_to_milli2
|
|
# Ips = IbCa*100
|
|
dV = (-gNa_ * (m ** 3) * h * (V - VNa) - gK_ * (n ** 4) * (V - VK) - gl * (V - Vl) + Ips) / Cn # Volt
|
|
nerve_resting = (gNa_ * VNa + gK_ * VK + gl * Vl) / (gNa_ + gK_ + gl)
|
|
# embed()
|
|
betahinf = 1.8 # *(10**3)#ms
|
|
mV = V * 1000 / volt_to_milli2 # mv
|
|
beta_ending = 1000 # tranfer ms and mv back in v and s
|
|
alpham = (-0.1 * (mV + 40) / (np.exp(-(mV + 40) / 10)) - 1) * beta_ending # s
|
|
betam = (4 * np.exp(-(mV + 65) / 18)) * beta_ending # s
|
|
alphah = (0.07 * np.exp(-(mV + 65) / 20)) * beta_ending # s
|
|
betah = (betahinf / (np.exp(-(mV + 35) / 10) + 1)) * beta_ending # s
|
|
alphan = (-0.01 * (mV + 55) / (np.exp(-(mV + 55) / 10) - 1)) * beta_ending # s
|
|
betan = (0.125 * np.exp(-(mV + 65) / 80))
|
|
dm = alpham - (alpham + betam) * m # s^-1
|
|
dh = alphah - (alphah + betah) * h # s^-1
|
|
dn = alphan - (alphan + betan) * n # s^-1
|
|
# dFa = 0
|
|
# dFb = 0
|
|
# dmc = 0
|
|
# dCcCa = 0
|
|
# dC0 = 0
|
|
# dC1 = 0
|
|
# dC2 = 0
|
|
# dO3 = 0
|
|
# dm = 0
|
|
# dh = 0
|
|
# dn = 0
|
|
# dV = 0
|
|
vars = (dFa, dFb, dmc, dCcCa, dC0, dC1, dC2, dO2, dO3, dV, dm, dh, dn, dFb_rest)
|
|
# embed()
|
|
return vars
|
|
|
|
convert_mili = 0.001
|
|
convert_micro = 0.000001
|
|
|
|
R = 8.31446261815324
|
|
F = 96485.3329
|
|
x = [[]] * 14
|
|
volt_to_milli = 1000
|
|
x[0] = -0.03 # *volt_to_milli # Fa =
|
|
x[1] = -0.050 # *volt_to_milli # = Fb
|
|
x[2] = 0 # = mc
|
|
x[3] = 0.01 * (10 ** -3) # = CcCa
|
|
x[4] = 0.05 # = C0
|
|
x[5] = 0.05 # = C1
|
|
x[6] = 0.1 # = C2
|
|
x[7] = 0.4 # = O2
|
|
x[8] = 0.4 # = O3
|
|
x[9] = -0.08 # *volt_to_milli # = V
|
|
x[10] = 1 # = m
|
|
x[11] = 0 # = h
|
|
x[12] = 0.5 # = n
|
|
x[13] = -0.08
|
|
CiCa = 1 # *(10**-3) #milli mol/l
|
|
T = 298.5 # K in Koshimori
|
|
|
|
us = odeint(func1, x, time, args=(
|
|
R, F, stimulus, np.abs(time[0] - time[1]), GbCa_, GbKCa_, T, CiCa, convert_mili,
|
|
convert_micro)) # ,hmin = np.abs(time[0]-time[1]),hmax = np.abs(time[0]-time[1])
|
|
|
|
mc = us[:, 2]
|
|
Fb = us[:, 1]
|
|
CcCa = us[:, 3]
|
|
zCa = 2
|
|
FbCa = ((R * T) / (zCa * F)) * np.log(CiCa / CcCa)
|
|
IbCa = GbCa_ * (mc ** 3) * (Fb - FbCa)
|
|
# embed()
|
|
return np.std(IbCa), np.abs(np.min(IbCa)) - np.abs(np.max(IbCa)), IbCa, us
|
|
|
|
|
|
def damping_hundspet(mechanical, stimulus, time, damping_type):
|
|
convert_SI = 1
|
|
convert_SI_minus = 1 / convert_SI
|
|
convert_mili = 0.001 * convert_SI
|
|
convert_micro = 0.000001 * convert_SI
|
|
convert_nano = 0.000000001 * convert_SI
|
|
convert_pico = 0.000000000001 * convert_SI
|
|
thousand = 1
|
|
x = [[]] * 8
|
|
# x[0] = -0.60 * convert_mili # Fa =
|
|
x[0] = -0.05 # 30 * convert_mili # = Fb
|
|
x[1] = 0.27 # = mc
|
|
x[2] = 0.1 # * convert_mili * thousand # = CcCa
|
|
x[3] = 0.05 # = C0
|
|
x[4] = 0.05 # = C1
|
|
x[5] = 0.1 # = C2
|
|
x[6] = 0.4 # = O2
|
|
x[7] = 0.4 # = O3
|
|
|
|
@jit(nopython=True) # (nopython=True)
|
|
def func1(x, t, R, damping_type, F, convert_SI_minus, convert_SI, thousand, stimulus, dt, T, CiCa,
|
|
convert_milli, convert_micro, convert_nano, convert_pico, mechanical):
|
|
|
|
# Initialize
|
|
|
|
# Fa = x[0]
|
|
Fb = x[0]
|
|
mc = x[1]
|
|
CcCaI = x[2]
|
|
C0 = x[3]
|
|
C1 = x[4]
|
|
C2 = x[5]
|
|
O2 = x[6]
|
|
O3 = x[7]
|
|
# embed()
|
|
# GbCa = x[10]
|
|
|
|
# A5,6,7,8: Conductivity K and Ca
|
|
GbKCa_ = 16.8 * convert_nano # S
|
|
FbK = -80 * convert_milli # V
|
|
FbCa = 100 * convert_milli # V
|
|
GbCa_ = 4.14 * convert_nano # S
|
|
|
|
# same parameter for kinetic sheme
|
|
k_1 = 300 * convert_SI_minus # s^-1
|
|
k_2 = 5000 * convert_SI_minus # s^-1
|
|
k_3 = 1500 * convert_SI_minus # s^-1
|
|
betac = 1000 * convert_SI_minus # s^-1
|
|
alphac0 = 450 * convert_SI_minus # s^-1
|
|
delta1 = 0.2
|
|
delta2 = 0
|
|
delta3 = 0.2
|
|
K10 = 6 * convert_micro # mol/l
|
|
K20 = 45 * convert_micro # mol/l
|
|
K30 = 20 * convert_micro # mol/l
|
|
Valpha = 33 * convert_milli # V
|
|
alphac = alphac0 * np.exp(-Fb / Valpha) # s^-1
|
|
GbCa = GbCa_ * (mc ** 3) # from kashimori: S
|
|
if 'nieman' in damping_type:
|
|
K1 = (K10 * np.exp((-1 * delta1 * F * Fb) / (R * T)))
|
|
k1 = (k_1 / K1)
|
|
K2 = (K20 * np.exp((-1 * delta2 * F * Fb) / (R * T)))
|
|
k2 = (k_2 / K2)
|
|
K3 = (K30 * np.exp((-1 * delta3 * F * Fb) / (R * T)))
|
|
k3 = (k_3 / K3)
|
|
GbKCa = GbKCa_ * (O2 + O3)
|
|
dC0 = 0
|
|
C0 = 1 - (C1 + C2 + O2 + O3)
|
|
|
|
else:
|
|
K1 = (K10 * np.exp((-2 * delta1 * F * Fb) / (R * T))) # mol/l
|
|
k1 = (k_1 / K1) # l/(s*mol)
|
|
K2 = (K20 * np.exp((-2 * delta2 * F * Fb) / (R * T))) # mol/l
|
|
k2 = (k_2 / K2) # l/(s*mol)
|
|
K3 = (K30 * np.exp((-2 * delta3 * F * Fb) / (R * T))) # mol/l
|
|
k3 = (k_3 / K3) # l/(s*mol)
|
|
|
|
dC0 = k_1 * C1 - k1 * CcCaI * C0 # CcCaI here is mol/l
|
|
# embed()
|
|
# GbKCa = GbKCa_ * (O2/(C0+C1+C2+O2+O3) + O3/(C0+C1+C2+O2+O3))
|
|
GbKCa = GbKCa_ * (O2 + O3) # S
|
|
# GbKCa = GbKCa_ * ((np.abs(O2) + np.abs(O3))/(np.abs(C0)+np.abs(C1)+np.abs(C2)+np.abs(O2)+np.abs(O3)))
|
|
dC1 = k1 * CcCaI * C0 + k_2 * C2 - (k_1 + k2 * CcCaI) * C1
|
|
dC2 = k2 * CcCaI * C1 + alphac * O2 - (k_2 + betac) * C2
|
|
dO2 = betac * C2 + k_3 * O3 - (alphac + k3 * CcCaI) * O2
|
|
dO3 = k3 * CcCaI * O2 - k_3 * O3
|
|
try:
|
|
stimulus1 = stimulus[int(np.round(t / dt))]
|
|
except:
|
|
stimulus1 = stimulus[0]
|
|
print('error in indexing')
|
|
# print(int(np.round(t / dt)))
|
|
# stimulus1 = 0
|
|
# print(int(np.round(t / dt)))
|
|
FbL = -30 * convert_milli # V
|
|
fbL = 1 * convert_nano # S
|
|
C = 15 * convert_pico # F
|
|
x = 20 * convert_nano # m
|
|
|
|
G1 = 0.75 * 1000 # kcal/mol = 1000 cal/mol
|
|
G2 = 0.25 * 1000 # kcal/mol = 1000 cal/mol
|
|
Z1 = 10 * 1000 * 10 ** 6 # kcal/mol microm = 1000 10**6 cal/mol* m
|
|
Z2 = 2 * 1000 * 10 ** 6 # kcal/mol microm = 1000 10**6 cal/mol* m
|
|
A = (G1 - Z1 * x) / (R * T)
|
|
B = (G2 - Z2 * x) / (R * T)
|
|
Fbt = 0 * convert_milli # V
|
|
gt_ = 3 * convert_nano # S
|
|
gt = gt_ / (1 + np.exp(B) * (1 + np.exp(A))) # S
|
|
# embed()
|
|
if mechanical == 'mechanical':
|
|
mechanical = gt * (Fb - Fbt)
|
|
else:
|
|
mechanical = 0
|
|
dFb = -(fbL * (Fb - FbL) + GbCa * (Fb - FbCa) + GbKCa * (
|
|
Fb - FbK) + mechanical - stimulus1) / C # +fbCa*(Pb -PbCa)
|
|
|
|
# print(gt * (Fb - Fbt))
|
|
|
|
# embed()
|
|
# A2,3,4 gating paramter of calcium conductivity
|
|
alpha0 = 22800 * convert_SI_minus # s^-1
|
|
V0 = 70 * convert_milli # V
|
|
VA = 8.01 * convert_milli # V
|
|
Ka = 510 * convert_SI_minus # s^-1
|
|
beta0 = 0.97 * convert_SI_minus # s^-1
|
|
VB = 6.17 * convert_milli # V
|
|
Kb = 940 * convert_SI_minus # s^-1
|
|
|
|
beta = beta0 * np.exp((Fb + V0) / VB) + Kb
|
|
alpha = alpha0 * np.exp(-(Fb + V0) / VA) + Ka
|
|
dm = beta * (1 - mc) - alpha * mc
|
|
# print(V0)
|
|
# print(mc)
|
|
IbCa = GbCa_ * (mc ** 3) * (Fb - FbCa) # A
|
|
if IbCa == -0:
|
|
IbCa = 0
|
|
|
|
U = 0.02
|
|
Xi = 3.4 * (
|
|
10 ** -5) # fraction of volume that binds Ca, the bigger this is the smaller should be Ca increase therefore I guess this factor is necessary
|
|
Cvol = 1.25 * convert_pico # l
|
|
Ks = 2800 * convert_SI_minus ##s^-1
|
|
if 'nieman' in damping_type:
|
|
const = -0.00061
|
|
else:
|
|
const = (U / (2 * F * Cvol * Xi))
|
|
dCcCa = (const * IbCa) - Ks * CcCaI # concentration is mol/l
|
|
vars = (dFb, dm, dCcCa, dC0, dC1, dC2, dO2, dO3)
|
|
return vars
|
|
|
|
R = 8.31446261815324
|
|
F = 96485.336
|
|
CiCa = 1 * convert_mili * thousand
|
|
T = 298.5
|
|
# embed()
|
|
# stimulus = np.ones(len(stimulus))*10
|
|
# stimulus = stimulus*2000* convert_pico
|
|
# embed()
|
|
# stimulus = stimulus * 2000 * convert_pico
|
|
stimulus = stimulus * 20 * convert_pico
|
|
# stimulus = stimulus / 2 + np.min(stimulus)
|
|
# embed()
|
|
# stimulus = (stimulus*(10**-12)-4.2*(10**-11)) #10 goes to 10**-11, but then devide by 10 to get a 0.02, and ofset
|
|
# embed()
|
|
# stimulus = np.concatenate([np.zeros(int(0.02*1/(np.abs(time[0] - time[1])))),np.ones(int(2*1/(np.abs(time[0] - time[1])))),np.zeros(int(0.02*1/np.abs((time[0] - time[1]))))])*120** convert_pico
|
|
# embed()
|
|
# embed()
|
|
# embed()
|
|
us = odeint(func1, x, time, args=(
|
|
R, damping_type, F, convert_SI_minus, convert_SI, thousand, stimulus, np.abs(time[0] - time[1]), T, CiCa,
|
|
convert_mili,
|
|
convert_micro, convert_nano, convert_pico, mechanical),
|
|
full_output=True) # ,hmin = np.abs(time[0]-time[1]),hmax = np.abs(time[0]-time[1]) # full_output = True #,hmin = np.abs(time[0]-time[1])/10,hmax = np.abs(time[0]-time[1])*10 #
|
|
# embed()
|
|
# plt.subplot(3, 4, 1)
|
|
# plt.plot(stimulus) # [100:len(time)]
|
|
# titles = ['Va', 'm', 'CCa', 'Closed0', 'Closed1', 'Closed2', 'Open2',
|
|
# 'Open3']
|
|
|
|
# for i in range(8):
|
|
# plt.subplot(3, 4, i + 2)
|
|
# plt.title(titles[i])
|
|
# plt.plot(us[0][:, i]) # [100:len(time)]
|
|
# # plt.plot(us[1][:, i][100:len(time)])
|
|
# # plt.xlim()
|
|
# plt.subplots_adjust(hspace=0.35, wspace=0.35)
|
|
# plt.show()
|
|
# mc = us[0][:, 1]
|
|
# Fb = us[0][:, 0]
|
|
# CcCa = us[0][:, 2]
|
|
# zCa = 2
|
|
# GbCa = 4.14 * convert_nano
|
|
# FbCa = (R * T / zCa * F) * np.log(CiCa / CcCa)
|
|
# IbCa = GbCa * (mc ** 3) * (Fb - FbCa)
|
|
# embed()
|
|
return us
|
|
|
|
|
|
def plot_kashimori(stimulus, time, us, IbCa):
|
|
plt.figure(figsize=(8, 4))
|
|
plt.subplot(4, 4, 1)
|
|
plt.plot(stimulus[400:len(time)]) # [400:len(time)]
|
|
plt.title('Stimulus')
|
|
titles = ['Va', 'Vb', 'mc', 'CCa', 'Closed0', 'Closed1', 'Closed2',
|
|
'Open2', 'Open3', 'Vcell', 'm', 'h', 'n', 'Resting']
|
|
for i in range(14):
|
|
axis = plt.subplot(4, 4, i + 2)
|
|
plt.title(titles[i])
|
|
plt.plot(us[:, i][400:len(time)]) #
|
|
# plt.gca().yaxis.set_major_formatter(plt.matplotlib.ticker.StrMethodFormatter('{x:,.0000000000000000000000f}'))
|
|
# axis.set_major_locator(ticker.MaxNLocator(integer=True))
|
|
# plt.xlim()
|
|
plt.subplot(4, 4, 14 + 2)
|
|
plt.title('IbCa')
|
|
plt.plot(IbCa[400:len(time)])
|
|
plt.subplots_adjust(hspace=1.55, wspace=1.1)
|
|
plt.savefig(
|
|
'../results/beatpaper/kashimori_.png')
|
|
|
|
plt.show()
|
|
# embed()
|
|
|
|
|
|
def all_damping_variants(stimulus, time_array, damping_type='', eod_fr=750, damping_gain=1, damping='', damping_element='',
|
|
damping_output=[], plot=False, std_dump=0, max_dump=0, range_dump=0):
|
|
# function: here you can choose the way of dumping but in realitiy only the damping_type == 'damping' is properly done,
|
|
# the rest would need further modifications
|
|
|
|
if (damping_type == 'damping'):
|
|
stimulus_old = stimulus * 1
|
|
damping_output, stimulus, std_dump, max_dump, range_dump = damping_func(stimulus, time_array, eod_fr, damping,
|
|
damping_element, damping_gain)
|
|
|
|
# embed()
|
|
elif (damping_type == 'damping_hundspeth') or (damping_type == 'damping_nieman'):
|
|
std_dump, extent, IbCa, damping_output = damping_hundspet(stimulus, time_array, damping_type)
|
|
elif damping_type == 'damping_kashimori':
|
|
std_dump, extent, IbCa, damping_output = damping_kashimori(stimulus, time_array)
|
|
if plot == True:
|
|
plot_kashimori(stimulus, time_array, damping_output, IbCa)
|
|
elif damping_type == 'damping_huxley':
|
|
huxley()
|
|
#embed()
|
|
return std_dump, max_dump, range_dump, stimulus, damping_output,
|
|
|
|
|
|
def do_array_for_three(nfft, a_fr, fish_receiver, beat, zeros, cell_recording, fish_emitter, fish_jammer,
|
|
fish_morph_harmonics_var, mimick, nfft_for_morph, phase_right, sampling, eod_fish2, SAM,
|
|
eod_stimulus, eod_fish_r, freq2, a_f1, a_f2, cell, stimulus_length, baseline_with_wave_damping,
|
|
baseline_without_wave, offset, model_params, n, adapt_offset, deltat, f2, trials_nr, time_array,
|
|
f1, freq1, stimulus, phaseshift_fr=0, dent_tau_change=1, variant='sinz', plus=1, upper_tol=1.005,
|
|
lower_tol=0.995, constant_reduction=1, exponential='', exponent_slope=1, add=0,
|
|
threshold_alpha=1, v_exp=1, exp_sig_val=1, exp_tau=1, damping_type='', damping_gain=1,
|
|
eod_fr=750, damping='', damping_variant='', length_adapt=True, dict_here=[], redo_stim=False,
|
|
stim_type='01', reshuffle='reshuffled', dev=0.0005):
|
|
spikes = [[]] * trials_nr
|
|
spikes_bef = [[]] * trials_nr
|
|
for t in range(trials_nr):
|
|
if (t == 0) | (type(phaseshift_fr) == str):
|
|
#if (type(phaseshift_fr) == str):#fish_receiver,beat
|
|
#embed()
|
|
if redo_stim:
|
|
eod_fish_r, deltat, eod_fr, time_array = eod_fish_r_generation(time_array, eod_fr, a_fr,
|
|
stimulus_length, phaseshift_fr,
|
|
cell_recording, zeros, mimick, sampling,
|
|
fish_receiver, deltat, nfft,
|
|
nfft_for_morph,
|
|
fish_morph_harmonics_var=fish_morph_harmonics_var,
|
|
beat=beat)
|
|
eod_fish1, eod_fish2, eod_stimulus, t1 = stimulus_threefish(a_f1, a_f2, cell_recording, f1, f2,
|
|
fish_emitter, fish_jammer, freq1, freq2,
|
|
fish_morph_harmonics_var, mimick,
|
|
nfft_for_morph, phase_right, phaseshift_fr,
|
|
sampling, stimulus_length, time_array,
|
|
zeros)
|
|
# if we need new stimulus each time we generate it here each time
|
|
#embed()
|
|
if stim_type == '02':
|
|
stimulus, eod_fish_sam = create_stimulus_SAM(SAM, eod_fish2, eod_fish_r, freq2, f2,
|
|
eod_fr,
|
|
time_array, a_f2, eod_fj=freq2, j=f2,
|
|
a_fj=a_f2, ) # three='Three'
|
|
# embed()
|
|
elif stim_type == '012':
|
|
stimulus, eod_fish_sam = create_stimulus_SAM(SAM, eod_stimulus, eod_fish_r, freq1, f1,
|
|
eod_fr,
|
|
time_array, a_f1, eod_fj=freq2, j=f2,
|
|
a_fj=a_f2, three='Three')#SAM, eod_stimulus, eod_fish_r,freq2,a_f1, a_f2
|
|
elif stim_type == '01':
|
|
stimulus, eod_fish_sam = create_stimulus_SAM(SAM, dict_here['eod_fish1'], eod_fish_r, freq1, f1,
|
|
eod_fr,
|
|
time_array, a_f1, eod_fj=freq1, j=f2,
|
|
a_fj=a_f2, ) # three='Three'
|
|
stimulus_orig = stimulus * 1
|
|
|
|
# damping variants
|
|
std_dump, max_dump, range_dump, stimulus, damping_output = all_damping_variants(stimulus, time_array,
|
|
damping_type, eod_fr, damping_gain,
|
|
damping, damping_variant, plot=False,
|
|
std_dump=0, max_dump=0,
|
|
range_dump=0)
|
|
|
|
# stimuli.append(stimulus)
|
|
cvs, adapt_output, baseline_after, _, rate_adapted, rate_baseline_before, rate_baseline_after, spikes_bef[t], \
|
|
stimulus_altered, \
|
|
v_dent_output, offset_new, v_mem_output,noise_final = simulate(cell, offset, stimulus, f1, n, variant,
|
|
adapt_offset=adapt_offset, add=add, alpha=threshold_alpha,
|
|
reshuffle=reshuffle, lower_tol=lower_tol,
|
|
upper_tol=upper_tol, v_exp=v_exp,
|
|
exp_tau=exp_tau, dent_tau_change=dent_tau_change,
|
|
alter_taus=constant_reduction,
|
|
exponential=exponential, exponential_mult=1,
|
|
exponential_plus=plus, exponential_slope=exponent_slope,
|
|
sig_val=exp_sig_val, j=f2,
|
|
baseline_with_wave_damping=baseline_with_wave_damping,
|
|
damping=damping, deltat=deltat, t=t,
|
|
**model_params)
|
|
|
|
isi = calc_isi(spikes_bef[t], eod_fr)
|
|
spikes[t] = spikes_after_burst_corr(spikes_bef[t], isi, dict_here['burst_corr'], cell, eod_fr,
|
|
model_params=model_params)
|
|
|
|
test = False
|
|
#embed()
|
|
if test:
|
|
fig, ax = plt.subplots(2, 1, sharex=True)
|
|
# 1/eod_fr
|
|
ax[0].eventplot(spikes_bef[t], color='red')
|
|
|
|
ax[1].eventplot(spikes[t])
|
|
ax[1].eventplot(spikes_bef[t], color='red')
|
|
ax[1].set_xlim(0, 0.1)
|
|
plt.show()
|
|
#embed()
|
|
#print(spikes[t])
|
|
#spikes_mat = [[]] * len(spikes)
|
|
#for s in range(len(spikes)):
|
|
# spikes_mat[s] = cr_spikes_mat(spikes[s], 1 / deltat, int(stimulus_length * 1 / deltat))
|
|
# das machen
|
|
# das mit der Längen Begrenzung finde ich nicht so gut!
|
|
|
|
if length_adapt == False:
|
|
|
|
spikes_mat = [[]] * len(spikes)
|
|
for s in range(len(spikes)):
|
|
spikes_mat[s] = cr_spikes_mat(spikes[s], 1 / deltat, int(stimulus_length * 1 / deltat))
|
|
|
|
else:
|
|
spikes_mat = spikes_mat_depending_on_length(spikes, deltat, stimulus_length)
|
|
|
|
sampling_rate = 1 / deltat
|
|
if dev != 'original':
|
|
smoothed = gaussian_filter(spikes_mat, sigma=dev * sampling_rate)
|
|
else:
|
|
smoothed = spikes_mat
|
|
mean_smoothed = np.mean(smoothed, axis=0)
|
|
#embed()
|
|
return stimulus,mean_smoothed, spikes,smoothed,spikes_mat, offset_new, v_mem_output
|
|
|
|
|
|
def stimulus_threefish(a_f1, a_f2, cell_recording, f1, f2, fish_emitter, fish_jammer, freq1, freq2,
|
|
fish_morph_harmonics_var, mimick, nfft_for_morph, phase_right, phaseshift_fr, sampling,
|
|
stimulus_length, time_array, zeros):
|
|
t1 = time.time()
|
|
phaseshift_f1, phaseshift_f2 = get_phaseshifts(a_f1, a_f2, phase_right, phaseshift_fr)
|
|
if phaseshift_fr == 'randALL':
|
|
phaseshift_f1 = np.random.rand() * 2 * np.pi
|
|
phaseshift_f2 = np.random.rand() * 2 * np.pi
|
|
# embed()
|
|
eod_fish1, time_fish_e = eod_fish_e_generation(time_array, a_f1, freq1, f1, nfft_for_morph, phaseshift_f1,
|
|
cell_recording, fish_morph_harmonics_var, zeros, mimick, fish_emitter,
|
|
sampling, stimulus_length, thistype='emitter')
|
|
eod_fish2, time_fish_j = eod_fish_e_generation(time_array, a_f2, freq2, f2, nfft_for_morph, phaseshift_f2,
|
|
cell_recording, fish_morph_harmonics_var, zeros, mimick, fish_jammer,
|
|
sampling, stimulus_length, thistype='jammer')
|
|
# if 'SAM' not in SAM:
|
|
# das ist egal obs SAM ist oder nicht das entshceidet sich später!
|
|
eod_stimulus = eod_fish1 + eod_fish2
|
|
# else:
|
|
return eod_fish1, eod_fish2, eod_stimulus, t1
|
|
|
|
|
|
def check_peak_overlap_only_stim_big_final(stimulus_length_data=0.5, stimulus_length=25, dev=0.001, freqs=[(39.5, -210.5)],
|
|
dev_name='', min_amps='', a_f2s=0.1, n=1, reshuffled='reshuffled', datapoints=1000,
|
|
limit=10.2, a_f1s=[0.03], pdf=True, printing=False, plus_q='minus', males=1 / 2,
|
|
diagonal='diagonal', females=2 / 3, way='absolut', runs=1, trials_nrs=[500],
|
|
cells=[], show=False, nfft=int(2 ** 15), beat='', nfft_for_morph=4096 * 4, gain=1,
|
|
sampling_factors=[''],
|
|
fish_receiver='Alepto', end_f1=4645,
|
|
fish_jammer='Alepto', reshuffle='reshuffled',
|
|
redo_level='celllevel', step=10, zeros='zeros', corr='ratecorrrisidual',
|
|
us_name='', start_f1=20, plot=False):
|
|
runs = 1
|
|
n = 1
|
|
|
|
default_settings() # ts=13, ls=13, fs=13, lw = 0.7
|
|
|
|
# extra combination with female small
|
|
a_f1s = [0.1]
|
|
a_f2s = np.logspace(np.log10(0.0001), np.log10(1), 25)
|
|
|
|
# standard combination with intruder small
|
|
a_f2s = [0.1]
|
|
a_f1s = [0.03] # np.logspace(np.log10(0.0001), np.log10(1), 25)
|
|
|
|
min_amps = '_minamps_'
|
|
females = np.arange(500, 800, 25)
|
|
males = np.arange(750, 1000, 25)
|
|
dev_name = '05'
|
|
step_type = 'mult'
|
|
|
|
start_mult = 'mult'
|
|
step1 = 0.005 # 0.01
|
|
step2 = 0.005 # 0.01
|
|
start_f1 = 1 # 0.1#0.5#0.1#0.1#0.65#0.5#,0.65#0.01#0.5#0.75#0.8
|
|
end_f1 = 1.3 # 2.5#1.5#2.5#2.5#0.8#1.1#0.8#2.5#1.2#0.75#2.5#2.5#2.5#2.5#2.5#1.7#2.5#1.7
|
|
start_f2 = 1 # 0.1#0.5#0.1#47#0.95#0.47#0.65#0.01#0.75#0.75#0.8
|
|
end_f2 = 1.3 # 2.5#1.50#.1#2.5#0.8#2.5#1.2#2.5#2.5#2.5#2.5#1.7#2.5#1.7
|
|
|
|
model_cells = pd.read_csv(load_folder_name('calc_model_core') + "/models_big_fit_d_right.csv")
|
|
# if len(cells) < 1:
|
|
cells = ['2011-10-25-ad-invivo-1']
|
|
cells_here = np.array(model_cells.cell)
|
|
|
|
a_fr = 1
|
|
a = 0
|
|
trials_nrs = [1]
|
|
|
|
datapoints = 1000
|
|
# stimulus_length = 2
|
|
results_diff = pd.DataFrame()
|
|
position_diff = 0
|
|
# plotstyle()
|
|
default_settings(column=2, length=8.5)
|
|
for trials_nr in trials_nrs: # +[trials_nrs[-1]]
|
|
|
|
# sachen die ich variieren will
|
|
###########################################
|
|
single_wave = '_SeveralWave_' # , '_SingleWave_']
|
|
|
|
auci_wo = []
|
|
auci_w = []
|
|
|
|
nfft = 32768 # 2**16##6#32768#2**12#32768
|
|
cells_here = ['2012-06-27-an-invivo-1']
|
|
# embed()
|
|
for cell_here in cells_here:
|
|
# embed()
|
|
full_names = [
|
|
'calc_model_amp_freqs-F1_750-975-25_F2_500-775-25_C2_0.1_C1Len_25_FirstC1_0.0001_LastC1_1.0_StimLen_' + str(
|
|
stimulus_length) + '_nfft_' + str(nfft) + '_trialsnr_1_absolut_power_1_minamps__dev_05temporal']
|
|
full_names_original = [
|
|
'calc_model_amp_freqs-F1_750-975-25_F2_500-775-25_C2_0.1_C1Len_25_FirstC1_0.0001_LastC1_1.0_StimLen_' + str(
|
|
stimulus_length) + '_nfft_' + str(
|
|
nfft) + '_trialsnr_1_absolut_power_1_minamps_temporal'] # das ist das original!
|
|
full_names = [
|
|
'calc_model_amp_freqs-F1_10-1960-75_F2_500-525-25_C2_0.1_C1Len_25_FirstC1_0.0001_LastC1_1.0_mult__StimLen_2_nfft_32768_trialsnr_1__power_1_minamps__dev_original_05AUCItemporal']
|
|
full_names = [
|
|
'calc_model_amp_freqs-F1_250-1325-25_F2_500-525-25_C2_0.1_C1Len_25_FirstC1_0.0001_LastC1_1.0_mult__StimLen_5_nfft_32768_trialsnr_1__power_1_minamps__dev_original_05AUCI_not_log_temporal']
|
|
# 'calc_model_amp_freqs-F1_750-975-25_F2_500-775-25_C2Len_25_FirstC2_0.0001_LastC2_1.0_C1_0.1_StimLen_2_nfft_32768_trialsnr_1_absolut_power_1_minamps__dev_05temporal']
|
|
c_grouped = ['c1'] # , 'c2']
|
|
# adds = [-150, -50, -10, 10, 50, 150]
|
|
# fig, ax = plt.subplots(4, len(adds), constrained_layout=True, figsize=(12, 5.5))
|
|
# for ff, full_name in enumerate(full_names):
|
|
frame = pd.read_csv(load_folder_name('calc_cocktailparty') + '/' + full_names[0] + '.csv')
|
|
# frame_original = pd.read_csv(load_folder_name('calc_cocktailparty') + '/'+full_names_original[0] + '.csv')
|
|
# embed()
|
|
frame_cell_orig = frame[(frame.cell == cell_here)]
|
|
frame_cell_orig_orignal = frame[(frame.cell == cell_here)]
|
|
# embed()
|
|
df_desired = 40
|
|
if len(frame_cell_orig) > 0:
|
|
try:
|
|
males = [frame_cell_orig.iloc[
|
|
np.argmin(np.abs(frame_cell_orig.df1 - df_desired))].f1] # DF=39.5[775, 825]
|
|
except:
|
|
print('min thing')
|
|
embed()
|
|
# (135.5, 625.0), (110.5, 650.0), (85.5, 675.0),(60.5, 700.0), (35.5, 725.0), (10.5, 750.0),(151.07000000000005, 675.0)
|
|
# frame_cell_orig[['df2', 'f2']]
|
|
new_f2_tuple = frame_cell_orig[['df2', 'f2']].apply(tuple, 1).unique()
|
|
dfs = [tup[0] for tup in new_f2_tuple]
|
|
sorted = np.argsort(np.abs(dfs))
|
|
new_f2_tuple = new_f2_tuple[sorted]
|
|
dfs = np.array(dfs)[sorted]
|
|
dfs_new = dfs[(dfs > 0) & (dfs < df_desired + 100)]
|
|
f2s = [tup[1] for tup in new_f2_tuple]
|
|
f2s = np.sort(f2s)
|
|
# f2s = f2s[2::int(len(f2s)/4)]#np.array(f2s)[(dfs>0)& (dfs<df_desired+300)]
|
|
# gridspec
|
|
# females = f2s
|
|
# fig, ax = plt.subplots(6, len(males) * len(females), figsize=(12, 5.5))
|
|
# fig = plt.figure(figsize=(12, 5.5))
|
|
# frame_cell = frame[frame.cell == cell_here]
|
|
frame_cell = frame[(frame.cell == cell_here)] # & (frame[c_here] == c_h)]
|
|
# frame_cell = frame_cell[~ (frame_cell.f1 == frame_cell.f2)]
|
|
frame_cell, df1s, df2s, f1s, f2s = find_dfs(frame_cell)
|
|
diffs = find_deltas(frame_cell, c_grouped[0])
|
|
frame_cell = find_diffs(c_grouped[0], frame_cell, diffs, add='_original')
|
|
new_frame = frame_cell.groupby(['df1', 'df2'], as_index=False).sum() # ['score']
|
|
matrix = new_frame.pivot(index='df2', columns='df1', values='diff')
|
|
|
|
# freqs = [(64.5,-85.5),(64.5,-60.5),(64.5,-35.5), (64.5, -10.5)]
|
|
# embed()
|
|
# freqs = [(64.5,-85.5)]#(39.5, -10.5)(39.5, -210.5),]#,(164.5, -10.5)]
|
|
# embed()
|
|
freq1s = np.unique(new_frame.df1)
|
|
freq2s = np.unique(new_frame.df2)
|
|
freq_example = 30 # 65
|
|
freq1s = [freq1s[np.argmin(np.abs(freq1s - freq_example))]]
|
|
freq2s = [freq2s[0]]
|
|
else:
|
|
freq_example = 30 # 65
|
|
freq1s = [freq_example]
|
|
freq2s = [10]
|
|
for freq1 in freq1s:
|
|
# freq_example = freq1
|
|
for freq2 in freq2s:
|
|
c_nrs = [0.0002, 0.2, 0.8] # 0.0002, , 0.50.01,0.075,0.1,
|
|
#fig = plt.figure(figsize=(12, 5.5))
|
|
grid0 = gridspec.GridSpec(1, 1, bottom=0.1, top=0.85, left=0.09,
|
|
right=0.95,
|
|
wspace=0.04) #
|
|
grid00 = gridspec.GridSpecFromSubplotSpec(2,1,
|
|
wspace=0.15, hspace=0.27, subplot_spec=grid0[0],
|
|
) #
|
|
grid_u = gridspec.GridSpecFromSubplotSpec(1, 1,
|
|
hspace=0.7,
|
|
wspace=0.3,
|
|
subplot_spec=grid00[
|
|
0]) # hspace=0.4,wspace=0.2,len(chirps)
|
|
grid_l = gridspec.GridSpecFromSubplotSpec(1, 1,
|
|
hspace=0.7,
|
|
wspace=0.1,
|
|
subplot_spec=grid00[
|
|
1]) # hspace=0.4,wspace=0.2,len(chirps)
|
|
# grid_s = gridspec.GridSpecFromSubplotSpec(1, 1,
|
|
# hspace=0,
|
|
# wspace=0,
|
|
# subplot_spec=grid0[0,1])
|
|
lim = np.max([np.abs(np.min(matrix)), np.max(matrix)])
|
|
# embed()
|
|
#################################################################
|
|
if len(frame_cell_orig) > 0:
|
|
# calc_model_amp_freqs-F1_750-975-25_F2_500-775-25_C2_0.1_C1Len_20_FirstC1_0.0001_LastC1_1.0_StimLen_25_nfft_32768_trialsnr_1_absolut_power_1temporal.csv
|
|
# devs_extra = ['stim','stim_rec','stim_am','original','05']#['original','05']
|
|
|
|
# da implementiere ich das jetzt für eine Zelle
|
|
# wo wir den einezlnen Punkt und Kontraste variieren
|
|
full_names = [
|
|
'calc_model_amp_freqs-F1_750-975-25_F2_500-775-25_C2_0.1_C1Len_25_FirstC1_0.0001_LastC1_1.0_StimLen_2_nfft_32768_trialsnr_1_absolut_power_1_minamps__dev_05temporal', ]
|
|
|
|
c_here = 'c1'
|
|
if c_here == 'c1': # 'B1_diff'
|
|
score1 = 'amp_B1_012_mean'
|
|
score2 = 'amp_B1_01_mean'
|
|
score3 = 'amp_B1_012-01_mean'
|
|
if c_here == 'c2': # 'B1_diff'
|
|
score1 = 'amp_B2_012_mean'
|
|
score2 = 'amp_B2_01_mean'
|
|
score3 = 'amp_B2_012-02_mean'
|
|
|
|
f_counter = 0
|
|
ax_upper = []
|
|
frame_cell_orig_orignal, df1s, df2s, f1s, f2s = find_dfs(frame_cell_orig_orignal)
|
|
|
|
frame_cell_orig, df1s, df2s, f1s, f2s = find_dfs(frame_cell_orig)
|
|
|
|
eodf = frame_cell_orig.f0.unique()[0]
|
|
# freqs = [(825,650),(825,675),(825,700)]-
|
|
# embed()
|
|
f = -1
|
|
axts_all = []
|
|
axps_all = []
|
|
axis_all = []
|
|
ax_us = []
|
|
|
|
f += 1
|
|
# plot the baseline Peak above
|
|
scores = ['amp_f0_01_mean',
|
|
'amp_f0_02_mean', 'amp_f0_012_mean', ]
|
|
colors = ['green', 'pink', 'purple']
|
|
alpha = [1, 1, 1, 1]
|
|
linestyles = ['--', '--', '--', ]
|
|
|
|
linestyles = [['-', '-', '-', '-'],
|
|
['-', '-', '-', '-']
|
|
, ['--', '-.', '--'],
|
|
['-', '-', '-', '-'],
|
|
]
|
|
scores = [['amp_B1_01_mean_original', 'amp_f1_01_mean_original', 'amp_f0_01_mean_original'],
|
|
] # ['cv_01']
|
|
colors = [['green', 'pink', 'black', 'red'],
|
|
['grey'], ]
|
|
alpha = [[1, 0.5, 1, 1],
|
|
[0.5, 0.5, 0.5, 0.5],
|
|
[1, 1, 1, 1],
|
|
[1, 1, 1, 1], ]
|
|
axs = []
|
|
for s in range(len(scores)):
|
|
ax_u1 = plt.subplot(grid_u[s])
|
|
# frame_cell_orig_orignal['amp_f0_01_mean']
|
|
# embed()
|
|
# ax_upper = plt_single_trace(ax_upper, ax_u1,frame_original, frame_cell_orig_orignal, freq1, freq2, alpha=alpha,
|
|
# linestyles=linestyles, scores=scores, sum = False, colors=colors)
|
|
|
|
# embed()
|
|
|
|
eodf_color = 'brown'
|
|
|
|
# embed()
|
|
ax_upper = plt_single_trace(ax_upper, ax_u1, frame, frame_cell_orig, freq1, freq2,
|
|
alpha=alpha[s], sum=False, linestyles=linestyles[s],
|
|
scores=scores[s], colors=colors[s])
|
|
# if s in [1, 3]:
|
|
ax_u1.legend(loc=(0, 1), ncol=3)
|
|
# else:
|
|
# ax_u1.legend(loc = (-0.5,1),ncol = 2)
|
|
if 'cv' not in scores[s][0]:
|
|
axs.append(ax_u1)
|
|
# if s in [1,3]:
|
|
# remove_xticks(ax_u1)
|
|
join_x(axs)
|
|
join_x(axs)
|
|
join_y(axs)
|
|
# axs[0].join
|
|
#################
|
|
|
|
# frame_cell_orig_orignal
|
|
for ax in ax_upper:
|
|
ax.scatter(c_nrs, np.zeros(len(c_nrs)), marker='^', color='black')
|
|
|
|
# ax_upper[0].legend(ncol = 3, loc = (0,1.2))
|
|
grid_ll = gridspec.GridSpecFromSubplotSpec(1, len(c_nrs),
|
|
hspace=0.55,
|
|
wspace=0.2,
|
|
subplot_spec=grid_l[
|
|
f]) # hspace=0.4,wspace=0.2,len(chirps)
|
|
|
|
cells = np.unique(frame.cell)
|
|
f1s = np.unique(frame.f1)
|
|
f2s = np.unique(frame.f2)
|
|
|
|
# frame_cell = frame_cell_orig[(frame_cell_orig.df1 == freq1)& (frame_cell_orig.df2 == freq2)]
|
|
|
|
scores = ['amp_B1_01_mean', 'amp_B1_012_mean', 'amp_B2_02_mean', 'amp_B2_012_mean']
|
|
scores = ['amp_B1_01_mean', 'amp_B1_012_mean', 'amp_B2_02_mean',
|
|
'amp_B2_012_mean'] # 'amp_B1+B2_012_mean',
|
|
colors = ['green', 'blue', 'orange', 'red', 'grey']
|
|
colors_array = ['grey', 'green', 'orange', 'purple']
|
|
|
|
print(cell_here + ' F1' + str(freq1) + ' F2 ' + str(freq2))
|
|
|
|
sampling = 20000
|
|
|
|
# embed()
|
|
cvs = pd.read_csv(load_folder_name('calc_base') + '/csv_model_data.csv')
|
|
cv = np.round(cvs[cvs['cell'] == cell_here].cv_model.iloc[0], 3)
|
|
fr = np.round(cvs[cvs['cell'] == cell_here].fr_model.iloc[0])
|
|
plt.suptitle(cell_here + ' EODf=' + str(np.round(eodf)) + ' Hz' + ' cv=' + str(cv) + ' fr=' + str(
|
|
np.round(fr))
|
|
+ 'Hz F1=' + str(np.round(freq1 + eodf)) + ' Hz' + ' F1-EODf=' + str(
|
|
np.round(freq1)) + ' Hz' + ' F2=' + str(np.round(freq2 + eodf)) + ' Hz ' + 'F2-EODf=' + str(
|
|
np.round(freq2)) + ' Hz ')
|
|
colors_contrasts = ['purple', 'black', 'grey'] # 'nfft='+str(nfft)+' '+
|
|
axts = []
|
|
axps = []
|
|
axis = []
|
|
for c_nn, c_nr in enumerate(c_nrs):
|
|
f_counter = plt_single_contrast_ps_isi_01(axis, f_counter, axts, axps, f, grid_ll, c_nn,
|
|
freq_example, freq2, eodf, datapoints, auci_wo,
|
|
auci_w, results_diff, a_f2s, fish_jammer, a,
|
|
trials_nr, nfft, us_name, gain, runs, a_fr,
|
|
nfft_for_morph, beat, printing,
|
|
stimulus_length_data,
|
|
model_cells, position_diff, colors_array, reshuffled,
|
|
dev, sampling,
|
|
cell_here, c_nr, n, [dev_name], min_amps, extend=True,
|
|
eodf_color=eodf_color, first=False, ypos=1.65,
|
|
c_nn_nr=0, xpos=1, second=False)
|
|
axts_all.extend(axts)
|
|
axps_all.extend(axps)
|
|
axis_all.extend(axis)
|
|
# ax_upper[0].legend(loc = (-0.07,1), ncol = 6)
|
|
# embed()
|
|
# join_y(ax_upper)
|
|
axts_all[0].get_shared_y_axes().join(*axts_all)
|
|
axts_all[0].get_shared_x_axes().join(*axts_all)
|
|
axps_all[0].get_shared_y_axes().join(*axps_all)
|
|
axps_all[0].get_shared_x_axes().join(*axps_all)
|
|
# axis_all[0].get_shared_y_axes().join(*axis_all)
|
|
axis_all[0].get_shared_x_axes().join(*axis_all)
|
|
save_visualization(cell_here + '_freq1_' + str(freq1) + '_freq2_' + str(freq2), show)
|
|
|
|
|
|
def plt_single_contrast_ps_isi_01(axis, f_counter, axts, axps, f, grid_ll, c_nn, freq1, freq2, eodf, datapoints,
|
|
auci_wo, auci_w, results_diff, a_f2s, fish_jammer, a,
|
|
trials_nr, nfft, us_name, gain, runs, a_fr, nfft_for_morph, beat, printing,
|
|
stimulus_length,
|
|
model_cells, position_diff, colors_array, reshuffled, dev, sampling, cell_here, c_nr,
|
|
n, dev_name, min_amps, extend=True, c_nn_nr=1, first=True, xpos=1, second=True,
|
|
eodf_color='brown', val = 1.5, ypos=1.35):
|
|
# ax_u1.scatter(c_nrs,np.zeros(len(c_nrs)), color='black', marker='^', clip_on=False)
|
|
# embed()
|
|
v_mems, arrays_spikes, arrays_stim, results_diff, position_diff, auci_wo, auci_w, arrays_05, names ,p_arrays, ff = calc_roc_amp_core_cocktail(
|
|
[freq1 + eodf], [freq2 + eodf], datapoints, auci_wo, auci_w, results_diff, a_f2s, fish_jammer, a,
|
|
trials_nr, nfft, '', us_name, gain, runs, a_fr, nfft_for_morph, beat, printing, stimulus_length,
|
|
model_cells, position_diff, dev, cell_here, dev_name=dev_name, a_f1s=[c_nr], n=n,
|
|
reshuffled=reshuffled, min_amps=min_amps)
|
|
v_mems, arrays_spikes, arrays_stim, results_diff, position_diff, auci_wo, auci_w, arrays_original, names ,p_arrays, ff = calc_roc_amp_core_cocktail(
|
|
[freq1 + eodf], [freq2 + eodf], datapoints, auci_wo, auci_w, results_diff, a_f2s, fish_jammer, a,
|
|
trials_nr, nfft, '', us_name, gain, runs, a_fr, nfft_for_morph, beat, printing, stimulus_length,
|
|
model_cells, position_diff, 'original', cell_here, dev_name=dev_name, a_f1s=[c_nr], n=n,
|
|
reshuffled=reshuffled, min_amps=min_amps)
|
|
# embed()
|
|
time = np.arange(0, len(arrays_05[a][0]) / sampling, 1 / sampling)
|
|
# arrays
|
|
arrays_here = [v_mems[1]] #::]#arrays_05[1::]#arrays_original[1::]#
|
|
arrays_here_original = [arrays_original[1]] #::]
|
|
spike_here = [arrays_spikes[1]] #::]
|
|
stim_here = [arrays_stim[1]] #::]
|
|
colors_array_here = [colors_array[1]] #::]
|
|
names = ['0', '01', '02', '012']
|
|
names_here = [names[1]]#extend=True
|
|
for a in range(len(arrays_here)):
|
|
# if c_nn == 0:
|
|
grid_pt = gridspec.GridSpecFromSubplotSpec(4, 1,
|
|
hspace=0.65,
|
|
wspace=0.2,
|
|
subplot_spec=grid_ll[c_nn]) # hspace=0.4,wspace=0.2,len(chirps)
|
|
|
|
axs = plt.subplot(grid_pt[0])
|
|
axt = plt.subplot(grid_pt[1])
|
|
axp = plt.subplot(grid_pt[2])
|
|
axi = plt.subplot(grid_pt[3])
|
|
axts.append(axt)
|
|
axps.append(axp)
|
|
axis.append(axi)
|
|
if f != 0:
|
|
remove_yticks(axt)
|
|
remove_yticks(axs)
|
|
if a != len(arrays_here) - 1:
|
|
remove_xticks(axt)
|
|
remove_xticks(axs)
|
|
if f_counter == 0:
|
|
axt.set_ylabel(names[a])
|
|
axs.set_ylabel(names[a])
|
|
if a == 0:
|
|
axs.set_title(' a1=' + str(c_nr) + ', a2=0')
|
|
elif a == 1:
|
|
axs.set_title(' a1=0,' + ' a2=' + str(a_f2s[0]))
|
|
else:
|
|
axs.set_title(' a1=' + str(c_nr) + ', a2=' + str(a_f2s[0]))
|
|
xlim = [0.1, 0.1 + val/ freq1]
|
|
axs.plot(time, stim_here[a], color='grey') # color=colors_array_here[a],colors_contrasts[c_nn]
|
|
axs.eventplot(spike_here[a][0], lineoffsets=np.mean(stim_here[a]), color='black') # np.max(v1)*
|
|
axs.set_xlim(xlim)
|
|
|
|
axt.plot(time, arrays_here[a], color='grey') # colors_array_here[a]colors_contrasts[c_nn]
|
|
axt.eventplot(spike_here[a][0], lineoffsets=np.max(arrays_here[a]), color='black') # np.max(v1)*
|
|
# axt.eventplot
|
|
axt.set_xlim(xlim)#1.5
|
|
# embed()
|
|
axi.hist(np.diff(spike_here[a][0]) / (1 / eodf),
|
|
bins=np.arange(0, np.max(np.diff(spike_here[a][0]) / (1 / eodf)), 0.1),
|
|
color='grey') # colors_array_here[a]
|
|
axi.axvline(x=1, color='black', linestyle='--', linewidth=0.5, zorder=100) # color = 'grey',
|
|
axi.axvline(x=2, color='black', linestyle='--', linewidth=0.5, zorder=100) # color = 'grey',
|
|
axi.axvline(x=3, color='black', linestyle='--', linewidth=0.5, zorder=100) # color = 'grey',
|
|
axi.axvline(x=4, color='black', linestyle='--', linewidth=0.5, zorder=100) # color = 'grey',
|
|
try:
|
|
axi.set_xticks_delta(1)
|
|
except:
|
|
print('problem something')
|
|
axi.set_xlim(0, 8)
|
|
# arrays_original
|
|
pp, ff = ml.psd(arrays_here_original[a][0] - np.mean(arrays_here_original[a][0]), Fs=sampling, NFFT=nfft,
|
|
noverlap=nfft // 2)
|
|
|
|
|
|
axp.plot(ff, pp, color='grey') # colors_contrasts[c_nn]#colors_array_here[a]
|
|
# if 'B1' in score:
|
|
score_name = np.abs(results_diff.df1.iloc[-1])
|
|
score_name = np.abs(results_diff.df1.iloc[-1])
|
|
score_name = np.abs(results_diff.df2.iloc[-1])
|
|
|
|
maxx = 900
|
|
axp.set_xlim(0, maxx)
|
|
|
|
if c_nn == c_nn_nr:
|
|
if a == 0: #
|
|
if second:
|
|
second_part = 'F1=' + str(np.round(freq1 + eodf)) + 'Hz' + ' F1-EODf=' + str(
|
|
freq1) + 'Hz'
|
|
else:
|
|
second_part = ''
|
|
if first:
|
|
first_part = 'only Frequency 1: '
|
|
else:
|
|
first_part = ''
|
|
axt.text(xpos, ypos, first_part + second_part, fontweight='bold', ha='center', fontsize=10,
|
|
transform=axt.transAxes, )
|
|
elif a == 1:
|
|
if second:
|
|
second_part = 'F2=' + str(np.round(freq2 + eodf)) + 'Hz ' + 'F2-EODf=' + str(
|
|
freq2) + ' Hz '
|
|
else:
|
|
second_part = ''
|
|
if first:
|
|
first_part = 'only Frequency 2: '
|
|
else:
|
|
first_part = ''
|
|
axt.text(xpos, ypos, first_part + second_part, fontweight='bold', ha='center', fontsize=10,
|
|
transform=axt.transAxes, )
|
|
else:
|
|
if second:
|
|
second_part = 'F1=' + str(np.round(freq1 + eodf)) + 'Hz' + ' F1-EODf=' + str(
|
|
freq1) + 'Hz' + ' F2=' + str(freq2 + eodf) + 'Hz ' + 'F2-EODf=' + str(freq2) + ' Hz '
|
|
else:
|
|
second_part = ''
|
|
if first:
|
|
first_part = 'Frequency 1 + Frequency 2: '
|
|
else:
|
|
first_part = ''
|
|
axt.text(xpos, ypos,
|
|
first_part + second_part,
|
|
fontweight='bold', ha='center', fontsize=10, transform=axt.transAxes, )
|
|
|
|
# embed()
|
|
# plt_peaks_several(['EODf'], [eodf], [pp_original], 0,
|
|
# axp, pp_original, [eodf_color], ff)
|
|
freqs, colors_peaks, labels, alphas = chose_all_freq_combos(freq2, colors_array, freq1, maxx, eodf,
|
|
color_eodf='black', name=names_here[0],
|
|
color_stim='pink', color_stim_mult='pink')
|
|
|
|
plt_peaks_several(labels, freqs, [pp], 0,
|
|
axp, pp, colors_peaks, ff, ms=18, extend=extend, alphas=alphas, clip_on=True)
|
|
|
|
|
|
if c_nn != 0:
|
|
remove_yticks(axt)
|
|
remove_yticks(axs)
|
|
remove_yticks(axp)
|
|
remove_yticks(axi)
|
|
else:
|
|
axt.set_ylabel('mV')
|
|
axp.set_ylabel('Hz')
|
|
axi.set_ylabel('Nr')
|
|
axt.set_xlabel('Time [s]')
|
|
axi.set_xlabel('EOD mult')
|
|
remove_xticks(axs)
|
|
|
|
axp.set_xlabel('Frequency [Hz]')
|
|
f_counter += 1
|
|
return f_counter
|
|
|
|
|
|
def chose_all_freq_combos(freq2, colors_array, freq1, maxx, eodf, color_eodf='blue', stim_thing = True, color_stim='orange', name='01',
|
|
color_stim_mult='orange'):
|
|
# embed()
|
|
if name == '01':
|
|
alphas, labels, colors_peaks, freqs = mult_beat_freqs(eodf, maxx, np.abs(freq1), color_here=colors_array[1],
|
|
color_df_mult=colors_array[1], color_eodf=color_eodf,
|
|
color_stim=color_stim, stim_thing = stim_thing, color_stim_mult=color_stim_mult, )
|
|
# embed()
|
|
elif name == '02':
|
|
freqs = [np.abs(freq2), np.abs(freq2) * 2, np.abs(freq2) * 2, np.abs(freq2) * 3, np.abs(freq2) * 4,
|
|
np.abs(freq2) * 5, np.abs(freq2) * 6, np.abs(freq2) * 7, np.abs(freq2) * 8, np.abs(freq2) * 9,
|
|
np.abs(freq2) * 10,
|
|
eodf]
|
|
colors_peaks = [colors_array[2], colors_array[2], colors_array[2], colors_array[2], colors_array[2],
|
|
colors_array[2], colors_array[2], colors_array[2], colors_array[2], colors_array[2],
|
|
'black']
|
|
labels = ['DF2', 'DF2', 'DF2', 'DF2', 'DF2', 'DF2', 'DF2', 'DF2', 'DF2', 'DF2', 'DF2', 'DF2', 'DF2', 'DF2',
|
|
'DF2', 'DF2', 'DF2', 'DF2', 'DF2', 'EODF']
|
|
alphas = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
|
0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5,
|
|
1, 0.5]
|
|
elif name == 'eodf':
|
|
freqs = [eodf]
|
|
colors_peaks = ['black']
|
|
labels = ['EODF']
|
|
alphas = [1]
|
|
else:
|
|
freqs = [freq1, np.abs(freq2), eodf]
|
|
colors_peaks = ['blue', 'red', 'black']
|
|
labels = ['DF1', 'DF2', 'EODF']
|
|
alphas = [1, 0.2, 0.5]
|
|
return freqs, colors_peaks, labels, alphas
|
|
|
|
|
|
def find_double_spikes(eod_fr, arrays_spikes,names, results_diff, position_diff, add = ''):
|
|
for a, sp_array in enumerate(arrays_spikes):
|
|
# embed()
|
|
hist, bin_edges = np.histogram(sp_array[0], bins=np.arange(0, np.max(sp_array[0]), 1 / eod_fr))
|
|
hist_big = hist[hist > 0]
|
|
results_diff.loc[position_diff, 'dsp_perc95_' + names[a]+add] = np.percentile(hist_big, 95)
|
|
results_diff.loc[position_diff, 'dsp_max_' + names[a]+add] = np.max(hist_big)
|
|
results_diff.loc[position_diff, 'dsp_mean_' + names[a]+add] = np.mean(hist_big)
|
|
# np.histogram(array[0])#bins = np.arange(0,np.max())
|
|
return results_diff
|
|
|
|
|
|
def upper_and_lower_fr(array_smoothed, results_diff, position_diff, eod_fr, names, add = ''):
|
|
|
|
|
|
lim = 10
|
|
for a, array in enumerate(array_smoothed):
|
|
# embed()
|
|
results_diff.loc[position_diff, 'lb_' + names[a]+add] = len(array[0][array[0] < lim]) / len(array[0])
|
|
results_diff.loc[position_diff, 'ub_' + names[a]+add] = len(
|
|
array[0][(array[0] < eod_fr + lim) & (array[0] > eod_fr - lim)]) / len(array[0])
|
|
results_diff.loc[position_diff, 'ub_above_' + names[a]+add] = len(
|
|
array[0][(array[0] >= eod_fr + lim)]) / len(array[0])
|
|
return results_diff
|
|
|
|
|
|
def calc_vs_amps(results_diff,stim, eod_fr, arrays_spikes, position_diff, names, add = ''):
|
|
freq_comp = ['_f0','_f1']
|
|
freqs = [eod_fr, stim]
|
|
for f, ff in enumerate(freqs):
|
|
#embed()
|
|
for a, array in enumerate(arrays_spikes):
|
|
#embed()
|
|
vs = calc_vectorstrength(array[0], 1 / freqs[f])
|
|
results_diff.loc[position_diff, 'vs_' + freq_comp[f]+names[a]+add] = vs[0]
|
|
vs = calc_vectorstrength(array[0], 1 / freqs[f] * 2)
|
|
results_diff.loc[position_diff, 'vs_harm_'+ freq_comp[f] + names[a]+add] = vs[0]
|
|
|
|
return results_diff
|
|
|
|
|
|
def plt_subpart_cocktail(results_diff, fs, p01, p02, p012, p0, array0, array01, array02, array012):
|
|
fig, ax = plt.subplots(4, 1, sharex=True, sharey=True) #
|
|
arrays = [p0[0], p01[0], p02[0], p012[0]]
|
|
arrays2 = [array0, array01, array02, array012]
|
|
for a, array in enumerate(arrays):
|
|
# ax[a].plot(np.arange(0, len(arrays2[a][0])*deltat, deltat), arrays2[a][0])
|
|
# ax[a,1].set_xlim(0,0.2)
|
|
ax[a].plot(fs, array)
|
|
B1 = results_diff.df1.iloc[-1]
|
|
B2 = results_diff.df2.iloc[-1]
|
|
fr = results_diff.fr.iloc[-1]
|
|
f0 = results_diff.f0.iloc[-1]
|
|
freqs = [np.abs(B1), np.abs(B2),
|
|
np.abs(np.abs(B1) - np.abs(B2)),
|
|
np.abs(B1) + np.abs(B2), np.mean(fr), f0]
|
|
colors = ['blue', 'green', 'purple', 'orange', 'red','black']
|
|
labels = ['DF1', 'DF2', '|DF1-DF2|', '|DF1+DF2|', 'Baseline','eod_fr']
|
|
# embed()
|
|
# for p in range(len(array)):
|
|
plt_peaks_several(labels, freqs, arrays, 0, ax[a],
|
|
array, colors, fs)
|
|
ax[-1].legend()
|
|
plt.show()
|
|
|
|
|
|
def calc_roc_amp_core_cocktail(freq1, freq2, datapoints, auci_wo, auci_w, results_diff, a_f2s, fish_jammer, a, trials_nr, nfft, titles_amp, us_name, gain, runs, a_fr, nfft_for_morph, beat, printing, stimulus_length, model_cells, position_diff, dev, cell_here, indices ='', params_dict = {'burst_corr':''}, stimulus_length_first = 0,p_xlim = 0, a_f1s = [], dev_name = ['05'], phaseshift_fr = 0, min_amps ='', n = 1, reshuffled ='', way_all ='', test = False, AUCI ='AUCI', phase_right ='_phaseright_', SAM ='', points = 5, means_different =''):#'_means_'
|
|
#embed()#_SAM_
|
|
model_params = model_cells[model_cells['cell'] == cell_here].iloc[0]
|
|
# model_params = model_cells.iloc[cell_nr]
|
|
|
|
# embed()
|
|
eod_fr = model_params['EODf'] # .iloc[0]
|
|
|
|
offset = model_params.pop('v_offset')
|
|
|
|
cell = model_params.pop('cell')
|
|
print(cell)
|
|
f1 = 0
|
|
f2 = 0
|
|
sampling_factor = ''
|
|
|
|
|
|
cell_recording = ''
|
|
mimick = 'no'
|
|
zeros = 'zeros'
|
|
fish_morph_harmonics_var = 'harmonic'
|
|
fish_emitter = 'Alepto' # ['Sternarchella', 'Sternopygus']
|
|
fish_receiver = 'Alepto' #
|
|
|
|
|
|
adapt_offset = ''#'adaptoffsetallall2'
|
|
adapt_offset = 'adaptoffset_bisecting'
|
|
constant_reduction = ''
|
|
# a_fr = 1
|
|
|
|
corr_nr = 35
|
|
lower_tol = 0.995
|
|
upper_tol = 1.005
|
|
|
|
damping = 0.45 # 0.65,0.2,0.5,0.2,0.6,0.45,0.6,0.35
|
|
damping_type = ''
|
|
exponential = ''
|
|
# embed()
|
|
dent_tau_change = 1
|
|
# in case you want a different sampling here we can adujust
|
|
time_array, sampling, deltat = deltat_choice(model_params, sampling_factor, eod_fr,
|
|
stimulus_length)
|
|
|
|
# generate the eod_fish_r in the four mimick variants (copy, thunderfish, mimick, just sinus)
|
|
|
|
sampling = 1 / deltat
|
|
multiple = 0
|
|
slope = 0
|
|
add = 0
|
|
plus = 0
|
|
sig_val = (7, 1)
|
|
variant = 'sinz'
|
|
sqrt = '_sqrt_'
|
|
if exponential == '':
|
|
v_exp = 1
|
|
exp_tau = 0.001
|
|
# prepare for adapting offset due to baseline modification
|
|
|
|
baseline_with_wave_damping, baseline_without_wave = prepare_baseline_array(time_array, eod_fr, nfft_for_morph,
|
|
phaseshift_fr, mimick, zeros,
|
|
cell_recording, sampling,
|
|
stimulus_length, fish_receiver, deltat,
|
|
nfft, damping_type, damping, us_name,
|
|
gain, beat=beat,
|
|
fish_morph_harmonics_var=fish_morph_harmonics_var)
|
|
|
|
spikes_base = [[]] * trials_nr
|
|
spikes_bef = [[]] * trials_nr
|
|
for run in range(runs):
|
|
print(run)
|
|
|
|
#t1 = time.time()
|
|
stim_lengths = []
|
|
for t in range(trials_nr):
|
|
if (stimulus_length_first != 0) & (t == 0):
|
|
stimulus_length_here = stimulus_length_first
|
|
else:
|
|
stimulus_length_here = stimulus_length
|
|
stim_lengths.append(stimulus_length_here)
|
|
if (t == 0) | (type(phaseshift_fr) == str):
|
|
#if (type(phaseshift_fr) == str):
|
|
|
|
time_array, sampling, deltat = deltat_choice(model_params, sampling_factor, eod_fr,stimulus_length_here, deltat = deltat)
|
|
|
|
|
|
eod_fish_r, deltat, eod_fr, time_array = eod_fish_r_generation(time_array, eod_fr, a_fr,
|
|
stimulus_length_here, phaseshift_fr,
|
|
cell_recording, zeros, mimick, sampling,
|
|
fish_receiver, deltat, nfft,
|
|
nfft_for_morph,
|
|
fish_morph_harmonics_var=fish_morph_harmonics_var,
|
|
beat=beat)
|
|
if (stimulus_length_first != 0) & (t == 1):
|
|
time_array, sampling, deltat = deltat_choice(model_params, sampling_factor, eod_fr,stimulus_length_here, deltat = deltat)
|
|
eod_fish_r, deltat, eod_fr, time_array = eod_fish_r_generation(time_array, eod_fr, a_fr,
|
|
stimulus_length_here, phaseshift_fr,
|
|
cell_recording, zeros, mimick, sampling,
|
|
fish_receiver, deltat, nfft,
|
|
nfft_for_morph,
|
|
fish_morph_harmonics_var=fish_morph_harmonics_var,
|
|
beat=beat)
|
|
#embed()
|
|
# get the baseline properties here
|
|
# baseline_after,spikes_base,rate_adapted, rate_baseline_before, rate_baseline_after, np.array(spike_times), stimulus_power, v_dent_output[int(0.05 / deltat):-1], offset, v_mem_output
|
|
stimulus_0 = eod_fish_r
|
|
stimulus_base = eod_fish_r
|
|
power_here = 'sinz'
|
|
|
|
#if aa == 0:
|
|
adapt_offset = 'adaptoffset_bisecting'
|
|
#else:
|
|
# adapt_offset = '' # 'adaptoffsetallall2'
|
|
#embed()
|
|
cvs, adapt_output, baseline_after_b, _, rate_adapted_b, rate_baseline_before_b, rate_baseline_after_b, \
|
|
spikes_bef[t], _, _, offset_new, v_mem0,noise_final = simulate(cell, offset, stimulus_0, f1, n, power_here,
|
|
adapt_offset=adapt_offset, add=add,
|
|
alpha=alpha, reshuffle=reshuffled,
|
|
lower_tol=lower_tol, upper_tol=upper_tol,
|
|
v_exp=v_exp, exp_tau=exp_tau,
|
|
dent_tau_change=dent_tau_change,
|
|
alter_taus=constant_reduction,
|
|
exponential=exponential, exponential_mult=1,
|
|
exponential_plus=plus,
|
|
exponential_slope=slope, sig_val=sig_val,
|
|
j=f2, deltat=deltat, t=t, **model_params)
|
|
|
|
isi = calc_isi(spikes_bef[t], eod_fr)
|
|
try:
|
|
spikes_base[t] = spikes_after_burst_corr(spikes_bef[t], isi, params_dict['burst_corr'], cell, eod_fr, model_params=model_params)
|
|
except:
|
|
print('assing spikes problem')
|
|
|
|
print(' offset orig '+str(offset))
|
|
#embed()
|
|
test = False
|
|
if test:
|
|
|
|
test_cvs3()
|
|
if t == 0:
|
|
# here we record the changes in the offset due to the adaptation
|
|
change_offset = offset - offset_new
|
|
# and we subsequently reset the offset to be the new adapted for all subsequent trials
|
|
offset = offset_new * 1
|
|
print(' Base ' + str(adapt_offset) + ' offset ' + str(offset))
|
|
|
|
if printing:
|
|
print('Baseline time' + str(time.time() - t1))
|
|
#try:
|
|
# base_cut, mat_base = find_base_fr(spikes_base, deltat, stimulus_length, time_array, dev=dev, stim_lengths = stim_lengths)
|
|
#except:
|
|
# print('to many spikes')#
|
|
#
|
|
# embed()
|
|
# for sp in spikes_base:
|
|
# print(sp[-1])
|
|
|
|
#embed()
|
|
if test:
|
|
fig, ax = plt.subplots(2, 1, sharex=True)
|
|
# 1/eod_fr
|
|
ax[0].eventplot(spikes_bef[t], color='red')
|
|
|
|
ax[1].eventplot(spikes_base[t])
|
|
ax[1].eventplot(spikes_bef[t], color='red')
|
|
ax[1].set_xlim(0, 0.1)
|
|
plt.show()
|
|
|
|
#embed()
|
|
sampling_rate = 1 / deltat
|
|
#embed()
|
|
stim_length_max = np.max([stimulus_length_first, stimulus_length])
|
|
#embed()
|
|
base_cut, mat_base, smoothed0, mat0 = find_base_fr2(sampling_rate, spikes_base, deltat, stim_length_max, time_array, dev=dev)
|
|
#titles_amp = ['base eodf'] # ,'baseline to Zero',]
|
|
#if len(freqs1)<1:
|
|
# freqs1, freqs2 = find_rel_freq(base_cut, diagonal, freq2_ratio, freq1_ratio, eod_fr)
|
|
|
|
fr = np.mean(base_cut)
|
|
frate, isis_diff = ISI_frequency(time_array, spikes_base[0], fill=0.0)
|
|
isi = np.diff(spikes_base[0])
|
|
cv0 = np.std(isi) / np.mean(isi)
|
|
cv1 = np.std(frate) / np.mean(frate)
|
|
#embed()
|
|
|
|
#t1 = time.time()
|
|
#embed()
|
|
#if len(freqs1)>1:
|
|
# print(cell+'f1 '+str(freq1[0])+' f2 '+str(freq2[0]))
|
|
#for t in range(trials_nr):
|
|
for aaa, a_f2 in enumerate(a_f2s): # [0]
|
|
for aa, a_f1 in enumerate(a_f1s): # [0]
|
|
|
|
eod_fish1, eod_fish2, eod_stimulus, t1 = stimulus_threefish(a_f1, a_f2, cell_recording, f1, f2,
|
|
fish_emitter, fish_jammer, freq1, freq2,
|
|
fish_morph_harmonics_var, mimick,
|
|
nfft_for_morph, phase_right, phaseshift_fr,
|
|
sampling, stimulus_length, time_array,
|
|
zeros)
|
|
#embed()# hier noch schauen
|
|
if test:
|
|
eod_stimulus_d = eod_fish1 + eod_fish2
|
|
fig, ax = plt.subplots(2, 1, sharex=True, sharey=True)
|
|
ax[0].plot(time_array, eod_stimulus_d)
|
|
ax[1].plot(time_array, eod_stimulus)
|
|
plt.show()
|
|
#eod_stimulus, sam_stimulus = create_stimulus_SAM(SAM, eod_fish2, eod_fish_r, freq2, f2, eod_fr, time_array, a_f2)
|
|
if test:
|
|
test_timearray()
|
|
#embed()
|
|
adapt_offset_later = ''
|
|
#redo_stim
|
|
v_mem, offset_new, mat01, mat02, mat012, smoothed01, smoothed02, smoothed012, stimulus_01, stimulus_02, stimulus_012, mat05_01, spikes_01, mat05_02, spikes_02, mat05_012, spikes_012 = get_arrays_for_three(
|
|
cell, a_f2, a_f1,
|
|
SAM, eod_stimulus, eod_fish_r, freq2, eod_fish1, eod_fish_r,
|
|
eod_fish2, stimulus_length,
|
|
baseline_with_wave_damping, baseline_without_wave,
|
|
offset, model_params, n, variant, t, adapt_offset_later,
|
|
upper_tol, lower_tol, dent_tau_change, constant_reduction,
|
|
exponential, plus, slope, add,
|
|
deltat, alpha, sig_val, v_exp, exp_tau, f2,
|
|
trials_nr, time_array,
|
|
f1, freq1, damping_type,
|
|
gain, eod_fr, damping, us_name, redo_stim = True, params_dict= params_dict, nfft = nfft, a_fr = a_fr, fish_receiver = fish_receiver,beat = beat,dev=dev,zeros = zeros, reshuffle=reshuffled,cell_recording = cell_recording, phaseshift_fr = phaseshift_fr,fish_emitter = fish_emitter, fish_jammer = fish_jammer,fish_morph_harmonics_var = fish_morph_harmonics_var, mimick = mimick,nfft_for_morph = nfft_for_morph, phase_right = phase_right,sampling = sampling, )
|
|
|
|
#embed()
|
|
if test:
|
|
fig, ax = plt.subplots(4,1, sharex = True, sharey = True)
|
|
ax[0].plot(stimulus_0)
|
|
ax[1].plot(stimulus_01)
|
|
ax[2].plot(stimulus_02)
|
|
ax[3].plot(stimulus_012)
|
|
#ax[3].plot(eod_stimulus+stimulus_0)
|
|
plt.show()
|
|
|
|
if printing:
|
|
print('Generation process' + str(time.time() - t1))
|
|
|
|
v_mems = np.concatenate([[v_mem0],v_mem])
|
|
#array0 = [mat_base]
|
|
#array01 = [mat05_01]
|
|
#array02 = [mat05_02]
|
|
#array012 = [mat05_012]
|
|
t_off = 10
|
|
#embed()
|
|
|
|
for dev_n in dev_name:
|
|
results_diff.loc[position_diff, 'fr'] = fr
|
|
results_diff.loc[position_diff, 'f1'] = freq1[0]
|
|
results_diff.loc[position_diff, 'f2'] = freq2[0]
|
|
results_diff.loc[position_diff, 'f0'] = eod_fr
|
|
|
|
results_diff.loc[position_diff, 'df1'] = np.abs(eod_fr - freq1)
|
|
results_diff.loc[position_diff, 'df2'] = np.abs(eod_fr - freq2)
|
|
results_diff.loc[position_diff, 'cell'] = cell
|
|
results_diff.loc[position_diff, 'c1'] = a_f1
|
|
results_diff.loc[position_diff, 'c2'] = a_f2
|
|
results_diff.loc[position_diff, 'trial_nr'] = trials_nr
|
|
|
|
####################################
|
|
# calc cvs
|
|
results_diff = calc_cv_three_wave(results_diff, position_diff, arrays = [spikes_base, spikes_01, spikes_02, spikes_012], adds = ['_0', '_01', '_02', '_012'])
|
|
|
|
if dev_n == '05':
|
|
dev = 0.0005
|
|
# tp_02_all, tp_012_all
|
|
# das mit den Means ist jetzt einfach nur ein
|
|
# test wie ich die std und var und psd eigentlich gruppieren müsste
|
|
|
|
|
|
#else:
|
|
if dev_n == 'original':
|
|
array0 = [np.mean(mat0, axis=0)]
|
|
array01 = [np.mean(mat01, axis=0)]
|
|
array02 = [np.mean(mat02, axis=0)]
|
|
array012 = [np.mean(mat012, axis=0)]
|
|
elif dev_n == '05':
|
|
array0 = [np.mean(smoothed0, axis=0)]
|
|
array01 = [np.mean(smoothed01, axis=0)]
|
|
array02 = [np.mean(smoothed02, axis=0)]
|
|
array012 = [np.mean(smoothed012, axis=0)]
|
|
|
|
|
|
|
|
|
|
#embed()
|
|
p0, p02, p01, p012, ff = calc_ps(nfft, [array012[0][time_array>p_xlim]],
|
|
[array01[0][time_array>p_xlim]],
|
|
[array02[0][time_array>p_xlim]],
|
|
[array0[0][time_array>p_xlim]],
|
|
test=False, sampling_rate=sampling_rate)
|
|
|
|
# array012[0]
|
|
# p, f = ml.psd(array012[0] - np.mean(array012[0]), Fs=sampling_rate,
|
|
# NFFT=nfft, noverlap=nfft // 2)
|
|
#embed()
|
|
|
|
if test:
|
|
plt_subpart_cocktail(results_diff, ff, p01, p02, p012, p0, array0, array01, array02, array012)
|
|
|
|
|
|
########################################################
|
|
# also hier sind eben diese ganzen Amplituden
|
|
# 'amp_max_012_mean' ,'amp_max_02_mean', 'amp_max_01_mean', 'amp_max_0_mean' ist zwangsweise das was wir suchen
|
|
#'amp_max_012_mean', 'amp_max_02_mean', 'amp_max_01_mean'
|
|
# 'amp_B2_012_mean','amp_B1_012_mean' 'amp_B2_02_mean','amp_B1_01_mean'
|
|
# das ganze ist zwangsweise auf dem gemittelten Arrays
|
|
# in dieser einen Version mache ich das ohne sqrt hier und dann
|
|
if np.isnan(results_diff.loc[position_diff, 'f0']):
|
|
print('isnan thing4')
|
|
embed()
|
|
results_diff = calc_amps(ff, p0, p02, p01, p012, position_diff,
|
|
[dev], 0, results_diff, results_diff,
|
|
add='_mean'+'_'+dev_n, sqrt = sqrt, test=False,
|
|
timesstamp=False,min_amps = min_amps, points = points)
|
|
printing = False
|
|
if printing:
|
|
print(' a_f1 ' + str(aa) + ' ' + str(adapt_offset) + ' offset ' + str(offset)+' time '+str(time.time()-t1))
|
|
|
|
#######################################
|
|
# here calculate the fft
|
|
# die arrays hier sind immer eindimmensional deswegen muss man hier nicht auf trials achten!
|
|
# embed()
|
|
# das ist das was wir vergleichen
|
|
ffts_right1, freq = calc_fft(array0, array01, array012, array02, deltat, sampling)
|
|
results_diff.loc[position_diff, 'diff_fft' + '_' + str(dev_n)] = np.sum(ffts_right1) * \
|
|
freq[1]
|
|
|
|
####################################################################
|
|
arrays_stim = [stimulus_0, stimulus_01, stimulus_02, stimulus_012]
|
|
arrays = [array0, array01, array02, array012]
|
|
arrays_spikes = [spikes_base, spikes_01, spikes_02, spikes_012]
|
|
array_smoothed = [smoothed0, smoothed01, smoothed02, smoothed012]
|
|
names = ['0', '01', '02', '012']
|
|
for a, array in enumerate(arrays):
|
|
results_diff.loc[position_diff, 'std_' + names[a] + '_' + dev_n] = np.std(array)
|
|
results_diff.loc[position_diff, 'var_' + names[a] + '_' + dev_n] = np.var(array)
|
|
# results_diff.loc[position_diff, 'var_diff_' + dev_n] = results_diff.loc[position_diff, 'std_012' +'_'+dev_n] - results_diff.loc[position_diff, 'var_01' +'_'+dev_n]- results_diff.loc[position_diff, 'var_02' +'_'+dev_n]- results_diff.loc[position_diff, 'var_02' +'_'+dev_n]+ results_diff.loc[position_diff, 'var_0' +'_'+dev_n]
|
|
# results_diff.loc[position_diff, 'var_diff_sqrt_' + dev_n] = np.sqrt(results_diff.loc[position_diff, 'var_diff_' + dev_n])
|
|
|
|
# results_diff.loc[position_diff, 'std_diff' + dev_n] = results_diff.loc[position_diff, 'std_012' +'_'+dev_n] - results_diff.loc[position_diff, 'std_01' +'_'+dev_n]- results_diff.loc[position_diff, 'std_02' +'_'+dev_n]- results_diff.loc[position_diff, 'std_02' +'_'+dev_n]+ results_diff.loc[position_diff, 'std_0' +'_'+dev_n]
|
|
names_saved = ['var', 'std']
|
|
for name_saved in names_saved:
|
|
results_diff = calculate_the_difference(position_diff, results_diff, name_saved, dev_n,
|
|
results_diff.loc[
|
|
position_diff, name_saved + '_012' + '_' + dev_n],
|
|
results_diff.loc[
|
|
position_diff, name_saved + '_01' + '_' + dev_n],
|
|
results_diff.loc[
|
|
position_diff, name_saved + '_02' + '_' + dev_n],
|
|
results_diff.loc[
|
|
position_diff, name_saved + '_0' + '_' + dev_n])
|
|
|
|
test = False
|
|
if test:
|
|
fig, ax = plt.subplots(4, 1)
|
|
time_here = np.arange(0, len(results_diff.loc[position_diff, name_saved + '_0' + '_' + dev_n]),
|
|
1 / sampling)
|
|
ax[0].plot(time,
|
|
results_diff.loc[position_diff, name_saved + '_0' + '_' + dev_n])
|
|
ax[1].plot(time,
|
|
results_diff.loc[position_diff, name_saved + '_01' + '_' + dev_n])
|
|
ax[2].plot(time,
|
|
results_diff.loc[position_diff, name_saved + '_02' + '_' + dev_n])
|
|
ax[3].plot(time, results_diff.loc[position_diff, name_saved + '_012' + '_' + dev_n])
|
|
plt.show()
|
|
|
|
##########################################
|
|
# hier ist eine extra kondition falls wir das ohne vorheriges Mitteln vergleichen wollen würden!
|
|
# die brauchen wir im default nicht aber zum abgleichen was was ist ist
|
|
#d asmanchmal ganz nett
|
|
#if (trials != 1 ) & ('_means_' & means_differnet): # für die verschiedenen Trials wollen wir verschiedene Konditions einführen
|
|
#embed()
|
|
if (trials_nr != 1) & ('_means_' in means_different):# calc_model_amp_freqs_param. # für die verschiedenen Trials wollen wir verschiedene Konditions einführen
|
|
#if (trials != 1) & (
|
|
# '_means_' & means_differnet): # für die verschiedenen Trials wollen wir verschiedene Konditions einführen
|
|
if dev_n == 'original':
|
|
array0 = mat0
|
|
array01 = mat01
|
|
array02 = mat02
|
|
array012 = mat012#, axis = 0
|
|
elif dev_n == '05':
|
|
array0 = smoothed0
|
|
array01 = smoothed01
|
|
array02 = smoothed02
|
|
array012 = smoothed012
|
|
|
|
p0, p02, p01, p012, ff = calc_ps(nfft, array012,
|
|
array01,
|
|
array02,
|
|
array0,
|
|
test=False, sampling_rate=sampling_rate)
|
|
results_diff = calc_amps(ff, p0, p02, p01, p012, position_diff,
|
|
[dev], 0, results_diff, results_diff,
|
|
add='' + '_' + dev_n, sqrt=sqrt, test=False,
|
|
timesstamp=False, min_amps=min_amps, points=points)
|
|
#######################################
|
|
# here calculate the fft
|
|
# die arrays hier sind immer eindimmensional deswegen muss man hier nicht auf trials achten!
|
|
# embed()
|
|
# das ist das was wir vergleichen
|
|
ffts_right1, freq = calc_fft(array0, array01, array012, array02, deltat, sampling)
|
|
results_diff.loc[position_diff, 'diff_mean(fft)' + '_' + str(dev_n)] = np.sum(ffts_right1)*freq[1]
|
|
#fft_val2 = np.sum(np.abs(np.mean(ffts_all[cl_3names.c012], axis=0)) ** 2)*freq[1] - np.sum(np.abs(
|
|
# np.mean(ffts_all[cl_3names.c01], axis=0)) ** 2)*freq[1] - np.sum(np.abs(
|
|
# np.mean(ffts_all[cl_3names.c02], axis=0)) ** 2)*freq[1]+ np.sum(np.abs(
|
|
# np.mean(ffts_all[cl_3names.c0], axis=0)) ** 2)*freq[1]
|
|
# else:
|
|
#time_var3 = time.time()
|
|
#time_fft = time_var3 - time_var # 8
|
|
|
|
#embed()
|
|
####################################################################
|
|
arrays_stim = [stimulus_0, stimulus_01, stimulus_02, stimulus_012]
|
|
arrays = [array0, array01, array02, array012]
|
|
arrays_spikes = [spikes_base, spikes_01, spikes_02, spikes_012]
|
|
array_smoothed = [smoothed0, smoothed01, smoothed02, smoothed012]
|
|
#names = ['0', '01', '02', '012']
|
|
names = [cl_3names.c0,cl_3names.c01, cl_3names.c02, cl_3names.c012, ]
|
|
|
|
for a, array in enumerate(arrays):
|
|
#embed()
|
|
results_diff.loc[position_diff, 'mean(std)_' + names[a] + '_' + str(dev_n)] = np.mean(np.std(array, axis = 1))
|
|
results_diff.loc[position_diff, 'mean(var)_' + names[a] + '_' + str(dev_n)] = np.mean(np.var(array, axis = 1))
|
|
# results_diff.loc[position_diff, 'var_diff_' + dev_n] = results_diff.loc[position_diff, 'std_012' +'_'+dev_n] - results_diff.loc[position_diff, 'var_01' +'_'+dev_n]- results_diff.loc[position_diff, 'var_02' +'_'+dev_n]- results_diff.loc[position_diff, 'var_02' +'_'+dev_n]+ results_diff.loc[position_diff, 'var_0' +'_'+dev_n]
|
|
# results_diff.loc[position_diff, 'var_diff_sqrt_' + dev_n] = np.sqrt(results_diff.loc[position_diff, 'var_diff_' + dev_n])
|
|
|
|
# results_diff.loc[position_diff, 'std_diff' + dev_n] = results_diff.loc[position_diff, 'std_012' +'_'+dev_n] - results_diff.loc[position_diff, 'std_01' +'_'+dev_n]- results_diff.loc[position_diff, 'std_02' +'_'+dev_n]- results_diff.loc[position_diff, 'std_02' +'_'+dev_n]+ results_diff.loc[position_diff, 'std_0' +'_'+dev_n]
|
|
names_saved = ['mean(var)', 'mean(std)']
|
|
for name_saved in names_saved:
|
|
results_diff = calculate_the_difference(position_diff, results_diff, name_saved, dev_n,
|
|
results_diff.loc[
|
|
position_diff, name_saved + '_012' + '_' + dev_n],
|
|
results_diff.loc[
|
|
position_diff, name_saved + '_01' + '_' + dev_n],
|
|
results_diff.loc[
|
|
position_diff, name_saved + '_02' + '_' + dev_n],
|
|
results_diff.loc[
|
|
position_diff, name_saved + '_0' + '_' + dev_n])
|
|
|
|
##################################################
|
|
# für den Fall dass ich das Testen will und das zurück transferieren will
|
|
# zum testen von dem phase sorting algorithmus für die Daten!
|
|
if params_dict['phase_undo'] == True:
|
|
embed()
|
|
mean_type = 'MeanTrialsIndexPhaseSort_Min0.25sExcluded'
|
|
array012_gr, array02_gr, array01_gr, array0_gr = phase_sort_and_cut(mean_type, frame,
|
|
synaptic_flt_analysis,
|
|
t, sampling_time, sorted_on = sorted_on)
|
|
|
|
# todo: der Teil ist halt noch nicht fürs Mitteln ausgelegt, aber vielleich tbrauche ich das auch nicht
|
|
else:
|
|
p_array = []
|
|
|
|
##########################################
|
|
# diese Mehrfachen berechnen für eine
|
|
# das hier ist so eine Analyse um, die Zenter zu berechnen und zwar ohne die Beats erstmal
|
|
# ich denke 4 Harmonische reichen da schon nicht whar?
|
|
# hier muss man noch einbau dass das davon abhängt ob c1 oder c2 variert!
|
|
if dev_n == 'original':
|
|
array0 = [np.mean(mat0, axis=0)]
|
|
array01 = [np.mean(mat01, axis=0)]
|
|
array02 = [np.mean(mat02, axis=0)]
|
|
array012 = [np.mean(mat012, axis=0)]
|
|
elif dev_n == '05':
|
|
array0 = [np.mean(smoothed0, axis=0)]
|
|
array01 = [np.mean(smoothed01, axis=0)]
|
|
array02 = [np.mean(smoothed02, axis=0)]
|
|
array012 = [np.mean(smoothed012, axis=0)]
|
|
|
|
#embed()
|
|
B1 = results_diff.loc[position_diff, 'B1']
|
|
if B1 != 0:
|
|
try:
|
|
beats_range = np.arange(np.abs(B1), 1000,
|
|
np.abs(B1))
|
|
except:
|
|
print('B1 thing')
|
|
embed()
|
|
#fs - np.transpose(beats_range)
|
|
|
|
|
|
|
|
idx = []
|
|
for beat in beats_range:
|
|
idx.append(np.argmin(np.abs(ff-beat)))
|
|
|
|
names = ['0','01','02','012']
|
|
p_array = [p0, p01,p02, p012]
|
|
|
|
for n_nr, name in enumerate(names):
|
|
vals = np.sqrt(np.mean(p_array[n_nr][0][idx] * ff[1]))
|
|
results_diff.loc[position_diff, 'B1_harms_all_mean_'+name+'_'+dev_n] = vals
|
|
vals = np.sqrt(np.sum(p_array[n_nr][0][idx] * ff[1]))
|
|
results_diff.loc[position_diff, 'B1_harms_all_sum_' + name + '_' + dev_n] = vals
|
|
|
|
nrs_excluded = [0,1,2, 3, 4]
|
|
for nr_excluded in nrs_excluded:
|
|
if len(idx)>nr_excluded:
|
|
vals_bef = p_array[n_nr][0][idx[nr_excluded::]] * ff[1]
|
|
vals = np.sqrt(np.mean(vals_bef))
|
|
results_diff.loc[position_diff, 'B1_harms_'+str(nr_excluded)+'_all_mean_'+name+'_'+dev_n] = vals
|
|
vals = np.sqrt(np.sum(vals_bef))
|
|
results_diff.loc[position_diff, 'B1_harms_'+str(nr_excluded)+'_all_mean_'+name+'_'+dev_n] = vals
|
|
results_diff.loc[position_diff, 'B1_harms_'+str(nr_excluded)+'_all_center_'+name+'_'+dev_n] = ff[idx[nr_excluded::][np.argmax(vals_bef)]]
|
|
|
|
# f_min =
|
|
#Matrix = [[0 for x in range(fs)] for x in range(fs)]
|
|
#results_diff.loc[position_diff, 'B1']
|
|
#if beats_append:
|
|
|
|
#########################################
|
|
# nochmal die Vector Strength berechnen
|
|
results_diff = calc_vs_amps(results_diff,freq1[0], eod_fr, arrays_spikes, position_diff, names, add = '_'+dev_n)
|
|
|
|
######################################
|
|
# upper and lower bound berechnen
|
|
array_smoothed = [smoothed0, smoothed01, smoothed02, smoothed012]
|
|
names = ['0', '01', '02', '012']
|
|
results_diff = upper_and_lower_fr(array_smoothed, results_diff, position_diff, eod_fr, names, add = '')#''
|
|
|
|
######################################
|
|
# hist für doppelte spikes vom Phase Locking
|
|
try:
|
|
results_diff = find_double_spikes(eod_fr, arrays_spikes,names, results_diff, position_diff, add = '_'+dev_n)
|
|
except:
|
|
print('double spikes problem')
|
|
embed()
|
|
######################################
|
|
# phasen zu dem EOD
|
|
|
|
|
|
|
|
|
|
if 'AUCI' in AUCI:
|
|
time_var = time.time()
|
|
add = '_' + way_all + str(datapoints)+ '_'+dev_n
|
|
# embed()
|
|
trials, results_diff, tp_012_all, tp_01_all, tp_02_all, fp_all, roc_01, base_here, roc_02, roc_012, threshhold = calc_auci_pd(
|
|
results_diff, position_diff, array012, array01, array02, array0, add=add, t_off=5,
|
|
way=way_all, datapoints=datapoints,f0='f0')
|
|
|
|
time_var3 = time.time()
|
|
time_model_roc = time_var3 - time_var # 8
|
|
position_diff += 1
|
|
#embed()
|
|
|
|
try:
|
|
v_mems, arrays_spikes, arrays_stim, results_diff, position_diff, auci_wo, auci_w, arrays, names, p_array, ff
|
|
except:
|
|
print('missing')
|
|
embed()
|
|
return v_mems, arrays_spikes, arrays_stim, results_diff, position_diff,auci_wo,auci_w, arrays, names,p_array, ff
|
|
|
|
|
|
def calc_fft(array0, array01, array012, array02, deltat, sampling):
|
|
arrays = [array012, array01, array02, array0]
|
|
names = [cl_3names.c012, cl_3names.c01, cl_3names.c02, cl_3names.c0]
|
|
fft = {}
|
|
ffts_all = calc_FFT3(arrays, deltat, fft, names)
|
|
# embed()
|
|
ffts_right1 = equal_to_temporal_mean(ffts_all)
|
|
# results_diff = calc_fft_score(results_diff, array_all, t, deltat, position_diff, titles_all, fs)
|
|
# embed()
|
|
freq = np.fft.fftfreq(len(ffts_right1), d=1 / sampling)
|
|
return ffts_right1, freq
|
|
|
|
|
|
def phase_sort_and_cut(mean_type,frame, synaptic_flt_orig, t, sampling_time, sorted_on = 'local_reconst_big_norm'):
|
|
if 'DetectionAnalysis' not in mean_type:
|
|
#embed()
|
|
delays_length = define_delays_trials(mean_type, frame, sorted_on = sorted_on)
|
|
# array0, array01, array02, array012,mean_nrs,array012_all, array01_all, array02_all, array0_all = assign_trials(frame, devname[t], delays_length,mean_type, sampling = sampling_time)
|
|
# get all trails together
|
|
array012_all, array01_all, array02_all, array0_all = cut_uneven_trials(
|
|
frame, synaptic_flt_orig[t], mean_type, delays_length, sampling=sampling_time)
|
|
|
|
#embed()
|
|
if 'extended' in mean_type:
|
|
# Also das hier generiert mehr trials, indem das alles in neue gruppen regeneriert,
|
|
# also die gleichen Daten sind mehrmals drin nur anders gruppiert (2*15, 3*10 und am ende auch 1*30, letzte Zeile!)
|
|
# brauchen wir vor allem für das ROC Ding und im Falle vom Mitteln
|
|
# also das finde icch braut
|
|
array0_gr = find_group_variants(array0_all, [])
|
|
array01_gr = find_group_variants(array01_all, [])
|
|
array02_gr = find_group_variants(array02_all, [])
|
|
array012_gr = find_group_variants(array012_all, [])
|
|
print('extended '+str(len(array0_gr)))
|
|
if len(array0_gr)> 0:
|
|
print('extended thing')
|
|
embed()
|
|
# und hier appenden wir nochmal alles als variante
|
|
array0_gr.append([array0_all])
|
|
array01_gr.append([array01_all])
|
|
array02_gr.append([array02_all])
|
|
array012_gr.append([array012_all])
|
|
else: # DEFAULT
|
|
array0_gr = [[array0_all]]
|
|
array01_gr = [[array01_all]]
|
|
array02_gr = [[array02_all]]
|
|
array012_gr = [[array012_all]]
|
|
#embed()
|
|
else:
|
|
|
|
array012_gr = [[[]]]
|
|
array01_gr = [[[]]]
|
|
array02_gr = [[[]]]
|
|
array0_gr = [[[]]]
|
|
return array012_gr, array02_gr, array01_gr, array0_gr
|
|
|
|
|
|
def calc_amp_value(names, freq_step, ff, ps, position_diff, fs, devname, t, results_diff, name, add, fish, sqrt = '', points = 5):
|
|
a = []
|
|
length = len(ps[ff])
|
|
|
|
results_diff = results_diff.copy()
|
|
vals = []
|
|
printing = False
|
|
if str(names[name]) != 'no':# wir machen das wegen der Baseline, weil die nicht immer da ist!
|
|
for trial_nr in range(len(ps[ff])):
|
|
if not (np.isnan(ps[ff][trial_nr])).any():
|
|
if trial_nr == 0:
|
|
# embed()
|
|
#
|
|
# pd.concat([resutls_diff, results_diff.loc[position_diff, 'amp_' + name + fish + add] = 0]
|
|
if printing:
|
|
print('started')
|
|
results_diff.loc[position_diff, 'amp_' + name + fish + add] = 0
|
|
|
|
if 'max' in name:
|
|
results_diff.loc[position_diff, 'f_' + name + fish + add] = 0
|
|
if name == '':
|
|
if printing:
|
|
print('name == ')
|
|
#if '_notsqrt_' not in sqrt:
|
|
#results_diff.loc[position_diff, 'amp_' + name + fish + add] += np.sqrt(
|
|
# np.sum(ps[ff][trial_nr]) * fs[1])
|
|
#else:
|
|
results_diff.loc[position_diff, 'amp_' + name + fish + add] += np.sum(ps[ff][trial_nr]) * fs[1]
|
|
else:
|
|
if 'max' in name:
|
|
if printing:
|
|
print('max')
|
|
if (devname[t] == 'original') or (devname[t] == '_original') or (devname[t] == '_eod'):
|
|
try:
|
|
arg = np.argmax(ps[ff][trial_nr][fs < 0.5 * results_diff.EODf.loc[position_diff] + fs[1]])
|
|
except:
|
|
try:
|
|
arg = np.argmax(ps[ff][trial_nr][fs < 0.5 * results_diff.f0.loc[position_diff] + fs[1]])
|
|
except:
|
|
print('arg stuff')
|
|
embed()
|
|
else:
|
|
if 'harm' in name:
|
|
arg = np.argmax(ps[ff][trial_nr]) * 2
|
|
else:
|
|
arg = np.argmax(ps[ff][trial_nr])
|
|
# except:
|
|
# embed()
|
|
if arg < len(fs): # also wenn einer der trials drüber ist dann setzten wir alles NAN einfach weil
|
|
# irgendwo später im Code könnte es komische Effetke geben
|
|
try:
|
|
results_diff.loc[position_diff, 'f_' + name + fish + add] += fs[arg]
|
|
except:
|
|
print('results diff problems')
|
|
embed()
|
|
else:
|
|
if printing:
|
|
print('else')
|
|
results_diff.loc[position_diff, 'f_' + name + fish + add] += float('nan')
|
|
#else:
|
|
# results_diff.loc[position_diff, 'f_' + name + fish + add] += fs[arg]=
|
|
else:
|
|
try:
|
|
arg = np.argmin(np.abs(fs - names[name]))
|
|
except:
|
|
print('arg something')
|
|
embed()
|
|
try:
|
|
if printing:
|
|
print('val')
|
|
#if '_notsqrt_' not in sqrt:
|
|
#val = np.sqrt(np.sum((ps[ff][trial_nr][arg - 2:arg + 3]) * freq_step))
|
|
|
|
# also bei den Phaselocking Sachen da nehme ich immer nur einen Peak, weil ich kriege so viele Peaks ich möchte
|
|
# einen Überlapp vermeiden! Aber wenn die Auflösung fein genug ist sollte das schon passen!
|
|
if arg < len(ps[ff][trial_nr]):
|
|
if points == 1:
|
|
val = np.sum((ps[ff][trial_nr][arg]) * freq_step)
|
|
#f_min =
|
|
elif points ==3:
|
|
val = np.sum((ps[ff][trial_nr][arg - 1:arg + 2]) * freq_step)
|
|
elif points == 5:
|
|
val = np.sum((ps[ff][trial_nr][arg - 2:arg + 3]) * freq_step)
|
|
#embed()
|
|
# hier summieren wir erstmal die varianzen auf!
|
|
results_diff.loc[position_diff, 'amp_' + name + fish + add] += val
|
|
vals.append(val)
|
|
#embed()
|
|
except:
|
|
|
|
print('calc_ amp')
|
|
embed()
|
|
|
|
# a.append(np.sqrt(np.sum((ps[ff][t][arg - 2:arg + 3]) * freq_step)))
|
|
# print(np.sqrt(np.sum((ps[ff][t][arg - 2:arg + 3]) * freq_step)))
|
|
# print(results_diff.loc[position_diff, 'amp_'+name+fish])
|
|
else:
|
|
length -= 1
|
|
# das muss ganz am Ende stehen!
|
|
# davor wurde das aufsummiert jetzt wird das geteilt!
|
|
if length != 0:
|
|
# ok das hier ist so ein Ding wenn ich mitten in der Funtion anhalten will das ich trotzdem bei der Hälfte rauskomme?
|
|
if printing:
|
|
print('div')
|
|
try:
|
|
results_diff.loc[position_diff, 'amp_' + name + fish + add] = results_diff.loc[
|
|
position_diff, 'amp_' + name + fish + add] / length
|
|
except:
|
|
print('amp problem')
|
|
embed()
|
|
|
|
if 'max' in name:
|
|
results_diff.loc[position_diff, 'f_' + name + fish + add] = results_diff.loc[position_diff, 'f_' + name + fish + add] / length
|
|
#if results_diff.dev.iloc[-1] == '05':
|
|
|
|
|
|
#results_diff['amp_B1_012']
|
|
#if name == 'f0_':
|
|
# embed()
|
|
|
|
#results_diff['DeltaF2'],results_diff['DeltaF1']
|
|
return results_diff
|
|
|
|
|
|
def peaks_of_interest(df1, df2, beat1, beat2, fr, f1, f2, eod_fr, min_amps = ''):
|
|
# ok das sind alle potentiell interessanten Peaks aber meistens wollen wir ja nur bestimmte,
|
|
# das sollten wir stark reduzieren, hier kann man sagen nur an den und den Peaks interesisert
|
|
# eignetlich interessiren uns nur 'B1_': np.abs(beat1),'B2_': np.abs(beat2),
|
|
if 'min' in min_amps:
|
|
names = {
|
|
'B1_': np.abs(beat1),
|
|
'B2_': np.abs(beat2),
|
|
|
|
'B1-B2_': np.abs(beat1 - beat2),
|
|
'B2-B1_': np.abs(beat2 - beat1),
|
|
|
|
'B2+B1_': np.abs(beat2 + beat1),
|
|
'B1+B2_': np.abs(beat2 + beat1),
|
|
'f0_': np.abs(eod_fr),
|
|
'f0_harm_': np.abs(eod_fr)*2,
|
|
'f1_': f1,
|
|
'f2_': f2,
|
|
'env_beat_': np.abs(np.abs(create_beat_corr(eod_fr - f1, np.array([eod_fr]))) - np.abs(
|
|
create_beat_corr(eod_fr - f2, np.array([eod_fr])))),
|
|
'fr_': fr}
|
|
else:
|
|
names = {
|
|
'DeltaF1_': np.abs(df1),
|
|
'DeltaF2_': np.abs(df2),
|
|
'DeltaF1_harm_': np.abs(df1) * 2,
|
|
'DeltaF2_harm_': np.abs(df2) * 2,
|
|
|
|
'B1_harm_': np.abs(beat1) * 2,
|
|
'B2_harm_': np.abs(beat2) * 2,
|
|
'B1_2harm_': np.abs(beat1) * 3,
|
|
'B2_2harm_': np.abs(beat2) * 3,
|
|
'B1_3harm_': np.abs(beat1) * 4,
|
|
'B2_3harm_': np.abs(beat2) * 4,
|
|
'F2+F1_': np.abs(f2 + f1),
|
|
'F1-F2_': np.abs(f1 - f2),
|
|
'F2-F1_': np.abs(f2 - f1),
|
|
|
|
'B1_': np.abs(beat1),
|
|
'B2_': np.abs(beat2),
|
|
|
|
'B1-B2_': np.abs(beat1 - beat2),
|
|
'B2-B1_': np.abs(beat2 - beat1),
|
|
|
|
'B2+B1_': np.abs(beat2 + beat1),
|
|
'B1+B2_': np.abs(beat2 + beat1),
|
|
|
|
'fr-B2_': np.abs(fr - beat2),
|
|
'fr-B1_': np.abs(fr - beat1),
|
|
'fr-(B2+B1)_': np.abs(fr - (beat2 + beat1)),
|
|
'fr-(B1-B2)_': np.abs(fr - np.abs(beat1 - beat2)),
|
|
'fr-(B2-B1)_': np.abs(fr - np.abs(beat2 - beat1)),
|
|
'fr+B2_': np.abs(fr + beat2),
|
|
'fr+B1_': np.abs(fr + beat1),
|
|
'fr+(B2+B1)_': np.abs(fr + (beat2 + beat1)),
|
|
'fr+(B1-B2)_': np.abs(fr + np.abs(beat1 - beat2)),
|
|
'fr+(B2-B1)_': np.abs(fr + np.abs(beat2 - beat1)),
|
|
|
|
'f0-B2_': np.abs(eod_fr - beat2),
|
|
'f0-B1_': np.abs(eod_fr - beat1),
|
|
'f0-(B2+B1)_': np.abs(eod_fr - (beat2 + beat1)),
|
|
'f0-(B1-B2)_': np.abs(eod_fr - np.abs(beat1 - beat2)),
|
|
'f0-(B2-B1)_': np.abs(eod_fr - np.abs(beat2 - beat1)),
|
|
'f0+B2_': np.abs(eod_fr + beat2),
|
|
'f0+B1_': np.abs(eod_fr + beat1),
|
|
'f0_': np.abs(eod_fr),
|
|
'f0+(B2+B1)_': np.abs(eod_fr + (beat2 + beat1)),
|
|
'f0+(B1-B2)_': np.abs(eod_fr + np.abs(beat1 - beat2)),
|
|
'f0+(B2-B1)_': np.abs(eod_fr + np.abs(beat2 - beat1)),
|
|
|
|
'f1_': f1,
|
|
'f2_': f2,
|
|
'f1_harm_': f1 * 2,
|
|
'f2_harm_': f2 * 2,
|
|
|
|
'env_': np.abs(np.abs(df1) - np.abs(df2)),
|
|
'env_beat_': np.abs(np.abs(create_beat_corr(eod_fr - f1, np.array([eod_fr]))) - np.abs(
|
|
create_beat_corr(eod_fr - f2, np.array([eod_fr])))),
|
|
'env_beat_beatf0_': create_beat_corr(np.abs(
|
|
np.abs(create_beat_corr(eod_fr - f1, np.array([eod_fr]))) - np.abs(
|
|
create_beat_corr(eod_fr - f2, np.array([eod_fr])))), np.array([eod_fr])),
|
|
'fr_': fr,
|
|
'fr_harm_': fr * 2}
|
|
|
|
return names
|
|
|
|
|
|
def plt_calc_amps(results, p0, p01, p02, p012, frame, fs):
|
|
fig, ax = plt.subplots(2, 4, sharex=True, sharey=True) #
|
|
ax = ax.flatten()
|
|
arrays = [p0[0], p01[0], p02[0], p012[0], p012[0] - p02[0], p012[0] - p01[0], p012[0] - p02[0] - p01[0],
|
|
p012[0] - p02[0] - p01[0] + p0[0]]
|
|
titles = ['0', '01', '02', '012', '012-02', '012-01', '012-01-02', '012-01-02+0', ]
|
|
plt.suptitle(frame.cell.iloc[0])
|
|
# arrays2 = [array0, array01, array02, array012]
|
|
for a, array in enumerate(arrays):
|
|
# ax[a].plot(np.arange(0, len(arrays2[a][0])*deltat, deltat), arrays2[a][0])
|
|
# ax[a,1].set_xlim(0,0.2)
|
|
ax[a].plot(fs, array, color='black')
|
|
ax[a].set_title(titles[a])
|
|
ax[a].set_xlim(0, 1000)
|
|
B1 = results.df1.iloc[0]
|
|
B2 = results.df2.iloc[0]
|
|
fr = results.fr.iloc[0]
|
|
freqs = [np.abs(B2),
|
|
np.abs(np.abs(np.abs(B1) - np.abs(B2))),
|
|
np.abs(np.abs(B1) + np.abs(B2)), np.mean(fr), np.abs(B1), np.abs(B1) * 2, np.abs(B1) * 3,
|
|
np.abs(B1) * 4, ]
|
|
colors = ['green', 'purple', 'orange', 'red', 'blue', 'blue', 'blue', 'blue', ]
|
|
labels = ['DF2', '|DF1-DF2|', '|DF1+DF2|', 'Baseline', 'DF1', 'DF1', 'DF1', 'DF1']
|
|
# embed()
|
|
# for p in range(len(array)):
|
|
plt_peaks_several(labels, freqs, arrays, 0, ax[a],
|
|
array, colors, fs, alpha=0.5)
|
|
ax[a].set_xlim([0, 400])
|
|
ax[-1].legend(loc=(1, 0), ncol=1)
|
|
plt.subplots_adjust(right=0.8)
|
|
plt.show()
|
|
|
|
|
|
def calc_pure_amps_diffs(frame,pos, names, fishes, freq_step, ps, fs, devname, t, add, points = 5, sqrt = '_sqrt_'):
|
|
for nn, name in enumerate(names):
|
|
#if type(names[name]) != str:
|
|
# for fu, func in enumerate(funcs):
|
|
|
|
# Hier werden die Einzelfrequenzen gemacht
|
|
# also hier berechne ich die als std dann ist das Hz
|
|
for ff, fish in enumerate(fishes):
|
|
frame = calc_amp_value(names, freq_step, ff, ps, pos, fs, devname, t, frame, name, add, fish, points = points)
|
|
|
|
# Hier werden die Diff Scores gemacht
|
|
|
|
# in dem default fall sqrt == '' schauen wir uns gleich die sqrt peaks an
|
|
# Summieren können wir aber nur varianzen!
|
|
#if sqrt = '_sqrt_': # das mache ich um das von früheren Versionen zu differnezieren!
|
|
if 'amp_' + name + '01' + add in frame.keys():
|
|
frame.loc[pos, 'amp_' + name + '012-01' + add] = frame.loc[pos, 'amp_' + name + '012' + add] - \
|
|
frame.loc[pos, 'amp_' + name + '01' + add]
|
|
|
|
if 'amp_' + name + '02' + add in frame.keys():
|
|
|
|
frame.loc[pos, 'amp_' + name + '012-02' + add] = (frame.loc[
|
|
pos, 'amp_' + name + '012' + add]) - \
|
|
(frame.loc[
|
|
pos, 'amp_' + name + '02' + add])
|
|
if 'amp_' + name + '01' + add in frame.keys():
|
|
frame.loc[pos, 'amp_' + name + 'diff' + add] = (frame.loc[
|
|
pos, 'amp_' + name + '012' + add]) - \
|
|
(frame.loc[
|
|
pos, 'amp_' + name + '01' + add]) - \
|
|
(frame.loc[
|
|
pos, 'amp_' + name + '02' + add]) + \
|
|
(frame.loc[
|
|
pos, 'amp_' + name + '0' + add])
|
|
frame.loc[pos, 'amp_' + name + '012-02-01' + add] = (frame.loc[
|
|
pos, 'amp_' + name + '012' + add]) - \
|
|
frame.loc[
|
|
pos, 'amp_' + name + '02' + add]- \
|
|
frame.loc[
|
|
pos, 'amp_' + name + '01' + add]
|
|
|
|
|
|
return frame
|
|
|
|
|
|
def find_B1B2_norm_amp_diffs(frame, norms_name, norms, pos, add):
|
|
for n, norm in enumerate(norms):
|
|
|
|
##################
|
|
# B1 & B2
|
|
divs = [2, 1]
|
|
divs_name = ['/2', '', ]
|
|
for d, div in enumerate(divs):
|
|
# IMPORTANT
|
|
|
|
B1_B2= ((frame.loc[pos, 'amp_' + 'B1_' + '012' + add] - frame.loc[pos, 'amp_' + 'B1_' + '01' + add]) +
|
|
(frame.loc[pos, 'amp_' + 'B2_' + '012' + add] - \
|
|
frame.loc[pos, 'amp_' + 'B2_' + '02' + add])) / norm
|
|
#embed()
|
|
B1_ = (frame.loc[pos, 'amp_' + 'B1_' + '012' + add] - frame.loc[pos, 'amp_' + 'B1_' + '01' + add]) / norm
|
|
B2_ = ((frame.loc[pos, 'amp_' + 'B2_' + '012' + add] - \
|
|
frame.loc[pos, 'amp_' + 'B2_' + '02' + add])) / norm
|
|
B1_0102 = ((frame.loc[pos, 'amp_' + 'B1_' + '012' + add]
|
|
- frame.loc[pos, 'amp_' + 'B1_' + '01' + add]- frame.loc[pos, 'amp_' + 'B1_' + '02' + add])) / norm#frame.loc[pos, 'amp_' + 'B1_' + '0' + add]
|
|
B2_0102 = (frame.loc[pos, 'amp_' + 'B2_' + '012' + add] - \
|
|
frame.loc[pos, 'amp_' + 'B2_' + '02' + add]-frame.loc[pos, 'amp_' + 'B2_' + '01' + add]) / norm
|
|
|
|
B1_01020 = ((frame.loc[pos, 'amp_' + 'B1_' + '012' + add]
|
|
- frame.loc[pos, 'amp_' + 'B1_' + '01' + add] - frame.loc[
|
|
pos, 'amp_' + 'B1_' + '02' + add]) + frame.loc[
|
|
pos, 'amp_' + 'B1_' + '0' + add]) / norm # frame.loc[pos, 'amp_' + 'B1_' + '0' + add]
|
|
B2_01020 = (frame.loc[pos, 'amp_' + 'B2_' + '012' + add] - \
|
|
frame.loc[pos, 'amp_' + 'B2_' + '02' + add] - frame.loc[pos, 'amp_' + 'B2_' + '01' + add]+ frame.loc[pos, 'amp_' + 'B2_' + '0' + add]) / norm
|
|
|
|
B1_B2_0102 = ((frame.loc[pos, 'amp_' + 'B1_' + '012' + add]
|
|
- frame.loc[pos, 'amp_' + 'B1_' + '01' + add]- frame.loc[pos, 'amp_' + 'B1_' + '02' + add]) +
|
|
(frame.loc[pos, 'amp_' + 'B2_' + '012' + add] - \
|
|
frame.loc[pos, 'amp_' + 'B2_' + '02' + add]-frame.loc[pos, 'amp_' + 'B2_' + '01' + add])) / norm
|
|
frame.loc[pos, 'amp_' + 'B1&B2' + divs_name[d] + '_012-01_012-02' + norms_name[n] + add] = B1_B2 / div
|
|
|
|
frame.loc[pos, 'amp_' + 'B1&B2' + divs_name[d] + '_012-01-02' + norms_name[n] + add] = B1_B2 / div
|
|
frame.loc[pos, 'amp_' + 'B1' + divs_name[d] + '_012-01-02' + norms_name[n] + add] = B1_0102 / div
|
|
frame.loc[pos, 'amp_' + 'B2' + divs_name[d] + '_012-01-02' + norms_name[n] + add] = B2_0102 / div
|
|
frame.loc[pos, 'amp_' + 'B1' + divs_name[d] + '_012-01-02+0' + norms_name[n] + add] = B1_01020 / div
|
|
frame.loc[pos, 'amp_' + 'B2' + divs_name[d] + '_012-01-02+0' + norms_name[n] + add] = B2_01020 / div
|
|
|
|
#embed()
|
|
##################
|
|
# B1 & B2 Harmonische
|
|
divs = [4, 1]
|
|
divs_name = ['/4', '', ]
|
|
Bs = ['B1_', 'B2_']
|
|
ends = ['01', '02']
|
|
B_harms = []
|
|
|
|
# here takes only two combis of Bs and ends
|
|
for bb, B in enumerate(Bs):
|
|
# IMPORTANT
|
|
B_harm = ((frame.loc[pos, 'amp_' + B + 'harm_' + '012' + add] - \
|
|
frame.loc[pos, 'amp_' + B + 'harm_' + ends[bb] + add])
|
|
+
|
|
(frame.loc[pos, 'amp_' + B + '2harm_' + '012' + add] - \
|
|
frame.loc[pos, 'amp_' + B + '2harm_' + ends[bb] + add])
|
|
+
|
|
(frame.loc[pos, 'amp_' + B + '3harm_' + '012' + add] - \
|
|
frame.loc[pos, 'amp_' + B + '3harm_' + ends[bb] + add])) / norm
|
|
B_harm_0102 = ((frame.loc[pos, 'amp_' + B + 'harm_' + '012' + add] - \
|
|
frame.loc[pos, 'amp_' + B + 'harm_' + '01' + add]
|
|
-frame.loc[pos, 'amp_' + B + 'harm_' + '02' + add])
|
|
+
|
|
(frame.loc[pos, 'amp_' + B + '2harm_' + '012' + add] - \
|
|
frame.loc[pos, 'amp_' + B + '2harm_' + '01' + add]
|
|
-frame.loc[pos, 'amp_' + B + '2harm_' + '02' + add])
|
|
+
|
|
(frame.loc[pos, 'amp_' + B + '3harm_' + '012' + add] - \
|
|
-frame.loc[pos, 'amp_' + B + '3harm_' + '01' + add]-
|
|
frame.loc[pos, 'amp_' + B + '3harm_' + '02' + add])) / norm
|
|
|
|
B_harm_01020 = ((frame.loc[pos, 'amp_' + B + 'harm_' + '012' + add] - \
|
|
frame.loc[pos, 'amp_' + B + 'harm_' + '01' + add]
|
|
-frame.loc[pos, 'amp_' + B + 'harm_' + '02' + add]
|
|
+frame.loc[pos, 'amp_' + B + 'harm_' + '0' + add])
|
|
+
|
|
(frame.loc[pos, 'amp_' + B + '2harm_' + '012' + add] - \
|
|
frame.loc[pos, 'amp_' + B + '2harm_' + '01' + add]
|
|
-frame.loc[pos, 'amp_' + B + '2harm_' + '02' + add]
|
|
+frame.loc[pos, 'amp_' + B + '2harm_' + '0' + add])
|
|
+
|
|
(frame.loc[pos, 'amp_' + B + '3harm_' + '012' + add] - \
|
|
-frame.loc[pos, 'amp_' + B + '3harm_' + '01' + add]-
|
|
frame.loc[pos, 'amp_' + B + '3harm_' + '02' + add]
|
|
+frame.loc[pos, 'amp_' + B + '3harm_' + '0' + add])) / norm
|
|
#(frame.loc[pos, 'amp_' + B + '012' + add] -frame.loc[pos, 'amp_' + B + ends[bb] + add]) +
|
|
if 'B1_' in B:
|
|
B1_harm = B_harm
|
|
B1_harm_0102 = B_harm_0102
|
|
B1_harm_01020 = B_harm_01020
|
|
else:
|
|
B2_harm = B_harm
|
|
B2_harm_0102 = B_harm_0102
|
|
B2_harm_01020 = B_harm_01020
|
|
#embed()
|
|
B_harms.append(B_harm)
|
|
for d, div in enumerate(divs):
|
|
frame.loc[pos, 'amp_' + B + 'harms_' + divs_name[d] + '_012-'+ends[bb] + norms_name[n] + add] = B_harm / div
|
|
frame.loc[pos, 'amp_' + B + 'harms_' + divs_name[d] + '_012-01-02' + norms_name[n] + add] = B_harm_0102 / div
|
|
frame.loc[pos, 'amp_' + B + 'harms_' + divs_name[d] + '_012-01-02+0' + norms_name[n] + add] = B_harm_01020 / div
|
|
|
|
# für das aufsummierte
|
|
names_b = ['B1-B2&B1+B2', 'B1&B2&B1-B2&B1+B2']
|
|
|
|
# here I have different controls, I guess the t the mean control ist the best
|
|
diff_parts = [('02', '02'), ('01', '01'), ('02', '01'), ('01', '02')]
|
|
for diff_part in diff_parts:
|
|
# 3) B1-B2 & B1+B2, für die verschiedenen Kontrollen
|
|
prev = ((frame.loc[pos, 'amp_' + 'B1-B2_' + '012' + add] - \
|
|
frame.loc[pos, 'amp_' + 'B1-B2_' + diff_part[0] + add]) +
|
|
(frame.loc[pos, 'amp_' + 'B1+B2_' + '012' + add] - \
|
|
frame.loc[pos, 'amp_' + 'B1+B2_' + diff_part[1] + add])) / norm
|
|
divs = [2,1]
|
|
divs_name = ['/2','']
|
|
for d, div in enumerate(divs):
|
|
frame.loc[
|
|
pos, 'amp_' + 'B1-B2&B1+B2' + divs_name[d] + '_012-' + diff_part[0] + '_012-' + diff_part[1] + '' +
|
|
norms_name[n] + add] = prev / div
|
|
|
|
# 4) B1 & B2 & B1 - B2 & B1 + B2
|
|
# B1 - B2 & B1 + B2 AND EXTRA B1 & B2
|
|
divs = [4,1]
|
|
divs_name = [ '/4','']
|
|
for d, div in enumerate(divs):
|
|
frame.loc[
|
|
pos, 'amp_' + 'B1&B2&B1-B2&B1+B2' + divs_name[d] + '_012-' + diff_part[0] + '_012-' + diff_part[
|
|
1] + '' + norms_name[n] + add] = (prev + B1_B2) / div
|
|
|
|
|
|
# B1-B2
|
|
B1_minus_B2_0102 = (frame.loc[pos, 'amp_' + 'B1-B2_' + '012' + add] - \
|
|
frame.loc[pos, 'amp_' + 'B1-B2_' + '02' + add] - \
|
|
frame.loc[pos, 'amp_' + 'B1-B2_' + '01' + add]) / (norm)
|
|
B1_minus_B2_01020 = (frame.loc[pos, 'amp_' + 'B1-B2_' + '012' + add] - \
|
|
frame.loc[pos, 'amp_' + 'B1-B2_' + '02' + add] - \
|
|
frame.loc[pos, 'amp_' + 'B1-B2_' + '01' + add]+frame.loc[pos, 'amp_' + 'B1-B2_' + '0' + add]) / (norm)
|
|
B1_minus_B2 = (frame.loc[pos, 'amp_' + 'B1-B2_' + '012' + add] - \
|
|
frame.loc[pos, 'amp_' + 'B1-B2_' + '02' + add] + frame.loc[
|
|
pos, 'amp_' + 'B1-B2_' + '012' + add] - \
|
|
frame.loc[pos, 'amp_' + 'B1-B2_' + '01' + add]) / (2*norm)
|
|
|
|
divs = [2,1]
|
|
divs_name = ['/2','', ]
|
|
for d, div in enumerate(divs):
|
|
frame.loc[
|
|
pos, 'amp_' + 'B1-B2' + divs_name[d] + '_mean(012-0102)' + norms_name[n] + add] = B1_minus_B2 / div
|
|
frame.loc[
|
|
pos, 'amp_' + 'B1-B2' + divs_name[d] + '_012-01-02' + norms_name[n] + add] = B1_minus_B2_0102 / div
|
|
frame.loc[
|
|
pos, 'amp_' + 'B1-B2' + divs_name[d] + '_012-01-02+0' + norms_name[n] + add] = B1_minus_B2_01020 / div
|
|
|
|
# B1+B2
|
|
B1_plus_B2_0102 = (frame.loc[pos, 'amp_' + 'B1+B2_' + '012' + add] - \
|
|
frame.loc[pos, 'amp_' + 'B1+B2_' + '01' + add] - \
|
|
frame.loc[pos, 'amp_' + 'B1+B2_' + '02' + add]) / (norm)
|
|
B1_plus_B2_01020 = (frame.loc[pos, 'amp_' + 'B1+B2_' + '012' + add] - \
|
|
frame.loc[pos, 'amp_' + 'B1+B2_' + '01' + add] - \
|
|
frame.loc[pos, 'amp_' + 'B1+B2_' + '02' + add] +
|
|
frame.loc[pos, 'amp_' + 'B1+B2_' + '0' + add]) / (norm)
|
|
|
|
|
|
|
|
B1_plus_B2 = (frame.loc[pos, 'amp_' + 'B1+B2_' + '012' + add] - \
|
|
frame.loc[pos, 'amp_' + 'B1+B2_' + '01' + add] +
|
|
frame.loc[pos, 'amp_' + 'B1+B2_' + '012' + add] - \
|
|
frame.loc[pos, 'amp_' + 'B1+B2_' + '02' + add]) / (2*norm)
|
|
divs = [2,1]
|
|
divs_name = ['/2','']
|
|
for d, div in enumerate(divs):
|
|
frame.loc[pos, 'amp_' + 'B1+B2' + divs_name[d] + '_mean(012-0102)' + norms_name[n]+add ] = B1_plus_B2 / div
|
|
frame.loc[pos, 'amp_' + 'B1+B2' + divs_name[d] + '_012-01-02' + norms_name[n] + add] = B1_plus_B2_0102 / div
|
|
frame.loc[pos, 'amp_' + 'B1+B2' + divs_name[d] + '_012-01-02+0' + norms_name[n] + add] = B1_plus_B2_01020 / div
|
|
|
|
# IMPORTANT
|
|
# und hier kommt die Fortsetzung das ist das gleiche nur mit Mean
|
|
B1_minus_B2_B1_plus_B2 = (frame.loc[pos, 'amp_' + 'B1-B2_' + '012' + add] - \
|
|
frame.loc[pos, 'amp_' + 'B1-B2_' + '02' + add] + frame.loc[
|
|
pos, 'amp_' + 'B1-B2_' + '012' + add] - \
|
|
frame.loc[pos, 'amp_' + 'B1-B2_' + '01' + add] +
|
|
frame.loc[pos, 'amp_' + 'B1+B2_' + '012' + add] - \
|
|
frame.loc[pos, 'amp_' + 'B1+B2_' + '01' + add] +
|
|
frame.loc[pos, 'amp_' + 'B1+B2_' + '012' + add] - \
|
|
frame.loc[pos, 'amp_' + 'B1+B2_' + '02' + add]) / (2 * norm)
|
|
|
|
# IMPORTANT
|
|
divs = [2,1]
|
|
divs_name = ['/2','']
|
|
|
|
for d, div in enumerate(divs):
|
|
frame.loc[pos, 'amp_' + 'B1-B2&B1+B2' + divs_name[d] + '_mean(012-0102_012-0102)' + norms_name[
|
|
n] + add] = B1_minus_B2_B1_plus_B2 / div
|
|
divs = [4,1]
|
|
divs_name = ['/4','']
|
|
for d, div in enumerate(divs):
|
|
frame.loc[
|
|
pos, 'amp_' + 'B1&B2&B1-B2&B1+B2' + divs_name[d] + '_mean(012-0102_012-0102)' + norms_name[n] + add] = (
|
|
B1_minus_B2_B1_plus_B2 + B1_B2) / div
|
|
|
|
|
|
# VERY IMPORTANT
|
|
# B1&B2&B1-B2&B1+B2&Harm OHNE B1 & B2
|
|
divs = [8,1]
|
|
divs_name = ['/8','']
|
|
for d, div in enumerate(divs):
|
|
frame.loc[
|
|
pos, 'amp_' + 'B1Harm&B2Harm&B1-B2&B1+B2' + divs_name[d] + '_mean(012-0102_012-0102)' + norms_name[
|
|
n] + add] = (B1_minus_B2_B1_plus_B2 + B1_harm + B2_harm) / div
|
|
|
|
# B1&B2&B1-B2&B1+B2&Harm MIT B1 & B2
|
|
divs = [10,1]
|
|
divs_name = ['/10','']
|
|
frame = frame.copy()
|
|
for d, div in enumerate(divs):
|
|
frame.loc[pos, 'amp_' + 'B1&B1Harm&B2&B2Harm&B1-B2&B1+B2' + divs_name[d] + '_mean(012-0102_012-0102)' +
|
|
norms_name[n] + add] = (B1_minus_B2_B1_plus_B2 + B1_harm + B2_harm + B1_B2) / div
|
|
|
|
|
|
# VERY IMPORTANT (all with difference to two
|
|
# B1&B2&B1-B2&B1+B2&Harm OHNE B1 & B2
|
|
divs = [8, 1]
|
|
divs_name = ['/8', '']
|
|
for d, div in enumerate(divs):
|
|
frame.loc[pos, 'amp_' + 'B1Harm&B2Harm&B1-B2&B1+B2' + divs_name[d] + '_012-01-02' + norms_name[n] + add] = (B1_minus_B2_0102 +B1_plus_B2_0102 + B1_harm_0102 + B2_harm_0102 ) / div
|
|
|
|
# B1&B2&B1-B2&B1+B2&Harm MIT B1 & B2
|
|
divs = [10, 1]
|
|
divs_name = ['/10', '']
|
|
frame = frame.copy()
|
|
for d, div in enumerate(divs):
|
|
frame.loc[pos, 'amp_' + 'B1&B1Harm&B2&B2Harm&B1-B2&B1+B2' + divs_name[d] + '_012-01-02' +
|
|
norms_name[n] + add] = (B1_minus_B2_0102 +B1_plus_B2_0102 + B1_harm_0102 + B2_harm_0102 + B1_B2_0102) / div
|
|
|
|
# VERY IMPORTANT (all with difference to two
|
|
# B1&B2&B1-B2&B1+B2&Harm OHNE B1 & B2
|
|
divs = [8, 1]
|
|
divs_name = ['/8', '']
|
|
for d, div in enumerate(divs):
|
|
frame.loc[
|
|
pos, 'amp_' + 'B1Harm&B2Harm&B1-B2&B1+B2' + divs_name[d] + '_012-01-02+0' + norms_name[
|
|
n] + add] = (B1_minus_B2_01020 +B1_plus_B2_01020 + B1_harm_01020 + B2_harm_01020) / div
|
|
|
|
# B1&B2&B1-B2&B1+B2&Harm MIT B1 & B2
|
|
divs = [10, 1]
|
|
divs_name = ['/10', '']
|
|
frame = frame.copy()
|
|
for d, div in enumerate(divs):
|
|
frame.loc[pos, 'amp_' + 'B1&B1Harm&B2&B2Harm&B1-B2&B1+B2' + divs_name[d] + '_012-01-02+0' +
|
|
norms_name[n] + add] = (B1_minus_B2_01020 +B1_plus_B2_01020 + B1_harm_01020 + B2_harm_01020 + B1_01020+ B2_01020) / div
|
|
test = False
|
|
if test:
|
|
test_calc_amps2(frame, B1_B2)
|
|
return frame
|
|
|
|
|
|
def find_norm_amp_diff(norms, pos, frame, names, norms_name, add):
|
|
frame = frame.copy()
|
|
for nn, name in enumerate(names):
|
|
frame = frame.copy()
|
|
for n, norm in enumerate(norms):
|
|
#embed()
|
|
frame.loc[pos, 'amp_' + name + '012-01' + norms_name[n] + add] = (frame.loc[
|
|
pos, 'amp_' + name + '012' + add] - \
|
|
frame.loc[
|
|
pos, 'amp_' + name + '01' + add]) / norm
|
|
frame.loc[pos, 'amp_' + name + '012-02' + norms_name[n] + add] = (frame.loc[
|
|
pos, 'amp_' + name + '012' + add] - \
|
|
frame.loc[
|
|
pos, 'amp_' + name + '02' + add]) / norm
|
|
return frame
|
|
|
|
|
|
def find_norms(min_amps, pos, frame, add):
|
|
if 'min' in min_amps:
|
|
if 'norm' in min_amps:
|
|
norms_name = ['_norm_01B1',
|
|
'_norm_02B2',
|
|
'_norm_01B1+02B2',
|
|
'_norm_eodf']
|
|
norms = [frame.loc[pos, 'amp_' + 'B1_' + '01' + add],
|
|
frame.loc[pos, 'amp_' + 'B2_' + '02' + add],
|
|
frame.loc[pos, 'amp_' + 'B1_' + '01' + add] + frame.loc[pos, 'amp_' + 'B2_' + '02' + add],
|
|
np.mean(
|
|
frame.loc[pos, 'amp_' + 'f0_' + '01' + add] + frame.loc[pos, 'amp_' + 'f0_' + '02' + add])]
|
|
|
|
else:
|
|
norms_name = []
|
|
norms = []
|
|
else:
|
|
norms_name = ['_norm_01B1',
|
|
'_norm_02B2',
|
|
'_norm_01B1+02B2',
|
|
'_norm_eodf']
|
|
norms = [frame.loc[pos, 'amp_' + 'B1_' + '01' + add],
|
|
frame.loc[pos, 'amp_' + 'B2_' + '02' + add],
|
|
frame.loc[pos, 'amp_' + 'B1_' + '01' + add] + frame.loc[pos, 'amp_' + 'B2_' + '02' + add],
|
|
np.mean(frame.loc[pos, 'amp_' + 'f0_' + '01' + add] + frame.loc[pos, 'amp_' + 'f0_' + '02' + add])]
|
|
return norms, norms_name
|
|
|
|
|
|
def calc_var_psd_same_score(fs, p012, p01, p02, p0, pos, frame, add):
|
|
#embed()power_distance_int_sqr
|
|
#also den Wert könnten wir doch auch bei den Daten nehmen!
|
|
# das ist der wert der uns vor allem interessiert
|
|
|
|
p_val = np.sum(np.mean(np.array(p012)-np.array(p02)-np.array(p01)+np.array(p0),axis = 0))*fs[1]
|
|
frame.loc[pos, 'power_distance_int' + add] = p_val
|
|
if p_val > 0:
|
|
frame.loc[pos, 'power_distance_int_sqrt'+ add] = np.sqrt(p_val)
|
|
else:
|
|
frame.loc[pos, 'power_distance_int_sqrt' + add] = -np.sqrt(-p_val)
|
|
|
|
##################################################
|
|
# das ist die eine ROC condition
|
|
p_val = np.sum(np.mean(np.array(p012) - np.array(p02) ,axis = 0)) * fs[1]
|
|
frame.loc[pos, '012-02_power_distance_int' + add] = p_val
|
|
if p_val > 0:
|
|
frame.loc[pos, '012-02_power_distance_int_sqrt' + add] = np.sqrt(p_val)
|
|
else:
|
|
frame.loc[pos, '012-02_power_distance_int_sqrt' + add] = -np.sqrt(-p_val)
|
|
|
|
###################################################
|
|
# das ist die andere ROC condition
|
|
p_val = np.sum(np.mean(np.array(p01) - np.array(p0), axis=0)) *fs[1]
|
|
frame.loc[pos, '01-0_power_distance_int' + add] = p_val
|
|
if p_val > 0:
|
|
frame.loc[pos, '01-0_power_distance_int_sqrt' + add] = np.sqrt(p_val)
|
|
else:
|
|
frame.loc[pos, '01-0_power_distance_int_sqrt' + add] = -np.sqrt(-p_val)
|
|
|
|
#embed()
|
|
#test = False
|
|
#if test:
|
|
|
|
|
|
return frame
|
|
|
|
|
|
def find_norms_euc(min_amps, frame, pos, p012, p01, p02, p0, add):
|
|
if 'min' in min_amps:
|
|
if 'norm' in min_amps:
|
|
norms_name = ['_norm_01B1',
|
|
'_norm_02B2',
|
|
'_norm_01B1+02B2',
|
|
'_norm_eodf',
|
|
'_norm_p012', '_norm_p01', '_norm_p02', '_norm_p0', ]
|
|
norms = [frame.loc[pos, 'amp_' + 'B1_' + '01' + add],
|
|
frame.loc[pos, 'amp_' + 'B2_' + '02' + add],
|
|
frame.loc[pos, 'amp_' + 'B1_' + '01' + add] + frame.loc[pos, 'amp_' + 'B2_' + '02' + add],
|
|
np.mean(frame.loc[pos, 'amp_' + 'f0_' + '01' + add] + frame.loc[pos, 'amp_' + 'f0_' + '02' + add]),
|
|
p012, p01, p02, p0, ]
|
|
else:
|
|
norms_name = []
|
|
norms = []
|
|
else:
|
|
norms_name = ['_norm_01B1',
|
|
'_norm_02B2',
|
|
'_norm_01B1+02B2',
|
|
'_norm_eodf',
|
|
'_norm_p012', '_norm_p01', '_norm_p02', '_norm_p0', ]
|
|
norms = [frame.loc[pos, 'amp_' + 'B1_' + '01' + add],
|
|
frame.loc[pos, 'amp_' + 'B2_' + '02' + add],
|
|
frame.loc[pos, 'amp_' + 'B1_' + '01' + add] + frame.loc[pos, 'amp_' + 'B2_' + '02' + add],
|
|
np.mean(frame.loc[pos, 'amp_' + 'f0_' + '01' + add] + frame.loc[pos, 'amp_' + 'f0_' + '02' + add]),
|
|
p012, p01, p02, p0, ]
|
|
return norms_name, norms
|
|
|
|
|
|
def calc_euc_amp_norm(fs, diff_parts_names, add, norms_name, frame, pos, norms, diff_parts):
|
|
for n, norm in enumerate(norms):
|
|
for dd in range(len(diff_parts)):
|
|
diffs = []
|
|
diffs_norm = []
|
|
# p012_x = [1,4,7,10]
|
|
# p01_x = [5,23,100, 20]
|
|
|
|
for i in range(len(diff_parts[dd][0])):
|
|
for j in range(len(diff_parts[dd][0])):
|
|
# if divs_name[d] == 'area':
|
|
diffs.append(diff_parts[dd][0][i] - diff_parts[dd][1][j])
|
|
|
|
# hier kommen die zusätzlichen norm sachen
|
|
|
|
# embed()
|
|
if ('B' in norms_name[n]) | ('eod' in norms_name[n]):
|
|
diffs_norm.append(diff_parts[dd][0][i] / norms[n] - diff_parts[dd][1][j] / norms[n])
|
|
else:
|
|
diffs_norm.append(
|
|
diff_parts[dd][0][i] / np.sum(norms[n][i] * fs[1]) - diff_parts[dd][1][j] / np.sum(
|
|
norms[n][i] * fs[1]))
|
|
# try:
|
|
|
|
# except:
|
|
# embed()
|
|
# diffs.append(np.sqrt(np.nansum((p012[i]-p01[j]) ** 2, 0)))
|
|
|
|
# norm part
|
|
prev = np.mean(np.linalg.norm(diffs_norm, axis=1))
|
|
frame.loc[pos, 'euclidean_all_' + diff_parts_names[dd][0] + '-' + diff_parts_names[dd][1] + norms_name[
|
|
n] + add] = prev
|
|
|
|
if ('B' in norms_name[n]) | ('eod' in norms_name[n]):
|
|
# try:
|
|
frame.loc[pos, 'euclidean_' + diff_parts_names[dd][0] + '-' + diff_parts_names[dd][1] + norms_name[
|
|
n] + add] = np.linalg.norm(
|
|
np.mean(np.array(diff_parts[dd][0]) / norms[n] - np.array(diff_parts[dd][1]) / norms[n], axis=0))
|
|
# except:
|
|
# embed()
|
|
else:
|
|
# try:
|
|
frame.loc[pos, 'euclidean_' + diff_parts_names[dd][0] + '-' + diff_parts_names[dd][1] + norms_name[
|
|
n] + add] = np.linalg.norm(np.mean(
|
|
np.transpose(np.array(diff_parts[dd][0])) / np.sum(np.array(norms[n]) * fs[1],
|
|
axis=1) - np.transpose(
|
|
np.array(diff_parts[dd][1])) / np.sum(np.array(norms[n]) * fs[1], axis=1), axis=1))
|
|
# except:
|
|
# embed()
|
|
|
|
|
|
frame.loc[pos, 'euclidean_all_' + 'mean(012-01_012-02)' + norms_name[n] + add] = np.mean(
|
|
[frame.loc[pos, 'euclidean_all_' + '012' + '-' + '01' + norms_name[n] + add],
|
|
frame.loc[pos, 'euclidean_all_' + '012' + '-' + '02' + norms_name[n] + add]])
|
|
try:
|
|
frame.loc[pos, 'euclidean_' + 'mean(012-01_012-02)' + norms_name[n] + add] = np.mean(
|
|
[frame.loc[pos, 'euclidean_' + '012' + '-' + '01' + norms_name[n] + add],
|
|
frame.loc[pos, 'euclidean_' + '012' + '-' + '02' + norms_name[n] + add]])
|
|
except:
|
|
print('problem euclidean')
|
|
embed()
|
|
|
|
frame.loc[pos, 'euclidean_all_' + 'mean(012-01_012-02)' + '_norm_p01p02' + add] = np.mean(
|
|
[frame.loc[pos, 'euclidean_all_' + '012' + '-' + '01' + '_norm_p01' + add],
|
|
frame.loc[pos, 'euclidean_all_' + '012' + '-' + '02' + '_norm_p02' + add]])
|
|
|
|
frame.loc[pos, 'euclidean_' + 'mean(012-01_012-02)' + '_norm_p01p02' + add] = np.mean(
|
|
[frame.loc[pos, 'euclidean_' + '012' + '-' + '01' + '_norm_p01' + add],
|
|
frame.loc[pos, 'euclidean_' + '012' + '-' + '02' + '_norm_p02' + add]])
|
|
|
|
return frame
|
|
|
|
|
|
def calc_euc_amp(add, frame, diff_parts, pos, diff_parts_names):
|
|
frame = frame.copy()
|
|
|
|
for dd in range(len(diff_parts)):
|
|
diffs = []
|
|
diffs_norm = []
|
|
# p012_x = [1,4,7,10]
|
|
# p01_x = [5,23,100, 20]
|
|
|
|
for i in range(len(diff_parts[dd][0])):
|
|
for j in range(len(diff_parts[dd][0])):
|
|
# if divs_name[d] == 'area':
|
|
diffs.append(diff_parts[dd][0][i] - diff_parts[dd][1][j])
|
|
# das hier ist ohne jegliches Norm!
|
|
# np.linalg.norm(diffs)
|
|
prev = np.mean(np.linalg.norm(diffs, axis=1))
|
|
frame.loc[pos, 'euclidean_all_' + diff_parts_names[dd][0] + '-' + diff_parts_names[dd][1] + add] = prev
|
|
frame.loc[
|
|
pos, 'euclidean_' + diff_parts_names[dd][0] + '-' + diff_parts_names[dd][1] + add] = np.linalg.norm(
|
|
np.mean(np.array(diff_parts[dd][0]) - np.array(diff_parts[dd][1]), axis=0))
|
|
# ja genau hier gehts genau dadrum ich subtrahiere alles von allem!
|
|
frame.loc[pos, 'euclidean_all_' + 'mean(012-01_012-02)' + add] = np.mean(
|
|
[frame.loc[pos, 'euclidean_all_' + '012' + '-' + '01' + add],
|
|
frame.loc[pos, 'euclidean_all_' + '012' + '-' + '02' + add]])
|
|
|
|
|
|
frame.loc[pos, 'euclidean_' + 'mean(012-01_012-02)' + add] = np.mean(
|
|
[frame.loc[pos, 'euclidean_' + '012' + '-' + '01' + add],
|
|
frame.loc[pos, 'euclidean_' + '012' + '-' + '02' + add]])
|
|
# embed()
|
|
|
|
return frame
|
|
|
|
|
|
def calc_amps(fs, p0, p02, p01, p012, pos, devname, t, frame, results, test=False,
|
|
timesstamp=False, add='',min_amps = '', points = 5, sqrt = '', printing = False):
|
|
fishes = ['012', '01', '02', '0']
|
|
ps = [p012, p01, p02, p0]
|
|
test = False
|
|
#embed()
|
|
if test:
|
|
plt_calc_amps(results, p0, p01, p02, p012, frame, fs)
|
|
|
|
freq_step = np.abs(fs[1] - fs[0])
|
|
|
|
try:
|
|
fr = results.fr.loc[pos]
|
|
except:
|
|
print('fr prob')
|
|
embed()
|
|
f2 = results.f2.loc[pos]
|
|
f1 = results.f1.loc[pos]
|
|
try:
|
|
df1 = results.DeltaF1.loc[pos]
|
|
df2 = results.DeltaF2.loc[pos]
|
|
eod_fr = results.EODf.loc[pos]
|
|
except:
|
|
eod_fr = results.f0.loc[pos]
|
|
df1 = results.df1.loc[pos]
|
|
df2 = results.df2.loc[pos]
|
|
try:
|
|
beat1 = create_beat_corr(np.array([np.abs(df1)]), np.array([eod_fr]))
|
|
except:
|
|
print('beat 1 problem')
|
|
embed()
|
|
beat2 = create_beat_corr(np.array([np.abs(df2)]), np.array([eod_fr]))
|
|
|
|
names = peaks_of_interest(df1, df2, beat1, beat2, fr, f1, f2, eod_fr, min_amps = min_amps)
|
|
for name in names:
|
|
frame.loc[pos, name[0:-1]] = names[name]
|
|
#embed()
|
|
|
|
names[''] = ''
|
|
names['max_'] = ''
|
|
names['max_harm_'] = ''
|
|
|
|
# drei sachen
|
|
# 1) erstmal nur die Veränderungen von B1 und B2
|
|
# 2) dann die Veränderung von B1,B2,
|
|
# 3) dann veränderung von B1+B2 und B1-B2 und dann B1-B2, B1+B2
|
|
# 4) B1, B2, B1-B2, B1+B2
|
|
# 5) Euclidische Distanz
|
|
# 6) Und noch Normierung (mit B1, B2, B1+B2)
|
|
|
|
##
|
|
# VARIABLEN: 4: NORM, MEAN, VON WAS SIE DIFFERENZ, 1-6
|
|
|
|
t1 = time.time()
|
|
# Nur einzelfrequenzen und deren richtigen Diffs
|
|
if np.isnan(frame.loc[pos, 'f0']):
|
|
print('isnan thing2')
|
|
embed()
|
|
frame = calc_pure_amps_diffs(frame,pos, names, fishes, freq_step, ps, fs, devname, t, add, sqrt = sqrt, points = points)
|
|
time_first = time.time() - t1
|
|
#embed()
|
|
# 1) erstmal nur die Veränderungen von einzelnen Frequenzen B1 und B2, B1+B2 und B1-B2
|
|
# hier habe ich die drei Normierungen, wir normieren immer auf B1, B2 oder beides
|
|
# weil diese von der Beat Frequenz abhängen können normieren wir auch auf das EODf
|
|
# das charachterisiert das Antwortverhalten der P-unit
|
|
|
|
# auch diese normierungen die brauchen wir denke ich nicht
|
|
# wenn alle haben will schriebe ich nix
|
|
# wenn ich das absolute minimum haben will sollte min drin sein
|
|
# wenn ich ein bisschen mehr haben will dann aber auch norm
|
|
norms, norms_name = find_norms(min_amps, pos, frame, add)
|
|
|
|
|
|
# für alle Werte auch nochmal die normierten Peaks
|
|
# bei der reduzierten Version lassen wir das mit den norms, braucht je kein Mensch
|
|
if norms:
|
|
t1 = time.time()
|
|
frame = find_norm_amp_diff(norms, pos, frame, names, norms_name, add)
|
|
time_second = time.time() - t1
|
|
|
|
# 2) dann die Veränderung von B1 & B2, B1-B2 & B1+B2,
|
|
if norms:
|
|
t1 = time.time()
|
|
frame = find_B1B2_norm_amp_diffs(frame, norms_name, norms, pos, add)
|
|
|
|
|
|
time_third = time.time() - t1
|
|
|
|
|
|
|
|
###############
|
|
# DAS IST EIN WICHIGER SCORE
|
|
# das gleiche wie die varianz
|
|
# zweiter Score Dezember 2022
|
|
if (len(p02) > 0) & (len(p01) > 0):#todo für verschiedene Trials
|
|
frame = calc_var_psd_same_score(fs, p012, p01, p02, p0, pos, frame, add)
|
|
#embed()
|
|
##############
|
|
# die restlichen (für talk in lissbo)
|
|
# 5) Euclidische Distanz
|
|
|
|
# np.linalg.norm(np.array(p012)-np.array(p01))
|
|
# die zwei sind das gleiche, also ob ich die direkt subtrahiere
|
|
# alle gegen alle vergleich
|
|
# np.linalg.norm(np.array(p012) - np.array(p01), axis=0))
|
|
# Trial für Trial Vergleich
|
|
diffs = []
|
|
|
|
divs = [1, 2]
|
|
divs_name = ['', 'area']
|
|
#embed()
|
|
t1 = time.time()
|
|
# 1) verschiedene Normierungen, 2) all vs not 3) was gegen was
|
|
|
|
|
|
# ich glaube diese normierung über das spectrum machen wir nur damit das über die Zellen vergleich bar bleibt?
|
|
norms_name, norms = find_norms_euc(min_amps, frame, pos, p012, p01, p02, p0, add)
|
|
# fishes = ['norm_B2']
|
|
# norms = [frame.loc[pos, 'amp_' + 'B2_' + '02' + add]]
|
|
diff_parts_names = [('012', '02'), ('012', '01')]
|
|
diff_parts = [(p012, p02), (p012, p01)]
|
|
if len(p02) > 0:
|
|
frame = calc_euc_amp(add, frame, diff_parts, pos, diff_parts_names)
|
|
#embed()
|
|
if norms:
|
|
frame = calc_euc_amp_norm(fs, diff_parts_names, add, norms_name, frame, pos, norms, diff_parts)
|
|
|
|
|
|
# embed()'_norm_p01', '_norm_p02'
|
|
time_forht = time.time() - t1
|
|
|
|
if printing:
|
|
print(time_first)
|
|
print(time_second)
|
|
print(time_third)
|
|
print(time_forht)
|
|
# embed()
|
|
# np.sqrt(np.nansum((np.mean(np.array(p012) - np.array(p01), axis=0)) ** 2, 0))
|
|
# Mean zu Mean Vergleich
|
|
# np.linalg.norm(np.mean(np.array(p012),axis = 0) - np.mean(np.array(p01), axis=0))
|
|
# ps = [p012, p01, p02, p0]
|
|
# results_diff.loc[position_diff, names[fu] + '012-02_dr'] = np.mean(results[names[fu] + '012'] - \
|
|
# results[names[fu] + '02'])
|
|
# ist in der Funktion oben!
|
|
# hier nehmen wir die Wurzel damit die Werte am Ende eben keine varianzen sondern std sind also in Hz!
|
|
frame = sqrt_values(names, pos, frame, add)#.replace('_mean','')
|
|
#embed()
|
|
test = False
|
|
if test:
|
|
plt.plot(fs,p02[0])
|
|
plt.scatter(frame['f0'],frame['amp_f0_02_original'])
|
|
plt.scatter(frame['f1'],frame['amp_f1_02_original'])
|
|
plt.scatter(frame['f2'],frame['amp_f2_02_original'])
|
|
plt.show()
|
|
|
|
#embed()
|
|
#names = 'amp_fr_012-02-01_mean'
|
|
# hier nehme ich also die Sachen mit den AMPS und den Euclidischen Distanzen
|
|
# und auch die Fläche und nehme nochmal die Wurzel draus!
|
|
# wenn amp and euc drin ist dann nehme ich hier nochmal die Wurzel!
|
|
#embed()
|
|
#start_pos = np.where(np.array(keys) == 'amp_'+keys_names[0]+fishes[0]+add)
|
|
# das waren alles varianzen und jetzt wollen wir daraus std machen!
|
|
|
|
|
|
if timesstamp:
|
|
print('diff direct' + str(time.time() - t3))
|
|
if test:
|
|
embed()
|
|
return frame
|
|
|
|
|
|
def sqrt_values(names, pos, frame, add = ''):
|
|
keys_names = [k for k in names]
|
|
keys = [k for k in frame]
|
|
for k in keys:
|
|
if (('amp' in k) | ('euclidean' in k)) & (add in k):
|
|
|
|
if frame.loc[pos, k] < 0:
|
|
# für den Fall das das negativ ist machen wir das erst wieder positiv und dann wieder negativ
|
|
# das gilt vor allem für die Differenz Werte
|
|
frame.loc[pos, k] = -np.sqrt(-frame.loc[pos, k])
|
|
else:
|
|
frame.loc[pos, k] = np.sqrt(frame.loc[pos, k])
|
|
|
|
|
|
return frame
|
|
|
|
|
|
def test_calc_amps2(frame, B1_B2):
|
|
diff_012_01 = ['amp_B1_012-01_norm_01B1+02B2_mean',
|
|
'amp_B2_012-02_norm_01B1+02B2_mean',
|
|
|
|
'amp_B1_harms__012-01_norm_01B1+02B2_mean'
|
|
'amp_B2_harms__012-02_norm_01B1+02B2_mean'
|
|
'amp_B1-B2_mean(012-0102)_norm_01B1+02B2_mean',
|
|
'amp_B1+B2_mean(012-0102)_norm_01B1+02B2_mean',
|
|
'amp_B1Harm&B2Harm&B1-B2&B1+B2_mean(012-0102_012-0102)_norm_01B1+02B2_mean',
|
|
'amp_B1&B1Harm&B2&B2Harm&B1-B2&B1+B2_mean(012-0102_012-0102)_norm_01B1+02B2_mean'] # B1+B2/10'amp_B1&B2_012-01_012-02_norm_01B1+02B2_mean',
|
|
# 'amp_B1Harm&B2Harm&B1-B2&B1+B2_mean(012-0102_012-0102)_norm_01B1+02B2_mean',
|
|
# 'amp_B1&B1Harm&B2&B2Harm&B1-B2&B1+B2_mean(012-0102_012-0102)_norm_01B1+02B2_mean']
|
|
sum = 0
|
|
for diff in diff_012_01:
|
|
sum += frame.loc[0, diff]
|
|
B1_B2
|
|
frame.loc[0, 'amp_B1_012-01_norm_01B1+02B2_mean'] + frame.loc[0, 'amp_B2_012-02_norm_01B1+02B2_mean']
|
|
|
|
frame.loc[0, 'amp_B1&B1Harm&B2&B2Harm&B1-B2&B1+B2_mean(012-0102_012-0102)_norm_01B1+02B2_mean']
|
|
|
|
|
|
def calc_ps(nfft, array012, array01, array02, array0, sampling_rate=40000, test=False):
|
|
t3 = time.time()
|
|
p012 = [[]] * len(array012)
|
|
p01 = [[]] * len(array01)
|
|
p02 = [[]] * len(array02)
|
|
p0 = [[]] * len(array0)
|
|
for i in range(len(array012)):
|
|
p012[i], f = ml.psd(array012[i] - np.mean(array012[i]), Fs=sampling_rate,
|
|
NFFT=nfft, noverlap=nfft // 2)
|
|
for i in range(len(array01)):
|
|
p01[i], f = ml.psd(array01[i] - np.mean(array01[i]), Fs=sampling_rate, NFFT=nfft,
|
|
noverlap=nfft // 2)
|
|
for i in range(len(array02)):
|
|
p02[i], f = ml.psd(array02[i] - np.mean(array02[i]), Fs=sampling_rate, NFFT=nfft,
|
|
noverlap=nfft // 2)
|
|
for i in range(len(array0)):
|
|
p0[i], fs = ml.psd(array0[i] - np.mean(array0[i]), Fs=sampling_rate, NFFT=nfft,
|
|
noverlap=nfft // 2)
|
|
return p0, p02, p01, p012, fs
|
|
|
|
|
|
def calculate_the_difference(position_diff,results_diff,name_saved, title,contdition12,control_01,control_02,base_0, base_1= [], base_2 = []):
|
|
results_diff.loc[position_diff, 'diff' + '_' + name_saved + '_' + title] = np.mean(
|
|
contdition12 - control_01 - control_02 + base_0)
|
|
|
|
# das ist die detektion gegenüber der 1er Welle
|
|
try:
|
|
results_diff.loc[position_diff, '012-01' + '_' + name_saved + '_' + title] = np.mean(
|
|
contdition12 - control_01)
|
|
except:
|
|
print('results diff in uilts_func')
|
|
embed()
|
|
|
|
# das ist diedetektion gegenüber der 2er Welle
|
|
results_diff.loc[position_diff, '012-02' + '_' + name_saved + '_' + title] = np.mean(
|
|
contdition12 - control_02)
|
|
|
|
# das ist das was experimentell nicht möglich ist
|
|
if (len(base_1) > 0) and (len(base_2) > 0):
|
|
results_diff.loc[position_diff, '012-0-1-2' + '_' + name_saved + '_' + title] = np.mean(
|
|
contdition12 - base_0 - base_1 - base_2)
|
|
if name_saved == 'var':
|
|
# embed()
|
|
#############################
|
|
# das ist der SCORE 1 FÜR DIE DIFFERENZEN
|
|
# das ist nochmal var squared
|
|
# embed()
|
|
# results_diff.loc[position_diff, 'diff' + '_' + 'var_sqrt' + '_' + titles_all[names[0]][t]] = np.sqrt(results_diff.loc[position_diff, 'diff' + '_' + 'var' + '_' + titles_all[names[0]][t]])
|
|
var_val = results_diff.loc[position_diff, 'diff' + '_' + name_saved + '_' + title]#titles_all[names[0]][t]
|
|
if var_val > 0:
|
|
# wenns positiv ist behalten wir das
|
|
results_diff.loc[position_diff, 'diff' + '_' + 'var_sqrt' + '_' + title] = np.sqrt(
|
|
results_diff.loc[position_diff, 'diff' + '_' + name_saved + '_' + title])
|
|
else:
|
|
# embed()
|
|
results_diff.loc[position_diff, 'diff' + '_' + 'var_sqrt' + '_' + title] = -np.sqrt(
|
|
-results_diff.loc[position_diff, 'diff' + '_' + name_saved + '_' + title])
|
|
return results_diff
|
|
|
|
|
|
def equal_to_temporal_mean(ffts_all):
|
|
if np.shape(ffts_all) == 3:
|
|
fft_val = np.abs(np.mean(ffts_all, axis=0)[3]) ** 2 - np.abs(np.mean(ffts_all, axis=0)[2]) ** 2 - np.abs(
|
|
np.mean(ffts_all, axis=0)[1]) ** 2 + np.abs(np.mean(ffts_all, axis=0)[0]) ** 2
|
|
else:
|
|
fft_val = np.abs(np.mean(ffts_all[cl_3names.c012], axis=0)) ** 2 - np.abs(np.mean(ffts_all[cl_3names.c01], axis=0)) ** 2 - np.abs(
|
|
np.mean(ffts_all[cl_3names.c02], axis=0)) ** 2 + np.abs(np.mean(ffts_all[cl_3names.c0], axis=0)) ** 2
|
|
#else:
|
|
return fft_val
|
|
|
|
|
|
class cl_3names:
|
|
"""A simple example class"""
|
|
c012 = '012'
|
|
c02 = '02'
|
|
c01 = '01'
|
|
c0 = '0'
|
|
|
|
|
|
def calc_FFT3(arrays, deltat, fft, names):
|
|
for a, array in enumerate(arrays):
|
|
#if len(np.shape(array)>
|
|
try:
|
|
fft[names[a]] = np.fft.fft(array - np.mean(array), norm='forward') # /nfft # nas sollte forward sein
|
|
except:
|
|
fft[names[a]] = np.fft.fft(array - np.mean(array)) * deltat
|
|
return fft
|
|
|
|
def data_tuning(show=True):
|
|
|
|
cells = []#['2022-01-28-ah-invivo-1'] # , '2022-01-28-af-invivo-1', '2022-01-28-ab-invivo-1',
|
|
c2 = 10
|
|
eodftype = '_psdEOD_'
|
|
nfft = int(2 ** 16)
|
|
indices = ['_allindices_']
|
|
chirps = [
|
|
''] # '_ChirpsDelete3_',,'_ChirpsDelete3_'','','',''#'_ChirpsDelete3_'#''#'_ChirpsDelete3_'#'#'_ChirpsDelete2_'#''#'_ChirpsDelete_'#''#'_ChirpsDelete_'#''#'_ChirpsDelete_'#''#'_ChirpsCache_'
|
|
devs_savename = ['original', '05'] # ['05']#####################
|
|
|
|
#if len(cells) < 1:
|
|
# data_dir, cells = load_cells_three(end, data_dir=data_dir, datasets=datasets)
|
|
# cells, p_units_cells, pyramidals = restrict_cell_type(cells, 'p-units')
|
|
|
|
cells = np.sort(cells)#[::-1]
|
|
cells = ['2021-08-03-ac-invivo-1']
|
|
|
|
|
|
#if not os.path.exists(name):
|
|
#save_name_all = load_folder_name('threefish')+'/calc_auc_three_AllTrialsIndexEodLocSynch_Min0.25sExcluded__multsorted2__psdEOD__minindices___nfft_65536three_AUCI.pkl'
|
|
save_name_alls = ['calc_auc_three-_AllTrialsIndex_Min0.25sExcluded__multsorted2__psdEOD__allindices___nfft_65536three_AUCI_sqrt_.pkl','calc_auc_three-_AllTrialsIndexEodLocSynch_Min0.25sExcluded__multsorted2__psdEOD__minindices___nfft_65536three_AUCI.pkl']
|
|
dir_version, sizes = find_all_threewave_versions()
|
|
save_name_alls = [
|
|
'calc_auc_three-_AllTrialsIndexEodLocSynch_Min0.25sExcluded__multsorted2__psdEOD__minindices___nfft_65536three_AUCI.pkl']
|
|
|
|
save_name_alls = ['calc_auc_three_AllTrialsIndexEodLocSynch_Min0.25sExcluded__multsorted2__psdEOD__minindices__2021-08-03-ac-invivo-1_nfft_32768three_AUCI_sqrt__points1.pkl']
|
|
save_name_alls = ['calc_auc_three_AllTrialsIndexEodLocSynch_Min0.25sExcluded__multsorted2__psdEOD__minindices___nfft_32768three_AUCI_sqrt__points1.pkl']
|
|
|
|
#save_name_alls.extend(dir_version)
|
|
#embed()
|
|
plot_style()
|
|
default_figsize(column=2, length=2) # ts=12, ls=12, fs=12
|
|
for save_name_all0 in save_name_alls:
|
|
# embed()
|
|
for c, cell in enumerate(cells):
|
|
#print(save_name_all0)
|
|
save_name_all = load_folder_name('threefish') + '/' + save_name_all0
|
|
name0 = save_name_all.split('_nfft')[0] + cell + '_nfft' + save_name_all.split('_nfft')[1]
|
|
if '_dev' in save_name_all:
|
|
name1 = save_name_all.split('_dev')[0] + cell + '_dev' + save_name_all.split('_dev')[1]
|
|
else:
|
|
name1 = 'xyo'
|
|
|
|
if os.path.exists(name0):
|
|
print(name0 +'exists')
|
|
name = name0
|
|
elif os.path.exists(name1):
|
|
print(name1 +'exists')
|
|
name = name0
|
|
else:
|
|
print('PROBLEM '+str(save_name_all))
|
|
name = name0
|
|
#embed()
|
|
if os.path.exists(name):
|
|
#embed()
|
|
frame_orig = pd.read_pickle(name)
|
|
contrast_small = 'c2'
|
|
contrast_big = 'c1'
|
|
contrasts = [10]#frame_orig.c2.unique()
|
|
for c, contrast2 in enumerate(contrasts):
|
|
|
|
contrasts1 = [10]#frame_orig.c1.unique()
|
|
for contrast1 in contrasts1:
|
|
#embed()
|
|
if len(frame_orig) > 0:
|
|
#embed()
|
|
frame = frame_orig[(frame_orig['cell'] == cell) & (
|
|
frame_orig['c2'] == contrast2) & (
|
|
frame_orig['c1'] == contrast1) & (frame_orig['dev'] == '05')] #
|
|
|
|
|
|
print(np.mean(np.mean(frame.EODf.unique())))
|
|
colors = ['green', 'blue', 'red', 'orange']
|
|
scores = ['amp_B1_01','amp_B1_012','amp_B2_02','amp_B2_012',]
|
|
labels, alpha, color01, color01_012, color02, color02_012, colors, colors_array, linestyles, scores,linewidths = colors_susept(nr = 2)
|
|
|
|
# if len(np.unique(frame.f1)) > len(np.unique(frame.f2)):
|
|
# embed()
|
|
######################################
|
|
# also hier die Rows bestimmen
|
|
|
|
gridspacing = []#0.02
|
|
|
|
grid0 = gridspec.GridSpec(1, 1, bottom=0.25, top=0.75, left=0.09,
|
|
right=0.98,
|
|
wspace=0.04) #
|
|
|
|
axs = []
|
|
#col, row = find_row_col(pivot, col=4)
|
|
p_nrs = [7, 4, 2] # np.arange(0, len(pivot), 1)#
|
|
|
|
grid1 = gridspec.GridSpecFromSubplotSpec(1, len(p_nrs), wspace=0.35, hspace=0.35,
|
|
subplot_spec=grid0[0])
|
|
|
|
dfs = ['DF1', 'DF2']
|
|
pivot, _, indexes, resorted, orientation, cut_type = get_data_pivot_three(frame, scores[0],
|
|
orientation=[],
|
|
gridspacing=gridspacing,
|
|
dfs=dfs,
|
|
matrix_sorted='grid_sorted')
|
|
#if s == 0:
|
|
if '2' in pivot.columns.name:
|
|
scores = [scores[2], scores[3], scores[0], scores[1]]
|
|
|
|
for s, score in enumerate(scores):
|
|
|
|
pivot, _, indexes, resorted, orientation, cut_type = get_data_pivot_three(frame, score,orientation = [],gridspacing = gridspacing,dfs = dfs,matrix_sorted = 'grid_sorted')
|
|
#embed()
|
|
#frame.f0
|
|
print('min f0 '+str(np.min(frame.f0)))
|
|
print('min f1 '+str(np.min(frame.f1)))
|
|
print('max f1 '+str(np.max(frame.f1)))
|
|
print('min f2 ' + str(np.min(frame.f2)))
|
|
print('max f2 ' + str(np.max(frame.f2)))
|
|
#i#f s == 0:
|
|
# if '2' in pivot.columns.name:
|
|
# colors = [colors[2], colors[3], colors[0],colors[1]]
|
|
# labels = [labels[2], labels[3], labels[0], labels[1]]
|
|
|
|
# colors = [color02, color02_012,color01, color01_012,]
|
|
if len(pivot)> 0:
|
|
if s == 0:
|
|
row, col = find_row_col(pivot)
|
|
|
|
#plt.suptitle(save_name_all0+'\n'+cell + '_c1_' + str(contrast1) + '_c2_' + str(contrast2))
|
|
|
|
|
|
#grid1 = gridspec.GridSpecFromSubplotSpec(1, len(pivot), wspace=0.35, hspace=0.35, subplot_spec=grid[s])
|
|
# for mults [4,2,1,]
|
|
|
|
#embed()9,
|
|
for pp, p in enumerate(p_nrs):#range(len(pivot)):
|
|
ax = plt.subplot(grid1[pp])
|
|
if 'm' in dfs[0]:
|
|
try:
|
|
ax.set_title(pivot.index.name+' '+str(pivot.index[p]))
|
|
except:
|
|
print('ax something')
|
|
embed()
|
|
else:
|
|
if s == 0:
|
|
ax.text(1, 1.05,'$\Delta f_{' + stable_val() + '}=%s$' % (int(pivot.index[p])) + '\,Hz', ha ='right', transform=ax.transAxes)
|
|
|
|
ax.plot(pivot.columns, pivot.iloc[p], color = colors[s], label = labels[s], linestyle = linestyles[s], linewidth = linewidths[s])
|
|
ax.set_xlabel(xlabel_vary())#pivot.columns.name
|
|
if pp != 0:
|
|
remove_yticks(ax)
|
|
else:
|
|
ax.set_ylabel(representation_ylabel())
|
|
axs.append(ax)
|
|
|
|
join_y(axs)
|
|
fig = plt.gcf()
|
|
#embed()
|
|
fig.tag(axs[0:3], xoffs = -3, yoffs = 1)
|
|
if len(pivot)> 0:
|
|
axs[0].legend(loc = (0,1.2), ncol = 2)
|
|
|
|
individual_tag = save_name_all0+'_'+cell + '_c1_' + str(contrast1) + '_c2_' + str(
|
|
contrast2)+'_gridpsacing_'+str(gridspacing)
|
|
|
|
# save_all(individual_tag, show, counter_contrast=0, savename='')
|
|
#embed()
|
|
save_visualization(individual_tag, show = show)
|
|
|
|
|
|
def xlabel_vary():
|
|
return '$\Delta f_{' + vary_val() + '}$\,[Hz]'
|
|
|
|
|
|
def vary_contrasts_big_with_tuning3_several0(stimulus_length=25, freqs=[(39.5, -135.5)],
|
|
cells_here='2011-10-25-ad-invivo-1'):
|
|
#embed()
|
|
#default_settings() # ts=13, ls=13, fs=13, lw = 0.7
|
|
plot_style()
|
|
|
|
# test_here()
|
|
model_cells = pd.read_csv(load_folder_name('calc_model_core') + "/models_big_fit_d_right.csv")
|
|
# if len(cells) < 1:
|
|
cells = ['2011-10-25-ad-invivo-1']
|
|
if len(cells_here) < 1:
|
|
cells_here = np.array(model_cells.cell)
|
|
|
|
a_fr = 1
|
|
a = 0
|
|
trials_nrs = [1]
|
|
|
|
datapoints = 1000
|
|
|
|
results_diff = pd.DataFrame()
|
|
position_diff = 0
|
|
plot_style()
|
|
default_figsize(column=2, length=5.35) #5.5)#7.5 5.75
|
|
for trials_nr in trials_nrs: # +[trials_nrs[-1]]
|
|
|
|
# sachen die ich variieren will
|
|
###########################################
|
|
single_wave = '_SeveralWave_' # , '_SingleWave_']
|
|
|
|
auci_wo = []
|
|
auci_w = []
|
|
|
|
nfft = 32768
|
|
scatter_extra = False
|
|
for cell_here in cells_here:
|
|
# embed()
|
|
full_names = [
|
|
'calc_model_amp_freqs-F1_750-975-25_F2_500-775-25_C2_0.1_C1Len_25_FirstC1_0.0001_LastC1_1.0_StimLen_' + str(
|
|
stimulus_length) + '_nfft_' + str(nfft) + '_trialsnr_1_absolut_power_1_minamps__dev_05temporal']
|
|
full_names = [
|
|
'calc_model_amp_freqs-F1_750-775-25_F2_500-525-25_C2_0.1_C1Len_25_FirstC1_0.0001_LastC1_2.0_mult__start_0.0001_end_2_StimLen_5_nfft_32768_trialsnr_1__power_1_minamps__dev_original_05AUCI_point_1temporal']
|
|
full_names = [
|
|
'calc_model_amp_freqs-F1_750-975-25_F2_500-775-25_C2_0.1_C1Len_50_FirstC1_0.0001_LastC1_2.0_mult__start_0.0001_end_2_StimLen_5_nfft_32768_trialsnr_1__power_1_minamps__dev_original_05AUCI_not_log__point_1temporal']
|
|
full_names = [
|
|
'calc_model_amp_freqs-F1_750-975-25_F2_500-775-25_C2_0.1_C1Len_50_FirstC1_0.0001_LastC1_2.0_mult__start_0.0001_end_2_StimLen_5_nfft_32768_trialsnr_1__power_1_minamps__dev_original_05AUCI_point_1temporal']
|
|
full_names = [
|
|
'calc_model_amp_freqs-F1_750-975-75_F2_500-725-75_C2_0.1_C1Len_50_FirstC1_0.0001_LastC1_2.0_mult__start_0.0001_end_2_StimLen_5_nfft_32768_trialsnr_1__power_1_minamps__dev_original_05AUCI_point_1temporal']
|
|
full_names = [
|
|
'calc_model_amp_freqs-F1_750-975-75_F2_500-725-75_C2_0.1_C1Len_50_FirstC1_0.0001_LastC1_1.0_mult__start_0.0001_end_1_StimLen_25_nfft_32768_trialsnr_1__power_1_minamps__dev_original_05AUCI_point_1temporal']
|
|
|
|
# full_names = ['calc_model_amp_freqs-F1_0.5-1.45-0.05_F2_0.5-1.45-0.05_C2_0.1_C1Len_50_FirstC1_0.0001_LastC1_1.0_mult__start_0.0001_end_1_StimLen_25_nfft_32768_trialsnr_1__power_1_minamps__dev_original_05AUCI_point_1temporal']
|
|
# full_names = ['calc_model_amp_freqs-F1_250-1325-25_F2_720_C2_0.1_C1Len_50_FirstC1_0.0001_LastC1_2.0_mult__start_0.0001_end_2_StimLen_5_nfft_32768_trialsnr_1__power_1_minamps__dev_original_05AUCI_point_1temporal']
|
|
# full_names = ['calc_model_amp_freqs-F1_750-975-25_F2_500-775-25_C2_0.1_C1Len_25_FirstC1_0.0001_LastC1_1.0_StimLen_25_nfft_32768_trialsnr_1_absolut_power_1_minamps__dev_originalAUCItemporal']
|
|
# 'calc_model_amp_freqs-F1_750-975-25_F2_500-775-25_C2Len_25_FirstC2_0.0001_LastC2_1.0_C1_0.1_StimLen_2_nfft_32768_trialsnr_1_absolut_power_1_minamps__dev_05temporal']
|
|
c_grouped = ['c1'] # , 'c2']
|
|
# adds = [-150, -50, -10, 10, 50, 150]
|
|
# fig, ax = plt.subplots(4, len(adds), constrained_layout=True, figsize=(12, 5.5))
|
|
# for ff, full_name in enumerate(full_names):
|
|
frame = pd.read_csv(load_folder_name('calc_cocktailparty') + '/' + full_names[0] + '.csv')
|
|
frame_cell_orig = frame[(frame.cell == cell_here)]
|
|
|
|
df_desired = 40
|
|
if len(frame_cell_orig) > 0:
|
|
try:
|
|
males = [frame_cell_orig.iloc[
|
|
np.argmin(np.abs(frame_cell_orig.df1 - df_desired))].f1] # DF=39.5[775, 825]
|
|
except:
|
|
print('min thing')
|
|
embed()
|
|
# (135.5, 625.0), (110.5, 650.0), (85.5, 675.0),(60.5, 700.0), (35.5, 725.0), (10.5, 750.0),(151.07000000000005, 675.0)
|
|
# frame_cell_orig[['df2', 'f2']]
|
|
new_f2_tuple = frame_cell_orig[['df2', 'f2']].apply(tuple, 1).unique()
|
|
dfs = [tup[0] for tup in new_f2_tuple]
|
|
sorted = np.argsort(np.abs(dfs))
|
|
new_f2_tuple = new_f2_tuple[sorted]
|
|
dfs = np.array(dfs)[sorted]
|
|
dfs_new = dfs[(dfs > 0) & (dfs < df_desired + 100)]
|
|
f2s = [tup[1] for tup in new_f2_tuple]
|
|
|
|
c_nrs = [0.0002, 0.05, 0.5]
|
|
# fig = plt.figure(figsize=(12, 5.5))
|
|
grid0 = gridspec.GridSpec(1, len(freqs), bottom=0.095, top=0.95, left=0.1,
|
|
right=0.975,
|
|
wspace=0.15) #top=0.895
|
|
|
|
###################################################
|
|
# squares
|
|
# axes[cs_nr, 0].text(0, 1.2, str(cs_type), transform=ax[cs_nr, 0].transAxes, fontsize=13)
|
|
squares = False
|
|
if squares:
|
|
full_names_square = [
|
|
'calc_model_amp_freqs-F1_750-975-25_F2_500-775-25_C2_0.1_C1Len_25_FirstC1_0.0001_LastC1_1.0_StimLen_2_nfft_32768_trialsnr_1_absolut_power_1_minamps__dev_05temporal', ]
|
|
frame_square = pd.read_csv(
|
|
load_folder_name('calc_cocktailparty') + '/' + full_names_square[0] + '.csv')
|
|
frame_cell_square = frame_square[(frame_square.cell == cell_here)]
|
|
|
|
axes = []
|
|
axes.append(plt.subplot(grid_s[0]))
|
|
axes.append(plt.subplot(grid_s[1]))
|
|
axes.append(plt.subplot(grid_s[2]))
|
|
frame_cell_square = single_frame_processing(c_grouped, cell_here, frame_cell_square)
|
|
lim, matrix, ss, ims = plt_matrix_saturation_loss(axes, frame_cell_square, add='_05')
|
|
plt_cross(matrix, axes[-1])
|
|
|
|
#################################################################
|
|
|
|
# calc_model_amp_freqs-F1_750-975-25_F2_500-775-25_C2_0.1_C1Len_20_FirstC1_0.0001_LastC1_1.0_StimLen_25_nfft_32768_trialsnr_1_absolut_power_1temporal.csv
|
|
# devs_extra = ['stim','stim_rec','stim_am','original','05']#['original','05']
|
|
show = True
|
|
# da implementiere ich das jetzt für eine Zelle
|
|
# wo wir den einezlnen Punkt und Kontraste variieren
|
|
full_names = [
|
|
'calc_model_amp_freqs-F1_750-975-25_F2_500-775-25_C2_0.1_C1Len_25_FirstC1_0.0001_LastC1_1.0_StimLen_2_nfft_32768_trialsnr_1_absolut_power_1_minamps__dev_05temporal', ]
|
|
|
|
f_counter = 0
|
|
ax_upper = []
|
|
|
|
frame_cell_orig, df1s, df2s, f1s, f2s = find_dfs(frame_cell_orig)
|
|
|
|
eodf = frame_cell_orig.f0.unique()[0]
|
|
# freqs = [(825,650),(825,675),(825,700)]-
|
|
# embed()
|
|
f = -1
|
|
axts_all = []
|
|
axps_all = []
|
|
ax_us = []
|
|
|
|
####################################################
|
|
# hier kommt die amplituden tuning curve
|
|
#
|
|
frame_cell = single_frame_processing(c_grouped, cell_here, frame_cell_orig)
|
|
c_heres = [0.1, 0.25] # 0.03,
|
|
c_colors = ['dimgrey','darkgrey']#,'black', ],'silver'
|
|
freq1s = np.unique(frame_cell_orig.df1)
|
|
freq2s = np.unique(frame_cell_orig.df2)
|
|
c_here = frame_cell['c1'][np.argmin(np.abs(frame_cell['c1'] - 0.03))] # frame_cell.iloc[
|
|
# np.argmin(frame_cell['amp_B1_01_mean_original'] - frame['amp_B1_012_mean_original'])].c1
|
|
# embed()
|
|
# freqs_here =[(freq1s_here[0],freq2s_here[0])]
|
|
f_counter = 0
|
|
ax_uss = []
|
|
letters_all = [['$\mathrm{A_{ii}}$','$\mathrm{A_{iii}}$'],['$\mathrm{B_{ii}}$','$\mathrm{B_{iii}}$']]
|
|
letters_all2 = ['$\mathrm{A_{i}}$', '$\mathrm{B_{i}}$']
|
|
|
|
for freq1, freq2 in freqs:
|
|
grid00 = gridspec.GridSpecFromSubplotSpec(2, 1,
|
|
wspace=0.15, hspace=0.53, subplot_spec=grid0[f_counter],
|
|
height_ratios=[1, 2.35]) #hspace=0.35 1, 2.55
|
|
grid_u = gridspec.GridSpecFromSubplotSpec(1, 1,
|
|
hspace=0.7,
|
|
wspace=0.25,
|
|
subplot_spec=grid00[
|
|
0]) # hspace=0.4,wspace=0.2,len(chirps)
|
|
grid_r = gridspec.GridSpecFromSubplotSpec(1, 2,
|
|
hspace=0.3,
|
|
wspace=0.1,
|
|
subplot_spec=grid00[1])
|
|
################################################
|
|
# grid_s = gridspec.GridSpecFromSubplotSpec(1, 3,
|
|
# hspace=0.7,
|
|
# wspace=0.45,
|
|
# subplot_spec=grid00[-1])
|
|
|
|
freq1_here = freq1s[np.argmin(np.abs(freq1s - freq1))]
|
|
|
|
freq2_here = freq2s[np.argmin(np.abs(freq2s - freq2))]
|
|
|
|
f += 1
|
|
print(cell_here + ' F1' + str(freq1_here) + ' F2 ' + str(freq2_here))
|
|
ax_u1_upper = plt.subplot(grid_u[0])
|
|
c_dist_recalc = dist_recalc_phaselockingchapter()
|
|
ax_upper = plt_single_trace(ax_upper, ax_u1_upper, frame, frame_cell_orig, freq1_here, freq2_here,
|
|
sum=False, nr = 2, c_dist_recalc=c_dist_recalc,
|
|
linestyles=['-', '--', '-', '--', '-'])
|
|
|
|
ax_u1_upper.set_yticks_delta(100)#set_xticks_delta
|
|
ax_u1_upper.set_xlim(0,35)
|
|
c_nrs_here_cm = c_dist_recalc_func(frame_cell, c_nrs=c_heres, cell=cell_here,
|
|
c_dist_recalc=c_dist_recalc)
|
|
lw = lw_tuning()
|
|
height = 355#0
|
|
letter_plus = 30
|
|
if not c_dist_recalc:
|
|
c_nrs_here_cm = np.array(c_nrs_here_cm) * 100
|
|
try:
|
|
ax_u1_upper.scatter(c_nrs_here_cm, height*np.ones(len(c_nrs_here_cm)), color=c_colors, marker='v',
|
|
clip_on=False, s=7)
|
|
except:
|
|
print('embed something')
|
|
embed()
|
|
|
|
for cn,cnr in enumerate(c_nrs_here_cm):
|
|
#embed()
|
|
ax_u1_upper.text(cnr, height+letter_plus, letters_all[f_counter][cn], ha = 'center', va = 'center',color=c_colors[cn])
|
|
ax_u1_upper.plot([cnr,cnr], [0,height], color = c_colors[cn], linewidth = lw_tuning(), zorder = 100)
|
|
#for m in range(len(c_nrs_here_cm)):
|
|
# ax_u1_upper.axvline(c_nrs_here_cm[m], color=c_colors[m], linewidth=lw)
|
|
# plt.suptitle(cell_here)
|
|
labels, alpha, color01, color01_012, color02, color02_012, colors, colors_array, linestyles, scores, linewidths = colors_susept(
|
|
add='_mean_original', nr = 2)
|
|
color_first = 'black'#'red' # color01
|
|
color_second = 'black' # color02
|
|
color_third = 'black'
|
|
# rainbow_title(plt.gcf(), ax_u1, [], [[]], start_xpos=0, ha = 'left', y_pos = 1.1)
|
|
#rainbow_title(plt.gcf(), ax_u1_upper, [' $\Delta f_{'+vary_val()+'}=%s$' % (freq1_here) + ' Hz',
|
|
# ' $\Delta f_{'+stable_val()+'}=%s$' % (freq2_here) + ' Hz',
|
|
# '$c_{'+stable_val()+'}=10\%$'],
|
|
# [[color_second, color_first, 'black']], start_xpos=0, ha='left', y_pos=1.02)
|
|
ax_u1_upper.text(0, 1,' $\Delta f_{' + vary_val() + '}=%s$' % (freq1_here) + ' Hz' +
|
|
'\n $\Delta f_{' + stable_val() + '}=%s$' % (freq2_here) + '\,Hz, ' + '$c_{' + stable_val() + '}=10\,\%$', transform=ax_u1_upper.transAxes)#transform
|
|
# ax_u1.set_title()
|
|
colors_contrasts = ['purple', 'black', 'grey']
|
|
# ax_u1.scatter(c_here,0, marker = '^', color = 'black')
|
|
if f_counter != 0:
|
|
ax_u1_upper.set_ylabel('')
|
|
remove_yticks(ax_u1_upper)
|
|
#if f_counter == 0:
|
|
# ax_u1_upper.legend(loc=(0, 1.25), ncol=2)
|
|
# ax_u1.set_xlim(0,45)
|
|
frame_cell_chosen = frame_cell_orig[
|
|
(frame_cell_orig.df1 == freq1_here) & (frame_cell_orig.df2 == freq2_here)]
|
|
print('Tuning curve needed for F1' + str(frame_cell_chosen.f1.unique()) + ' F2' + str(
|
|
frame_cell_chosen.f2.unique()) + ' for cell ' + str(cell_here))
|
|
# f_fixed = 'f2'
|
|
# f_variable = 'f1'
|
|
|
|
##################################################
|
|
# hier kommt das mit der tuning kurve
|
|
|
|
full_names_tuning = [
|
|
'calc_model_amp_freqs-F1_250-1345-5_F2_500-525-25_C2_0.1_C1Len_50_FirstC1_0.0001_LastC1_2.0_mult__start_0.0001_end_2_StimLen_5_nfft_32768_trialsnr_1__power_1_minamps__dev_original_05AUCI_not_log__point_1temporal']
|
|
|
|
freq2_here_abs = str(int(frame_cell_chosen.f2.unique()))
|
|
|
|
length = '25'
|
|
length = '2'
|
|
nfft = '32768'
|
|
nfft = '4096'
|
|
full_names_tunings = [
|
|
|
|
'calc_model_amp_freqs-F1_500-1495-5_F2_' + freq2_here_abs + '_C2_0.1_C1_0.1_StimLen_' + length + '_nfft_' + nfft + '_trialsnr_1__power_1_minamps__dev_original_05AUCI_point_1temporal',
|
|
'calc_model_amp_freqs-F1_500-1495-5_F2_' + freq2_here_abs + '_C2_0.1_C1_0.25_StimLen_' + length + '_nfft_' + nfft + '_trialsnr_1__power_1_minamps__dev_original_05AUCI_point_1temporal',
|
|
]#'calc_model_amp_freqs-F1_500-1495-5_F2_' + freq2_here_abs + '_C2_0.1_C1_0.5_StimLen_' + length + '_nfft_' + nfft + '_trialsnr_1__power_1_minamps__dev_original_05AUCI_point_1temporal',
|
|
|
|
# 'calc_model_amp_freqs-F1_500-1495-5_F2_725_C2_0.1_C1_0.5_StimLen_2_nfft_32768_trialsnr_1__power_1_minamps__dev_original_05AUCI_point_1temporal' #_burst_added1_
|
|
|
|
ax_us = []
|
|
for ft_nr, full_names_tuning in enumerate(full_names_tunings):
|
|
# embed()
|
|
if os.path.exists(load_folder_name('calc_cocktailparty') + '/' + full_names_tuning + '.csv'):
|
|
frame_tuning = pd.read_csv(
|
|
load_folder_name('calc_cocktailparty') + '/' + full_names_tuning + '.csv')
|
|
print(full_names_tuning)
|
|
frame_cell_orig_tuning = frame_tuning[(frame_tuning.cell == cell_here)]
|
|
try:
|
|
frame_cell_orig_tuning = single_frame_processing(c_grouped, cell_here,
|
|
frame_cell_orig_tuning)
|
|
except:
|
|
print('something')
|
|
embed()
|
|
# frame_cell_orig, df1s, df2s, f1s, f2s = find_dfs(frame_cell_orig)
|
|
|
|
f_fixes = ['df2'] # 'df1',
|
|
f_variables = ['df1'] # 'df2',
|
|
freqs_fixed = [freq2_here] # freq1_here,
|
|
for f_nr, f_fixed in enumerate(freqs_fixed):
|
|
indexes = [[0, 2], [0,1,2,3]]
|
|
for i, idx in enumerate(indexes):
|
|
grid_rr = gridspec.GridSpecFromSubplotSpec(2, 1,
|
|
hspace=0.15,
|
|
wspace=0.15,
|
|
subplot_spec=grid_r[ft_nr])
|
|
ax_u1 = plt.subplot(grid_rr[i])
|
|
|
|
frame_f = plt_tuning_curve(c_heres[ft_nr], ax_u1, frame_cell_orig_tuning, cell_here,
|
|
f_fixed,
|
|
f_fixed,
|
|
f_fixed=f_fixes[f_nr],index = idx,
|
|
f_variable=f_variables[f_nr], linewidths = linewidths)
|
|
if (i == 1) & (ft_nr == 0) & (f_counter == 0):
|
|
ax_u1.legend(loc=(0, 2.325), ncol=2)# .legend()
|
|
ax_u1.set_title('')
|
|
|
|
|
|
ax_u1.set_yticks_delta(100)
|
|
#if i == 0:
|
|
# ax_u1.text(0, 1.2, 'one-beat conditions')
|
|
#else:
|
|
if (i == 0):#(ft_nr == 0) &(f_counter == 0) &
|
|
ax_u1.text(0, 1.1, '$c_{1}=%s$' % (str(int(c_heres[ft_nr] * 100))) + '$\%$',
|
|
color=c_colors[ft_nr], ha='left',
|
|
va='top',
|
|
transform=ax_u1.transAxes)
|
|
df_extra = False
|
|
if df_extra:
|
|
if ft_nr == 0:
|
|
ax_u1.text(0, 1.15, ' $\Delta f_{' + stable_val() + '}=%s$' % (
|
|
freq2_here) + '\,Hz ' + '$ ' + c_stable_name() + '=10 \%$',
|
|
color=color_third, ha='left',
|
|
va='top',
|
|
transform=ax_u1.transAxes) # c_colors[ft_nr]%
|
|
# +
|
|
|
|
ax_u1.set_xlabel(f_variables[f_nr])
|
|
ax_u1.set_xlim(-265, 265)
|
|
ax_u1.set_ylim(0, 420)
|
|
# embed()
|
|
frame_f = frame_f_reference(c_heres[ft_nr], cell_here, f_fixes[f_nr],
|
|
frame_cell_orig_tuning, f_fixed)
|
|
|
|
s_big = 25
|
|
s_small = 20
|
|
|
|
# s_big = 25
|
|
# s_small = 20
|
|
|
|
if scatter_extra:
|
|
ax_u1.scatter(freq1_here,
|
|
frame_f[(frame_f['df2'] == freq2_here) & (frame_f['df1'] == freq1_here)][
|
|
scores[2]], edgecolor=color_second, facecolor='white', s=s_big,
|
|
alpha=0.5, marker='o', clip_on=False, zorder=100)
|
|
ax_u1.scatter(freq1_here, frame_f[frame_f['df1'] == freq1_here][scores[0]],
|
|
edgecolor=color_first, marker='o', zorder=120, facecolor='white',
|
|
s=s_small, alpha=0.5, clip_on=False)
|
|
if ft_nr == 0:
|
|
ax_u1.scatter(freq2_here, frame_f[
|
|
(frame_f['df2'] == freq2_here) & (frame_f['df1'] == freq1_here)][scores[2]],
|
|
edgecolor=color_third, facecolor='white', alpha=0.5, marker='o',
|
|
clip_on=False, zorder=120, s=s_small)
|
|
|
|
####################
|
|
# scatter to the upper one
|
|
|
|
frame_f = frame_f_reference(c_heres[ft_nr], cell_here, f_fixes[f_nr],
|
|
frame_cell_orig_tuning,
|
|
f_fixed)
|
|
|
|
if scatter_extra:
|
|
ax_u1_upper.scatter(c_heres[ft_nr] * 100,
|
|
frame_f[(frame_f['df2'] == freq2_here) & (
|
|
frame_f['df1'] == freq1_here)][
|
|
scores[2]],
|
|
edgecolor=color_second, facecolor='white', s=s_big, alpha=0.5,
|
|
marker='o',
|
|
clip_on=False, zorder=100)
|
|
ax_u1_upper.scatter(c_heres[ft_nr] * 100,
|
|
frame_f[frame_f['df1'] == freq1_here][scores[0]],
|
|
edgecolor=color_first,
|
|
marker='o', zorder=120, facecolor='white', s=s_small, alpha=0.5,
|
|
clip_on=False)
|
|
#############################
|
|
|
|
add = -5
|
|
#if f_counter == 0:
|
|
#if i == 1:
|
|
ax_u1.scatter(freq1_here + add, height,
|
|
color=c_colors[ft_nr],marker='v',clip_on=False, s=7)
|
|
ax_u1.plot([freq1_here+add,freq1_here+add], [0, height], color=c_colors[ft_nr], linewidth=lw_tuning(), zorder = 100)
|
|
ax_u1.text(freq1_here+add, height + letter_plus, letters_all2[f_counter], ha='center',color=c_colors[ft_nr],
|
|
va='center')
|
|
|
|
#ax_u1.scatter(freq1_here, [0], color=c_colors[ft_nr],
|
|
# marker='^',
|
|
# clip_on=False, s=5)
|
|
#ft_nr
|
|
if (f_counter == 0) & (ft_nr == 0):#f_counter == 0:f_counter
|
|
ax_u1.set_ylabel(representation_ylabel())
|
|
else:
|
|
ax_u1.set_ylabel('')
|
|
remove_yticks(ax_u1)
|
|
|
|
if i in [1]:#f_counter
|
|
ax_u1.set_xlabel(xlabel_vary()) # ax_upper.set_xlabel(xlabel_vary())
|
|
else:
|
|
ax_u1.set_xlabel('')
|
|
remove_xticks(ax_u1)
|
|
ax_us.append(ax_u1)
|
|
|
|
#if i == 1:
|
|
# ax_u1.set_ylabel('')
|
|
# remove_yticks(ax_u1)
|
|
f_counter += 1
|
|
if len(ax_us) > 0:
|
|
join_x(ax_us)
|
|
join_y(ax_us)
|
|
ax_uss.append(ax_us)
|
|
#########################################################
|
|
# ax_upper[0].legend(loc=(0, 1.4), ncol=6) # , f_fixed,
|
|
if squares:
|
|
set_clim_same_here(ims, clims='all', same='same')
|
|
|
|
# embed()
|
|
|
|
join_y(ax_upper)
|
|
join_x(ax_upper)
|
|
join_y(ax_upper)
|
|
fig = plt.gcf()
|
|
#
|
|
# (fig, ax, xoffs=-3.5, yoffs = [5.5,nr,nr,nr,nr])
|
|
# tag2(plt.gcf(), [[ax_upper[0], ax_uss[0][0], ax_uss[0][1],ax_uss[0][2],ax_upper[4]], [ax_uss[1][0], ax_uss[1][1],ax_uss[1][2]]])
|
|
yoffs = np.array([3, 2.5, 2.5, 2.5])
|
|
x = -3.5#ax_uss[0][1],
|
|
tag2(plt.gcf(), [[ax_upper[0], ax_uss[0][0],ax_uss[0][2] ]], xoffs=np.array([x, x, x, x]),
|
|
yoffs=yoffs)#ax_uss[0][1]
|
|
tag2(plt.gcf(), [[ax_upper[4], ax_uss[1][0],ax_uss[1][2]]], xoffs=np.array([x, x, x, x]),
|
|
yoffs=yoffs)#, ,ax_uss[1][1]]
|
|
# make_simple_tags([ax_upper[0], ax_uss[0][0], ax_uss[0][1],ax_uss[0][2],ax_upper[4], ax_uss[1][0], ax_uss[1][1],ax_uss[1][2]], letters = ['A$_{i}$','A$_{ii}$','A$_{iii}$','A$_{iv}$','B$_{i}$','B$_{ii}$','B$_{iii}$','B$_{iv}$'])
|
|
# embed()
|
|
|
|
save_visualization(cell_here, show)
|
|
|
|
|
|
def lw_tuning():
|
|
return 0.55
|
|
|
|
|
|
def vary_contrasts_big_with_tuning3_several(stimulus_length=25, freqs=[(39.5, -135.5)], cells_here='2011-10-25-ad-invivo-1'):
|
|
default_settings() # ts=13, ls=13, fs=13, lw = 0.7
|
|
plot_style()
|
|
#embed()
|
|
#test_here()
|
|
model_cells = pd.read_csv(load_folder_name('calc_model_core') + "/models_big_fit_d_right.csv")
|
|
# if len(cells) < 1:
|
|
cells = ['2011-10-25-ad-invivo-1']
|
|
if len(cells_here) < 1:
|
|
cells_here = np.array(model_cells.cell)
|
|
|
|
a_fr = 1
|
|
a = 0
|
|
trials_nrs = [1]
|
|
|
|
datapoints = 1000
|
|
|
|
results_diff = pd.DataFrame()
|
|
position_diff = 0
|
|
plot_style()
|
|
default_settings(column=2, length=7.5)
|
|
for trials_nr in trials_nrs: # +[trials_nrs[-1]]
|
|
|
|
# sachen die ich variieren will
|
|
###########################################
|
|
single_wave = '_SeveralWave_' # , '_SingleWave_']
|
|
|
|
auci_wo = []
|
|
auci_w = []
|
|
|
|
nfft = 32768
|
|
|
|
for cell_here in cells_here:
|
|
# embed()
|
|
full_names = [
|
|
'calc_model_amp_freqs-F1_750-975-25_F2_500-775-25_C2_0.1_C1Len_25_FirstC1_0.0001_LastC1_1.0_StimLen_' + str(
|
|
stimulus_length) + '_nfft_' + str(nfft) + '_trialsnr_1_absolut_power_1_minamps__dev_05temporal']
|
|
full_names = [
|
|
'calc_model_amp_freqs-F1_750-775-25_F2_500-525-25_C2_0.1_C1Len_25_FirstC1_0.0001_LastC1_2.0_mult__start_0.0001_end_2_StimLen_5_nfft_32768_trialsnr_1__power_1_minamps__dev_original_05AUCI_point_1temporal']
|
|
full_names = [
|
|
'calc_model_amp_freqs-F1_750-975-25_F2_500-775-25_C2_0.1_C1Len_50_FirstC1_0.0001_LastC1_2.0_mult__start_0.0001_end_2_StimLen_5_nfft_32768_trialsnr_1__power_1_minamps__dev_original_05AUCI_not_log__point_1temporal']
|
|
full_names = [
|
|
'calc_model_amp_freqs-F1_750-975-25_F2_500-775-25_C2_0.1_C1Len_50_FirstC1_0.0001_LastC1_2.0_mult__start_0.0001_end_2_StimLen_5_nfft_32768_trialsnr_1__power_1_minamps__dev_original_05AUCI_point_1temporal']
|
|
full_names = [
|
|
'calc_model_amp_freqs-F1_750-975-75_F2_500-725-75_C2_0.1_C1Len_50_FirstC1_0.0001_LastC1_2.0_mult__start_0.0001_end_2_StimLen_5_nfft_32768_trialsnr_1__power_1_minamps__dev_original_05AUCI_point_1temporal']
|
|
full_names = [
|
|
'calc_model_amp_freqs-F1_750-975-75_F2_500-725-75_C2_0.1_C1Len_50_FirstC1_0.0001_LastC1_1.0_mult__start_0.0001_end_1_StimLen_25_nfft_32768_trialsnr_1__power_1_minamps__dev_original_05AUCI_point_1temporal']
|
|
|
|
# full_names = ['calc_model_amp_freqs-F1_0.5-1.45-0.05_F2_0.5-1.45-0.05_C2_0.1_C1Len_50_FirstC1_0.0001_LastC1_1.0_mult__start_0.0001_end_1_StimLen_25_nfft_32768_trialsnr_1__power_1_minamps__dev_original_05AUCI_point_1temporal']
|
|
# full_names = ['calc_model_amp_freqs-F1_250-1325-25_F2_720_C2_0.1_C1Len_50_FirstC1_0.0001_LastC1_2.0_mult__start_0.0001_end_2_StimLen_5_nfft_32768_trialsnr_1__power_1_minamps__dev_original_05AUCI_point_1temporal']
|
|
# full_names = ['calc_model_amp_freqs-F1_750-975-25_F2_500-775-25_C2_0.1_C1Len_25_FirstC1_0.0001_LastC1_1.0_StimLen_25_nfft_32768_trialsnr_1_absolut_power_1_minamps__dev_originalAUCItemporal']
|
|
# 'calc_model_amp_freqs-F1_750-975-25_F2_500-775-25_C2Len_25_FirstC2_0.0001_LastC2_1.0_C1_0.1_StimLen_2_nfft_32768_trialsnr_1_absolut_power_1_minamps__dev_05temporal']
|
|
c_grouped = ['c1'] # , 'c2']
|
|
# adds = [-150, -50, -10, 10, 50, 150]
|
|
# fig, ax = plt.subplots(4, len(adds), constrained_layout=True, figsize=(12, 5.5))
|
|
# for ff, full_name in enumerate(full_names):
|
|
frame = pd.read_csv(load_folder_name('calc_cocktailparty') + '/' + full_names[0] + '.csv')
|
|
frame_cell_orig = frame[(frame.cell == cell_here)]
|
|
|
|
df_desired = 40
|
|
if len(frame_cell_orig) > 0:
|
|
try:
|
|
males = [frame_cell_orig.iloc[
|
|
np.argmin(np.abs(frame_cell_orig.df1 - df_desired))].f1] # DF=39.5[775, 825]
|
|
except:
|
|
print('min thing')
|
|
embed()
|
|
# (135.5, 625.0), (110.5, 650.0), (85.5, 675.0),(60.5, 700.0), (35.5, 725.0), (10.5, 750.0),(151.07000000000005, 675.0)
|
|
# frame_cell_orig[['df2', 'f2']]
|
|
new_f2_tuple = frame_cell_orig[['df2', 'f2']].apply(tuple, 1).unique()
|
|
dfs = [tup[0] for tup in new_f2_tuple]
|
|
sorted = np.argsort(np.abs(dfs))
|
|
new_f2_tuple = new_f2_tuple[sorted]
|
|
dfs = np.array(dfs)[sorted]
|
|
dfs_new = dfs[(dfs > 0) & (dfs < df_desired + 100)]
|
|
f2s = [tup[1] for tup in new_f2_tuple]
|
|
|
|
c_nrs = [0.0002, 0.05, 0.5]
|
|
# fig = plt.figure(figsize=(12, 5.5))
|
|
grid0 = gridspec.GridSpec(1, len(freqs), bottom=0.1, top=0.87, left=0.09,
|
|
right=0.95,
|
|
wspace=0.3) #
|
|
|
|
|
|
###################################################
|
|
# squares
|
|
# axes[cs_nr, 0].text(0, 1.2, str(cs_type), transform=ax[cs_nr, 0].transAxes, fontsize=13)
|
|
squares = False
|
|
if squares:
|
|
full_names_square = [
|
|
'calc_model_amp_freqs-F1_750-975-25_F2_500-775-25_C2_0.1_C1Len_25_FirstC1_0.0001_LastC1_1.0_StimLen_2_nfft_32768_trialsnr_1_absolut_power_1_minamps__dev_05temporal', ]
|
|
frame_square = pd.read_csv(
|
|
load_folder_name('calc_cocktailparty') + '/' + full_names_square[0] + '.csv')
|
|
frame_cell_square = frame_square[(frame_square.cell == cell_here)]
|
|
|
|
axes = []
|
|
axes.append(plt.subplot(grid_s[0]))
|
|
axes.append(plt.subplot(grid_s[1]))
|
|
axes.append(plt.subplot(grid_s[2]))
|
|
frame_cell_square = single_frame_processing(c_grouped, cell_here, frame_cell_square)
|
|
lim, matrix, ss, ims = plt_matrix_saturation_loss(axes, frame_cell_square, add='_05')
|
|
plt_cross(matrix, axes[-1])
|
|
|
|
#################################################################
|
|
|
|
# calc_model_amp_freqs-F1_750-975-25_F2_500-775-25_C2_0.1_C1Len_20_FirstC1_0.0001_LastC1_1.0_StimLen_25_nfft_32768_trialsnr_1_absolut_power_1temporal.csv
|
|
# devs_extra = ['stim','stim_rec','stim_am','original','05']#['original','05']
|
|
show = True
|
|
# da implementiere ich das jetzt für eine Zelle
|
|
# wo wir den einezlnen Punkt und Kontraste variieren
|
|
full_names = [
|
|
'calc_model_amp_freqs-F1_750-975-25_F2_500-775-25_C2_0.1_C1Len_25_FirstC1_0.0001_LastC1_1.0_StimLen_2_nfft_32768_trialsnr_1_absolut_power_1_minamps__dev_05temporal', ]
|
|
|
|
f_counter = 0
|
|
ax_upper = []
|
|
|
|
frame_cell_orig, df1s, df2s, f1s, f2s = find_dfs(frame_cell_orig)
|
|
|
|
eodf = frame_cell_orig.f0.unique()[0]
|
|
# freqs = [(825,650),(825,675),(825,700)]-
|
|
# embed()
|
|
f = -1
|
|
axts_all = []
|
|
axps_all = []
|
|
ax_us = []
|
|
|
|
####################################################
|
|
# hier kommt die amplituden tuning curve
|
|
#
|
|
frame_cell = single_frame_processing(c_grouped, cell_here, frame_cell_orig)
|
|
c_heres = [0.1, 0.25, 0.5]#0.03,
|
|
c_colors = ['black', 'darkgrey', 'silver']
|
|
freq1s = np.unique(frame_cell_orig.df1)
|
|
freq2s = np.unique(frame_cell_orig.df2)
|
|
c_here = frame_cell['c1'][np.argmin(np.abs(frame_cell['c1'] - 0.03))] # frame_cell.iloc[
|
|
# np.argmin(frame_cell['amp_B1_01_mean_original'] - frame['amp_B1_012_mean_original'])].c1
|
|
# embed()
|
|
# freqs_here =[(freq1s_here[0],freq2s_here[0])]
|
|
f_counter = 0
|
|
ax_uss = []
|
|
for freq1, freq2 in freqs:
|
|
grid00 = gridspec.GridSpecFromSubplotSpec(2, 1,
|
|
wspace=0.35, hspace=0.35, subplot_spec=grid0[f_counter],
|
|
height_ratios=[1, 3.55]) #
|
|
grid_u = gridspec.GridSpecFromSubplotSpec(1, 1,
|
|
hspace=0.7,
|
|
wspace=0.25,
|
|
subplot_spec=grid00[
|
|
0]) # hspace=0.4,wspace=0.2,len(chirps)
|
|
grid_r = gridspec.GridSpecFromSubplotSpec(3, 1,
|
|
hspace=0.3,
|
|
wspace=0.25,
|
|
subplot_spec=grid00[1])
|
|
################################################
|
|
#grid_s = gridspec.GridSpecFromSubplotSpec(1, 3,
|
|
# hspace=0.7,
|
|
# wspace=0.45,
|
|
# subplot_spec=grid00[-1])
|
|
|
|
|
|
|
|
freq1_here = freq1s[np.argmin(np.abs(freq1s - freq1))]
|
|
|
|
freq2_here = freq2s[np.argmin(np.abs(freq2s - freq2))]
|
|
|
|
f += 1
|
|
print(cell_here + ' F1' + str(freq1_here) + ' F2 ' + str(freq2_here))
|
|
ax_u1_upper = plt.subplot(grid_u[0])
|
|
c_dist_recalc = dist_recalc_phaselockingchapter()
|
|
ax_upper = plt_single_trace(ax_upper, ax_u1_upper, frame, frame_cell_orig, freq1_here, freq2_here,
|
|
sum=False,c_dist_recalc = c_dist_recalc, linestyles=['-', '--', '-', '--', '-'])
|
|
|
|
c_nrs_here_cm = c_dist_recalc_func(frame_cell, c_nrs=c_heres, cell=cell_here,c_dist_recalc=c_dist_recalc)
|
|
lw = 0.75
|
|
if not c_dist_recalc:
|
|
c_nrs_here_cm = np.array(c_nrs_here_cm)*100
|
|
try:
|
|
ax_u1_upper.scatter(c_nrs_here_cm, np.zeros(len(c_nrs_here_cm)), color=c_colors, marker='^',
|
|
clip_on=False, s = 5)
|
|
except:
|
|
print('embed something')
|
|
embed()
|
|
|
|
for m in range(len(c_nrs_here_cm)):
|
|
ax_u1_upper.axvline(c_nrs_here_cm[m], color = c_colors[m], linewidth = lw)
|
|
#plt.suptitle(cell_here)
|
|
labels, alpha, color01, color01_012, color02, color02_012, colors, colors_array, linestyles, scores,linewidths = colors_susept(
|
|
add='_mean_original')
|
|
color_first = 'red'#color01
|
|
color_second = 'purple'#color02
|
|
color_third = 'darkblue'
|
|
#rainbow_title(plt.gcf(), ax_u1, [], [[]], start_xpos=0, ha = 'left', y_pos = 1.1)
|
|
rainbow_title(plt.gcf(), ax_u1_upper, [' $\Delta f_{s}=%s$' %(freq2_here) + ' Hz',' $\Delta f_{p}=%s$' %(freq1_here) + ' Hz','$c_{2}=10\%$'],
|
|
[[color_second,color_first, 'black']], start_xpos=0, ha='left', y_pos=1.02)
|
|
|
|
#ax_u1.set_title()
|
|
colors_contrasts = ['purple', 'black', 'grey']
|
|
# ax_u1.scatter(c_here,0, marker = '^', color = 'black')
|
|
if f_counter != 0:
|
|
ax_u1_upper.set_ylabel('')
|
|
remove_yticks(ax_u1_upper)
|
|
if f_counter == 0:
|
|
ax_u1_upper.legend(loc=(0, 1.25), ncol=2)
|
|
#ax_u1.set_xlim(0,45)
|
|
frame_cell_chosen = frame_cell_orig[
|
|
(frame_cell_orig.df1 == freq1_here) & (frame_cell_orig.df2 == freq2_here)]
|
|
print('Tuning curve needed for F1' + str(frame_cell_chosen.f1.unique()) + ' F2' + str(
|
|
frame_cell_chosen.f2.unique()) + ' for cell ' + str(cell_here))
|
|
# f_fixed = 'f2'
|
|
# f_variable = 'f1'
|
|
|
|
##################################################
|
|
# hier kommt das mit der tuning kurve
|
|
|
|
full_names_tuning = [
|
|
'calc_model_amp_freqs-F1_250-1345-5_F2_500-525-25_C2_0.1_C1Len_50_FirstC1_0.0001_LastC1_2.0_mult__start_0.0001_end_2_StimLen_5_nfft_32768_trialsnr_1__power_1_minamps__dev_original_05AUCI_not_log__point_1temporal']
|
|
|
|
freq2_here_abs = str(int(frame_cell_chosen.f2.unique()))
|
|
|
|
length = '25'
|
|
length = '2'
|
|
nfft = '32768'
|
|
nfft = '4096'
|
|
full_names_tunings = [
|
|
|
|
'calc_model_amp_freqs-F1_500-1495-5_F2_' + freq2_here_abs + '_C2_0.1_C1_0.1_StimLen_' + length + '_nfft_' + nfft + '_trialsnr_1__power_1_minamps__dev_original_05AUCI_point_1temporal',
|
|
'calc_model_amp_freqs-F1_500-1495-5_F2_' + freq2_here_abs + '_C2_0.1_C1_0.25_StimLen_' + length + '_nfft_' + nfft + '_trialsnr_1__power_1_minamps__dev_original_05AUCI_point_1temporal',
|
|
'calc_model_amp_freqs-F1_500-1495-5_F2_' + freq2_here_abs + '_C2_0.1_C1_0.5_StimLen_' + length + '_nfft_' + nfft + '_trialsnr_1__power_1_minamps__dev_original_05AUCI_point_1temporal',
|
|
]
|
|
# 'calc_model_amp_freqs-F1_500-1495-5_F2_725_C2_0.1_C1_0.5_StimLen_2_nfft_32768_trialsnr_1__power_1_minamps__dev_original_05AUCI_point_1temporal' #_burst_added1_
|
|
|
|
ax_us = []
|
|
for ft_nr, full_names_tuning in enumerate(full_names_tunings):
|
|
# embed()
|
|
if os.path.exists(load_folder_name('calc_cocktailparty') + '/' + full_names_tuning + '.csv'):
|
|
frame_tuning = pd.read_csv(
|
|
load_folder_name('calc_cocktailparty') + '/' + full_names_tuning + '.csv')
|
|
print(full_names_tuning)
|
|
frame_cell_orig_tuning = frame_tuning[(frame_tuning.cell == cell_here)]
|
|
try:
|
|
frame_cell_orig_tuning = single_frame_processing(c_grouped, cell_here,
|
|
frame_cell_orig_tuning)
|
|
except:
|
|
print('something')
|
|
embed()
|
|
# frame_cell_orig, df1s, df2s, f1s, f2s = find_dfs(frame_cell_orig)
|
|
|
|
f_fixes = ['df2'] # 'df1',
|
|
f_variables = ['df1'] # 'df2',
|
|
freqs_fixed = [freq2_here] # freq1_here,
|
|
for f_nr, f_fixed in enumerate(freqs_fixed):
|
|
ax_u1 = plt.subplot(grid_r[ft_nr])
|
|
# embed()
|
|
frame_f = plt_tuning_curve(c_heres[ft_nr], ax_u1, frame_cell_orig_tuning, cell_here, f_fixed,
|
|
f_fixed,
|
|
f_fixed=f_fixes[f_nr],
|
|
f_variable=f_variables[f_nr])
|
|
ax_u1.set_title('')
|
|
#'
|
|
|
|
ax_u1.text(1, 1.15, '$c_{1}=%s$' %(str(int(c_heres[ft_nr]*100)))+'$\%$', color=color01, ha='right',
|
|
va='top',
|
|
transform=ax_u1.transAxes)
|
|
if ft_nr == 0:
|
|
ax_u1.text(0, 1.15, ' $\Delta ' + f_stable_name() +'=%s$' % (freq2_here) + '\,Hz ' +'$ ' + c_stable_name() + '=10 \%$',
|
|
color=color_third, ha='left',
|
|
va='top',
|
|
transform=ax_u1.transAxes)#c_colors[ft_nr]%
|
|
#+
|
|
|
|
ax_u1.set_xlabel(f_variables[f_nr])
|
|
ax_u1.set_xlim(-300, 300)
|
|
ax_u1.set_ylim(0,420)
|
|
#embed()
|
|
frame_f = frame_f_reference(c_heres[ft_nr], cell_here, f_fixes[f_nr], frame_cell_orig_tuning, f_fixed)
|
|
|
|
s_big = 25
|
|
s_small = 20
|
|
|
|
#s_big = 25
|
|
#s_small = 20
|
|
ax_u1.scatter(freq1_here, frame_f[(frame_f['df2'] == freq2_here) & (frame_f['df1'] == freq1_here)][scores[2]], edgecolor=color_second,facecolor = 'white', s =s_big, alpha = 0.5, marker='o',clip_on = False, zorder = 100)
|
|
ax_u1.scatter(freq1_here, frame_f[frame_f['df1'] == freq1_here][scores[0]], edgecolor=color_first, marker='o', zorder = 120, facecolor = 'white',s = s_small, alpha = 0.5, clip_on = False)
|
|
if ft_nr == 0:
|
|
ax_u1.scatter(freq2_here, frame_f[
|
|
(frame_f['df2'] == freq2_here) & (frame_f['df1'] == freq1_here)][scores[2]],
|
|
edgecolor=color_third, facecolor='white', alpha=0.5, marker='o',
|
|
clip_on=False, zorder=120, s = s_small)
|
|
|
|
####################
|
|
# scatter to the upper one
|
|
|
|
frame_f = frame_f_reference(c_heres[ft_nr], cell_here, f_fixes[f_nr],
|
|
frame_cell_orig_tuning,
|
|
f_fixed)
|
|
|
|
ax_u1_upper.scatter(c_heres[ft_nr]*100,
|
|
frame_f[(frame_f['df2'] == freq2_here) & (frame_f['df1'] == freq1_here)][
|
|
scores[2]],
|
|
edgecolor=color_second, facecolor='white', s=s_big, alpha=0.5, marker='o',
|
|
clip_on=False, zorder=100)
|
|
ax_u1_upper.scatter(c_heres[ft_nr]*100, frame_f[frame_f['df1'] == freq1_here][scores[0]],
|
|
edgecolor=color_first,
|
|
marker='o', zorder=120, facecolor='white', s=s_small, alpha=0.5,
|
|
clip_on=False)
|
|
#############################
|
|
|
|
ax_u1.axvline(freq1_here, color = c_colors[ft_nr], linewidth = lw)
|
|
#embed()
|
|
ax_u1.scatter(freq1_here, [0], color=c_colors[ft_nr],
|
|
marker='^',
|
|
clip_on=False, s=5)
|
|
if f_counter == 0:
|
|
ax_u1.set_ylabel(representation_ylabel())
|
|
else:
|
|
ax_u1.set_ylabel('')
|
|
remove_yticks(ax_u1)
|
|
|
|
if ft_nr in [2]:
|
|
ax_u1.set_xlabel(xlabel_vary())#ax_upper.set_xlabel(xlabel_vary())
|
|
else:
|
|
ax_u1.set_xlabel('')
|
|
remove_xticks(ax_u1)
|
|
ax_us.append(ax_u1)
|
|
f_counter += 1
|
|
if len(ax_us) > 0:
|
|
join_x(ax_us)
|
|
join_y(ax_us)
|
|
ax_uss.append(ax_us)
|
|
#########################################################
|
|
#ax_upper[0].legend(loc=(0, 1.4), ncol=6) # , f_fixed,
|
|
if squares:
|
|
set_clim_same_here(ims, clims='all', same='same')
|
|
|
|
|
|
#embed()
|
|
|
|
join_y(ax_upper)
|
|
join_x(ax_upper)
|
|
join_y(ax_upper)
|
|
fig = plt.gcf()
|
|
#
|
|
#(fig, ax, xoffs=-3.5, yoffs = [5.5,nr,nr,nr,nr])
|
|
#tag2(plt.gcf(), [[ax_upper[0], ax_uss[0][0], ax_uss[0][1],ax_uss[0][2],ax_upper[4]], [ax_uss[1][0], ax_uss[1][1],ax_uss[1][2]]])
|
|
yoffs = np.array([2,2.5,2.5,2.5])
|
|
x = -3
|
|
tag2(plt.gcf(), [[ax_upper[0], ax_uss[0][0], ax_uss[0][1], ax_uss[0][2]]], xoffs=np.array([x,x,x,x]),yoffs = yoffs)
|
|
tag2(plt.gcf(), [[ax_upper[4], ax_uss[1][0], ax_uss[1][1],ax_uss[1][2]]], xoffs =np.array([x,x,x,x]),yoffs = yoffs)
|
|
#make_simple_tags([ax_upper[0], ax_uss[0][0], ax_uss[0][1],ax_uss[0][2],ax_upper[4], ax_uss[1][0], ax_uss[1][1],ax_uss[1][2]], letters = ['A$_{i}$','A$_{ii}$','A$_{iii}$','A$_{iv}$','B$_{i}$','B$_{ii}$','B$_{iii}$','B$_{iv}$'])
|
|
#embed()
|
|
|
|
save_visualization(cell_here, show)
|
|
|
|
|
|
def dist_recalc_phaselockingchapter():
|
|
c_dist_recalc = False
|
|
return c_dist_recalc
|
|
|
|
|
|
def vary_contrasts_big_with_tuning3(stimulus_length=25, freqs=[(39.5, -135.5)], cells_here = '2011-10-25-ad-invivo-1'):
|
|
|
|
|
|
|
|
default_settings() # ts=13, ls=13, fs=13, lw = 0.7
|
|
plot_style()
|
|
|
|
model_cells = pd.read_csv(load_folder_name('calc_model_core') + "/models_big_fit_d_right.csv")
|
|
# if len(cells) < 1:
|
|
cells = ['2011-10-25-ad-invivo-1']
|
|
if len(cells_here) < 1:
|
|
cells_here = np.array(model_cells.cell)
|
|
|
|
a_fr = 1
|
|
a = 0
|
|
trials_nrs = [1]
|
|
|
|
datapoints = 1000
|
|
|
|
results_diff = pd.DataFrame()
|
|
position_diff = 0
|
|
plot_style()
|
|
default_settings(column=2, length=6.5)
|
|
for trials_nr in trials_nrs: # +[trials_nrs[-1]]
|
|
|
|
# sachen die ich variieren will
|
|
###########################################
|
|
single_wave = '_SeveralWave_' # , '_SingleWave_']
|
|
|
|
auci_wo = []
|
|
auci_w = []
|
|
|
|
nfft = 32768
|
|
|
|
for cell_here in cells_here:
|
|
# embed()
|
|
full_names = [
|
|
'calc_model_amp_freqs-F1_750-975-25_F2_500-775-25_C2_0.1_C1Len_25_FirstC1_0.0001_LastC1_1.0_StimLen_' + str(
|
|
stimulus_length) + '_nfft_' + str(nfft) + '_trialsnr_1_absolut_power_1_minamps__dev_05temporal']
|
|
full_names = [
|
|
'calc_model_amp_freqs-F1_750-775-25_F2_500-525-25_C2_0.1_C1Len_25_FirstC1_0.0001_LastC1_2.0_mult__start_0.0001_end_2_StimLen_5_nfft_32768_trialsnr_1__power_1_minamps__dev_original_05AUCI_point_1temporal']
|
|
full_names = [
|
|
'calc_model_amp_freqs-F1_750-975-25_F2_500-775-25_C2_0.1_C1Len_50_FirstC1_0.0001_LastC1_2.0_mult__start_0.0001_end_2_StimLen_5_nfft_32768_trialsnr_1__power_1_minamps__dev_original_05AUCI_not_log__point_1temporal']
|
|
full_names = [
|
|
'calc_model_amp_freqs-F1_750-975-25_F2_500-775-25_C2_0.1_C1Len_50_FirstC1_0.0001_LastC1_2.0_mult__start_0.0001_end_2_StimLen_5_nfft_32768_trialsnr_1__power_1_minamps__dev_original_05AUCI_point_1temporal']
|
|
full_names = [
|
|
'calc_model_amp_freqs-F1_750-975-75_F2_500-725-75_C2_0.1_C1Len_50_FirstC1_0.0001_LastC1_2.0_mult__start_0.0001_end_2_StimLen_5_nfft_32768_trialsnr_1__power_1_minamps__dev_original_05AUCI_point_1temporal']
|
|
full_names = [
|
|
'calc_model_amp_freqs-F1_750-975-75_F2_500-725-75_C2_0.1_C1Len_50_FirstC1_0.0001_LastC1_1.0_mult__start_0.0001_end_1_StimLen_25_nfft_32768_trialsnr_1__power_1_minamps__dev_original_05AUCI_point_1temporal']
|
|
|
|
# full_names = ['calc_model_amp_freqs-F1_0.5-1.45-0.05_F2_0.5-1.45-0.05_C2_0.1_C1Len_50_FirstC1_0.0001_LastC1_1.0_mult__start_0.0001_end_1_StimLen_25_nfft_32768_trialsnr_1__power_1_minamps__dev_original_05AUCI_point_1temporal']
|
|
# full_names = ['calc_model_amp_freqs-F1_250-1325-25_F2_720_C2_0.1_C1Len_50_FirstC1_0.0001_LastC1_2.0_mult__start_0.0001_end_2_StimLen_5_nfft_32768_trialsnr_1__power_1_minamps__dev_original_05AUCI_point_1temporal']
|
|
# full_names = ['calc_model_amp_freqs-F1_750-975-25_F2_500-775-25_C2_0.1_C1Len_25_FirstC1_0.0001_LastC1_1.0_StimLen_25_nfft_32768_trialsnr_1_absolut_power_1_minamps__dev_originalAUCItemporal']
|
|
# 'calc_model_amp_freqs-F1_750-975-25_F2_500-775-25_C2Len_25_FirstC2_0.0001_LastC2_1.0_C1_0.1_StimLen_2_nfft_32768_trialsnr_1_absolut_power_1_minamps__dev_05temporal']
|
|
c_grouped = ['c1'] # , 'c2']
|
|
# adds = [-150, -50, -10, 10, 50, 150]
|
|
# fig, ax = plt.subplots(4, len(adds), constrained_layout=True, figsize=(12, 5.5))
|
|
# for ff, full_name in enumerate(full_names):
|
|
frame = pd.read_csv(load_folder_name('calc_cocktailparty') + '/' + full_names[0] + '.csv')
|
|
frame_cell_orig = frame[(frame.cell == cell_here)]
|
|
|
|
|
|
|
|
df_desired = 40
|
|
if len(frame_cell_orig) > 0:
|
|
try:
|
|
males = [frame_cell_orig.iloc[
|
|
np.argmin(np.abs(frame_cell_orig.df1 - df_desired))].f1] # DF=39.5[775, 825]
|
|
except:
|
|
print('min thing')
|
|
embed()
|
|
# (135.5, 625.0), (110.5, 650.0), (85.5, 675.0),(60.5, 700.0), (35.5, 725.0), (10.5, 750.0),(151.07000000000005, 675.0)
|
|
# frame_cell_orig[['df2', 'f2']]
|
|
new_f2_tuple = frame_cell_orig[['df2', 'f2']].apply(tuple, 1).unique()
|
|
dfs = [tup[0] for tup in new_f2_tuple]
|
|
sorted = np.argsort(np.abs(dfs))
|
|
new_f2_tuple = new_f2_tuple[sorted]
|
|
dfs = np.array(dfs)[sorted]
|
|
dfs_new = dfs[(dfs > 0) & (dfs < df_desired + 100)]
|
|
f2s = [tup[1] for tup in new_f2_tuple]
|
|
|
|
c_nrs = [0.0002, 0.05, 0.5]
|
|
#fig = plt.figure(figsize=(12, 5.5))
|
|
grid0 = gridspec.GridSpec(1, 1, bottom=0.1, top=0.87, left=0.09,
|
|
right=0.95,
|
|
wspace=0.04) #
|
|
grid00 = gridspec.GridSpecFromSubplotSpec(2, 1,
|
|
wspace=0.2, hspace=0.6, subplot_spec=grid0[0], height_ratios = [1,2]) #
|
|
grid_u = gridspec.GridSpecFromSubplotSpec(1, len(freqs),
|
|
hspace=0.7,
|
|
wspace=0.25,
|
|
subplot_spec=grid00[0]) # hspace=0.4,wspace=0.2,len(chirps)
|
|
grid_r = gridspec.GridSpecFromSubplotSpec(2, 2,
|
|
hspace=0.15,
|
|
wspace=0.25,
|
|
subplot_spec=grid00[1])
|
|
|
|
|
|
###############################################
|
|
grid_s = gridspec.GridSpecFromSubplotSpec(1, 3,
|
|
hspace=0.7,
|
|
wspace=0.45,
|
|
subplot_spec=grid00[-1])
|
|
|
|
|
|
|
|
###################################################
|
|
# squares
|
|
#axes[cs_nr, 0].text(0, 1.2, str(cs_type), transform=ax[cs_nr, 0].transAxes, fontsize=13)
|
|
squares = False
|
|
if squares:
|
|
full_names_square = [
|
|
'calc_model_amp_freqs-F1_750-975-25_F2_500-775-25_C2_0.1_C1Len_25_FirstC1_0.0001_LastC1_1.0_StimLen_2_nfft_32768_trialsnr_1_absolut_power_1_minamps__dev_05temporal', ]
|
|
frame_square = pd.read_csv(
|
|
load_folder_name('calc_cocktailparty') + '/' + full_names_square[0] + '.csv')
|
|
frame_cell_square = frame_square[(frame_square.cell == cell_here)]
|
|
|
|
axes = []
|
|
axes.append(plt.subplot(grid_s[0]))
|
|
axes.append(plt.subplot(grid_s[1]))
|
|
axes.append(plt.subplot(grid_s[2]))
|
|
frame_cell_square = single_frame_processing(c_grouped, cell_here, frame_cell_square)
|
|
lim, matrix, ss, ims = plt_matrix_saturation_loss(axes, frame_cell_square, add = '_05')
|
|
plt_cross(matrix, axes[-1])
|
|
|
|
#################################################################
|
|
|
|
# calc_model_amp_freqs-F1_750-975-25_F2_500-775-25_C2_0.1_C1Len_20_FirstC1_0.0001_LastC1_1.0_StimLen_25_nfft_32768_trialsnr_1_absolut_power_1temporal.csv
|
|
# devs_extra = ['stim','stim_rec','stim_am','original','05']#['original','05']
|
|
show = True
|
|
# da implementiere ich das jetzt für eine Zelle
|
|
# wo wir den einezlnen Punkt und Kontraste variieren
|
|
full_names = [
|
|
'calc_model_amp_freqs-F1_750-975-25_F2_500-775-25_C2_0.1_C1Len_25_FirstC1_0.0001_LastC1_1.0_StimLen_2_nfft_32768_trialsnr_1_absolut_power_1_minamps__dev_05temporal', ]
|
|
|
|
f_counter = 0
|
|
ax_upper = []
|
|
|
|
frame_cell_orig, df1s, df2s, f1s, f2s = find_dfs(frame_cell_orig)
|
|
|
|
eodf = frame_cell_orig.f0.unique()[0]
|
|
# freqs = [(825,650),(825,675),(825,700)]-
|
|
# embed()
|
|
f = -1
|
|
axts_all = []
|
|
axps_all = []
|
|
ax_us = []
|
|
|
|
|
|
|
|
####################################################
|
|
# hier kommt die amplituden tuning curve
|
|
ax_upper, nfft, ax_us = amplitude_tuning_curve(ax_upper, c_grouped, cell_here, f, frame,
|
|
frame_cell_orig, freqs, grid_r, grid_u)
|
|
#plt.show()
|
|
#########################################################
|
|
ax_upper[0].legend(loc=(0, 1.4), ncol=6) # , f_fixed,
|
|
if squares:
|
|
set_clim_same_here(ims, clims='all', same='same')
|
|
|
|
join_y(ax_upper)
|
|
join_x(ax_upper)
|
|
join_y(ax_upper)
|
|
|
|
save_visualization(cell_here, show)
|
|
|
|
|
|
def amplitude_tuning_curve(ax_upper, c_grouped, cell_here, f, frame, frame_cell_orig,
|
|
freqs, grid_r, grid_u):
|
|
##################################################
|
|
#
|
|
frame_cell = single_frame_processing(c_grouped, cell_here, frame_cell_orig)
|
|
c_heres = [0.03, 0.1, 0.25, 0.5]
|
|
c_colors = ['black', 'darkgrey', 'silver', 'lightgrey']
|
|
freq1s = np.unique(frame_cell_orig.df1)
|
|
freq2s = np.unique(frame_cell_orig.df2)
|
|
c_here = frame_cell['c1'][np.argmin(np.abs(frame_cell['c1'] - 0.03))] # frame_cell.iloc[
|
|
# np.argmin(frame_cell['amp_B1_01_mean_original'] - frame['amp_B1_012_mean_original'])].c1
|
|
# embed()
|
|
# freqs_here =[(freq1s_here[0],freq2s_here[0])]
|
|
for freq1, freq2 in freqs:
|
|
freq1_here = freq1s[np.argmin(np.abs(freq1s - freq1))]
|
|
|
|
freq2_here = freq2s[np.argmin(np.abs(freq2s - freq2))]
|
|
|
|
f += 1
|
|
print(cell_here + ' F1' + str(freq1_here) + ' F2 ' + str(freq2_here))
|
|
ax_u1 = plt.subplot(grid_u[0, f])
|
|
ax_upper = plt_single_trace(ax_upper, ax_u1, frame, frame_cell_orig, freq1_here, freq2_here,
|
|
sum=False, linestyles=['-', '--', '-', '--', '-'])
|
|
c_nrs_here_cm = c_dist_recalc_func(frame_cell, c_nrs=c_heres, cell=cell_here)
|
|
ax_u1.scatter(c_nrs_here_cm, np.zeros(len(c_nrs_here_cm)), color=c_colors, marker='^', clip_on=False)
|
|
|
|
plt.suptitle(cell_here)
|
|
ax_u1.set_title(' $\Delta f_{1}=%s$' %(freq1_here) + ' Hz $\Delta f_{2}=%s$' %(freq2_here) + ' Hz')
|
|
colors_contrasts = ['purple', 'black', 'grey']
|
|
# ax_u1.scatter(c_here,0, marker = '^', color = 'black')
|
|
ax_upper[-1].legend(loc=(0, 0.9), ncol=4)
|
|
frame_cell_chosen = frame_cell_orig[(frame_cell_orig.df1 == freq1_here) & (frame_cell_orig.df2 == freq2_here)]
|
|
print('Tuning curve needed for F1' + str(frame_cell_chosen.f1.unique()) + ' F2' + str(
|
|
frame_cell_chosen.f2.unique()) + ' for cell ' + str(cell_here))
|
|
# f_fixed = 'f2'
|
|
# f_variable = 'f1'
|
|
|
|
##################################################
|
|
# hier kommt das mit der tuning kurve
|
|
|
|
full_names_tuning = [
|
|
'calc_model_amp_freqs-F1_250-1345-5_F2_500-525-25_C2_0.1_C1Len_50_FirstC1_0.0001_LastC1_2.0_mult__start_0.0001_end_2_StimLen_5_nfft_32768_trialsnr_1__power_1_minamps__dev_original_05AUCI_not_log__point_1temporal']
|
|
|
|
freq2_here_abs = str(int(frame_cell_chosen.f2.unique()))
|
|
|
|
length = '25'
|
|
length = '2'
|
|
nfft = '32768'
|
|
nfft = '4096'
|
|
full_names_tunings = [
|
|
'calc_model_amp_freqs-F1_500-1495-5_F2_' + freq2_here_abs + '_C2_0.1_C1_0.03_StimLen_' + length + '_nfft_' + nfft + '_trialsnr_1__power_1_minamps__dev_original_05AUCI_point_1temporal',
|
|
'calc_model_amp_freqs-F1_500-1495-5_F2_' + freq2_here_abs + '_C2_0.1_C1_0.1_StimLen_' + length + '_nfft_' + nfft + '_trialsnr_1__power_1_minamps__dev_original_05AUCI_point_1temporal',
|
|
'calc_model_amp_freqs-F1_500-1495-5_F2_' + freq2_here_abs + '_C2_0.1_C1_0.25_StimLen_' + length + '_nfft_' + nfft + '_trialsnr_1__power_1_minamps__dev_original_05AUCI_point_1temporal',
|
|
'calc_model_amp_freqs-F1_500-1495-5_F2_' + freq2_here_abs + '_C2_0.1_C1_0.5_StimLen_' + length + '_nfft_' + nfft + '_trialsnr_1__power_1_minamps__dev_original_05AUCI_point_1temporal',
|
|
]
|
|
# 'calc_model_amp_freqs-F1_500-1495-5_F2_725_C2_0.1_C1_0.5_StimLen_2_nfft_32768_trialsnr_1__power_1_minamps__dev_original_05AUCI_point_1temporal' #_burst_added1_
|
|
|
|
ax_us = []
|
|
for ft_nr, full_names_tuning in enumerate(full_names_tunings):
|
|
# embed()
|
|
if os.path.exists(load_folder_name('calc_cocktailparty') + '/' + full_names_tuning + '.csv'):
|
|
frame_tuning = pd.read_csv(load_folder_name('calc_cocktailparty') + '/' + full_names_tuning + '.csv')
|
|
print(full_names_tuning)
|
|
frame_cell_orig_tuning = frame_tuning[(frame_tuning.cell == cell_here)]
|
|
try:
|
|
frame_cell_orig_tuning = single_frame_processing(c_grouped, cell_here, frame_cell_orig_tuning)
|
|
except:
|
|
print('something')
|
|
embed()
|
|
# frame_cell_orig, df1s, df2s, f1s, f2s = find_dfs(frame_cell_orig)
|
|
|
|
f_fixes = ['df2'] # 'df1',
|
|
f_variables = ['df1'] # 'df2',
|
|
freqs_fixed = [freq2_here] # freq1_here,
|
|
for f_nr, f_fixed in enumerate(freqs_fixed):
|
|
ax_u1 = plt.subplot(grid_r[ft_nr])
|
|
# embed()
|
|
plt_tuning_curve(c_heres[ft_nr], ax_u1, frame_cell_orig_tuning, cell_here, f_fixed, f_fixed,
|
|
f_fixed=f_fixes[f_nr],
|
|
f_variable=f_variables[f_nr])
|
|
ax_u1.set_title('')
|
|
ax_u1.text(1, 1, '$c=%s$' %(c_heres[ft_nr]), color=c_colors[ft_nr], ha='right', va='top',
|
|
transform=ax_u1.transAxes)
|
|
ax_u1.set_xlabel(f_variables[f_nr])
|
|
ax_u1.set_xlim(-300, 300)
|
|
ax_u1.scatter(freq1_here, 1, color='green', marker='^')
|
|
ax_u1.scatter(freq1_here, 1, color='red', marker='^')
|
|
if ft_nr in [0, 2]:
|
|
ax_u1.set_ylabel('Peak Amp. [Hz]')
|
|
else:
|
|
ax_u1.set_ylabel('')
|
|
remove_yticks(ax_u1)
|
|
if ft_nr in [2, 3]:
|
|
ax_u1.set_xlabel('$\Delta f_{1}$ [Hz]')
|
|
else:
|
|
ax_u1.set_xlabel('')
|
|
remove_xticks(ax_u1)
|
|
ax_us.append(ax_u1)
|
|
if len(ax_us) > 0:
|
|
join_x(ax_us)
|
|
join_y(ax_us)
|
|
return ax_upper, nfft, ax_us
|
|
|
|
|
|
def single_frame_processing(c_grouped, cell_here, frame_cell):
|
|
frame_cell = area_vs_single_peaks_frame(cell_here, frame_cell)
|
|
frame_cell, df1s, df2s, f1s, f2s = find_dfs(frame_cell)
|
|
diffs = find_deltas(frame_cell, c_grouped[0])
|
|
frame_cell = find_diffs(c_grouped[0], frame_cell, diffs, add='_original')
|
|
new_frame = frame_cell.groupby(['df1', 'df2'], as_index=False).sum() # ['score']
|
|
matrix = new_frame.pivot(index='df2', columns='df1', values='diff')
|
|
return frame_cell
|
|
|
|
|
|
def plt_tuning_curve(c_here, ax, frame_cell, cell, freq2, dfs, f_fixed='f2', f_variable='f1', linewidths = [], index = [0, 1, 2, 3]):
|
|
scores = ['amp_B1_01_mean_original',
|
|
'amp_B1_012_mean_original',
|
|
'amp_B2_02_mean_original',
|
|
'amp_B2_012_mean_original',
|
|
]
|
|
colors = ['green', 'blue', 'orange', 'red',
|
|
'green', 'blue', 'orange', 'red',
|
|
'green', 'orange', 'purple', ]
|
|
linestyles = ['-', '-', '-', '-', '-', '-', '-', '-', '--', '--', '--']
|
|
alpha = [1, 1, 1, 1, 0.7, 0.7, 0.7, 0.7, 1, 1, 1]
|
|
labels, alpha, color01, color01_012, color02, color02_012, colors, colors_array, linestyles, scores,linewidths = colors_susept(
|
|
add='_mean_original', nr = 1)
|
|
|
|
frame_f = frame_f_reference(c_here, cell, f_fixed, frame_cell, freq2)
|
|
#
|
|
try: # df2s
|
|
ax.set_title(' DF2=' + str(int(dfs)) + ' Hz', fontsize=10) # , fontsize=7
|
|
except:
|
|
print('f1 f2 problem')
|
|
# embed()
|
|
#embed()
|
|
#fixed = np.unique(frame_f[f_fixed])
|
|
#frame_f[f_variable][20:30]
|
|
#frame_f = frame_f[frame_f.f1 != frame_f.f2]
|
|
for sss in index:
|
|
#sss = index[ss]
|
|
test = False#False
|
|
if test:
|
|
#if len(frame_f) > 0:
|
|
print('example')
|
|
#embed()
|
|
ax.scatter(np.array(frame_f[f_variable]), frame_f[score[sss]], zorder=100,
|
|
linestyle=np.array(linestyles)[sss], color=np.array(colors)[sss],
|
|
label=np.array(labels)[sss], alpha=np.array(alpha)[sss], s = 3, linewidths = np.array(linewidths)[sss]) # , color = colors[sss],
|
|
#plt.plot(np.array(frame_f[f_variable]), frame_f[score], zorder=100,
|
|
# linestyle=linestyles[sss], color=colors[sss],
|
|
# label=labels[sss], alpha=alpha[sss]) # , color = colors[sss],
|
|
#embed()
|
|
try:
|
|
ax.plot(np.array(frame_f[f_variable]), frame_f[scores[sss]], zorder=100,
|
|
linestyle=np.array(linestyles)[sss], color=np.array(colors)[sss], linewidth = np.array(linewidths)[sss],
|
|
label=np.array(labels)[sss], alpha=np.array(alpha)[sss]) # , color = colors[sss],
|
|
|
|
except: # - np.array(frame_f.f0)
|
|
print('f1 thing')
|
|
embed()
|
|
return frame_f
|
|
|
|
def frame_f_reference(c_here, cell, f_fixed, frame_cell, freq2):
|
|
frame_cell = frame_cell[frame_cell['c1'] == c_here]
|
|
frame_f = frame_cell[(frame_cell.cell == cell) & (frame_cell[f_fixed] == freq2)]
|
|
frame_f = frame_f[frame_f.f1 != frame_f.f2]
|
|
frame_f = frame_f[np.abs(frame_f.f1) != np.abs(frame_f.f2)]
|
|
frame_f = frame_f[np.abs(frame_f.df1) != np.abs(frame_f.df2)]
|
|
|
|
df_extra = True
|
|
if df_extra:
|
|
# das machen wir weil sonst kriegen wir da resonanz und die peaks sind sehr stark
|
|
confidence = 10
|
|
frame_f = frame_f[np.abs(np.abs(frame_f.df1) - np.abs(frame_f.df2)) > confidence]
|
|
|
|
#embed()
|
|
return frame_f
|
|
|
|
def plt_show_nonlin_effect_didactic_final2_only(min=0.2, cells=[], add_pp=50,
|
|
single_waves=['_SingleWave_', '_SeveralWave_', ], cell_start=13,
|
|
zeros='zeros', a_f1s=[0, 0.005, 0.01, 0.05, 0.1, 0.2, ], a_frs=[1],
|
|
add_half=0, show=False, nfft=int(2 ** 15), beat='', gain=1, us_name=''):
|
|
model_cells = pd.read_csv(load_folder_name('calc_model_core') + "/models_big_fit_d_right.csv")
|
|
if len(cells) < 1:
|
|
cells = model_cells.cell.loc[range(cell_start, len(model_cells))]
|
|
# embed()
|
|
plot_style()
|
|
for cell in cells:
|
|
|
|
# sachen die ich variieren will
|
|
###########################################
|
|
|
|
####### VARY HERE
|
|
for single_wave in single_waves:
|
|
if single_wave == '_SingleWave_':
|
|
a_f2s = [0] # , 0,0.2
|
|
else:
|
|
a_f2s = [0.1]
|
|
for a_f2 in a_f2s:
|
|
trials_nr = 15 # 150
|
|
|
|
titles_amp = ['base eodf', 'baseline to Zero', ]
|
|
for a, a_fr in enumerate(a_frs):
|
|
# fig, ax = plt.subplots(4 + 1, len(a_f1s), figsize=(5, 5.5)) # sharex=True,
|
|
# ax = ax.reshape(len(ax),1)
|
|
# fig = plt.figure(figsize=(12, 5.5))
|
|
default_figsize(column=2, length=3.5)
|
|
# default_setting(column = 2, length = 5.5)
|
|
grid = gridspec.GridSpec(3, 1, wspace=0.35, left=0.095, hspace=0.3, top=0.95, bottom=0.15,
|
|
right=0.98)
|
|
ax = {}
|
|
vmem = False
|
|
for aa, a_f1 in enumerate(a_f1s):
|
|
|
|
SAM, cell, damping, damping_type, deltat, eod_fish_r, eod_fr, f1, f2, freqs1, freqs2, model_params, offset, phase_right, phaseshift_fr, rate_adapted, rate_baseline_after, rate_baseline_before, sampling, spike_adapted, spikes, stimuli, stimulus_altered, stimulus_length, time_array, v_dent_output, v_mem_output = outputmodel(
|
|
a_fr, add_half, cell, model_cells, single_wave, trials_nr)
|
|
|
|
#ax[0] = plt.subplot(grid[0])
|
|
# embed()
|
|
# ax[0].margins(y = 0.05)
|
|
#ax[0].show_spines('')
|
|
ax[1] = plt.subplot(grid[0])
|
|
ax[1].show_spines('l')
|
|
ax[1].set_ylabel('$s(t)$')
|
|
#ax[0] = plt.subplot(grid[1])
|
|
#ax[0].show_spines('')
|
|
#ax[0].set_ylabel('Voltage [mV]')
|
|
|
|
# ax[1].margins(y = 0.05)
|
|
ax[2] = plt.subplot(grid[1])
|
|
ax[2].show_spines('l')
|
|
ax[2].set_ylabel('Repeat Nr.')
|
|
|
|
ax[3] = plt.subplot(grid[2])
|
|
|
|
ax[3].show_spines('lb')
|
|
# ax[3].xscalebar(0.1, -0.02, 20, 'ms', va='right', ha='bottom') ##ylim[0]
|
|
# ax[3].set_xlabel('Time [ms]')
|
|
power_extra = False
|
|
if power_extra:
|
|
ax[4] = plt.subplot(grid[:, 1])
|
|
ax[4].show_spines('lb')
|
|
|
|
#ax[0].set_xlim(0, xlim_here()) # 0.1 * 1000
|
|
# ax[1, 1].get_shared_x_axes().join(*ax[1, :])
|
|
ax[1].set_xlim(0, xlim_here())
|
|
# ax[2, 1].get_shared_x_axes().join(*ax[2, :])
|
|
ax[2].set_xlim(0, xlim_here())
|
|
# ax[3, 1].get_shared_x_axes().join(*ax[3, :])
|
|
|
|
ax[3].set_xlim(0, xlim_here())
|
|
# ax[4, 0].set_xlim(0.1 * 1000, 0.125 * 1000)
|
|
|
|
# ax[4, 1].get_shared_x_axes().join(*ax[4, :])
|
|
base_cut, mat_base = find_base_fr(spike_adapted, deltat, stimulus_length, time_array)
|
|
fr = np.mean(base_cut)
|
|
frate, isis_diff = ISI_frequency(time_array, spike_adapted[0], fill=0.0)
|
|
isi = np.diff(spike_adapted[0])
|
|
cv0 = np.std(isi) / np.mean(isi)
|
|
cv1 = np.std(frate) / np.mean(frate)
|
|
# embed()
|
|
|
|
fs = 11
|
|
# for fff, freq2 in enumerate(freqs2):
|
|
# freq2 = [freq2]
|
|
for ff, freq1 in enumerate(freqs1):
|
|
print('freq1'+str(freq1-eod_fr))
|
|
print('freq2'+str(freqs2[ff]-eod_fr))
|
|
print('a_f1' + str(a_f1))
|
|
print('a_f2' + str(freqs2[ff]))
|
|
freq1 = [freq1]
|
|
freq2 = [freqs2[ff]]
|
|
# time_var = time.time()
|
|
beat1 = freq1 - eod_fr
|
|
titles = False
|
|
if titles:
|
|
plt.suptitle('diverging from half fr by ' + str(add_half) + ' f1:' + str(
|
|
np.round(freq1)[0]) + ' f2:' + str(np.round(freq2)[0]) + ' Hz \n' + str(
|
|
beat1) + ' Hz Beat\n' + titles[ff] + titles_amp[a] + ' ' + cell + ' cv ' + str(
|
|
np.round(cv0, 3)) + '_a_f0_' + str(a_fr) + '_a_f1_' + str(a_f1) + '_a_f2_' + str(
|
|
a_f2) + ' tr_nr ' + str(trials_nr))
|
|
|
|
# if printing:
|
|
# print(cell )
|
|
# f_corr = create_beat_corr(np.array([freq1[f1]]), np.array([eod_fr]))
|
|
# create the second eod_fish1 array analogous to the eod_fish_r array
|
|
# embed()
|
|
phaseshift_f1, phaseshift_f2 = get_phaseshifts(a_f1, a_f2, phase_right, phaseshift_fr)
|
|
eod_fish1, time_fish_e = eod_fish_e_generation(time_array, a_f1, freq1, f1)
|
|
eod_fish2, time_fish_j = eod_fish_e_generation(time_array, a_f2, freq2, f2)
|
|
|
|
eod_stimulus = eod_fish1 + eod_fish2
|
|
|
|
for t in range(trials_nr):
|
|
stimulus, eod_fish_sam = create_stimulus_SAM(SAM, eod_stimulus, eod_fish_r, freq1, f1,
|
|
eod_fr,
|
|
time_array, a_f1)
|
|
|
|
# embed()
|
|
stimulus_orig = stimulus * 1
|
|
|
|
# damping variants
|
|
std_dump, max_dump, range_dump, stimulus, damping_output = all_damping_variants(
|
|
stimulus, time_array, damping_type, eod_fr, gain, damping, us_name, plot=False,
|
|
std_dump=0, max_dump=0, range_dump=0)
|
|
|
|
stimuli.append(stimulus)
|
|
# embed()
|
|
cvs, adapt_output, baseline_after, _, rate_adapted[t], rate_baseline_before[t], \
|
|
rate_baseline_after[t], spikes[t], \
|
|
stimulus_altered[t], \
|
|
v_dent_output[t], offset_new, v_mem_output[t], noise_final = simulate(cell, offset,
|
|
stimulus, f1,
|
|
**model_params)
|
|
|
|
# embed()
|
|
stimulus_altered_output = np.mean(stimulus_altered, axis=0)
|
|
# time_var2 = time.time()
|
|
|
|
# embed()
|
|
test_stimulus_stability = False
|
|
# embed()
|
|
# time_model = time_var2 - time_var # 8
|
|
|
|
# embed()ax[0, ff]
|
|
|
|
spikes_mat = [[]] * len(spikes)
|
|
pps = [[]] * len(spikes)
|
|
for s in range(len(spikes)):
|
|
spikes_mat[s] = cr_spikes_mat(spikes[s], 1 / deltat, int(stimulus_length * 1 / deltat))
|
|
pps[s], f = ml.psd(spikes_mat[s] - np.mean(spikes_mat[s]), Fs=1 / deltat, NFFT=nfft,
|
|
noverlap=nfft // 2)
|
|
pp_mean = np.mean(pps, axis=0)
|
|
sampling_rate = 1 / deltat
|
|
smoothed05 = gaussian_filter(spikes_mat, sigma=gaussian_intro() * sampling_rate)
|
|
mat05 = np.mean(smoothed05, axis=0)
|
|
beat1 = np.round(freq1 - eod_fr)[0]
|
|
#if titles:
|
|
# ax[0].set_title('a_f1 ' + str(a_f1), fontsize=fs)
|
|
|
|
# ax[0, aa].set_title('f1:'+str(np.round(freq1)[0]) +' f2:'+str(np.round(freq2)[0]) + ' Hz \n'+str(beat1) + ' Hz Beat\n' +titles[ff], fontsize = fs)
|
|
#ax[0].plot((time_array - min) * 1000, stimulus, color='grey', linewidth=0.5)
|
|
|
|
beat1 = (freq1 - eod_fr)[0]
|
|
beat2 = (freq2 - eod_fr)[0]
|
|
if 'Several' in single_wave:
|
|
freqs_beat = [np.abs(beat1), np.abs(beat2), np.abs(beat2 + beat1),
|
|
] # np.abs(beat2 - beat1)
|
|
|
|
colors_w, colors_wo, color_base, color_01, color_02, color_012 = colors_cocktailparty_all()
|
|
colors = [color_01, color_02, color_012] # 'blue'
|
|
labels = ['intruder', 'female', 'intruder+female'] # , '|B1-B2|'
|
|
else:
|
|
freqs_beat = [np.abs(beat1), np.abs(beat1) * 2, np.abs(beat1 * 3),
|
|
np.abs(beat1 * 4)] # np.abs(beat1) / 2,
|
|
colors = ['red', 'orange', 'blue', 'purple', 'black'] # 'grey',
|
|
colors = colors_didactic()
|
|
labels = labels_didactic() # colors_didactic, labels_didactic
|
|
# labels = ['S1', 'S2 / B1', 'S3', 'S4 / B2', 'f0']#'',
|
|
|
|
if 'Several' in single_wave:
|
|
color_beat = 'black'
|
|
else:
|
|
color_beat = 'black'
|
|
if (np.mean(stimulus) != 0) & (np.mean(stimulus) != 1):
|
|
# try:
|
|
stim_redo = True
|
|
if stim_redo:
|
|
eod_interp = np.cos(time_array*beat1*2*np.pi)+1
|
|
#embed()
|
|
else:
|
|
eod_interp, eod_norm = extract_am(stimulus, time_array, sampling=sampling_rate,
|
|
eodf=eod_fr,
|
|
emb=False,
|
|
extract='', norm=False)
|
|
# except:
|
|
# embed()
|
|
if (titles_amp[a] != 'baseline to Zero') and not (
|
|
(a_f2 == 0) & (a_fr == 1) & (a_f1 == 0)):
|
|
ax[1].plot((time_array - min) * 1000, eod_interp-1, color=color_beat, clip_on=True)
|
|
ax[1].set_ylim(np.min(eod_interp-1)*1.05,np.max(eod_interp-1)*1.05)
|
|
for l in range(len(spikes)):
|
|
# ax[2, aa].scatter(spikes[l]*1000, np.ones(len(spikes[l]))*(l+1), color = 'grey', s = 5)
|
|
|
|
spikes[l] = (spikes[l] - min) * 1000
|
|
# ax[5, ff].set_xlim(0.1,0.2)
|
|
# embed()
|
|
if vmem:
|
|
ax[0].plot((time_array - min) * 1000,v_mem_output[0], color = 'black')
|
|
ax[0].eventplot(np.array(spikes[0]), lineoffsets= np.max(v_mem_output[0]), color='black')
|
|
ax[0].set_xlim([0, 350])
|
|
|
|
ax[2].eventplot(np.array(spikes), color='black')
|
|
ax[3].plot((time_array - min) * 1000, mat05, color='black')
|
|
power_extra = False
|
|
if power_extra:
|
|
pp, f = ml.psd(mat05 - np.mean(mat05), Fs=1 / deltat, NFFT=nfft,
|
|
noverlap=nfft // 2)
|
|
ref = (np.max(pp))
|
|
|
|
log = 'log'
|
|
if log:
|
|
pp_mean = 10 * np.log10(pp_mean / np.max(pp_mean))
|
|
# pp_mean = np.log
|
|
plt_peaks_several(labels, freqs_beat, pp_mean, 0,
|
|
ax[4], pp_mean, colors, f, add_log=2.5,
|
|
text_extra=True, rel='rel',
|
|
exact=False, ms=14, perc=0.2, log=log, clip_on=True) # True
|
|
|
|
ax[4].plot(f, pp_mean, color='black', zorder=0)
|
|
ax[4].set_xlim([0, 350])
|
|
|
|
test = False
|
|
if test:
|
|
test_spikes_clusters(eod_fish_r, spikes, mat05, sampling, s_name='ms', resamp_fact=1000)
|
|
|
|
ax[1].set_xticks([])
|
|
ax[2].set_xticks([])
|
|
|
|
#ax[1].set_ylabel('Beat')
|
|
#ax[2].set_ylabel('Spikes')
|
|
ax[3].set_ylabel('Firing Rate [Hz]')
|
|
ax[3].set_xlabel('Time [ms]')
|
|
ax[1].set_xticks([])
|
|
ax[2].set_xticks([])
|
|
|
|
fig = plt.gcf()
|
|
# embed()
|
|
fig.tag(fig.axes, xoffs=-6, yoffs=1.3)
|
|
plt.subplots_adjust(top=0.7, left=0.15, right=0.95, hspace=0.75, wspace=0.1)
|
|
individual_tag = titles_amp[a] + ' ' + cell + ' cv ' + str(cv0) + single_wave + '_a_f0_' + str(
|
|
a_fr) + '_a_f1_' + str(a_f1) + '_a_f2_' + str(a_f2) + '_diverge_from_base_half' + str(add_half)
|
|
|
|
save_visualization(individual_tag, show, counter_contrast=0, savename='')
|
|
|
|
|
|
def plt_show_nonlin_effect_didactic_final2(min=0.2, cells=[], add_pp=50,
|
|
single_waves=['_SingleWave_', '_SeveralWave_', ], cell_start=13,
|
|
zeros='zeros', a_f1s=[0, 0.005, 0.01, 0.05, 0.1, 0.2, ], a_frs=[1],
|
|
add_half=0,xlim = [0, 350], show=False, nfft=int(2 ** 15), beat='', gain=1, us_name=''):
|
|
model_cells = pd.read_csv(load_folder_name('calc_model_core') + "/models_big_fit_d_right.csv")
|
|
if len(cells) < 1:
|
|
cells = model_cells.cell.loc[range(cell_start, len(model_cells))]
|
|
# embed()
|
|
plot_style()
|
|
for cell in cells:
|
|
|
|
# eod_fr, eod_fj, eod_fe = frequency_choice(model_params, step1, step2, three_waves, a_fj, step_type=step_type,
|
|
# symmetry=symmetry, start_mult_jammer=start_mult_jammer,
|
|
# start_mult_emitter=start_mult_emitter, start_f1=start_f1, end_f1=end_f1,
|
|
# start_f2=start_f2, end_f2=end_f2)
|
|
|
|
|
|
# sachen die ich variieren will
|
|
###########################################
|
|
|
|
####### VARY HERE
|
|
for single_wave in single_waves:
|
|
if single_wave == '_SingleWave_':
|
|
a_f2s = [0] # , 0,0.2
|
|
else:
|
|
a_f2s = [0.1]
|
|
for a_f2 in a_f2s:
|
|
trials_nr = 15 # 150
|
|
|
|
titles_amp = ['base eodf', 'baseline to Zero', ]
|
|
for a, a_fr in enumerate(a_frs):
|
|
# fig, ax = plt.subplots(4 + 1, len(a_f1s), figsize=(5, 5.5)) # sharex=True,
|
|
# ax = ax.reshape(len(ax),1)
|
|
# fig = plt.figure(figsize=(12, 5.5))
|
|
default_figsize(column=2, length=2.3) #3
|
|
# default_setting(column = 2, length = 5.5)
|
|
grid = gridspec.GridSpec(3, 2, wspace=0.35, left=0.095, hspace=0.2, top=0.94, bottom=0.25,
|
|
right=0.95)
|
|
ax = {}
|
|
for aa, a_f1 in enumerate(a_f1s):
|
|
|
|
SAM, cell, damping, damping_type, deltat, eod_fish_r, eod_fr, f1, f2, freqs1, freqs2, model_params, offset, phase_right, phaseshift_fr, rate_adapted, rate_baseline_after, rate_baseline_before, sampling, spike_adapted, spikes, stimuli, stimulus_altered, stimulus_length, time_array, v_dent_output, v_mem_output = outputmodel(
|
|
a_fr, add_half, cell, model_cells, single_wave, trials_nr)
|
|
|
|
#ax[0] = plt.subplot(grid[0])
|
|
# embed()
|
|
# ax[0].margins(y = 0.05)
|
|
#ax[0].show_spines('')
|
|
ax[1] = plt.subplot(grid[0])
|
|
ax[1].show_spines('')
|
|
|
|
# ax[1].margins(y = 0.05)
|
|
ax[2] = plt.subplot(grid[2])
|
|
ax[2].show_spines('')
|
|
|
|
ax[3] = plt.subplot(grid[4])
|
|
|
|
ax[3].show_spines('lb')
|
|
# ax[3].xscalebar(0.1, -0.02, 20, 'ms', va='right', ha='bottom') ##ylim[0]
|
|
# ax[3].set_xlabel('Time [ms]')
|
|
ax[4] = plt.subplot(grid[:, 1])
|
|
ax[4].show_spines('lb')
|
|
|
|
#ax[0].set_xlim(0, xlim_here()) # 0.1 * 1000
|
|
# ax[1, 1].get_shared_x_axes().join(*ax[1, :])
|
|
ax[1].set_xlim(0, xlim_here())
|
|
# ax[2, 1].get_shared_x_axes().join(*ax[2, :])
|
|
ax[2].set_xlim(0, xlim_here())
|
|
# ax[3, 1].get_shared_x_axes().join(*ax[3, :])
|
|
|
|
ax[3].set_xlim(0, xlim_here())
|
|
# ax[4, 0].set_xlim(0.1 * 1000, 0.125 * 1000)
|
|
|
|
# ax[4, 1].get_shared_x_axes().join(*ax[4, :])
|
|
base_cut, mat_base = find_base_fr(spike_adapted, deltat, stimulus_length, time_array)
|
|
fr = np.mean(base_cut)
|
|
frate, isis_diff = ISI_frequency(time_array, spike_adapted[0], fill=0.0)
|
|
isi = np.diff(spike_adapted[0])
|
|
cv0 = np.std(isi) / np.mean(isi)
|
|
cv1 = np.std(frate) / np.mean(frate)
|
|
# embed()
|
|
|
|
fs = 11
|
|
# for fff, freq2 in enumerate(freqs2):
|
|
# freq2 = [freq2]
|
|
#embed()
|
|
for ff, freq1 in enumerate(freqs1):
|
|
freq1 = [freq1]
|
|
freq2 = [freqs2[ff]]
|
|
# time_var = time.time()
|
|
beat1 = freq1 - eod_fr
|
|
titles = False
|
|
if titles:
|
|
plt.suptitle('diverging from half fr by ' + str(add_half) + ' f1:' + str(
|
|
np.round(freq1)[0]) + ' f2:' + str(np.round(freq2)[0]) + ' Hz \n' + str(
|
|
beat1) + ' Hz Beat\n' + titles[ff] + titles_amp[a] + ' ' + cell + ' cv ' + str(
|
|
np.round(cv0, 3)) + '_a_f0_' + str(a_fr) + '_a_f1_' + str(a_f1) + '_a_f2_' + str(
|
|
a_f2) + ' tr_nr ' + str(trials_nr))
|
|
|
|
# if printing:
|
|
# print(cell )
|
|
# f_corr = create_beat_corr(np.array([freq1[f1]]), np.array([eod_fr]))
|
|
# create the second eod_fish1 array analogous to the eod_fish_r array
|
|
# embed()
|
|
phaseshift_f1, phaseshift_f2 = get_phaseshifts(a_f1, a_f2, phase_right, phaseshift_fr)
|
|
eod_fish1, time_fish_e = eod_fish_e_generation(time_array, a_f1, freq1, f1)
|
|
eod_fish2, time_fish_j = eod_fish_e_generation(time_array, a_f2, freq2, f2)
|
|
|
|
eod_stimulus = eod_fish1 + eod_fish2
|
|
|
|
for t in range(trials_nr):
|
|
stimulus, eod_fish_sam = create_stimulus_SAM(SAM, eod_stimulus, eod_fish_r, freq1, f1,
|
|
eod_fr,
|
|
time_array, a_f1)
|
|
|
|
# embed()
|
|
stimulus_orig = stimulus * 1
|
|
|
|
# damping variants
|
|
std_dump, max_dump, range_dump, stimulus, damping_output = all_damping_variants(
|
|
stimulus, time_array, damping_type, eod_fr, gain, damping, us_name, plot=False,
|
|
std_dump=0, max_dump=0, range_dump=0)
|
|
|
|
stimuli.append(stimulus)
|
|
# embed()
|
|
cvs, adapt_output, baseline_after, _, rate_adapted[t], rate_baseline_before[t], \
|
|
rate_baseline_after[t], spikes[t], \
|
|
stimulus_altered[t], \
|
|
v_dent_output[t], offset_new, v_mem_output[t], noise_final = simulate(cell, offset,
|
|
stimulus, f1,
|
|
**model_params)
|
|
|
|
# embed()
|
|
stimulus_altered_output = np.mean(stimulus_altered, axis=0)
|
|
# time_var2 = time.time()
|
|
|
|
# embed()
|
|
test_stimulus_stability = False
|
|
# embed()
|
|
# time_model = time_var2 - time_var # 8
|
|
|
|
# embed()ax[0, ff]
|
|
|
|
spikes_mat = [[]] * len(spikes)
|
|
pps = [[]] * len(spikes)
|
|
for s in range(len(spikes)):
|
|
spikes_mat[s] = cr_spikes_mat(spikes[s], 1 / deltat, int(stimulus_length * 1 / deltat))
|
|
pps[s], f = ml.psd(spikes_mat[s] - np.mean(spikes_mat[s]), Fs=1 / deltat, NFFT=nfft,
|
|
noverlap=nfft // 2)
|
|
pp_mean = np.mean(pps, axis=0)
|
|
sampling_rate = 1 / deltat
|
|
smoothed05 = gaussian_filter(spikes_mat, sigma=gaussian_intro() * sampling_rate)
|
|
mat05 = np.mean(smoothed05, axis=0)
|
|
beat1 = np.round(freq1 - eod_fr)[0]
|
|
#if titles:
|
|
# ax[0].set_title('a_f1 ' + str(a_f1), fontsize=fs)
|
|
|
|
# ax[0, aa].set_title('f1:'+str(np.round(freq1)[0]) +' f2:'+str(np.round(freq2)[0]) + ' Hz \n'+str(beat1) + ' Hz Beat\n' +titles[ff], fontsize = fs)
|
|
#ax[0].plot((time_array - min) * 1000, stimulus, color='grey', linewidth=0.5)
|
|
|
|
beat1 = (freq1 - eod_fr)[0]
|
|
beat2 = (freq2 - eod_fr)[0]
|
|
#embed()
|
|
nr = 2
|
|
if 'Several' in single_wave:
|
|
freqs_beat = [np.abs(beat1), np.abs(beat2), np.abs(np.abs(beat2) + np.abs(beat1))
|
|
] # np.abs(beat2 - beat1),np.abs(beat2 + beat1),
|
|
|
|
colors_w, colors_wo, color_base, color_01, color_02, color_012 = colors_cocktailparty_all()
|
|
colors = [color_01, color_02, color_012] # 'blue'
|
|
labels = ['$f_{1}=%d$' % beat1 + '\,Hz', '$f_{2}=%d$' % beat2 + '\,Hz', '$f_{1} + f_{2}=f_{Base}=%d$' % (
|
|
beat1 + beat2 - 1) + '\,Hz'] #small , '|B1-B2|'
|
|
add_texts = [nr,nr+0.35,nr+0.2]#[1.1,1.1,1.1]
|
|
texts_left = [-7,-7,-7,-7]
|
|
#ax[1].set_title(
|
|
# '$f_{1}=%d$' % beat1 + '\,Hz' + ', ' + '$f_{2}=%d$' % beat2 + '\,Hz' + ', ' + '$ f_{Base}=%d$' % (
|
|
# beat1 + beat2 - 1) + '\,Hz')
|
|
|
|
else:
|
|
freqs_beat = [np.abs(beat1), np.abs(beat1) * 2, np.abs(beat1 * 3),
|
|
np.abs(beat1 * 4)] # np.abs(beat1) / 2,
|
|
colors = ['black', 'orange', 'blue', 'purple', 'black'] # 'grey',
|
|
colors = colors_didactic()
|
|
add_texts = [nr+0.1,nr+0.1,nr+0.1,nr+0.1]#[1.1,1.1,1.1,1.1]
|
|
texts_left = [3,0,0,0]
|
|
labels = labels_didactic2() # colors_didactic, labels_didactic
|
|
# labels = ['S1', 'S2 / B1', 'S3', 'S4 / B2', 'f0']#'',
|
|
|
|
if 'Several' in single_wave:
|
|
color_beat = 'black'
|
|
else:
|
|
color_beat = colors[0]
|
|
if (np.mean(stimulus) != 0) & (np.mean(stimulus) != 1):
|
|
# try:
|
|
eod_interp, eod_norm = extract_am(stimulus, time_array, sampling=sampling_rate,
|
|
eodf=eod_fr,
|
|
emb=False,
|
|
extract='', norm=False)
|
|
# except:
|
|
# embed()
|
|
if (titles_amp[a] != 'baseline to Zero') and not (
|
|
(a_f2 == 0) & (a_fr == 1) & (a_f1 == 0)):
|
|
ax[1].plot((time_array - min) * 1000, eod_interp, color=color_beat, clip_on=True)
|
|
ax[1].set_ylim(np.min(eod_interp)*0.98,np.max(eod_interp)*1.02)
|
|
for l in range(len(spikes)):
|
|
# ax[2, aa].scatter(spikes[l]*1000, np.ones(len(spikes[l]))*(l+1), color = 'grey', s = 5)
|
|
|
|
spikes[l] = (spikes[l] - min) * 1000
|
|
# ax[5, ff].set_xlim(0.1,0.2)
|
|
# embed()
|
|
ax[2].eventplot(np.array(spikes), color='black')
|
|
ax[3].plot((time_array - min) * 1000, mat05, color='black')
|
|
# embed()
|
|
|
|
pp, f = ml.psd(mat05 - np.mean(mat05), Fs=1 / deltat, NFFT=nfft,
|
|
noverlap=nfft // 2)
|
|
ref = (np.max(pp))
|
|
|
|
log = 'log'
|
|
if log:
|
|
pp_mean = 10 * np.log10(pp_mean / np.max(pp_mean))
|
|
# pp_mean = np.log
|
|
print(freqs_beat)
|
|
print(labels)
|
|
plt_peaks_several(labels, freqs_beat, pp_mean, 0,
|
|
ax[4], pp_mean, colors, f, add_log=2.5,
|
|
text_extra=True, ha = 'center', rel='rel', rot = 0, several_peaks = True,
|
|
exact=False,texts_left = texts_left, add_texts = add_texts, rots = [0,0,0,0],ms=14, perc=5, log=log, clip_on=True) # True
|
|
|
|
ax[4].plot(f, pp_mean, color='black', zorder=0)#0.45
|
|
ax[4].set_xlim(xlim)
|
|
|
|
test = False
|
|
if test:
|
|
test_spikes_clusters(eod_fish_r, spikes, mat05, sampling, s_name='ms', resamp_fact=1000)
|
|
|
|
ax[1].set_xticks([])
|
|
ax[2].set_xticks([])
|
|
|
|
ax[1].set_ylabel('Beat')
|
|
ax[2].set_ylabel('Spikes')
|
|
ax[3].set_ylabel('Firing Rate [Hz]')
|
|
if log == 'log':
|
|
ax[4].set_ylabel('dB')
|
|
else:
|
|
ax[4].set_ylabel('Amplitude [Hz]')
|
|
|
|
ax[4].set_xlabel('Frequency [Hz]')
|
|
ax[3].set_xlabel('Time [ms]')
|
|
#ax[0].set_xticks([])
|
|
ax[1].set_xticks([])
|
|
ax[2].set_xticks([])
|
|
|
|
fig = plt.gcf()
|
|
#embed()fig = fig.axes,
|
|
|
|
|
|
tag2(fig = fig, xoffs=[-4.5, -4.5, -4.5, -5.5], yoffs=1.25)
|
|
#fig.tag(fig.axes, xoffs=-6, yoffs=1.5)
|
|
plt.subplots_adjust(top=0.6, left=0.15, right=0.95, hspace=0.5, wspace=0.1)
|
|
individual_tag = titles_amp[a] + ' ' + cell + ' cv ' + str(cv0) + single_wave + '_a_f0_' + str(
|
|
a_fr) + '_a_f1_' + str(a_f1) + '_a_f2_' + str(a_f2) + '_diverge_from_base_half' + str(add_half)
|
|
|
|
save_visualization(individual_tag, show, counter_contrast=0, savename='')
|
|
|
|
|
|
def outputmodel(a_fr, add_half, cell, model_cells, single_wave, trials_nr, freqs_mult1 = None, freqs_mult2 = None):
|
|
try:
|
|
model_params = model_cells[model_cells['cell'] == cell].iloc[0]
|
|
except:
|
|
print('model extract something')
|
|
embed()
|
|
# if type(eod_fr_give) != str:
|
|
eod_fr = model_params['EODf']
|
|
offset = model_params.pop('v_offset')
|
|
# embed()
|
|
cell = model_params.pop('cell')
|
|
print(cell)
|
|
f1 = 0
|
|
f2 = 0
|
|
sampling_factor = ''
|
|
stimulus_length = 1
|
|
phaseshift_fr = 0
|
|
cell_recording = ''
|
|
mimick = 'no'
|
|
fish_morph_harmonics_var = 'harmonic'
|
|
fish_emitter = 'Alepto' # ['Sternarchella', 'Sternopygus']
|
|
fish_receiver = 'Alepto' #
|
|
phase_right = '_phaseright_'
|
|
adapt_offset = 'adaptoffsetallall2'
|
|
constant_reduction = ''
|
|
# a_fr = 1
|
|
n = 1
|
|
corr_nr = 35
|
|
lower_tol = 0.995
|
|
upper_tol = 1.005
|
|
SAM = '' # ,
|
|
damping = 0.45 # 0.65,0.2,0.5,0.2,0.6,0.45,0.6,0.35
|
|
damping_type = ''
|
|
exponential = ''
|
|
# embed()
|
|
dent_tau_change = 1
|
|
# in case you want a different sampling here we can adujust
|
|
time_array, sampling, deltat = deltat_choice(model_params, sampling_factor, eod_fr,
|
|
stimulus_length)
|
|
# generate the eod_fish_r in the four mimick variants (copy, thunderfish, mimick, just sinus)
|
|
eod_fish_r, deltat, eod_fr, time_array = eod_fish_r_generation(time_array, eod_fr, a_fr)
|
|
sampling = 1 / deltat
|
|
multiple = 0
|
|
slope = 0
|
|
add = 0
|
|
plus = 0
|
|
sig_val = (7, 1)
|
|
variant = 'sinz'
|
|
if exponential == '':
|
|
v_exp = 1
|
|
exp_tau = 0.001
|
|
# prepare for adapting offset due to baseline modification
|
|
# now we are ready for the final modeling part in this function
|
|
# embed()
|
|
rate_adapted = [[]] * trials_nr
|
|
rate_baseline_before = [[]] * trials_nr
|
|
rate_baseline_after = [[]] * trials_nr
|
|
spikes = [[]] * trials_nr
|
|
v_dent_output = [[]] * trials_nr
|
|
stimulus_altered = [[]] * trials_nr
|
|
offset_new = [[]] * trials_nr
|
|
v_mem_output = [[]] * trials_nr
|
|
spike_adapted = [[]] * trials_nr
|
|
stimuli = []
|
|
offset, spike_adapted = calc_the_model_spikes(a_fr, adapt_offset, cell, deltat, eod_fish_r, f1,
|
|
f2, model_params, offset, spike_adapted,
|
|
trials_nr)
|
|
# embed()
|
|
base_cut, mat_base = find_base_fr(spike_adapted, deltat, stimulus_length, time_array)
|
|
fr = np.mean(base_cut)
|
|
freq1 = [eod_fr / 2]
|
|
titles = ['']
|
|
if freqs_mult1:
|
|
#fr_relative = fr / eod_fr
|
|
freqs1 = [eod_fr + fr * freqs_mult1]
|
|
freqs2 = [eod_fr + fr * freqs_mult2]
|
|
#embed()
|
|
else:
|
|
if 'Several' in single_wave:
|
|
# f1 is the smaller frequency
|
|
if 'Sum' in single_wave:
|
|
freqs1 = [eod_fr + fr * 0.3]
|
|
freqs2 = [eod_fr + fr * 0.7]
|
|
else:
|
|
freqs1 = [eod_fr - fr / 2 + add_half]
|
|
freqs2 = [0] * len(freqs1)
|
|
|
|
sampling_rate = 1 / deltat
|
|
|
|
return SAM, cell, damping, damping_type, deltat, eod_fish_r, eod_fr, f1, f2, freqs1, freqs2, model_params, offset, phase_right, phaseshift_fr, rate_adapted, rate_baseline_after, rate_baseline_before, sampling, spike_adapted, spikes, stimuli, stimulus_altered, stimulus_length, time_array, v_dent_output, v_mem_output
|
|
|
|
|
|
def xlim_here():#075
|
|
return 0.1 * 1000
|
|
|
|
|
|
def calc_the_model_spikes(a_fr, adapt_offset, cell, deltat, eod_fish_r, f1, f2, model_params, offset, spike_adapted,
|
|
trials_nr, add=0, dent_tau_change=1, constant_reduction=1, n=1, exp_tau=1, exponential='',
|
|
lower_tol=0.995, plus=1, sig_val=1, slope=1, v_exp=1, zeros='zeros', upper_tol=1.005):
|
|
# embed()
|
|
for t in range(trials_nr):
|
|
# get the baseline properties here
|
|
# baseline_after,spike_adapted,rate_adapted, rate_baseline_before, rate_baseline_after, np.array(spike_times), stimulus_power, v_dent_output[int(0.05 / deltat):-1], offset, v_mem_output
|
|
if a_fr == 0:
|
|
power_here = 'sinz' + '_' + zeros
|
|
else:
|
|
power_here = 'sinz'
|
|
# embed()
|
|
cvs, adapt_output, baseline_after_b, _, rate_adapted_b, rate_baseline_before_b, rate_baseline_after_b, \
|
|
spike_adapted[t], _, _, offset_new, _, noise_final = simulate(cell, offset, eod_fish_r, f1, n, power_here,
|
|
adapt_offset=adapt_offset, add=add, alpha=alpha,
|
|
lower_tol=lower_tol, upper_tol=upper_tol,
|
|
v_exp=v_exp, exp_tau=exp_tau,
|
|
dent_tau_change=dent_tau_change,
|
|
alter_taus=constant_reduction,
|
|
exponential=exponential, exponential_mult=1,
|
|
exponential_plus=plus, exponential_slope=slope,
|
|
sig_val=sig_val, j=f2, deltat=deltat, t=t,
|
|
**model_params)
|
|
|
|
# embed()#
|
|
# print(offset_new)
|
|
# print(offset)
|
|
if t == 0:
|
|
# here we record the changes in the offset due to the adaptation
|
|
change_offset = offset - offset_new
|
|
# and we subsequently reset the offset to be the new adapted for all subsequent trials
|
|
offset = offset_new * 1
|
|
return offset, spike_adapted
|
|
|
|
|
|
def plt_show_nonlin_effect_didactic(min=0.2, text='text', cells=[], add_pp=50,
|
|
single_waves=['_SingleWave_', '_SeveralWave_', ],
|
|
cell_start=13, zeros='zeros', eod_fr_give='no',
|
|
a_f1s=[0, 0.005, 0.01, 0.05, 0.1, 0.2, ]
|
|
, a_frs=[1], add_half=0, show=False, nfft=int(2 ** 15), beat='',
|
|
nfft_for_morph=4096 * 4,
|
|
gain=1, sampling_factors=[''],
|
|
fish_receiver='Alepto', end_f1=4645,
|
|
fish_emitter='Alepto',
|
|
fish_jammer='Alepto',
|
|
redo_level='celllevel', step=10, corr='ratecorrrisidual',
|
|
us_name='', stimulus_length=0.5, start_f1=20, plot=False):
|
|
model_cells = pd.read_csv(load_folder_name('calc_model_core') + "/models_big_fit_d_right.csv")
|
|
if len(cells) < 1:
|
|
cells = model_cells.cell.loc[range(cell_start, len(model_cells))]
|
|
# embed()
|
|
for cell in cells:
|
|
|
|
# embed()
|
|
# sachen die ich variieren will
|
|
###########################################
|
|
|
|
####### VARY HERE
|
|
for single_wave in single_waves:
|
|
if single_wave == '_SingleWave_':
|
|
a_f2s = [0] # , 0,0.2
|
|
else:
|
|
a_f2s = [0.1]
|
|
for a_f2 in a_f2s:
|
|
trials_nr = 150
|
|
|
|
titles_amp = ['base eodf', 'baseline to Zero', ]
|
|
for a, a_fr in enumerate(a_frs):
|
|
# fig, ax = plt.subplots(4 + 1, len(a_f1s), figsize=(5, 5.5)) # sharex=True,
|
|
# ax = ax.reshape(len(ax),1)
|
|
fig = plt.figure(figsize=(12, 5.5))
|
|
grid = gridspec.GridSpec(4, 2, wspace=0.2, left=0.05, top=0.8, bottom=0.15,
|
|
right=0.98)
|
|
ax = {}
|
|
for aa, a_f1 in enumerate(a_f1s):
|
|
|
|
try:
|
|
model_params = model_cells[model_cells['cell'] == cell].iloc[0]
|
|
except:
|
|
print('model extract something')
|
|
embed()
|
|
# if type(eod_fr_give) != str:
|
|
eod_fr = model_params['EODf']
|
|
|
|
offset = model_params.pop('v_offset')
|
|
|
|
# embed()
|
|
cell = model_params.pop('cell')
|
|
print(cell)
|
|
f1 = 0
|
|
f2 = 0
|
|
sampling_factor = ''
|
|
stimulus_length = 1
|
|
phaseshift_fr = 0
|
|
cell_recording = ''
|
|
mimick = 'no'
|
|
|
|
fish_morph_harmonics_var = 'harmonic'
|
|
fish_emitter = 'Alepto' # ['Sternarchella', 'Sternopygus']
|
|
fish_receiver = 'Alepto' #
|
|
phase_right = '_phaseright_'
|
|
adapt_offset = 'adaptoffsetallall2'
|
|
constant_reduction = ''
|
|
# a_fr = 1
|
|
n = 1
|
|
corr_nr = 35
|
|
lower_tol = 0.995
|
|
upper_tol = 1.005
|
|
SAM = '' # ,
|
|
damping = 0.45 # 0.65,0.2,0.5,0.2,0.6,0.45,0.6,0.35
|
|
damping_type = ''
|
|
exponential = ''
|
|
# embed()
|
|
dent_tau_change = 1
|
|
# in case you want a different sampling here we can adujust
|
|
time_array, sampling, deltat = deltat_choice(model_params, sampling_factor, eod_fr,
|
|
stimulus_length)
|
|
|
|
# generate the eod_fish_r in the four mimick variants (copy, thunderfish, mimick, just sinus)
|
|
eod_fish_r, deltat, eod_fr, time_array = eod_fish_r_generation(time_array, eod_fr, a_fr,
|
|
stimulus_length)
|
|
|
|
sampling = 1 / deltat
|
|
multiple = 0
|
|
slope = 0
|
|
add = 0
|
|
plus = 0
|
|
sig_val = (7, 1)
|
|
variant = 'sinz'
|
|
if exponential == '':
|
|
v_exp = 1
|
|
exp_tau = 0.001
|
|
# prepare for adapting offset due to baseline modification
|
|
|
|
baseline_with_wave_damping, baseline_without_wave = prepare_baseline_array(time_array, eod_fr)
|
|
|
|
# now we are ready for the final modeling part in this function
|
|
# embed()
|
|
rate_adapted = [[]] * trials_nr
|
|
rate_baseline_before = [[]] * trials_nr
|
|
rate_baseline_after = [[]] * trials_nr
|
|
spikes = [[]] * trials_nr
|
|
v_dent_output = [[]] * trials_nr
|
|
stimulus_altered = [[]] * trials_nr
|
|
offset_new = [[]] * trials_nr
|
|
v_mem_output = [[]] * trials_nr
|
|
spike_adapted = [[]] * trials_nr
|
|
stimuli = []
|
|
|
|
# embed()
|
|
for t in range(trials_nr):
|
|
# get the baseline properties here
|
|
# baseline_after,spike_adapted,rate_adapted, rate_baseline_before, rate_baseline_after, np.array(spike_times), stimulus_power, v_dent_output[int(0.05 / deltat):-1], offset, v_mem_output
|
|
if a_fr == 0:
|
|
power_here = 'sinz' + '_' + zeros
|
|
else:
|
|
power_here = 'sinz'
|
|
# embed()
|
|
cvs, adapt_output, baseline_after_b, _, rate_adapted_b, rate_baseline_before_b, rate_baseline_after_b, \
|
|
spike_adapted[t], _, _, offset_new, _,noise_final = simulate(cell, offset, eod_fish_r, f1,
|
|
n, power_here,
|
|
adapt_offset=adapt_offset,
|
|
add=add, alpha=alpha,
|
|
lower_tol=lower_tol,
|
|
upper_tol=upper_tol,
|
|
v_exp=v_exp, exp_tau=exp_tau,
|
|
dent_tau_change=dent_tau_change,
|
|
alter_taus=constant_reduction,
|
|
exponential=exponential,
|
|
exponential_mult=1,
|
|
exponential_plus=plus,
|
|
exponential_slope=slope,
|
|
sig_val=sig_val, j=f2,
|
|
deltat=deltat, t=t,
|
|
**model_params)
|
|
|
|
if t == 0:
|
|
# here we record the changes in the offset due to the adaptation
|
|
change_offset = offset - offset_new
|
|
# and we subsequently reset the offset to be the new adapted for all subsequent trials
|
|
offset = offset_new * 1
|
|
|
|
# embed()
|
|
base_cut, mat_base = find_base_fr(spike_adapted, deltat, stimulus_length, time_array)
|
|
|
|
fr = np.mean(base_cut)
|
|
freq1 = [eod_fr / 2]
|
|
|
|
titles = ['']
|
|
if 'Several' in single_wave:
|
|
# f1 is the smaller frequency
|
|
if 'Sum' in single_wave:
|
|
freqs1 = [eod_fr + fr * 0.3]
|
|
freqs2 = [eod_fr + fr * 0.7]
|
|
else:
|
|
freqs1 = [eod_fr - fr / 2 + add_half]
|
|
freqs2 = [0] * len(freqs1)
|
|
sampling_rate = 1 / deltat
|
|
# embed()
|
|
|
|
|
|
# ax[0, 1].get_shared_x_axes().join(*ax[0, :])
|
|
|
|
ax[0] = plt.subplot(grid[0])
|
|
ax[1] = plt.subplot(grid[2])
|
|
ax[2] = plt.subplot(grid[4])
|
|
ax[3] = plt.subplot(grid[6])
|
|
ax[4] = plt.subplot(grid[:, 1])
|
|
ax[0].set_xlim(0, 0.125 * 1000) # 0.1 * 1000
|
|
# ax[1, 1].get_shared_x_axes().join(*ax[1, :])
|
|
ax[1].set_xlim(0, 0.125 * 1000)
|
|
# ax[2, 1].get_shared_x_axes().join(*ax[2, :])
|
|
ax[2].set_xlim(0, 0.125 * 1000)
|
|
# ax[3, 1].get_shared_x_axes().join(*ax[3, :])
|
|
|
|
ax[3].set_xlim(0, 0.125 * 1000)
|
|
# ax[4, 0].set_xlim(0.1 * 1000, 0.125 * 1000)
|
|
|
|
# ax[4, 1].get_shared_x_axes().join(*ax[4, :])
|
|
base_cut, mat_base = find_base_fr(spike_adapted, deltat, stimulus_length, time_array)
|
|
fr = np.mean(base_cut)
|
|
frate, isis_diff = ISI_frequency(time_array, spike_adapted[0], fill=0.0)
|
|
isi = np.diff(spike_adapted[0])
|
|
cv0 = np.std(isi) / np.mean(isi)
|
|
cv1 = np.std(frate) / np.mean(frate)
|
|
# embed()
|
|
|
|
fs = 11
|
|
# for fff, freq2 in enumerate(freqs2):
|
|
# freq2 = [freq2]
|
|
for ff, freq1 in enumerate(freqs1):
|
|
freq1 = [freq1]
|
|
freq2 = [freqs2[ff]]
|
|
# time_var = time.time()
|
|
beat1 = freq1 - eod_fr
|
|
plt.suptitle('diverging from half fr by ' + str(add_half) + ' f1:' + str(
|
|
np.round(freq1)[0]) + ' f2:' + str(np.round(freq2)[0]) + ' Hz \n' + str(
|
|
beat1) + ' Hz Beat\n' + titles[ff] + titles_amp[a] + ' ' + cell + ' cv ' + str(
|
|
np.round(cv0, 3)) + '_a_f0_' + str(a_fr) + '_a_f1_' + str(a_f1) + '_a_f2_' + str(
|
|
a_f2) + ' tr_nr ' + str(trials_nr))
|
|
|
|
# if printing:
|
|
# print(cell )
|
|
# f_corr = create_beat_corr(np.array([freq1[f1]]), np.array([eod_fr]))
|
|
# create the second eod_fish1 array analogous to the eod_fish_r array
|
|
# embed()
|
|
phaseshift_f1, phaseshift_f2 = get_phaseshifts(a_f1, a_f2, phase_right, phaseshift_fr)
|
|
eod_fish1, time_fish_e = eod_fish_e_generation(time_array, a_f1, freq1, f1)
|
|
eod_fish2, time_fish_j = eod_fish_e_generation(time_array, a_f2, freq2, f2)
|
|
|
|
eod_stimulus = eod_fish1 + eod_fish2
|
|
|
|
for t in range(trials_nr):
|
|
stimulus, eod_fish_sam = create_stimulus_SAM(SAM, eod_stimulus, eod_fish_r, freq1, f1,
|
|
eod_fr,
|
|
time_array, a_f1)
|
|
|
|
# embed()
|
|
stimulus_orig = stimulus * 1
|
|
|
|
# damping variants
|
|
std_dump, max_dump, range_dump, stimulus, damping_output = all_damping_variants(
|
|
stimulus, time_array)
|
|
|
|
stimuli.append(stimulus)
|
|
# embed()
|
|
cvs, adapt_output, baseline_after, _, rate_adapted[t], rate_baseline_before[t], \
|
|
rate_baseline_after[t], spikes[t], \
|
|
stimulus_altered[t], \
|
|
v_dent_output[t], offset_new, v_mem_output[t],noise_final = simulate(cell, offset,
|
|
stimulus, f1, n,
|
|
variant,
|
|
adapt_offset=adapt_offset,
|
|
add=add,
|
|
alpha=alpha,
|
|
lower_tol=lower_tol,
|
|
upper_tol=upper_tol,
|
|
v_exp=v_exp,
|
|
exp_tau=exp_tau,
|
|
dent_tau_change=dent_tau_change,
|
|
alter_taus=constant_reduction,
|
|
exponential=exponential,
|
|
exponential_mult=1,
|
|
exponential_plus=plus,
|
|
exponential_slope=slope,
|
|
sig_val=sig_val,
|
|
j=f2,
|
|
deltat=deltat, t=t,
|
|
**model_params)
|
|
|
|
# embed()
|
|
stimulus_altered_output = np.mean(stimulus_altered, axis=0)
|
|
# time_var2 = time.time()
|
|
|
|
# embed()
|
|
test_stimulus_stability = False
|
|
# embed()
|
|
# time_model = time_var2 - time_var # 8
|
|
|
|
# embed()ax[0, ff]
|
|
|
|
spikes_mat = [[]] * len(spikes)
|
|
pps = [[]] * len(spikes)
|
|
for s in range(len(spikes)):
|
|
spikes_mat[s] = cr_spikes_mat(spikes[s], 1 / deltat, int(stimulus_length * 1 / deltat))
|
|
pps[s], f = ml.psd(spikes_mat[s] - np.mean(spikes_mat[s]), Fs=1 / deltat, NFFT=nfft,
|
|
noverlap=nfft // 2)
|
|
pp_mean = np.mean(pps, axis=0)
|
|
sampling_rate = 1 / deltat
|
|
smoothed05 = gaussian_filter(spikes_mat, sigma=0.0005 * sampling_rate)
|
|
mat05 = np.mean(smoothed05, axis=0)
|
|
beat1 = np.round(freq1 - eod_fr)[0]
|
|
ax[0].set_title('a_f1 ' + str(a_f1), fontsize=fs)
|
|
|
|
# ax[0, aa].set_title('f1:'+str(np.round(freq1)[0]) +' f2:'+str(np.round(freq2)[0]) + ' Hz \n'+str(beat1) + ' Hz Beat\n' +titles[ff], fontsize = fs)
|
|
ax[0].plot((time_array - min) * 1000, stimulus, color='grey', linewidth=0.5)
|
|
if (np.mean(stimulus) != 0) & (np.mean(stimulus) != 1):
|
|
# try:
|
|
eod_interp, eod_norm = extract_am(stimulus, time_array, sampling=sampling_rate,
|
|
eodf=eod_fr,
|
|
emb=False,
|
|
extract='', norm=False)
|
|
# except:
|
|
# embed()
|
|
if (titles_amp[a] != 'baseline to Zero') and not (
|
|
(a_f2 == 0) & (a_fr == 1) & (a_f1 == 0)):
|
|
ax[1].plot((time_array - min) * 1000, eod_interp, color='red', clip_on=True)
|
|
# embed()
|
|
ax[0].plot((time_array - min) * 1000, eod_interp, color='red', clip_on=True)
|
|
# except:
|
|
# #print('eod interp not wrokiing')
|
|
# embed()
|
|
|
|
for l in range(len(spikes)):
|
|
# ax[2, aa].scatter(spikes[l]*1000, np.ones(len(spikes[l]))*(l+1), color = 'grey', s = 5)
|
|
|
|
spikes[l] = spikes[l] * 1000
|
|
# ax[5, ff].set_xlim(0.1,0.2)
|
|
# embed()
|
|
ax[2].eventplot(spikes, color='black')
|
|
ax[3].plot((time_array - min) * 1000, mat05, color='black')
|
|
# embed()
|
|
pp, f = ml.psd(mat05 - np.mean(mat05), Fs=1 / deltat, NFFT=nfft,
|
|
noverlap=nfft // 2)
|
|
ref = (np.max(pp))
|
|
# pp = 10 * np.log10(pp / ref)
|
|
# ml.psdmat05
|
|
# embed()
|
|
beat1 = (freq1 - eod_fr)[0]
|
|
beat2 = (freq2 - eod_fr)[0]
|
|
if 'Several' in single_wave:
|
|
freqs_beat = [np.abs(beat1), np.abs(beat2), np.abs(beat2 + beat1),
|
|
np.abs(beat2 - beat1)]
|
|
colors = ['red', 'green', 'orange', 'blue']
|
|
labels = ['B1', 'B2', 'B1+B2', '|B1-B2|']
|
|
else:
|
|
freqs_beat = [np.abs(beat1) / 2, np.abs(beat1), np.abs(beat1) * 2, np.abs(beat1 * 3),
|
|
np.abs(beat1 * 4)]
|
|
colors = ['grey', 'red', 'orange', 'blue', 'purple']
|
|
labels = ['', 'S1', 'S2 / B1', 'S3', 'S4 / B2']
|
|
# embed()
|
|
# ax[4] = plt.subplot(1,1,1)
|
|
for f_nr, freq_beat in enumerate(freqs_beat):
|
|
f_pos = f[np.argmin(np.abs(f - np.abs(freq_beat)))]
|
|
pp_pos = pp_mean[np.argmin(np.abs(f - np.abs(freq_beat)))]
|
|
ax[4].scatter(f_pos, pp_pos, color=colors[f_nr], label=labels[f_nr])
|
|
if text == 'text':
|
|
ax[4].text(f_pos - 15, pp_pos + add_pp, labels[f_nr], color=colors[f_nr],
|
|
fontsize=15, rotation=65)
|
|
if text != 'text':
|
|
plt.legend()
|
|
ax[4].plot(f, pp_mean, color='black')
|
|
ax[4].set_xlim([0, 700])
|
|
# embed()
|
|
# pp_pos = pp[np.argmin(np.abs(f - np.abs(beat1*2)))]
|
|
# f_pos = f[np.argmin(np.abs(f - np.abs(beat1*2)))]
|
|
# embed()
|
|
# ax[4, aa].scatter(f_pos,pp_pos, color='orange')
|
|
|
|
# ax[4, ff + 1].set_ylim([-50,0])
|
|
test = False
|
|
if test:
|
|
test_spikes_clusters(eod_fish_r, spikes, mat05, sampling, s_name='ms', resamp_fact=1000)
|
|
# embed()
|
|
|
|
# ax[4, ff + 1].axvline(x = fr, color = 'purple')
|
|
# ax[4, ff + 1].axvline(x=fr/, color='purple')
|
|
ax[0].set_xticks([])
|
|
ax[1].set_xticks([])
|
|
ax[2].set_xticks([])
|
|
|
|
ax[0].set_ylabel('Amplitude')
|
|
# ax[0].set_spines()
|
|
ax[1].set_ylabel('Beat')
|
|
ax[2].set_ylabel('Spikes')
|
|
ax[3].set_ylabel('Fr [Hz]')
|
|
ax[4].set_ylabel('Amplitude [Hz]')
|
|
ax[4].set_xlabel('f [Hz]')
|
|
ax[3].set_xlabel('Time [ms]')
|
|
ax[0].set_xticks([])
|
|
ax[1].set_xticks([])
|
|
ax[2].set_xticks([])
|
|
|
|
plt.subplots_adjust(top=0.7, left=0.15, right=0.95, hspace=0.5, wspace=0.1)
|
|
individual_tag = titles_amp[a] + ' ' + cell + ' cv ' + str(cv0) + single_wave + '_a_f0_' + str(
|
|
a_fr) + '_a_f1_' + str(a_f1) + '_a_f2_' + str(a_f2) + '_diverge_from_base_half' + str(add_half)
|
|
|
|
|
|
save_visualization(individual_tag, show, counter_contrast=0, savename='')
|
|
|
|
|
|
def get_phaseshifts(a_f1, a_f2, phase_right, phaseshift_fr):
|
|
if phase_right == '_phaseright_':
|
|
if a_f1 == 0:
|
|
phaseshift_f1 = 0
|
|
phaseshift_f2 = 0
|
|
if a_f2 == 0:
|
|
phaseshift_f1 = 0
|
|
phaseshift_f2 = 0
|
|
if (a_f2 != 0) & (a_f1 != 0):
|
|
phaseshift_f1 = 2 * np.pi / 4
|
|
phaseshift_f2 = 2 * np.pi / 4
|
|
else:
|
|
phaseshift_f1 = phaseshift_fr
|
|
phaseshift_f2 = phaseshift_fr
|
|
return phaseshift_f1, phaseshift_f2
|
|
|
|
|
|
def test_spikes_clusters(eod_fish_r, spikes, mat05, sampling, s_name='s', show=True, resamp_fact=1):
|
|
fig, ax = plt.subplots(3, 1, sharex=True)
|
|
time_array = np.arange(0, (len(mat05) / sampling) * resamp_fact, (1 / sampling) * resamp_fact)
|
|
ax[0].plot(time_array, eod_fish_r)
|
|
ax[0].set_ylabel('EOD')
|
|
ax[1].eventplot(spikes)
|
|
ax[1].set_ylabel('Nr spikes')
|
|
|
|
ax[2].plot(time_array, mat05)
|
|
ax[2].set_xlabel('Time [' + str(s_name) + ']')
|
|
ax[2].set_ylabel('Fr [Hz]')
|
|
save_visualization()
|
|
if show:
|
|
plt.show()
|
|
|
|
|
|
def plt_serach_nonlinearity_cell2(color=['red', 'blue', 'orange', 'purple'], log='', show=True, cells=[], add_half=0,
|
|
a_fr=1, zeros='zeros'):
|
|
trials_nr = [500] # , 500, 500, ] # [1, 100, 10, 150, 15]#, 300, 30, 500
|
|
stimulus_lengths = [100] # , 10, 30, ] # [10, 10, 100, 10, 100]#, 10, 100, 10
|
|
for c, length in enumerate(stimulus_lengths):
|
|
row, col = find_row_col(cells) # [
|
|
|
|
# ax = np.concatenate(ax)
|
|
for t, cell in enumerate(cells):
|
|
plot_style()
|
|
default_figsize(column=2, length=1.95) #.5 , figsize=(5.5, 5,)
|
|
# fig, axs = plt.subplots(1, 2)#, sharex=True, sharey=True
|
|
# plt.subplots_adjust(left=0.11, hspace=0.3, wspace=0.27, right=0.99)
|
|
|
|
grid = gridspec.GridSpec(1, 1, left=0.09, bottom=0.27, hspace=0.3,top = 0.97, wspace=0.27,
|
|
right=0.97)#width_ratios=[1.7, 1],
|
|
ffts = ['fft4']
|
|
# fig = plt.figure()
|
|
|
|
sampling = '_dt'
|
|
|
|
# ax = np.reshape(ax, (len(samplings), len(ffts)))#500
|
|
for f, fft in enumerate(ffts):
|
|
labels = labels_didactic2()
|
|
|
|
names = ['_all'] # '_mean', '_one',
|
|
axes = []
|
|
for n, name in enumerate(names):
|
|
names_key = ['c_0' + name + sampling, 'c_1' + name + sampling, 'c_2' + name + sampling,
|
|
'c_3' + name + sampling]
|
|
|
|
###########################################################################
|
|
# embed()
|
|
first = True
|
|
if first:
|
|
save_name = 'calc_nonlinearity_contrasts-_beat__AddToHalfFr_frange_from_10_to_400_in_0.3_afr_1_zeros_trNr_500_fft5__dev_original_len_100_adaptoffset_bisecting__transient_50s__until_0.03'
|
|
frame = pd.read_pickle(load_folder_name(
|
|
'calc_model') + '/' + save_name + '.pkl') # calc_nonlinearity_contrasts-_beat__AddToHalfFr_frange_from_10_to_400_in_1_noAdapt__afr_1_zeros_trNr_500_fft5__dev_original_len_30_adaptoffset_bisecting__transient_1s__until_0.03
|
|
keys = ['c_0_all_dt', 'c_1_all_dt', 'c_2_all_dt', 'c_3_all_dt']
|
|
ax = plt.subplot(grid[0])
|
|
axes.append(ax)
|
|
ax.axvline(frame.fr.unique() / 2, color='grey', linewidth=0.5) # 'Fr='++' Hz'
|
|
for s, score_name in enumerate(names_key):
|
|
# for k, key in enumerate(keys):
|
|
|
|
ax.plot(np.abs(frame.f1 - frame.eod_fr), frame[score_name], color=color[s], label=labels[s].replace('\n',','))
|
|
# axs[0].scatter(np.abs(frame.f1 - frame.eod_fr), frame[score_name], color=color[s],
|
|
# label=labels[s])
|
|
|
|
# ax.axvline(frame.fr.unique(), color= 'grey', linewidth = 0.5)
|
|
ax.set_xlim(0, 250)
|
|
ax.set_xlabel('Frequency [Hz]')
|
|
ax.set_ylabel('Power [Hz]')#Signal amplitude
|
|
ax.show_spines('lb')
|
|
try:
|
|
ax.legend(loc=(0.7, 0.5), prop = {'size': 9})
|
|
except:
|
|
a = 5
|
|
#embed()
|
|
##plt.show()
|
|
###########################################################################
|
|
# ax = axs[1]
|
|
save_name = save_name_nonlinearity(add_half, trials_nr=trials_nr[c],
|
|
stimulus_length=stimulus_lengths[c], dev='original', fft=fft,
|
|
a_fr=a_fr, zeros=zeros)
|
|
save_name = load_folder_name(
|
|
'calc_model') + '/calc_nonlinearity_contrasts-_beat__AddToHalfFr_0_afr_1_zeros_trNr_500_fft5__dev_original_len_100_adaptoffset_bisecting__transient_50s__until_0.5.pkl'
|
|
# embed()#first='c_0_all_dt', second='c_1_all_dt', third='c_2_all_dt',forth='c_3_all_dt'
|
|
|
|
|
|
individual_tag = cell + '_AddHalf_' + str(add_half) + '_' + log
|
|
# save_visualization()
|
|
|
|
fig = plt.gcf()
|
|
fig.tag(axes,xoffs = -7.5)
|
|
#ax = make_simple_tags(axes)
|
|
|
|
# ax = make_tags(axes = axes,xoffs=-4, yoffs=1.2)
|
|
save_visualization(individual_tag, show, counter_contrast=0, savename='')
|
|
|
|
if show:
|
|
plt.show()
|
|
# embed()
|
|
|
|
def plt_serach_nonlinearity_cell(color=['red', 'blue', 'orange', 'purple'], log='', show=True, cells=[], add_half=0,
|
|
a_fr=1, zeros='zeros'):
|
|
trials_nr = [500]#, 500, 500, ] # [1, 100, 10, 150, 15]#, 300, 30, 500
|
|
stimulus_lengths = [100]#, 10, 30, ] # [10, 10, 100, 10, 100]#, 10, 100, 10
|
|
for c, length in enumerate(stimulus_lengths):
|
|
row, col = find_row_col(cells)#[
|
|
|
|
# ax = np.concatenate(ax)
|
|
for t, cell in enumerate(cells):
|
|
plot_style()
|
|
default_settings(column=2, length=3.5) #, figsize=(5.5, 5,)
|
|
#fig, axs = plt.subplots(1, 2)#, sharex=True, sharey=True
|
|
#plt.subplots_adjust(left=0.11, hspace=0.3, wspace=0.27, right=0.99)
|
|
|
|
grid = gridspec.GridSpec(1, 2, width_ratios = [1.7, 1], left=0.11, bottom = 0.15, hspace=0.3, wspace=0.27, right=0.99)
|
|
ffts = ['fft4']
|
|
# fig = plt.figure()
|
|
|
|
sampling = '_dt'
|
|
|
|
# ax = np.reshape(ax, (len(samplings), len(ffts)))#500
|
|
for f, fft in enumerate(ffts):
|
|
labels = labels_didactic()
|
|
|
|
names = ['_all'] # '_mean', '_one',
|
|
axes = []
|
|
for n, name in enumerate(names):
|
|
names_key = ['c_0' + name + sampling, 'c_1' + name + sampling, 'c_2' + name + sampling,
|
|
'c_3' + name + sampling]
|
|
|
|
###########################################################################
|
|
#embed()
|
|
first = True
|
|
if first:
|
|
save_name = 'calc_nonlinearity_contrasts-_beat__AddToHalfFr_frange_from_10_to_400_in_0.3_afr_1_zeros_trNr_500_fft5__dev_original_len_100_adaptoffset_bisecting__transient_50s__until_0.03'
|
|
frame = pd.read_pickle(load_folder_name('calc_model') + '/' + save_name + '.pkl')#calc_nonlinearity_contrasts-_beat__AddToHalfFr_frange_from_10_to_400_in_1_noAdapt__afr_1_zeros_trNr_500_fft5__dev_original_len_30_adaptoffset_bisecting__transient_1s__until_0.03
|
|
keys = ['c_0_all_dt', 'c_1_all_dt', 'c_2_all_dt', 'c_3_all_dt']
|
|
ax = plt.subplot(grid[0])
|
|
axes.append(ax)
|
|
ax.axvline(frame.fr.unique() / 2, color='grey', linewidth=0.5) # 'Fr='++' Hz'
|
|
for s, score_name in enumerate(names_key):
|
|
#for k, key in enumerate(keys):
|
|
|
|
|
|
ax.plot(np.abs(frame.f1-frame.eod_fr), frame[score_name], color = color[s], label = labels[s])
|
|
#axs[0].scatter(np.abs(frame.f1 - frame.eod_fr), frame[score_name], color=color[s],
|
|
# label=labels[s])
|
|
|
|
#ax.axvline(frame.fr.unique(), color= 'grey', linewidth = 0.5)
|
|
ax.set_xlim(0,250)
|
|
ax.set_xlabel('Beat [Hz]')
|
|
ax.set_ylabel('Signal amplitude [Hz]')
|
|
ax.show_spines('lb')
|
|
try:
|
|
ax.legend(loc=(0.7, 0.8))
|
|
except:
|
|
a = 5
|
|
##plt.show()
|
|
###########################################################################
|
|
#ax = axs[1]
|
|
save_name = save_name_nonlinearity(add_half, trials_nr=trials_nr[c],
|
|
stimulus_length=stimulus_lengths[c], dev='original', fft=fft,
|
|
a_fr=a_fr, zeros=zeros)
|
|
save_name = load_folder_name('calc_model') + '/calc_nonlinearity_contrasts-_beat__AddToHalfFr_0_afr_1_zeros_trNr_500_fft5__dev_original_len_100_adaptoffset_bisecting__transient_50s__until_0.5.pkl'
|
|
#embed()#first='c_0_all_dt', second='c_1_all_dt', third='c_2_all_dt',forth='c_3_all_dt'
|
|
|
|
ax = plt.subplot(grid[1])
|
|
axes.append(ax)
|
|
if os.path.exists(save_name):
|
|
frame = pd.read_pickle(save_name) # load_folder_name('calc_model')+'/nonlinearity_amp_var2.pkl'
|
|
|
|
frame_cell = frame[frame['cell'] == cell]
|
|
|
|
if fft == 'psd':
|
|
plt_nonlin(ax[t, f], frame_cell)
|
|
# if t == 0:
|
|
ax[t, f].set_title('trNr ' + str(
|
|
trials_nr[0]) + ' len ' + str(stimulus_lengths[0]) + ' ' + fft + ' FinalTr ' + str(
|
|
np.round(stimulus_lengths[0] * trials_nr[0] * np.mean(frame_cell.fr.unique()) / 2)))
|
|
else:
|
|
# embed()
|
|
|
|
for n, name in enumerate(names):
|
|
# if t == 0:
|
|
# embed()
|
|
# if t == 0:
|
|
|
|
title = False
|
|
if title:
|
|
plt.suptitle('trNr ' + str(
|
|
trials_nr[0]) + ' len ' + str(
|
|
stimulus_lengths[0]) + ' ' + fft + ' ' + name + ' Sampling ' + str(
|
|
sampling) + ' FinalTr ' + str(
|
|
np.round(stimulus_lengths[0] * trials_nr[0] * np.nanmean(frame_cell.fr.unique()) / 2)))
|
|
ax.set_title(cell + ' CV ' + str(np.mean(frame_cell.cv.unique())))
|
|
# embed()
|
|
ax_axis = frame_cell['a_f1'] * 100
|
|
for s, score_name in enumerate(names_key):
|
|
#ax.text(1,1,,ha = 'right', tranfor, = ax.transdata)
|
|
ax.plot(ax_axis[1::], frame_cell[score_name][1::],
|
|
color=color[s], label=labels[s])
|
|
|
|
|
|
ax.set_ylabel('Signal Amplitude [Hz]')
|
|
ax.set_aspect('equal')
|
|
ax.show_spines('lb')
|
|
ax.set_xlabel('contrast [%]')
|
|
# embed()
|
|
|
|
# embed()
|
|
if log == 'log':
|
|
# for r in range(row):
|
|
# for c in range(col):
|
|
ax.set_yscale('log')
|
|
ax.set_xscale('log')
|
|
# ax[r, c].set_xlim(0, 20)
|
|
|
|
individual_tag = cell + '_AddHalf_' + str(add_half) + '_' + log
|
|
# save_visualization()
|
|
ax = make_simple_tags(axes)
|
|
|
|
#ax = make_tags(axes = axes,xoffs=-4, yoffs=1.2)
|
|
save_visualization(individual_tag, show, counter_contrast=0, savename='')
|
|
|
|
if show:
|
|
plt.show()
|
|
# embed()
|
|
|
|
|
|
def labels_didactic():
|
|
labels = ['Beat ', '2 Beat / Baseline Fr ', '3 Beat', '4 Beat / 2 Baseline Fr']
|
|
return labels #$\cdot$
|
|
|
|
def labels_didactic2():
|
|
labels = [r' $f_{Stim}$ ', '$2f_{Stim}$, $f_{Base}$ ', r' $3f_{Stim}$ ', ' $4f_{Stim}$, $2 f_{Base}$']
|
|
return labels #$\cdot$
|
|
|
|
def make_simple_tags(axes, xpos = -0.03, ypos = 1.02,letters = ['A', 'B'], ):
|
|
fig = plt.gcf()
|
|
ppi = 72.0 # points per inch:
|
|
fs = mpl.rcParams['font.size'] * fig.dpi / ppi
|
|
for aa, ax in enumerate(axes):
|
|
|
|
ax.text(xpos, ypos, letters[aa], transform=ax.transAxes, ha='right', va='bottom', fontsize=fs)
|
|
return ax
|
|
|
|
|
|
def make_tags(axes = [],xoffs=-3, yoffs=1.2):
|
|
|
|
fig = plt.gcf()
|
|
if len(axes)< 1:
|
|
axes = plt.gca()
|
|
fig.tag(axes, xoffs = xoffs, yoffs = yoffs )
|
|
#embed()
|
|
return axes
|
|
|
|
|
|
def plt_nonlin(ax, frame_cell, first='c_0_all_dt', second='c_1_all_dt', third='c_2_all_dt',
|
|
forth='c_3_all_dt'): # first = 'a_fundamental_original', second = 'a_h1_original', third = 'a_h2_original', forth = 'a_h3_original'
|
|
# embed()
|
|
|
|
ax.plot(frame_cell['a_f1'] * 100, frame_cell[first], color='blue', label='S1')
|
|
ax.plot(frame_cell['a_f1'] * 100, frame_cell[second], color='orange',
|
|
label='S2 / B1 ') # Baseline f [B1] / Stimulus [S2]
|
|
ax.plot(frame_cell['a_f1'] * 100, frame_cell[third], color='green', label='S3')
|
|
ax.plot(frame_cell['a_f1'] * 100, frame_cell[forth], color='red',
|
|
label='S4 / B2')
|
|
|
|
|
|
def save_name_nonlinearity(add_half, a_f1_end=0.2, transient_s=0, adapt_offset='', n=1, stimulus_length=2, freq_type='',
|
|
adapt='',a_f2s =[0], freqs2 = [0], dev='original', fft='fft', a_fr=1, trials_nr=150, zeros='zeros'):
|
|
# if version == 'psd':
|
|
# version_name = ''
|
|
# else:
|
|
|
|
dev_name = '_dev_' + str(dev)
|
|
version_name = '_' + fft + '_'
|
|
# if trials_nr == 150:
|
|
trials_nr_name = ''
|
|
# a_f1_end =
|
|
if a_f1_end == 0.2:
|
|
end_name = ''
|
|
else:
|
|
end_name = '_until_' + str(a_f1_end)
|
|
trials_nr_name = '_trNr_' + str(trials_nr)
|
|
if transient_s != 0:
|
|
transient_s_name = '_transient_' + str(transient_s) + 's_'
|
|
else:
|
|
transient_s_name = ''
|
|
if n != 1:
|
|
n_name = '_power' + str(n)
|
|
else:
|
|
n_name = ''
|
|
|
|
a_fr_name = '_afr_' + str(a_fr) + '_' + zeros
|
|
if 'psd' in fft:
|
|
freq_type = ''
|
|
# a_fr_name = ''
|
|
# if add_half != 0:
|
|
add_half_name = '_AddToHalfFr_' + str(add_half)
|
|
# else:
|
|
# add_half_name = ''
|
|
if adapt_offset != '':
|
|
adapt_offset_name = '_' + adapt_offset + '_'
|
|
else:
|
|
adapt_offset_name = ''
|
|
# die funktion dazu ist calc_nonlinearity_contrasts NOT calc_nonlinearity_contrasts_fft
|
|
#save_dir = #calc_nonlinearity_contrasts
|
|
save_dir = load_folder_name('calc_model') # '../calc_model/'
|
|
|
|
#return save_dir + '/'#load_folder_name('calc_model') + '/nonlinearity_amp_var2'
|
|
load_function = find_load_function()
|
|
save_dir = load_savedir(level=0)
|
|
#embed()
|
|
#find_load_function
|
|
#calc_nonlinearity_contrasts
|
|
#save_dir
|
|
if (len(freqs2) != 0) & (len(a_f2s) != 0):
|
|
if (len(freqs2)>1) & (len(a_f2s) == 1):
|
|
freq_afname = 'frange_from_'+str(freqs2[0])+'_to_'+str(freqs2[-1])+'_in_'+str(np.diff(freqs2)[0])+'_af2_'+str(a_f2s[0])#a_f2s =a_f2s, freqs2 = freqs2
|
|
elif (len(freqs2)>1) & (len(a_f2s) > 1):
|
|
freq_afname = 'frange_from_'+str(freqs2[0])+'_to_'+str(freqs2[-1])+'_in_'+str(np.diff(freqs2)[0])+'af2range_from_'+str(a_f2s[0])+'_to_'+str(a_f2s[-1])+'_in_'+str(np.diff(a_f2s)[0])#a_f2s =a_f2s, freqs2 = freqs2
|
|
else:
|
|
freq_afname = 'freq2_' + str(freqs2[0]) + '_af2_' + str(a_f2s[0])
|
|
save_name = load_folder_name('calc_model') + '/' + calc_nonlinearity_contrasts.__name__ + '-' + freq_type + add_half_name + a_fr_name + trials_nr_name + version_name + dev_name + '_len_' + str(
|
|
stimulus_length) + adapt + adapt_offset_name + n_name + transient_s_name + end_name + freq_afname +'.pkl'
|
|
return save_name
|
|
|
|
|
|
def plt_single_phaselockloss(colors, frame_cell, df, scores, cell, ax, df_name = 'df'):
|
|
frame_df = frame_cell[(frame_cell[df_name] == df) | (np.isnan(frame_cell[df_name]))]
|
|
mt_types = frame_cell.mt_type.unique()
|
|
if len(mt_types) < 1:
|
|
embed()
|
|
for s, score in enumerate(scores):
|
|
ax.set_title(cell[0:14] + ' DF=' + str(df), fontsize=8)
|
|
score_vals = []
|
|
score_vals05 = []
|
|
score_vals25 = []
|
|
score_vals75 = []
|
|
score_vals95 = []
|
|
contrasts_here = []
|
|
for m, mt_type in enumerate(mt_types):
|
|
if 'base' in mt_type:
|
|
marker = '*'
|
|
elif 'chirp' in mt_type:
|
|
marker = '^'
|
|
elif 'SAM' in mt_type:
|
|
marker = '.'
|
|
else:
|
|
marker = 'o'
|
|
frame_cell_type = frame_cell[frame_cell.mt_type == mt_type]
|
|
#frame_df = frame_cell[(frame_cell[df_name] == df) | (np.isnan(frame_cell[df_name]))]
|
|
#mt_types = frame_cell.mt_type.unique()
|
|
frame_type = frame_df[frame_df.mt_type == mt_type]
|
|
if mt_type != 'base':
|
|
frame_type = frame_type.groupby('contrast').mean().reset_index()
|
|
frame_type75 = frame_type.groupby('contrast').quantile(0.75).reset_index()
|
|
frame_type25 = frame_type.groupby('contrast').quantile(0.25).reset_index()
|
|
frame_type95 = frame_type.groupby('contrast').quantile(1).reset_index()
|
|
frame_type05 = frame_type.groupby('contrast').quantile(0).reset_index()
|
|
# embed()
|
|
# embed()
|
|
contasts = np.array(list(map(float, frame_type['contrast'])))
|
|
frame_type['contrast'] = contasts
|
|
sorted = np.argsort(contasts)
|
|
score_val = frame_type[score].iloc[sorted]
|
|
score_val75 = frame_type75[score].iloc[sorted]
|
|
score_val25 = frame_type25[score].iloc[sorted]
|
|
score_val95 = frame_type95[score].iloc[sorted]
|
|
score_val05 = frame_type05[score].iloc[sorted]
|
|
contrast_here = frame_type['contrast'].iloc[sorted]
|
|
nr = 1
|
|
else:
|
|
score_val = [np.mean(frame_type[score])]
|
|
score_val75 = [np.percentile(frame_type[score],75)]
|
|
score_val25 = [np.percentile(frame_type[score],25)]
|
|
score_val95 = [np.percentile(frame_type[score],100)]
|
|
score_val05 = [np.percentile(frame_type[score],0)]
|
|
contrast_here = [0] # np.zeros(len(frame_type[score]))
|
|
nr = 2
|
|
#if ('chirp' in mt_type):
|
|
# contrast_here = contrast_here * 100
|
|
try:
|
|
ax.scatter(contrast_here, score_val, marker=marker, color=colors[s], zorder=100 * nr, alpha=0.5,
|
|
s=8.5)
|
|
except:
|
|
print('axis problem')
|
|
embed()
|
|
score_vals.extend(np.array(score_val))
|
|
score_vals05.extend(np.array(score_val05))
|
|
score_vals95.extend(np.array(score_val95))
|
|
score_vals75.extend(np.array(score_val75))
|
|
score_vals25.extend(np.array(score_val25))
|
|
|
|
contrasts_here.extend(np.array(contrast_here))
|
|
# if ('chirp' in mt_type) & (len(contrast_here) > 0):
|
|
#embed()
|
|
ax.fill_between(np.array(contrasts_here)[np.argsort(contrasts_here)], np.array(score_vals05)[np.argsort(contrasts_here)], np.array(score_vals95)[np.argsort(contrasts_here)],color=colors[s], alpha = 0.2)
|
|
ax.fill_between(np.array(contrasts_here)[np.argsort(contrasts_here)], np.array(score_vals25)[np.argsort(contrasts_here)],
|
|
np.array(score_vals75)[np.argsort(contrasts_here)], color=colors[s], alpha=0.6)
|
|
|
|
ax.plot(np.array(contrasts_here)[np.argsort(contrasts_here)],
|
|
np.array(score_vals)[np.argsort(contrasts_here)], color=colors[s], label=score)
|
|
# ax[i].set_t
|
|
|
|
|
|
def plt_beats_modulation_several_with_overview_nice_from_three_final(only_first=True, limit=1,
|
|
duration_exclude=0.45, nfft=int(4096), show=False,
|
|
save=True,
|
|
position=0, redo=False):
|
|
# Function to load the experimental data
|
|
save_name = 'beat_results_smoothed_limit' + str(limit) + '_minimalduration_' + str(duration_exclude) + '_all'
|
|
print(save_name)
|
|
datas_new = []
|
|
old_cells = False
|
|
if old_cells:
|
|
# das ist falls ich die alten Datensätze untersuchen will
|
|
datasets = ['2021-08-03-ab-invivo-1', '2019-09-10-ad-invivo-1', '2019-11-13-aa-invivo-1',
|
|
'2021-06-18-ae-invivo-1']
|
|
data_names = ['2017-10-25-am-invivo-1', '2017-08-15-ad-invivo-1',
|
|
'2018-03-28-aa-invivo-1', '2019-11-13-aa-invivo-1',
|
|
'2019-09-10-ad-invivo-1', '2019-10-28-ag-invivo-1',
|
|
|
|
'2021-06-18-ae-invivo-1',
|
|
|
|
'2018-09-06-au-invivo-1',
|
|
'2022-01-05-aa-invivo-1', '2022-02-10-ac-invivo-1',
|
|
'2017-07-18-ai-invivo-1', '2019-11-18-ab-invivo-1',
|
|
'2022-02-10-ad-invivo-1', '2018-03-22-af-invivo-1',
|
|
'2019-05-15-aj-invivo-1', '2018-08-14-ac-invivo-1',
|
|
'2020-08-12-ab-invivo-1', '2020-08-03-ad-invivo-1',
|
|
'2021-08-03-ab-invivo-1', '2018-08-14-aa-invivo-1',
|
|
'2018-01-19-aj-invivo-1', '2018-08-14-ad-invivo-1',
|
|
'2019-10-21-aj-invivo-1', '2019-09-10-ac-invivo-1',
|
|
'2018-09-06-as-invivo-1', '2019-09-11-ae-invivo-1',
|
|
'2022-01-08-aa-invivo-1', '2019-05-15-ai-invivo-1',
|
|
'2018-08-24-ai-invivo-1', '2018-06-25-aa-invivo-1']
|
|
datasets = [
|
|
'2021-08-03-ab-invivo-1'] # , '2021-06-18-ae-invivo-1','2021-08-03-aa-invivo-1','2019-09-10-ad-invivo-1', '2019-11-13-aa-invivo-1', ]
|
|
datasets = ['2021-08-03-ae-invivo-1', '2021-08-03-ab-invivo-1']
|
|
datasets, data_dir = find_all_dir_cells()
|
|
datasets = np.sort(datasets)[::-1]
|
|
# datasets, frame_desired, mt_names, tag_names = find_out_cells_big()
|
|
frame_desired = pd.read_csv('../code/calc_base/find_contrasts_SAMs-SAM_amplitudes.csv')
|
|
frame_big = frame_desired[(frame_desired.contrast > 29) | (frame_desired.contrast_true > 29)]
|
|
datasets = frame_big.cell.unique()
|
|
# frame_big.contrast_true#
|
|
datasets = datasets[::-1]
|
|
datasets = ['2020-10-29-ac-invivo-1'] # ['2020-10-20-ad-invivo-1',
|
|
# '2020-10-29-ac-invivo-1',
|
|
# '2020-10-29-ai-invivo-1',
|
|
|
|
# '2018-09-13-aa-invivo-1'
|
|
# ]
|
|
else:
|
|
frame = pd.read_pickle(load_folder_name(
|
|
'calc_cocktailparty') + '/calc_data_peaks_threewave-spikes_all_psdEOD_1_nfft_16384[05,original]_psdEOD__sqrt__points_5_ALL_.pkl')
|
|
# path_new2 = load_folder_name('calc_cocktailparty') + '/calc_data_peaks_threewave-spikes_all_psdEOD_1_nfft_16384[05,original]_psdEOD__sqrt__points_5_ALL_.pkl'
|
|
|
|
datasets = np.sort(frame.cell.unique())[::-1]
|
|
# aber ich will ja die neuen Datensätzte
|
|
|
|
datasets, loss, gain = find_cells_for_phaselocking()
|
|
datasets = ['2023-05-12-ar-invivo-1']
|
|
frame_all = pd.read_pickle(load_folder_name(
|
|
'calc_cocktailparty') + '/calc_data_peaks_threewave-spikes_all_psdEOD_1_nfft_16384[05,original]_psdEOD__sqrt__points_5_ALL_.pkl') # pd.read_pickle('../code/calc_phaselocking/calc_phaselocking-phaselocking5_big.pkl')
|
|
# cells_for_phaselocking, loss, gain = find_cells_for_phaselocking()
|
|
# embed()
|
|
colors = ['red', 'green', 'purple', 'blue']
|
|
markers = ['.', 'o', '*', '+']
|
|
|
|
plot_style()
|
|
default_settings(column=2, length=6)
|
|
for i, cell in enumerate(datasets):
|
|
|
|
# dataset = '2021-06-18-ae-invivo-1'
|
|
# embed()
|
|
# if cont:
|
|
path = load_folder_name('data') + 'cells/' + cell + '/' + cell + ".nix" # cell.split(os.path.sep)[-1]
|
|
path2 = '../data/cells/' + cell + '/samspikes.dat'
|
|
path3 = '../data/cells/' + cell + '/samspikes1.dat'
|
|
print(cell)
|
|
# embed()
|
|
if os.path.exists(path):
|
|
file = nix.File.open(path, nix.FileMode.ReadOnly)
|
|
b = file.blocks[0]
|
|
cont2 = False
|
|
names = []
|
|
names_dataarrays = []
|
|
for stims in b.data_arrays:
|
|
# this seems to be reasonable because the only data with sinewave with higher number was not useful (das betrifft aber nur 2019-05-07-ab und 2019-05-07-ac, wobei wenn ich jetzt ganau schau scheinen das nur komische trials zu sein die wir nicht wirklich brauchen
|
|
if 'sinewave-1_Contrast' in stims.name:
|
|
names.append(stims.name)
|
|
names_dataarrays.append(stims.name)
|
|
# tag_names = find_tags(b, names='sam')
|
|
# tag_names = find_SAM_sine(b)
|
|
'sinewave''SAM'
|
|
# tags_all = find_tags_all(b)
|
|
all_mt_names = find_mt_all(b)
|
|
# embed()
|
|
sam = find_mt(b, 'SAM')
|
|
sine = find_mt(b, 'sine')
|
|
gwn = find_mt(b, 'gwn')
|
|
if (len(sine) > 0) or (len(sam) > 0):
|
|
cont2 = True
|
|
|
|
test = False
|
|
if test:
|
|
test_in_plot_phaselocking(b, path)
|
|
|
|
if cont2 == True:
|
|
|
|
counter = 0
|
|
choice = 'SAM_sinewave' # 'SAM'#'SAM_sinewave'
|
|
|
|
DF1s, DF2s, frame_data_cell, c2_unique, c2_unique_big, c1_unique_big, c1_unique = get_dfs_and_contrasts_from_calccocktailparty(
|
|
cell, frame_all)
|
|
|
|
if only_first:
|
|
DF1s_here = [DF1s[0]]
|
|
DF2s_here = [DF2s[0]]
|
|
else:
|
|
DF1s_here = DF1s # [0]]
|
|
DF2s_here = DF2s # [0]]
|
|
|
|
DF1s_here = [DF1s[0]]
|
|
DF2s_here = [DF2s[0]]
|
|
for d1, DF1 in enumerate(DF1s_here):
|
|
for d2, DF2 in enumerate(DF2s_here):
|
|
|
|
# das ist blöd man sollte die abgespeicherten Ms machen
|
|
|
|
frame_df0 = frame_data_cell[(np.round(frame_data_cell.m1,2) == DF1) & (np.round(frame_data_cell.m2,2) == DF2)]
|
|
frame_df0 = frame_data_cell[(np.abs(frame_data_cell.m1 - DF1) < 0.01) & (
|
|
np.abs(frame_data_cell.m2 - DF2) < 0.01)]
|
|
contrasts_2_chosen = np.sort(np.unique(frame_df0.c2)) # c1_unique_big[0:5]
|
|
|
|
for c_nr2, c2 in enumerate(contrasts_2_chosen):
|
|
#embed()
|
|
plt.suptitle(cell + ' DF1=' + str(DF1) + ' DF2=' + str(DF2))
|
|
|
|
plt.figure()
|
|
gs0 = gridspec.GridSpec(1, 2, width_ratios=[4, 1], hspace=0.4, left=0.045,
|
|
right=0.97) #
|
|
|
|
frame_df = frame_df0[(frame_df0.c2 == c2)]
|
|
|
|
# frame_df['repro_tag_id']
|
|
# embed()
|
|
###################################
|
|
# Vergleichsplot
|
|
grid1 = gridspec.GridSpecFromSubplotSpec(2, 1, wspace=0.2, hspace=0.2,
|
|
subplot_spec=gs0[1])
|
|
|
|
if len(frame_df) > 0:
|
|
# frame = pd.read_csv(load_folder_name('calc_cocktailparty') + '/' + full_names[0] + '.csv')
|
|
frame_df_mean = frame_df # .groupby(['c1']).mean()#, 'c2'])
|
|
cs = {}
|
|
means = {}
|
|
scores_datas = [['amp_f0_01_original', 'amp_f0_012_original',
|
|
'amp_B1_01_original', 'amp_B1_012_original'], ['amp_f0_02_original',
|
|
'amp_f0_0_original',
|
|
'amp_B2_02_original',
|
|
'amp_B2_012_original']]
|
|
colorss = [['green', 'purple', 'green', 'blue'], ['orange', 'black', 'orange', 'red']]
|
|
linestyless = [['--', '--', '-', '-'], ['--', '--', '-', '-']]
|
|
show_lines_several_plots(colorss, cs, frame_df_mean, grid1, linestyless, means,
|
|
scores_datas)
|
|
|
|
#
|
|
# plt_cocktailparty_lines(ax, frame_df)
|
|
|
|
# embed()
|
|
find_mt_all(b)
|
|
# todo: man könnte auch heir ienfach das mt und den mt name abspeichern
|
|
|
|
# mt_types = frame_df.mt_name.unique()
|
|
|
|
# if len(c1_unique_big) > 5:
|
|
# contrasts_1_chosen = np.sort(np.unique(frame_df.c1))[::-1][0:5][::-1]# c1_unique_big[0:5]
|
|
|
|
# embed()
|
|
|
|
# embed()
|
|
contrasts = np.unique(frame_df.c1)
|
|
if len(contrasts) > 0:
|
|
# embed()
|
|
contrasts_1_chosen, indeces_show = choice_specific_indices(contrasts, negativ='positiv',
|
|
units=5, cut_val=1)
|
|
|
|
nr_col = int(len(contrasts_1_chosen))
|
|
grid2 = gridspec.GridSpecFromSubplotSpec(5, nr_col, height_ratios=[1, 1, 0.5, 1, 1],
|
|
wspace=0.2, hspace=0.2,
|
|
subplot_spec=gs0[0])
|
|
|
|
axts = []
|
|
axps = []
|
|
for c_nr, c1 in enumerate(contrasts_1_chosen):
|
|
frame_c1 = frame_df[(frame_df.c1 == c1)] # | (frame_df.mt_type == 'base')
|
|
print(c_nr)
|
|
mt_types = frame_c1.mt_type.unique()
|
|
for mt_type in mt_types:
|
|
# if 'base' not in mt_type:
|
|
frame_type = frame_c1[
|
|
(frame_c1.mt_type == mt_type)] # | (frame_df.mt_type == 'base')
|
|
|
|
# plt.suptitle(score)
|
|
# frame_cell['contrast'],frame_cell['vs']
|
|
# if i >= row * col - col:
|
|
|
|
V_1, eods_all, f, mts, sampling_rate, spike_times, spikes_mat, spikes_mats = load_spikes_eods_phaselock(
|
|
b, cell, datas_new, frame_type, names, nfft, path)
|
|
key = 'control_01'
|
|
plt.suptitle('data ' + cell + ' ' + mts.name + ' ' + key)
|
|
|
|
######################
|
|
# plt local eod
|
|
|
|
# ax = np.concatenate(ax)
|
|
|
|
# sampling = 40000
|
|
|
|
# ax[0, counter].set_ylabel('mV')
|
|
xlim = [200, 250]
|
|
# if m == 0:
|
|
nr_example = 0
|
|
|
|
###########################################
|
|
# time spikes
|
|
axt = plt.subplot(grid2[1, c_nr])
|
|
time = plt_voltage_phaselock(V_1, axt, axts, counter, nr_example, sampling_rate,
|
|
spike_times, xlim, key=key)
|
|
|
|
##########################################
|
|
|
|
axt = plt.subplot(grid2[0, c_nr])
|
|
#axt.set_title(key)
|
|
plt_stimulus_phaselock(axt, axts, counter, eods_all, frame_type, nr_example,
|
|
sampling_rate, spike_times, time, xlim, key=key)
|
|
|
|
##########################################
|
|
# time psd
|
|
axp = plt.subplot(grid2[3, c_nr])
|
|
axp2 = plt.subplot(grid2[4, c_nr])
|
|
|
|
spikes_mat = plt_psds_phaselock(axp, axp2, axps, counter, f, nr_example,
|
|
sampling_rate,
|
|
spikes_mat, spikes_mats, key=key)
|
|
axps.append(axp)
|
|
axps.append(axp2)
|
|
|
|
# embed()
|
|
axts[0].get_shared_y_axes().join(*axts[0::2])
|
|
axts[1].get_shared_y_axes().join(*axts[1::2])
|
|
|
|
join_x(axts)
|
|
join_y(axps)
|
|
set_same_ylim(axps)
|
|
join_x(axps)
|
|
# join
|
|
individual_tag = 'data' + cell + '_DF1_' + str(DF1) + '_DF2_' + str(DF2) + '_c2_' + str(
|
|
c2)
|
|
# save_visualization()
|
|
save_visualization(individual_tag, show)
|
|
|
|
print('finished examples')
|
|
embed()
|
|
|
|
|
|
def plt_beats_modulation_several_with_overview_nice_from_three(only_first=True, limit=1,
|
|
duration_exclude=0.45, nfft=int(4096), show=False,
|
|
save=True,
|
|
position=0, redo=False):
|
|
# Function to load the experimental data
|
|
save_name = 'beat_results_smoothed_limit' + str(limit) + '_minimalduration_' + str(duration_exclude) + '_all'
|
|
print(save_name)
|
|
datas_new = []
|
|
old_cells = False
|
|
if old_cells:
|
|
# das ist falls ich die alten Datensätze untersuchen will
|
|
datasets = ['2021-08-03-ab-invivo-1', '2019-09-10-ad-invivo-1', '2019-11-13-aa-invivo-1',
|
|
'2021-06-18-ae-invivo-1']
|
|
data_names = ['2017-10-25-am-invivo-1', '2017-08-15-ad-invivo-1',
|
|
'2018-03-28-aa-invivo-1', '2019-11-13-aa-invivo-1',
|
|
'2019-09-10-ad-invivo-1', '2019-10-28-ag-invivo-1',
|
|
|
|
'2021-06-18-ae-invivo-1',
|
|
|
|
'2018-09-06-au-invivo-1',
|
|
'2022-01-05-aa-invivo-1', '2022-02-10-ac-invivo-1',
|
|
'2017-07-18-ai-invivo-1', '2019-11-18-ab-invivo-1',
|
|
'2022-02-10-ad-invivo-1', '2018-03-22-af-invivo-1',
|
|
'2019-05-15-aj-invivo-1', '2018-08-14-ac-invivo-1',
|
|
'2020-08-12-ab-invivo-1', '2020-08-03-ad-invivo-1',
|
|
'2021-08-03-ab-invivo-1', '2018-08-14-aa-invivo-1',
|
|
'2018-01-19-aj-invivo-1', '2018-08-14-ad-invivo-1',
|
|
'2019-10-21-aj-invivo-1', '2019-09-10-ac-invivo-1',
|
|
'2018-09-06-as-invivo-1', '2019-09-11-ae-invivo-1',
|
|
'2022-01-08-aa-invivo-1', '2019-05-15-ai-invivo-1',
|
|
'2018-08-24-ai-invivo-1', '2018-06-25-aa-invivo-1']
|
|
datasets = [
|
|
'2021-08-03-ab-invivo-1'] # , '2021-06-18-ae-invivo-1','2021-08-03-aa-invivo-1','2019-09-10-ad-invivo-1', '2019-11-13-aa-invivo-1', ]
|
|
datasets = ['2021-08-03-ae-invivo-1', '2021-08-03-ab-invivo-1']
|
|
datasets, data_dir = find_all_dir_cells()
|
|
datasets = np.sort(datasets)[::-1]
|
|
# datasets, frame_desired, mt_names, tag_names = find_out_cells_big()
|
|
frame_desired = pd.read_csv('../code/calc_base/find_contrasts_SAMs-SAM_amplitudes.csv')
|
|
frame_big = frame_desired[(frame_desired.contrast > 29) | (frame_desired.contrast_true > 29)]
|
|
datasets = frame_big.cell.unique()
|
|
# frame_big.contrast_true#
|
|
datasets = datasets[::-1]
|
|
datasets = ['2020-10-29-ac-invivo-1'] # ['2020-10-20-ad-invivo-1',
|
|
# '2020-10-29-ac-invivo-1',
|
|
# '2020-10-29-ai-invivo-1',
|
|
|
|
# '2018-09-13-aa-invivo-1'
|
|
# ]
|
|
else:
|
|
frame = pd.read_pickle(load_folder_name(
|
|
'calc_cocktailparty') + '/calc_data_peaks_threewave-spikes_all_psdEOD_1_nfft_16384[05,original]_psdEOD__sqrt__points_5_ALL_.pkl')
|
|
# path_new2 = load_folder_name('calc_cocktailparty') + '/calc_data_peaks_threewave-spikes_all_psdEOD_1_nfft_16384[05,original]_psdEOD__sqrt__points_5_ALL_.pkl'
|
|
|
|
datasets = np.sort(frame.cell.unique())[::-1]
|
|
# aber ich will ja die neuen Datensätzte
|
|
datasets, loss, gain = find_cells_for_phaselocking()
|
|
frame_all = pd.read_pickle(load_folder_name(
|
|
'calc_cocktailparty') + '/calc_data_peaks_threewave-spikes_all_psdEOD_1_nfft_16384[05,original]_psdEOD__sqrt__points_5_ALL_.pkl') # pd.read_pickle('../code/calc_phaselocking/calc_phaselocking-phaselocking5_big.pkl')
|
|
# cells_for_phaselocking, loss, gain = find_cells_for_phaselocking()
|
|
# embed()
|
|
colors = ['red', 'green', 'purple', 'blue']
|
|
markers = ['.', 'o', '*', '+']
|
|
|
|
plot_style()
|
|
default_settings()
|
|
for i, cell in enumerate(datasets):
|
|
|
|
# dataset = '2021-06-18-ae-invivo-1'
|
|
# embed()
|
|
# if cont:
|
|
path = '../data/cells/' + cell + '/' + cell + ".nix" # cell.split(os.path.sep)[-1]
|
|
path2 = '../data/cells/' + cell + '/samspikes.dat'
|
|
path3 = '../data/cells/' + cell + '/samspikes1.dat'
|
|
print(cell)
|
|
# embed()
|
|
if os.path.exists(path):
|
|
file = nix.File.open(path, nix.FileMode.ReadOnly)
|
|
b = file.blocks[0]
|
|
cont2 = False
|
|
names = []
|
|
names_dataarrays = []
|
|
for stims in b.data_arrays:
|
|
# this seems to be reasonable because the only data with sinewave with higher number was not useful (das betrifft aber nur 2019-05-07-ab und 2019-05-07-ac, wobei wenn ich jetzt ganau schau scheinen das nur komische trials zu sein die wir nicht wirklich brauchen
|
|
if 'sinewave-1_Contrast' in stims.name:
|
|
names.append(stims.name)
|
|
names_dataarrays.append(stims.name)
|
|
# tag_names = find_tags(b, names='sam')
|
|
# tag_names = find_SAM_sine(b)
|
|
'sinewave''SAM'
|
|
# tags_all = find_tags_all(b)
|
|
all_mt_names = find_mt_all(b)
|
|
# embed()
|
|
sam = find_mt(b, 'SAM')
|
|
sine = find_mt(b, 'sine')
|
|
gwn = find_mt(b, 'gwn')
|
|
if (len(sine) > 0) or (len(sam) > 0):
|
|
cont2 = True
|
|
|
|
test = False
|
|
if test:
|
|
test_in_plot_phaselocking(b, path)
|
|
|
|
if cont2 == True:
|
|
|
|
counter = 0
|
|
choice = 'SAM_sinewave' # 'SAM'#'SAM_sinewave'
|
|
|
|
DF1s, DF2s, frame_data_cell, c2_unique, c2_unique_big, c1_unique_big, c1_unique = get_dfs_and_contrasts_from_calccocktailparty(
|
|
cell, frame_all)
|
|
|
|
if only_first:
|
|
DF1s_here = [DF1s[0]]
|
|
DF2s_here = [DF2s[0]]
|
|
else:
|
|
DF1s_here = DF1s # [0]]
|
|
DF2s_here = DF2s # [0]]
|
|
|
|
for d1, DF1 in enumerate(DF1s_here):
|
|
for d2, DF2 in enumerate(DF2s):
|
|
|
|
# das ist blöd man sollte die abgespeicherten Ms machen
|
|
frame_df0 = frame_data_cell[(np.abs(frame_data_cell.m1 - DF1) < 0.02) & (
|
|
np.abs(frame_data_cell.m2 - DF2) < 0.02)]
|
|
frame_df0 = frame_data_cell[(np.round(frame_data_cell.m1,2) == DF1) & (np.round(frame_data_cell.m2,2) == DF2)]
|
|
contrasts_2_chosen = np.sort(np.unique(frame_df0.c2)) # c1_unique_big[0:5]
|
|
|
|
for c_nr2, c2 in enumerate(contrasts_2_chosen):
|
|
plt.suptitle(cell + ' DF1=' + str(DF1) + ' DF2=' + str(DF2))
|
|
|
|
plt.figure(figsize=(15, 9))
|
|
gs0 = gridspec.GridSpec(1, 2, width_ratios=[4, 1], hspace=0.4, left=0.045,
|
|
right=0.97) #
|
|
|
|
frame_df = frame_df0[(frame_df0.c2 == c2)]
|
|
|
|
# frame_df['repro_tag_id']
|
|
# embed()
|
|
###################################
|
|
# Vergleichsplot
|
|
grid1 = gridspec.GridSpecFromSubplotSpec(2, 1, wspace=0.2, hspace=0.2,
|
|
subplot_spec=gs0[1])
|
|
|
|
if len(frame_df) > 0:
|
|
# frame = pd.read_csv(load_folder_name('calc_cocktailparty') + '/' + full_names[0] + '.csv')
|
|
frame_df_mean = frame_df # .groupby(['c1']).mean()#, 'c2'])
|
|
cs = {}
|
|
means = {}
|
|
scores_datas = [['amp_f0_01_original', 'amp_f0_012_original',
|
|
'amp_B1_01_original', 'amp_B1_012_original'], ['amp_f0_02_original',
|
|
'amp_f0_0_original',
|
|
'amp_B2_02_original',
|
|
'amp_B2_012_original']]
|
|
colorss = [['green', 'purple', 'green', 'blue'], ['orange', 'black', 'orange', 'red']]
|
|
linestyless = [['--', '--', '-', '-'], ['--', '--', '-', '-']]
|
|
show_lines_several_plots(colorss, cs, frame_df_mean, grid1, linestyless, means,
|
|
scores_datas)
|
|
|
|
#
|
|
# plt_cocktailparty_lines(ax, frame_df)
|
|
|
|
# embed()
|
|
find_mt_all(b)
|
|
# todo: man könnte auch heir ienfach das mt und den mt name abspeichern
|
|
|
|
# mt_types = frame_df.mt_name.unique()
|
|
|
|
# if len(c1_unique_big) > 5:
|
|
# contrasts_1_chosen = np.sort(np.unique(frame_df.c1))[::-1][0:5][::-1]# c1_unique_big[0:5]
|
|
|
|
# embed()
|
|
|
|
# embed()
|
|
contrasts = np.unique(frame_df.c1)
|
|
if len(contrasts) > 0:
|
|
# embed()
|
|
contrasts_1_chosen, indeces_show = choice_specific_indices(contrasts, negativ='positiv',
|
|
units=5, cut_val=1)
|
|
|
|
nr_col = int(len(contrasts_1_chosen))
|
|
grid2 = gridspec.GridSpecFromSubplotSpec(5, nr_col, height_ratios=[1, 1, 0.5, 1, 1],
|
|
wspace=0.2, hspace=0.2,
|
|
subplot_spec=gs0[0])
|
|
|
|
axts = []
|
|
axps = []
|
|
for c_nr, c1 in enumerate(contrasts_1_chosen):
|
|
frame_c1 = frame_df[(frame_df.c1 == c1)] # | (frame_df.mt_type == 'base')
|
|
print(c_nr)
|
|
mt_types = frame_c1.mt_type.unique()
|
|
for mt_type in mt_types:
|
|
# if 'base' not in mt_type:
|
|
frame_type = frame_c1[
|
|
(frame_c1.mt_type == mt_type)] # | (frame_df.mt_type == 'base')
|
|
|
|
# plt.suptitle(score)
|
|
# frame_cell['contrast'],frame_cell['vs']
|
|
# if i >= row * col - col:
|
|
|
|
V_1, eods_all, f, mts, sampling_rate, spike_times, spikes_mat, spikes_mats = load_spikes_eods_phaselock(
|
|
b, cell, datas_new, frame_type, names, nfft, path)
|
|
key = 'control_01'
|
|
plt.suptitle('data ' + cell + ' ' + mts.name + ' ' + key)
|
|
|
|
######################
|
|
# plt local eod
|
|
|
|
# ax = np.concatenate(ax)
|
|
|
|
# sampling = 40000
|
|
|
|
# ax[0, counter].set_ylabel('mV')
|
|
xlim = [200, 250]
|
|
# if m == 0:
|
|
nr_example = 0
|
|
|
|
###########################################
|
|
# time spikes
|
|
axt = plt.subplot(grid2[1, c_nr])
|
|
time = plt_voltage_phaselock(V_1, axt, axts, counter, nr_example, sampling_rate,
|
|
spike_times, xlim, key=key)
|
|
|
|
##########################################
|
|
|
|
axt = plt.subplot(grid2[0, c_nr])
|
|
#axt.set_title(key)
|
|
plt_stimulus_phaselock(axt, axts, counter, eods_all, frame_type, nr_example,
|
|
sampling_rate, spike_times, time, xlim, key=key)
|
|
|
|
##########################################
|
|
# time psd
|
|
axp = plt.subplot(grid2[3, c_nr])
|
|
axp2 = plt.subplot(grid2[4, c_nr])
|
|
|
|
spikes_mat = plt_psds_phaselock(axp, axp2, axps, counter, f, nr_example,
|
|
sampling_rate,
|
|
spikes_mat, spikes_mats, key=key)
|
|
axps.append(axp)
|
|
axps.append(axp2)
|
|
|
|
# embed()
|
|
axts[0].get_shared_y_axes().join(*axts[0::2])
|
|
axts[1].get_shared_y_axes().join(*axts[1::2])
|
|
|
|
join_x(axts)
|
|
join_y(axps)
|
|
set_same_ylim(axps)
|
|
join_x(axps)
|
|
# join
|
|
individual_tag = 'data' + cell + '_DF1_' + str(DF1) + '_DF2_' + str(DF2) + '_c2_' + str(
|
|
c2)
|
|
# save_visualization()
|
|
save_visualization(individual_tag, show)
|
|
|
|
print('finished examples')
|
|
embed()
|
|
|
|
|
|
|
|
|
|
def show_lines_several_plots(colorss, cs, frame_df_mean, grid1, linestyless, means, scores_datas):
|
|
|
|
for s_nr, score in enumerate(scores_datas):
|
|
scores_data = scores_datas[s_nr]
|
|
linestyles = linestyless[s_nr]
|
|
colors = colorss[s_nr]
|
|
ax = plt.subplot(grid1[s_nr])
|
|
|
|
for sss, score in enumerate(scores_data):
|
|
|
|
ax.plot(np.sort(frame_df_mean['c1']),
|
|
frame_df_mean[score].iloc[np.argsort(frame_df_mean['c1'])],
|
|
color=colors[sss], linestyle=linestyles[
|
|
sss]) # +str(np.round(np.mean(group_restricted[score_data]))), label = 'c_small='+str(c_small)+' c_big='+str(c_big)
|
|
if sss not in means.keys():
|
|
means[sss] = []
|
|
cs[sss] = []
|
|
ax.set_ylabel(score.replace('_mean', '').replace('amp_', '') + '[Hz]',
|
|
fontsize=8)
|
|
ax.set_xlabel('Contrast small')
|
|
ax.set_xlabel('Contrast small')
|
|
return ax
|
|
|
|
def color_three(name):
|
|
dict_here = {'0':'grey',
|
|
'01':'green',
|
|
'02':'blue',
|
|
'012':'purple',
|
|
'base_0':'grey',
|
|
'control_01':'green',
|
|
'control_02':'blue'}
|
|
return dict_here[name]
|
|
|
|
def plt_beats_modulation_several_with_overview_nice_from_three_contorol_compar_final(only_first = True, limit=1,
|
|
duration_exclude=0.45, nfft=int(4096), show=False, save=True,
|
|
position=0, redo=False):
|
|
# Function to load the experimental data
|
|
save_name = 'beat_results_smoothed_limit' + str(limit) + '_minimalduration_' + str(duration_exclude) + '_all'
|
|
print(save_name)
|
|
datas_new = []
|
|
old_cells = False
|
|
if old_cells:
|
|
# das ist falls ich die alten Datensätze untersuchen will
|
|
datasets = ['2021-08-03-ab-invivo-1', '2019-09-10-ad-invivo-1', '2019-11-13-aa-invivo-1', '2021-06-18-ae-invivo-1']
|
|
data_names = ['2017-10-25-am-invivo-1', '2017-08-15-ad-invivo-1',
|
|
'2018-03-28-aa-invivo-1', '2019-11-13-aa-invivo-1',
|
|
'2019-09-10-ad-invivo-1', '2019-10-28-ag-invivo-1',
|
|
|
|
'2021-06-18-ae-invivo-1',
|
|
|
|
'2018-09-06-au-invivo-1',
|
|
'2022-01-05-aa-invivo-1', '2022-02-10-ac-invivo-1',
|
|
'2017-07-18-ai-invivo-1', '2019-11-18-ab-invivo-1',
|
|
'2022-02-10-ad-invivo-1', '2018-03-22-af-invivo-1',
|
|
'2019-05-15-aj-invivo-1', '2018-08-14-ac-invivo-1',
|
|
'2020-08-12-ab-invivo-1', '2020-08-03-ad-invivo-1',
|
|
'2021-08-03-ab-invivo-1', '2018-08-14-aa-invivo-1',
|
|
'2018-01-19-aj-invivo-1', '2018-08-14-ad-invivo-1',
|
|
'2019-10-21-aj-invivo-1', '2019-09-10-ac-invivo-1',
|
|
'2018-09-06-as-invivo-1', '2019-09-11-ae-invivo-1',
|
|
'2022-01-08-aa-invivo-1', '2019-05-15-ai-invivo-1',
|
|
'2018-08-24-ai-invivo-1', '2018-06-25-aa-invivo-1']
|
|
datasets = [
|
|
'2021-08-03-ab-invivo-1'] # , '2021-06-18-ae-invivo-1','2021-08-03-aa-invivo-1','2019-09-10-ad-invivo-1', '2019-11-13-aa-invivo-1', ]
|
|
datasets = ['2021-08-03-ae-invivo-1', '2021-08-03-ab-invivo-1']
|
|
datasets, data_dir = find_all_dir_cells()
|
|
datasets = np.sort(datasets)[::-1]
|
|
#datasets, frame_desired, mt_names, tag_names = find_out_cells_big()
|
|
frame_desired = pd.read_csv('../code/calc_base/find_contrasts_SAMs-SAM_amplitudes.csv')
|
|
frame_big = frame_desired[(frame_desired.contrast > 29) | (frame_desired.contrast_true > 29)]
|
|
datasets = frame_big.cell.unique()
|
|
# frame_big.contrast_true#
|
|
datasets = datasets[::-1]
|
|
datasets = ['2020-10-29-ac-invivo-1']#['2020-10-20-ad-invivo-1',
|
|
#'2020-10-29-ac-invivo-1',
|
|
#'2020-10-29-ai-invivo-1',
|
|
|
|
#'2018-09-13-aa-invivo-1'
|
|
#]
|
|
else:
|
|
frame = pd.read_pickle(
|
|
load_folder_name('calc_cocktailparty') + '/calc_data_peaks_threewave-spikes_all_psdEOD_1_nfft_16384[05,original]_psdEOD__sqrt__points_5_ALL_.pkl')
|
|
# path_new2 = load_folder_name('calc_cocktailparty') + '/calc_data_peaks_threewave-spikes_all_psdEOD_1_nfft_16384[05,original]_psdEOD__sqrt__points_5_ALL_.pkl'
|
|
|
|
datasets = np.sort(frame.cell.unique())[::-1]
|
|
# aber ich will ja die neuen Datensätzte
|
|
datasets, loss, gain = find_cells_for_phaselocking()
|
|
|
|
datasets = ['2023-05-12-ar-invivo-1']
|
|
frame_all = pd.read_pickle(
|
|
load_folder_name('calc_cocktailparty') + '/calc_data_peaks_threewave-spikes_all_psdEOD_1_nfft_16384[05,original]_psdEOD__sqrt__points_5_ALL_.pkl')#pd.read_pickle('../code/calc_phaselocking/calc_phaselocking-phaselocking5_big.pkl')
|
|
#cells_for_phaselocking, loss, gain = find_cells_for_phaselocking()
|
|
#embed()
|
|
colors = ['red', 'green', 'purple', 'blue']
|
|
markers = ['.', 'o', '*', '+']
|
|
|
|
|
|
plot_style()
|
|
default_settings()
|
|
for i, cell in enumerate(datasets):
|
|
|
|
# dataset = '2021-06-18-ae-invivo-1'
|
|
# embed()
|
|
# if cont:
|
|
path = load_folder_name('data') + '/cells/' + cell + '/' + cell + ".nix"#cell.split(os.path.sep)[-1]
|
|
path2 = '../data/cells/' + cell + '/samspikes.dat'
|
|
path3 = '../data/cells/' + cell + '/samspikes1.dat'
|
|
print(cell)
|
|
# embed()
|
|
if os.path.exists(path):
|
|
file = nix.File.open(path, nix.FileMode.ReadOnly)
|
|
b = file.blocks[0]
|
|
cont2 = False
|
|
names = []
|
|
names_dataarrays = []
|
|
for stims in b.data_arrays:
|
|
# this seems to be reasonable because the only data with sinewave with higher number was not useful (das betrifft aber nur 2019-05-07-ab und 2019-05-07-ac, wobei wenn ich jetzt ganau schau scheinen das nur komische trials zu sein die wir nicht wirklich brauchen
|
|
if 'sinewave-1_Contrast' in stims.name:
|
|
names.append(stims.name)
|
|
names_dataarrays.append(stims.name)
|
|
#tag_names = find_tags(b, names='sam')
|
|
#tag_names = find_SAM_sine(b)
|
|
'sinewave''SAM'
|
|
#tags_all = find_tags_all(b)
|
|
all_mt_names = find_mt_all(b)
|
|
# embed()
|
|
sam = find_mt(b, 'SAM')
|
|
sine = find_mt(b, 'sine')
|
|
gwn = find_mt(b, 'gwn')
|
|
if (len(sine) > 0) or (len(sam) > 0):
|
|
cont2 = True
|
|
|
|
test = False
|
|
if test:
|
|
test_in_plot_phaselocking(b, path)
|
|
|
|
if cont2 == True:
|
|
|
|
counter = 0
|
|
choice = 'SAM_sinewave' # 'SAM'#'SAM_sinewave'
|
|
|
|
|
|
DF1s, DF2s, frame_data_cell, c2_unique, c2_unique_big, c1_unique_big, c1_unique = get_dfs_and_contrasts_from_calccocktailparty(
|
|
cell, frame_all)
|
|
|
|
|
|
if only_first:
|
|
DF1s_here = [DF1s[0]]
|
|
DF2s_here = [DF2s[0]]
|
|
else:
|
|
DF1s_here = DF1s#[0]]
|
|
DF2s_here = DF2s#[0]]
|
|
#embed()
|
|
for d1, DF1 in enumerate(DF1s_here):
|
|
for d2, DF2 in enumerate(DF2s):
|
|
|
|
# das ist blöd man sollte die abgespeicherten Ms machen
|
|
frame_df0 = frame_data_cell[(np.round(frame_data_cell.m1,2) == DF1) & (np.round(frame_data_cell.m2,2) == DF2)]
|
|
|
|
#frame_df0 = frame_data_cell[(np.abs(frame_data_cell.m1 - DF1) < 0.02) & (
|
|
# np.abs(frame_data_cell.m2 - DF2) < 0.02)]
|
|
contrasts_2_chosen = np.sort(np.unique(frame_df0.c2)) # c1_unique_big[0:5]
|
|
|
|
|
|
|
|
for c_nr2, c2 in enumerate(contrasts_2_chosen):
|
|
|
|
frame_df = frame_df0[(frame_df0.c2 == c2)]
|
|
|
|
|
|
contrasts = np.unique(frame_df.c1)[::-1]
|
|
if len(contrasts) > 0:
|
|
contrasts_1_chosen = contrasts # , indeces_show = choice_specific_indices(contrasts, negativ = 'positiv', units = 5, cut_val = 1)
|
|
|
|
for c_nr, c1 in enumerate(contrasts_1_chosen):
|
|
|
|
|
|
|
|
if len(frame_df) > 0:
|
|
|
|
|
|
# frame = pd.read_csv(load_folder_name('calc_cocktailparty') + '/' + full_names[0] + '.csv')
|
|
frame_df_mean = frame_df # .groupby(['c1']).mean()#, 'c2'])
|
|
|
|
frame_c1 = frame_df[(frame_df.c1 == c1)] # | (frame_df.mt_type == 'base')
|
|
print(c_nr)
|
|
mt_types = frame_c1.mt_type.unique()
|
|
for mt_type in mt_types:
|
|
|
|
|
|
#
|
|
# plt_cocktailparty_lines(ax, frame_df)
|
|
|
|
#embed()
|
|
find_mt_all(b)
|
|
|
|
|
|
|
|
keys = ['base_0','control_01', 'control_02', '012']#]
|
|
nr_col = len(keys)
|
|
|
|
axts = []
|
|
axps = []
|
|
|
|
|
|
#if 'base' not in mt_type:
|
|
frame_type = frame_c1[
|
|
(frame_c1.mt_type == mt_type)] # | (frame_df.mt_type == 'base')
|
|
|
|
|
|
|
|
|
|
V_1, eods_all, f, mts, sampling_rate, spike_times, spikes_mat, spikes_mats = load_spikes_eods_phaselock(
|
|
b, cell, datas_new, frame_type, names, nfft, path)
|
|
|
|
|
|
|
|
|
|
|
|
for nr_example in range(len(spike_times)):
|
|
|
|
###################################
|
|
plt.suptitle(cell + ' DF1=' + str(DF1) + ' DF2=' + str(DF2))
|
|
|
|
plt.figure(figsize=(20, 14))
|
|
gs0 = gridspec.GridSpec(1, 2, width_ratios=[4, 1], hspace=0.4,
|
|
left=0.045,
|
|
right=0.97) #
|
|
# Vergleichsplot
|
|
grid1 = gridspec.GridSpecFromSubplotSpec(2, 1, wspace=0.2, hspace=0.2,
|
|
subplot_spec=gs0[1])
|
|
|
|
plt_lines_phaselockingloss(frame_df_mean, grid1)
|
|
grid2 = gridspec.GridSpecFromSubplotSpec(5, nr_col,
|
|
height_ratios=[1, 1, 0.5, 1,
|
|
1],
|
|
wspace=0.2, hspace=0.2,
|
|
subplot_spec=gs0[0])
|
|
|
|
key = 'control_01'
|
|
plt.suptitle('data ' + cell + ' ' + mts.name + ' ' + '_DF1_' + str(
|
|
DF1) + '_DF2_' + str(DF2) + '\n_c2_' + str(c2) + '_c1_' + str(c1)+' Trial '+str(nr_example))
|
|
|
|
######################
|
|
# plt local eod
|
|
|
|
# ax = np.concatenate(ax)
|
|
|
|
# sampling = 40000
|
|
|
|
# ax[0, counter].set_ylabel('mV')
|
|
xlim = [200, 250]
|
|
# if m == 0:
|
|
#nr_example = 0
|
|
|
|
###########################################
|
|
# time spikes
|
|
for k, key in enumerate(keys):
|
|
axt = plt.subplot(grid2[1, k])
|
|
|
|
#embed()
|
|
time = plt_voltage_phaselock(V_1, axt, axts, counter, nr_example, sampling_rate,
|
|
spike_times, xlim, key = key, color = color_three(key))
|
|
|
|
##########################################
|
|
axt = plt.subplot(grid2[0, k])
|
|
|
|
plt_stimulus_phaselock(axt, axts, counter, eods_all, frame_type, nr_example,
|
|
sampling_rate, spike_times, time, xlim, key = key, color = color_three(key))
|
|
axt.set_title(key)
|
|
axt.set_ylabel('')
|
|
##########################################
|
|
# time psd
|
|
axp = plt.subplot(grid2[3, k])
|
|
axp2 = plt.subplot(grid2[4, k])
|
|
|
|
spikes_mat = plt_psds_phaselock(axp, axp2, axps, counter, f, nr_example, sampling_rate,
|
|
spikes_mat, spikes_mats, key = key, color = color_three(key))
|
|
axps.append(axp)
|
|
axps.append(axp2)
|
|
|
|
#embed()
|
|
axts[0].get_shared_y_axes().join(*axts[0::2])
|
|
axts[1].get_shared_y_axes().join(*axts[1::2])
|
|
|
|
join_x(axts)
|
|
join_y(axps)
|
|
set_same_ylim(axps)
|
|
join_x(axps)
|
|
# join
|
|
individual_tag = 'data' + cell + '_DF1_' + str(DF1)+ '_DF2_' + str(DF2)+'_c2_'+str(c2)+'_c1_'+str(c1)+'_trial_'+str(nr_example)
|
|
# save_visualization()
|
|
save_visualization(individual_tag, show)
|
|
|
|
print('finished examples')
|
|
embed()
|
|
|
|
def plt_beats_modulation_several_with_overview_nice_from_three_contorol_compar(only_first = True, limit=1,
|
|
duration_exclude=0.45, nfft=int(4096), show=False, save=True,
|
|
position=0, redo=False):
|
|
# Function to load the experimental data
|
|
save_name = 'beat_results_smoothed_limit' + str(limit) + '_minimalduration_' + str(duration_exclude) + '_all'
|
|
print(save_name)
|
|
datas_new = []
|
|
old_cells = False
|
|
if old_cells:
|
|
# das ist falls ich die alten Datensätze untersuchen will
|
|
datasets = ['2021-08-03-ab-invivo-1', '2019-09-10-ad-invivo-1', '2019-11-13-aa-invivo-1', '2021-06-18-ae-invivo-1']
|
|
data_names = ['2017-10-25-am-invivo-1', '2017-08-15-ad-invivo-1',
|
|
'2018-03-28-aa-invivo-1', '2019-11-13-aa-invivo-1',
|
|
'2019-09-10-ad-invivo-1', '2019-10-28-ag-invivo-1',
|
|
|
|
'2021-06-18-ae-invivo-1',
|
|
|
|
'2018-09-06-au-invivo-1',
|
|
'2022-01-05-aa-invivo-1', '2022-02-10-ac-invivo-1',
|
|
'2017-07-18-ai-invivo-1', '2019-11-18-ab-invivo-1',
|
|
'2022-02-10-ad-invivo-1', '2018-03-22-af-invivo-1',
|
|
'2019-05-15-aj-invivo-1', '2018-08-14-ac-invivo-1',
|
|
'2020-08-12-ab-invivo-1', '2020-08-03-ad-invivo-1',
|
|
'2021-08-03-ab-invivo-1', '2018-08-14-aa-invivo-1',
|
|
'2018-01-19-aj-invivo-1', '2018-08-14-ad-invivo-1',
|
|
'2019-10-21-aj-invivo-1', '2019-09-10-ac-invivo-1',
|
|
'2018-09-06-as-invivo-1', '2019-09-11-ae-invivo-1',
|
|
'2022-01-08-aa-invivo-1', '2019-05-15-ai-invivo-1',
|
|
'2018-08-24-ai-invivo-1', '2018-06-25-aa-invivo-1']
|
|
datasets = [
|
|
'2021-08-03-ab-invivo-1'] # , '2021-06-18-ae-invivo-1','2021-08-03-aa-invivo-1','2019-09-10-ad-invivo-1', '2019-11-13-aa-invivo-1', ]
|
|
datasets = ['2021-08-03-ae-invivo-1', '2021-08-03-ab-invivo-1']
|
|
datasets, data_dir = find_all_dir_cells()
|
|
datasets = np.sort(datasets)[::-1]
|
|
#datasets, frame_desired, mt_names, tag_names = find_out_cells_big()
|
|
frame_desired = pd.read_csv('../code/calc_base/find_contrasts_SAMs-SAM_amplitudes.csv')
|
|
frame_big = frame_desired[(frame_desired.contrast > 29) | (frame_desired.contrast_true > 29)]
|
|
datasets = frame_big.cell.unique()
|
|
# frame_big.contrast_true#
|
|
datasets = datasets[::-1]
|
|
datasets = ['2020-10-29-ac-invivo-1']#['2020-10-20-ad-invivo-1',
|
|
#'2020-10-29-ac-invivo-1',
|
|
#'2020-10-29-ai-invivo-1',
|
|
|
|
#'2018-09-13-aa-invivo-1'
|
|
#]
|
|
else:
|
|
frame = pd.read_pickle(
|
|
load_folder_name('calc_cocktailparty') + '/calc_data_peaks_threewave-spikes_all_psdEOD_1_nfft_16384[05,original]_psdEOD__sqrt__points_5_ALL_.pkl')
|
|
# path_new2 = load_folder_name('calc_cocktailparty') + '/calc_data_peaks_threewave-spikes_all_psdEOD_1_nfft_16384[05,original]_psdEOD__sqrt__points_5_ALL_.pkl'
|
|
|
|
datasets = np.sort(frame.cell.unique())[::-1]
|
|
# aber ich will ja die neuen Datensätzte
|
|
datasets, loss, gain = find_cells_for_phaselocking()
|
|
frame_all = pd.read_pickle(
|
|
load_folder_name('calc_cocktailparty') + '/calc_data_peaks_threewave-spikes_all_psdEOD_1_nfft_16384[05,original]_psdEOD__sqrt__points_5_ALL_.pkl')#pd.read_pickle('../code/calc_phaselocking/calc_phaselocking-phaselocking5_big.pkl')
|
|
#cells_for_phaselocking, loss, gain = find_cells_for_phaselocking()
|
|
#embed()
|
|
colors = ['red', 'green', 'purple', 'blue']
|
|
markers = ['.', 'o', '*', '+']
|
|
|
|
|
|
plot_style()
|
|
default_settings()
|
|
for i, cell in enumerate(datasets):
|
|
|
|
# dataset = '2021-06-18-ae-invivo-1'
|
|
# embed()
|
|
# if cont:
|
|
path = '../data/cells/' + cell + '/' + cell + ".nix"#cell.split(os.path.sep)[-1]
|
|
path2 = '../data/cells/' + cell + '/samspikes.dat'
|
|
path3 = '../data/cells/' + cell + '/samspikes1.dat'
|
|
print(cell)
|
|
# embed()
|
|
if os.path.exists(path):
|
|
file = nix.File.open(path, nix.FileMode.ReadOnly)
|
|
b = file.blocks[0]
|
|
cont2 = False
|
|
names = []
|
|
names_dataarrays = []
|
|
for stims in b.data_arrays:
|
|
# this seems to be reasonable because the only data with sinewave with higher number was not useful (das betrifft aber nur 2019-05-07-ab und 2019-05-07-ac, wobei wenn ich jetzt ganau schau scheinen das nur komische trials zu sein die wir nicht wirklich brauchen
|
|
if 'sinewave-1_Contrast' in stims.name:
|
|
names.append(stims.name)
|
|
names_dataarrays.append(stims.name)
|
|
#tag_names = find_tags(b, names='sam')
|
|
#tag_names = find_SAM_sine(b)
|
|
'sinewave''SAM'
|
|
#tags_all = find_tags_all(b)
|
|
all_mt_names = find_mt_all(b)
|
|
# embed()
|
|
sam = find_mt(b, 'SAM')
|
|
sine = find_mt(b, 'sine')
|
|
gwn = find_mt(b, 'gwn')
|
|
if (len(sine) > 0) or (len(sam) > 0):
|
|
cont2 = True
|
|
|
|
test = False
|
|
if test:
|
|
test_in_plot_phaselocking(b, path)
|
|
|
|
if cont2 == True:
|
|
|
|
counter = 0
|
|
choice = 'SAM_sinewave' # 'SAM'#'SAM_sinewave'
|
|
|
|
|
|
DF1s, DF2s, frame_data_cell, c2_unique, c2_unique_big, c1_unique_big, c1_unique = get_dfs_and_contrasts_from_calccocktailparty(
|
|
cell, frame_all)
|
|
|
|
|
|
if only_first:
|
|
DF1s_here = [DF1s[0]]
|
|
DF2s_here = [DF2s[0]]
|
|
else:
|
|
DF1s_here = DF1s#[0]]
|
|
DF2s_here = DF2s#[0]]
|
|
#embed()
|
|
for d1, DF1 in enumerate(DF1s_here):
|
|
for d2, DF2 in enumerate(DF2s):
|
|
|
|
# das ist blöd man sollte die abgespeicherten Ms machen
|
|
frame_df0 = frame_data_cell[(np.round(frame_data_cell.m1,2) == DF1) & (np.round(frame_data_cell.m2,2) == DF2)]
|
|
|
|
#frame_df0 = frame_data_cell[(np.abs(frame_data_cell.m1 - DF1) < 0.02) & (
|
|
# np.abs(frame_data_cell.m2 - DF2) < 0.02)]
|
|
contrasts_2_chosen = np.sort(np.unique(frame_df0.c2)) # c1_unique_big[0:5]
|
|
|
|
|
|
|
|
for c_nr2, c2 in enumerate(contrasts_2_chosen):
|
|
|
|
frame_df = frame_df0[(frame_df0.c2 == c2)]
|
|
|
|
|
|
contrasts = np.unique(frame_df.c1)[::-1]
|
|
if len(contrasts) > 0:
|
|
contrasts_1_chosen = contrasts # , indeces_show = choice_specific_indices(contrasts, negativ = 'positiv', units = 5, cut_val = 1)
|
|
|
|
for c_nr, c1 in enumerate(contrasts_1_chosen):
|
|
|
|
|
|
|
|
if len(frame_df) > 0:
|
|
|
|
|
|
# frame = pd.read_csv(load_folder_name('calc_cocktailparty') + '/' + full_names[0] + '.csv')
|
|
frame_df_mean = frame_df # .groupby(['c1']).mean()#, 'c2'])
|
|
|
|
frame_c1 = frame_df[(frame_df.c1 == c1)] # | (frame_df.mt_type == 'base')
|
|
print(c_nr)
|
|
mt_types = frame_c1.mt_type.unique()
|
|
for mt_type in mt_types:
|
|
|
|
|
|
#
|
|
# plt_cocktailparty_lines(ax, frame_df)
|
|
|
|
#embed()
|
|
find_mt_all(b)
|
|
#todo: man könnte auch heir ienfach das mt und den mt name abspeichern
|
|
|
|
# embed()
|
|
|
|
|
|
keys = ['base_0','control_01', 'control_02', '012']#]
|
|
nr_col = len(keys)
|
|
|
|
axts = []
|
|
axps = []
|
|
|
|
|
|
#if 'base' not in mt_type:
|
|
frame_type = frame_c1[
|
|
(frame_c1.mt_type == mt_type)] # | (frame_df.mt_type == 'base')
|
|
|
|
|
|
|
|
V_1, eods_all, f, mts, sampling_rate, spike_times, spikes_mat, spikes_mats = load_spikes_eods_phaselock(
|
|
b, cell, datas_new, frame_type, names, nfft, path)
|
|
|
|
|
|
|
|
|
|
|
|
for nr_example in range(len(spike_times)):
|
|
|
|
###################################
|
|
plt.suptitle(cell + ' DF1=' + str(DF1) + ' DF2=' + str(DF2))
|
|
|
|
plt.figure(figsize=(20, 14))
|
|
gs0 = gridspec.GridSpec(1, 2, width_ratios=[4, 1], hspace=0.4,
|
|
left=0.045,
|
|
right=0.97) #
|
|
# Vergleichsplot
|
|
grid1 = gridspec.GridSpecFromSubplotSpec(2, 1, wspace=0.2, hspace=0.2,
|
|
subplot_spec=gs0[1])
|
|
|
|
plt_lines_phaselockingloss(frame_df_mean, grid1)
|
|
grid2 = gridspec.GridSpecFromSubplotSpec(5, nr_col,
|
|
height_ratios=[1, 1, 0.5, 1,
|
|
1],
|
|
wspace=0.2, hspace=0.2,
|
|
subplot_spec=gs0[0])
|
|
|
|
key = 'control_01'
|
|
plt.suptitle('data ' + cell + ' ' + mts.name + ' ' + '_DF1_' + str(
|
|
DF1) + '_DF2_' + str(DF2) + '\n_c2_' + str(c2) + '_c1_' + str(c1)+' Trial '+str(nr_example))
|
|
|
|
######################
|
|
# plt local eod
|
|
|
|
# ax = np.concatenate(ax)
|
|
|
|
# sampling = 40000
|
|
|
|
# ax[0, counter].set_ylabel('mV')
|
|
xlim = [200, 250]
|
|
# if m == 0:
|
|
#nr_example = 0
|
|
|
|
###########################################
|
|
# time spikes
|
|
for k, key in enumerate(keys):
|
|
axt = plt.subplot(grid2[1, k])
|
|
|
|
#embed()
|
|
time = plt_voltage_phaselock(V_1, axt, axts, counter, nr_example, sampling_rate,
|
|
spike_times, xlim, key = key, color = color_three(key))
|
|
|
|
##########################################
|
|
axt = plt.subplot(grid2[0, k])
|
|
|
|
plt_stimulus_phaselock(axt, axts, counter, eods_all, frame_type, nr_example,
|
|
sampling_rate, spike_times, time, xlim, key = key, color = color_three(key))
|
|
axt.set_title(key)
|
|
axt.set_ylabel('')
|
|
##########################################
|
|
# time psd
|
|
axp = plt.subplot(grid2[3, k])
|
|
axp2 = plt.subplot(grid2[4, k])
|
|
|
|
spikes_mat = plt_psds_phaselock(axp, axp2, axps, counter, f, nr_example, sampling_rate,
|
|
spikes_mat, spikes_mats, key = key, color = color_three(key))
|
|
axps.append(axp)
|
|
axps.append(axp2)
|
|
|
|
#embed()
|
|
axts[0].get_shared_y_axes().join(*axts[0::2])
|
|
axts[1].get_shared_y_axes().join(*axts[1::2])
|
|
|
|
join_x(axts)
|
|
join_y(axps)
|
|
set_same_ylim(axps)
|
|
join_x(axps)
|
|
# join
|
|
individual_tag = 'data' + cell + '_DF1_' + str(DF1)+ '_DF2_' + str(DF2)+'_c2_'+str(c2)+'_c1_'+str(c1)+'_trial_'+str(nr_example)
|
|
# save_visualization()
|
|
save_visualization(individual_tag, show)
|
|
|
|
print('finished examples')
|
|
embed()
|
|
|
|
def plt_beats_modulation_several_with_overview_nice_from_three_contorol_compar_single_pdf(only_first = True, limit=1,
|
|
duration_exclude=0.45, nfft=int(4096), show=False, save=True,
|
|
position=0, redo=False):
|
|
# Function to load the experimental data
|
|
save_name = 'beat_results_smoothed_limit' + str(limit) + '_minimalduration_' + str(duration_exclude) + '_all'
|
|
print(save_name)
|
|
datas_new = []
|
|
old_cells = False
|
|
if old_cells:
|
|
# das ist falls ich die alten Datensätze untersuchen will
|
|
datasets = ['2021-08-03-ab-invivo-1', '2019-09-10-ad-invivo-1', '2019-11-13-aa-invivo-1', '2021-06-18-ae-invivo-1']
|
|
data_names = ['2017-10-25-am-invivo-1', '2017-08-15-ad-invivo-1',
|
|
'2018-03-28-aa-invivo-1', '2019-11-13-aa-invivo-1',
|
|
'2019-09-10-ad-invivo-1', '2019-10-28-ag-invivo-1',
|
|
|
|
'2021-06-18-ae-invivo-1',
|
|
|
|
'2018-09-06-au-invivo-1',
|
|
'2022-01-05-aa-invivo-1', '2022-02-10-ac-invivo-1',
|
|
'2017-07-18-ai-invivo-1', '2019-11-18-ab-invivo-1',
|
|
'2022-02-10-ad-invivo-1', '2018-03-22-af-invivo-1',
|
|
'2019-05-15-aj-invivo-1', '2018-08-14-ac-invivo-1',
|
|
'2020-08-12-ab-invivo-1', '2020-08-03-ad-invivo-1',
|
|
'2021-08-03-ab-invivo-1', '2018-08-14-aa-invivo-1',
|
|
'2018-01-19-aj-invivo-1', '2018-08-14-ad-invivo-1',
|
|
'2019-10-21-aj-invivo-1', '2019-09-10-ac-invivo-1',
|
|
'2018-09-06-as-invivo-1', '2019-09-11-ae-invivo-1',
|
|
'2022-01-08-aa-invivo-1', '2019-05-15-ai-invivo-1',
|
|
'2018-08-24-ai-invivo-1', '2018-06-25-aa-invivo-1']
|
|
datasets = [
|
|
'2021-08-03-ab-invivo-1'] # , '2021-06-18-ae-invivo-1','2021-08-03-aa-invivo-1','2019-09-10-ad-invivo-1', '2019-11-13-aa-invivo-1', ]
|
|
datasets = ['2021-08-03-ae-invivo-1', '2021-08-03-ab-invivo-1']
|
|
datasets, data_dir = find_all_dir_cells()
|
|
datasets = np.sort(datasets)[::-1]
|
|
#datasets, frame_desired, mt_names, tag_names = find_out_cells_big()
|
|
frame_desired = pd.read_csv('../code/calc_base/find_contrasts_SAMs-SAM_amplitudes.csv')
|
|
frame_big = frame_desired[(frame_desired.contrast > 29) | (frame_desired.contrast_true > 29)]
|
|
datasets = frame_big.cell.unique()
|
|
# frame_big.contrast_true#
|
|
datasets = datasets[::-1]
|
|
datasets = ['2020-10-29-ac-invivo-1']#['2020-10-20-ad-invivo-1',
|
|
#'2020-10-29-ac-invivo-1',
|
|
#'2020-10-29-ai-invivo-1',
|
|
|
|
#'2018-09-13-aa-invivo-1'
|
|
#]
|
|
else:
|
|
frame = pd.read_pickle(
|
|
load_folder_name('calc_cocktailparty') + '/calc_data_peaks_threewave-spikes_all_psdEOD_1_nfft_16384[05,original]_psdEOD__sqrt__points_5_ALL_.pkl')
|
|
# path_new2 = load_folder_name('calc_cocktailparty') + '/calc_data_peaks_threewave-spikes_all_psdEOD_1_nfft_16384[05,original]_psdEOD__sqrt__points_5_ALL_.pkl'
|
|
|
|
datasets = np.sort(frame.cell.unique())[::-1]
|
|
# aber ich will ja die neuen Datensätzte
|
|
datasets, loss, gain = find_cells_for_phaselocking()
|
|
frame_all = pd.read_pickle(
|
|
load_folder_name('calc_cocktailparty') + '/calc_data_peaks_threewave-spikes_all_psdEOD_1_nfft_16384[05,original]_psdEOD__sqrt__points_5_ALL_.pkl')#pd.read_pickle('../code/calc_phaselocking/calc_phaselocking-phaselocking5_big.pkl')
|
|
#cells_for_phaselocking, loss, gain = find_cells_for_phaselocking()
|
|
#embed()
|
|
colors = ['red', 'green', 'purple', 'blue']
|
|
markers = ['.', 'o', '*', '+']
|
|
|
|
|
|
plot_style()
|
|
default_settings()
|
|
for i, cell in enumerate(datasets):
|
|
|
|
# dataset = '2021-06-18-ae-invivo-1'
|
|
# embed()
|
|
# if cont:
|
|
path = '../data/cells/' + cell + '/' + cell + ".nix"#cell.split(os.path.sep)[-1]
|
|
path2 = '../data/cells/' + cell + '/samspikes.dat'
|
|
path3 = '../data/cells/' + cell + '/samspikes1.dat'
|
|
print(cell)
|
|
# embed()
|
|
if os.path.exists(path):
|
|
file = nix.File.open(path, nix.FileMode.ReadOnly)
|
|
b = file.blocks[0]
|
|
cont2 = False
|
|
names = []
|
|
names_dataarrays = []
|
|
for stims in b.data_arrays:
|
|
# this seems to be reasonable because the only data with sinewave with higher number was not useful (das betrifft aber nur 2019-05-07-ab und 2019-05-07-ac, wobei wenn ich jetzt ganau schau scheinen das nur komische trials zu sein die wir nicht wirklich brauchen
|
|
if 'sinewave-1_Contrast' in stims.name:
|
|
names.append(stims.name)
|
|
names_dataarrays.append(stims.name)
|
|
#tag_names = find_tags(b, names='sam')
|
|
#tag_names = find_SAM_sine(b)
|
|
'sinewave''SAM'
|
|
#tags_all = find_tags_all(b)
|
|
all_mt_names = find_mt_all(b)
|
|
# embed()
|
|
sam = find_mt(b, 'SAM')
|
|
sine = find_mt(b, 'sine')
|
|
gwn = find_mt(b, 'gwn')
|
|
if (len(sine) > 0) or (len(sam) > 0):
|
|
cont2 = True
|
|
|
|
test = False
|
|
if test:
|
|
test_in_plot_phaselocking(b, path)
|
|
|
|
if cont2 == True:
|
|
|
|
counter = 0
|
|
choice = 'SAM_sinewave' # 'SAM'#'SAM_sinewave'
|
|
|
|
|
|
DF1s, DF2s, frame_data_cell, c2_unique, c2_unique_big, c1_unique_big, c1_unique = get_dfs_and_contrasts_from_calccocktailparty(
|
|
cell, frame_all)
|
|
|
|
|
|
if only_first:
|
|
DF1s_here = [DF1s[0]]
|
|
DF2s_here = [DF2s[0]]
|
|
else:
|
|
DF1s_here = DF1s#[0]]
|
|
DF2s_here = DF2s#[0]]
|
|
#embed()
|
|
for d1, DF1 in enumerate(DF1s_here):
|
|
for d2, DF2 in enumerate(DF2s):
|
|
|
|
# das ist blöd man sollte die abgespeicherten Ms machen
|
|
frame_df0 = frame_data_cell[(np.round(frame_data_cell.m1,2) == DF1) & (np.round(frame_data_cell.m2,2) == DF2)]
|
|
|
|
#frame_df0 = frame_data_cell[(np.abs(frame_data_cell.m1 - DF1) < 0.02) & (
|
|
# np.abs(frame_data_cell.m2 - DF2) < 0.02)]
|
|
contrasts_2_chosen = np.sort(np.unique(frame_df0.c2)) # c1_unique_big[0:5]
|
|
|
|
|
|
|
|
for c_nr2, c2 in enumerate(contrasts_2_chosen):
|
|
|
|
frame_df = frame_df0[(frame_df0.c2 == c2)]
|
|
|
|
|
|
contrasts = np.unique(frame_df.c1)[::-1]
|
|
if len(contrasts) > 0:
|
|
contrasts_1_chosen = contrasts # , indeces_show = choice_specific_indices(contrasts, negativ = 'positiv', units = 5, cut_val = 1)
|
|
|
|
for c_nr, c1 in enumerate(contrasts_1_chosen):
|
|
|
|
|
|
|
|
if len(frame_df) > 0:
|
|
|
|
|
|
# frame = pd.read_csv(load_folder_name('calc_cocktailparty') + '/' + full_names[0] + '.csv')
|
|
frame_df_mean = frame_df # .groupby(['c1']).mean()#, 'c2'])
|
|
|
|
frame_c1 = frame_df[(frame_df.c1 == c1)] # | (frame_df.mt_type == 'base')
|
|
print(c_nr)
|
|
mt_types = frame_c1.mt_type.unique()
|
|
for mt_type in mt_types:
|
|
|
|
|
|
#
|
|
# plt_cocktailparty_lines(ax, frame_df)
|
|
|
|
#embed()
|
|
find_mt_all(b)
|
|
|
|
|
|
|
|
keys = ['control_01']#,'base_0', 'control_02', '012']
|
|
nr_col = len(keys)
|
|
|
|
axts = []
|
|
axps = []
|
|
|
|
|
|
#if 'base' not in mt_type:
|
|
frame_type = frame_c1[
|
|
(frame_c1.mt_type == mt_type)] # | (frame_df.mt_type == 'base')
|
|
|
|
|
|
|
|
|
|
# plt.suptitle(score)
|
|
# frame_cell['contrast'],frame_cell['vs']
|
|
# if i >= row * col - col:
|
|
|
|
|
|
V_1, eods_all, f, mts, sampling_rate, spike_times, spikes_mat, spikes_mats = load_spikes_eods_phaselock(
|
|
b, cell, datas_new, frame_type, names, nfft, path)
|
|
|
|
|
|
|
|
|
|
|
|
for nr_example in range(len(spike_times)):
|
|
|
|
###################################
|
|
plt.suptitle(cell + ' DF1=' + str(DF1) + ' DF2=' + str(DF2))
|
|
|
|
plt.figure(figsize=(20, 14))
|
|
gs0 = gridspec.GridSpec(1, 2, width_ratios=[4, 1], hspace=0.4,
|
|
left=0.045,
|
|
right=0.97) #
|
|
# Vergleichsplot
|
|
grid1 = gridspec.GridSpecFromSubplotSpec(2, 1, wspace=0.2, hspace=0.2,
|
|
subplot_spec=gs0[1])
|
|
|
|
plt_lines_phaselockingloss(frame_df_mean, grid1)
|
|
grid2 = gridspec.GridSpecFromSubplotSpec(6, nr_col,
|
|
height_ratios=[1, 1, 0.5, 1,
|
|
1, 1],
|
|
wspace=0.2, hspace=0.2,
|
|
subplot_spec=gs0[0])
|
|
|
|
key = 'control_01'
|
|
plt.suptitle('data ' + cell + ' ' + mts.name + ' ' + '_DF1_' + str(
|
|
DF1) + '_DF2_' + str(DF2) + '\n_c2_' + str(c2) + '_c1_' + str(c1)+' Trial '+str(nr_example))
|
|
|
|
######################
|
|
# plt local eod
|
|
|
|
# ax = np.concatenate(ax)
|
|
|
|
# sampling = 40000
|
|
|
|
# ax[0, counter].set_ylabel('mV')
|
|
xlim = [200, 250]
|
|
xlim = []
|
|
# if m == 0:
|
|
#nr_example = 0
|
|
|
|
###########################################
|
|
# time spikes
|
|
for k, key in enumerate(keys):
|
|
axt = plt.subplot(grid2[1, k])
|
|
|
|
#embed()
|
|
time = plt_voltage_phaselock(V_1, axt, axts, counter, nr_example, sampling_rate,
|
|
spike_times, xlim, key = key, color = color_three(key))
|
|
|
|
##########################################
|
|
axt = plt.subplot(grid2[0, k])
|
|
|
|
plt_stimulus_phaselock(axt, axts, counter, eods_all, frame_type, nr_example,
|
|
sampling_rate, spike_times, time, xlim, key = key, color = color_three(key))
|
|
axt.set_title(key)
|
|
axt.set_ylabel('')
|
|
##########################################
|
|
# time psd
|
|
axp = plt.subplot(grid2[3, k])
|
|
axp2 = plt.subplot(grid2[4, k])
|
|
|
|
spikes_mat = plt_psds_phaselock(axp, axp2, axps, counter, f, nr_example, sampling_rate,
|
|
spikes_mat, spikes_mats, key = key, color = color_three(key))
|
|
axps.append(axp)
|
|
axps.append(axp2)
|
|
|
|
#embed()
|
|
##########################################
|
|
# hists
|
|
axi = plt.subplot(grid2[5, k])
|
|
#frame_type.iloc[nr_example].EODf
|
|
isi = calc_isi(spike_times[nr_example][key], frame_type.iloc[nr_example].EODf)
|
|
axi.hist(np.concatenate(isi), bins = 100)#color = 'grey',
|
|
axi.axvline(x = 1, color = 'black', linestyle = '--')
|
|
#embed()
|
|
if len(axts) > 0:
|
|
axts[0].get_shared_y_axes().join(*axts[0::2])
|
|
axts[1].get_shared_y_axes().join(*axts[1::2])
|
|
|
|
join_x(axts)
|
|
join_y(axps)
|
|
set_same_ylim(axps)
|
|
join_x(axps)
|
|
# join
|
|
individual_tag = 'data' + cell + '_DF1_' + str(DF1)+ '_DF2_' + str(DF2)+'_c2_'+str(c2)+'_c1_'+str(c1)+'_trial_'+str(nr_example)
|
|
# save_visualization()
|
|
save_visualization(individual_tag, show, pdf = True)
|
|
|
|
print('finished examples')
|
|
embed()
|
|
|
|
|
|
def plt_beats_modulation_several_with_overview_nice_from_three_contorol_compar_single(only_first = True, limit=1,
|
|
duration_exclude=0.45, nfft=int(4096), show=False, save=True,
|
|
position=0, redo=False):
|
|
# Function to load the experimental data
|
|
save_name = 'beat_results_smoothed_limit' + str(limit) + '_minimalduration_' + str(duration_exclude) + '_all'
|
|
print(save_name)
|
|
datas_new = []
|
|
old_cells = False
|
|
if old_cells:
|
|
# das ist falls ich die alten Datensätze untersuchen will
|
|
datasets = ['2021-08-03-ab-invivo-1', '2019-09-10-ad-invivo-1', '2019-11-13-aa-invivo-1', '2021-06-18-ae-invivo-1']
|
|
data_names = ['2017-10-25-am-invivo-1', '2017-08-15-ad-invivo-1',
|
|
'2018-03-28-aa-invivo-1', '2019-11-13-aa-invivo-1',
|
|
'2019-09-10-ad-invivo-1', '2019-10-28-ag-invivo-1',
|
|
|
|
'2021-06-18-ae-invivo-1',
|
|
|
|
'2018-09-06-au-invivo-1',
|
|
'2022-01-05-aa-invivo-1', '2022-02-10-ac-invivo-1',
|
|
'2017-07-18-ai-invivo-1', '2019-11-18-ab-invivo-1',
|
|
'2022-02-10-ad-invivo-1', '2018-03-22-af-invivo-1',
|
|
'2019-05-15-aj-invivo-1', '2018-08-14-ac-invivo-1',
|
|
'2020-08-12-ab-invivo-1', '2020-08-03-ad-invivo-1',
|
|
'2021-08-03-ab-invivo-1', '2018-08-14-aa-invivo-1',
|
|
'2018-01-19-aj-invivo-1', '2018-08-14-ad-invivo-1',
|
|
'2019-10-21-aj-invivo-1', '2019-09-10-ac-invivo-1',
|
|
'2018-09-06-as-invivo-1', '2019-09-11-ae-invivo-1',
|
|
'2022-01-08-aa-invivo-1', '2019-05-15-ai-invivo-1',
|
|
'2018-08-24-ai-invivo-1', '2018-06-25-aa-invivo-1']
|
|
datasets = [
|
|
'2021-08-03-ab-invivo-1'] # , '2021-06-18-ae-invivo-1','2021-08-03-aa-invivo-1','2019-09-10-ad-invivo-1', '2019-11-13-aa-invivo-1', ]
|
|
datasets = ['2021-08-03-ae-invivo-1', '2021-08-03-ab-invivo-1']
|
|
datasets, data_dir = find_all_dir_cells()
|
|
datasets = np.sort(datasets)[::-1]
|
|
#datasets, frame_desired, mt_names, tag_names = find_out_cells_big()
|
|
frame_desired = pd.read_csv('../code/calc_base/find_contrasts_SAMs-SAM_amplitudes.csv')
|
|
frame_big = frame_desired[(frame_desired.contrast > 29) | (frame_desired.contrast_true > 29)]
|
|
datasets = frame_big.cell.unique()
|
|
# frame_big.contrast_true#
|
|
datasets = datasets[::-1]
|
|
datasets = ['2020-10-29-ac-invivo-1']#['2020-10-20-ad-invivo-1',
|
|
#'2020-10-29-ac-invivo-1',
|
|
#'2020-10-29-ai-invivo-1',
|
|
|
|
#'2018-09-13-aa-invivo-1'
|
|
#]
|
|
else:
|
|
frame = pd.read_pickle(
|
|
load_folder_name('calc_cocktailparty') + '/calc_data_peaks_threewave-spikes_all_psdEOD_1_nfft_16384[05,original]_psdEOD__sqrt__points_5_ALL_.pkl')
|
|
# path_new2 = load_folder_name('calc_cocktailparty') + '/calc_data_peaks_threewave-spikes_all_psdEOD_1_nfft_16384[05,original]_psdEOD__sqrt__points_5_ALL_.pkl'
|
|
|
|
datasets = np.sort(frame.cell.unique())[::-1]
|
|
# aber ich will ja die neuen Datensätzte
|
|
datasets, loss, gain = find_cells_for_phaselocking()
|
|
frame_all = pd.read_pickle(
|
|
load_folder_name('calc_cocktailparty') + '/calc_data_peaks_threewave-spikes_all_psdEOD_1_nfft_16384[05,original]_psdEOD__sqrt__points_5_ALL_.pkl')#pd.read_pickle('../code/calc_phaselocking/calc_phaselocking-phaselocking5_big.pkl')
|
|
#cells_for_phaselocking, loss, gain = find_cells_for_phaselocking()
|
|
#embed()
|
|
colors = ['red', 'green', 'purple', 'blue']
|
|
markers = ['.', 'o', '*', '+']
|
|
|
|
|
|
plot_style()
|
|
default_settings()
|
|
for i, cell in enumerate(datasets):
|
|
|
|
# dataset = '2021-06-18-ae-invivo-1'
|
|
# embed()
|
|
# if cont:
|
|
path = '../data/cells/' + cell + '/' + cell + ".nix"#cell.split(os.path.sep)[-1]
|
|
path2 = '../data/cells/' + cell + '/samspikes.dat'
|
|
path3 = '../data/cells/' + cell + '/samspikes1.dat'
|
|
print(cell)
|
|
# embed()
|
|
if os.path.exists(path):
|
|
file = nix.File.open(path, nix.FileMode.ReadOnly)
|
|
b = file.blocks[0]
|
|
cont2 = False
|
|
names = []
|
|
names_dataarrays = []
|
|
for stims in b.data_arrays:
|
|
# this seems to be reasonable because the only data with sinewave with higher number was not useful (das betrifft aber nur 2019-05-07-ab und 2019-05-07-ac, wobei wenn ich jetzt ganau schau scheinen das nur komische trials zu sein die wir nicht wirklich brauchen
|
|
if 'sinewave-1_Contrast' in stims.name:
|
|
names.append(stims.name)
|
|
names_dataarrays.append(stims.name)
|
|
#tag_names = find_tags(b, names='sam')
|
|
#tag_names = find_SAM_sine(b)
|
|
'sinewave''SAM'
|
|
#tags_all = find_tags_all(b)
|
|
all_mt_names = find_mt_all(b)
|
|
# embed()
|
|
sam = find_mt(b, 'SAM')
|
|
sine = find_mt(b, 'sine')
|
|
gwn = find_mt(b, 'gwn')
|
|
if (len(sine) > 0) or (len(sam) > 0):
|
|
cont2 = True
|
|
|
|
test = False
|
|
if test:
|
|
test_in_plot_phaselocking(b, path)
|
|
|
|
if cont2 == True:
|
|
|
|
counter = 0
|
|
choice = 'SAM_sinewave' # 'SAM'#'SAM_sinewave'
|
|
|
|
|
|
DF1s, DF2s, frame_data_cell, c2_unique, c2_unique_big, c1_unique_big, c1_unique = get_dfs_and_contrasts_from_calccocktailparty(
|
|
cell, frame_all)
|
|
|
|
|
|
if only_first:
|
|
DF1s_here = [DF1s[0]]
|
|
DF2s_here = [DF2s[0]]
|
|
else:
|
|
DF1s_here = DF1s#[0]]
|
|
DF2s_here = DF2s#[0]]
|
|
#embed()
|
|
for d1, DF1 in enumerate(DF1s_here):
|
|
for d2, DF2 in enumerate(DF2s):
|
|
|
|
# das ist blöd man sollte die abgespeicherten Ms machen
|
|
frame_df0 = frame_data_cell[(np.round(frame_data_cell.m1,2) == DF1) & (np.round(frame_data_cell.m2,2) == DF2)]
|
|
|
|
#frame_df0 = frame_data_cell[(np.abs(frame_data_cell.m1 - DF1) < 0.02) & (
|
|
# np.abs(frame_data_cell.m2 - DF2) < 0.02)]
|
|
contrasts_2_chosen = np.sort(np.unique(frame_df0.c2)) # c1_unique_big[0:5]
|
|
|
|
|
|
|
|
for c_nr2, c2 in enumerate(contrasts_2_chosen):
|
|
|
|
frame_df = frame_df0[(frame_df0.c2 == c2)]
|
|
|
|
|
|
contrasts = np.unique(frame_df.c1)[::-1]
|
|
if len(contrasts) > 0:
|
|
contrasts_1_chosen = contrasts # , indeces_show = choice_specific_indices(contrasts, negativ = 'positiv', units = 5, cut_val = 1)
|
|
|
|
for c_nr, c1 in enumerate(contrasts_1_chosen):
|
|
|
|
|
|
|
|
if len(frame_df) > 0:
|
|
|
|
|
|
# frame = pd.read_csv(load_folder_name('calc_cocktailparty') + '/' + full_names[0] + '.csv')
|
|
frame_df_mean = frame_df # .groupby(['c1']).mean()#, 'c2'])
|
|
|
|
frame_c1 = frame_df[(frame_df.c1 == c1)] # | (frame_df.mt_type == 'base')
|
|
print(c_nr)
|
|
mt_types = frame_c1.mt_type.unique()
|
|
for mt_type in mt_types:
|
|
|
|
|
|
#
|
|
# plt_cocktailparty_lines(ax, frame_df)
|
|
|
|
#embed()
|
|
find_mt_all(b)
|
|
|
|
|
|
|
|
keys = ['control_01']#,'base_0', 'control_02', '012']
|
|
nr_col = len(keys)
|
|
|
|
axts = []
|
|
axps = []
|
|
|
|
|
|
#if 'base' not in mt_type:
|
|
frame_type = frame_c1[
|
|
(frame_c1.mt_type == mt_type)] # | (frame_df.mt_type == 'base')
|
|
|
|
|
|
|
|
|
|
# plt.suptitle(score)
|
|
# frame_cell['contrast'],frame_cell['vs']
|
|
# if i >= row * col - col:
|
|
|
|
|
|
V_1, eods_all, f, mts, sampling_rate, spike_times, spikes_mat, spikes_mats = load_spikes_eods_phaselock(
|
|
b, cell, datas_new, frame_type, names, nfft, path)
|
|
|
|
|
|
|
|
|
|
|
|
for nr_example in range(len(spike_times)):
|
|
|
|
###################################
|
|
plt.suptitle(cell + ' DF1=' + str(DF1) + ' DF2=' + str(DF2))
|
|
|
|
plt.figure(figsize=(20, 14))
|
|
gs0 = gridspec.GridSpec(1, 2, width_ratios=[4, 1], hspace=0.4,
|
|
left=0.045,
|
|
right=0.97) #
|
|
# Vergleichsplot
|
|
grid1 = gridspec.GridSpecFromSubplotSpec(2, 1, wspace=0.2, hspace=0.2,
|
|
subplot_spec=gs0[1])
|
|
|
|
plt_lines_phaselockingloss(frame_df_mean, grid1)
|
|
grid2 = gridspec.GridSpecFromSubplotSpec(6, nr_col,
|
|
height_ratios=[1, 1, 0.5, 1,
|
|
1, 1],
|
|
wspace=0.2, hspace=0.2,
|
|
subplot_spec=gs0[0])
|
|
|
|
key = 'control_01'
|
|
plt.suptitle('data ' + cell + ' ' + mts.name + ' ' + '_DF1_' + str(
|
|
DF1) + '_DF2_' + str(DF2) + '\n_c2_' + str(c2) + '_c1_' + str(c1)+' Trial '+str(nr_example))
|
|
|
|
######################
|
|
# plt local eod
|
|
|
|
# ax = np.concatenate(ax)
|
|
|
|
# sampling = 40000
|
|
|
|
# ax[0, counter].set_ylabel('mV')
|
|
xlim = [200, 250]
|
|
# if m == 0:
|
|
#nr_example = 0
|
|
|
|
###########################################
|
|
# time spikes
|
|
for k, key in enumerate(keys):
|
|
axt = plt.subplot(grid2[1, k])
|
|
|
|
#embed()
|
|
time = plt_voltage_phaselock(V_1, axt, axts, counter, nr_example, sampling_rate,
|
|
spike_times, xlim, key = key, color = color_three(key))
|
|
|
|
##########################################
|
|
axt = plt.subplot(grid2[0, k])
|
|
|
|
plt_stimulus_phaselock(axt, axts, counter, eods_all, frame_type, nr_example,
|
|
sampling_rate, spike_times, time, xlim, key = key, color = color_three(key))
|
|
axt.set_title(key)
|
|
axt.set_ylabel('')
|
|
##########################################
|
|
# time psd
|
|
axp = plt.subplot(grid2[3, k])
|
|
axp2 = plt.subplot(grid2[4, k])
|
|
|
|
spikes_mat = plt_psds_phaselock(axp, axp2, axps, counter, f, nr_example, sampling_rate,
|
|
spikes_mat, spikes_mats, key = key, color = color_three(key))
|
|
axps.append(axp)
|
|
axps.append(axp2)
|
|
|
|
#embed()
|
|
##########################################
|
|
# hists
|
|
axi = plt.subplot(grid2[5, k])
|
|
#frame_type.iloc[nr_example].EODf
|
|
isi = calc_isi(spike_times[nr_example][key], frame_type.iloc[nr_example].EODf)
|
|
axi.hist(np.concatenate(isi), bins = 100)#color = 'grey',
|
|
axi.axvline(x = 1, color = 'black', linestyle = '--')
|
|
#embed()
|
|
if len(axts) > 0:
|
|
axts[0].get_shared_y_axes().join(*axts[0::2])
|
|
axts[1].get_shared_y_axes().join(*axts[1::2])
|
|
|
|
join_x(axts)
|
|
join_y(axps)
|
|
set_same_ylim(axps)
|
|
join_x(axps)
|
|
# join
|
|
individual_tag = 'data' + cell + '_DF1_' + str(DF1)+ '_DF2_' + str(DF2)+'_c2_'+str(c2)+'_c1_'+str(c1)+'_trial_'+str(nr_example)
|
|
# save_visualization()
|
|
save_visualization(individual_tag, show)
|
|
|
|
print('finished examples')
|
|
embed()
|
|
|
|
|
|
def plt_lines_phaselockingloss(frame_df_mean, grid1):
|
|
cs = {}
|
|
means = {}
|
|
scores_datas = [['amp_f0_01_original', 'amp_f0_012_original',
|
|
'amp_B1_01_original', 'amp_B1_012_original'],
|
|
['amp_f0_02_original',
|
|
'amp_f0_0_original', 'amp_B2_02_original',
|
|
'amp_B2_012_original']]
|
|
colorss = [['green', 'purple', 'green', 'blue'],
|
|
['orange', 'red', 'orange', 'red']]
|
|
linestyless = [['--', '--', '-', '-'], ['--', '--', '-', '-']]
|
|
for s_nr, score in enumerate(scores_datas):
|
|
scores_data = scores_datas[s_nr]
|
|
linestyles = linestyless[s_nr]
|
|
colors = colorss[s_nr]
|
|
|
|
ax = plt.subplot(grid1[s_nr])
|
|
for sss, score in enumerate(scores_data):
|
|
|
|
ax.plot(np.sort(frame_df_mean['c1']),
|
|
frame_df_mean[score].iloc[np.argsort(frame_df_mean['c1'])],
|
|
color=colors[sss], linestyle=linestyles[
|
|
sss], label=score.replace('_mean', '').replace('amp_',
|
|
'') + '[Hz]') # +str(np.round(np.mean(group_restricted[score_data]))), label = 'c_small='+str(c_small)+' c_big='+str(c_big)
|
|
if sss not in means.keys():
|
|
means[sss] = []
|
|
cs[sss] = []
|
|
ax.set_ylabel('Peak Amplitude',
|
|
fontsize=8)
|
|
ax.set_xlabel('Contrast small')
|
|
ax.set_xlabel('Contrast small')
|
|
ax.legend()
|
|
|
|
|
|
def find_cells_for_phaselocking():
|
|
cells_for_phaselocking = [
|
|
'2023-05-12-aq-invivo-1', '2023-05-03-aa-invivo-1',
|
|
'2023-05-12-al-invivo-1', '2023-05-12-ai-invivo-1',
|
|
'2023-05-24-ac-invivo-1', '2023-05-12-at-invivo-1',
|
|
'2023-05-12-as-invivo-1',
|
|
|
|
'2023-05-12-ap-invivo-1','2023-05-12-af-invivo-1', '2023-05-12-ae-invivo-1',
|
|
'2023-05-12-ar-invivo-1',]
|
|
loss = '2023-05-12-ap-invivo-1'# (Verlust)
|
|
gain = '2023-05-03-aa-invivo-1'
|
|
return cells_for_phaselocking, loss, gain
|
|
|
|
def load_spikes_eods_phaselock(b, cell, datas_new, frame_type, names, nfft, path):
|
|
# mt_names = frame_type.mt_name.unique()
|
|
# for m, mt_name in enumerate(mt_names):
|
|
frame_name = frame_type # [frame_type.mt_name == mt_name]
|
|
mt_idxs = list(map(int, np.array(frame_name.mt_idx)))
|
|
# embed()
|
|
mt_names = frame_type.mt_name.unique()
|
|
# for m, mt_name in enumerate(mt_names[0]):
|
|
# embed()
|
|
# np.where(all_mt_names == mt_name)
|
|
mts = b.multi_tags[mt_names[0]]
|
|
# for mt_nr, mts in mt_idx:#enumerate(b.multi_tags):
|
|
print(mts.name)
|
|
features, dfs, contrasts, id = get_features_and_info(mts, dfs = dfs, contrasts = contrasts, ids = ids)
|
|
eod_frs, eod_redo = get_eod_fr_simple(b, names)
|
|
eod = b.data_arrays['LocalEOD-1'][:]
|
|
names = []
|
|
for stims in b.data_arrays:
|
|
names.append(stims.name)
|
|
spikes = b.data_arrays['Spikes-1'][:]
|
|
fr = b.metadata.sections[0].sections['Cell']['Cell properties'][
|
|
'Firing Rate1']
|
|
print(cell + ' Beat calculation')
|
|
datas_new.append(cell)
|
|
try:
|
|
dataset = rlx.Dataset(path)
|
|
rlx_problem = True
|
|
except:
|
|
rlx_problem = False
|
|
print('rlx problem')
|
|
# embed()
|
|
spike_times = [[]] * len(mts.positions[:])
|
|
eods_all = []
|
|
eods_all_g = []
|
|
V_1 = []
|
|
spike_times = []
|
|
smooth = []
|
|
spikes_mats = []
|
|
for m in mt_idxs: # range(len(mts.positions[:]))
|
|
|
|
frame_features = feature_extract_cut(mts, m)
|
|
|
|
zeroth_cut, first_cut, second_cut, third_cut, fish_number, fish_cuts, whole_duration, delay, cont = load_four_durations(
|
|
mts, frame_features, 0, m)
|
|
|
|
try:
|
|
#eods, _ = link_arrays_eod(b, mts.positions[:][m], mts.extents[:][m],
|
|
# 'LocalEOD-1')
|
|
eods, spikes_mt = load_eod_for_three(b, delay, mts, m, load_eod_array='LocalEOD-1')
|
|
except:
|
|
print('eods thing')
|
|
embed()
|
|
|
|
|
|
# embed()
|
|
# global_stimulus = mts.retrieve_data(m, 'GlobalEFieldStimulus')[:]
|
|
sampling_rate = get_sampling(b, 'EOD')
|
|
if eod_redo == True:
|
|
p, f = ml.psd(eods - np.mean(eods), Fs=sampling_rate, NFFT=nfft,
|
|
noverlap=nfft // 2)
|
|
eod_fr = f[np.argmax(p)]
|
|
else:
|
|
eod_fr = eod_frs[m]
|
|
cut = 0.05
|
|
|
|
eod_mt, spikes_mt, time_eod, time_laod_eods, timepoint = spike_times_cocktailparty(b, delay, mts, m)
|
|
|
|
v_1, spikes_mt = load_eod_for_three(b, delay, mts, m, load_eod_array='V-1')
|
|
eods_g, spikes_mt = load_eod_for_three(b, delay, mts, m, load_eod_array='EOD')
|
|
|
|
|
|
#spikes_mt = (mts.retrieve_data(m, 'Spikes-1')[:] - mts.positions[m])
|
|
|
|
|
|
|
|
|
|
devname, smoothened2, smoothed05, mat, time_here, arrays_calc, effective_duration, spikes_cut = cut_spikes_sequences(
|
|
delay, time_eod[-1] + np.abs(time_eod[0]) - cut * 2,
|
|
spikes_mt, sampling_rate, fish_cuts, cut=cut,
|
|
fish_number=fish_number,cut_compensate = True, devname_orig=['original'], cut_length=False)
|
|
|
|
spike_times.append(spikes_cut)
|
|
v_1_cut, _ = cut_eod_sequences(v_1, fish_cuts,
|
|
time_eod, cut=cut,
|
|
rec=False,
|
|
fish_number=fish_number)
|
|
|
|
eods_cut, _ = cut_eod_sequences(eods, fish_cuts,
|
|
time_eod, cut=cut,
|
|
rec=False,
|
|
fish_number=fish_number)
|
|
|
|
eods_g_cut, _ = cut_eod_sequences(eods_g, fish_cuts,
|
|
time_eod, cut=cut,
|
|
rec=False,
|
|
fish_number=fish_number)
|
|
spikes_mats.append(arrays_calc[0])
|
|
test = False
|
|
if test:
|
|
fig, ax = plt.subplots(2,1)
|
|
ax[0].plot(np.arange(0, len(v_1_cut['control_01'])/sampling_rate, 1/sampling_rate), v_1_cut['control_01'])
|
|
ax[0].scatter(spikes_cut['control_01'][0], np.max(v_1_cut['control_01'])*np.ones(len(spikes_cut['control_01'][0])))
|
|
|
|
ax[1].plot(np.arange(0, len(arrays_calc[0]['control_01']) / sampling_rate, 1 / sampling_rate),arrays_calc[0]['control_01'])
|
|
ax[1].scatter(spikes_cut['control_01'][0],
|
|
np.max(arrays_calc[0]['control_01']) * np.ones(len(spikes_cut['control_01'][0])))
|
|
|
|
plt.show()
|
|
|
|
|
|
|
|
eods_all.append(eods_cut)
|
|
V_1.append(v_1_cut)
|
|
eods_all_g.append(eods_g_cut)
|
|
# [m]
|
|
#embed()
|
|
test = True
|
|
|
|
return V_1, eods_all, f, mts, sampling_rate, spike_times, spikes_mats[0], spikes_mats
|
|
|
|
|
|
def plt_voltage_phaselock(V_1, axt, axts, counter, nr_example, sampling_rate, spike_times, xlim, key = '01', color = 'purple'):
|
|
axt.set_ylabel('local')
|
|
#embed()
|
|
time = np.arange(0, len(V_1[nr_example][key]) / sampling_rate,
|
|
1 / sampling_rate) * 1000
|
|
axt.plot(time, V_1[nr_example][key], color=color, linewidth=0.5)
|
|
# axt.eventplot(spike_times[nr_example])
|
|
# axt.eventplot((spike_times[nr_example]), lineoffsets=np.max(V_1[nr_example]),
|
|
# color='black', s = 10) # np.max(v1)*
|
|
#embed()
|
|
if (len(spike_times[nr_example][key][0])>0) & (len(V_1[nr_example][key]) > 0):
|
|
try:
|
|
axt.scatter((spike_times[nr_example][key][0])* 1000,
|
|
np.max(V_1[nr_example][key]) * np.ones(len(spike_times[nr_example][key][0]))
|
|
, color='black', s=10,
|
|
marker='|') # np.max(v1)*lineoffsets=np.max(V_1[nr_example]),
|
|
except:
|
|
print('spikes something')
|
|
embed()
|
|
# embed()
|
|
if len(xlim) > 0:
|
|
axt.set_xlim(xlim)
|
|
# axt.set_title(contrast)
|
|
axt.set_xlabel('Time [ms]')
|
|
if counter != 0:
|
|
remove_yticks(axt)
|
|
axt.set_ylabel('')
|
|
axts.append(axt)
|
|
return time
|
|
|
|
|
|
def plt_psds_phaselock(axp, axp2, axps, counter, f, nr_example, sampling_rate, spikes_mat, spikes_mats, color = 'purple', key = '01'):
|
|
ps = []
|
|
for s, spikes_mat in enumerate(spikes_mats):
|
|
try:
|
|
p, f = ml.psd(spikes_mat[key] - np.mean(spikes_mat[key]), Fs=sampling_rate,
|
|
NFFT=2 ** 13,
|
|
noverlap=2 ** 13 / 2)
|
|
except:
|
|
print('p something')
|
|
embed()
|
|
|
|
ps.append(p)
|
|
if s == nr_example:
|
|
color = color
|
|
zorder = 100
|
|
axp.plot(f, p, color=color, zorder=zorder)
|
|
else:
|
|
color = 'grey'
|
|
zorder = 1
|
|
axp2.plot(f, p, color=color, zorder=zorder)
|
|
axp2.set_xlim(0, 1000)
|
|
axp.set_xlim(0, 1000)
|
|
remove_xticks(axp)
|
|
axp2.plot(f, np.mean(ps, axis=0), color='black', zorder=2, linestyle='--')
|
|
axp2.set_xlabel('Power [Hz]')
|
|
if counter != 0:
|
|
remove_yticks(axp2)
|
|
axp2.set_ylabel('')
|
|
if counter != 0:
|
|
remove_yticks(axp)
|
|
axp.set_ylabel('')
|
|
|
|
return spikes_mat
|
|
|
|
|
|
def plt_stimulus_phaselock(axt, axts, counter, eods_all, frame_type, nr_example, sampling_rate, spike_times, time,
|
|
xlim, key = '01', color = 'red'):
|
|
stimulus = eods_all[nr_example][key] # eods_g + Efield
|
|
if len(stimulus)> 0:
|
|
axt.set_title(' c1' + str(np.unique(frame_type.c1)) + ' c2' + str(np.unique(frame_type.c2)))
|
|
axts.append(axt)
|
|
try:
|
|
time = np.arange(0, len(stimulus) / sampling_rate,
|
|
1 / sampling_rate) * 1000
|
|
except:
|
|
print('time all')
|
|
embed()
|
|
try:
|
|
eods_am, eod_norm = extract_am(stimulus, time, norm=False)
|
|
except:
|
|
print('am something')
|
|
|
|
axt.plot(time, eod_norm, color='grey', linewidth=0.5)
|
|
axt.plot(time, eods_am, color=color)
|
|
# axt.eventplot((spike_times[nr_example]), lineoffsets=np.mean(eod_norm),
|
|
# color='black', s = 10) # np.max(v1)*
|
|
#embed()
|
|
axt.scatter(np.array(spike_times[nr_example][key][0])* 1000,
|
|
np.mean(eod_norm) * np.ones(len(spike_times[nr_example][key][0]))
|
|
, color='black', s=10,
|
|
marker='|') # np.max(v1)*lineoffsets=np.max(V_1[nr_example]),
|
|
# axt.eventplot(spike_times[nr_example], s = 10)
|
|
# else:
|
|
# ax[0 + nr, counter].plot(time, stimulus, color='red')
|
|
if len(xlim)> 0:
|
|
axt.set_xlim(xlim)
|
|
remove_xticks(axt)
|
|
# for ax in axts:
|
|
if counter != 0:
|
|
remove_yticks(axt)
|
|
axt.set_ylabel('')
|
|
# ax[1 + nr, counter].plot(time, eods_g)
|
|
# ax[1 + nr, counter].set_ylabel('global')
|
|
# ax[1 + nr, counter].set_xlim(xlim)
|
|
# plt_modulation_here(fr, spikes_mats_mean, smooth_mean, dfs[m], cell, m,show, eods, eods_g, mts, spike_times)
|
|
color = 'grey'
|
|
|
|
|
|
def get_features_and_info(mts, dfs = [], contrasts = [], ids = []):
|
|
features = []
|
|
id = []
|
|
for ff, f in enumerate(mts.features):
|
|
if 'id' in f.data.name:
|
|
id = f.data.name
|
|
elif 'Contrast' in f.data.name:
|
|
contrasts = mts.features[f.data.name].data[:]
|
|
elif 'DeltaF' in f.data.name:
|
|
dfs = mts.features[f.data.name].data[:]
|
|
else:
|
|
features.append(f.data.name)
|
|
return features, dfs, contrasts, id
|
|
|
|
|
|
def test_in_plot_phaselocking(b, path):
|
|
dataset = rlx.Dataset(path)
|
|
repro_runs = dataset.repro_runs()
|
|
dataset.plot_timeline()
|
|
eod_data_array = b.data_arrays['LocalEOD-1']
|
|
sp_data_array = b.data_arrays['Spikes-1']
|
|
g_eod_data_array = b.data_arrays['EOD']
|
|
fig, ax = plt.subplots(2, 1, sharex=True, figsize=(12, 5.5))
|
|
time = np.arange(0, len(eod_data_array[:]) / 4000, 1 / 4000)
|
|
ax[0].plot(time, eod_data_array[:])
|
|
ax[0].set_title('local EOD')
|
|
time = np.arange(0, len(g_eod_data_array[:]) / 4000, 1 / 4000)
|
|
ax[1].plot(time, g_eod_data_array[:])
|
|
ax[1].set_title('global EOD')
|
|
ax[1].set_ylabel('mV')
|
|
ax[1].set_xlabel('Time [s]')
|
|
plt.show()
|
|
|
|
def get_most_similiar_spikes(all_spikes, am_corr_cut, beat_cut, error, maxima, spike, spikes_cut):
|
|
# embed()
|
|
most_similiar = np.where(error < np.sort(error)[6])[0]
|
|
beat_final = []
|
|
am_final = []
|
|
spike_sm = []
|
|
spike = []
|
|
max = []
|
|
# ok wir machen das erstmal am ähnlichsten das sollte schon passen!
|
|
max_corr = True
|
|
if max_corr:
|
|
for l in range(len(most_similiar)):
|
|
beat_final.append(beat_cut[most_similiar[l]])
|
|
spike_sm.append(spikes_cut[most_similiar[l]])
|
|
spike.append(all_spikes[most_similiar[l]])
|
|
max.append(maxima[most_similiar[l]])
|
|
am_final.append(am_corr_cut[most_similiar[l]])
|
|
else:
|
|
beat_final = beat_cut
|
|
spike_sm = spikes_cut
|
|
spike = all_spikes
|
|
max = maxima
|
|
am_final = am_corr_cut
|
|
return am_final, beat_final, most_similiar, spike, spike_sm
|
|
|
|
|
|
def plt_beats_modulation_several_with_overview_nice_big_final3(contrasts_given=[], datasets=['2020-10-20-ad-invivo-1'],
|
|
dfs_all_unique_given=[25], limit=1,
|
|
duration_exclude=0.45, nfft=int(4096), show=False,
|
|
save=True,
|
|
position=0, redo=False):
|
|
# Function to load the experimental data
|
|
save_name = 'beat_results_smoothed_limit' + str(limit) + '_minimalduration_' + str(duration_exclude) + '_all'
|
|
print(save_name)
|
|
|
|
frame_all = pd.read_pickle(load_folder_name('calc_phaselocking') + '/calc_phaselocking-phaselocking5_big.pkl')
|
|
colors = ['red', 'green', 'purple', 'blue']
|
|
markers = ['.', 'o', '*', '+']
|
|
plot_style()
|
|
for i, cell in enumerate(datasets):
|
|
|
|
path = load_folder_name('data') + '/cells/' + cell + '/' + cell + ".nix" # cell.split(os.path.sep)[-1]
|
|
path2 = '../data/cells/' + cell + '/samspikes.dat'
|
|
path3 = '../data/cells/' + cell + '/samspikes1.dat'
|
|
print(cell)
|
|
cells_exclude = ['2020-10-29-af-invivo-1', '2019-05-07-cb-invivo-1']
|
|
|
|
df_pos = False
|
|
if cell not in cells_exclude:
|
|
# embed()
|
|
if os.path.exists(path):
|
|
print('exists')
|
|
file = nix.File.open(path, nix.FileMode.ReadOnly)
|
|
b = file.blocks[0]
|
|
cont2 = False
|
|
names = []
|
|
names_dataarrays = []
|
|
for stims in b.data_arrays:
|
|
# this seems to be reasonable because the only data with sinewave with higher number was not useful (das betrifft aber nur 2019-05-07-ab und 2019-05-07-ac, wobei wenn ich jetzt ganau schau scheinen das nur komische trials zu sein die wir nicht wirklich brauchen
|
|
if 'sinewave-1_Contrast' in stims.name:
|
|
names.append(stims.name)
|
|
names_dataarrays.append(stims.name)
|
|
# tag_names = find_tags(b, names='sam')
|
|
# tag_names = find_SAM_sine(b)
|
|
'sinewave''SAM'
|
|
# tags_all = find_tags_all(b)
|
|
all_mt_names = find_mt_all(b)
|
|
# embed()
|
|
sam = find_mt(b, 'SAM')
|
|
sine = find_mt(b, 'sine')
|
|
gwn = find_mt(b, 'gwn')
|
|
if (len(sine) > 0) or (len(sam) > 0):
|
|
cont2 = True
|
|
|
|
if cont2 == True:
|
|
print('cont2')
|
|
counter = 0
|
|
choice = 'SAM_sinewave' # 'SAM'#'SAM_sinewave'
|
|
|
|
frame_cell = frame_all[frame_all['cell'] == cell]
|
|
if len(frame_cell) < 1:
|
|
# falls frame 5 noch nicht fertig ist haben wir ja den Backup von davor!
|
|
frame_all = pd.read_pickle('../code/calc_phaselocking/calc_phaselocking-phaselocking_big.pkl')
|
|
frame_cell = frame_all[frame_all['cell'] == cell]
|
|
|
|
# embed()
|
|
if len(frame_cell) > 0:
|
|
if len(dfs_all_unique_given) < 1:
|
|
dfs_all_unique = np.unique(frame_cell.df_sign.dropna())[::-1]
|
|
df_name = 'df_sign'
|
|
df_pos = '' # 'min_df'
|
|
# embed()
|
|
dfs_all_unique = list(dfs_all_unique)
|
|
# todo: also hier gibts halt noch pobleme
|
|
|
|
if len(np.unique(np.array(dfs_all_unique))) < 2:
|
|
df_name = 'df'
|
|
dfs_all_unique = np.unique(frame_cell.df.dropna())[::-1]
|
|
dfs_all_unique = list(dfs_all_unique)
|
|
else:
|
|
dfs_all_unique = dfs_all_unique_given
|
|
df_name = 'df_sign'
|
|
# try:
|
|
|
|
if len(dfs_all_unique) > 0:
|
|
# dfs_all_unique = dfs_all_unique[~np.where(np.isnan(dfs_all_unique))[0]]
|
|
if df_pos == 'min_df':
|
|
try:
|
|
dfs_all_unique = [dfs_all_unique[np.argmin(np.abs(dfs_all_unique))]]
|
|
except:
|
|
print('df min')
|
|
embed()
|
|
|
|
for df_chosen in dfs_all_unique:
|
|
# embed()
|
|
if not np.isnan(df_chosen):
|
|
|
|
frame_df = frame_cell[frame_cell[df_name] == df_chosen]
|
|
contrasts_all_unique = np.unique(frame_df.contrast)
|
|
contrasts_all_unique = contrasts_all_unique[~np.isnan(contrasts_all_unique)]
|
|
if len(contrasts_given) > 0:
|
|
contrasts_all_unique = contrasts_given
|
|
if len(contrasts_all_unique) > 1:
|
|
# embed()
|
|
mt_types = frame_df.mt_type.unique()
|
|
# embed()
|
|
for mt_type in mt_types:
|
|
if 'base' not in mt_type:
|
|
contrasts_here = []
|
|
frame_type = frame_df[
|
|
(frame_df.mt_type == mt_type)] # | (frame_df.mt_type == 'base')
|
|
# fig, ax = plt.subplots(6, len(np.unique(contrasts_all_unique))+1, figsize=(12, 5.5))
|
|
# fig = plt.figure(figsize=(20, 8))
|
|
|
|
default_figsize(column=2, length=3.5) #5
|
|
# plt.figure(figsize=(2, 6))
|
|
gs0 = gridspec.GridSpec(1, 1, hspace=0.4,bottom = 0.18,
|
|
left=0.1, top=0.94,
|
|
right=0.97) # width_ratios=[4, 1],
|
|
|
|
# embed()
|
|
# grid1 = gridspec.GridSpecFromSubplotSpec(2, 1, wspace=0.2, hspace=0.2,
|
|
# subplot_spec=gs0[1])
|
|
#
|
|
# axs = plt.subplot(grid1[0])
|
|
|
|
# embed()
|
|
# plt_single_phaselockloss(colors, frame_cell, df_chosen, scores, cell,
|
|
# axs)
|
|
# axs.set_xlim(-10, 100)
|
|
|
|
if (cell == '2020-10-20-ad-invivo-1') & (
|
|
50 == df_chosen): # das erst fehlt aus welchem Grund auch immer
|
|
reduce = 0
|
|
else:
|
|
reduce = 0
|
|
|
|
nr_col = int(len(np.unique(contrasts_all_unique))) - reduce
|
|
grid2 = gridspec.GridSpecFromSubplotSpec(5, nr_col,
|
|
height_ratios=[1, 0.5, 1, 0.1,
|
|
1, ],
|
|
wspace=0.2, hspace=0.2,
|
|
subplot_spec=gs0[0])#0.7,1
|
|
#
|
|
|
|
# plt.suptitle(score)
|
|
# frame_cell['contrast'],frame_cell['vs']
|
|
# if i >= row * col - col:
|
|
axts = []
|
|
axfs = []
|
|
axps = []
|
|
# embed()
|
|
mt_names = frame_type.mt_name.unique()
|
|
counters = []
|
|
for m, mt_name in enumerate(mt_names):
|
|
frame_name = frame_type[frame_type.mt_name == mt_name]
|
|
mt_idxs = list(map(int, np.array(frame_name.mt_idx)))
|
|
# embed()
|
|
|
|
# np.where(all_mt_names == mt_name)
|
|
mts = b.multi_tags[mt_name]
|
|
|
|
# for mt_nr, mts in mt_idx:#enumerate(b.multi_tags):
|
|
|
|
print(mts.name)
|
|
# choice_mt = sine_sam_there(mts, choice=choice)
|
|
# embed()
|
|
# if 'Df=' + str(df_chosen) in mts.name:
|
|
# if choice_mt:
|
|
name = mts.name
|
|
contrast = name.split('=')[1].split('%')[0]
|
|
# plt.suptitle('DF=' + str(df_chosen))
|
|
#
|
|
# embed()
|
|
# if float(contrast) in [3,7,10,30]:
|
|
|
|
# embed()
|
|
|
|
if contrast not in contrasts_here:
|
|
|
|
print(contrast)
|
|
# embed()
|
|
|
|
if len(np.where(np.round(contrasts_all_unique, 2) == np.round(
|
|
float(contrast), 2))[0]) > 0:
|
|
if np.isnan(float(contrast)):
|
|
counter = 0
|
|
else:
|
|
try:
|
|
counter = np.where(
|
|
np.round(contrasts_all_unique, 2) == np.round(
|
|
float(contrast), 2))[0][0] - reduce # +1
|
|
except:
|
|
print('something')
|
|
embed()
|
|
counters.append(counter)
|
|
# except:
|
|
# print('embed problem')
|
|
# embed()
|
|
name = mts.name
|
|
try:
|
|
dfs = [mts.metadata[mts.name]['DeltaF']] * len(
|
|
mts.positions[:])
|
|
except:
|
|
dfs = mts.metadata['DeltaF']
|
|
|
|
features, dfs, contrasts, id = get_features_and_info(mts,
|
|
dfs=dfs)
|
|
eod_frs, eod_redo = get_eod_fr_simple(b, names)
|
|
|
|
eod = b.data_arrays['LocalEOD-1'][:]
|
|
names = []
|
|
for stims in b.data_arrays:
|
|
names.append(stims.name)
|
|
spikes = b.data_arrays['Spikes-1'][:]
|
|
fr = \
|
|
b.metadata.sections[0].sections['Cell']['Cell properties'][
|
|
'Firing Rate1']
|
|
print(cell + ' Beat calculation')
|
|
# datas_new.append(cell)
|
|
|
|
spike_times = [[]] * len(mts.positions[:])
|
|
eods_all = []
|
|
eods_all_g = []
|
|
V_1 = []
|
|
spike_times = []
|
|
for m in mt_idxs: # range(len(mts.positions[:]))
|
|
try:
|
|
eods, _ = link_arrays_eod(b, mts.positions[:][m],
|
|
mts.extents[:][m],
|
|
'LocalEOD-1')
|
|
except:
|
|
print('eods thing')
|
|
embed()
|
|
# eods = mts.retrieve_data(m, 'LocalEOD-1')[:]
|
|
eods_all.append(eods)
|
|
# eods_g = mts.retrieve_data(m, 'EOD')[:]
|
|
eods_g, sampling_rate = link_arrays_eod(b,
|
|
mts.positions[
|
|
:][m],
|
|
mts.extents[:][
|
|
m],
|
|
'EOD')
|
|
v_1, sampling_rate = link_arrays_eod(b,
|
|
mts.positions[:][
|
|
m],
|
|
mts.extents[:][m],
|
|
'V-1')
|
|
eods_all_g.append(eods_g)
|
|
V_1.append(v_1)
|
|
# Efield = mts.retrieve_data(m, 'GlobalEFieldStimulus')[:]
|
|
|
|
# embed()
|
|
# global_stimulus = mts.retrieve_data(m, 'GlobalEFieldStimulus')[:]
|
|
if eod_redo == True:
|
|
p, f = ml.psd(eods - np.mean(eods),
|
|
Fs=sampling_rate,
|
|
NFFT=nfft,
|
|
noverlap=nfft // 2)
|
|
eod_fr = f[np.argmax(p)]
|
|
else:
|
|
eod_fr = eod_frs[m]
|
|
cut = 0.05
|
|
print('EODF' + str(eod_fr))
|
|
spike_times.append(
|
|
(mts.retrieve_data(m, 'Spikes-1')[:] -
|
|
mts.positions[
|
|
m]) * 1000) # - cut
|
|
# [m]
|
|
test = True
|
|
print(len(spike_times))
|
|
smooth = []
|
|
spikes_mats = []
|
|
for s in range(len(spike_times)):
|
|
try:
|
|
spikes_mat = cr_spikes_mat(spike_times[s] / 1000,
|
|
sampling_rate,
|
|
int(
|
|
mts.extents[:][
|
|
mt_idxs[
|
|
s]] * sampling_rate)) # time[-1] * sampling_rate
|
|
except:
|
|
print('mts prob')
|
|
embed()
|
|
spikes_mats.append(spikes_mat)
|
|
# für den Mean danach schneiden wir das wie das kürzeste
|
|
try:
|
|
# embed()
|
|
smooth.append(gaussian_filter(
|
|
spikes_mat[
|
|
0:int(np.min(mts.extents[:]) * sampling_rate)],
|
|
sigma=0.002 * sampling_rate))
|
|
except:
|
|
print('embed problem')
|
|
embed()
|
|
try:
|
|
smooth_mean = np.mean(smooth, axis=0)
|
|
except:
|
|
print('smoothed thing')
|
|
embed()
|
|
# spikes_mats_mean = np.mean(spikes_mats, axis=0)
|
|
# spikes_mats_mean = np.mean(spikes_mats, axis=0)
|
|
|
|
# plt.suptitle('data ' + cell + ' ' + mts.name)
|
|
|
|
######################
|
|
# plt local eod
|
|
|
|
# ax = np.concatenate(ax)
|
|
|
|
# sampling = 40000
|
|
|
|
# ax[0, counter].set_ylabel('mV')
|
|
skip_nr = 2
|
|
# embed()
|
|
xlim = [0, 1000 * skip_nr / np.abs(dfs[m])]
|
|
# if m == 0:
|
|
nr_example = 0 # 'no'#0
|
|
|
|
##########################################
|
|
try:
|
|
axt = plt.subplot(grid2[0, counter])
|
|
except:
|
|
print('axt something')
|
|
embed()
|
|
|
|
axts.append(axt)
|
|
stimulus = eods_all[nr_example] # eods_g + Efield
|
|
try:
|
|
time = np.arange(0, len(stimulus) / sampling_rate,
|
|
1 / sampling_rate) * 1000
|
|
except:
|
|
print('time all2')
|
|
embed()
|
|
eods_am, eod_norm = extract_am(stimulus, time, norm=False,
|
|
kind='linear')
|
|
|
|
axt.plot(time, eod_norm, color='grey', linewidth=0.5)
|
|
am = False
|
|
if am:
|
|
axt.plot(time, eods_am, color='red')
|
|
# axt.eventplot((spike_times[nr_example]), lineoffsets=np.mean(eod_norm),
|
|
# color='black', s = 10) # np.max(v1)*
|
|
scatter_extra = False
|
|
if scatter_extra:
|
|
axt.scatter(spike_times[nr_example],
|
|
np.mean(eod_norm) * np.ones(
|
|
len(spike_times[nr_example]))
|
|
, color='black', s=10,
|
|
marker='|') # np.max(v1)*lineoffsets=np.max(V_1[nr_example]),
|
|
axt.show_spines('')
|
|
|
|
axt.set_xlim(xlim)
|
|
axt.set_xlabel('Time [ms]')
|
|
|
|
# for ax in axts:
|
|
if counter != 0:
|
|
remove_yticks(axt)
|
|
axt.set_ylabel('')
|
|
scores = ['dsp_perc95_', 'dsp_max_', 'dsp_mean_']
|
|
frame_double_spikes = frame_name[
|
|
frame_name.contrast == float(contrast)]
|
|
# embed()
|
|
# ds$_{m}$='+str(np.round(np.nanmean(frame_double_spikes['dsp_mean_']),2))+' ds$_{95}$='+str(np.round(np.nanmean(frame_double_spikes['dsp_perc95_']),2))
|
|
axt.text(1, 1, '$c_{' + vary_val() + '}=%s$' % (contrast) + '$\%$, '+' $\Delta f_{' + vary_val() + '}= %s$\,Hz' % (int(dfs[m])), ha='right',
|
|
transform=axt.transAxes)
|
|
# plt_modulation_here(fr, spikes_mats_mean, smooth_mean, dfs[m], cell, m,show, eods, eods_g, mts, spike_times)
|
|
color = 'grey'
|
|
scores = ['amp_stim', 'amp_df', 'amp_f0',
|
|
'amp_fmax_interval'] # 'stim', 'f0',
|
|
# frame_df = frame_cell[
|
|
# (frame_cell[df_name] == df_chosen) | (
|
|
# np.isnan(frame_cell[df_name]))]
|
|
# mt_types = frame_cell.mt_type.unique()
|
|
# frame_type = frame_df[frame_df.mt_type == mt_type]
|
|
# embed()
|
|
|
|
###########################################
|
|
# time spikes
|
|
axt = plt.subplot(grid2[1, counter])
|
|
axt.set_ylabel('local')
|
|
axt.show_spines('')
|
|
time = np.arange(0, len(V_1[nr_example]) / sampling_rate,
|
|
1 / sampling_rate) * 1000
|
|
# axt.plot(time, V_1[nr_example], color='purple', linewidth=0.5)
|
|
# axt.eventplot(spike_times[nr_example])
|
|
# axt.eventplot((spike_times[nr_example]), lineoffsets=np.max(V_1[nr_example]),
|
|
# color='black', s = 10) # np.max(v1)*
|
|
# todo: hier spikes umstülpen
|
|
###################################
|
|
# ich mache ein festes fenster also habe ich einen schift der in einem sehr kleinen schritt durchgeht
|
|
# das period 2 hätte ich wenn das Fenster immer die gleiche länge hätte
|
|
# embed()
|
|
umstuelp = False
|
|
if umstuelp:
|
|
# ah aber ich hab auch noch das umstuelpen aus dem susept das für den Appendix!
|
|
spikes_umstuelpen(eod, sampling_rate, time)
|
|
|
|
# embed()
|
|
eods_cut, spikes_cut, times_cut, cut_next, smoothed_cut = cut_spike_snippets(
|
|
spike_times[nr_example], period_based=True,
|
|
array_cut2=np.arange(0, len(
|
|
eods_all[nr_example]) / sampling_rate,
|
|
skip_nr / np.abs(dfs[m])),
|
|
end=2000, smoothened=smooth[nr_example],
|
|
time_eod=time / 1000, norming=False)
|
|
axt.eventplot(np.array(spikes_cut[0:4]) * 1000,
|
|
color='black') # lineoffsets=np.max(V_1[nr_example])* np.ones(
|
|
# marker='|'len(spike_times[nr_example]))spike_times[nr_example] np.max(v1)*lineoffsets=np.max(V_1[nr_example]),
|
|
|
|
# embed()
|
|
axt.set_xlim(xlim)
|
|
|
|
remove_xticks(axt)
|
|
if counter != 0:
|
|
remove_yticks(axt)
|
|
axt.set_ylabel('')
|
|
axt.show_spines('')
|
|
axts.append(axt)
|
|
|
|
# axt.yscalebar()
|
|
###########################################
|
|
# convolved firing rate
|
|
axf = plt.subplot(grid2[2, counter])
|
|
if len(smooth[nr_example]) != len(time):
|
|
time_here = time[0:len(smooth[nr_example])]
|
|
else:
|
|
time_here = time # [0:len(smooth[nr_example])]
|
|
mean_firing = True
|
|
# embed()
|
|
if mean_firing:
|
|
|
|
lengths = []
|
|
for sm in smoothed_cut[0:4]:
|
|
lengths.append(len(sm))
|
|
sms = []
|
|
for sm in smoothed_cut[0:4]:
|
|
sms.append(sm[0:np.min(lengths)])
|
|
time_here = time[0:np.shape(sms)[1]]
|
|
axf.plot(time_here, np.mean(sms, axis=0), color='grey')
|
|
else:
|
|
axf.plot(time_here, smooth[nr_example], color='grey',
|
|
)
|
|
axf.show_spines('')
|
|
axf.set_xlim(xlim)
|
|
axfs.append(axf)
|
|
|
|
##########################################
|
|
# time psd
|
|
# axp = plt.subplot(grid2[3, counter])
|
|
axp2 = plt.subplot(grid2[4, counter])
|
|
|
|
|
|
ps = []
|
|
maxx = 1000
|
|
for s, spikes_mat in enumerate(spikes_mats):
|
|
p, f = ml.psd(spikes_mat - np.mean(spikes_mat),
|
|
Fs=sampling_rate,
|
|
NFFT=2 ** 13,
|
|
noverlap=2 ** 13 / 2)
|
|
ps.append(p)
|
|
if s == nr_example:
|
|
color = 'green'
|
|
zorder = 100
|
|
# axp.plot(f, p, color=color, zorder=zorder)
|
|
|
|
else:
|
|
color = 'grey'
|
|
zorder = 1
|
|
# axp2.plot(f, p, color=color, zorder=zorder)
|
|
|
|
axp2.set_xlim(0, maxx)
|
|
|
|
# axp.set_xlim(0, maxx)
|
|
# remove_xticks(axp)
|
|
axp2.plot(f, np.mean(ps, axis=0), color='black', zorder=2,
|
|
linestyle='-')
|
|
|
|
pp = np.mean(ps, axis=0)
|
|
|
|
eodf = np.mean(frame_name.eod_fr)
|
|
names = ['0', '01', '02', '012']
|
|
names_here = [names[1]] #
|
|
extend = False
|
|
labels, alpha, color01, color01_012, color02, color02_012, colors, colors_array, linestyles, scores, linewidths = colors_susept()
|
|
colors_array = ['pink', color01]
|
|
if float(contrast) > 2:
|
|
name = names_here[
|
|
0]
|
|
else:
|
|
name = 'eodf'
|
|
|
|
freqs, colors_peaks, labels, alphas = chose_all_freq_combos(
|
|
[],
|
|
colors_array,
|
|
df_chosen,
|
|
maxx,
|
|
eodf,
|
|
color_eodf=coloer_eod_fr_core(),
|
|
name=
|
|
name,
|
|
color_stim=color_stim_core(),
|
|
color_stim_mult=color_stim_core())#'black'color_stim_core()
|
|
|
|
|
|
|
|
#embed()
|
|
plt_peaks_several(labels, freqs, [pp], 0,
|
|
axp2, pp, colors_peaks, f, ms=18,
|
|
extend=extend,
|
|
alphas=alphas, perc=0.15, limit=1200,
|
|
clip_on=False)
|
|
legend_here = False
|
|
if legend_here:
|
|
if (counter == 2) & (name != 'eodf'):
|
|
#labels = labels_pi_core()
|
|
try:
|
|
handles, labels = axp2.get_legend_handles_labels()
|
|
reorder_legend_handles(axp2, order=[len(labels)-3, len(labels)-2, len(labels)-1],
|
|
loc=(-2.5, 1), fs=9,
|
|
handlelength=1, ncol = 3)
|
|
except:
|
|
print('label something')
|
|
embed()
|
|
#set_legend_handles
|
|
#axp2.legend(ncol = 3)
|
|
#embed()
|
|
|
|
# axp2.set_ylabel('Frequency [Hz]')
|
|
axp2.set_xlabel('Frequency [Hz]')
|
|
if counter != 0:
|
|
remove_yticks(axp2)
|
|
else:
|
|
axp2.set_ylabel(power_spectrum_name())
|
|
# if counter != 0:
|
|
# remove_yticks(axp)
|
|
# axp.set_ylabel('')
|
|
# axps.append(axp)
|
|
axps.append(axp2)
|
|
|
|
#############################
|
|
# spike_times[nr_example]
|
|
isis = False
|
|
if isis:
|
|
axi = plt.subplot(grid2[-1, counter])
|
|
plt_isis_phaselocking(axi, axps, frame_name, spike_times)
|
|
axi.set_xticks_delta(2)
|
|
axi.set_xlim(0, 13)
|
|
try:
|
|
axts[0].get_shared_y_axes().join(*axts[0::2])
|
|
except:
|
|
print('axt problem')
|
|
embed()
|
|
|
|
axts[1].get_shared_y_axes().join(*axts[1::2])
|
|
axts[0].get_shared_x_axes().join(*axts)
|
|
join_y(axfs)
|
|
join_y(axps)
|
|
join_x(axps)
|
|
fig = plt.gcf()
|
|
fig.tag([axts[4], axts[2], axts[0], ], xoffs=-2, yoffs = 1)
|
|
# if counter == 0:
|
|
# for axf in axfs:
|
|
firing_rate_scalebars(axfs[np.where(np.array(counters) == 0)[0][0]],
|
|
length=10)
|
|
individual_tag = 'data ' + cell + '_DF_chosen_' + str(df_chosen) + mt_type
|
|
|
|
save_visualization(individual_tag, show)
|
|
print('plotted')
|
|
# plt_modulation(dataset, eods, m, contrasts[m], dfs[m], spike_times, mts, show = True)
|
|
file.close()
|
|
|
|
print('finished examples')
|
|
#embed()
|
|
|
|
def reorder_legend_handles(ax1, order = [0, 2, 4, 1, 3, 5], ncol = None, rev = False, loc = (0.65, 0.6),fs = 9,handlelength = 0.5):
|
|
handles, labels = ax1.get_legend_handles_labels()
|
|
if rev:
|
|
order = [len(labels)-order[0],len(labels)-order[1],len(labels)-order[2]]
|
|
hand_new = [handles[i] for i in order]
|
|
label_new = [labels[i] for i in order]
|
|
if ncol:
|
|
first_legend = ax1.legend(handles=hand_new, labels=label_new, loc=loc, fontsize=fs,
|
|
handlelength=handlelength, ncol = ncol)
|
|
else:
|
|
first_legend = ax1.legend(handles=hand_new, labels=label_new, loc=loc, fontsize=fs,
|
|
handlelength=handlelength)
|
|
return first_legend
|
|
|
|
def plt_beats_modulation_several_with_overview_nice_big_final2(contrasts_given = [],datasets=['2020-10-20-ad-invivo-1'],
|
|
dfs_all_unique_given=[25], limit=1,
|
|
duration_exclude=0.45, nfft=int(4096), show=False,
|
|
save=True,
|
|
position=0, redo=False):
|
|
# Function to load the experimental data
|
|
save_name = 'beat_results_smoothed_limit' + str(limit) + '_minimalduration_' + str(duration_exclude) + '_all'
|
|
print(save_name)
|
|
|
|
frame_all = pd.read_pickle(load_folder_name('calc_phaselocking') + '/calc_phaselocking-phaselocking5_big.pkl')
|
|
colors = ['red', 'green', 'purple', 'blue']
|
|
markers = ['.', 'o', '*', '+']
|
|
plot_style()
|
|
for i, cell in enumerate(datasets):
|
|
|
|
path = load_folder_name('data') + '/cells/' + cell + '/' + cell + ".nix" # cell.split(os.path.sep)[-1]
|
|
path2 = '../data/cells/' + cell + '/samspikes.dat'
|
|
path3 = '../data/cells/' + cell + '/samspikes1.dat'
|
|
print(cell)
|
|
cells_exclude = ['2020-10-29-af-invivo-1', '2019-05-07-cb-invivo-1']
|
|
|
|
df_pos = False
|
|
if cell not in cells_exclude:
|
|
# embed()
|
|
if os.path.exists(path):
|
|
print('exists')
|
|
file = nix.File.open(path, nix.FileMode.ReadOnly)
|
|
b = file.blocks[0]
|
|
cont2 = False
|
|
names = []
|
|
names_dataarrays = []
|
|
for stims in b.data_arrays:
|
|
# this seems to be reasonable because the only data with sinewave with higher number was not useful (das betrifft aber nur 2019-05-07-ab und 2019-05-07-ac, wobei wenn ich jetzt ganau schau scheinen das nur komische trials zu sein die wir nicht wirklich brauchen
|
|
if 'sinewave-1_Contrast' in stims.name:
|
|
names.append(stims.name)
|
|
names_dataarrays.append(stims.name)
|
|
# tag_names = find_tags(b, names='sam')
|
|
# tag_names = find_SAM_sine(b)
|
|
'sinewave''SAM'
|
|
# tags_all = find_tags_all(b)
|
|
all_mt_names = find_mt_all(b)
|
|
# embed()
|
|
sam = find_mt(b, 'SAM')
|
|
sine = find_mt(b, 'sine')
|
|
gwn = find_mt(b, 'gwn')
|
|
if (len(sine) > 0) or (len(sam) > 0):
|
|
cont2 = True
|
|
|
|
if cont2 == True:
|
|
print('cont2')
|
|
counter = 0
|
|
choice = 'SAM_sinewave' # 'SAM'#'SAM_sinewave'
|
|
|
|
frame_cell = frame_all[frame_all['cell'] == cell]
|
|
if len(frame_cell) < 1:
|
|
# falls frame 5 noch nicht fertig ist haben wir ja den Backup von davor!
|
|
frame_all = pd.read_pickle('../code/calc_phaselocking/calc_phaselocking-phaselocking_big.pkl')
|
|
frame_cell = frame_all[frame_all['cell'] == cell]
|
|
|
|
# embed()
|
|
if len(frame_cell) > 0:
|
|
if len(dfs_all_unique_given) < 1:
|
|
dfs_all_unique = np.unique(frame_cell.df_sign.dropna())[::-1]
|
|
df_name = 'df_sign'
|
|
df_pos = '' # 'min_df'
|
|
# embed()
|
|
dfs_all_unique = list(dfs_all_unique)
|
|
# todo: also hier gibts halt noch pobleme
|
|
|
|
if len(np.unique(np.array(dfs_all_unique))) < 2:
|
|
df_name = 'df'
|
|
dfs_all_unique = np.unique(frame_cell.df.dropna())[::-1]
|
|
dfs_all_unique = list(dfs_all_unique)
|
|
else:
|
|
dfs_all_unique = dfs_all_unique_given
|
|
df_name = 'df_sign'
|
|
# try:
|
|
|
|
if len(dfs_all_unique) > 0:
|
|
# dfs_all_unique = dfs_all_unique[~np.where(np.isnan(dfs_all_unique))[0]]
|
|
if df_pos == 'min_df':
|
|
try:
|
|
dfs_all_unique = [dfs_all_unique[np.argmin(np.abs(dfs_all_unique))]]
|
|
except:
|
|
print('df min')
|
|
embed()
|
|
|
|
for df_chosen in dfs_all_unique:
|
|
# embed()
|
|
if not np.isnan(df_chosen):
|
|
|
|
frame_df = frame_cell[frame_cell[df_name] == df_chosen]
|
|
contrasts_all_unique = np.unique(frame_df.contrast)
|
|
contrasts_all_unique = contrasts_all_unique[~np.isnan(contrasts_all_unique)]
|
|
if len(contrasts_given)> 0:
|
|
contrasts_all_unique = contrasts_given
|
|
if len(contrasts_all_unique) > 1:
|
|
# embed()
|
|
mt_types = frame_df.mt_type.unique()
|
|
# embed()
|
|
for mt_type in mt_types:
|
|
if 'base' not in mt_type:
|
|
contrasts_here = []
|
|
frame_type = frame_df[
|
|
(frame_df.mt_type == mt_type)] # | (frame_df.mt_type == 'base')
|
|
# fig, ax = plt.subplots(6, len(np.unique(contrasts_all_unique))+1, figsize=(12, 5.5))
|
|
# fig = plt.figure(figsize=(20, 8))
|
|
|
|
default_settings(column=2, length=5)
|
|
#plt.figure(figsize=(2, 6))
|
|
gs0 = gridspec.GridSpec(1, 1, hspace=0.4,
|
|
left=0.1, top = 0.94,
|
|
right=0.97) #width_ratios=[4, 1],
|
|
|
|
# embed()
|
|
#grid1 = gridspec.GridSpecFromSubplotSpec(2, 1, wspace=0.2, hspace=0.2,
|
|
# subplot_spec=gs0[1])
|
|
#
|
|
#axs = plt.subplot(grid1[0])
|
|
|
|
#embed()
|
|
#plt_single_phaselockloss(colors, frame_cell, df_chosen, scores, cell,
|
|
# axs)
|
|
#axs.set_xlim(-10, 100)
|
|
|
|
|
|
if (cell == '2020-10-20-ad-invivo-1') & (
|
|
50 == df_chosen): # das erst fehlt aus welchem Grund auch immer
|
|
reduce = 0
|
|
else:
|
|
reduce = 0
|
|
|
|
nr_col = int(len(np.unique(contrasts_all_unique))) - reduce
|
|
grid2 = gridspec.GridSpecFromSubplotSpec(7, nr_col,
|
|
height_ratios=[1, 0.5, 1, 0.1,
|
|
1, 0.7,
|
|
1],
|
|
wspace=0.2, hspace=0.2,
|
|
subplot_spec=gs0[0])
|
|
#
|
|
|
|
# plt.suptitle(score)
|
|
# frame_cell['contrast'],frame_cell['vs']
|
|
# if i >= row * col - col:
|
|
axts = []
|
|
axfs = []
|
|
axps = []
|
|
# embed()
|
|
mt_names = frame_type.mt_name.unique()
|
|
counters = []
|
|
for m, mt_name in enumerate(mt_names):
|
|
frame_name = frame_type[frame_type.mt_name == mt_name]
|
|
mt_idxs = list(map(int, np.array(frame_name.mt_idx)))
|
|
# embed()
|
|
|
|
# np.where(all_mt_names == mt_name)
|
|
mts = b.multi_tags[mt_name]
|
|
|
|
# for mt_nr, mts in mt_idx:#enumerate(b.multi_tags):
|
|
|
|
print(mts.name)
|
|
# choice_mt = sine_sam_there(mts, choice=choice)
|
|
# embed()
|
|
# if 'Df=' + str(df_chosen) in mts.name:
|
|
# if choice_mt:
|
|
name = mts.name
|
|
contrast = name.split('=')[1].split('%')[0]
|
|
# plt.suptitle('DF=' + str(df_chosen))
|
|
#
|
|
# embed()
|
|
# if float(contrast) in [3,7,10,30]:
|
|
|
|
# embed()
|
|
|
|
if contrast not in contrasts_here:
|
|
|
|
print(contrast)
|
|
# embed()
|
|
|
|
if len(np.where(np.round(contrasts_all_unique, 2) == np.round(float(contrast), 2))[0]) > 0:
|
|
if np.isnan(float(contrast)):
|
|
counter = 0
|
|
else:
|
|
try:
|
|
counter = np.where(
|
|
np.round(contrasts_all_unique, 2) == np.round(
|
|
float(contrast), 2))[0][0] - reduce # +1
|
|
except:
|
|
print('something')
|
|
embed()
|
|
counters.append(counter)
|
|
# except:
|
|
# print('embed problem')
|
|
# embed()
|
|
name = mts.name
|
|
try:
|
|
dfs = [mts.metadata[mts.name]['DeltaF']] * len(
|
|
mts.positions[:])
|
|
except:
|
|
dfs = mts.metadata['DeltaF']
|
|
|
|
features, dfs, contrasts, id = get_features_and_info(mts, dfs = dfs)
|
|
eod_frs, eod_redo = get_eod_fr_simple(b, names)
|
|
|
|
eod = b.data_arrays['LocalEOD-1'][:]
|
|
names = []
|
|
for stims in b.data_arrays:
|
|
names.append(stims.name)
|
|
spikes = b.data_arrays['Spikes-1'][:]
|
|
fr = b.metadata.sections[0].sections['Cell']['Cell properties'][
|
|
'Firing Rate1']
|
|
print(cell + ' Beat calculation')
|
|
# datas_new.append(cell)
|
|
|
|
spike_times = [[]] * len(mts.positions[:])
|
|
eods_all = []
|
|
eods_all_g = []
|
|
V_1 = []
|
|
spike_times = []
|
|
for m in mt_idxs: # range(len(mts.positions[:]))
|
|
try:
|
|
eods, _ = link_arrays_eod(b, mts.positions[:][m],
|
|
mts.extents[:][m],
|
|
'LocalEOD-1')
|
|
except:
|
|
print('eods thing')
|
|
embed()
|
|
# eods = mts.retrieve_data(m, 'LocalEOD-1')[:]
|
|
eods_all.append(eods)
|
|
# eods_g = mts.retrieve_data(m, 'EOD')[:]
|
|
eods_g, sampling_rate = link_arrays_eod(b,
|
|
mts.positions[:][m],
|
|
mts.extents[:][m],
|
|
'EOD')
|
|
v_1, sampling_rate = link_arrays_eod(b, mts.positions[:][m],
|
|
mts.extents[:][m],
|
|
'V-1')
|
|
eods_all_g.append(eods_g)
|
|
V_1.append(v_1)
|
|
# Efield = mts.retrieve_data(m, 'GlobalEFieldStimulus')[:]
|
|
|
|
# embed()
|
|
# global_stimulus = mts.retrieve_data(m, 'GlobalEFieldStimulus')[:]
|
|
if eod_redo == True:
|
|
p, f = ml.psd(eods - np.mean(eods), Fs=sampling_rate,
|
|
NFFT=nfft,
|
|
noverlap=nfft // 2)
|
|
eod_fr = f[np.argmax(p)]
|
|
else:
|
|
eod_fr = eod_frs[m]
|
|
cut = 0.05
|
|
print('EODF'+str(eod_fr))
|
|
spike_times.append(
|
|
(mts.retrieve_data(m, 'Spikes-1')[:] - mts.positions[
|
|
m]) * 1000) # - cut
|
|
# [m]
|
|
test = True
|
|
print(len(spike_times))
|
|
smooth = []
|
|
spikes_mats = []
|
|
for s in range(len(spike_times)):
|
|
try:
|
|
spikes_mat = cr_spikes_mat(spike_times[s] / 1000,
|
|
sampling_rate,
|
|
int(
|
|
mts.extents[:][
|
|
mt_idxs[
|
|
s]] * sampling_rate)) # time[-1] * sampling_rate
|
|
except:
|
|
print('mts prob')
|
|
embed()
|
|
spikes_mats.append(spikes_mat)
|
|
# für den Mean danach schneiden wir das wie das kürzeste
|
|
try:
|
|
# embed()
|
|
smooth.append(gaussian_filter(
|
|
spikes_mat[
|
|
0:int(np.min(mts.extents[:]) * sampling_rate)],
|
|
sigma=0.002 * sampling_rate))
|
|
except:
|
|
print('embed problem')
|
|
embed()
|
|
try:
|
|
smooth_mean = np.mean(smooth, axis=0)
|
|
except:
|
|
print('smoothed thing')
|
|
embed()
|
|
# spikes_mats_mean = np.mean(spikes_mats, axis=0)
|
|
# spikes_mats_mean = np.mean(spikes_mats, axis=0)
|
|
|
|
#plt.suptitle('data ' + cell + ' ' + mts.name)
|
|
|
|
######################
|
|
# plt local eod
|
|
|
|
# ax = np.concatenate(ax)
|
|
|
|
# sampling = 40000
|
|
|
|
# ax[0, counter].set_ylabel('mV')
|
|
skip_nr = 2
|
|
#embed()
|
|
xlim = [0, 1000*skip_nr/np.abs(dfs[m])]
|
|
# if m == 0:
|
|
nr_example = 0 # 'no'#0
|
|
|
|
##########################################
|
|
try:
|
|
axt = plt.subplot(grid2[0, counter])
|
|
except:
|
|
print('axt something')
|
|
embed()
|
|
|
|
axts.append(axt)
|
|
stimulus = eods_all[nr_example] # eods_g + Efield
|
|
try:
|
|
time = np.arange(0, len(stimulus) / sampling_rate,
|
|
1 / sampling_rate) * 1000
|
|
except:
|
|
print('time all2')
|
|
embed()
|
|
eods_am, eod_norm = extract_am(stimulus, time, norm=False, kind ='linear')
|
|
|
|
axt.plot(time, eod_norm, color='grey', linewidth=0.5)
|
|
am = False
|
|
if am:
|
|
axt.plot(time, eods_am, color='red')
|
|
# axt.eventplot((spike_times[nr_example]), lineoffsets=np.mean(eod_norm),
|
|
# color='black', s = 10) # np.max(v1)*
|
|
scatter_extra = False
|
|
if scatter_extra:
|
|
axt.scatter(spike_times[nr_example],
|
|
np.mean(eod_norm) * np.ones(
|
|
len(spike_times[nr_example]))
|
|
, color='black', s=10,
|
|
marker='|') # np.max(v1)*lineoffsets=np.max(V_1[nr_example]),
|
|
axt.show_spines('')
|
|
|
|
axt.set_xlim(xlim)
|
|
axt.set_xlabel('Time [ms]')
|
|
|
|
# for ax in axts:
|
|
if counter != 0:
|
|
remove_yticks(axt)
|
|
axt.set_ylabel('')
|
|
scores = ['dsp_perc95_', 'dsp_max_', 'dsp_mean_']
|
|
frame_double_spikes = frame_name[
|
|
frame_name.contrast == float(contrast)]
|
|
#embed()
|
|
#ds$_{m}$='+str(np.round(np.nanmean(frame_double_spikes['dsp_mean_']),2))+' ds$_{95}$='+str(np.round(np.nanmean(frame_double_spikes['dsp_perc95_']),2))
|
|
axt.text(1, 1, '$c=%s$' %(contrast)+'$\%$', ha='right',
|
|
transform=axt.transAxes)
|
|
# plt_modulation_here(fr, spikes_mats_mean, smooth_mean, dfs[m], cell, m,show, eods, eods_g, mts, spike_times)
|
|
color = 'grey'
|
|
scores = ['amp_stim', 'amp_df', 'amp_f0',
|
|
'amp_fmax_interval'] # 'stim', 'f0',
|
|
#frame_df = frame_cell[
|
|
# (frame_cell[df_name] == df_chosen) | (
|
|
# np.isnan(frame_cell[df_name]))]
|
|
#mt_types = frame_cell.mt_type.unique()
|
|
#frame_type = frame_df[frame_df.mt_type == mt_type]
|
|
#embed()
|
|
|
|
|
|
###########################################
|
|
# time spikes
|
|
axt = plt.subplot(grid2[1, counter])
|
|
axt.set_ylabel('local')
|
|
axt.show_spines('')
|
|
time = np.arange(0, len(V_1[nr_example]) / sampling_rate,
|
|
1 / sampling_rate) * 1000
|
|
# axt.plot(time, V_1[nr_example], color='purple', linewidth=0.5)
|
|
# axt.eventplot(spike_times[nr_example])
|
|
# axt.eventplot((spike_times[nr_example]), lineoffsets=np.max(V_1[nr_example]),
|
|
# color='black', s = 10) # np.max(v1)*
|
|
# todo: hier spikes umstülpen
|
|
###################################
|
|
# ich mache ein festes fenster also habe ich einen schift der in einem sehr kleinen schritt durchgeht
|
|
# das period 2 hätte ich wenn das Fenster immer die gleiche länge hätte
|
|
# embed()
|
|
umstuelp = False
|
|
if umstuelp:
|
|
# ah aber ich hab auch noch das umstuelpen aus dem susept das für den Appendix!
|
|
spikes_umstuelpen(eod, sampling_rate, time)
|
|
|
|
#embed()
|
|
eods_cut, spikes_cut, times_cut, cut_next, smoothed_cut = cut_spike_snippets(
|
|
spike_times[nr_example], period_based = True, array_cut2 = np.arange(0, len(eods_all[nr_example])/sampling_rate, skip_nr/np.abs(dfs[m])),
|
|
end=2000,smoothened = smooth[nr_example], time_eod = time/1000, norming = False)
|
|
axt.eventplot(np.array(spikes_cut[0:4])*1000,color='black') #lineoffsets=np.max(V_1[nr_example])* np.ones(
|
|
#marker='|'len(spike_times[nr_example]))spike_times[nr_example] np.max(v1)*lineoffsets=np.max(V_1[nr_example]),
|
|
|
|
#embed()
|
|
axt.set_xlim(xlim)
|
|
|
|
remove_xticks(axt)
|
|
if counter != 0:
|
|
remove_yticks(axt)
|
|
axt.set_ylabel('')
|
|
axt.show_spines('')
|
|
axts.append(axt)
|
|
|
|
# axt.yscalebar()
|
|
###########################################
|
|
# convolved firing rate
|
|
axf = plt.subplot(grid2[2, counter])
|
|
if len(smooth[nr_example]) != len(time):
|
|
time_here = time[0:len(smooth[nr_example])]
|
|
else:
|
|
time_here = time # [0:len(smooth[nr_example])]
|
|
mean_firing = True
|
|
#embed()
|
|
if mean_firing:
|
|
|
|
lengths = []
|
|
for sm in smoothed_cut[0:4]:
|
|
lengths.append(len(sm))
|
|
sms = []
|
|
for sm in smoothed_cut[0:4]:
|
|
sms.append(sm[0:np.min(lengths)])
|
|
time_here = time[0:np.shape(sms)[1]]
|
|
axf.plot(time_here, np.mean(sms, axis = 0), color='grey',
|
|
linewidth=0.5)
|
|
else:
|
|
axf.plot(time_here, smooth[nr_example], color='grey',
|
|
linewidth=0.5)
|
|
axf.show_spines('')
|
|
axf.set_xlim(xlim)
|
|
axfs.append(axf)
|
|
|
|
|
|
##########################################
|
|
# time psd
|
|
# axp = plt.subplot(grid2[3, counter])
|
|
axp2 = plt.subplot(grid2[4, counter])
|
|
ps = []
|
|
maxx = 1000
|
|
for s, spikes_mat in enumerate(spikes_mats):
|
|
p, f = ml.psd(spikes_mat - np.mean(spikes_mat),
|
|
Fs=sampling_rate,
|
|
NFFT=2 ** 13,
|
|
noverlap=2 ** 13 / 2)
|
|
ps.append(p)
|
|
if s == nr_example:
|
|
color = 'green'
|
|
zorder = 100
|
|
# axp.plot(f, p, color=color, zorder=zorder)
|
|
|
|
else:
|
|
color = 'grey'
|
|
zorder = 1
|
|
# axp2.plot(f, p, color=color, zorder=zorder)
|
|
|
|
axp2.set_xlim(0, maxx)
|
|
|
|
# axp.set_xlim(0, maxx)
|
|
# remove_xticks(axp)
|
|
axp2.plot(f, np.mean(ps, axis=0), color='black', zorder=2,
|
|
linestyle='-')
|
|
|
|
pp = np.mean(ps, axis=0)
|
|
|
|
eodf = np.mean(frame_name.eod_fr)
|
|
names = ['0', '01', '02', '012']
|
|
names_here = [names[1]] #
|
|
extend = True
|
|
colors_array = ['pink', 'green']
|
|
if float(contrast) > 2:
|
|
name = names_here[
|
|
0]
|
|
else:
|
|
name = 'eodf'
|
|
|
|
freqs, colors_peaks, labels, alphas = chose_all_freq_combos(
|
|
[],
|
|
colors_array,
|
|
df_chosen,
|
|
maxx,
|
|
eodf,
|
|
color_eodf='black',
|
|
name=
|
|
name,
|
|
color_stim='grey',
|
|
color_stim_mult='grey')
|
|
|
|
# embed()
|
|
plt_peaks_several(labels, freqs, [pp], 0,
|
|
axp2, pp, colors_peaks, f, ms=18,
|
|
extend=extend,
|
|
alphas=alphas, perc = 0.15, limit=1200, clip_on=False)
|
|
|
|
# axp2.set_ylabel('Frequency [Hz]')
|
|
axp2.set_xlabel('Frequency [Hz]')
|
|
if counter != 0:
|
|
remove_yticks(axp2)
|
|
else:
|
|
axp2.set_ylabel(power_spectrum_name())
|
|
# if counter != 0:
|
|
# remove_yticks(axp)
|
|
# axp.set_ylabel('')
|
|
# axps.append(axp)
|
|
axps.append(axp2)
|
|
|
|
#############################
|
|
# spike_times[nr_example]
|
|
axi = plt.subplot(grid2[-1, counter])
|
|
plt_isis_phaselocking(axi, axps, frame_name, spike_times)
|
|
axi.set_xticks_delta(2)
|
|
axi.set_xlim(0,13)
|
|
try:
|
|
axts[0].get_shared_y_axes().join(*axts[0::2])
|
|
except:
|
|
print('axt problem')
|
|
embed()
|
|
|
|
axts[1].get_shared_y_axes().join(*axts[1::2])
|
|
axts[0].get_shared_x_axes().join(*axts)
|
|
join_y(axfs)
|
|
join_y(axps)
|
|
join_x(axps)
|
|
fig = plt.gcf()
|
|
fig.tag([axts[4], axts[2],axts[0],], xoffs = -3)
|
|
#if counter == 0:
|
|
#for axf in axfs:
|
|
firing_rate_scalebars(axfs[np.where(np.array(counters) == 0)[0][0]], length = 10)
|
|
individual_tag = 'data ' + cell + '_DF_chosen_' + str(
|
|
df_chosen) + mt_type
|
|
|
|
save_visualization(individual_tag, show)
|
|
print('plotted')
|
|
# plt_modulation(dataset, eods, m, contrasts[m], dfs[m], spike_times, mts, show = True)
|
|
file.close()
|
|
|
|
print('finished examples')
|
|
embed()
|
|
|
|
|
|
def plt_beats_modulation_several_with_overview_nice_big_final(datasets = ['2020-10-20-ad-invivo-1'],
|
|
dfs_all_unique_given = [25],limit=1,
|
|
duration_exclude=0.45, nfft=int(4096), show=False, save=True,
|
|
position=0, redo=False):
|
|
# Function to load the experimental data
|
|
save_name = 'beat_results_smoothed_limit' + str(limit) + '_minimalduration_' + str(duration_exclude) + '_all'
|
|
print(save_name)
|
|
|
|
frame_all = pd.read_pickle(load_folder_name('calc_phaselocking') + '/calc_phaselocking-phaselocking5_big.pkl')
|
|
colors = ['red', 'green', 'purple', 'blue']
|
|
markers = ['.', 'o', '*', '+']
|
|
try:
|
|
plot_style()
|
|
except:
|
|
print('plotstyle not there')
|
|
|
|
if len(datasets)< 1:
|
|
datasets, data_dir = find_all_dir_cells()
|
|
datasets = np.sort(datasets)[::-1]
|
|
stop_cell = '2018-11-20-af-invivo-1'
|
|
datasets = find_stop_cell(datasets, stop_cell)
|
|
#embed()
|
|
for i, cell in enumerate(datasets):
|
|
|
|
path = load_folder_name('data') + '/cells/' + cell + '/' + cell + ".nix" # cell.split(os.path.sep)[-1]
|
|
path2 = '../data/cells/' + cell + '/samspikes.dat'
|
|
path3 = '../data/cells/' + cell + '/samspikes1.dat'
|
|
print(cell)
|
|
cells_exclude = ['2020-10-29-af-invivo-1', '2019-05-07-cb-invivo-1']
|
|
df_pos = False
|
|
if cell not in cells_exclude:
|
|
#embed()
|
|
if os.path.exists(path):
|
|
print('exists')
|
|
try:
|
|
file = nix.File.open(path, nix.FileMode.ReadOnly)
|
|
cont0 = True
|
|
except:
|
|
cont0 = False
|
|
if cont0:
|
|
b = file.blocks[0]
|
|
cont2 = False
|
|
names = []
|
|
names_dataarrays = []
|
|
for stims in b.data_arrays:
|
|
# this seems to be reasonable because the only data with sinewave with higher number was not useful (das betrifft aber nur 2019-05-07-ab und 2019-05-07-ac, wobei wenn ich jetzt ganau schau scheinen das nur komische trials zu sein die wir nicht wirklich brauchen
|
|
if 'sinewave-1_Contrast' in stims.name:
|
|
names.append(stims.name)
|
|
names_dataarrays.append(stims.name)
|
|
# tag_names = find_tags(b, names='sam')
|
|
# tag_names = find_SAM_sine(b)
|
|
'sinewave''SAM'
|
|
# tags_all = find_tags_all(b)
|
|
all_mt_names = find_mt_all(b)
|
|
# embed()
|
|
sam = find_mt(b, 'SAM')
|
|
sine = find_mt(b, 'sine')
|
|
gwn = find_mt(b, 'gwn')
|
|
if (len(sine) > 0) or (len(sam) > 0):
|
|
cont2 = True
|
|
|
|
|
|
|
|
if cont2 == True:
|
|
print('cont2')
|
|
counter = 0
|
|
choice = 'SAM_sinewave' # 'SAM'#'SAM_sinewave'
|
|
|
|
frame_cell = frame_all[frame_all['cell'] == cell]
|
|
if len(frame_cell) < 1:
|
|
# falls frame 5 noch nicht fertig ist haben wir ja den Backup von davor!
|
|
frame_all = pd.read_pickle('../code/calc_phaselocking/calc_phaselocking-phaselocking_big.pkl')
|
|
frame_cell = frame_all[frame_all['cell'] == cell]
|
|
|
|
# embed()
|
|
if len(frame_cell) > 0:
|
|
if len(dfs_all_unique_given)<1:
|
|
dfs_all_unique = np.unique(frame_cell.df_sign.dropna())[::-1]
|
|
df_name = 'df_sign'
|
|
df_pos = '' # 'min_df'
|
|
# embed()
|
|
dfs_all_unique = list(dfs_all_unique)
|
|
# todo: also hier gibts halt noch pobleme
|
|
|
|
if len(np.unique(np.array(dfs_all_unique))) < 2:
|
|
df_name = 'df'
|
|
dfs_all_unique = np.unique(frame_cell.df.dropna())[::-1]
|
|
dfs_all_unique = list(dfs_all_unique)
|
|
else:
|
|
dfs_all_unique = dfs_all_unique_given
|
|
df_name = 'df_sign'
|
|
# try:
|
|
|
|
if len(dfs_all_unique) > 0:
|
|
# dfs_all_unique = dfs_all_unique[~np.where(np.isnan(dfs_all_unique))[0]]
|
|
if df_pos == 'min_df':
|
|
try:
|
|
dfs_all_unique = [dfs_all_unique[np.argmin(np.abs(dfs_all_unique))]]
|
|
except:
|
|
print('df min')
|
|
embed()
|
|
|
|
|
|
|
|
for df_chosen in dfs_all_unique:
|
|
# embed()
|
|
if not np.isnan(df_chosen):
|
|
|
|
frame_df = frame_cell[frame_cell[df_name] == df_chosen]
|
|
contrasts_all_unique = np.unique(frame_df.contrast)
|
|
contrasts_all_unique = contrasts_all_unique[~np.isnan(contrasts_all_unique)]
|
|
if len(contrasts_all_unique) > 0:
|
|
# embed()
|
|
mt_types = frame_df.mt_type.unique()
|
|
# embed()
|
|
for mt_type in mt_types:
|
|
if ('base' not in mt_type) & ('chirp' not in mt_type) & ('SAM DC-1' not in mt_type):
|
|
contrasts_here = []
|
|
frame_type = frame_df[
|
|
(frame_df.mt_type == mt_type)] # | (frame_df.mt_type == 'base')
|
|
# fig, ax = plt.subplots(6, len(np.unique(contrasts_all_unique))+1, figsize=(12, 5.5))
|
|
#fig = plt.figure(figsize=(20, 8))
|
|
|
|
default_settings(column=2, length=5)
|
|
plt.figure(figsize = (30,8))
|
|
gs0 = gridspec.GridSpec(1, 2, width_ratios=[4, 1], hspace=0.4,
|
|
left=0.1,
|
|
right=0.97) #
|
|
|
|
# embed()
|
|
grid1 = gridspec.GridSpecFromSubplotSpec(2, 1, wspace=0.2, hspace=0.2,
|
|
subplot_spec=gs0[1])
|
|
#
|
|
axs = plt.subplot(grid1[0])
|
|
scores = ['amp_stim', 'amp_df', 'amp_f0',
|
|
'amp_fmax_interval'] # 'stim', 'f0',
|
|
# embed()
|
|
plt_single_phaselockloss(colors, frame_cell, df_chosen, scores, cell,
|
|
axs)
|
|
axs.set_xlim(-10, 100)
|
|
|
|
axs = plt.subplot(grid1[1])
|
|
scores = ['dsp_perc95_', 'dsp_max_', 'dsp_mean_']
|
|
if scores[0] in frame_cell.keys():
|
|
plt_single_phaselockloss(colors, frame_cell, df_chosen, scores,
|
|
cell, axs)
|
|
axs.set_xlim(-10, 100)
|
|
|
|
if (cell == '2020-10-20-ad-invivo-1') & (50 == df_chosen):# das erst fehlt aus welchem Grund auch immer
|
|
reduce = 0
|
|
else:
|
|
reduce = 0
|
|
|
|
nr_col = int(len(np.unique(contrasts_all_unique)))- reduce
|
|
grid2 = gridspec.GridSpecFromSubplotSpec(7, nr_col,
|
|
height_ratios=[1,0.5, 1, 0.1,1, 0.7,
|
|
1],
|
|
wspace=0.2, hspace=0.2,
|
|
subplot_spec=gs0[0])
|
|
#
|
|
|
|
# plt.suptitle(score)
|
|
# frame_cell['contrast'],frame_cell['vs']
|
|
# if i >= row * col - col:
|
|
axts = []
|
|
axfs = []
|
|
axps = []
|
|
# embed()
|
|
mt_names = frame_type.mt_name.unique()
|
|
for m, mt_name in enumerate(mt_names):
|
|
frame_name = frame_type[frame_type.mt_name == mt_name]
|
|
mt_idxs = list(map(int, np.array(frame_name.mt_idx)))
|
|
# embed()
|
|
|
|
# np.where(all_mt_names == mt_name)
|
|
mts = b.multi_tags[mt_name]
|
|
|
|
# for mt_nr, mts in mt_idx:#enumerate(b.multi_tags):
|
|
|
|
print(mts.name)
|
|
|
|
name = mts.name
|
|
try:
|
|
contrast = name.split('=')[1].split('%')[0]
|
|
cont3 = True
|
|
except:
|
|
cont3 = False
|
|
# todo: da werden noch welche ausgeschlossen
|
|
print('contrasts')
|
|
#embed()
|
|
# plt.suptitle('DF=' + str(df_chosen))
|
|
#
|
|
# embed()
|
|
# if float(contrast) in [3,7,10,30]:
|
|
|
|
#embed()
|
|
if cont3:
|
|
if contrast not in contrasts_here:
|
|
print(contrast)
|
|
#embed()
|
|
if np.isnan(float(contrast)):
|
|
counter = 0
|
|
else:
|
|
counter = np.where(
|
|
np.round(contrasts_all_unique, 2) == np.round(
|
|
float(contrast), 2))[0][0] - reduce # +1
|
|
|
|
try:
|
|
contrasts_here.append(contrast)
|
|
except:
|
|
print('embed problem')
|
|
embed()
|
|
name = mts.name
|
|
try:
|
|
dfs = [mts.metadata[mts.name]['DeltaF']] * len(
|
|
mts.positions[:])
|
|
except:
|
|
dfs = mts.metadata['DeltaF']
|
|
|
|
features = []
|
|
id = []
|
|
for ff, f in enumerate(mts.features):
|
|
if 'id' in f.data.name:
|
|
id = f.data.name
|
|
elif 'Contrast' in f.data.name:
|
|
contrasts = mts.features[f.data.name].data[:]
|
|
elif 'DeltaF' in f.data.name:
|
|
dfs = mts.features[f.data.name].data[:]
|
|
else:
|
|
features.append(f.data.name)
|
|
eod_frs, eod_redo = get_eod_fr_simple(b, names)
|
|
|
|
eod = b.data_arrays['LocalEOD-1'][:]
|
|
names = []
|
|
for stims in b.data_arrays:
|
|
names.append(stims.name)
|
|
#spikes = b.data_arrays['Spikes-1'][:]
|
|
#fr = b.metadata.sections[0].sections['Cell']['Cell properties'][
|
|
# 'Firing Rate1']
|
|
print(cell + ' Beat calculation')
|
|
#datas_new.append(cell)
|
|
|
|
#spike_times = [[]] * len(mts.positions[:])
|
|
eods_all = []
|
|
eods_all_g = []
|
|
V_1 = []
|
|
spike_times = []
|
|
for m in mt_idxs: # range(len(mts.positions[:]))
|
|
try:
|
|
eods, _ = link_arrays_eod(b, mts.positions[:][m],
|
|
mts.extents[:][m],
|
|
'LocalEOD-1')
|
|
except:
|
|
print('eods thing')
|
|
embed()
|
|
# eods = mts.retrieve_data(m, 'LocalEOD-1')[:]
|
|
eods_all.append(eods)
|
|
# eods_g = mts.retrieve_data(m, 'EOD')[:]
|
|
eods_g, sampling_rate = link_arrays_eod(b,
|
|
mts.positions[:][m],
|
|
mts.extents[:][m],
|
|
'EOD')
|
|
v_1, sampling_rate = link_arrays_eod(b, mts.positions[:][m],
|
|
mts.extents[:][m],
|
|
'V-1')
|
|
eods_all_g.append(eods_g)
|
|
V_1.append(v_1)
|
|
# Efield = mts.retrieve_data(m, 'GlobalEFieldStimulus')[:]
|
|
|
|
# embed()
|
|
# global_stimulus = mts.retrieve_data(m, 'GlobalEFieldStimulus')[:]
|
|
if eod_redo == True:
|
|
p, f = ml.psd(eods - np.mean(eods), Fs=sampling_rate,
|
|
NFFT=nfft,
|
|
noverlap=nfft // 2)
|
|
eod_fr = f[np.argmax(p)]
|
|
else:
|
|
eod_fr = eod_frs[m]
|
|
cut = 0.05
|
|
|
|
spikes = link_arrays_spikes(b, first=mts.positions[:][m],
|
|
second=mts.extents[:][m],
|
|
minus_spikes=mts.positions[:][m]) * 1000
|
|
|
|
spike_times.append(spikes) # - cut#
|
|
# (mts.retrieve_data(m, 'Spikes-1')[:] - mts.positions[
|
|
# m])
|
|
# [m]
|
|
test = True
|
|
print(len(spike_times))
|
|
smooth = []
|
|
spikes_mats = []
|
|
for s in range(len(spike_times)):
|
|
try:
|
|
spikes_mat = cr_spikes_mat(spike_times[s] / 1000,
|
|
sampling_rate,
|
|
int(
|
|
mts.extents[:][
|
|
mt_idxs[
|
|
s]] * sampling_rate)) # time[-1] * sampling_rate
|
|
except:
|
|
print('mts prob')
|
|
embed()
|
|
spikes_mats.append(spikes_mat)
|
|
# für den Mean danach schneiden wir das wie das kürzeste
|
|
try:
|
|
# embed()
|
|
smooth.append(gaussian_filter(
|
|
spikes_mat[
|
|
0:int(np.min(mts.extents[:]) * sampling_rate)],
|
|
sigma=0.0005 * sampling_rate))
|
|
except:
|
|
print('embed problem')
|
|
embed()
|
|
try:
|
|
smooth_mean = np.mean(smooth, axis=0)
|
|
except:
|
|
print('smoothed thing')
|
|
embed()
|
|
# spikes_mats_mean = np.mean(spikes_mats, axis=0)
|
|
# spikes_mats_mean = np.mean(spikes_mats, axis=0)
|
|
|
|
plt.suptitle('data ' + cell + ' ' + mts.name)
|
|
|
|
######################
|
|
# plt local eod
|
|
|
|
# ax = np.concatenate(ax)
|
|
|
|
# sampling = 40000
|
|
|
|
# ax[0, counter].set_ylabel('mV')
|
|
xlim = [0, 40]
|
|
# if m == 0:
|
|
nr_example = 0#'no'#0
|
|
|
|
##########################################
|
|
try:
|
|
axt = plt.subplot(grid2[0, counter])
|
|
except:
|
|
print('axt something')
|
|
embed()
|
|
|
|
axts.append(axt)
|
|
stimulus = eods_all[nr_example] # eods_g + Efield
|
|
try:
|
|
time = np.arange(0, len(stimulus) / sampling_rate,
|
|
1 / sampling_rate) * 1000
|
|
except:
|
|
print('time all2')
|
|
embed()
|
|
eods_am, eod_norm = extract_am(stimulus, time, norm=False, kind ='linear')#'cubic'
|
|
axt.plot(time, eod_norm, color='grey', linewidth=0.5)
|
|
axt.plot(time, eods_am, color='red')
|
|
# axt.eventplot((spike_times[nr_example]), lineoffsets=np.mean(eod_norm),
|
|
# color='black', s = 10) # np.max(v1)*
|
|
axt.scatter(spike_times[nr_example],
|
|
np.mean(eod_norm) * np.ones(
|
|
len(spike_times[nr_example]))
|
|
, color='black', s=10,
|
|
marker='|') # np.max(v1)*lineoffsets=np.max(V_1[nr_example]),
|
|
try:
|
|
axt.show_spines('')
|
|
except:
|
|
print('not there')
|
|
axt.set_xlim(xlim)
|
|
axt.set_xlabel('Time [ms]')
|
|
|
|
# for ax in axts:
|
|
if counter != 0:
|
|
remove_yticks(axt)
|
|
axt.set_ylabel('')
|
|
axt.text(1,1, 'c='+str(contrast), ha = 'right', transform=axt.transAxes)
|
|
# plt_modulation_here(fr, spikes_mats_mean, smooth_mean, dfs[m], cell, m,show, eods, eods_g, mts, spike_times)
|
|
color = 'grey'
|
|
|
|
|
|
|
|
###########################################
|
|
# time spikes
|
|
axt = plt.subplot(grid2[1, counter])
|
|
axt.set_ylabel('local')
|
|
try:
|
|
axt.show_spines('')
|
|
except:
|
|
print('not there')
|
|
time = np.arange(0, len(V_1[nr_example]) / sampling_rate,
|
|
1 / sampling_rate) * 1000
|
|
#axt.plot(time, V_1[nr_example], color='purple', linewidth=0.5)
|
|
# axt.eventplot(spike_times[nr_example])
|
|
# axt.eventplot((spike_times[nr_example]), lineoffsets=np.max(V_1[nr_example]),
|
|
# color='black', s = 10) # np.max(v1)*
|
|
#todo: hier spikes umstülpen
|
|
###################################
|
|
# ich mache ein festes fenster also habe ich einen schift der in einem sehr kleinen schritt durchgeht
|
|
# das period 2 hätte ich wenn das Fenster immer die gleiche länge hätte
|
|
#embed()
|
|
umstuelp = False
|
|
if umstuelp:
|
|
# ah aber ich hab auch noch das umstuelpen aus dem susept das für den Appendix!
|
|
spikes_umstuelpen(eod, sampling_rate, time)
|
|
|
|
axt.scatter(spike_times[nr_example],
|
|
np.max(V_1[nr_example]) * np.ones(
|
|
len(spike_times[nr_example]))
|
|
, color='black', s=10,
|
|
marker='|') # np.max(v1)*lineoffsets=np.max(V_1[nr_example]),
|
|
|
|
# embed()
|
|
axt.set_xlim(xlim)
|
|
|
|
remove_xticks(axt)
|
|
if counter != 0:
|
|
remove_yticks(axt)
|
|
axt.set_ylabel('')
|
|
try:
|
|
axt.show_spines('')
|
|
except:
|
|
print('not there')
|
|
axts.append(axt)
|
|
|
|
#axt.yscalebar()
|
|
###########################################
|
|
# convolved firing rate
|
|
axf = plt.subplot(grid2[2, counter])
|
|
if len(smooth[nr_example]) != len(time):
|
|
time_here = time[0:len(smooth[nr_example])]
|
|
else:
|
|
time_here = time#[0:len(smooth[nr_example])]
|
|
mean_firing = True#smooth_mean
|
|
if mean_firing:
|
|
axf.plot(time_here, smooth_mean,
|
|
color='grey', linewidth=0.5)
|
|
else:
|
|
axf.plot(time_here, smooth[nr_example], color='grey', linewidth=0.5)
|
|
try:
|
|
axt.show_spines('')
|
|
except:
|
|
print('not there')
|
|
axf.set_xlim(xlim)
|
|
axfs.append(axf)
|
|
if counter == 0:
|
|
firing_rate_scalebars(axf)
|
|
|
|
|
|
##########################################
|
|
# time psd
|
|
#axp = plt.subplot(grid2[3, counter])
|
|
axp2 = plt.subplot(grid2[4, counter])
|
|
ps = []
|
|
maxx = 1000
|
|
for s, spikes_mat in enumerate(spikes_mats):
|
|
p, f = ml.psd(spikes_mat - np.mean(spikes_mat),
|
|
Fs=sampling_rate,
|
|
NFFT=2 ** 13,
|
|
noverlap=2 ** 13 / 2)
|
|
ps.append(p)
|
|
if s == nr_example:
|
|
color = 'green'
|
|
zorder = 100
|
|
#axp.plot(f, p, color=color, zorder=zorder)
|
|
|
|
else:
|
|
color = 'grey'
|
|
zorder = 1
|
|
#axp2.plot(f, p, color=color, zorder=zorder)
|
|
|
|
axp2.set_xlim(0, maxx)
|
|
|
|
#axp.set_xlim(0, maxx)
|
|
#remove_xticks(axp)
|
|
axp2.plot(f, np.mean(ps, axis=0), color='black', zorder=2,
|
|
linestyle='-')
|
|
|
|
pp = np.mean(ps, axis=0)
|
|
|
|
eodf = np.mean(frame_name.eod_fr)
|
|
names = ['0', '01', '02', '012']
|
|
names_here = [names[1]] #
|
|
extend = True
|
|
colors_array = ['pink', 'green']
|
|
if contrast > 1:
|
|
name = names_here[0]
|
|
else:
|
|
name = 'eodf'
|
|
freqs, colors_peaks, labels, alphas = chose_all_freq_combos(
|
|
[],
|
|
colors_array,
|
|
np.abs(df_chosen),
|
|
maxx,
|
|
eodf,
|
|
color_eodf='black',
|
|
name=
|
|
name,
|
|
color_stim='pink',
|
|
color_stim_mult='pink')
|
|
|
|
#embed()
|
|
plt_peaks_several(labels, freqs, [pp], 0,
|
|
axp2, pp, colors_peaks, f, ms=18,
|
|
extend=extend,
|
|
alphas=alphas, limit = 1200, clip_on=False)
|
|
|
|
#axp2.set_ylabel('Frequency [Hz]')
|
|
axp2.set_xlabel('Frequency [Hz]')
|
|
if counter != 0:
|
|
remove_yticks(axp2)
|
|
else:
|
|
axp2.set_ylabel(power_spectrum_name())
|
|
#if counter != 0:
|
|
# remove_yticks(axp)
|
|
# axp.set_ylabel('')
|
|
#axps.append(axp)
|
|
axps.append(axp2)
|
|
|
|
|
|
#############################
|
|
# spike_times[nr_example]
|
|
axi = plt.subplot(grid2[-1, counter])
|
|
plt_isis_phaselocking(axi, axps, frame_name, spike_times)
|
|
|
|
if len(axts)>0:
|
|
try:
|
|
axts[0].get_shared_y_axes().join(*axts[0::2])
|
|
except:
|
|
print('axt problem')
|
|
embed()
|
|
|
|
axts[1].get_shared_y_axes().join(*axts[1::2])
|
|
axts[0].get_shared_x_axes().join(*axts)
|
|
join_y(axfs)
|
|
join_y(axps)
|
|
join_x(axps)
|
|
|
|
individual_tag = 'data_' + cell + '_DF_chosen_' + str(
|
|
df_chosen) + mt_type
|
|
|
|
save_visualization(individual_tag, show)
|
|
print('plotted')
|
|
# plt_modulation(dataset, eods, m, contrasts[m], dfs[m], spike_times, mts, show = True)
|
|
file.close()
|
|
|
|
|
|
print('finished examples')
|
|
embed()
|
|
|
|
|
|
def plt_isis_phaselocking(axi, axps, frame_name, spike_times):
|
|
# embed()
|
|
isis = []
|
|
for sp_nr, sp in enumerate(np.array(spike_times)):
|
|
isis.append(
|
|
calc_isi(sp / 1000, frame_name.eod_fr.iloc[sp_nr]))
|
|
axi.hist(np.concatenate(isis), bins=100, color='grey')
|
|
axi.axvline(1, color='black', linestyle='--', linewidth=0.5)
|
|
try:
|
|
axi.show_spines('b')
|
|
except:
|
|
a = 0
|
|
axi.set_xlabel(isi_xlabel())
|
|
nrs = np.arange(0, len(axps), ) # [0,1,2,3,4,5,6,7,8,9]
|
|
# embed()
|
|
|
|
|
|
def firing_rate_scalebars(axt, length = 10):
|
|
try:
|
|
axt.xscalebar(0.1, -0.02, length, 'ms', va='right', ha='bottom') ##ylim[0]
|
|
axt.yscalebar(-0.02, 0.1, 500, 'Hz', va='bottom', ha='left')
|
|
except:
|
|
a = 0
|
|
#axt.yscalebar(-0.03, 0.5, 10, 'dB', va='center', ha='left')
|
|
|
|
def spikes_umstuelpen(eod, sampling_rate, time):
|
|
shift_period = 0.005 # period * 2#
|
|
shifts = np.arange(0, 200 * shift_period, shift_period)
|
|
time_b = np.arange(0, len(beat) / sampling_rate,
|
|
1 / sampling_rate)
|
|
am_corr = extract_am(beat, time_b, eodf=eod, norm=False,
|
|
extract='globalmax', kind='linear')[0]
|
|
len_smoothed, smoothed_trial, all_spikes, maxima, error, spikes_cut, beat_cut, am_corr_cut = create_shifted_spikes(
|
|
eod, len_smoothed_b, len_smoothed, beat, am_corr,
|
|
sampling_rate, time_b, time, smoothed, shifts, plot_segment,
|
|
tranformed_spikes, version=version)
|
|
am_final, beat_final, most_similiar, spike, spike_sm = get_most_similiar_spikes(
|
|
all_spikes, am_corr_cut, beat_cut,
|
|
error, maxima, spike, spikes_cut)
|
|
|
|
|
|
def plt_beats_modulation_several_with_overview_nice_big_max(limit=1,
|
|
duration_exclude=0.45, nfft=int(4096), show=False, save=True,
|
|
position=0, redo=False):
|
|
# Function to load the experimental data
|
|
save_name = 'beat_results_smoothed_limit' + str(limit) + '_minimalduration_' + str(duration_exclude) + '_all'
|
|
print(save_name)
|
|
|
|
datas_new = []
|
|
old_cells = True
|
|
if old_cells:
|
|
# das ist falls ich die alten Datensätze untersuchen will
|
|
datasets = ['2021-08-03-ab-invivo-1', '2019-09-10-ad-invivo-1', '2019-11-13-aa-invivo-1', '2021-06-18-ae-invivo-1']
|
|
data_names = ['2017-10-25-am-invivo-1', '2017-08-15-ad-invivo-1',
|
|
'2018-03-28-aa-invivo-1', '2019-11-13-aa-invivo-1',
|
|
'2019-09-10-ad-invivo-1', '2019-10-28-ag-invivo-1',
|
|
|
|
'2021-06-18-ae-invivo-1',
|
|
|
|
'2018-09-06-au-invivo-1',
|
|
'2022-01-05-aa-invivo-1', '2022-02-10-ac-invivo-1',
|
|
'2017-07-18-ai-invivo-1', '2019-11-18-ab-invivo-1',
|
|
'2022-02-10-ad-invivo-1', '2018-03-22-af-invivo-1',
|
|
'2019-05-15-aj-invivo-1', '2018-08-14-ac-invivo-1',
|
|
'2020-08-12-ab-invivo-1', '2020-08-03-ad-invivo-1',
|
|
'2021-08-03-ab-invivo-1', '2018-08-14-aa-invivo-1',
|
|
'2018-01-19-aj-invivo-1', '2018-08-14-ad-invivo-1',
|
|
'2019-10-21-aj-invivo-1', '2019-09-10-ac-invivo-1',
|
|
'2018-09-06-as-invivo-1', '2019-09-11-ae-invivo-1',
|
|
'2022-01-08-aa-invivo-1', '2019-05-15-ai-invivo-1',
|
|
'2018-08-24-ai-invivo-1', '2018-06-25-aa-invivo-1']
|
|
datasets = [
|
|
'2021-08-03-ab-invivo-1'] # , '2021-06-18-ae-invivo-1','2021-08-03-aa-invivo-1','2019-09-10-ad-invivo-1', '2019-11-13-aa-invivo-1', ]
|
|
datasets = ['2021-08-03-ae-invivo-1', '2021-08-03-ab-invivo-1']
|
|
datasets, data_dir = find_all_dir_cells()
|
|
datasets = np.sort(datasets)[::-1]
|
|
#datasets, frame_desired, mt_names, tag_names = find_out_cells_big()
|
|
frame_desired = pd.read_csv('../code/calc_base/find_contrasts_SAMs-SAM_amplitudes.csv')
|
|
big_adapt = True
|
|
if big_adapt:
|
|
frame_big = frame_desired[(frame_desired.contrast > 25) | (frame_desired.contrast_true > 25)]
|
|
else:
|
|
frame_big = frame_desired#[(frame_desired.contrast > 5) | (frame_desired.contrast_true > 5)]
|
|
datasets = frame_big.cell.unique()
|
|
# frame_big.contrast_true#
|
|
datasets_loaded = datasets[::-1]
|
|
#datasets = ['2020-10-29-ac-invivo-1']#['2020-10-20-ad-invivo-1',
|
|
#'2020-10-29-ac-invivo-1',
|
|
#'2020-10-29-ai-invivo-1',
|
|
|
|
#'2018-09-13-aa-invivo-1'
|
|
#]
|
|
else:
|
|
frame = pd.read_pickle(
|
|
load_folder_name('calc_cocktailparty') + '/calc_data_peaks_threewave-spikes_all_psdEOD_1_nfft_16384[05,original]_psdEOD__sqrt__points_5_ALL_.pkl')
|
|
datasets_loaded = np.sort(frame.cell.unique())[::-1]
|
|
# aber ich will ja die neuen Datensätzte
|
|
#embed()
|
|
# datasets = ['2018-09-13-aa-invivo-1']
|
|
# datasets = ['2020-10-29-ac-invivo-1']
|
|
# datasets = ['2020-10-29-ai-invivo-1']
|
|
# datasets = ['2020-10-20-ad-invivo-1']
|
|
# embed()
|
|
datasets = ['2020-10-20-ad-invivo-1','2020-10-27-ac-invivo-1','2020-10-29-ai-invivo-1','2018-09-13-aa-invivo-1','2020-10-29-ac-invivo-1']#[,'2020-10-29-ai-invivo-1',]
|
|
datasets.extend(datasets_loaded)
|
|
#embed()
|
|
# frame_big[['cell', 'contrast']]
|
|
frame_all = pd.read_pickle('../code/calc_phaselocking/calc_phaselocking-phaselocking5_big.pkl')
|
|
colors = ['red', 'green', 'purple', 'blue']
|
|
markers = ['.', 'o', '*', '+']
|
|
for i, cell in enumerate(datasets):
|
|
|
|
# dataset = '2021-06-18-ae-invivo-1'
|
|
# embed()
|
|
# if cont:
|
|
path = '../data/cells/' + cell + '/' + cell + ".nix" # cell.split(os.path.sep)[-1]
|
|
path2 = '../data/cells/' + cell + '/samspikes.dat'
|
|
path3 = '../data/cells/' + cell + '/samspikes1.dat'
|
|
print(cell)
|
|
cells_exclude = ['2020-10-29-af-invivo-1', '2019-05-07-cb-invivo-1']
|
|
if cell not in cells_exclude:
|
|
# embed()
|
|
if os.path.exists(path):
|
|
print('exists')
|
|
file = nix.File.open(path, nix.FileMode.ReadOnly)
|
|
b = file.blocks[0]
|
|
cont2 = False
|
|
names = []
|
|
names_dataarrays = []
|
|
for stims in b.data_arrays:
|
|
# this seems to be reasonable because the only data with sinewave with higher number was not useful (das betrifft aber nur 2019-05-07-ab und 2019-05-07-ac, wobei wenn ich jetzt ganau schau scheinen das nur komische trials zu sein die wir nicht wirklich brauchen
|
|
if 'sinewave-1_Contrast' in stims.name:
|
|
names.append(stims.name)
|
|
names_dataarrays.append(stims.name)
|
|
# tag_names = find_tags(b, names='sam')
|
|
# tag_names = find_SAM_sine(b)
|
|
'sinewave''SAM'
|
|
# tags_all = find_tags_all(b)
|
|
all_mt_names = find_mt_all(b)
|
|
# embed()
|
|
sam = find_mt(b, 'SAM')
|
|
sine = find_mt(b, 'sine')
|
|
gwn = find_mt(b, 'gwn')
|
|
if (len(sine) > 0) or (len(sam) > 0):
|
|
cont2 = True
|
|
|
|
test = False
|
|
if test:
|
|
test_rlx()
|
|
|
|
if cont2 == True:
|
|
print('cont2')
|
|
counter = 0
|
|
choice = 'SAM_sinewave' # 'SAM'#'SAM_sinewave'
|
|
# contrasts_all = find_cont_nr(b, choice=choice)
|
|
# dfs_all, dfs_str = find_df_nr(b)
|
|
# contrasts_all_unique = np.unique(contrasts_all)
|
|
|
|
frame_cell = frame_all[frame_all['cell'] == cell]
|
|
if len(frame_cell) < 1:
|
|
# falls frame 5 noch nicht fertig ist haben wir ja den Backup von davor!
|
|
frame_all = pd.read_pickle('../code/calc_phaselocking/calc_phaselocking-phaselocking_big.pkl')
|
|
frame_cell = frame_all[frame_all['cell'] == cell]
|
|
|
|
# embed()
|
|
if len(frame_cell) > 0:
|
|
dfs_all_unique = np.unique(frame_cell.df_sign.dropna())[::-1]
|
|
df_name = 'df_sign'
|
|
df_pos = '' # 'min_df'
|
|
# embed()
|
|
dfs_all_unique = list(dfs_all_unique)
|
|
# todo: also hier gibts halt noch pobleme
|
|
# try:
|
|
# dfs_all_unique.pop(np.where(np.isnan(dfs_all_unique))[0][0])
|
|
# except:
|
|
# print('dfs all here')
|
|
# embed()
|
|
if len(np.unique(np.array(dfs_all_unique))) < 2:
|
|
df_name = 'df'
|
|
dfs_all_unique = np.unique(frame_cell.df.dropna())[::-1]
|
|
dfs_all_unique = list(dfs_all_unique)
|
|
|
|
# try:
|
|
# dfs_all_unique.pop(np.where(np.isnan(dfs_all_unique))[0][0])
|
|
# except:
|
|
# print('dfs all here')
|
|
# embed()
|
|
if len(dfs_all_unique) > 0:
|
|
# dfs_all_unique = dfs_all_unique[~np.where(np.isnan(dfs_all_unique))[0]]
|
|
if df_pos == 'min_df':
|
|
try:
|
|
dfs_all_unique = [dfs_all_unique[np.argmin(np.abs(dfs_all_unique))]]
|
|
except:
|
|
print('df min')
|
|
embed()
|
|
|
|
contrasts_all_unique = np.unique(frame_cell.contrast)
|
|
if len(contrasts_all_unique) > 1:
|
|
for df_chosen in dfs_all_unique:
|
|
#embed()
|
|
if np.abs(df_chosen)< 75:
|
|
# embed()
|
|
if not np.isnan(df_chosen):
|
|
|
|
frame_df = frame_cell[frame_cell[df_name] == df_chosen]
|
|
mt_types = frame_df.mt_type.unique()
|
|
# embed()
|
|
for mt_type in mt_types:
|
|
if 'base' not in mt_type:
|
|
contrasts_here = []
|
|
frame_type = frame_df[
|
|
(frame_df.mt_type == mt_type)] # | (frame_df.mt_type == 'base')
|
|
# fig, ax = plt.subplots(6, len(np.unique(contrasts_all_unique))+1, figsize=(12, 5.5))
|
|
fig = plt.figure(figsize=(20, 8))
|
|
gs0 = gridspec.GridSpec(1, 2, width_ratios=[4, 1], hspace=0.4,
|
|
left=0.045,
|
|
right=0.97) #
|
|
|
|
# embed()
|
|
grid1 = gridspec.GridSpecFromSubplotSpec(2, 1, wspace=0.2, hspace=0.2,
|
|
subplot_spec=gs0[1])
|
|
#
|
|
axs = plt.subplot(grid1[0])
|
|
scores = ['amp_stim', 'amp_df', 'amp_f0',
|
|
'amp_fmax_interval'] # 'stim', 'f0',
|
|
# embed()
|
|
plt_single_phaselockloss(colors, frame_cell, df_chosen, scores, cell,
|
|
axs)
|
|
axs.set_xlim(-10, 100)
|
|
|
|
axs = plt.subplot(grid1[1])
|
|
scores = ['dsp_perc95_', 'dsp_max_', 'dsp_mean_']
|
|
if scores[0] in frame_cell.keys():
|
|
plt_single_phaselockloss(colors, frame_cell, df_chosen, scores,
|
|
cell, axs)
|
|
axs.set_xlim(-10, 100)
|
|
|
|
nr_col = int(len(np.unique(contrasts_all_unique)) - 1)
|
|
grid2 = gridspec.GridSpecFromSubplotSpec(6, nr_col,
|
|
height_ratios=[1, 1, 0.5, 1, 1,
|
|
1],
|
|
wspace=0.2, hspace=0.2,
|
|
subplot_spec=gs0[0])
|
|
#
|
|
|
|
# plt.suptitle(score)
|
|
# frame_cell['contrast'],frame_cell['vs']
|
|
# if i >= row * col - col:
|
|
axts = []
|
|
axps = []
|
|
# embed()
|
|
mt_names = frame_type.mt_name.unique()
|
|
for m, mt_name in enumerate(mt_names):
|
|
frame_name = frame_type[frame_type.mt_name == mt_name]
|
|
mt_idxs = list(map(int, np.array(frame_name.mt_idx)))
|
|
# embed()
|
|
|
|
# np.where(all_mt_names == mt_name)
|
|
mts = b.multi_tags[mt_name]
|
|
# for mt_nr, mts in mt_idx:#enumerate(b.multi_tags):
|
|
|
|
print(mts.name)
|
|
# choice_mt = sine_sam_there(mts, choice=choice)
|
|
# embed()
|
|
# if 'Df=' + str(df_chosen) in mts.name:
|
|
# if choice_mt:
|
|
name = mts.name
|
|
contrast = name.split('=')[1].split('%')[0]
|
|
# plt.suptitle('DF=' + str(df_chosen))
|
|
#
|
|
# embed()
|
|
# if float(contrast) in [3,7,10,30]:
|
|
|
|
# embed()
|
|
if contrast not in contrasts_here:
|
|
print(contrast)
|
|
# embed()
|
|
if np.isnan(float(contrast)):
|
|
counter = 0
|
|
else:
|
|
counter = np.where(
|
|
np.round(contrasts_all_unique, 2) == np.round(
|
|
float(contrast), 2))[
|
|
0][0] # +1
|
|
|
|
try:
|
|
contrasts_here.append(contrast)
|
|
except:
|
|
print('embed problem')
|
|
embed()
|
|
name = mts.name
|
|
try:
|
|
dfs = [mts.metadata[mts.name]['DeltaF']] * len(
|
|
mts.positions[:])
|
|
except:
|
|
dfs = mts.metadata['DeltaF']
|
|
|
|
features, dfs, contrasts, id = get_features_and_info(mts, dfs = dfs, contrasts = contrasts, ids = ids)
|
|
|
|
|
|
eod_frs, eod_redo = get_eod_fr_simple(b, names)
|
|
|
|
eod = b.data_arrays['LocalEOD-1'][:]
|
|
names = []
|
|
for stims in b.data_arrays:
|
|
names.append(stims.name)
|
|
spikes = b.data_arrays['Spikes-1'][:]
|
|
fr = b.metadata.sections[0].sections['Cell']['Cell properties'][
|
|
'Firing Rate1']
|
|
print(cell + ' Beat calculation')
|
|
datas_new.append(cell)
|
|
try:
|
|
dataset = rlx.Dataset(path)
|
|
rlx_problem = True
|
|
except:
|
|
rlx_problem = False
|
|
print('rlx problem')
|
|
# embed()
|
|
|
|
spike_times = [[]] * len(mts.positions[:])
|
|
eods_all = []
|
|
eods_all_g = []
|
|
V_1 = []
|
|
spike_times = []
|
|
for m in mt_idxs: # range(len(mts.positions[:]))
|
|
try:
|
|
eods, _ = link_arrays_eod(b, mts.positions[:][m],
|
|
mts.extents[:][m],
|
|
'LocalEOD-1')
|
|
except:
|
|
print('eods thing')
|
|
embed()
|
|
# eods = mts.retrieve_data(m, 'LocalEOD-1')[:]
|
|
eods_all.append(eods)
|
|
# eods_g = mts.retrieve_data(m, 'EOD')[:]
|
|
eods_g, sampling_rate = link_arrays_eod(b,
|
|
mts.positions[:][m],
|
|
mts.extents[:][m],
|
|
'EOD')
|
|
v_1, sampling_rate = link_arrays_eod(b, mts.positions[:][m],
|
|
mts.extents[:][m],
|
|
'V-1')
|
|
eods_all_g.append(eods_g)
|
|
V_1.append(v_1)
|
|
# Efield = mts.retrieve_data(m, 'GlobalEFieldStimulus')[:]
|
|
|
|
# embed()
|
|
# global_stimulus = mts.retrieve_data(m, 'GlobalEFieldStimulus')[:]
|
|
if eod_redo == True:
|
|
p, f = ml.psd(eods - np.mean(eods), Fs=sampling_rate,
|
|
NFFT=nfft,
|
|
noverlap=nfft // 2)
|
|
eod_fr = f[np.argmax(p)]
|
|
else:
|
|
eod_fr = eod_frs[m]
|
|
cut = 0.05
|
|
|
|
spike_times.append(
|
|
(mts.retrieve_data(m, 'Spikes-1')[:] - mts.positions[
|
|
m]) * 1000) # - cut
|
|
# [m]
|
|
test = True
|
|
print(len(spike_times))
|
|
smooth = []
|
|
spikes_mats = []
|
|
for s in range(len(spike_times)):
|
|
try:
|
|
spikes_mat = cr_spikes_mat(spike_times[s] / 1000,
|
|
sampling_rate,
|
|
int(
|
|
mts.extents[:][
|
|
mt_idxs[
|
|
s]] * sampling_rate)) # time[-1] * sampling_rate
|
|
except:
|
|
print('mts prob')
|
|
embed()
|
|
spikes_mats.append(spikes_mat)
|
|
# für den Mean danach schneiden wir das wie das kürzeste
|
|
try:
|
|
# embed()
|
|
smooth.append(gaussian_filter(
|
|
spikes_mat[
|
|
0:int(np.min(mts.extents[:]) * sampling_rate)],
|
|
sigma=0.0005 * sampling_rate))
|
|
except:
|
|
print('embed problem')
|
|
embed()
|
|
try:
|
|
smooth_mean = np.mean(smooth, axis=0)
|
|
except:
|
|
print('smoothed thing')
|
|
embed()
|
|
# spikes_mats_mean = np.mean(spikes_mats, axis=0)
|
|
# spikes_mats_mean = np.mean(spikes_mats, axis=0)
|
|
|
|
plt.suptitle('data ' + cell + ' ' + mts.name)
|
|
|
|
######################
|
|
# plt local eod
|
|
|
|
# ax = np.concatenate(ax)
|
|
|
|
# sampling = 40000
|
|
|
|
# ax[0, counter].set_ylabel('mV')
|
|
xlim = [0, 40]
|
|
xlim = []
|
|
# if m == 0:
|
|
nr_example = 0
|
|
|
|
##########################################
|
|
# time psd
|
|
axp = plt.subplot(grid2[3, counter])
|
|
axp2 = plt.subplot(grid2[4, counter])
|
|
ps = []
|
|
maxx = 1000
|
|
for s, spikes_mat in enumerate(spikes_mats):
|
|
p, f = ml.psd(spikes_mat - np.mean(spikes_mat),
|
|
Fs=sampling_rate,
|
|
NFFT=2 ** 13,
|
|
noverlap=2 ** 13 / 2)
|
|
ps.append(p)
|
|
if s == nr_example:
|
|
color = 'purple'
|
|
zorder = 100
|
|
axp.plot(f, p, color=color, zorder=zorder)
|
|
eodf = np.mean(frame_name.eod_fr)
|
|
names = ['0', '01', '02', '012']
|
|
names_here = [names[1]] #
|
|
extend = True
|
|
colors_array = ['pink', 'green']
|
|
freqs, colors_peaks, labels, alphas = chose_all_freq_combos(
|
|
[],
|
|
colors_array,
|
|
df_chosen,
|
|
maxx,
|
|
eodf,
|
|
color_eodf='black',
|
|
name=
|
|
names_here[
|
|
0],
|
|
color_stim='pink',
|
|
color_stim_mult='pink')
|
|
|
|
plt_peaks_several(labels, freqs, [p], 0,
|
|
axp, p, colors_peaks, f, ms=18,
|
|
extend=extend,
|
|
alphas=alphas, clip_on=True)
|
|
|
|
else:
|
|
color = 'grey'
|
|
zorder = 1
|
|
axp2.plot(f, p, color=color, zorder=zorder)
|
|
|
|
axp2.set_xlim(0, maxx)
|
|
|
|
axp.set_xlim(0, maxx)
|
|
remove_xticks(axp)
|
|
axp2.plot(f, np.mean(ps, axis=0), color='black', zorder=2,
|
|
linestyle='--')
|
|
|
|
pp = np.mean(ps, axis=0)
|
|
|
|
axp2.set_xlabel('Power [Hz]')
|
|
if counter != 0:
|
|
remove_yticks(axp2)
|
|
axp2.set_ylabel('')
|
|
if counter != 0:
|
|
remove_yticks(axp)
|
|
axp.set_ylabel('')
|
|
axps.append(axp)
|
|
axps.append(axp2)
|
|
|
|
###########################################
|
|
# time spikes
|
|
stimulus = eods_all[nr_example] # eods_g + Efield
|
|
axt = plt.subplot(grid2[0, counter])
|
|
axt.set_ylabel('local')
|
|
time = np.arange(0, len(V_1[nr_example]) / sampling_rate,
|
|
1 / sampling_rate) * 1000
|
|
axt.plot(time, V_1[nr_example], color='purple', linewidth=0.5)
|
|
# axt.eventplot(spike_times[nr_example])
|
|
# axt.eventplot((spike_times[nr_example]), lineoffsets=np.max(V_1[nr_example]),
|
|
# color='black', s = 10) # np.max(v1)*
|
|
axt.scatter(spike_times[nr_example],
|
|
np.max(V_1[nr_example]) * np.ones(
|
|
len(spike_times[nr_example]))
|
|
, color='black', s=10,
|
|
marker='|') # np.max(v1)*lineoffsets=np.max(V_1[nr_example]),
|
|
|
|
# embed()
|
|
if len(xlim)> 0:
|
|
axt.set_xlim(xlim)
|
|
axt.set_title(contrast)
|
|
remove_xticks(axt)
|
|
if counter != 0:
|
|
remove_yticks(axt)
|
|
axt.set_ylabel('')
|
|
axts.append(axt)
|
|
##########################################
|
|
axt = plt.subplot(grid2[1, counter])
|
|
axts.append(axt)
|
|
try:
|
|
time = np.arange(0, len(stimulus) / sampling_rate,
|
|
1 / sampling_rate) * 1000
|
|
except:
|
|
print('time all')
|
|
embed()
|
|
eods_am, eod_norm = extract_am(stimulus, time, norm=False)
|
|
axt.plot(time, eod_norm, color='grey', linewidth=0.5)
|
|
axt.plot(time, eods_am, color='red')
|
|
# axt.eventplot((spike_times[nr_example]), lineoffsets=np.mean(eod_norm),
|
|
# color='black', s = 10) # np.max(v1)*
|
|
axt.scatter(spike_times[nr_example],
|
|
np.mean(eod_norm) * np.ones(
|
|
len(spike_times[nr_example]))
|
|
, color='black', s=10,
|
|
marker='|') # np.max(v1)*lineoffsets=np.max(V_1[nr_example]),
|
|
|
|
# axt.eventplot(spike_times[nr_example], s = 10)
|
|
# else:
|
|
# ax[0 + nr, counter].plot(time, stimulus, color='red')
|
|
if len(xlim)> 0:
|
|
axt.set_xlim(xlim)
|
|
axt.set_xlabel('Time [ms]')
|
|
|
|
# for ax in axts:
|
|
if counter != 0:
|
|
remove_yticks(axt)
|
|
axt.set_ylabel('')
|
|
# ax[1 + nr, counter].plot(time, eods_g)
|
|
# ax[1 + nr, counter].set_ylabel('global')
|
|
# ax[1 + nr, counter].set_xlim(xlim)
|
|
|
|
# plt_modulation_here(fr, spikes_mats_mean, smooth_mean, dfs[m], cell, m,show, eods, eods_g, mts, spike_times)
|
|
color = 'grey'
|
|
|
|
#############################
|
|
# spike_times[nr_example]
|
|
axi = plt.subplot(grid2[-1, counter])
|
|
# embed()
|
|
isis = []
|
|
for sp_nr, sp in enumerate(np.array(spike_times)):
|
|
isis.append(
|
|
calc_isi(sp / 1000, frame_name.eod_fr.iloc[sp_nr]))
|
|
axi.hist(np.concatenate(isis), bins=100)
|
|
axi.axvline(1, color='grey', linestyle='--')
|
|
|
|
# if counter != 0:
|
|
nrs = np.arange(0, len(axps), ) # [0,1,2,3,4,5,6,7,8,9]
|
|
# for ax in axps:
|
|
|
|
|
|
try:
|
|
axts[0].get_shared_y_axes().join(*axts[0::2])
|
|
except:
|
|
print('axt problem')
|
|
embed()
|
|
|
|
axts[1].get_shared_y_axes().join(*axts[1::2])
|
|
|
|
axts[0].get_shared_x_axes().join(*axts)
|
|
|
|
join_y(axps)
|
|
join_x(axps)
|
|
# join
|
|
individual_tag = 'data ' + cell + '_DF_chosen_' + str(
|
|
df_chosen) + mt_type
|
|
# save_visualization()
|
|
save_visualization(individual_tag, show, pdf = True)
|
|
print('plotted')
|
|
# plt_all_eods('local', m, cell, eods_all, mts, eods, show)
|
|
# plt_all_eods('global', m, cell, eods_all_g, mts, eods, show)
|
|
# embed()
|
|
# plt_modulation(dataset, eods, m, contrasts[m], dfs[m], spike_times, mts, show = True)
|
|
file.close()
|
|
|
|
print('finished examples')
|
|
embed()
|
|
|
|
def plt_beats_modulation_several_with_overview_nice_big(limit=1,
|
|
duration_exclude=0.45, nfft=int(4096), show=False, save=True,
|
|
position=0, redo=False):
|
|
# Function to load the experimental data
|
|
save_name = 'beat_results_smoothed_limit' + str(limit) + '_minimalduration_' + str(duration_exclude) + '_all'
|
|
print(save_name)
|
|
|
|
datas_new = []
|
|
old_cells = True
|
|
if old_cells:
|
|
# das ist falls ich die alten Datensätze untersuchen will
|
|
datasets = ['2021-08-03-ab-invivo-1', '2019-09-10-ad-invivo-1', '2019-11-13-aa-invivo-1', '2021-06-18-ae-invivo-1']
|
|
data_names = ['2017-10-25-am-invivo-1', '2017-08-15-ad-invivo-1',
|
|
'2018-03-28-aa-invivo-1', '2019-11-13-aa-invivo-1',
|
|
'2019-09-10-ad-invivo-1', '2019-10-28-ag-invivo-1',
|
|
|
|
'2021-06-18-ae-invivo-1',
|
|
|
|
'2018-09-06-au-invivo-1',
|
|
'2022-01-05-aa-invivo-1', '2022-02-10-ac-invivo-1',
|
|
'2017-07-18-ai-invivo-1', '2019-11-18-ab-invivo-1',
|
|
'2022-02-10-ad-invivo-1', '2018-03-22-af-invivo-1',
|
|
'2019-05-15-aj-invivo-1', '2018-08-14-ac-invivo-1',
|
|
'2020-08-12-ab-invivo-1', '2020-08-03-ad-invivo-1',
|
|
'2021-08-03-ab-invivo-1', '2018-08-14-aa-invivo-1',
|
|
'2018-01-19-aj-invivo-1', '2018-08-14-ad-invivo-1',
|
|
'2019-10-21-aj-invivo-1', '2019-09-10-ac-invivo-1',
|
|
'2018-09-06-as-invivo-1', '2019-09-11-ae-invivo-1',
|
|
'2022-01-08-aa-invivo-1', '2019-05-15-ai-invivo-1',
|
|
'2018-08-24-ai-invivo-1', '2018-06-25-aa-invivo-1']
|
|
datasets = [
|
|
'2021-08-03-ab-invivo-1'] # , '2021-06-18-ae-invivo-1','2021-08-03-aa-invivo-1','2019-09-10-ad-invivo-1', '2019-11-13-aa-invivo-1', ]
|
|
datasets = ['2021-08-03-ae-invivo-1', '2021-08-03-ab-invivo-1']
|
|
datasets, data_dir = find_all_dir_cells()
|
|
datasets = np.sort(datasets)[::-1]
|
|
#datasets, frame_desired, mt_names, tag_names = find_out_cells_big()
|
|
frame_desired = pd.read_csv('../code/calc_base/find_contrasts_SAMs-SAM_amplitudes.csv')
|
|
big_adapt = True
|
|
if big_adapt:
|
|
frame_big = frame_desired[(frame_desired.contrast > 25) | (frame_desired.contrast_true > 25)]
|
|
else:
|
|
frame_big = frame_desired#[(frame_desired.contrast > 5) | (frame_desired.contrast_true > 5)]
|
|
datasets = frame_big.cell.unique()
|
|
# frame_big.contrast_true#
|
|
datasets_loaded = datasets[::-1]
|
|
#datasets = ['2020-10-29-ac-invivo-1']#['2020-10-20-ad-invivo-1',
|
|
#'2020-10-29-ac-invivo-1',
|
|
#'2020-10-29-ai-invivo-1',
|
|
|
|
#'2018-09-13-aa-invivo-1'
|
|
#]
|
|
else:
|
|
frame = pd.read_pickle(
|
|
load_folder_name('calc_cocktailparty') + '/calc_data_peaks_threewave-spikes_all_psdEOD_1_nfft_16384[05,original]_psdEOD__sqrt__points_5_ALL_.pkl')
|
|
datasets_loaded = np.sort(frame.cell.unique())[::-1]
|
|
# aber ich will ja die neuen Datensätzte
|
|
#embed()
|
|
# datasets = ['2018-09-13-aa-invivo-1']
|
|
# datasets = ['2020-10-29-ac-invivo-1']
|
|
# datasets = ['2020-10-29-ai-invivo-1']
|
|
# datasets = ['2020-10-20-ad-invivo-1']
|
|
# embed()
|
|
datasets = ['2020-10-29-ai-invivo-1','2020-10-20-ad-invivo-1','2018-09-13-aa-invivo-1','2020-10-29-ac-invivo-1']#[,'2020-10-29-ai-invivo-1',]
|
|
datasets.extend(datasets_loaded)
|
|
#embed()
|
|
# frame_big[['cell', 'contrast']]
|
|
plt_spectra_compar(datas_new, datasets, nfft, show, add = 'plt_beats_modulation_several_with_overview_nice_big')
|
|
print('finished examples')
|
|
embed()
|
|
|
|
|
|
def plt_beats_modulation_several_with_overview_nice(limit=1,
|
|
duration_exclude=0.45, nfft=int(4096), show=False, save=True,
|
|
position=0, redo=False):
|
|
# Function to load the experimental data
|
|
save_name = 'beat_results_smoothed_limit' + str(limit) + '_minimalduration_' + str(duration_exclude) + '_all'
|
|
print(save_name)
|
|
|
|
datas_new = []
|
|
old_cells = True
|
|
if old_cells:
|
|
# das ist falls ich die alten Datensätze untersuchen will
|
|
datasets = ['2021-08-03-ab-invivo-1', '2019-09-10-ad-invivo-1', '2019-11-13-aa-invivo-1', '2021-06-18-ae-invivo-1']
|
|
data_names = ['2017-10-25-am-invivo-1', '2017-08-15-ad-invivo-1',
|
|
'2018-03-28-aa-invivo-1', '2019-11-13-aa-invivo-1',
|
|
'2019-09-10-ad-invivo-1', '2019-10-28-ag-invivo-1',
|
|
|
|
'2021-06-18-ae-invivo-1',
|
|
|
|
'2018-09-06-au-invivo-1',
|
|
'2022-01-05-aa-invivo-1', '2022-02-10-ac-invivo-1',
|
|
'2017-07-18-ai-invivo-1', '2019-11-18-ab-invivo-1',
|
|
'2022-02-10-ad-invivo-1', '2018-03-22-af-invivo-1',
|
|
'2019-05-15-aj-invivo-1', '2018-08-14-ac-invivo-1',
|
|
'2020-08-12-ab-invivo-1', '2020-08-03-ad-invivo-1',
|
|
'2021-08-03-ab-invivo-1', '2018-08-14-aa-invivo-1',
|
|
'2018-01-19-aj-invivo-1', '2018-08-14-ad-invivo-1',
|
|
'2019-10-21-aj-invivo-1', '2019-09-10-ac-invivo-1',
|
|
'2018-09-06-as-invivo-1', '2019-09-11-ae-invivo-1',
|
|
'2022-01-08-aa-invivo-1', '2019-05-15-ai-invivo-1',
|
|
'2018-08-24-ai-invivo-1', '2018-06-25-aa-invivo-1']
|
|
datasets = [
|
|
'2021-08-03-ab-invivo-1'] # , '2021-06-18-ae-invivo-1','2021-08-03-aa-invivo-1','2019-09-10-ad-invivo-1', '2019-11-13-aa-invivo-1', ]
|
|
datasets = ['2021-08-03-ae-invivo-1', '2021-08-03-ab-invivo-1']
|
|
datasets, data_dir = find_all_dir_cells()
|
|
datasets = np.sort(datasets)[::-1]
|
|
#datasets, frame_desired, mt_names, tag_names = find_out_cells_big()
|
|
frame_desired = pd.read_csv('../code/calc_base/find_contrasts_SAMs-SAM_amplitudes.csv')
|
|
big_adapt = False
|
|
if big_adapt:
|
|
frame_big = frame_desired[(frame_desired.contrast > 29) | (frame_desired.contrast_true > 29)]
|
|
else:
|
|
frame_big = frame_desired#[(frame_desired.contrast > 5) | (frame_desired.contrast_true > 5)]
|
|
datasets = frame_big.cell.unique()
|
|
# frame_big.contrast_true#
|
|
datasets_loaded = datasets[::-1]
|
|
#datasets = ['2020-10-29-ac-invivo-1']#['2020-10-20-ad-invivo-1',
|
|
#'2020-10-29-ac-invivo-1',
|
|
#'2020-10-29-ai-invivo-1',
|
|
|
|
#'2018-09-13-aa-invivo-1'
|
|
#]
|
|
else:
|
|
frame = pd.read_pickle(
|
|
load_folder_name('calc_cocktailparty') + '/calc_data_peaks_threewave-spikes_all_psdEOD_1_nfft_16384[05,original]_psdEOD__sqrt__points_5_ALL_.pkl')
|
|
datasets_loaded = np.sort(frame.cell.unique())[::-1]
|
|
# aber ich will ja die neuen Datensätzte
|
|
#embed()
|
|
# datasets = ['2018-09-13-aa-invivo-1']
|
|
# datasets = ['2020-10-29-ac-invivo-1']
|
|
# datasets = ['2020-10-29-ai-invivo-1']
|
|
# datasets = ['2020-10-20-ad-invivo-1']
|
|
# embed()
|
|
datasets = ['2018-09-13-aa-invivo-1','2020-10-20-ad-invivo-1']
|
|
datasets.extend(datasets_loaded)
|
|
#embed()
|
|
# frame_big[['cell', 'contrast']]
|
|
plt_spectra_compar(datas_new, datasets, nfft, show, add = 'plt_beats_modulation_several_with_overview_nice')
|
|
print('finished examples')
|
|
embed()
|
|
|
|
|
|
def plt_spectra_compar(datas_new, datasets, nfft, show, add = ''):
|
|
frame_all = pd.read_pickle('../code/calc_phaselocking/calc_phaselocking-phaselocking5_big.pkl')
|
|
colors = ['red', 'green', 'purple', 'blue']
|
|
markers = ['.', 'o', '*', '+']
|
|
for i, cell in enumerate(datasets):
|
|
|
|
# dataset = '2021-06-18-ae-invivo-1'
|
|
# embed()
|
|
# if cont:
|
|
path = '../data/cells/' + cell + '/' + cell + ".nix" # cell.split(os.path.sep)[-1]
|
|
path2 = '../data/cells/' + cell + '/samspikes.dat'
|
|
path3 = '../data/cells/' + cell + '/samspikes1.dat'
|
|
print(cell)
|
|
cells_exclude = ['2020-10-29-af-invivo-1', '2019-05-07-cb-invivo-1']
|
|
if cell not in cells_exclude:
|
|
# embed()
|
|
if os.path.exists(path):
|
|
print('exists')
|
|
file = nix.File.open(path, nix.FileMode.ReadOnly)
|
|
b = file.blocks[0]
|
|
cont2 = False
|
|
names = []
|
|
names_dataarrays = []
|
|
for stims in b.data_arrays:
|
|
# this seems to be reasonable because the only data with sinewave with higher number was not useful (das betrifft aber nur 2019-05-07-ab und 2019-05-07-ac, wobei wenn ich jetzt ganau schau scheinen das nur komische trials zu sein die wir nicht wirklich brauchen
|
|
if 'sinewave-1_Contrast' in stims.name:
|
|
names.append(stims.name)
|
|
names_dataarrays.append(stims.name)
|
|
# tag_names = find_tags(b, names='sam')
|
|
# tag_names = find_SAM_sine(b)
|
|
'sinewave''SAM'
|
|
# tags_all = find_tags_all(b)
|
|
all_mt_names = find_mt_all(b)
|
|
# embed()
|
|
sam = find_mt(b, 'SAM')
|
|
sine = find_mt(b, 'sine')
|
|
gwn = find_mt(b, 'gwn')
|
|
if (len(sine) > 0) or (len(sam) > 0):
|
|
cont2 = True
|
|
|
|
test = False
|
|
if test:
|
|
tes_rlx2()
|
|
if cont2 == True:
|
|
print('cont2')
|
|
counter = 0
|
|
choice = 'SAM_sinewave' # 'SAM'#'SAM_sinewave'
|
|
# contrasts_all = find_cont_nr(b, choice=choice)
|
|
# dfs_all, dfs_str = find_df_nr(b)
|
|
# contrasts_all_unique = np.unique(contrasts_all)
|
|
|
|
frame_cell = frame_all[frame_all['cell'] == cell]
|
|
if len(frame_cell) < 1:
|
|
# falls frame 5 noch nicht fertig ist haben wir ja den Backup von davor!
|
|
frame_all = pd.read_pickle('../code/calc_phaselocking/calc_phaselocking-phaselocking_big.pkl')
|
|
frame_cell = frame_all[frame_all['cell'] == cell]
|
|
|
|
# embed()
|
|
if len(frame_cell) > 0:
|
|
dfs_all_unique = np.unique(frame_cell.df_sign.dropna())[::-1]
|
|
df_name = 'df_sign'
|
|
df_pos = ''#'min_df'
|
|
# embed()
|
|
dfs_all_unique = list(dfs_all_unique)
|
|
# todo: also hier gibts halt noch pobleme
|
|
# try:
|
|
# dfs_all_unique.pop(np.where(np.isnan(dfs_all_unique))[0][0])
|
|
# except:
|
|
# print('dfs all here')
|
|
# embed()
|
|
if len(np.unique(np.array(dfs_all_unique))) < 2:
|
|
df_name = 'df'
|
|
dfs_all_unique = np.unique(frame_cell.df.dropna())[::-1]
|
|
dfs_all_unique = list(dfs_all_unique)
|
|
|
|
# embed()
|
|
if len(dfs_all_unique) > 0:
|
|
# dfs_all_unique = dfs_all_unique[~np.where(np.isnan(dfs_all_unique))[0]]
|
|
if df_pos == 'min_df':
|
|
try:
|
|
dfs_all_unique = [dfs_all_unique[np.argmin(np.abs(dfs_all_unique))]]
|
|
except:
|
|
print('df min')
|
|
embed()
|
|
|
|
contrasts_all_unique = np.unique(frame_cell.contrast)
|
|
if len(contrasts_all_unique) > 1:
|
|
for df_chosen in dfs_all_unique:
|
|
#embed()
|
|
if not np.isnan(df_chosen):
|
|
|
|
frame_df = frame_cell[frame_cell[df_name] == df_chosen]
|
|
mt_types = frame_df.mt_type.unique()
|
|
# embed()
|
|
for mt_type in mt_types:
|
|
if 'base' not in mt_type:
|
|
contrasts_here = []
|
|
frame_type = frame_df[
|
|
(frame_df.mt_type == mt_type)] # | (frame_df.mt_type == 'base')
|
|
# fig, ax = plt.subplots(6, len(np.unique(contrasts_all_unique))+1, figsize=(12, 5.5))
|
|
fig = plt.figure(figsize=(20, 8))
|
|
gs0 = gridspec.GridSpec(1, 2, width_ratios=[4, 1], hspace=0.4,
|
|
left=0.045,
|
|
right=0.97) #
|
|
|
|
# embed()
|
|
grid1 = gridspec.GridSpecFromSubplotSpec(2, 1, wspace=0.2, hspace=0.2,
|
|
subplot_spec=gs0[1])
|
|
#
|
|
axs = plt.subplot(grid1[0])
|
|
scores = ['amp_stim', 'amp_df', 'amp_f0',
|
|
'amp_fmax_interval'] # 'stim', 'f0',
|
|
# embed()
|
|
plt_single_phaselockloss(colors, frame_cell, df_chosen, scores, cell,
|
|
axs)
|
|
axs.set_xlim(-10, 100)
|
|
|
|
axs = plt.subplot(grid1[1])
|
|
scores = ['dsp_perc95_', 'dsp_max_', 'dsp_mean_']
|
|
if scores[0] in frame_cell.keys():
|
|
plt_single_phaselockloss(colors, frame_cell, df_chosen, scores,
|
|
cell, axs)
|
|
axs.set_xlim(-10, 100)
|
|
|
|
nr_col = int(len(np.unique(contrasts_all_unique)) - 1)
|
|
grid2 = gridspec.GridSpecFromSubplotSpec(6, nr_col,
|
|
height_ratios=[1, 1, 0.5, 1, 1,
|
|
1],
|
|
wspace=0.2, hspace=0.2,
|
|
subplot_spec=gs0[0])
|
|
#
|
|
|
|
# plt.suptitle(score)
|
|
# frame_cell['contrast'],frame_cell['vs']
|
|
# if i >= row * col - col:
|
|
axts = []
|
|
axps = []
|
|
# embed()
|
|
mt_names = frame_type.mt_name.unique()
|
|
for m, mt_name in enumerate(mt_names):
|
|
frame_name = frame_type[frame_type.mt_name == mt_name]
|
|
mt_idxs = list(map(int, np.array(frame_name.mt_idx)))
|
|
# embed()
|
|
|
|
# np.where(all_mt_names == mt_name)
|
|
mts = b.multi_tags[mt_name]
|
|
# for mt_nr, mts in mt_idx:#enumerate(b.multi_tags):
|
|
|
|
print(mts.name)
|
|
# choice_mt = sine_sam_there(mts, choice=choice)
|
|
# embed()
|
|
# if 'Df=' + str(df_chosen) in mts.name:
|
|
# if choice_mt:
|
|
name = mts.name
|
|
contrast = name.split('=')[1].split('%')[0]
|
|
# plt.suptitle('DF=' + str(df_chosen))
|
|
#
|
|
# embed()
|
|
# if float(contrast) in [3,7,10,30]:
|
|
|
|
# embed()
|
|
if contrast not in contrasts_here:
|
|
print(contrast)
|
|
# embed()
|
|
if np.isnan(float(contrast)):
|
|
counter = 0
|
|
else:
|
|
counter = np.where(
|
|
np.round(contrasts_all_unique, 2) == np.round(
|
|
float(contrast), 2))[
|
|
0][0] # +1
|
|
|
|
try:
|
|
contrasts_here.append(contrast)
|
|
except:
|
|
print('embed problem')
|
|
embed()
|
|
name = mts.name
|
|
try:
|
|
dfs = [mts.metadata[mts.name]['DeltaF']] * len(
|
|
mts.positions[:])
|
|
except:
|
|
dfs = mts.metadata['DeltaF']
|
|
|
|
features, dfs, contrasts, id = get_features_and_info(mts, dfs = dfs, contrasts = contrasts, ids = ids)
|
|
eod_frs, eod_redo = get_eod_fr_simple(b, names)
|
|
eod = b.data_arrays['LocalEOD-1'][:]
|
|
names = []
|
|
for stims in b.data_arrays:
|
|
names.append(stims.name)
|
|
spikes = b.data_arrays['Spikes-1'][:]
|
|
fr = b.metadata.sections[0].sections['Cell']['Cell properties'][
|
|
'Firing Rate1']
|
|
print(cell + ' Beat calculation')
|
|
datas_new.append(cell)
|
|
try:
|
|
dataset = rlx.Dataset(path)
|
|
rlx_problem = True
|
|
except:
|
|
rlx_problem = False
|
|
print('rlx problem')
|
|
# embed()
|
|
|
|
|
|
spike_times = [[]] * len(mts.positions[:])
|
|
eods_all = []
|
|
eods_all_g = []
|
|
V_1 = []
|
|
spike_times = []
|
|
for m in mt_idxs: # range(len(mts.positions[:]))
|
|
try:
|
|
eods, _ = link_arrays_eod(b, mts.positions[:][m],
|
|
mts.extents[:][m],
|
|
'LocalEOD-1')
|
|
except:
|
|
print('eods thing')
|
|
embed()
|
|
# eods = mts.retrieve_data(m, 'LocalEOD-1')[:]
|
|
eods_all.append(eods)
|
|
# eods_g = mts.retrieve_data(m, 'EOD')[:]
|
|
eods_g, sampling_rate = link_arrays_eod(b,
|
|
mts.positions[:][m],
|
|
mts.extents[:][m],
|
|
'EOD')
|
|
v_1, sampling_rate = link_arrays_eod(b, mts.positions[:][m],
|
|
mts.extents[:][m],
|
|
'V-1')
|
|
eods_all_g.append(eods_g)
|
|
V_1.append(v_1)
|
|
# Efield = mts.retrieve_data(m, 'GlobalEFieldStimulus')[:]
|
|
|
|
# embed()
|
|
# global_stimulus = mts.retrieve_data(m, 'GlobalEFieldStimulus')[:]
|
|
if eod_redo == True:
|
|
p, f = ml.psd(eods - np.mean(eods), Fs=sampling_rate,
|
|
NFFT=nfft,
|
|
noverlap=nfft // 2)
|
|
eod_fr = f[np.argmax(p)]
|
|
else:
|
|
eod_fr = eod_frs[m]
|
|
cut = 0.05
|
|
|
|
spike_times.append(
|
|
(mts.retrieve_data(m, 'Spikes-1')[:] - mts.positions[
|
|
m]) * 1000) # - cut
|
|
# [m]
|
|
test = True
|
|
print(len(spike_times))
|
|
smooth = []
|
|
spikes_mats = []
|
|
for s in range(len(spike_times)):
|
|
try:
|
|
spikes_mat = cr_spikes_mat(spike_times[s] / 1000,
|
|
sampling_rate,
|
|
int(
|
|
mts.extents[:][
|
|
mt_idxs[
|
|
s]] * sampling_rate)) # time[-1] * sampling_rate
|
|
except:
|
|
print('mts prob')
|
|
embed()
|
|
spikes_mats.append(spikes_mat)
|
|
# für den Mean danach schneiden wir das wie das kürzeste
|
|
try:
|
|
# embed()
|
|
smooth.append(gaussian_filter(
|
|
spikes_mat[
|
|
0:int(np.min(mts.extents[:]) * sampling_rate)],
|
|
sigma=0.0005 * sampling_rate))
|
|
except:
|
|
print('embed problem')
|
|
embed()
|
|
try:
|
|
smooth_mean = np.mean(smooth, axis=0)
|
|
except:
|
|
print('smoothed thing')
|
|
embed()
|
|
# spikes_mats_mean = np.mean(spikes_mats, axis=0)
|
|
# spikes_mats_mean = np.mean(spikes_mats, axis=0)
|
|
|
|
plt.suptitle('data ' + cell + ' ' + mts.name)
|
|
|
|
######################
|
|
# plt local eod
|
|
|
|
# ax = np.concatenate(ax)
|
|
|
|
# sampling = 40000
|
|
|
|
# ax[0, counter].set_ylabel('mV')
|
|
xlim = [0, 40]
|
|
# if m == 0:
|
|
nr_example = 0
|
|
|
|
##########################################
|
|
# time psd
|
|
axp = plt.subplot(grid2[3, counter])
|
|
axp2 = plt.subplot(grid2[4, counter])
|
|
ps = []
|
|
maxx = 1000
|
|
for s, spikes_mat in enumerate(spikes_mats):
|
|
p, f = ml.psd(spikes_mat - np.mean(spikes_mat),
|
|
Fs=sampling_rate,
|
|
NFFT=2 ** 13,
|
|
noverlap=2 ** 13 / 2)
|
|
ps.append(p)
|
|
if s == nr_example:
|
|
color = 'purple'
|
|
zorder = 100
|
|
axp.plot(f, p, color=color, zorder=zorder)
|
|
eodf = np.mean(frame_name.eod_fr)
|
|
names = ['0', '01', '02', '012']
|
|
names_here = [names[1]] #
|
|
extend = True
|
|
colors_array = ['pink', 'green']
|
|
freqs, colors_peaks, labels, alphas = chose_all_freq_combos(
|
|
[],
|
|
colors_array,
|
|
df_chosen,
|
|
maxx,
|
|
eodf,
|
|
color_eodf='black',
|
|
name=
|
|
names_here[
|
|
0],
|
|
color_stim='pink',
|
|
color_stim_mult='pink')
|
|
|
|
plt_peaks_several(labels, freqs, [p], 0,
|
|
axp, p, colors_peaks, f, ms=18,
|
|
extend=extend,
|
|
alphas=alphas, clip_on=True)
|
|
|
|
else:
|
|
color = 'grey'
|
|
zorder = 1
|
|
axp2.plot(f, p, color=color, zorder=zorder)
|
|
|
|
axp2.set_xlim(0, maxx)
|
|
|
|
axp.set_xlim(0, maxx)
|
|
remove_xticks(axp)
|
|
axp2.plot(f, np.mean(ps, axis=0), color='black', zorder=2,
|
|
linestyle='--')
|
|
|
|
pp = np.mean(ps, axis=0)
|
|
|
|
axp2.set_xlabel('Power [Hz]')
|
|
if counter != 0:
|
|
remove_yticks(axp2)
|
|
axp2.set_ylabel('')
|
|
if counter != 0:
|
|
remove_yticks(axp)
|
|
axp.set_ylabel('')
|
|
axps.append(axp)
|
|
axps.append(axp2)
|
|
|
|
###########################################
|
|
# time spikes
|
|
stimulus = eods_all[nr_example] # eods_g + Efield
|
|
axt = plt.subplot(grid2[0, counter])
|
|
axt.set_ylabel('local')
|
|
time = np.arange(0, len(V_1[nr_example]) / sampling_rate,
|
|
1 / sampling_rate) * 1000
|
|
axt.plot(time, V_1[nr_example], color='purple', linewidth=0.5)
|
|
# axt.eventplot(spike_times[nr_example])
|
|
# axt.eventplot((spike_times[nr_example]), lineoffsets=np.max(V_1[nr_example]),
|
|
# color='black', s = 10) # np.max(v1)*
|
|
axt.scatter(spike_times[nr_example],
|
|
np.max(V_1[nr_example]) * np.ones(
|
|
len(spike_times[nr_example]))
|
|
, color='black', s=10,
|
|
marker='|') # np.max(v1)*lineoffsets=np.max(V_1[nr_example]),
|
|
|
|
# embed()
|
|
axt.set_xlim(xlim)
|
|
axt.set_title(contrast)
|
|
remove_xticks(axt)
|
|
if counter != 0:
|
|
remove_yticks(axt)
|
|
axt.set_ylabel('')
|
|
axts.append(axt)
|
|
##########################################
|
|
axt = plt.subplot(grid2[1, counter])
|
|
axts.append(axt)
|
|
try:
|
|
time = np.arange(0, len(stimulus) / sampling_rate,
|
|
1 / sampling_rate) * 1000
|
|
except:
|
|
print('time all')
|
|
embed()
|
|
eods_am, eod_norm = extract_am(stimulus, time, norm=False)
|
|
axt.plot(time, eod_norm, color='grey', linewidth=0.5)
|
|
axt.plot(time, eods_am, color='red')
|
|
# axt.eventplot((spike_times[nr_example]), lineoffsets=np.mean(eod_norm),
|
|
# color='black', s = 10) # np.max(v1)*
|
|
axt.scatter(spike_times[nr_example],
|
|
np.mean(eod_norm) * np.ones(
|
|
len(spike_times[nr_example]))
|
|
, color='black', s=10,
|
|
marker='|') # np.max(v1)*lineoffsets=np.max(V_1[nr_example]),
|
|
|
|
# axt.eventplot(spike_times[nr_example], s = 10)
|
|
# else:
|
|
# ax[0 + nr, counter].plot(time, stimulus, color='red')
|
|
axt.set_xlim(xlim)
|
|
axt.set_xlabel('Time [ms]')
|
|
|
|
# for ax in axts:
|
|
if counter != 0:
|
|
remove_yticks(axt)
|
|
axt.set_ylabel('')
|
|
# ax[1 + nr, counter].plot(time, eods_g)
|
|
# ax[1 + nr, counter].set_ylabel('global')
|
|
# ax[1 + nr, counter].set_xlim(xlim)
|
|
|
|
# plt_modulation_here(fr, spikes_mats_mean, smooth_mean, dfs[m], cell, m,show, eods, eods_g, mts, spike_times)
|
|
color = 'grey'
|
|
|
|
#############################
|
|
# spike_times[nr_example]
|
|
axi = plt.subplot(grid2[-1, counter])
|
|
# embed()
|
|
isis = []
|
|
for sp_nr, sp in enumerate(np.array(spike_times)):
|
|
isis.append(
|
|
calc_isi(sp / 1000, frame_name.eod_fr.iloc[sp_nr]))
|
|
axi.hist(np.concatenate(isis), bins=100)
|
|
axi.axvline(1, color='grey', linestyle='--')
|
|
#####################
|
|
|
|
|
|
# try:
|
|
# ax[3 + nr, counter].plot(np.arange(0, len(smooth_mean) / sampling_rate,
|
|
# 1 / sampling_rate) * 1000,
|
|
# smooth_mean,
|
|
# color=color)
|
|
# except:
|
|
# print('smooth problem')
|
|
# embed()
|
|
# embed()
|
|
# ax[2,counter].set_xlabel('Time [ms]')
|
|
# ax[3 + nr, counter].set_xlim(xlim)
|
|
# ax[3 + nr, counter].set_ylabel('FR [Hz]')
|
|
# ax[2, counter].scatter(df, p[np.argmin(np.abs(f - df))], color='red')
|
|
# ax[2, counter].scatter(df * 2, p[np.argmin(np.abs(f - df * 2))], color='red')
|
|
# ax[2, counter].scatter(fr, p[np.argmin(np.abs(f - fr))], color='purple')
|
|
# ax[2, counter].scatter(fr * 2, p[np.argmin(np.abs(f - fr * 2))], color='purple')
|
|
# ax[5 + nr, counter].set_ylabel('[Hz]')
|
|
|
|
# ax[5 + nr, counter].set_xlim(0, 1000)
|
|
# ax[5 + nr, counter].set_xlabel('F [Hz]')
|
|
# if counter != 0:
|
|
nrs = np.arange(0, len(axps), ) # [0,1,2,3,4,5,6,7,8,9]
|
|
# for ax in axps:
|
|
|
|
# plt.show()
|
|
# embed()
|
|
|
|
# axt.set_xlabel('Contrast [%]')
|
|
# if i in np.arange(0, 100, col):
|
|
# ax[0, -1].set_ylabel('Hz')
|
|
# nrs = [0, 1, 2, 3, 4,5]
|
|
# for nr in nrs:
|
|
# embed()
|
|
try:
|
|
axts[0].get_shared_y_axes().join(*axts[0::2])
|
|
except:
|
|
print('axt problem')
|
|
embed()
|
|
|
|
axts[1].get_shared_y_axes().join(*axts[1::2])
|
|
|
|
axts[0].get_shared_x_axes().join(*axts)
|
|
|
|
join_y(axps)
|
|
join_x(axps)
|
|
# join
|
|
individual_tag = 'data ' + cell + '_DF_chosen_' + str(
|
|
df_chosen) + mt_type
|
|
# save_visualization()
|
|
save_visualization(add + individual_tag, show)
|
|
print('plotted')
|
|
# plt_all_eods('local', m, cell, eods_all, mts, eods, show)
|
|
# plt_all_eods('global', m, cell, eods_all_g, mts, eods, show)
|
|
# embed()
|
|
# plt_modulation(dataset, eods, m, contrasts[m], dfs[m], spike_times, mts, show = True)
|
|
file.close()
|
|
|
|
|
|
|
|
|
|
|
|
def get_eod_fr_simple(b, names):
|
|
if 'sinewave-1_EOD Rate' in names:
|
|
eod_frs = b.data_arrays['sinewave-1_EOD Rate'][:]
|
|
eod_redo = False
|
|
else:
|
|
eod_frs = b.metadata['Recording']['Subject']['EOD Frequency']
|
|
# eod_frs = [eod_frs] * len(contrasts)
|
|
eod_redo = True
|
|
return eod_frs, eod_redo
|
|
|
|
|
|
def plt_response(ax, sampling_rate, spike_times, smooth_mean, spikes_mats, counter, stimulus, extract = True):
|
|
######################
|
|
# plt local eod
|
|
xlim = (0, 200)
|
|
# ax = np.concatenate(ax)
|
|
|
|
#sampling = 40000
|
|
|
|
ax[0, counter].set_ylabel('mV')
|
|
ax[0, counter].set_title('local')
|
|
|
|
time = np.arange(0, len(stimulus) / sampling_rate, 1 / sampling_rate) * 1000
|
|
if extract:
|
|
eods_am, eod_norm = extract_am(stimulus, time, norm=False)
|
|
ax[0, counter].plot(time, eod_norm)
|
|
ax[0, counter].plot(time, eods_am, color='red')
|
|
else:
|
|
ax[0, counter].plot(time, stimulus, color='red')
|
|
ax[0, counter].set_xlim(xlim)
|
|
|
|
# plt_modulation_here(fr, spikes_mats_mean, smooth_mean, dfs[m], cell, m,show, eods, eods_g, mts, spike_times)
|
|
color = 'grey'
|
|
#####################
|
|
# plt smpikes mat
|
|
|
|
#max_p = f[np.argmax(p[f < 400])]
|
|
|
|
ax[1, counter].eventplot(spike_times, color=color) # s, np.ones(len(spike_times)),
|
|
ax[1, counter].set_xlim(xlim)
|
|
ax[1, counter].set_ylabel('Run nr')
|
|
# ax[1,counter].set_title('maximal frequency' + str(max_p) + ' Hz ')
|
|
remove_xticks(ax[0, counter])
|
|
remove_xticks(ax[1, counter])
|
|
remove_xticks(ax[2, counter])
|
|
|
|
# ax[4].eventplot(spike_times) # s, np.ones(len(spike_times)),
|
|
|
|
# embed()
|
|
|
|
try:
|
|
ax[2, counter].plot(np.arange(0, len(smooth_mean) / 40000, 1 / 40000) * 1000, smooth_mean,
|
|
color=color)
|
|
except:
|
|
print('smooth problem')
|
|
embed()
|
|
# ax[2,counter].set_xlabel('Time [ms]')
|
|
ax[2, counter].set_xlim(xlim)
|
|
ax[2, counter].set_ylabel('FR [Hz]')
|
|
ps = []
|
|
for spikes_mat in spikes_mats:
|
|
p, f = ml.psd(spikes_mat - np.mean(spikes_mat), Fs=sampling_rate,
|
|
NFFT=2 ** 13,
|
|
noverlap=2 ** 13 / 2)
|
|
ps.append(p)
|
|
ax[3, counter].plot(f, p, color=color)
|
|
ax[3, counter].set_xlim(0, 1000)
|
|
remove_xticks(ax[3, counter])
|
|
ax[3, counter].plot(f, np.mean(ps, axis=0), color='black')
|
|
ax[4, counter].plot(f, np.mean(ps, axis=0), color='black')
|
|
# ax[2, counter].scatter(df, p[np.argmin(np.abs(f - df))], color='red')
|
|
# ax[2, counter].scatter(df * 2, p[np.argmin(np.abs(f - df * 2))], color='red')
|
|
# ax[2, counter].scatter(fr, p[np.argmin(np.abs(f - fr))], color='purple')
|
|
# ax[2, counter].scatter(fr * 2, p[np.argmin(np.abs(f - fr * 2))], color='purple')
|
|
ax[4, counter].set_ylabel('[Hz]')
|
|
|
|
ax[4, counter].set_xlim(0, 1000)
|
|
ax[4, counter].set_xlabel('F [Hz]')
|
|
if counter != 0:
|
|
remove_yticks(ax[1, counter])
|
|
remove_yticks(ax[0, counter])
|
|
remove_yticks(ax[2, counter])
|
|
remove_yticks(ax[3, counter])
|
|
remove_yticks(ax[4, counter])
|
|
ax[1, counter].set_ylabel('')
|
|
ax[0, counter].set_ylabel('')
|
|
ax[2, counter].set_ylabel('')
|
|
ax[3, counter].set_ylabel('')
|
|
ax[4, counter].set_ylabel('')
|
|
# plt.show()
|
|
# embed()
|
|
|
|
|
|
def plt_cocktailparty_lines(ax, frame_df, full_names = ['calc_model_amp_freqs-F1_750-975-25_F2_500-775-25_C2_0.1_C1Len_25_FirstC1_0.0001_LastC1_1.0_StimLen_2_nfft_32768_trialsnr_1_absolut_power_1temporal',]):
|
|
#frame = pd.read_csv(load_folder_name('calc_cocktailparty') + '/' + full_names[0] + '.csv')
|
|
frame_df_mean = frame_df # .groupby(['c1']).mean()#, 'c2'])
|
|
cs = {}
|
|
means = {}
|
|
scores_data = ['amp_f0_01_original', 'amp_f0_012_original', 'amp_f0_02_original',
|
|
'amp_f0_0_original',
|
|
'amp_B1_01_original', 'amp_B1_012_original', 'amp_B2_02_original',
|
|
'amp_B2_012_original', ]
|
|
colors = ['green', 'purple', 'orange', 'black', 'green', 'blue', 'orange', 'red']
|
|
linestyles = ['--', '--', '--', '--', '-', '-', '-', '-']
|
|
for sss, score in enumerate(scores_data):
|
|
|
|
ax[sss].plot(np.sort(frame_df_mean['c1']),
|
|
frame_df_mean[score].iloc[np.argsort(frame_df_mean['c1'])],
|
|
color=colors[sss], linestyle=linestyles[
|
|
sss]) # +str(np.round(np.mean(group_restricted[score_data]))), label = 'c_small='+str(c_small)+' c_big='+str(c_big)
|
|
if sss not in means.keys():
|
|
means[sss] = []
|
|
cs[sss] = []
|
|
ax[sss].set_ylabel(score.replace('_mean', '').replace('amp_', '') + '[Hz]', fontsize=8)
|
|
ax[sss].set_xlabel('Contrast small')
|
|
ax[sss].set_xlabel('Contrast small')
|
|
|
|
|
|
def get_dfs_and_contrasts_from_calccocktailparty(cell, frame_data):
|
|
frame_data_cell = frame_data[(frame_data['cell'] == cell)]
|
|
c1_unique = np.sort(frame_data_cell.c1.unique())[::-1]
|
|
c1_unique_big = c1_unique[c1_unique > 7]
|
|
c2_unique = np.sort(frame_data_cell.c2.unique())[::-1]
|
|
c2_unique_big = c2_unique[c2_unique > 7]
|
|
DF1s = np.unique(np.round(frame_data_cell.m1, 2))
|
|
DF2s = np.unique(np.round(frame_data_cell.m2, 2))
|
|
return DF1s, DF2s, frame_data_cell, c2_unique, c2_unique_big, c1_unique_big, c1_unique
|
|
|
|
|
|
def plt_stim_response_saturation(a, a_f1s, a_f2s, arrays_here, arrays_sp, arrays_st, arrays_time, axes, axps, axts,
|
|
c_nn, colors_array, colors_array_here, f, f_counter, freq1, freq2, grid_ll, names,
|
|
nfft, sampling, time, freqs = [50], colors_peaks = ['green','red'],xlim = [1, 1.12]):
|
|
grid_pt = gridspec.GridSpecFromSubplotSpec(3, 1,
|
|
hspace=0.3,
|
|
wspace=0.2,
|
|
subplot_spec=grid_ll) # hspace=0.4,wspace=0.2,len(chirps)
|
|
#############################
|
|
|
|
|
|
axe = plt.subplot(grid_pt[0])
|
|
axes.append(axe)
|
|
plt_stim_saturation(a, a_f1s, a_f2s, arrays_sp[a][0], arrays_st, axe, colors_array_here, f,
|
|
f_counter, names, time, xlim = xlim)
|
|
#############################
|
|
axt = plt.subplot(grid_pt[1])
|
|
axts.append(axt)
|
|
plt_vmem_saturation(a, a_f1s, a_f2s, arrays_sp, arrays_time, axt, colors_array_here, f,
|
|
f_counter, names, time, xlim = xlim)
|
|
#############################
|
|
axp = plt.subplot(grid_pt[2])
|
|
axps.append(axp)
|
|
pp, ff = ml.psd(arrays_here[a][0] - np.mean(arrays_here[a][0]), Fs=sampling, NFFT=nfft,
|
|
noverlap=nfft // 2)
|
|
pp = log_calc_psd(axp, colors_array_here[a], ff, 'log', pp, np.max(pp))
|
|
plt_psd_saturation(pp, ff, a, axp, colors_array_here, nfft, sampling, freqs=freqs, colors_peaks=colors_peaks)
|
|
return axp, axt
|
|
|
|
|
|
def plt_stim_saturation(a, a_f1s, a_f2s, arrays_sp, arrays_st, axe, colors_array_here, f, f_counter, names, time, xlim = [1, 1.12]):
|
|
if f != 0:
|
|
remove_yticks(axe)
|
|
if a != len(arrays_st) - 1:
|
|
remove_xticks(axe)
|
|
if f_counter == 0:
|
|
axe.set_ylabel(names[a])
|
|
try:
|
|
axe.plot(time, arrays_st[a], color=colors_array_here[a], linewidth = 0.5) # colors_contrasts[c_nn]
|
|
except:
|
|
print('axe something')
|
|
embed()
|
|
axe.set_xlim(xlim)
|
|
axe.show_spines('')
|
|
spikes_in_vmem(a, arrays_sp, arrays_st[a], axe, type_here='stim')
|
|
|
|
|
|
def plt_vmem_saturation(a, a_f1s, a_f2s, arrays_sp, arrays_time, axt, colors_array_here, f, f_counter, names, time, xlim = [1, 1.12]):
|
|
if f != 0:
|
|
remove_yticks(axt)
|
|
if a != len(arrays_time) - 1:
|
|
remove_xticks(axt)
|
|
#if f_counter == 0:
|
|
# axt.set_ylabel(names[a])
|
|
#if a == 0:
|
|
# axt.set_title(' c1=' + str(a_f1s[0]) + ' c2=' + str(a_f2s[0]))
|
|
try:
|
|
axt.plot(time[(time<xlim[1]) & (time>xlim[0])], arrays_time[a][(time<xlim[1]) & (time>xlim[0])], color=colors_array_here[a], clip_on = False) # colors_contrasts[c_nn]
|
|
except:
|
|
axt.plot(time[(time<xlim[1]) & (time>xlim[0])], arrays_time[a][0][(time<xlim[1]) & (time>xlim[0])], color=colors_array_here[a], clip_on = False) # colors_contrasts[c_nn]
|
|
axt.set_xlim(xlim)
|
|
axt.show_spines('')
|
|
spikes_in_vmem(a, arrays_sp[a][0], arrays_time[a], axt, type_here='vmem')
|
|
#embed()
|
|
|
|
def plt_psd_saturation(pp, ff, a, axp, colors_array_here, nfft, sampling, freqs=[50, 50], colors_peaks=['blue', 'red'],
|
|
xlim=(0, 300),markeredgecolor=[], labels=['DF1', 'DF2', 'DF1', 'DF2', 'DF1', 'DF2', 'DF1', 'DF2']):
|
|
|
|
|
|
axp.plot(ff[ff<xlim[1]], pp[ff<xlim[1]], color=colors_array_here[a])
|
|
#axp.plot(ff, pp, color=colors_array_here[a]) # colors_contrasts[c_nn]
|
|
axp.set_xlim(xlim)
|
|
|
|
plt_peaks_several(labels, freqs, [pp], 0,
|
|
axp, pp, colors_peaks, ff, markeredgecolors=markeredgecolor)
|
|
# axp
|
|
#if a != 2:
|
|
# remove_xticks(axp)
|
|
|
|
#embed()
|
|
|
|
def vary_contrasts(freqs=[(39.5, -210.5)], dev_name='', min_amps='', a_f2s=0.1, n=1, stimulus_length=0.5,
|
|
reshuffled='reshuffled', datapoints=1000, dev=0.0005, limit=10.2, a_f1s=[0.03], pdf=True,
|
|
printing=False, plus_q='minus', males=1 / 2, diagonal='diagonal', females=2 / 3, way='absolut',
|
|
runs=1, trials_nrs=[500], cells=[], nfft=int(2 ** 15), beat='', nfft_for_morph=4096 * 4,
|
|
gain=1,
|
|
sampling_factors=[''], cells_here = ["2013-01-08-aa-invivo-1"],
|
|
fish_receiver='Alepto', end_f1=4645,
|
|
fish_jammer='Alepto', reshuffle='reshuffled',
|
|
redo_level='celllevel', step=10, zeros='zeros', corr='ratecorrrisidual',
|
|
us_name='',show = True, start_f1=20, plot=False):
|
|
trials_nrs = [1]
|
|
runs = 1
|
|
n = 1
|
|
|
|
dev = 0.0005
|
|
|
|
#############################################
|
|
# plot a single ROC Curve for the model!
|
|
# das aus dem Lissabon talk und das was wir für Jörg verwenden werden
|
|
# also wir wollen hier viele Kontraste und einige Frequenzen
|
|
# das will ich noch für verschiedene Frequenzen und Kontraste
|
|
|
|
|
|
default_settings() # ts=13, ls=13, fs=13, lw = 0.7
|
|
|
|
|
|
reshuffled = 'reshuffled' # ,
|
|
|
|
|
|
# standard combination with intruder small
|
|
a_f2s = [0.1]
|
|
a_f1s = [0.03] # np.logspace(np.log10(0.0001), np.log10(1), 25)
|
|
|
|
min_amps = '_minamps_'
|
|
females = np.arange(500, 800, 25)
|
|
males = np.arange(750, 1000, 25)
|
|
dev_name = ['05']
|
|
|
|
model_cells = pd.read_csv(load_folder_name('calc_model_core') + "/models_big_fit_d_right.csv")
|
|
# if len(cells) < 1:
|
|
if len(cells_here)<1:
|
|
cells_here = np.array(model_cells.cell)
|
|
|
|
a_fr = 1
|
|
a = 0
|
|
trials_nrs = [1]
|
|
|
|
datapoints = 1000
|
|
stimulus_length = 2
|
|
results_diff = pd.DataFrame()
|
|
position_diff = 0
|
|
plot_style()
|
|
default_settings(column=2, length=8.5)
|
|
for trials_nr in trials_nrs: # +[trials_nrs[-1]]
|
|
|
|
# sachen die ich variieren will
|
|
###########################################
|
|
single_wave = '_SeveralWave_' # , '_SingleWave_']
|
|
|
|
auci_wo = []
|
|
auci_w = []
|
|
|
|
nfft = 32768
|
|
|
|
for cell_here in cells_here:
|
|
# embed()
|
|
full_names = [
|
|
'calc_model_amp_freqs-F1_750-975-25_F2_500-775-25_C2_0.1_C1Len_25_FirstC1_0.0001_LastC1_1.0_StimLen_' + str(
|
|
stimulus_length) + '_nfft_' + str(nfft) + '_trialsnr_1_absolut_power_1_minamps__dev_05temporal']
|
|
|
|
# 'calc_model_amp_freqs-F1_750-975-25_F2_500-775-25_C2Len_25_FirstC2_0.0001_LastC2_1.0_C1_0.1_StimLen_2_nfft_32768_trialsnr_1_absolut_power_1_minamps__dev_05temporal']
|
|
c_grouped = ['c1'] # , 'c2']
|
|
# adds = [-150, -50, -10, 10, 50, 150]
|
|
# fig, ax = plt.subplots(4, len(adds), constrained_layout=True, figsize=(12, 5.5))
|
|
# for ff, full_name in enumerate(full_names):
|
|
frame = pd.read_csv(load_folder_name('calc_cocktailparty') + '/' + full_names[0] + '.csv')
|
|
#embed()
|
|
frame_cell_orig = frame[(frame.cell == cell_here)]
|
|
df_desired = 40
|
|
if len(frame_cell_orig) > 0:
|
|
try:
|
|
males = [frame_cell_orig.iloc[
|
|
np.argmin(np.abs(frame_cell_orig.df1 - df_desired))].f1] # DF=39.5[775, 825]
|
|
except:
|
|
print('min thing')
|
|
embed()
|
|
# (135.5, 625.0), (110.5, 650.0), (85.5, 675.0),(60.5, 700.0), (35.5, 725.0), (10.5, 750.0),(151.07000000000005, 675.0)
|
|
# frame_cell_orig[['df2', 'f2']]
|
|
get_frame_cell_params(c_grouped, cell_here, df_desired, frame, frame_cell_orig)
|
|
|
|
c_nrs = [0.0002, 0.05, 0.5]
|
|
|
|
grid0 = gridspec.GridSpec(1, 1, bottom=0.05, top=0.92, left=0.09,
|
|
right=0.95,
|
|
wspace=0.04) #
|
|
grid00 = gridspec.GridSpecFromSubplotSpec(2, 1,
|
|
wspace=0.04, hspace=0.27, height_ratios = [1,2.5], subplot_spec=grid0[0]) #
|
|
grid_u = gridspec.GridSpecFromSubplotSpec(1, len(freqs),
|
|
hspace=0.7,
|
|
wspace=0.1,
|
|
subplot_spec=grid00[0]) # hspace=0.4,wspace=0.2,len(chirps)
|
|
grid_l = gridspec.GridSpecFromSubplotSpec(1, len(freqs),
|
|
hspace=0.7,
|
|
wspace=0.1,
|
|
subplot_spec=grid00[1]) # hspace=0.4,wspace=0.2,len(chirps)
|
|
|
|
#################################################################
|
|
|
|
# calc_model_amp_freqs-F1_750-975-25_F2_500-775-25_C2_0.1_C1Len_20_FirstC1_0.0001_LastC1_1.0_StimLen_25_nfft_32768_trialsnr_1_absolut_power_1temporal.csv
|
|
# devs_extra = ['stim','stim_rec','stim_am','original','05']#['original','05']
|
|
|
|
# da implementiere ich das jetzt für eine Zelle
|
|
# wo wir den einezlnen Punkt und Kontraste variieren
|
|
full_names = [
|
|
'calc_model_amp_freqs-F1_750-975-25_F2_500-775-25_C2_0.1_C1Len_25_FirstC1_0.0001_LastC1_1.0_StimLen_2_nfft_32768_trialsnr_1_absolut_power_1_minamps__dev_05temporal', ]
|
|
|
|
c_here = 'c1'
|
|
|
|
|
|
f_counter = 0
|
|
ax_upper = []
|
|
|
|
frame_cell_orig, df1s, df2s, f1s, f2s = find_dfs(frame_cell_orig)
|
|
|
|
eodf = frame_cell_orig.f0.unique()[0]
|
|
|
|
f = -1
|
|
axts_all = []
|
|
axps_all = []
|
|
ax_us = []
|
|
for freq1, freq2 in freqs:
|
|
f += 1
|
|
grid_ll = gridspec.GridSpecFromSubplotSpec(3, len(c_nrs),
|
|
hspace=0.2,
|
|
wspace=0.2,
|
|
subplot_spec=grid_l[
|
|
f]) # hspace=0.4,wspace=0.2,len(chirps)
|
|
|
|
|
|
frame_cell = frame_cell_orig[(frame_cell_orig.df1 == freq1) & (frame_cell_orig.df2 == freq2)]
|
|
if len(frame_cell) < 1:
|
|
freq1 = frame_cell_orig.iloc[(np.argmin(np.abs(frame_cell_orig.df1 - freq1)))].df1
|
|
freq2 = frame_cell_orig.iloc[(np.argmin(np.abs(frame_cell_orig.df2 - freq2)))].df2
|
|
# frame_cell = frame_cell_orig[ == freq1 & ]
|
|
frame_cell = frame_cell_orig[(frame_cell_orig.df1 == freq1) & (frame_cell_orig.df2 == freq2)]
|
|
|
|
scores = ['amp_B1_01_mean', 'amp_B1_012_mean', 'amp_B2_02_mean', 'amp_B2_012_mean']
|
|
scores = ['amp_B1_01_mean', 'amp_B1_012_mean', 'amp_B2_02_mean',
|
|
'amp_B2_012_mean'] # 'amp_B1+B2_012_mean',
|
|
colors = ['green', 'blue', 'orange', 'red', 'grey']
|
|
colors_array = ['grey', 'green', 'orange', 'purple']
|
|
linestyles = ['-', '--', '-', '--', '--']
|
|
alpha = [1,1,1,1,1]
|
|
labels = scores
|
|
|
|
print(cell_here + ' F1' + str(freq1) + ' F2 ' + str(freq2))
|
|
|
|
sampling = 20000
|
|
|
|
ax_u1 = plt.subplot(grid_u[f, 0])
|
|
ax_us = plt_single_trace(ax_us, ax_u1, frame, frame_cell_orig, freq1, freq2,
|
|
scores=scores, colors=colors,
|
|
linestyles=linestyles, alpha=alpha,
|
|
sum=False, B_replace='F')
|
|
|
|
if f != 0:
|
|
# remove_yticks(ax_u0)
|
|
# remove_yticks(ax_u1)
|
|
print('hi')
|
|
else:
|
|
ax_u1.set_ylabel('Hz')
|
|
# embed()
|
|
|
|
plt.suptitle(cell_here + ' DF1=' + str(freq1) + ' DF2=' + str(freq2))
|
|
colors_contrasts = ['purple', 'black', 'grey']
|
|
axts = []
|
|
axps = []
|
|
|
|
#embed()
|
|
c_nrs = c_dist_recalc_func(frame_cell, c_nrs=c_nrs, cell=cell_here)
|
|
|
|
for c_nn, c_nr in enumerate(c_nrs):
|
|
ax_u1.scatter(c_nrs, np.zeros(len(c_nrs)), color='black', marker='^', clip_on=False)
|
|
|
|
v_mems, arrays_spikes, arrays_stim, results_diff, position_diff, auci_wo, auci_w, arrays, names ,p_arrays, ff = calc_roc_amp_core_cocktail(
|
|
[freq1 + eodf], [freq2 + eodf], datapoints, auci_wo, auci_w, results_diff, a_f2s,
|
|
fish_jammer, a,
|
|
trials_nr, nfft, '', us_name, gain, runs, a_fr, nfft_for_morph, beat, printing,
|
|
stimulus_length,
|
|
model_cells, position_diff, dev, cell_here, dev_name=dev_name, a_f1s=[c_nr], n=n,
|
|
reshuffled=reshuffled, min_amps=min_amps)
|
|
|
|
time = np.arange(0, len(arrays[a][0]) / sampling, 1 / sampling)
|
|
arrays_time = arrays[1::]#v_mems[1::]
|
|
arrays_here = arrays[1::]
|
|
colors_array_here = colors_array[1::]
|
|
arrays_sp = arrays_spikes[1::]
|
|
#embed()
|
|
for a in range(len(arrays_here)):
|
|
grid_pt = gridspec.GridSpecFromSubplotSpec(2, 1,
|
|
hspace=0.3,
|
|
wspace=0.2,
|
|
subplot_spec=grid_ll[
|
|
a, c_nn]) # hspace=0.4,wspace=0.2,len(chirps)
|
|
|
|
#############################
|
|
axt = plt.subplot(grid_pt[0])
|
|
|
|
axts.append(axt)
|
|
if f != 0:
|
|
remove_yticks(axt)
|
|
if a != len(arrays_time) - 1:
|
|
remove_xticks(axt)
|
|
if f_counter == 0:
|
|
axt.set_ylabel(names[a])
|
|
|
|
if a == 0:
|
|
axt.set_title(' c1=' + str(a_f1s[0]) + ' c2=' + str(a_f2s[0]))
|
|
axt.plot(time, arrays_time[a][0], color=colors_array_here[a]) # colors_contrasts[c_nn]
|
|
axt.set_xlim(1, 1.12)
|
|
#spikes_in_vmem(a, arrays_sp[a][0], arrays_time[a][0], axt, type_here = 'vmem')
|
|
|
|
#############################
|
|
axp = plt.subplot(grid_pt[1])
|
|
axps.append(axp)
|
|
pp, ff = ml.psd(arrays_here[a][0] - np.mean(arrays_here[a][0]), Fs=sampling, NFFT=nfft,
|
|
noverlap=nfft // 2)
|
|
axp.plot(ff, pp, color=colors_array_here[a]) # colors_contrasts[c_nn]
|
|
|
|
axp.set_xlim(0, 300)
|
|
if a != 2:
|
|
colors_peaks = [colors_array[1], colors_array[2]]
|
|
else:
|
|
colors_peaks = ['blue', 'red']
|
|
plt_peaks_several(['DF1', 'DF2'], [freq1, np.abs(freq2)], [pp], 0,
|
|
axp, pp, colors_peaks, ff)
|
|
|
|
# axp
|
|
if a != 2:
|
|
remove_xticks(axp)
|
|
if c_nn != 0:
|
|
remove_yticks(axt)
|
|
remove_yticks(axp)
|
|
# plt.show()
|
|
axt.set_xlabel('Time [s]')
|
|
axp.set_xlabel('Frequency [Hz]')
|
|
f_counter += 1
|
|
axts_all.extend(axts)
|
|
axps_all.extend(axps)
|
|
ax_us[0].legend(loc=(-0.07, 1), ncol=6)
|
|
|
|
axts_all[0].get_shared_y_axes().join(*axts_all)
|
|
axts_all[0].get_shared_x_axes().join(*axts_all)
|
|
axps_all[0].get_shared_y_axes().join(*axps_all)
|
|
axps_all[0].get_shared_x_axes().join(*axps_all)
|
|
join_x(ax_us)
|
|
join_y(ax_us)
|
|
|
|
save_visualization(cell_here, show)
|
|
|
|
|
|
def spikes_in_vmem(a, arrays_sp, arrays_time, axt, type_here = 'vmem'):
|
|
if type_here == 'vmem':
|
|
axt.eventplot(arrays_sp, lineoffsets=np.max(arrays_time))# * np.ones(len(arrays_sp)))
|
|
else:
|
|
try:
|
|
axt.eventplot(arrays_sp, lineoffsets=np.mean(arrays_time))# * np.ones(len(arrays_sp)))
|
|
except:
|
|
print('axt something')
|
|
embed()
|
|
|
|
def get_frame_cell_params(c_grouped, cell_here, df_desired, frame, frame_cell_orig):
|
|
new_f2_tuple = frame_cell_orig[['df2', 'f2']].apply(tuple, 1).unique()
|
|
dfs = [tup[0] for tup in new_f2_tuple]
|
|
sorted = np.argsort(np.abs(dfs))
|
|
new_f2_tuple = new_f2_tuple[sorted]
|
|
dfs = np.array(dfs)[sorted]
|
|
dfs_new = dfs[(dfs > 0) & (dfs < df_desired + 100)]
|
|
f2s = [tup[1] for tup in new_f2_tuple]
|
|
f2s = np.sort(f2s)
|
|
f2s = f2s[2::int(len(f2s) / 4)] # np.array(f2s)[(dfs>0)& (dfs<df_desired+300)]
|
|
# gridspec
|
|
females = f2s
|
|
# fig, ax = plt.subplots(6, len(males) * len(females), figsize=(12, 5.5))
|
|
# fig = plt.figure(figsize=(12, 5.5))
|
|
# frame_cell = frame[frame.cell == cell_here]
|
|
frame_cell = frame[(frame.cell == cell_here)] # & (frame[c_here] == c_h)]
|
|
# frame_cell = frame_cell[~ (frame_cell.f1 == frame_cell.f2)]
|
|
frame_cell, df1s, df2s, f1s, f2s = find_dfs(frame_cell)
|
|
diffs = find_deltas(frame_cell, c_grouped[0])
|
|
frame_cell = find_diffs(c_grouped[0], frame_cell, diffs)
|
|
|
|
|
|
def find_mt_type(mts):
|
|
if 'chirp' in mts.name:
|
|
mt_type = 'chirp'
|
|
elif 'SAM' in mts.name:
|
|
mt_type = 'SAM'
|
|
elif 'sine' in mts.name:
|
|
mt_type = 'sine'
|
|
elif find_gwn(mts):
|
|
mt_type = 'stim'
|
|
elif 'three' in mts.name:
|
|
mt_type = 'three'
|
|
return mt_type
|
|
|
|
|
|
def choice_specific_indices(contrasts, negativ = 'negativ', units = 2 * 7, cut_val = 2):
|
|
next_step = int(np.round(len(contrasts) / units))
|
|
if next_step == 0:
|
|
next_step = 1
|
|
|
|
if negativ == 'negativ':
|
|
indeces_show = np.argsort(contrasts)[0:int(len(contrasts) / cut_val)][0::next_step][::-1]
|
|
contrasts_show = np.sort(contrasts)[0:int(len(contrasts) / cut_val)][0::next_step][::-1]
|
|
elif negativ == 'positiv':
|
|
try:
|
|
indeces_show = np.argsort(contrasts)[::-1][0:int(len(contrasts) / cut_val)][
|
|
0::next_step][::-1]
|
|
except:
|
|
print('positiv something')
|
|
embed()
|
|
contrasts_show = np.sort(contrasts)[::-1][0:int(len(contrasts) / cut_val)][
|
|
0::next_step][::-1]
|
|
elif negativ == 'highest':
|
|
indeces_show = np.argsort(contrasts)[::-1][0:int(units / cut_val)][::-1]
|
|
contrasts_show = np.sort(contrasts)[::-1][0:int(units / cut_val)][::-1]
|
|
indexes = [] # [::-1][::-1]
|
|
return contrasts_show, indeces_show
|
|
|
|
|
|
def spike_times_cocktailparty(b, delay, mt, mt_nr, load_eod_array = 'LocalEOD-1'):
|
|
timepoint = time.time()
|
|
try:
|
|
eod_mt, spikes_mt = load_eod_for_three(b, delay, mt, mt_nr, load_eod_array=load_eod_array)
|
|
except:
|
|
print('problem')
|
|
embed()
|
|
time_eod = np.arange(0, len(eod_mt) / 40000, 1 / 40000) - delay
|
|
time_laod_eods = time.time() - timepoint
|
|
return eod_mt, spikes_mt, time_eod, time_laod_eods, timepoint
|
|
|
|
|
|
def load_eod_for_three(b, delay, mt, mt_nr, load_eod_array='LocalEOD-1'):
|
|
eod_mt, spikes_mt, sampling = link_arrays(b, first=mt.positions[:][mt_nr] - delay,
|
|
second=mt.extents[:][mt_nr] + delay,
|
|
minus_spikes=mt.positions[:][mt_nr], load_eod_array=load_eod_array)
|
|
return eod_mt, spikes_mt
|
|
|
|
|
|
def diagonal_points():#
|
|
global combis
|
|
combis = {'off1': (0.5,0.67),
|
|
'test_data_cell_2022-01-05-aa-invivo-1': (0.27, 1.27,),
|
|
'B1-B2_diagonal': (0.27, 1.27,),
|
|
'diagonal1': (1 / 3, 2 / 3),
|
|
'B1+B2_diagonal': (1 / 4, 3 / 4),
|
|
'B1+B2_diagonal2': (0.27, 0.73),
|
|
'B1+B2_diagonal3': (0.3, 0.7),
|
|
'B1+B2_diagonal31': (0.31, 0.69),
|
|
'B1+B2_diagonal32': (0.32, 0.68),
|
|
'B1+B2_diagonal33': (0.33, 0.67),
|
|
'B1+B2_diagonal_plus_0.2c1': ((1 / 3)+0.2, 2 / 3),
|
|
'Half_Fr_c1': (0.5, 0.3),
|
|
'Half_Fr_c2': (0.3, 0.5),
|
|
'diagonal2': (2 / 3, 1 / 3,),
|
|
'diagonal3': (0.1, 0.9),
|
|
'vertical1': (1, 0.7),
|
|
'vertical4': (0.8, 0.6),
|
|
'vertical5': (0.8, 0.55),
|
|
'vertical2': (1, 1.05),
|
|
'vertical3': (1 + (1.167 - 1.1644) / 0.1644, 1 + (1.18 - 1.1644) / 0.1644),
|
|
'horizontal': (0.8, 1),
|
|
'inside': (1 / 2, 2 / 3),
|
|
'outside': (1.2, 2 / 3)
|
|
}
|
|
return combis
|
|
|
|
|
|
def plt_ROC_model_w_female_square_nonlin(frame_names=[], figsize=[11, 5], female='wo_female', reshuffled='reshuffled',
|
|
datapoints=1000, dev=0.0005, a_f1s=[0.03], pdf=True, printing=False,
|
|
plus_q='minus', freq1_ratio=1 / 2, diagonal='diagonal', fs=17,
|
|
freq2_ratio=2 / 3, way='absolut', stimulus_length=0.5, runs=3, trials_nr=500,
|
|
cells=[], show=False, nfft=int(2 ** 15), beat='', nfft_for_morph=4096 * 4,
|
|
gain=1, talk = True, fish_jammer='Alepto', us_name=''):
|
|
# plot_style()
|
|
#default_settings()
|
|
if talk:
|
|
plt.rcParams['lines.linewidth'] = 1
|
|
try:
|
|
model_cells = pd.read_csv(load_folder_name('calc_model_core') + "/models_big_fit_d_right.csv")
|
|
except:
|
|
embed()
|
|
print('still some model something')
|
|
|
|
if len(cells) < 1:
|
|
cells = len(model_cells)
|
|
for cell_here in cells:
|
|
# sachen die ich variieren will
|
|
###########################################
|
|
single_waves = ['_SeveralWave_'] # , '_SingleWave_']
|
|
####### VARY HERE
|
|
for single_wave in single_waves:
|
|
if single_wave == '_SingleWave_':
|
|
a_f2s = [0] # , 0,0.2
|
|
else:
|
|
a_f2s = [0.1]
|
|
for a_f2 in a_f2s:
|
|
# ,0.05,0.01, 0.005, 0.1, 0.2] # 0.001,
|
|
for a_f1 in a_f1s:
|
|
a_frs = [1]
|
|
titles_amp = ['base eodf'] # ,'baseline to Zero',]
|
|
for a, a_fr in enumerate(a_frs):
|
|
|
|
model_params = model_cells[model_cells['cell'] == cell_here].iloc[0]
|
|
# model_params = model_cells.iloc[cell_nr]
|
|
|
|
# embed()
|
|
eod_fr = model_params['EODf'] # .iloc[0]
|
|
|
|
offset = model_params.pop('v_offset')
|
|
|
|
cell = model_params.pop('cell')
|
|
print(cell)
|
|
SAM, adapt_offset, cell_recording, constant_reduction, damping, damping_type, dent_tau_change, exponential, f1, f2, fish_emitter, fish_receiver, fish_morph_harmonics_var, lower_tol, mimick, n, phase_right, phaseshift_fr, sampling_factor, upper_tol, zeros = default_model0()
|
|
# in case you want a different sampling here we can adujust
|
|
time_array, sampling, deltat = deltat_choice(model_params, sampling_factor, eod_fr,
|
|
stimulus_length)
|
|
|
|
# generate the eod_fish_r in the four mimick variants (copy, thunderfish, mimick, just sinus)
|
|
eod_fish_r, deltat, eod_fr, time_array = eod_fish_r_generation(time_array, eod_fr, a_fr,
|
|
stimulus_length, phaseshift_fr,
|
|
cell_recording, zeros, mimick,
|
|
sampling, fish_receiver, deltat,
|
|
nfft, nfft_for_morph,
|
|
fish_morph_harmonics_var=fish_morph_harmonics_var,
|
|
beat=beat)
|
|
|
|
sampling = 1 / deltat
|
|
multiple = 0
|
|
slope = 0
|
|
add = 0
|
|
plus = 0
|
|
sig_val = (7, 1)
|
|
variant = 'sinz'
|
|
if exponential == '':
|
|
v_exp = 1
|
|
exp_tau = 0.001
|
|
# prepare for adapting offset due to baseline modification
|
|
|
|
baseline_with_wave_damping, baseline_without_wave = prepare_baseline_array(time_array, eod_fr,
|
|
nfft_for_morph,
|
|
phaseshift_fr,
|
|
mimick, zeros,
|
|
cell_recording,
|
|
sampling,
|
|
stimulus_length,
|
|
fish_receiver,
|
|
deltat, nfft,
|
|
damping_type,
|
|
damping, us_name,
|
|
gain, beat=beat,
|
|
fish_morph_harmonics_var=fish_morph_harmonics_var)
|
|
|
|
spikes_base = [[]] * trials_nr
|
|
colors_w, colors_wo,color0, color01, color02, color012 = colors_cocktailparty_all()
|
|
#color0 = 'green' # 'orange'
|
|
#color01 = 'blue'
|
|
#color02 = 'red'
|
|
#color012 = 'orange'
|
|
color01_2 = 'purple'
|
|
|
|
fig = plt.figure(figsize=figsize)
|
|
grid = gridspec.GridSpec(1, 2, wspace=0.35, width_ratios=[0.8, 1.6, ], hspace=0.5,
|
|
left=0.08, top=0.95, bottom=0.12,
|
|
right=0.96) # , width_ratios = [1,1,1,0.5,1] height_ratios = [1,6]bottom=0.25, top=0.8,
|
|
|
|
grid0 = gridspec.GridSpecFromSubplotSpec(5, 2, wspace=0.18, hspace=0.12,
|
|
subplot_spec=grid[1],
|
|
height_ratios=[1, 0.6, 1, 1, 1.25]) # ,0.4,1.2
|
|
|
|
# grid1 = gridspec.GridSpecFromSubplotSpec(1, 1,
|
|
# subplot_spec=grid[1]) # wspace=0.5, hspace=0.55,
|
|
for run in range(runs):
|
|
print(run)
|
|
t1 = time.time()
|
|
for t in range(trials_nr):
|
|
# get the baseline properties here
|
|
# baseline_after,spikes_base,rate_adapted, rate_baseline_before, rate_baseline_after, np.array(spike_times), stimulus_power, v_dent_output[int(0.05 / deltat):-1], offset, v_mem_output
|
|
stimulus = eod_fish_r
|
|
stimulus_base = eod_fish_r
|
|
if 'Zero' in titles_amp[a]:
|
|
power_here = 'sinz' + '_' + zeros
|
|
else:
|
|
power_here = 'sinz'
|
|
|
|
cvs, adapt_output, baseline_after_b, _, rate_adapted_b, rate_baseline_before_b, rate_baseline_after_b, \
|
|
spikes_base[t], _, _, offset_new, _,noise_final = simulate(cell, offset, stimulus, f1,
|
|
n, power_here,
|
|
adapt_offset=adapt_offset,
|
|
add=add, alpha=alpha,
|
|
reshuffle=reshuffled,
|
|
lower_tol=lower_tol,
|
|
upper_tol=upper_tol,
|
|
v_exp=v_exp, exp_tau=exp_tau,
|
|
dent_tau_change=dent_tau_change,
|
|
alter_taus=constant_reduction,
|
|
exponential=exponential,
|
|
exponential_mult=1,
|
|
exponential_plus=plus,
|
|
exponential_slope=slope,
|
|
sig_val=sig_val, j=f2,
|
|
deltat=deltat, t=t,
|
|
**model_params)
|
|
|
|
if t == 0:
|
|
# here we record the changes in the offset due to the adaptation
|
|
change_offset = offset - offset_new
|
|
# and we subsequently reset the offset to be the new adapted for all subsequent trials
|
|
offset = offset_new * 1
|
|
|
|
if printing:
|
|
print('Baseline time' + str(time.time() - t1))
|
|
base_cut, mat_base = find_base_fr(spikes_base, deltat, stimulus_length, time_array, dev=dev)
|
|
|
|
fr = np.mean(base_cut)
|
|
if 'diagonal' in diagonal:
|
|
|
|
two_third_fr = fr * freq2_ratio
|
|
freq1_ratio = (1 - freq2_ratio)
|
|
third_fr = fr * freq1_ratio
|
|
else:
|
|
two_third_fr = fr * freq2_ratio
|
|
third_fr = fr * freq1_ratio
|
|
|
|
if plus_q == 'minus':
|
|
two_third_fr = -two_third_fr
|
|
third_fr = -third_fr
|
|
freqs2 = [eod_fr + two_third_fr] # , eod_fr - third_fr, two_third_fr,
|
|
|
|
freqs1 = [
|
|
eod_fr + third_fr] # , eod_fr - two_third_fr, third_fr,two_third_fr,third_eodf, eod_fr - third_eodf,two_third_eodf, eod_fr - two_third_eodf, ]
|
|
|
|
sampling_rate = 1 / deltat
|
|
base_cut, mat_base, smoothed0, mat0 = find_base_fr2(sampling_rate, spikes_base, deltat,
|
|
stimulus_length, time_array, dev=dev)
|
|
fr = np.mean(base_cut)
|
|
frate, isis_diff = ISI_frequency(time_array, spikes_base[0], fill=0.0)
|
|
isi = np.diff(spikes_base[0])
|
|
cv0 = np.std(isi) / np.mean(isi)
|
|
cv1 = np.std(frate) / np.mean(frate)
|
|
|
|
for ff, freq1 in enumerate(freqs1):
|
|
freq1 = [freq1]
|
|
freq2 = [freqs2[ff]]
|
|
t1 = time.time()
|
|
phaseshift_f1, phaseshift_f2 = get_phaseshifts(a_f1, a_f2, phase_right, phaseshift_fr)
|
|
eod_fish1, time_fish_e = eod_fish_e_generation(time_array, a_f1, freq1, f1,
|
|
nfft_for_morph, phaseshift_f1,
|
|
cell_recording, fish_morph_harmonics_var,
|
|
zeros, mimick, fish_emitter, sampling,
|
|
stimulus_length, thistype='emitter')
|
|
eod_fish2, time_fish_j = eod_fish_e_generation(time_array, a_f2, freq2, f2,
|
|
nfft_for_morph, phaseshift_f2,
|
|
cell_recording, fish_morph_harmonics_var,
|
|
zeros, mimick, fish_jammer, sampling,
|
|
stimulus_length, thistype='jammer')
|
|
|
|
eod_stimulus = eod_fish1 + eod_fish2
|
|
|
|
v_mems, offset_new, mat01, mat02, mat012, smoothed01, smoothed02, smoothed012, stimulus_01, stimulus_02, stimulus_012, mat05_01, spikes_01, mat05_02, spikes_02, mat05_012, spikes_012 = get_arrays_for_three(
|
|
cell, a_f2, a_f1,
|
|
SAM, eod_stimulus, eod_fish_r, freq2, eod_fish1, eod_fish_r,
|
|
eod_fish2, stimulus_length,
|
|
baseline_with_wave_damping, baseline_without_wave,
|
|
offset, model_params, n, variant, t, adapt_offset,
|
|
upper_tol, lower_tol, dent_tau_change, constant_reduction,
|
|
exponential, plus, slope, add,
|
|
deltat, alpha, sig_val, v_exp, exp_tau, f2,
|
|
trials_nr, time_array,
|
|
f1, freq1, damping_type,
|
|
gain, eod_fr, damping, us_name, dev=dev, reshuffle=reshuffled)
|
|
if printing:
|
|
print('Generation process' + str(time.time() - t1))
|
|
|
|
##################################
|
|
# power spectrum
|
|
|
|
array0 = [mat_base]
|
|
|
|
array01 = [mat05_01]
|
|
|
|
array02 = [mat05_02]
|
|
array012 = [mat05_012]
|
|
t_off = 10
|
|
|
|
position_diff = 0
|
|
results_diff = pd.DataFrame()
|
|
results_diff['f1'] = freq1
|
|
results_diff['f2'] = freq2
|
|
results_diff['f0'] = eod_fr
|
|
trials, results_diff, tp_012_all, tp_01_all, tp_02_all, fp_all, roc_01, roc_0, roc_02, roc_012, threshhold = calc_auci_pd(
|
|
results_diff, position_diff, array012, array01, array02, array0, t_off=t_off,
|
|
way=way, printing=True, datapoints=datapoints, f0='f0', sampling=sampling)
|
|
|
|
if run == 0:
|
|
color = 'black'
|
|
lw = 1
|
|
else:
|
|
color = 'grey'
|
|
lw = 0.5
|
|
|
|
# ax_square = plt.subplot(grid[0])
|
|
grid1 = gridspec.GridSpecFromSubplotSpec(2, 1, hspace=0.4,
|
|
subplot_spec=grid[0])
|
|
ax_ROC = plt.subplot(grid1[0])
|
|
ax_nonlin = plt.subplot(grid1[1])
|
|
colors_wo = ['orange', 'orange', 'orange']
|
|
colors_w = ['green', 'green', 'green']
|
|
#xlim = [0, 70]
|
|
xlim = core_xlim_dist_roc()
|
|
plt_ROC_nonlin(xlim, frame_names, ax_ROC, ax_nonlin, cells, colors_wo, colors_w)
|
|
ax_nonlin.set_xlabel(core_distance_label())
|
|
ax_ROC.set_xlabel(core_distance_label())
|
|
# square_part(ax_square)
|
|
if run == 0:
|
|
plt_traces_to_roc(freq2_ratio, freq1_ratio, t_off, spikes_02, spikes_01, spikes_012,
|
|
spikes_base, mat_base, mat05_01,
|
|
mat05_012, mat05_02, color02, color012, a_f2, trials, sampling,
|
|
a_f1, fr, female, color01, color0, grid0, color, run, eod_fr,
|
|
freq2,
|
|
freq1, sampling_rate, stimulus_012, stimulus_02, stimulus_01,
|
|
stimulus_base, time_array - time_array[0], vlin = False, carrier=True)
|
|
|
|
axs = plt_power_spectrum(grid0, color01, color02, color01_2, color012, color0, fr,
|
|
results_diff, female, nfft, smoothed012, smoothed01,
|
|
smoothed02, smoothed0, sampling_rate,mult_val = 0.15, add_to=195, wierd_charing = False)
|
|
|
|
handles, labels = plt.gca().get_legend_handles_labels()
|
|
|
|
#embed()
|
|
first_legend = reorder_legend_handles(axs[1], order = [0, 2, 3, 1,4], ncol = 3, rev = False, loc = (-1.2, 1.05),fs = fs,handlelength = 0.5)
|
|
#axs[1].add_artist(first_legend)
|
|
#reorder_legend_handles(axs[1], order=[1], ncol=4,
|
|
#rev = False, loc = (-1.3, 1.1), fs = fs, handlelength = 0.5)
|
|
|
|
#axs[1].legend(loc=(-1.3, 1.15), fontsize=fs) # ncol=4,
|
|
|
|
#axs[1].legend(handles[-1], labels[-1], loc=(-1.3, 1.1), ncol = 4, fontsize=fs)#ncol=4,
|
|
|
|
remove_yticks(axs[1]) # ax[6 + 1]
|
|
join_y(axs)
|
|
#embed()
|
|
ax = fig.axes
|
|
ax = ax[1::]
|
|
# embed()
|
|
# ax[0 + 1].set_ylabel('Amplitude')
|
|
# ax[2 + 1].set_ylabel('Nr')
|
|
ax[4 + 1].set_ylabel('Firing Rate [Hz]')
|
|
# ax[6+1].set_xlabel('Time [ms]')
|
|
|
|
ax[4 + 1].set_xlabel('Time [ms]')
|
|
ax[5 + 1].set_xlabel('Time [ms]')
|
|
# ax[8+2].set_xlabel('Time [ms]')
|
|
# ax[9+2].set_xlabel('Frequency [Hz]')
|
|
|
|
ax[6 + 1].set_xlabel('Frequency [Hz]')
|
|
# embed()
|
|
ax[7 + 1].set_xlabel('Frequency [Hz]')
|
|
# embed()
|
|
# ax[6 + 2].set_xlabel('Frequency [Hz]')
|
|
# ax[11 + 2].set_xlabel('Frequency [Hz]')
|
|
ax[6 + 1].set_ylabel('Power [Hz]')
|
|
#remove_yticks(ax[6 + 1]) # ax[6 + 1]
|
|
for aa, ax_here in enumerate(ax[2:5]):
|
|
ax_here.set_xticks([])
|
|
for aa, ax_here in enumerate(ax[1::]):
|
|
if aa not in np.arange(0, 2, 2):
|
|
# ax_here.set_yticks([])
|
|
hi = True
|
|
else:
|
|
ax_here.get_shared_y_axes().join(*ax[1 + aa:1 + aa + 2])
|
|
|
|
# plt.subplots_adjust(top=0.75, left=0.09, right=0.95, hspace=0.5, bottom=0.12, wspace=0.25)
|
|
individual_tag = '_way_' + str(way) + '_runs_' + str(runs) + '_trial_nr_' + str(
|
|
trials_nr) + '_stimulus_length_' + str(
|
|
stimulus_length) + cell + ' cv ' + str(cv0) + single_wave + '_a_f0_' + str(
|
|
a_fr) + '_a_f1_' + str(a_f1) + '_a_f2_' + str(a_f2) + '_trialsnr_' + str(trials_nr)
|
|
fig = plt.gcf()
|
|
fig.tag([fig.axes[0],fig.axes[2],fig.axes[3],fig.axes[1]], xoffs = -3.5)
|
|
# save_visualization()
|
|
save_visualization(individual_tag, show, pdf=pdf, counter_contrast=0, savename='')
|
|
|
|
|
|
def default_model0():
|
|
f1 = 0
|
|
f2 = 0
|
|
sampling_factor = ''
|
|
phaseshift_fr = 0
|
|
cell_recording = ''
|
|
mimick = 'no'
|
|
zeros = 'zeros'
|
|
fish_morph_harmonics_var = 'harmonic'
|
|
fish_emitter = 'Alepto' # ['Sternarchella', 'Sternopygus']
|
|
fish_receiver = 'Alepto' #
|
|
phase_right = '_phaseright_'
|
|
adapt_offset = 'adaptoffsetallall2'
|
|
constant_reduction = ''
|
|
# a_fr = 1
|
|
n = 1
|
|
corr_nr = 35
|
|
lower_tol = 0.995
|
|
upper_tol = 1.005
|
|
SAM = '' # ,
|
|
damping = 0.45 # 0.65,0.2,0.5,0.2,0.6,0.45,0.6,0.35
|
|
damping_type = ''
|
|
exponential = ''
|
|
# embed()
|
|
dent_tau_change = 1
|
|
return SAM, adapt_offset, cell_recording, constant_reduction, damping, damping_type, dent_tau_change, exponential, f1, f2, fish_emitter, fish_receiver, fish_morph_harmonics_var, lower_tol, mimick, n, phase_right, phaseshift_fr, sampling_factor, upper_tol, zeros
|
|
|
|
|
|
def plt_ROC_nonlin(xlim, frame_names, ax_ROC, ax_nonlin, cells, colors_wo, colors_w):
|
|
# frame_names = ['calc_ROC_contrasts-ROCmodel_contrasts1_diagonal1_FrF1rel_0.33_FrF2rel_0.67_C2_0.1_LenNrs_20_1Nrs_0.0001_LastNrs_0.1_len_25_nfft_32768_trialsnr_1000_mult_minimum_1temporal']#,
|
|
# #'calc_ROC_contrasts-ROCmodel_contrasts1_diagonal1_FrF1rel_0.33_FrF2rel_0.67_C2_0.1_LenNrs_20_1Nrs_0.0001_LastNrs_0.1_len_25_nfft_32768_trialsnr_100_mult_minimum_1temporal',
|
|
# #'calc_ROC_contrasts-ROCmodel_contrasts1_diagonal1_FrF1rel_0.33_FrF2rel_0.67_C2_0.1_LenNrs_20_1Nrs_0.0001_LastNrs_0.1_len_25_nfft_32768_trialsnr_1000_mult_minimum_1temporal']
|
|
# ax = ax.flatten()
|
|
cm = plt.get_cmap("hsv")
|
|
diff_012_01_02_0 = ['amp_B1_012-01-02+0_norm_01B1+02B2_mean',
|
|
'amp_B2_012-01-02+0_norm_01B1+02B2_mean',
|
|
'amp_B1_harms__012-01-02+0_norm_01B1+02B2_mean',
|
|
'amp_B2_harms__012-01-02+0_norm_01B1+02B2_mean',
|
|
'amp_B1-B2_012-01-02+0_norm_01B1+02B2_mean',
|
|
|
|
'amp_B1Harm&B2Harm&B1-B2&B1+B2_012-01-02+0_norm_01B1+02B2_mean',
|
|
'amp_B1&B1Harm&B2&B2Harm&B1-B2&B1+B2_012-01-02+0_norm_01B1+02B2_mean']
|
|
# auci02_012-auci_base_01
|
|
all_lins = ['auci02_012-auci_base_01', 'amp_B1+B2_012-01-02+0_norm_01B1+02B2_mean',
|
|
'amp_B1&B1Harm&B2&B2Harm&B1-B2&B1+B2_012-01-02+0_norm_01B1+02B2_mean'] # 'amp_B1_harms__012-01-02+0_norm_01B1+02B2_mean','amp_B1&B1Harm&B2&B2Harm&B1-B2&B1+B2_012-01-02+0_norm_01B1+02B2_mean']
|
|
# fig, ax0 = plt.subplots(1, 4, figsize=(12, 5)) # sharex = True,sharex=True,
|
|
ylabel = ['Determinant', 'B1+B2 Nonlin', 'All nonlin']
|
|
|
|
for c, cell in enumerate(cells):
|
|
# grid0 = gridspec.GridSpecFromSubplotSpec(2, 1, wspace=0.2, hspace=0.35,
|
|
# subplot_spec=grid[c])# height_ratios=[1, 0.7, 1, 1],
|
|
for f, frame_name in enumerate(frame_names):
|
|
|
|
path = load_folder_name('calc_ROC') + '/' + frame_name + '.csv'
|
|
if os.path.exists(path):
|
|
frame = pd.read_csv(path)
|
|
all_nonlin = all_lins[
|
|
0] # 'amp_B1&B1Harm&B2&B2Harm&B1-B2&B1+B2/10_mean(012-0102_012-0102)_norm_01B1+02B2_mean'
|
|
title = cut_title(frame_name, datapoints=100)
|
|
# plt.suptitle(title)
|
|
# cells = frame.sort_values(by='cv_0').cell.unique()
|
|
path_ref = load_folder_name(
|
|
'calc_ROC') + '/' + 'calc_ROC_contrasts-ROCmodel_contrasts1_diagonal1_FrF1rel_0.33_FrF2rel_0.67_C2_0.1_C1_0.02_len_25_nfft_32768_trialsnr_20_mult_minimum_1temporal.csv'
|
|
frame_ref = pd.read_csv(path_ref)
|
|
frame_ref = frame_ref.sort_values(by='cv_0')
|
|
colr = [cm(float(i) / (len(frame_ref))) for i in range(len(frame_ref))]
|
|
cells_sorted = frame_ref.cell.unique()
|
|
col, row = find_row_col(cells, row=4)
|
|
# fig, ax = plt.subplots(row, col, figsize=(12, 5), constrained_layout=True, sharex=True,
|
|
# sharey=True) # sharex = True,sharex=True,
|
|
# ax0 = ax.flatten()
|
|
# for c, cell in enumerate(cells):
|
|
frame_cell = frame[frame.cell == cell]
|
|
|
|
# ax0 = plt.subplot(grid0[f])
|
|
# ax_ROC = plt.subplot(grid0[0])
|
|
# ax_nonlin = plt.subplot(grid0[1])
|
|
# ax_nonlin = [#ax_ROC]
|
|
label = ['with female', 'CLS: 100n', 'LS: 1000n']
|
|
label2 = ['without female', 'CLS: 100n', 'LS: 1000n']
|
|
for ax in [ax_ROC]:
|
|
if len(frame_cell) > 0:
|
|
#baseline, b, eod_size = load_eod_size(cell)
|
|
#c1 = c_to_dist(eod_size * 0.5 * frame_cell.c1)
|
|
# embed()
|
|
plt_area_between(frame_cell, ax, ax, colors_wo, colors_w, f,
|
|
labels_without_female=label2[f], labels_with_female=label[f])
|
|
|
|
# ax.axhline(0, linestyle='--', color='grey', linewidth=0.5)
|
|
ax.set_xlim(xlim)
|
|
col_pos = np.where(cells_sorted == cell)[0][0]
|
|
# if f == 0:
|
|
# ax.set_title(cell[0:13]+'\n cv '+str(np.round(np.mean(frame_cell.cv_0.unique()),2)), color = colr[col_pos], fontsize = 8)
|
|
|
|
ax.set_ylim(0, 0.5)
|
|
# if c != 0:
|
|
# remove_tick_ymarks(ax)
|
|
# remove_tick_ymarks(ax_nonlin)
|
|
# else:
|
|
#
|
|
# if f == 1:
|
|
#ax.set_ylabel(core_auc_label())
|
|
|
|
# remove_xticks(ax)
|
|
# remove_xticks(#ax_ROC)
|
|
# ax.axvline(x_pos, color='grey', linestyle='--', linewidth=0.5)
|
|
|
|
col = [cm(float(i) / (len(frame))) for i in range(len(frame))]
|
|
|
|
ax.legend(loc=(0.5, 0.8))
|
|
|
|
|
|
plt_nonlin_line(ax_nonlin, cell, 0, frame_cell, xlim)
|
|
# ax_nonlin.set_ylim(0,0.5)
|
|
|
|
|
|
def plt_traces_to_roc(freq2_ratio, freq1_ratio, t_off, spikes_02, spikes_01, spikes_012, spikes_base, mat_base,
|
|
mat05_01, mat05_012, mat05_02, color02, color012, a_f2, trials, sampling, a_f1, fr, female,
|
|
color01, color0, grid0, color, run, eod_fr, freq2, freq1, sampling_rate, stimulus_012,
|
|
stimulus_02, stimulus_01, stimulus_base, time_array, carrier=False, vlin = True, short_title=True):
|
|
beat2 = freq2 - eod_fr
|
|
beat1 = freq1 - eod_fr
|
|
|
|
#############################################
|
|
eod_interp_base, eod_norm = extract_am(stimulus_base, time_array,
|
|
sampling=sampling_rate,
|
|
eodf=eod_fr,
|
|
emb=False,
|
|
extract='', norm=False)
|
|
# embed()
|
|
if len(np.shape(stimulus_01)) > 1:
|
|
stimulus_01_here = stimulus_01[0]
|
|
else:
|
|
stimulus_01_here = stimulus_01 # [0]
|
|
eod_interp_01, eod_norm = extract_am(stimulus_01_here, time_array,
|
|
sampling=sampling_rate,
|
|
eodf=eod_fr,
|
|
emb=False,
|
|
extract='', norm=False)
|
|
if len(np.shape(stimulus_02)) > 1:
|
|
stimulus_02_here = stimulus_02[0]
|
|
else:
|
|
stimulus_02_here = stimulus_02 # [0]
|
|
eod_interp_02, eod_norm = extract_am(stimulus_02_here, time_array,
|
|
sampling=sampling_rate,
|
|
eodf=eod_fr,
|
|
emb=False,
|
|
extract='', norm=False)
|
|
if len(np.shape(stimulus_012)) > 1:
|
|
stimulus_012_here = stimulus_012[0]
|
|
else:
|
|
stimulus_012_here = stimulus_012 # [0]
|
|
eod_interp, eod_norm = extract_am(stimulus_012_here, time_array, sampling=sampling_rate,
|
|
eodf=eod_fr,
|
|
emb=False,
|
|
extract='', norm=False)
|
|
|
|
lim_shift = time_array[0]
|
|
start = 0#0.2
|
|
time_array = time_array - start # lim_shift
|
|
|
|
xlim = (0, (0.102) * 1000)
|
|
# embed()
|
|
if 'wo_female' in female:
|
|
ax = plt.subplot(grid0[0, 0])
|
|
#
|
|
plt_base(ax, xlim, time_array, eod_interp_base, color0, stimulus_base, carrier, fr)
|
|
|
|
if short_title:
|
|
plt.title('Baseline', color=color0)
|
|
else:
|
|
plt.title('Base: 0 \n $fr=$' + str(np.round(fr)) + 'Hz', color=color0)
|
|
|
|
ax = plt.subplot(grid0[0, 1], sharex=ax)
|
|
# ax.set_ylim([0.85, 1.15])
|
|
plt_base(ax, xlim, time_array, eod_interp_01, color01, stimulus_01, carrier, fr)
|
|
remove_yticks(ax)
|
|
|
|
if short_title:
|
|
plt.title('Intruder', color=color01)
|
|
else:
|
|
plt.title('Intruder: 01 \n $f=$' + str(np.round(beat1[0])) + 'Hz ' + ' $c_{1}=$' + str(
|
|
a_f1 * 100) + '$\%$' + '\n' + r' $\frac{f}{fr}=$' + str(np.round(freq1_ratio, 2)),
|
|
color=color01)
|
|
|
|
elif 'base_female' in female:
|
|
ax = plt.subplot(grid0[0, 0])
|
|
#
|
|
plt_base(ax, xlim, time_array, eod_interp_base, color0, stimulus_base, carrier, fr)
|
|
if short_title:
|
|
plt.title('Baseline', color=color0)
|
|
else:
|
|
plt.title('Base: 0 \n $fr=$' + str(np.round(fr)) + 'Hz', color=color0)
|
|
|
|
ax = plt.subplot(grid0[0, 1], sharex=ax)
|
|
remove_yticks(ax)
|
|
plt_base(ax, xlim, time_array, eod_interp_02, color02, stimulus_02, carrier, fr)
|
|
if short_title:
|
|
plt.title('Female', color=color02)
|
|
else:
|
|
plt.title('Female: 02 \n $f=$' + str(np.round(beat2[0])) + ' Hz' + ' $c_{2}$ ' + str(
|
|
a_f2 * 100) + '$\%$ ' + '\n' + r'$\frac{f}{fr}={len(folder)}$' + str(np.round(freq2_ratio, 2)),
|
|
color=color02)
|
|
else:
|
|
|
|
ax = plt.subplot(grid0[0, 0])
|
|
# ax.set_ylim([0.85, 1.15])
|
|
plt_base(ax, xlim, time_array, eod_interp_02, color02, stimulus_02, carrier, fr)
|
|
|
|
if short_title:
|
|
plt.title('Female', color=color02)
|
|
else:
|
|
plt.title('Female: 02 \n $f=$' + str(np.round(beat2[0])) + ' Hz' + ' $c_{2}$ ' + str(
|
|
a_f2 * 100) + '$\%$ ' + '\n' + r'$\frac{f}{fr}={len(folder)}$' + str(np.round(freq2_ratio, 2)),
|
|
color=color02)
|
|
|
|
# eod interp
|
|
ax = plt.subplot(grid0[0, 1], sharex=ax)
|
|
plt_base(ax, xlim, time_array, eod_interp, color012, stimulus_012, carrier, fr)
|
|
remove_yticks(ax)
|
|
|
|
if short_title:
|
|
plt.title('Female + Intruder', color=color012)
|
|
else:
|
|
plt.title('Fem. + Int.: 012 \n $f=$' + str(np.round(beat1[0] + beat2[0])) + ' Hz',
|
|
color=color012)
|
|
|
|
#############################################
|
|
# spikes_012
|
|
if 'wo_female' in female:
|
|
ax = plt.subplot(grid0[1, 0], sharex=ax)
|
|
ax.set_xlim(xlim)
|
|
ax.spines['bottom'].set_visible(False)
|
|
plt.eventplot(np.array(spikes_base) * 1000, color='black')
|
|
ax = plt.subplot(grid0[1, 1], sharex=ax)
|
|
remove_yticks(ax)
|
|
ax.spines['bottom'].set_visible(False)
|
|
plt.eventplot(np.array(spikes_01) * 1000, color='black')
|
|
elif 'base_female' in female:
|
|
ax = plt.subplot(grid0[1, 0], sharex=ax)
|
|
ax.set_xlim(xlim)
|
|
ax.spines['bottom'].set_visible(False)
|
|
plt.eventplot(np.array(spikes_base) * 1000, color='black')
|
|
ax = plt.subplot(grid0[1, 1], sharex=ax)
|
|
remove_yticks(ax)
|
|
ax.spines['bottom'].set_visible(False)
|
|
plt.eventplot(np.array(spikes_02) * 1000, color='black')
|
|
else:
|
|
ax = plt.subplot(grid0[1, 0])
|
|
ax.spines['bottom'].set_visible(False)
|
|
ax.set_xlim(xlim)
|
|
plt.eventplot(np.array(spikes_02) * 1000, color='black')
|
|
ax = plt.subplot(grid0[1, 1], sharex=ax)
|
|
remove_yticks(ax)
|
|
ax.spines['bottom'].set_visible(False)
|
|
plt.eventplot(np.array(spikes_012) * 1000, color='black')
|
|
|
|
#############################################
|
|
# smoothed
|
|
color_mat = 'black'
|
|
if 'wo_female' in female:
|
|
ax = plt.subplot(grid0[2, 0])
|
|
ax.set_xlim(xlim)
|
|
|
|
plt.plot(time_array * 1000, mat_base, color=color_mat)
|
|
if vlin:
|
|
plt.vlines((trials / sampling) * 1000, ymin=0, ymax=750, color='grey',
|
|
linestyle='--', linewidth=0.5)
|
|
plt.axvline([0], color='grey',
|
|
linestyle='--', linewidth=0.5)
|
|
plt.vlines((trials - t_off / sampling) * 1000, ymin=0, ymax=750, color='grey',
|
|
linestyle='--', linewidth=0.5)
|
|
|
|
ax = plt.subplot(grid0[2, 1], sharex=ax)
|
|
remove_yticks(ax)
|
|
plt.plot(time_array * 1000, mat05_01, color=color_mat)
|
|
if vlin:
|
|
plt.vlines((trials / sampling) * 1000, ymin=0, ymax=750, color='grey',
|
|
linestyle='--', linewidth=0.5)
|
|
plt.vlines((trials - t_off / sampling) * 1000, ymin=0, ymax=750, color='grey',
|
|
linestyle='--', linewidth=0.5)
|
|
plt.axvline([0], color='grey',
|
|
linestyle='--', linewidth=0.5)
|
|
elif 'base_female' in female:
|
|
ax = plt.subplot(grid0[2, 0])
|
|
ax.set_xlim(xlim)
|
|
|
|
plt.plot(time_array * 1000, mat_base, color=color_mat)
|
|
if vlin:
|
|
plt.vlines((trials / sampling) * 1000, ymin=0, ymax=750, color='grey',
|
|
linestyle='--', linewidth=0.5)
|
|
plt.axvline([0], color='grey',
|
|
linestyle='--', linewidth=0.5)
|
|
plt.vlines((trials - t_off / sampling) * 1000, ymin=0, ymax=750, color='grey',
|
|
linestyle='--', linewidth=0.5)
|
|
|
|
ax = plt.subplot(grid0[2, 1], sharex=ax)
|
|
remove_yticks(ax)
|
|
plt.plot(time_array * 1000, mat05_02, color=color_mat)
|
|
if vlin:
|
|
plt.vlines((trials / sampling) * 1000, ymin=0, ymax=750, color='grey',
|
|
linestyle='--', linewidth=0.5)
|
|
plt.axvline([0], color='grey',
|
|
linestyle='--', linewidth=0.5)
|
|
plt.vlines((trials - t_off / sampling) * 1000, ymin=0, ymax=750, color='grey',
|
|
linestyle='--', linewidth=0.5)
|
|
else:
|
|
ax = plt.subplot(grid0[2, 0])
|
|
ax.set_xlim(xlim)
|
|
plt.plot(time_array * 1000, mat05_02, color=color_mat)
|
|
if vlin:
|
|
plt.vlines((trials / sampling) * 1000, ymin=0, ymax=750, color='grey',
|
|
linestyle='--', linewidth=0.5)
|
|
plt.axvline([0], color='grey',
|
|
linestyle='--', linewidth=0.5)
|
|
plt.vlines((trials - t_off / sampling) * 1000, ymin=0, ymax=750, color='grey',
|
|
linestyle='--', linewidth=0.5)
|
|
|
|
ax = plt.subplot(grid0[2, 1], sharex=ax)
|
|
remove_yticks(ax)
|
|
plt.plot(time_array * 1000, mat05_012, color=color_mat)
|
|
if vlin:
|
|
plt.vlines((trials / sampling) * 1000, ymin=0, ymax=750, color='grey', linestyle='--', linewidth=0.5)
|
|
plt.vlines((trials - t_off / sampling) * 1000, ymin=0, ymax=750, color='grey',
|
|
linestyle='--', linewidth=0.5)
|
|
plt.axvline([0], color='grey',
|
|
linestyle='--', linewidth=0.5)
|
|
|
|
|
|
def plt_base(ax, xlim, time_array, eod_interp_base, color0, stimulus_base, carrier, fr):
|
|
ax.set_xlim(xlim)
|
|
plt.plot(time_array * 1000, eod_interp_base, color=color0)
|
|
# embed()
|
|
if carrier:
|
|
if len(np.shape(stimulus_base)) > 1:
|
|
stimulus_base_here = stimulus_base[0]
|
|
else:
|
|
stimulus_base_here = stimulus_base
|
|
plt.plot(time_array * 1000, stimulus_base_here, color='grey', linewidth=0.5)
|
|
|
|
ax.set_ylim(-1.15, 1.15)
|
|
# embed()
|
|
else:
|
|
ax.set_ylim([0.85, 1.15])
|
|
|
|
ax.spines['bottom'].set_visible(False)
|
|
|
|
|
|
def plt_power_spectrum(grid0, color01, color02, color01_2, color012, color0, fr, results_diff, female, nfft,
|
|
smoothed012,
|
|
smoothed01, smoothed02, smoothed0, sampling_rate, add_to=70, mult_val = 0.125, wierd_charing= True):
|
|
p0, p02, p01, p012, fs = calc_ps(nfft, smoothed012,
|
|
smoothed01, smoothed02, smoothed0,
|
|
test=False, sampling_rate=sampling_rate)
|
|
DF1 = np.abs(results_diff.f1.iloc[-1] - results_diff.f0.iloc[-1])
|
|
DF2 = np.abs(results_diff.f2.iloc[-1] - results_diff.f0.iloc[-1])
|
|
if 'wo_female' in female:
|
|
p_arrays = [p0, p01]
|
|
else:
|
|
four = False
|
|
if four:
|
|
p_arrays = [p02, p012]
|
|
freqs_all = [[np.abs(DF2), np.abs(DF2) * 2],
|
|
[np.abs(DF2), np.abs(DF2) * 2, np.abs(DF1), np.abs(DF1) + np.abs(DF2),
|
|
(np.abs(DF1) + np.abs(DF2)) * 2, fr,
|
|
fr * 2,(np.abs(DF1) + np.abs(DF2) * 2),]] # np.abs(np.abs(DF1) - np.abs(DF2)),
|
|
color0122 = 'yellow'
|
|
colors_all = [[color02, color02],
|
|
[color02, color02, color01, color012, color012, color0, color0, color0122,]] # color01_2,
|
|
labels_all = [['DF2', 'DF2 H1'],
|
|
['DF1', 'DF2', 'DF2 H1', '$|DF1+DF2|$', '', 'baseline']] # '$|DF1-DF2|$',
|
|
labels_all = [['DF2', 'DF2 H1'],
|
|
['Female', '', 'Intruder', 'Female$\,+\,$Intruder', '', '', 'Baseline', '']] # '$|Intruder-Female|$',
|
|
labels_all = [['DF2', 'DF2 H1'],
|
|
[r'$\Delta \mathrm{f_{Female}}$', '', r'$\Delta \mathrm{f_{Intruder}}$', sum_intruder_core(), '', r'$\mathrm{f_{Base}}$', '',r'$2|\Delta \mathrm{f_{Female}}|+|\Delta \mathrm{f_{Intruder}}|$']] # '$|Intruder-Female|$',
|
|
else:
|
|
p_arrays = [p02, p012]
|
|
freqs_all = [[np.abs(DF2), np.abs(DF2) * 2],
|
|
[np.abs(DF2), np.abs(DF2) * 2, (np.abs(DF1) + np.abs(DF2) * 2), np.abs(DF1), np.abs(DF1) + np.abs(DF2),
|
|
(np.abs(DF1) + np.abs(DF2)) * 2, fr,fr * 2, ]] # np.abs(np.abs(DF1) - np.abs(DF2)),
|
|
color0122 = 'yellow'
|
|
colors_all = [[color02, color02],
|
|
[color02, color02,color0122,color01, color012, color012, color0, color0, ]] # color01_2,
|
|
labels_all = [['DF2', 'DF2 H1'],
|
|
['DF1', 'DF2', 'DF2 H1', '$|DF1+DF2|$', '', 'baseline']] # '$|DF1-DF2|$',
|
|
labels_all = [['DF2', 'DF2 H1'],
|
|
['Female', '', 'Intruder', 'Female$\,+\,$Intruder', '', '', 'Baseline',
|
|
'']] # '$|Intruder-Female|$',
|
|
labels_all = [['DF2', 'DF2 H1'],
|
|
[r'$\Delta \mathrm{f_{Female}}$', '',
|
|
r'$2|\Delta \mathrm{f_{Female}}|+|\Delta \mathrm{f_{Intruder}}|$' ,
|
|
r'$\Delta \mathrm{f_{Intruder}}$', sum_intruder_core(),
|
|
'',
|
|
r'$\mathrm{f_{Base}}$', '',]] # '$|Intruder-Female|$',
|
|
|
|
axs = []
|
|
for j in range(len(p_arrays)):
|
|
|
|
if (j != 0) & wierd_charing:
|
|
ax = plt.subplot(grid0[4, j], sharex=ax, sharey=ax) # , sharex=ax
|
|
else:
|
|
ax = plt.subplot(grid0[4, j]) # , sharex=ax
|
|
axs.append(ax)
|
|
sampling = 40000
|
|
p0_means = []
|
|
|
|
for i in range(len(p0)):
|
|
ax.plot(fs, p_arrays[j][i], color='grey')
|
|
# ax.set_ylim(0, 1200)
|
|
p0_mean = np.mean(p_arrays[j], axis=0)
|
|
p0_means.append(p0_mean)
|
|
ax.plot(fs, p0_mean, color='black') # plt_peaks(ax[0], p01, fs, 'orange')
|
|
|
|
for p in range(len(p0_means)):
|
|
if 'wo_female' in female:
|
|
freqs = [np.abs(DF1), fr]
|
|
colors = [color01, color0]
|
|
labels = ['DF1', 'baseline']
|
|
else:
|
|
labels = labels_all[j]
|
|
colors = colors_all[j]
|
|
freqs = freqs_all[j]
|
|
# embed()
|
|
df_passed = []
|
|
for f in range(len(freqs)):
|
|
if int(freqs[f]) in df_passed:
|
|
add = (np.max(np.max(p_arrays)) + add_to) * mult_val
|
|
add_text = add + 30
|
|
# if j == 0:
|
|
# add = (np.max(np.max(p_arrays))+70)*0.25
|
|
# add_text = add+30
|
|
else:
|
|
add = (np.max(np.max(p_arrays)) + add_to) * 0.05
|
|
add_text = (np.max(np.max(p_arrays)) + add_to) * 0.05
|
|
try:
|
|
f_scatter, p_scatter = plt_peaks(ax, p0_means[p], freqs[f], fs, fr_color=colors[f], s=25,
|
|
label=labels[f], add=add,extend = False)
|
|
except:
|
|
print('p problem')
|
|
embed()
|
|
df_passed.append(int(freqs[f]))
|
|
# if j != 0:
|
|
# if fonts:
|
|
# ax.legend(ncol=2, loc=(-0.7, 0.6), fontsize = fonts)
|
|
# else:
|
|
# ax.legend(ncol = 2, loc = (-0.7,0.6))
|
|
# # ax.text(f_scatter+2, p_scatter+10+add_text, labels[f], ha = 'left', rotation = '65', color = colors[f], fontsize = 9)
|
|
ax.set_xlim(0, 300)
|
|
# ax.set_ylim(0-20, np.max(np.max(p_arrays))+70)#np.min(np.min(p0_means))
|
|
return axs
|
|
|
|
|
|
def sum_intruder_core():
|
|
return r'$|\Delta \mathrm{f_{Female}}|+|\Delta \mathrm{f_{Intruder}}|$'
|
|
|
|
|
|
def plt_area_between(frame_cell, ax0, ax, colors_w, colors_wo, f, cut_starts = False, alphas = [1,1,1,1,1,1,1,1,1], starts = 0.25, ls ='-', labels_with_female ='', arrow = True, lw = 0.75, fill = True, labels_without_female ='', dist_redo = True):
|
|
#embed()
|
|
cell = frame_cell.cell.unique()[0]
|
|
frame_cell = frame_cell.groupby('c1',as_index=False).mean()
|
|
c1 = frame_cell.c1
|
|
|
|
|
|
#embed()
|
|
if dist_redo:
|
|
c1 = c_dist_recalc_func(frame_cell=frame_cell, c_nrs=frame_cell.c1, cell=cell, c_dist_recalc=True)
|
|
#baseline, b, eod_size = load_eod_size(cell)
|
|
#c1 = c_to_dist(eod_size * 0.5 * frame_cell.c1)
|
|
sorting = np.argsort(c1)
|
|
c1 = np.sort(c1)
|
|
#embed()
|
|
frame_cell['auci_02_012'].iloc[frame_cell.index] = frame_cell['auci_02_012'].iloc[sorting]
|
|
frame_cell['auci_base_01'].iloc[frame_cell.index] = frame_cell['auci_base_01'].iloc[sorting]
|
|
#embed()
|
|
upper0 = frame_cell['auci_02_012'] * 1
|
|
lower1 = frame_cell['auci_base_01'] * 1
|
|
|
|
upper0new = [0.5]
|
|
upper0new.extend(upper0)
|
|
upper0 = np.array(upper0new)
|
|
|
|
lower0new = [0.5]
|
|
lower0new.extend(lower1)
|
|
lower1 = np.array(lower0new)
|
|
|
|
upper = upper0 * 1
|
|
lower = lower1 * 1
|
|
#embed()
|
|
lower[lower > upper0] = upper0[lower > upper0]
|
|
upper[upper > lower1] = lower1[upper > lower1]
|
|
#embed()
|
|
c1_new = [5]
|
|
c1_new.extend(c1)
|
|
c1 = c1_new
|
|
|
|
|
|
|
|
if fill:
|
|
ax0.fill_between(c1, upper0, upper, color='red', edgecolor=None, zorder=2, alpha=0.05)
|
|
ax0.fill_between(c1, lower1, lower, color='blue', edgecolor=None, zorder=2,
|
|
alpha=0.05)
|
|
#try:
|
|
|
|
ax.set_xlim(0, ax.get_xlim()[1])
|
|
|
|
if type(starts) == list:
|
|
start = starts[f]
|
|
else:
|
|
start = starts
|
|
|
|
#embed()
|
|
# todo: das sollte man eventuell interpolieren
|
|
#embed()
|
|
|
|
|
|
|
|
test = False
|
|
if test:
|
|
ax = plt.subplot(1,1,1)
|
|
|
|
with_female = np.array(upper0)
|
|
without_female = np.array(lower1)
|
|
c1_interp = c1
|
|
reintepolate = True
|
|
if reintepolate:
|
|
c1_interp_new = np.arange(np.min(c1_interp), np.max(c1_interp), 1)
|
|
with_female = interpolate(c1_interp, with_female,
|
|
c1_interp_new,
|
|
kind='linear')
|
|
without_female = interpolate(c1_interp, without_female,
|
|
c1_interp_new,
|
|
kind='linear')
|
|
c1_interp = c1_interp_new#_new
|
|
pos_l = np.argmin(np.abs(with_female-start))
|
|
pos_r = np.argmin(np.abs(without_female-start))
|
|
val_l = with_female[pos_l]
|
|
val_r = without_female[pos_r]
|
|
#embed()
|
|
pos_rr = np.max([pos_l, pos_r])
|
|
pos_ll = np.min([pos_l, pos_r])
|
|
if cut_starts:
|
|
ax.plot(c1_interp[pos_r::], without_female[pos_r::],alpha=alphas[f], color=colors_wo[f], label=labels_without_female, clip_on=True,
|
|
linestyle=ls) #linewidth=lw,
|
|
# todo: das muss man in linear machen
|
|
ax.plot(c1_interp, with_female, alpha=alphas[f],color=colors_w[f], label=labels_with_female, clip_on=True)
|
|
|
|
##ax.scatter(c1, frame_cell['auci_02_012'], color=colors_w[f], label=labels_with_female, clip_on=True, linewidth=lw), linewidth=lw
|
|
#ax.scatter(c1[pos_r::], frame_cell['auci_base_01'][pos_r::], color=colors_wo[f], label=labels_without_female, clip_on=True,
|
|
# linewidth=lw, linestyle=ls) #
|
|
else:
|
|
ax.plot(c1_interp, without_female, color=colors_wo[f], alpha=alphas[f], label = labels_without_female, clip_on = True, linestyle=ls)#linewidth = lw,
|
|
# ax0.plot(frame_cell.c1,frame_cell['auci02_012-auci_base_01'], color = 'black')
|
|
ax.plot(c1_interp, with_female, color=colors_w[f], alpha=alphas[f], label = labels_with_female, clip_on = True)#, linewidth = lw
|
|
|
|
#embed()
|
|
#embed()
|
|
if arrow:#colors_w[f]
|
|
# ich will halt dass es einge gerade linie ist
|
|
if val_r != val_l:
|
|
val_rr = val_l
|
|
if pos_l != pos_ll:
|
|
ax.annotate('', xy=(c1_interp[pos_l], val_l), xytext=(c1_interp[pos_r], val_rr),
|
|
arrowprops=dict(arrowstyle="->",
|
|
color='black'), textcoords='data', xycoords='data', horizontalalignment='left')
|
|
else:
|
|
#embed()start, start
|
|
ax.annotate('', xy = (c1_interp[pos_l], val_l), xytext = (c1_interp[pos_r], val_rr),
|
|
arrowprops = dict(arrowstyle="->",
|
|
color='black'),textcoords='data', xycoords='data',horizontalalignment='left')
|
|
ax.set_xlabel(core_distance_label())
|
|
ax.set_ylabel(core_auc_label())
|
|
return c1_interp, without_female, with_female
|
|
|
|
def arrow_annotate(ax, c1, colors_w, f, pos_l, pos_ll, pos_r, val_l, val_r):
|
|
if pos_l != pos_ll:
|
|
ax.annotate('', xy=(c1[pos_l], val_l), xytext=(c1[pos_r], val_r),
|
|
arrowprops=dict(arrowstyle="->",
|
|
color=colors_w[f]), textcoords='data', xycoords='data',
|
|
horizontalalignment='left')
|
|
else:
|
|
# embed()start, start
|
|
ax.annotate('', xy=(c1[pos_l], val_l), xytext=(c1[pos_r], val_r),
|
|
arrowprops=dict(arrowstyle="->",
|
|
color=colors_w[f]), textcoords='data', xycoords='data',
|
|
horizontalalignment='left')
|
|
|
|
|
|
def plt_several_ROC_declining_one_with_ROC_single_in_one_dec(bt=0.12, lf=0.07, females=[], color_01='green', color_02='red',
|
|
color_012='orange', figsize=(12, 5.5), frame_names=[
|
|
'calc_ROC_contrasts-ROCmodel_contrasts1_diagonal1_FrF1rel_0.33_FrF2rel_0.67_C2_0.1_LenNrs_20_1Nrs_0.0001_LastNrs_0.1_len_25_nfft_32768_trialsnr_20_mult_minimum_1temporal',
|
|
'calc_ROC_contrasts-ROCmodel_contrasts1_diagonal1_FrF1rel_0.33_FrF2rel_0.67_C2_0.1_LenNrs_20_1Nrs_0.0001_LastNrs_0.1_len_25_nfft_32768_trialsnr_100_mult_minimum_1temporal',
|
|
'calc_ROC_contrasts-ROCmodel_contrasts1_diagonal1_FrF1rel_0.33_FrF2rel_0.67_C2_0.1_LenNrs_20_1Nrs_0.0001_LastNrs_0.1_len_25_nfft_32768_trialsnr_1000_mult_minimum_1temporal'],
|
|
reshuffled='reshuffled', datapoints=1000, dev=0.0005,
|
|
a_f1s=[0.03], printing=False, plus_q='minus', way='absolut',
|
|
stimulus_length=0.5, runs=3, trials_nr=500, nfft=int(2 ** 15),
|
|
beat='', nfft_for_morph=4096 * 4, gain=1, fish_jammer='Alepto',
|
|
us_name='', wr=[1.6, 2]):
|
|
#
|
|
# plot_style()
|
|
# default_settings(width=12, ts=12, ls=13, fs=11)
|
|
only_extra_nonlin = 'amp_B1Harm&B2Harm&B1-B2&B1+B2_mean(012-0102_012-0102)_norm_01B1+02B2_mean'
|
|
try:
|
|
diagonal = frame_names[0].split('contrasts_')[1].split('_FrF1rel')[0]
|
|
except:
|
|
print('split something')
|
|
freq1_ratio = float(frame_names[0].split('FrF1rel_')[1].split('_FrF2rel')[0])
|
|
freq2_ratio = float(frame_names[0].split('FrF2rel_')[1].split('_C2')[0])
|
|
|
|
cm = plt.get_cmap("hsv")
|
|
cells = [
|
|
"2013-01-08-aa-invivo-1"] # , "2012-12-13-an-invivo-1", "2012-06-27-an-invivo-1", "2012-12-21-ai-invivo-1","2012-06-27-ah-invivo-1", ]
|
|
|
|
cells_chosen = [
|
|
'2013-01-08-aa-invivo-1'] # , "2012-06-27-ah-invivo-1","2014-06-06-ac-invivo-1" ]#'2012-06-27-an-invivo-1',
|
|
diff_012_01_02_0 = ['amp_B1_012-01-02+0_norm_01B1+02B2_mean',
|
|
'amp_B2_012-01-02+0_norm_01B1+02B2_mean',
|
|
'amp_B1_harms__012-01-02+0_norm_01B1+02B2_mean',
|
|
'amp_B2_harms__012-01-02+0_norm_01B1+02B2_mean',
|
|
'amp_B1-B2_012-01-02+0_norm_01B1+02B2_mean',
|
|
|
|
'amp_B1Harm&B2Harm&B1-B2&B1+B2_012-01-02+0_norm_01B1+02B2_mean',
|
|
'amp_B1&B1Harm&B2&B2Harm&B1-B2&B1+B2_012-01-02+0_norm_01B1+02B2_mean']
|
|
|
|
all_lins = ['auci02_012-auci_base_01', 'amp_B1+B2_012-01-02+0_norm_01B1+02B2_mean',
|
|
'amp_B1&B1Harm&B2&B2Harm&B1-B2&B1+B2_012-01-02+0_norm_01B1+02B2_mean'] # 'amp_B1_harms__012-01-02+0_norm_01B1+02B2_mean','amp_B1&B1Harm&B2&B2Harm&B1-B2&B1+B2_012-01-02+0_norm_01B1+02B2_mean']
|
|
ylabel = ['Determinant', 'B1+B2 Nonlin', 'All nonlin']
|
|
|
|
# embed()
|
|
x_pos = [10 ** -2, (10 ** -2) / 2, 10 ** -3, ]
|
|
ranges = [[0.05, 0.002], [0.04, 0.001], [0.03, 0.0004]]
|
|
colors_range = ['darkblue', 'blue', 'lightblue']
|
|
# grid = gridspec.GridSpec(1, 1, wspace=0.2, hspace=0.2, left=0.15, top=0.8, bottom=bt,
|
|
# right=0.95) #, width_ratios = [1,1,1,0.5,1] height_ratios = [1,6]bottom=0.25, top=0.8,
|
|
# grid1 = gridspec.GridSpecFromSubplotSpec(3, 1, wspace=0.3, hspace=0.75,
|
|
# subplot_spec=grid[-1])
|
|
|
|
# plot_style()
|
|
# default_settings(ts=13, ls=13, fs=13, lw = 1)
|
|
plt.rcParams['lines.linewidth'] = 1
|
|
model_cells = pd.read_csv(load_folder_name('calc_model_core') + "/models_big_fit_d_right.csv")
|
|
fig = plt.figure(figsize=figsize)
|
|
grid_here = gridspec.GridSpec(1, 2, hspace=0.3, wspace=0.36, left=lf, top=0.92, bottom=bt,
|
|
right=0.98, width_ratios=wr) # 1.3,1 wspace=0.16
|
|
grid_here1 = gridspec.GridSpecFromSubplotSpec(1, 1, wspace=0.6, hspace=0.75,
|
|
subplot_spec=grid_here[0])#0.3
|
|
grid_here2 = gridspec.GridSpecFromSubplotSpec(2, 1, wspace=0.3, hspace=0.3,
|
|
subplot_spec=grid_here[1], height_ratios=[1.5, 3])
|
|
if len(cells) < 1:
|
|
cells = len(model_cells)
|
|
# c_with_female =
|
|
# embed()
|
|
colors_wo = [color_01] # ['limegreen', 'green', 'darkgreen']
|
|
colors_w = [color_012] # ['orange', 'darkorange','goldenrod']
|
|
for cell_here in cells:
|
|
# sachen die ich variieren will
|
|
###########################################
|
|
single_waves = ['_SeveralWave_'] # , '_SingleWave_']
|
|
####### VARY HERE
|
|
for single_wave in single_waves:
|
|
if single_wave == '_SingleWave_':
|
|
a_f2s = [0] # , 0,0.2
|
|
else:
|
|
a_f2s = [0.1]
|
|
for a_f2 in a_f2s:
|
|
# ,0.05,0.01, 0.005, 0.1, 0.2] # 0.001,
|
|
for a_f1 in a_f1s:
|
|
a_frs = [1]
|
|
titles_amp = ['base eodf'] # ,'baseline to Zero',]
|
|
for a, a_fr in enumerate(a_frs):
|
|
|
|
model_params = model_cells[model_cells['cell'] == cell_here].iloc[0]
|
|
# model_params = model_cells.iloc[cell_nr]
|
|
|
|
# embed()
|
|
eod_fr = model_params['EODf'] # .iloc[0]
|
|
offset = model_params.pop('v_offset')
|
|
cell = model_params.pop('cell')
|
|
print(cell)
|
|
SAM, adapt_offset, cell_recording, constant_reduction, damping, damping_type, dent_tau_change, exponential, f1, f2, fish_emitter, fish_receiver, fish_morph_harmonics_var, lower_tol, mimick, n, phase_right, phaseshift_fr, sampling_factor, upper_tol, zeros = default_model0()
|
|
# in case you want a different sampling here we can adujust
|
|
time_array, sampling, deltat = deltat_choice(model_params, sampling_factor, eod_fr,
|
|
stimulus_length)
|
|
|
|
# generate the eod_fish_r in the four mimick variants (copy, thunderfish, mimick, just sinus)
|
|
eod_fish_r, deltat, eod_fr, time_array = eod_fish_r_generation(time_array, eod_fr, a_fr,
|
|
stimulus_length, phaseshift_fr,
|
|
cell_recording, zeros, mimick,
|
|
sampling, fish_receiver, deltat,
|
|
nfft, nfft_for_morph,
|
|
fish_morph_harmonics_var=fish_morph_harmonics_var,
|
|
beat=beat)
|
|
sampling = 1 / deltat
|
|
multiple = 0
|
|
slope = 0
|
|
add = 0
|
|
plus = 0
|
|
sig_val = (7, 1)
|
|
variant = 'sinz'
|
|
if exponential == '':
|
|
v_exp = 1
|
|
exp_tau = 0.001
|
|
# prepare for adapting offset due to baseline modification
|
|
|
|
baseline_with_wave_damping, baseline_without_wave = prepare_baseline_array(time_array, eod_fr,
|
|
nfft_for_morph,
|
|
phaseshift_fr,
|
|
mimick, zeros,
|
|
cell_recording,
|
|
sampling,
|
|
stimulus_length,
|
|
fish_receiver,
|
|
deltat, nfft,
|
|
damping_type,
|
|
damping, us_name,
|
|
gain, beat=beat,
|
|
fish_morph_harmonics_var=fish_morph_harmonics_var)
|
|
|
|
color0 = 'green' # 'orange'
|
|
color01 = 'blue'
|
|
color02 = 'red'
|
|
color012 = 'orange'
|
|
color01_2 = 'purple'
|
|
|
|
# fig = plt.figure(figsize=(11.5, 5.4))
|
|
# embed()
|
|
grid = gridspec.GridSpec(1, 2, wspace=0.35, left=0.07, top=0.8, bottom=0.12,
|
|
right=0.98, height_ratios=[1], width_ratios=[4, 2.4]) # 1.3,1
|
|
|
|
#grid0 = gridspec.GridSpecFromSubplotSpec(3, 2, wspace=0.18, hspace=0.1,
|
|
# subplot_spec=grid[0],
|
|
# height_ratios=[1, 0.6, 1]) # ,0.4,1.2
|
|
|
|
#grid1 = gridspec.GridSpecFromSubplotSpec(1, 1,
|
|
# subplot_spec=grid[1]) # wspace=0.5, hspace=0.55,
|
|
save_name_roc = 'decline_ROC_examples_trial_nr.csv'
|
|
redo = False
|
|
version_comp, subfolder, mod_name_slash, mod_name, subfolder_path = find_code_vs_not()
|
|
|
|
cont_redo = ((os.path.exists(save_name_roc)) | (version_comp == 'public')) & (redo == False)
|
|
for run in range(runs):
|
|
print(run)
|
|
t1 = time.time()
|
|
if cont_redo:
|
|
trials_nr_base = 1
|
|
stimulus_length = 1
|
|
model_params = model_cells[model_cells['cell'] == cell_here].iloc[0]
|
|
eod_fr = model_params['EODf'] # .iloc[0]
|
|
offset = model_params.pop('v_offset')
|
|
cell = model_params.pop('cell')
|
|
time_array, sampling, deltat = deltat_choice(model_params, sampling_factor, eod_fr,
|
|
stimulus_length)
|
|
eod_fish_r, deltat, eod_fr, time_array = eod_fish_r_generation(time_array, eod_fr, a_fr,
|
|
stimulus_length,
|
|
phaseshift_fr,
|
|
cell_recording, zeros,
|
|
mimick, sampling,
|
|
fish_receiver, deltat,
|
|
nfft, nfft_for_morph,
|
|
fish_morph_harmonics_var=fish_morph_harmonics_var,
|
|
beat=beat)
|
|
|
|
else:
|
|
trials_nr_base = trials_nr
|
|
# embed()
|
|
spikes_base = [[]] * trials_nr_base
|
|
for t in range(trials_nr_base):
|
|
# get the baseline properties here
|
|
# baseline_after,spikes_base,rate_adapted, rate_baseline_before, rate_baseline_after, np.array(spike_times), stimulus_power, v_dent_output[int(0.05 / deltat):-1], offset, v_mem_output
|
|
stimulus = eod_fish_r
|
|
stimulus_base = eod_fish_r
|
|
if 'Zero' in titles_amp[a]:
|
|
power_here = 'sinz' + '_' + zeros
|
|
else:
|
|
power_here = 'sinz'
|
|
|
|
cvs, adapt_output, baseline_after_b, _, rate_adapted_b, rate_baseline_before_b, rate_baseline_after_b, \
|
|
spikes_base[t], _, _, offset_new, _, noise_final = simulate(cell, offset, stimulus, f1,
|
|
n, power_here,
|
|
adapt_offset=adapt_offset,
|
|
add=add, alpha=alpha,
|
|
reshuffle=reshuffled,
|
|
lower_tol=lower_tol,
|
|
upper_tol=upper_tol,
|
|
v_exp=v_exp,
|
|
exp_tau=exp_tau,
|
|
dent_tau_change=dent_tau_change,
|
|
alter_taus=constant_reduction,
|
|
exponential=exponential,
|
|
exponential_mult=1,
|
|
exponential_plus=plus,
|
|
exponential_slope=slope,
|
|
sig_val=sig_val, j=f2,
|
|
deltat=deltat, t=t,
|
|
**model_params)
|
|
|
|
if t == 0:
|
|
# here we record the changes in the offset due to the adaptation
|
|
change_offset = offset - offset_new
|
|
# and we subsequently reset the offset to be the new adapted for all subsequent trials
|
|
offset = offset_new * 1
|
|
|
|
if printing:
|
|
print('Baseline time' + str(time.time() - t1))
|
|
# embed()
|
|
base_cut, mat_base = find_base_fr(spikes_base, deltat, stimulus_length, time_array, dev=dev)
|
|
|
|
fr = np.mean(base_cut)
|
|
# if 'diagonal' in diagonal:
|
|
|
|
# two_third_fr = fr * freq2_ratio
|
|
# freq1_ratio = (1 - freq2_ratio)
|
|
# third_fr = fr * freq1_ratio
|
|
# else:
|
|
two_third_fr = fr * freq2_ratio
|
|
third_fr = fr * freq1_ratio
|
|
|
|
if plus_q == 'minus':
|
|
two_third_fr = -two_third_fr
|
|
third_fr = -third_fr
|
|
freqs2 = [eod_fr + two_third_fr] # , eod_fr - third_fr, two_third_fr,
|
|
# third_fr,
|
|
# two_third_eodf, eod_fr - two_third_eodf,
|
|
# third_eodf, eod_fr - third_eodf, ]
|
|
freqs1 = [
|
|
eod_fr + third_fr] # , eod_fr - two_third_fr, third_fr,two_third_fr,third_eodf, eod_fr - third_eodf,two_third_eodf, eod_fr - two_third_eodf, ]
|
|
|
|
sampling_rate = 1 / deltat
|
|
base_cut, mat_base, smoothed0, mat0 = find_base_fr2(sampling_rate, spikes_base, deltat,
|
|
stimulus_length, time_array, dev=dev)
|
|
fr = np.mean(base_cut)
|
|
frate, isis_diff = ISI_frequency(time_array, spikes_base[0], fill=0.0)
|
|
isi = np.diff(spikes_base[0])
|
|
cv0 = np.std(isi) / np.mean(isi)
|
|
cv1 = np.std(frate) / np.mean(frate)
|
|
# embed()
|
|
for ff, freq1 in enumerate(freqs1):
|
|
|
|
|
|
if cont_redo:
|
|
frame = pd.read_csv(save_name_roc)
|
|
tp_012_all = frame['tp_012'] # = tp_012_all
|
|
tp_01_all = frame['tp_01'] # = tp_01_all
|
|
tp_02_all = frame['tp_02'] # = tp_02_all
|
|
fp_all = frame['fp_all'] # = fp_all
|
|
threshhold = frame['threshhold'] # = threshhold
|
|
else:
|
|
freq1 = [freq1]
|
|
freq2 = [freqs2[ff]]
|
|
# time_var = time.time()
|
|
|
|
# if printing:
|
|
# print(cell )
|
|
# f_corr = create_beat_corr(np.array([freq1[f1]]), np.array([eod_fr]))
|
|
# create the second eod_fish1 array analogous to the eod_fish_r array
|
|
t1 = time.time()
|
|
phaseshift_f1, phaseshift_f2 = get_phaseshifts(a_f1, a_f2, phase_right, phaseshift_fr)
|
|
|
|
eod_fish1, time_fish_e = eod_fish_e_generation(time_array, a_f1, freq1, f1,
|
|
nfft_for_morph, phaseshift_f1,
|
|
cell_recording,
|
|
fish_morph_harmonics_var, zeros, mimick,
|
|
fish_emitter, sampling,
|
|
stimulus_length, thistype='emitter')
|
|
eod_fish2, time_fish_j = eod_fish_e_generation(time_array, a_f2, freq2, f2,
|
|
nfft_for_morph, phaseshift_f2,
|
|
cell_recording,
|
|
fish_morph_harmonics_var, zeros, mimick,
|
|
fish_jammer, sampling,
|
|
stimulus_length, thistype='jammer')
|
|
|
|
eod_stimulus = eod_fish1 + eod_fish2
|
|
|
|
v_mems, offset_new, mat01, mat02, mat012, smoothed01, smoothed02, smoothed012, stimulus_01, stimulus_02, stimulus_012, mat05_01, spikes_01, mat05_02, spikes_02, mat05_012, spikes_012 = get_arrays_for_three(
|
|
cell, a_f2, a_f1,
|
|
SAM, eod_stimulus, eod_fish_r, freq2, eod_fish1, eod_fish_r,
|
|
eod_fish2, stimulus_length,
|
|
baseline_with_wave_damping, baseline_without_wave,
|
|
offset, model_params, n, variant, t, adapt_offset,
|
|
upper_tol, lower_tol, dent_tau_change, constant_reduction,
|
|
exponential, plus, slope, add,
|
|
deltat, alpha, sig_val, v_exp, exp_tau, f2,
|
|
trials_nr, time_array,
|
|
f1, freq1, damping_type,
|
|
gain, eod_fr, damping, us_name, dev=dev, reshuffle=reshuffled)
|
|
if printing:
|
|
print('Generation process' + str(time.time() - t1))
|
|
|
|
##################################
|
|
# power spectrum
|
|
# plt_power_spectrum(female, nfft, smoothed012,
|
|
# smoothed01, smoothed02, smoothed0, sampling_rate)
|
|
|
|
# embed()
|
|
array0 = [mat_base]
|
|
|
|
array01 = [mat05_01]
|
|
|
|
array02 = [mat05_02]
|
|
array012 = [mat05_012]
|
|
t_off = 10
|
|
|
|
position_diff = 0
|
|
results_diff = pd.DataFrame()
|
|
results_diff['f1'] = freq1
|
|
results_diff['f2'] = freq2
|
|
results_diff['f0'] = eod_fr
|
|
trials, results_diff, tp_012_all, tp_01_all, tp_02_all, fp_all, roc_01, roc_0, roc_02, roc_012, threshhold = calc_auci_pd(
|
|
results_diff, position_diff, array012, array01, array02, array0, t_off=t_off,
|
|
way=way, printing=True, datapoints=datapoints, f0='f0', sampling=sampling)
|
|
frame = pd.DataFrame()
|
|
frame['tp_012'] = tp_012_all
|
|
frame['tp_01'] = tp_01_all
|
|
frame['tp_02'] = tp_02_all
|
|
frame['fp_all'] = fp_all
|
|
frame['threshhold'] = threshhold
|
|
|
|
if version_comp == 'develop':
|
|
frame.to_csv(save_name_roc)
|
|
|
|
# threshhold
|
|
# embed()
|
|
|
|
if run == 0:
|
|
color = 'black'
|
|
lw = 1
|
|
else:
|
|
color = 'grey'
|
|
lw = 0.5
|
|
# if 'wo_female' in female:
|
|
|
|
# color_base = color_base ,color_01 = color_01, color_02 = color_02, color_012 = color_012,
|
|
lw_g = 1
|
|
|
|
for f_nr, female in enumerate(females):
|
|
if female == 'w_female':
|
|
ax1 = plt.subplot(grid_here1[0])
|
|
color_e = 'lightgrey'
|
|
roc_wo_female(color, ax1, tp_02_all, tp_012_all, lw, color_02, color_012,
|
|
title_color='black',color_e = color_e, lw_g = lw_g) # colors_w[ff]
|
|
# time_interp, array2 = interp_arrays(array2_0[::-1], array2_1[::-1], step=0.01)
|
|
|
|
plt.fill_between(tp_02_all,
|
|
tp_02_all,
|
|
tp_012_all,
|
|
color=colors_w[ff], alpha=0.8)
|
|
ax1.set_title('') #: 0
|
|
ax1.set_xlabel('False-Positive Rate ') #: 0
|
|
ax1.set_ylabel('Correct-Detection Rate ') # 01
|
|
elif female == 'wo_female':
|
|
ax1 = plt.subplot(grid_here1[0])
|
|
# embed()
|
|
color_e = None
|
|
roc_female(ax1, color, fp_all, tp_01_all, lw, 'black', 'black',
|
|
title_color='black', color_e = color_e, lw_g = lw_g) # colors_wo[ff]
|
|
plt.fill_between(fp_all,
|
|
fp_all,
|
|
tp_01_all,
|
|
color=colors_wo[ff], alpha=0.8)
|
|
ax1.set_xlabel('False-Positive Rate ') #: 0
|
|
ax1.set_ylabel('Correct-Detection Rate ') # 01
|
|
ax1.set_title('') #: 0
|
|
else:
|
|
ax1 = plt.subplot(grid_here1[0])
|
|
|
|
roc_wo_female(color, ax1, tp_02_all, tp_012_all, lw, 'black', 'black',
|
|
title_color='black', color_e = color_e) # colors_w[ff]
|
|
# time_interp, array2 = interp_arrays(array2_0[::-1], array2_1[::-1], step=0.01)
|
|
|
|
plt.fill_between(tp_02_all,
|
|
tp_02_all,
|
|
tp_012_all,
|
|
color=colors_w[ff], alpha=0.8)
|
|
|
|
roc_female(ax1, color, fp_all, tp_01_all, lw, 'black', 'black',
|
|
title_color='black') # colors_wo[ff]
|
|
plt.fill_between(fp_all,
|
|
fp_all,
|
|
tp_01_all,
|
|
color=colors_wo[ff], alpha=1)
|
|
ax1.set_xlabel('False-Positive Rate ') #: 0
|
|
ax1.set_ylabel('Correct-Detection Rate ') # 01
|
|
ax1.set_title('') #: 0
|
|
################################################
|
|
# part with the ROC declining
|
|
ax0 = plt.subplot(grid_here2[0])
|
|
distance_cm = np.arange(0, 200, 0.2)
|
|
|
|
values0 = [1, 0.01, 0.001, 0.0005, 0.0001, 0.00005, 0.00001]
|
|
values1 = [0, 20, 30, 50, 100, 125, 215]
|
|
values0 = [2.4, 0.01, 0.001, 0.0001, 0.00034]
|
|
values1 = [3, 10, 28.75, 88.275, 177]
|
|
# ax0.plot(distance_cm, np.exp(-distance_cm), label = 'exponentiel')
|
|
# ax0.scatter(values1,values0, label = 'visual labels')
|
|
# ich glaube das ist eine umrechnung von prozent
|
|
factor = 9.793241127295891
|
|
distance_changed = 1 / ((distance_cm) ** 3) # /10
|
|
xlim_dist = core_xlim_dist_roc()
|
|
distances_mv = c_to_dist(distance_cm, convert='dist_to_contrast')
|
|
#distances_mv = c_to_dist_reverse(distance_cm) # distance_changed*factor
|
|
ax0.plot(distance_cm, distances_mv, label='cubed', color='black')
|
|
ax0.set_xlim(xlim_dist)
|
|
ax0.set_ylabel('EOD Amplitude\n [mV]')
|
|
ax0.set_yticks([])
|
|
test = False
|
|
if test:
|
|
test_distances()
|
|
# embed()
|
|
# c1 = 10 / frame_cell.c1 ** (1 / 3)
|
|
ax0.set_yscale('log')
|
|
ax0.set_ylim(0,2)
|
|
#ax0.set_yticks([])
|
|
# ax0.set_ylim([10**(-4),10**0, ])
|
|
# 1/distance_cm** (1 / float(n)
|
|
# plt.legend()
|
|
# plt.show()
|
|
# embed()
|
|
ax1 = plt.subplot(grid_here2[1])
|
|
for c, cell in enumerate(cells_chosen):
|
|
# grid0 = gridspec.GridSpecFromSubplotSpec(1, 1, wspace=0.2, hspace=0.35,
|
|
# subplot_spec=grid[c])# height_ratios=[1, 0.7, 1, 1],
|
|
|
|
# ax0_0 = plt.subplot(grid0[0])
|
|
# ax0_1 = plt.subplot(grid0[1])
|
|
# ax0_2 = plt.subplot(grid0[2])
|
|
# gs = grid_here[:,1].get_gridspec()
|
|
# for ax in grid_here[:,1]:
|
|
# ax.remove()
|
|
# axbig = fig.add_subplot(gs[1:, -1])
|
|
|
|
# ax1.set_aspect('equal')
|
|
# grid_here = [ax0_0,ax0_1 ,ax0_2]
|
|
for f, frame_name in enumerate(frame_names):
|
|
|
|
path = load_folder_name('calc_ROC') + '/' + frame_name + '.csv'
|
|
# frame = pd.read_csv(path)
|
|
if os.path.exists(path):
|
|
frame = pd.read_csv(path)
|
|
all_nonlin = all_lins[
|
|
0] # 'amp_B1&B1Harm&B2&B2Harm&B1-B2&B1+B2/10_mean(012-0102_012-0102)_norm_01B1+02B2_mean'
|
|
title = cut_title(frame_name, datapoints=50)
|
|
# if f == 0:
|
|
# ax0.set_title(cell[0:13] + '\n cv ' + str(np.round(np.mean(frame_cell.cv_0.unique()), 2)),
|
|
# color=colr[col_pos], fontsize=8)
|
|
|
|
# cells = frame.sort_values(by='cv_0').cell.unique()
|
|
path_ref = load_folder_name(
|
|
'calc_ROC') + '/' + 'calc_ROC_contrasts-ROCmodel_contrasts1_diagonal1_FrF1rel_0.33_FrF2rel_0.67_C2_0.1_C1_0.02_len_25_nfft_32768_trialsnr_20_mult_minimum_1temporal.csv'
|
|
frame_ref = pd.read_csv(path_ref)
|
|
frame_ref = frame_ref.sort_values(by='cv_0')
|
|
colr = [cm(float(i) / (len(frame_ref))) for i in range(len(frame_ref))]
|
|
cells_sorted = frame_ref.cell.unique()
|
|
col, row = find_row_col(cells, row=4)
|
|
# fig, ax = plt.subplots(row, col, figsize=(12, 5), constrained_layout=True, sharex=True,
|
|
# sharey=True) # sharex = True,sharex=True,
|
|
# ax0 = ax.flatten()
|
|
# for c, cell in enumerate(cells):
|
|
frame_cell = frame[frame.cell == cell]
|
|
# plt.suptitle(title + ' \n' + cell[0:13] + ' cv ' + str(np.round(np.mean(frame_cell.cv_0.unique()), 2)))
|
|
|
|
# ax2 = plt.subplot(grid0[4])
|
|
axs = [ax1]
|
|
colors = ['lightgrey', 'grey', 'black']
|
|
|
|
label_f = ['CMS: 20n with female', 'CLS: 100n with female',
|
|
'LS: 1000n with female', ]
|
|
label_f_wo = ['CMS: 20n without female', 'CLS: 100n without female',
|
|
'LS: 1000n without female', ]
|
|
label_f = ['with female', 'CLS: 100n with female',
|
|
'LS: 1000n with female', ]
|
|
label_f_wo = ['without female', 'CLS: 100n without female',
|
|
'LS: 1000n without female', ]
|
|
|
|
labels_w = [label_f[f], label_f[f]]
|
|
labels_wo = [label_f_wo[f], label_f_wo[f]]
|
|
for a, ax in enumerate(axs):
|
|
# if a != 3:
|
|
# grid_here[f].axvline(x_pos[f], color='grey', linestyle='--', linewidth=0.5)
|
|
# ax.plot(ranges[f],[0.52+0.01*f, 0.52+0.01*f], color = colors_range[f])
|
|
if len(frame_cell) > 0:
|
|
|
|
# if a != 3:
|
|
# embed()
|
|
# cell_recording = model_cells.cell.iloc[13]
|
|
# embed()
|
|
#baseline, b, eod_size, = load_eod_size(cell)
|
|
#c1 = c_to_dist(eod_size * 0.5 * frame_cell.c1)
|
|
c1 = c_dist_recalc_func(eod_size_change = True,mult_eod = 0.5,frame_cell=frame_cell, c_nrs=frame_cell.c1, cell=cell, c_dist_recalc=True)
|
|
lw = lw_roc(lw)
|
|
s = 15#100
|
|
if female == 'w_female':
|
|
|
|
ax.plot(c1, frame_cell['auci_02_012'], color=colors_w[f],
|
|
label=labels_w[f],
|
|
clip_on=True, linewidth=lw)
|
|
|
|
elif female == 'wo_female':
|
|
ax.plot(c1, frame_cell['auci_base_01'], color=colors_wo[f],
|
|
label=labels_wo[f],
|
|
clip_on=True, linewidth=lw) # , linestyle='--'
|
|
|
|
else:
|
|
plt_area_between(frame_cell, ax, ax, colors_w, colors_wo, f,
|
|
labels_with_female=labels_w[a],
|
|
labels_without_female='', lw=lw_roc(lw),
|
|
arrow=True)
|
|
# embed()
|
|
ax.set_xlim(xlim_dist)
|
|
ax.set_ylim(0, 0.52)
|
|
ax.set_yticks_delta(0.1)
|
|
# plt_area_between(frame_cell, ax, ax, colors_w, colors_wo, f, labels_with_female= labels_w[a],labels_without_female =labels_wo[a])
|
|
pos = np.argmin(np.abs(frame_cell.c1 - a_f1))
|
|
# embed()
|
|
|
|
if f == 0:
|
|
#baseline, b, eod_size, = load_eod_size(cell)
|
|
c1 = c_dist_recalc_func(frame_cell=frame_cell, c_nrs=[frame_cell.c1.iloc[pos]], cell=cell, c_dist_recalc=True)
|
|
#embed()
|
|
#c1 = c_to_dist(eod_size * 0.5 * frame_cell.c1.iloc[pos])
|
|
|
|
if female == 'wo_female':
|
|
ax.scatter(c1, frame_cell['auci_base_01'].iloc[pos],
|
|
clip_on=True, color=colors_wo[0],
|
|
s=s) # , facecolor = 'none'
|
|
elif female == 'w_female':
|
|
ax.scatter(c1, frame_cell['auci_02_012'].iloc[pos],
|
|
clip_on=True, color=colors_w[0],
|
|
s=s) # ,facecolor='none'
|
|
else:
|
|
ax.scatter(c1, frame_cell['auci_base_01'].iloc[pos],
|
|
clip_on=True, color=colors_wo[0],
|
|
s=s) # , facecolor = 'none'
|
|
ax.scatter(c1, frame_cell['auci_02_012'].iloc[pos],
|
|
clip_on=True, color=colors_w[0],
|
|
s=s) # , facecolor='none'
|
|
|
|
# plt.plot(frame_cell.c1, frame_cell['auci_02_012'], color=colors_w[0],
|
|
# )
|
|
# plt.plot(frame_cell.c1, frame_cell['auci_base_01'], color=colors_wo[0],
|
|
# )
|
|
|
|
# plt.scatter(frame_cell.c1.iloc[pos], frame_cell['auci_02_012'].iloc[pos], color=colors_w[0], facecolor='none')
|
|
|
|
# plt.scatter(frame_cell.c1.iloc[pos], frame_cell['auci_base_01'].iloc[pos], color=colors_wo[0], facecolor='none')
|
|
|
|
# ax0.fill_between(frame_cell.c1, frame_cell['auci_02_012'], upper, color='red', edgecolor=None,
|
|
# zorder=2, alpha=0.05)
|
|
# ax0.fill_between(frame_cell.c1, frame_cell['auci_base_01'],
|
|
# ax.axhline(0, linestyle='--', color='grey', linewidth=0.5)
|
|
# embed()
|
|
col_pos = np.where(cells_sorted == cell)[0][0]
|
|
# embed()
|
|
|
|
# embed()
|
|
|
|
if a == 0:
|
|
ax.legend(loc=(0.6, 0.7)) # , fontsize = 8, handlelength = 0.5
|
|
else:
|
|
ax.legend(loc=(0.6, 0.6)) # , fontsize = 8, handlelength = 0.5
|
|
ax.set_ylim(0, 0.52)
|
|
if c != 0:
|
|
remove_yticks(ax)
|
|
# remove_tick_ymarks(ax2)
|
|
ax.spines['right'].set_visible(False)
|
|
ax.spines['top'].set_visible(False)
|
|
# embed()
|
|
# ax.spines['top'].
|
|
# ax.spines['left' == False]
|
|
# else:
|
|
# #ax2.set_ylabel('B1+B2')
|
|
# if f == 1:
|
|
ax1.set_ylabel(core_auc_label())#
|
|
# ax0_2.set_ylabel('Determinant')
|
|
# ax0_0.set_xlabel('mV/cm')
|
|
# ax0_1.set_xlabel('mV/cm')
|
|
# ax0_2.set_xlabel('mV/cm')
|
|
ax1.set_xlabel('mV/cm')
|
|
ax1.set_xlabel(core_distance_label())
|
|
#embed()
|
|
# remove_tick_ymarks(ax0_1)
|
|
# remove_tick_ymarks(ax1)
|
|
# remove_xticks(ax0_0)
|
|
# remove_xticks(ax0_1)
|
|
|
|
col = [cm(float(i) / (len(frame))) for i in range(len(frame))]
|
|
|
|
|
|
|
|
ax = plt.gcf().axes
|
|
#embed()
|
|
|
|
if f_nr == 0:
|
|
fig.tag(ax[0:3], xoffs = -6.5, yoffs = 1.5,)#0.7
|
|
plt.subplots_adjust(left=0.03, wspace=0.3)
|
|
save_visualization(frame_name, False, show_anything=False, pdf=True,
|
|
jpg=True, png=False,
|
|
counter_contrast=0, savename='', add='_' + female)
|
|
|
|
plt.show()
|
|
|
|
|
|
def core_distance_label():
|
|
return 'Intruder Distance [cm]'
|
|
|
|
|
|
def core_auc_label():
|
|
return 'AUC'#'Determinant'
|
|
|
|
|
|
def core_xlim_dist_roc():
|
|
xlim_dist = [0, 225]
|
|
return xlim_dist
|
|
|
|
|
|
def lw_roc(lw):
|
|
lw = 0.75 # 2
|
|
return lw
|
|
|
|
|
|
def plt_several_ROC_declining_one_with_ROC_single_in_one(bt=0.12, lf=0.07, females=[], color_01='green', color_02='red',
|
|
color_012='orange', figsize=(12, 5.5), frame_names=[
|
|
'calc_ROC_contrasts-ROCmodel_contrasts1_diagonal1_FrF1rel_0.33_FrF2rel_0.67_C2_0.1_LenNrs_20_1Nrs_0.0001_LastNrs_0.1_len_25_nfft_32768_trialsnr_20_mult_minimum_1temporal',
|
|
'calc_ROC_contrasts-ROCmodel_contrasts1_diagonal1_FrF1rel_0.33_FrF2rel_0.67_C2_0.1_LenNrs_20_1Nrs_0.0001_LastNrs_0.1_len_25_nfft_32768_trialsnr_100_mult_minimum_1temporal',
|
|
'calc_ROC_contrasts-ROCmodel_contrasts1_diagonal1_FrF1rel_0.33_FrF2rel_0.67_C2_0.1_LenNrs_20_1Nrs_0.0001_LastNrs_0.1_len_25_nfft_32768_trialsnr_1000_mult_minimum_1temporal'],
|
|
reshuffled='reshuffled', datapoints=1000, dev=0.0005,
|
|
a_f1s=[0.03], printing=False, plus_q='minus', way='absolut',
|
|
stimulus_length=0.5, runs=3, trials_nr=500, nfft=int(2 ** 15),
|
|
beat='', nfft_for_morph=4096 * 4, gain=1, fish_jammer='Alepto',
|
|
us_name='', wr=[1.6, 2]):
|
|
#
|
|
#plot_style()
|
|
#default_settings(width=12, ts=12, ls=13, fs=11)
|
|
only_extra_nonlin = 'amp_B1Harm&B2Harm&B1-B2&B1+B2_mean(012-0102_012-0102)_norm_01B1+02B2_mean'
|
|
try:
|
|
diagonal = frame_names[0].split('contrasts_')[1].split('_FrF1rel')[0]
|
|
except:
|
|
print('split something')
|
|
freq1_ratio = float(frame_names[0].split('FrF1rel_')[1].split('_FrF2rel')[0])
|
|
freq2_ratio = float(frame_names[0].split('FrF2rel_')[1].split('_C2')[0])
|
|
|
|
cm = plt.get_cmap("hsv")
|
|
cells = ["2013-01-08-aa-invivo-1"]#, "2012-12-13-an-invivo-1", "2012-06-27-an-invivo-1", "2012-12-21-ai-invivo-1","2012-06-27-ah-invivo-1", ]
|
|
|
|
cells_chosen = ['2013-01-08-aa-invivo-1']#, "2012-06-27-ah-invivo-1","2014-06-06-ac-invivo-1" ]#'2012-06-27-an-invivo-1',
|
|
diff_012_01_02_0 = ['amp_B1_012-01-02+0_norm_01B1+02B2_mean',
|
|
'amp_B2_012-01-02+0_norm_01B1+02B2_mean',
|
|
'amp_B1_harms__012-01-02+0_norm_01B1+02B2_mean',
|
|
'amp_B2_harms__012-01-02+0_norm_01B1+02B2_mean',
|
|
'amp_B1-B2_012-01-02+0_norm_01B1+02B2_mean',
|
|
|
|
'amp_B1Harm&B2Harm&B1-B2&B1+B2_012-01-02+0_norm_01B1+02B2_mean',
|
|
'amp_B1&B1Harm&B2&B2Harm&B1-B2&B1+B2_012-01-02+0_norm_01B1+02B2_mean']
|
|
|
|
all_lins = ['auci02_012-auci_base_01','amp_B1+B2_012-01-02+0_norm_01B1+02B2_mean','amp_B1&B1Harm&B2&B2Harm&B1-B2&B1+B2_012-01-02+0_norm_01B1+02B2_mean']#'amp_B1_harms__012-01-02+0_norm_01B1+02B2_mean','amp_B1&B1Harm&B2&B2Harm&B1-B2&B1+B2_012-01-02+0_norm_01B1+02B2_mean']
|
|
ylabel = ['Determinant','B1+B2 Nonlin','All nonlin']
|
|
|
|
#embed()
|
|
x_pos = [10**-2,(10**-2)/2,10**-3,]
|
|
ranges = [[0.05,0.002], [0.04,0.001], [0.03,0.0004]]
|
|
colors_range = ['darkblue', 'blue', 'lightblue']
|
|
#grid = gridspec.GridSpec(1, 1, wspace=0.2, hspace=0.2, left=0.15, top=0.8, bottom=bt,
|
|
# right=0.95) #, width_ratios = [1,1,1,0.5,1] height_ratios = [1,6]bottom=0.25, top=0.8,
|
|
#grid1 = gridspec.GridSpecFromSubplotSpec(3, 1, wspace=0.3, hspace=0.75,
|
|
# subplot_spec=grid[-1])
|
|
|
|
# plot_style()
|
|
# default_settings(ts=13, ls=13, fs=13, lw = 1)
|
|
plt.rcParams['lines.linewidth'] = 1
|
|
model_cells = pd.read_csv(load_folder_name('calc_model_core') + "/models_big_fit_d_right.csv")
|
|
fig = plt.figure(figsize=figsize)
|
|
grid_here = gridspec.GridSpec(1, 2, hspace = 0.6, wspace=0.16, left=lf, top=0.92, bottom=bt,
|
|
right=0.98, width_ratios = wr) # 1.3,1
|
|
grid_here1 = gridspec.GridSpecFromSubplotSpec(1, 1, wspace=0.3, hspace=0.75,
|
|
subplot_spec= grid_here [0])
|
|
grid_here2 = gridspec.GridSpecFromSubplotSpec(2, 1, wspace=0.3, hspace=0.3,
|
|
subplot_spec= grid_here [1], height_ratios = [1.5,3])
|
|
if len(cells) < 1:
|
|
cells = len(model_cells)
|
|
#c_with_female =
|
|
#embed()
|
|
colors_wo = [color_01]#['limegreen', 'green', 'darkgreen']
|
|
colors_w = [color_012]#['orange', 'darkorange','goldenrod']
|
|
for cell_here in cells:
|
|
# sachen die ich variieren will
|
|
###########################################
|
|
single_waves = ['_SeveralWave_'] # , '_SingleWave_']
|
|
####### VARY HERE
|
|
for single_wave in single_waves:
|
|
if single_wave == '_SingleWave_':
|
|
a_f2s = [0] # , 0,0.2
|
|
else:
|
|
a_f2s = [0.1]
|
|
for a_f2 in a_f2s:
|
|
# ,0.05,0.01, 0.005, 0.1, 0.2] # 0.001,
|
|
for a_f1 in a_f1s:
|
|
a_frs = [1]
|
|
titles_amp = ['base eodf'] # ,'baseline to Zero',]
|
|
for a, a_fr in enumerate(a_frs):
|
|
|
|
model_params = model_cells[model_cells['cell'] == cell_here].iloc[0]
|
|
# model_params = model_cells.iloc[cell_nr]
|
|
|
|
# embed()
|
|
eod_fr = model_params['EODf'] # .iloc[0]
|
|
offset = model_params.pop('v_offset')
|
|
cell = model_params.pop('cell')
|
|
print(cell)
|
|
SAM, adapt_offset, cell_recording, constant_reduction, damping, damping_type, dent_tau_change, exponential, f1, f2, fish_emitter, fish_receiver, fish_morph_harmonics_var, lower_tol, mimick, n, phase_right, phaseshift_fr, sampling_factor, upper_tol, zeros = default_model0()
|
|
# in case you want a different sampling here we can adujust
|
|
time_array, sampling, deltat = deltat_choice(model_params, sampling_factor, eod_fr,
|
|
stimulus_length)
|
|
|
|
# generate the eod_fish_r in the four mimick variants (copy, thunderfish, mimick, just sinus)
|
|
eod_fish_r, deltat, eod_fr, time_array = eod_fish_r_generation(time_array, eod_fr, a_fr,
|
|
stimulus_length, phaseshift_fr,
|
|
cell_recording, zeros, mimick,
|
|
sampling, fish_receiver, deltat,
|
|
nfft, nfft_for_morph,
|
|
fish_morph_harmonics_var=fish_morph_harmonics_var,
|
|
beat=beat)
|
|
sampling = 1 / deltat
|
|
multiple = 0
|
|
slope = 0
|
|
add = 0
|
|
plus = 0
|
|
sig_val = (7, 1)
|
|
variant = 'sinz'
|
|
if exponential == '':
|
|
v_exp = 1
|
|
exp_tau = 0.001
|
|
# prepare for adapting offset due to baseline modification
|
|
|
|
baseline_with_wave_damping, baseline_without_wave = prepare_baseline_array(time_array, eod_fr,
|
|
nfft_for_morph,
|
|
phaseshift_fr,
|
|
mimick, zeros,
|
|
cell_recording,
|
|
sampling,
|
|
stimulus_length,
|
|
fish_receiver,
|
|
deltat, nfft,
|
|
damping_type,
|
|
damping, us_name,
|
|
gain, beat=beat,
|
|
fish_morph_harmonics_var=fish_morph_harmonics_var)
|
|
|
|
|
|
color0 = 'green' # 'orange'
|
|
color01 = 'blue'
|
|
color02 = 'red'
|
|
color012 = 'orange'
|
|
color01_2 = 'purple'
|
|
|
|
#fig = plt.figure(figsize=(11.5, 5.4))
|
|
# embed()
|
|
grid = gridspec.GridSpec(1, 2, wspace=0.2, left=0.07, top=0.8, bottom=0.12,
|
|
right=0.98, height_ratios=[1], width_ratios=[4, 2.4]) # 1.3,1
|
|
|
|
grid0 = gridspec.GridSpecFromSubplotSpec(3, 2, wspace=0.18, hspace=0.1,
|
|
subplot_spec=grid[0],
|
|
height_ratios=[1, 0.6, 1]) # ,0.4,1.2
|
|
|
|
grid1 = gridspec.GridSpecFromSubplotSpec(1, 1,
|
|
subplot_spec=grid[1]) # wspace=0.5, hspace=0.55,
|
|
save_name_roc = 'decline_ROC_examples_trial_nr.csv'
|
|
version_comp, subfolder, mod_name_slash, mod_name, subfolder_path = find_code_vs_not()
|
|
|
|
for run in range(runs):
|
|
print(run)
|
|
t1 = time.time()
|
|
if (os.path.exists(save_name_roc)) | (version_comp == 'public'):
|
|
trials_nr_base = 1
|
|
stimulus_length = 1
|
|
model_params = model_cells[model_cells['cell'] == cell_here].iloc[0]
|
|
eod_fr = model_params['EODf'] # .iloc[0]
|
|
offset = model_params.pop('v_offset')
|
|
cell = model_params.pop('cell')
|
|
time_array, sampling, deltat = deltat_choice(model_params, sampling_factor, eod_fr,
|
|
stimulus_length)
|
|
eod_fish_r, deltat, eod_fr, time_array = eod_fish_r_generation(time_array, eod_fr, a_fr,
|
|
stimulus_length,
|
|
phaseshift_fr,
|
|
cell_recording, zeros,
|
|
mimick, sampling,
|
|
fish_receiver, deltat,
|
|
nfft, nfft_for_morph,
|
|
fish_morph_harmonics_var=fish_morph_harmonics_var,
|
|
beat=beat)
|
|
|
|
else:
|
|
trials_nr_base = trials_nr
|
|
#embed()
|
|
spikes_base = [[]] * trials_nr_base
|
|
for t in range(trials_nr_base):
|
|
# get the baseline properties here
|
|
# baseline_after,spikes_base,rate_adapted, rate_baseline_before, rate_baseline_after, np.array(spike_times), stimulus_power, v_dent_output[int(0.05 / deltat):-1], offset, v_mem_output
|
|
stimulus = eod_fish_r
|
|
stimulus_base = eod_fish_r
|
|
if 'Zero' in titles_amp[a]:
|
|
power_here = 'sinz' + '_' + zeros
|
|
else:
|
|
power_here = 'sinz'
|
|
|
|
|
|
cvs, adapt_output, baseline_after_b, _, rate_adapted_b, rate_baseline_before_b, rate_baseline_after_b, \
|
|
spikes_base[t], _, _, offset_new, _,noise_final = simulate(cell, offset, stimulus, f1,
|
|
n, power_here,
|
|
adapt_offset=adapt_offset,
|
|
add=add, alpha=alpha,
|
|
reshuffle=reshuffled,
|
|
lower_tol=lower_tol,
|
|
upper_tol=upper_tol,
|
|
v_exp=v_exp, exp_tau=exp_tau,
|
|
dent_tau_change=dent_tau_change,
|
|
alter_taus=constant_reduction,
|
|
exponential=exponential,
|
|
exponential_mult=1,
|
|
exponential_plus=plus,
|
|
exponential_slope=slope,
|
|
sig_val=sig_val, j=f2,
|
|
deltat=deltat, t=t,
|
|
**model_params)
|
|
|
|
if t == 0:
|
|
# here we record the changes in the offset due to the adaptation
|
|
change_offset = offset - offset_new
|
|
# and we subsequently reset the offset to be the new adapted for all subsequent trials
|
|
offset = offset_new * 1
|
|
|
|
if printing:
|
|
print('Baseline time' + str(time.time() - t1))
|
|
#embed()
|
|
base_cut, mat_base = find_base_fr(spikes_base, deltat, stimulus_length, time_array, dev=dev)
|
|
|
|
fr = np.mean(base_cut)
|
|
#if 'diagonal' in diagonal:
|
|
|
|
#two_third_fr = fr * freq2_ratio
|
|
#freq1_ratio = (1 - freq2_ratio)
|
|
#third_fr = fr * freq1_ratio
|
|
#else:
|
|
two_third_fr = fr * freq2_ratio
|
|
third_fr = fr * freq1_ratio
|
|
|
|
if plus_q == 'minus':
|
|
two_third_fr = -two_third_fr
|
|
third_fr = -third_fr
|
|
freqs2 = [eod_fr + two_third_fr] # , eod_fr - third_fr, two_third_fr,
|
|
# third_fr,
|
|
# two_third_eodf, eod_fr - two_third_eodf,
|
|
# third_eodf, eod_fr - third_eodf, ]
|
|
freqs1 = [
|
|
eod_fr + third_fr] # , eod_fr - two_third_fr, third_fr,two_third_fr,third_eodf, eod_fr - third_eodf,two_third_eodf, eod_fr - two_third_eodf, ]
|
|
|
|
sampling_rate = 1 / deltat
|
|
base_cut, mat_base, smoothed0, mat0 = find_base_fr2(sampling_rate, spikes_base, deltat,
|
|
stimulus_length, time_array, dev=dev)
|
|
fr = np.mean(base_cut)
|
|
frate, isis_diff = ISI_frequency(time_array, spikes_base[0], fill=0.0)
|
|
isi = np.diff(spikes_base[0])
|
|
cv0 = np.std(isi) / np.mean(isi)
|
|
cv1 = np.std(frate) / np.mean(frate)
|
|
#embed()
|
|
for ff, freq1 in enumerate(freqs1):
|
|
|
|
if (os.path.exists(save_name_roc)) | (version_comp == 'public'):
|
|
frame = pd.read_csv(save_name_roc)
|
|
tp_012_all = frame['tp_012'] # = tp_012_all
|
|
tp_01_all = frame['tp_01'] # = tp_01_all
|
|
tp_02_all = frame['tp_02'] # = tp_02_all
|
|
fp_all = frame['fp_all'] # = fp_all
|
|
threshhold = frame['threshhold'] # = threshhold
|
|
else:
|
|
freq1 = [freq1]
|
|
freq2 = [freqs2[ff]]
|
|
# time_var = time.time()
|
|
|
|
# if printing:
|
|
# print(cell )
|
|
# f_corr = create_beat_corr(np.array([freq1[f1]]), np.array([eod_fr]))
|
|
# create the second eod_fish1 array analogous to the eod_fish_r array
|
|
t1 = time.time()
|
|
phaseshift_f1, phaseshift_f2 = get_phaseshifts(a_f1, a_f2, phase_right, phaseshift_fr)
|
|
|
|
eod_fish1, time_fish_e = eod_fish_e_generation(time_array, a_f1, freq1, f1,
|
|
nfft_for_morph, phaseshift_f1,
|
|
cell_recording,
|
|
fish_morph_harmonics_var, zeros, mimick,
|
|
fish_emitter, sampling,
|
|
stimulus_length, thistype='emitter')
|
|
eod_fish2, time_fish_j = eod_fish_e_generation(time_array, a_f2, freq2, f2,
|
|
nfft_for_morph, phaseshift_f2,
|
|
cell_recording,
|
|
fish_morph_harmonics_var, zeros, mimick,
|
|
fish_jammer, sampling,
|
|
stimulus_length, thistype='jammer')
|
|
|
|
eod_stimulus = eod_fish1 + eod_fish2
|
|
|
|
v_mems,offset_new, mat01, mat02, mat012, smoothed01, smoothed02, smoothed012, stimulus_01, stimulus_02, stimulus_012, mat05_01, spikes_01, mat05_02, spikes_02, mat05_012, spikes_012 = get_arrays_for_three(
|
|
cell, a_f2, a_f1,
|
|
SAM, eod_stimulus, eod_fish_r, freq2, eod_fish1, eod_fish_r,
|
|
eod_fish2, stimulus_length,
|
|
baseline_with_wave_damping, baseline_without_wave,
|
|
offset, model_params, n, variant, t, adapt_offset,
|
|
upper_tol, lower_tol, dent_tau_change, constant_reduction,
|
|
exponential, plus, slope, add,
|
|
deltat, alpha, sig_val, v_exp, exp_tau, f2,
|
|
trials_nr, time_array,
|
|
f1, freq1, damping_type,
|
|
gain, eod_fr, damping, us_name, dev=dev, reshuffle=reshuffled)
|
|
if printing:
|
|
print('Generation process' + str(time.time() - t1))
|
|
|
|
##################################
|
|
# power spectrum
|
|
# plt_power_spectrum(female, nfft, smoothed012,
|
|
# smoothed01, smoothed02, smoothed0, sampling_rate)
|
|
|
|
# embed()
|
|
array0 = [mat_base]
|
|
|
|
array01 = [mat05_01]
|
|
|
|
array02 = [mat05_02]
|
|
array012 = [mat05_012]
|
|
t_off = 10
|
|
|
|
position_diff = 0
|
|
results_diff = pd.DataFrame()
|
|
results_diff['f1'] = freq1
|
|
results_diff['f2'] = freq2
|
|
results_diff['f0'] = eod_fr
|
|
trials, results_diff, tp_012_all, tp_01_all, tp_02_all, fp_all, roc_01, roc_0, roc_02, roc_012, threshhold = calc_auci_pd(
|
|
results_diff, position_diff, array012, array01, array02, array0, t_off=t_off,
|
|
way=way, printing=True, datapoints=datapoints, f0='f0', sampling=sampling)
|
|
frame = pd.DataFrame()
|
|
frame['tp_012'] = tp_012_all
|
|
frame['tp_01'] = tp_01_all
|
|
frame['tp_02'] = tp_02_all
|
|
frame['fp_all'] = fp_all
|
|
frame['threshhold'] = threshhold
|
|
|
|
if version_comp == 'develop':
|
|
frame.to_csv(save_name_roc)
|
|
|
|
#threshhold
|
|
#embed()
|
|
|
|
|
|
if run == 0:
|
|
color = 'black'
|
|
lw = 1
|
|
else:
|
|
color = 'grey'
|
|
lw = 0.5
|
|
#if 'wo_female' in female:
|
|
|
|
#color_base = color_base ,color_01 = color_01, color_02 = color_02, color_012 = color_012,
|
|
for female in females:
|
|
if female == 'w_female':
|
|
ax1 = plt.subplot(grid_here1[0])
|
|
roc_wo_female(color, ax1, tp_02_all, tp_012_all, lw, color_02, color_012,title_color = 'black' )#colors_w[ff]
|
|
#time_interp, array2 = interp_arrays(array2_0[::-1], array2_1[::-1], step=0.01)
|
|
|
|
plt.fill_between(tp_02_all,
|
|
tp_02_all,
|
|
tp_012_all,
|
|
color=colors_w[ff], alpha=0.8)
|
|
ax1.set_title('') #: 0
|
|
ax1.set_xlabel('False-Positive Rate ') #: 0
|
|
ax1.set_ylabel('Correct-Detection Rate ') # 01
|
|
elif female == 'wo_female':
|
|
ax1 = plt.subplot(grid_here1[0])
|
|
#embed()
|
|
roc_female(ax1, color, fp_all, tp_01_all, lw, 'black', 'black',title_color = 'black')#colors_wo[ff]
|
|
plt.fill_between(fp_all,
|
|
fp_all,
|
|
tp_01_all,
|
|
color=colors_wo[ff], alpha=0.8)
|
|
ax1.set_xlabel('False-Positive Rate ') #: 0
|
|
ax1.set_ylabel('Correct-Detection Rate ') # 01
|
|
ax1.set_title('') #: 0
|
|
else:
|
|
ax1 = plt.subplot(grid_here1[0])
|
|
|
|
|
|
|
|
roc_wo_female(color, ax1, tp_02_all, tp_012_all, lw, 'black', 'black',
|
|
title_color='black') # colors_w[ff]
|
|
# time_interp, array2 = interp_arrays(array2_0[::-1], array2_1[::-1], step=0.01)
|
|
|
|
plt.fill_between(tp_02_all,
|
|
tp_02_all,
|
|
tp_012_all,
|
|
color=colors_w[ff], alpha=0.8)
|
|
|
|
roc_female(ax1, color, fp_all, tp_01_all, lw, 'black', 'black',
|
|
title_color='black') # colors_wo[ff]
|
|
plt.fill_between(fp_all,
|
|
fp_all,
|
|
tp_01_all,
|
|
color=colors_wo[ff], alpha=1)
|
|
ax1.set_xlabel('False-Positive Rate ') #: 0
|
|
ax1.set_ylabel('Correct-Detection Rate ') # 01
|
|
ax1.set_title('') #: 0
|
|
################################################
|
|
# part with the ROC declining
|
|
ax0 = plt.subplot(grid_here2[0])
|
|
distance = np.arange(0, 200, 0.2)
|
|
|
|
values0 = [1,0.01,0.001,0.0005, 0.0001, 0.00005, 0.00001]
|
|
values1 = [0,20, 30, 50, 100, 125,215]
|
|
values0 = [2.4, 0.01, 0.001, 0.0001,0.00034]
|
|
values1 = [3, 10, 28.75, 88.275,177]
|
|
#ax0.plot(distance, np.exp(-distance), label = 'exponentiel')
|
|
#ax0.scatter(values1,values0, label = 'visual labels')
|
|
# ich glaube das ist eine umrechnung von prozent
|
|
factor = 9.793241127295891
|
|
distance_changed = 1 / ((distance) ** 3) # /10
|
|
xlim_dist = [0,70]
|
|
distances_mv = c_to_dist_reverse(distance)#distance_changed*factor
|
|
ax0.plot(distance, distances_mv, label='cubed', color='black')
|
|
ax0.set_xlim(xlim_dist)
|
|
ax0.set_ylabel('EOD Amplitude')
|
|
ax0.set_yticks([])
|
|
test = False
|
|
if test:
|
|
test_vals()
|
|
#embed()
|
|
#c1 = 10 / frame_cell.c1 ** (1 / 3)
|
|
ax0.set_yscale('log')
|
|
ax0.set_yticks([])
|
|
#ax0.set_ylim([10**(-4),10**0, ])
|
|
#1/distance** (1 / float(n)
|
|
#plt.legend()
|
|
#plt.show()
|
|
#embed()
|
|
ax1 = plt.subplot(grid_here2[1])
|
|
for c,cell in enumerate(cells_chosen ):
|
|
#grid0 = gridspec.GridSpecFromSubplotSpec(1, 1, wspace=0.2, hspace=0.35,
|
|
# subplot_spec=grid[c])# height_ratios=[1, 0.7, 1, 1],
|
|
|
|
#ax0_0 = plt.subplot(grid0[0])
|
|
#ax0_1 = plt.subplot(grid0[1])
|
|
#ax0_2 = plt.subplot(grid0[2])
|
|
#gs = grid_here[:,1].get_gridspec()
|
|
#for ax in grid_here[:,1]:
|
|
# ax.remove()
|
|
#axbig = fig.add_subplot(gs[1:, -1])
|
|
|
|
#ax1.set_aspect('equal')
|
|
#grid_here = [ax0_0,ax0_1 ,ax0_2]
|
|
for f, frame_name in enumerate(frame_names):
|
|
|
|
|
|
path = load_folder_name('calc_ROC') + '/' + frame_name + '.csv'
|
|
#frame = pd.read_csv(path)
|
|
if os.path.exists(path):
|
|
frame = pd.read_csv(path)
|
|
all_nonlin = all_lins[0]#'amp_B1&B1Harm&B2&B2Harm&B1-B2&B1+B2/10_mean(012-0102_012-0102)_norm_01B1+02B2_mean'
|
|
title = cut_title(frame_name, datapoints = 50)
|
|
#if f == 0:
|
|
# ax0.set_title(cell[0:13] + '\n cv ' + str(np.round(np.mean(frame_cell.cv_0.unique()), 2)),
|
|
# color=colr[col_pos], fontsize=8)
|
|
|
|
#cells = frame.sort_values(by='cv_0').cell.unique()
|
|
path_ref = load_folder_name('calc_ROC') + '/' + 'calc_ROC_contrasts-ROCmodel_contrasts1_diagonal1_FrF1rel_0.33_FrF2rel_0.67_C2_0.1_C1_0.02_len_25_nfft_32768_trialsnr_20_mult_minimum_1temporal.csv'
|
|
frame_ref = pd.read_csv(path_ref)
|
|
frame_ref = frame_ref.sort_values(by='cv_0')
|
|
colr = [cm(float(i) / (len(frame_ref))) for i in range(len(frame_ref))]
|
|
cells_sorted = frame_ref.cell.unique()
|
|
col, row = find_row_col(cells, row=4)
|
|
#fig, ax = plt.subplots(row, col, figsize=(12, 5), constrained_layout=True, sharex=True,
|
|
# sharey=True) # sharex = True,sharex=True,
|
|
#ax0 = ax.flatten()
|
|
#for c, cell in enumerate(cells):
|
|
frame_cell = frame[frame.cell == cell]
|
|
#plt.suptitle(title + ' \n' + cell[0:13] + ' cv ' + str(np.round(np.mean(frame_cell.cv_0.unique()), 2)))
|
|
|
|
#ax2 = plt.subplot(grid0[4])
|
|
axs = [ax1]
|
|
colors = ['lightgrey','grey', 'black']
|
|
|
|
label_f = ['CMS: 20n with female','CLS: 100n with female','LS: 1000n with female',]
|
|
label_f_wo = ['CMS: 20n without female', 'CLS: 100n without female', 'LS: 1000n without female', ]
|
|
label_f = ['with female', 'CLS: 100n with female', 'LS: 1000n with female', ]
|
|
label_f_wo = ['without female', 'CLS: 100n without female', 'LS: 1000n without female', ]
|
|
|
|
labels_w = [label_f[f],label_f[f]]
|
|
labels_wo = [label_f_wo[f], label_f_wo[f]]
|
|
for a, ax in enumerate(axs):
|
|
#if a != 3:
|
|
#grid_here[f].axvline(x_pos[f], color='grey', linestyle='--', linewidth=0.5)
|
|
#ax.plot(ranges[f],[0.52+0.01*f, 0.52+0.01*f], color = colors_range[f])
|
|
if len(frame_cell)> 0:
|
|
|
|
#if a != 3:
|
|
#embed()
|
|
#cell_recording = model_cells.cell.iloc[13]
|
|
#embed()
|
|
#baseline, b, eod_size, = load_eod_size(cell)
|
|
#c1 = c_to_dist(eod_size * 0.5 * frame_cell.c1)
|
|
c1 = c_dist_recalc_func(frame_cell=frame_cell, c_nrs=frame_cell.c1, cell=cell, c_dist_recalc=True)
|
|
#embed()
|
|
if female == 'w_female':
|
|
|
|
ax.plot(c1, frame_cell['auci_02_012'], color=colors_w[f], label=labels_w[f],
|
|
clip_on=True, linewidth = 2)
|
|
|
|
elif female == 'wo_female':
|
|
ax.plot(c1, frame_cell['auci_base_01'], color=colors_wo[f], label=labels_wo[f],
|
|
clip_on=True, linewidth = 2) # , linestyle='--'
|
|
|
|
else:
|
|
plt_area_between(frame_cell, ax, ax, colors_w, colors_wo, f, labels_with_female= labels_w[a], talk = False, labels_without_female ='', lw = 0.75, arrow = True)
|
|
#embed()
|
|
ax.set_xlim(xlim_dist)
|
|
ax.set_ylim(0, 0.52)
|
|
ax.set_yticks_delta(0.1)
|
|
#plt_area_between(frame_cell, ax, ax, colors_w, colors_wo, f, labels_with_female= labels_w[a],labels_without_female =labels_wo[a])
|
|
pos = np.argmin(np.abs(frame_cell.c1 - a_f1))
|
|
#embed()
|
|
|
|
if f == 0:
|
|
#baseline, b, eod_size, = load_eod_size(cell)
|
|
#c1 = c_to_dist(eod_size * 0.5 * frame_cell.c1.iloc[pos])
|
|
c1 = c_dist_recalc_func(frame_cell=frame_cell, c_nrs=frame_cell.c1, cell=cell, c_dist_recalc=True)
|
|
s = 100
|
|
if female == 'wo_female':
|
|
ax.scatter(c1, frame_cell['auci_base_01'].iloc[pos], clip_on=True, color = colors_wo[0], s = s)#, facecolor = 'none'
|
|
elif female == 'w_female':
|
|
ax.scatter(c1, frame_cell['auci_02_012'].iloc[pos], clip_on=True, color=colors_w[0], s = s)#,facecolor='none'
|
|
else:
|
|
ax.scatter(c1, frame_cell['auci_base_01'].iloc[pos], clip_on=True, color = colors_wo[0], s = s)#, facecolor = 'none'
|
|
ax.scatter(c1, frame_cell['auci_02_012'].iloc[pos], clip_on=True, color=colors_w[0], s = s)#, facecolor='none'
|
|
|
|
#plt.plot(frame_cell.c1, frame_cell['auci_02_012'], color=colors_w[0],
|
|
# )
|
|
#plt.plot(frame_cell.c1, frame_cell['auci_base_01'], color=colors_wo[0],
|
|
# )
|
|
|
|
#plt.scatter(frame_cell.c1.iloc[pos], frame_cell['auci_02_012'].iloc[pos], color=colors_w[0], facecolor='none')
|
|
|
|
#plt.scatter(frame_cell.c1.iloc[pos], frame_cell['auci_base_01'].iloc[pos], color=colors_wo[0], facecolor='none')
|
|
|
|
#ax0.fill_between(frame_cell.c1, frame_cell['auci_02_012'], upper, color='red', edgecolor=None,
|
|
# zorder=2, alpha=0.05)
|
|
#ax0.fill_between(frame_cell.c1, frame_cell['auci_base_01'],
|
|
#ax.axhline(0, linestyle='--', color='grey', linewidth=0.5)
|
|
#embed()
|
|
col_pos = np.where(cells_sorted == cell)[0][0]
|
|
#embed()
|
|
|
|
|
|
#embed()
|
|
|
|
|
|
if a == 0:
|
|
ax.legend(loc=(0.6, 0.7)) # , fontsize = 8, handlelength = 0.5
|
|
else:
|
|
ax.legend(loc=(0.6, 0.6)) # , fontsize = 8, handlelength = 0.5
|
|
ax.set_ylim(0,0.52)
|
|
if c != 0:
|
|
remove_yticks(ax)
|
|
#remove_tick_ymarks(ax2)
|
|
ax.spines['right'].set_visible(False)
|
|
ax.spines['top'].set_visible(False)
|
|
#embed()
|
|
#ax.spines['top'].
|
|
#ax.spines['left' == False]
|
|
#else:
|
|
# #ax2.set_ylabel('B1+B2')
|
|
# if f == 1:
|
|
ax1.set_ylabel('Determinant')
|
|
#ax0_2.set_ylabel('Determinant')
|
|
#ax0_0.set_xlabel('mV/cm')
|
|
#ax0_1.set_xlabel('mV/cm')
|
|
#ax0_2.set_xlabel('mV/cm')
|
|
ax1.set_xlabel('mV/cm')
|
|
ax1.set_xlabel('Distance [cm]')
|
|
#remove_tick_ymarks(ax0_1)
|
|
#remove_tick_ymarks(ax1)
|
|
#remove_xticks(ax0_0)
|
|
#remove_xticks(ax0_1)
|
|
|
|
col = [cm(float(i) / (len(frame))) for i in range(len(frame))]
|
|
|
|
|
|
|
|
plt.subplots_adjust(left = 0.03,wspace=0.3)
|
|
save_visualization(frame_name, False, show_anything = False, pdf=True, jpg=True, png=False,
|
|
counter_contrast=0, savename='', add = '_'+female)
|
|
|
|
plt.show()
|
|
|
|
|
|
def plt_several_ROC_square_nonlin(brust_corrs=['_burstIndividual_'], nffts=['whole'], powers=[1],
|
|
contrasts=[0],column = None, noises_added=[''], fft_i='forward', fft_o='forward', spikes_unit='Hz',
|
|
mV_unit='mV',figsize = (11, 5.5), D_extraction_method=['additiv_visual_d_4_scaled'],
|
|
internal_noise=['eRAM'], external_noise=['eRAM'],
|
|
level_extraction=['_RAMdadjusted'], cut_off2=300, repeats=[1000000],
|
|
receiver_contrast=[1], dendrids=[''], ref_types=[''], adapt_types=[''],
|
|
c_noises=[0.1], c_signal=[0.9], cut_offs1=[300], label=r'$\frac{1}{mV^2S}$'):
|
|
# fig = plt.figure(figsize= (11, 5.5))
|
|
plot_style()
|
|
default_settings(column=column, width=12) #ts=12, ls=13, fs=11,
|
|
only_extra_nonlin = 'amp_B1Harm&B2Harm&B1-B2&B1+B2_mean(012-0102_012-0102)_norm_01B1+02B2_mean'
|
|
# embed()
|
|
frame_names_both = [[
|
|
'calc_ROC_contrasts-ROCmodel_contrasts1_diagonal1_FrF1rel_0.33_FrF2rel_0.67_C2_0.1_LenNrs_20_1Nrs_0.0001_LastNrs_0.1_len_25_nfft_32768_trialsnr_20_mult_minimum_1temporal',
|
|
'calc_ROC_contrasts-ROCmodel_contrasts1_diagonal1_FrF1rel_0.33_FrF2rel_0.67_C2_0.1_LenNrs_20_1Nrs_0.0001_LastNrs_0.1_len_25_nfft_32768_trialsnr_100_mult_minimum_1temporal',
|
|
'calc_ROC_contrasts-ROCmodel_contrasts1_diagonal1_FrF1rel_0.33_FrF2rel_0.67_C2_0.1_LenNrs_20_1Nrs_0.0001_LastNrs_0.1_len_25_nfft_32768_trialsnr_1000_mult_minimum_1temporal'],
|
|
[
|
|
'calc_ROC_contrasts-ROCmodel_contrasts1_vertical1_FrF1rel_1_FrF2rel_0.7_C2_0.1_LenNrs_20_1Nrs_0.0001_LastNrs_0.1_len_25_nfft_32768_trialsnr_20_mult_minimum_1temporal',
|
|
'calc_ROC_contrasts-ROCmodel_contrasts1_vertical1_FrF1rel_1_FrF2rel_0.7_C2_0.1_LenNrs_20_1Nrs_0.0001_LastNrs_0.1_len_25_nfft_32768_trialsnr_100_mult_minimum_1temporal',
|
|
'calc_ROC_contrasts-ROCmodel_contrasts1_vertical1_FrF1rel_1_FrF2rel_0.7_C2_0.1_LenNrs_20_1Nrs_0.0001_LastNrs_0.1_len_25_nfft_32768_trialsnr_1000_mult_minimum_1temporal']]
|
|
cm = plt.get_cmap("hsv")
|
|
cells = [
|
|
"2013-01-08-aa-invivo-1"] # , "2012-12-13-an-invivo-1", "2012-06-27-an-invivo-1", "2012-12-21-ai-invivo-1","2012-06-27-ah-invivo-1", ]
|
|
|
|
cells_chosen = [
|
|
'2013-01-08-aa-invivo-1'] # , "2012-06-27-ah-invivo-1","2014-06-06-ac-invivo-1" ]#'2012-06-27-an-invivo-1',
|
|
diff_012_01_02_0 = ['amp_B1_012-01-02+0_norm_01B1+02B2_mean',
|
|
'amp_B2_012-01-02+0_norm_01B1+02B2_mean',
|
|
'amp_B1_harms__012-01-02+0_norm_01B1+02B2_mean',
|
|
'amp_B2_harms__012-01-02+0_norm_01B1+02B2_mean',
|
|
'amp_B1-B2_012-01-02+0_norm_01B1+02B2_mean',
|
|
|
|
'amp_B1Harm&B2Harm&B1-B2&B1+B2_012-01-02+0_norm_01B1+02B2_mean',
|
|
'amp_B1&B1Harm&B2&B2Harm&B1-B2&B1+B2_012-01-02+0_norm_01B1+02B2_mean']
|
|
|
|
all_lins = ['auci02_012-auci_base_01', 'amp_B1+B2_012-01-02+0_norm_01B1+02B2_mean',
|
|
'amp_B1&B1Harm&B2&B2Harm&B1-B2&B1+B2_012-01-02+0_norm_01B1+02B2_mean'] # 'amp_B1_harms__012-01-02+0_norm_01B1+02B2_mean','amp_B1&B1Harm&B2&B2Harm&B1-B2&B1+B2_012-01-02+0_norm_01B1+02B2_mean']
|
|
ylabel = ['Determinant', 'B1+B2 Nonlin', 'All nonlin']
|
|
|
|
# embed()
|
|
x_pos = [10 ** -2, (10 ** -2) / 2, 10 ** -3, ]
|
|
ranges = [[0.05, 0.002], [0.04, 0.001], [0.03, 0.0004]]
|
|
colors_range = ['darkblue', 'blue', 'lightblue']
|
|
fig = plt.figure(figsize=figsize)
|
|
grid = gridspec.GridSpec(1, 2, wspace=0.35, hspace=0.5, left=0.06, top=0.8, bottom=0.15,
|
|
right=0.96) # , width_ratios = [1,1,1,0.5,1] height_ratios = [1,6]bottom=0.25, top=0.8,
|
|
|
|
###################################
|
|
# plot square
|
|
ax = plt.subplot(grid[0])
|
|
square_part(ax)
|
|
ax.set_aspect('equal')
|
|
# for d in range(len(df1)):
|
|
# plt.scatter(df1[d], df2[d], facecolors='none', edgecolor='green', marker='s')
|
|
|
|
####################################
|
|
# plot nonlin
|
|
ax = plt.subplot(grid[1])
|
|
trials_nrs = [1]
|
|
|
|
iternames = [brust_corrs, cells, D_extraction_method, external_noise,
|
|
repeats, internal_noise, powers, nffts, dendrids, cut_offs1, trials_nrs, c_signal,
|
|
c_noises,
|
|
ref_types, adapt_types, noises_added, level_extraction, receiver_contrast, contrasts, ]
|
|
|
|
for all in it.product(*iternames):
|
|
burst_corr, cell, var_type, stim_type_afe, trials_stim, stim_type_noise, power, nfft, dendrid, cut_off1, trial_nrs, c_sig, c_noise, ref_type, adapt_type, noise_added, extract, a_fr, a_fe = all
|
|
print(trials_stim, stim_type_noise, power, nfft, a_fe, a_fr, dendrid, var_type, cut_off1, trial_nrs)
|
|
|
|
duration_noise = '_short',
|
|
formula = 'code' ##'formula'
|
|
# ,int(2 ** 16) int(2 ** 16), int(2 ** 15),
|
|
stimulus_length = 1 # 20#550 # 30 # 15#45#0.5#1.5 15 45 100
|
|
trials_nrs = [1] # [100, 500, 1000, 3000, 10000, 100000, 1000000] # 500
|
|
stimulus_type = '_StimulusOrig_' # ,#
|
|
# ,3]#, 3, 1, 1.5, 0.5, ] # ,1,1.5, 0.5] #[1,1.5, 0.5] # 1.5,0.5]3, 1,
|
|
variant = 'sinz'
|
|
mimick = 'no'
|
|
cell_recording_save_name = ''
|
|
trans = 1 # 5
|
|
nr = '2'
|
|
save_name = save_ram_model(stimulus_length, cut_off1, duration_noise, nfft, a_fe, formula,
|
|
stim_type_noise, mimick, variant, trials_stim, power,
|
|
stimulus_type,
|
|
cell_recording_save_name, nr=nr, fft_i=fft_i, fft_o=fft_o, Hz=spikes_unit,
|
|
mV=mV_unit,
|
|
stim_type_afe=stim_type_afe, burst_corr=burst_corr, extract=extract,
|
|
noise_added=noise_added, c_noise=c_noise,
|
|
c_sig=c_sig, ref_type=ref_type, adapt_type=adapt_type, var_type=var_type,
|
|
cut_off2=cut_off2, dendrid=dendrid, a_fr=a_fr, trials_nr=trial_nrs,
|
|
trans=trans, zeros='ones')
|
|
save_name = load_folder_name('calc_model') + '/' + version_final()
|
|
trial_nr = 250000
|
|
save_name = load_folder_name(
|
|
'calc_model') + '/' + 'calc_RAM_model-2__nfft_whole_power_1_RAM_additiv_cv_adapt_factor_scaled_cNoise_0.1_cSig_0.9_cutoff1_300_cutoff2_300no_sinz_length1_TrialsStim_' + str(
|
|
trial_nr) + '_a_fr_1__trans1s__TrialsNr_1_fft_o_forward_fft_i_forward_Hz_mV'
|
|
|
|
path = save_name + '.pkl' # '../'+
|
|
# initial_function = inspect.stack()[-1][1].split('\\')[-1].split('.')[0]
|
|
|
|
# if os.path.exists(path):
|
|
# model = pd.read_pickle(path)
|
|
model = pd.read_pickle(path) # load_data(path, cells, save_name)
|
|
model_show = model[(
|
|
model.cell == cell)]
|
|
new_keys = model_show.index.unique() # [0:490]
|
|
# embed()
|
|
stack_plot = model_show[new_keys] # [list(map(str, new_keys))]
|
|
stack_plot = np.abs(stack_plot.iloc[np.arange(0, len(new_keys), 1)])
|
|
ax.set_xlim(0, 237)
|
|
ax.set_ylim(0, 237)
|
|
ax.set_aspect('equal')
|
|
model_cells = pd.read_csv(load_folder_name('calc_model_core') + "/models_big_fit_d_right.csv")
|
|
model_params = model_cells[model_cells['cell'] == cell]
|
|
noise_strength = model_params.noise_strength.iloc[0] # **2/2
|
|
deltat = model_params.deltat.iloc[0]
|
|
D = noise_strength # (noise_strength ** 2) / 2
|
|
D_derived, var, cut_off = D_derive(model_show, save_name, c_sig, D=D, base='', nr=nr) # var_based
|
|
|
|
stack_plot = RAM_norm(stack_plot, trials_stim = trials_stim, model_show = model_show)
|
|
# embed()
|
|
|
|
# embed()
|
|
# ax[a].set_title(titles + '\n Baseline: fr=' + str(np.round(model_show.fr.iloc[0])) + 'Hz cv=' + str(
|
|
# np.round(model_show.cv.iloc[0], 2)) + \
|
|
# '\n Stimulus: fr=' + str(
|
|
# np.round(model_show.fr_stim.iloc[0])) + 'Hz cv=' + str(
|
|
# np.round(model_show.cv_stim.iloc[0], 2)) + ' ser=' + str(
|
|
# np.round(model_show.ser_sum_stim.iloc[0], 2)) + '\n $D_{signal}$=' + str(D_derived), fontsize=8)
|
|
perc = '10' # 'perc'
|
|
im = plt_RAM_perc(ax, perc, stack_plot)
|
|
ax.set_aspect('equal')
|
|
cbar = plt.colorbar(im, ax=ax, orientation='vertical') # pad=0.2, shrink=0.5, "horizontal"
|
|
cbar.set_label(label, labelpad=100) # rotation=270,
|
|
# if a >= row * col - col:
|
|
ax.set_xlabel(F1_xlabel(), labelpad=20)
|
|
ax.set_ylabel(F2_xlabel())
|
|
save_visualization(jpg=True, png=False)
|
|
# plt.subplots_adjust(top = 0.8)
|
|
plt.show()
|
|
|
|
def plt_several_ROC_declining_classified_small():
|
|
fig = plt.figure(figsize= (11, 5.5))
|
|
#
|
|
only_extra_nonlin = 'amp_B1Harm&B2Harm&B1-B2&B1+B2_mean(012-0102_012-0102)_norm_01B1+02B2_mean'
|
|
#embed()
|
|
frame_names = ['calc_ROC_contrasts-ROCmodel_contrasts1_diagonal1_FrF1rel_0.33_FrF2rel_0.67_C2_0.1_LenNrs_20_1Nrs_0.0001_LastNrs_0.1_len_25_nfft_32768_trialsnr_20_mult_minimum_1temporal',
|
|
'calc_ROC_contrasts-ROCmodel_contrasts1_diagonal1_FrF1rel_0.33_FrF2rel_0.67_C2_0.1_LenNrs_20_1Nrs_0.0001_LastNrs_0.1_len_25_nfft_32768_trialsnr_100_mult_minimum_1temporal',
|
|
'calc_ROC_contrasts-ROCmodel_contrasts1_diagonal1_FrF1rel_0.33_FrF2rel_0.67_C2_0.1_LenNrs_20_1Nrs_0.0001_LastNrs_0.1_len_25_nfft_32768_trialsnr_1000_mult_minimum_1temporal']
|
|
cm = plt.get_cmap("hsv")
|
|
cells_chosen = ['2013-01-08-aa-invivo-1', "2012-06-27-ah-invivo-1",
|
|
"2014-06-06-ac-invivo-1"] # '2012-06-27-an-invivo-1',
|
|
|
|
cells = ["2013-01-08-aa-invivo-1", "2012-12-13-an-invivo-1", "2012-06-27-an-invivo-1", "2012-12-21-ai-invivo-1",
|
|
"2012-06-27-ah-invivo-1", ]
|
|
|
|
diff_012_01_02_0 = ['amp_B1_012-01-02+0_norm_01B1+02B2_mean',
|
|
'amp_B2_012-01-02+0_norm_01B1+02B2_mean',
|
|
'amp_B1_harms__012-01-02+0_norm_01B1+02B2_mean',
|
|
'amp_B2_harms__012-01-02+0_norm_01B1+02B2_mean',
|
|
'amp_B1-B2_012-01-02+0_norm_01B1+02B2_mean',
|
|
|
|
'amp_B1Harm&B2Harm&B1-B2&B1+B2_012-01-02+0_norm_01B1+02B2_mean',
|
|
'amp_B1&B1Harm&B2&B2Harm&B1-B2&B1+B2_012-01-02+0_norm_01B1+02B2_mean']
|
|
|
|
all_lins = ['auci02_012-auci_base_01','amp_B1+B2_012-01-02+0_norm_01B1+02B2_mean','amp_B1&B1Harm&B2&B2Harm&B1-B2&B1+B2_012-01-02+0_norm_01B1+02B2_mean']#'amp_B1_harms__012-01-02+0_norm_01B1+02B2_mean','amp_B1&B1Harm&B2&B2Harm&B1-B2&B1+B2_012-01-02+0_norm_01B1+02B2_mean']
|
|
ylabel = ['Determinant','B1+B2 Nonlin','All nonlin']
|
|
|
|
x_pos = 0.02
|
|
|
|
grid = gridspec.GridSpec(1, 5, wspace=0.2, hspace=0.5, left=0.1, top=0.8, bottom=0.15,
|
|
right=0.95, width_ratios = [1,1,1,0.5,1]) # height_ratios = [1,6]bottom=0.25, top=0.8,
|
|
grid1 = gridspec.GridSpecFromSubplotSpec(3, 1, wspace=0.3, hspace=0.75,
|
|
subplot_spec=grid[-1])
|
|
|
|
for c,cell in enumerate(cells_chosen ):
|
|
grid0 = gridspec.GridSpecFromSubplotSpec(5, 1, wspace=0.2, hspace=0.35,
|
|
subplot_spec=grid[c])# height_ratios=[1, 0.7, 1, 1],
|
|
for f, frame_name in enumerate(frame_names):
|
|
|
|
|
|
path = load_folder_name('calc_ROC') + '/' + frame_name + '.csv'
|
|
if os.path.exists(path):
|
|
frame = pd.read_csv(path)
|
|
all_nonlin = all_lins[0]#'amp_B1&B1Harm&B2&B2Harm&B1-B2&B1+B2/10_mean(012-0102_012-0102)_norm_01B1+02B2_mean'
|
|
title = cut_title(frame_name, datapoints = 100)
|
|
plt.suptitle(title)
|
|
#cells = frame.sort_values(by='cv_0').cell.unique()
|
|
|
|
path_ref = load_folder_name('calc_ROC') + '/calc_ROC_contrasts-ROCmodel_contrasts1_diagonal1_FrF1rel_0.33_FrF2rel_0.67_C2_0.1_C1_0.02_len_25_nfft_32768_trialsnr_20_mult_minimum_1temporal.csv'
|
|
frame_ref = pd.read_csv(path_ref)
|
|
frame_ref = frame_ref.sort_values(by='cv_0')
|
|
colr = [cm(float(i) / (len(frame_ref))) for i in range(len(frame_ref))]
|
|
cells_sorted = frame_ref.cell.unique()
|
|
col, row = find_row_col(cells, row=4)
|
|
#fig, ax = plt.subplots(row, col, figsize=(12, 5), constrained_layout=True, sharex=True,
|
|
# sharey=True) # sharex = True,sharex=True,
|
|
#ax0 = ax.flatten()
|
|
#for c, cell in enumerate(cells):
|
|
frame_cell = frame[frame.cell == cell]
|
|
|
|
|
|
|
|
|
|
ax0 = plt.subplot(grid0[f])
|
|
ax1 = plt.subplot(grid0[3])
|
|
ax2 = plt.subplot(grid0[4])
|
|
axs = [ax0, ax1]
|
|
colors = ['black','grey','lightgrey', ]
|
|
for ax in axs:
|
|
if len(frame_cell)> 0:
|
|
|
|
plt_area_between(frame_cell.c1,frame_cell, ax0, ax, colors, colors, f)
|
|
ax.axhline(0, linestyle='--', color='grey', linewidth=0.5)
|
|
#embed()
|
|
col_pos = np.where(cells_sorted == cell)[0][0]
|
|
if f == 0:
|
|
ax0.set_title(cell[0:13]+'\n cv '+str(np.round(np.mean(frame_cell.cv_0.unique()),2)), color = colr[col_pos], fontsize = 8)
|
|
|
|
|
|
|
|
ax.set_ylim(0,0.5)
|
|
if c != 0:
|
|
remove_tick_ymarks(ax)
|
|
remove_tick_ymarks(ax2)
|
|
else:
|
|
ax2.set_ylabel('B1+B2')
|
|
if f == 1:
|
|
ax0.set_ylabel('Determinant')
|
|
remove_xticks(ax0)
|
|
remove_xticks(ax1)
|
|
ax.axvline(x_pos, color='grey', linestyle='--', linewidth=0.5)
|
|
|
|
col = [cm(float(i) / (len(frame))) for i in range(len(frame))]
|
|
|
|
ax2.plot(frame_cell.c1,frame_cell['amp_B1+B2_012-01-02+0_norm_01B1+02B2_mean'], color = colors[f])
|
|
ax2.set_xscale('log')
|
|
ax2.axvline(x_pos, color = 'grey', linestyle = '--', linewidth = 0.5)
|
|
ax2.set_xlabel('mV/cm')
|
|
ax2.set_ylim(0,0.5)
|
|
|
|
######################################
|
|
# plot the plot on the right upper part (Area vs CV)
|
|
path = load_folder_name('calc_ROC') + '/' + frame_names[0] + '.csv'
|
|
ax_scatter = plt.subplot(grid1[0])
|
|
ax_scatter_nonlin_sole = plt.subplot(grid1[1])
|
|
ax_scatter_nonlin = plt.subplot(grid1[2])
|
|
#cvs, nonlin_area, diff_areas = plt_scatter_nonlin(x_pos, ax_scatter_nonlin,path, frame_ref, colr, ax_scatter,cells_chosen,ax_scatter_nonlin_sole)
|
|
name = 'amp_B1+B2_012-01-02+0_norm_01B1_mean'#, ]
|
|
cvs, nonlin_area, diff_areas, areas_01_scatter, nonlin,areas_012_one = calc_areas(path, frame_ref, colr, name, x_pos,
|
|
cells_chosen)
|
|
|
|
# cvs, nonlin_area, diff_areas = plt_scatter_nonlin(x_pos, ax_scatter_nonlin, path, frame_ref, colr, ax_scatter, cells_chosen, ax_scatter_nonlin_sole, s = 15, name = name)
|
|
ax_scatter.scatter(cvs, diff_areas, color=colr, s=15, clip_on=False)
|
|
ax_scatter.axhline(0, linestyle='--', linewidth=0.5, color='grey')
|
|
ax_scatter.set_xlabel('CV')
|
|
ax_scatter.set_ylabel('Area Detection improvement')
|
|
ax_scatter_nonlin_sole.scatter(cvs, nonlin_area, color=colr, s=15, clip_on=False)
|
|
ax_scatter_nonlin_sole.axhline(0, linestyle='--', linewidth=0.5, color='grey')
|
|
ax_scatter_nonlin_sole.set_xlabel('CV')
|
|
ax_scatter_nonlin_sole.set_ylabel('Area Nonlinearity (B1+B2)')
|
|
# ax[n, 3].scatter(cvs,diff_areas)
|
|
ax_scatter_nonlin.set_xlabel('Area Detection improvement')
|
|
ax_scatter_nonlin.set_ylabel('Area Nonlinearity (B1+B2)')
|
|
ax_scatter_nonlin.scatter(nonlin_area, diff_areas, color=colr, s=15, clip_on=False)
|
|
|
|
######################################
|
|
# plot the plot on the right lower part (Area vs Nonlin at B1+B2)
|
|
|
|
save_visualization(png=False)
|
|
#plt.subplots_adjust(top = 0.8)
|
|
plt.show()
|
|
|
|
def plt_ROC_model_w_female(redo = False, t_off = 10,top=0.95, bottom=0.14, add_name='', color0='green', color01='blue', color02='red',
|
|
color012='orange', figsize=(11.5, 5.4), female='wo_female', reshuffled='reshuffled',
|
|
datapoints=1000, dev=0.0005, a_f1s=[0.03], pdf=True, printing=False, plus_q='minus',
|
|
freq1_ratio=1 / 2, diagonal='diagonal', freq2_ratio=2 / 3, way='absolut',
|
|
stimulus_length=0.5, runs=3, trials_nr=500, cells=[], show=False, nfft=int(2 ** 15), beat='',
|
|
nfft_for_morph=4096 * 4, fr = None, gain=1, fish_jammer='Alepto', us_name=''):
|
|
|
|
save_name_roc = 'decline_ROC_examples_trial_nr.csv'
|
|
|
|
version_comp, subfolder, mod_name_slash, mod_name, subfolder_path = find_code_vs_not()
|
|
|
|
cont_redo = ((os.path.exists(save_name_roc)) | (version_comp == 'public')) & (redo == False)
|
|
if cont_redo:
|
|
stimulus_length = 0.14
|
|
|
|
plt.rcParams['lines.linewidth'] = 1
|
|
model_cells = pd.read_csv(load_folder_name('calc_model_core') + "/models_big_fit_d_right.csv")
|
|
|
|
if len(cells) < 1:
|
|
cells = model_cells.cell#)
|
|
#embed()
|
|
for cell_here in cells:
|
|
# sachen die ich variieren will
|
|
###########################################
|
|
single_waves = ['_SeveralWave_'] # , '_SingleWave_']
|
|
####### VARY HERE
|
|
for single_wave in single_waves:
|
|
if single_wave == '_SingleWave_':
|
|
a_f2s = [0] # , 0,0.2
|
|
else:
|
|
a_f2s = [0.1]
|
|
for a_f2 in a_f2s:
|
|
# ,0.05,0.01, 0.005, 0.1, 0.2] # 0.001,
|
|
for a_f1 in a_f1s:
|
|
a_frs = [1]
|
|
titles_amp = ['base eodf'] # ,'baseline to Zero',]
|
|
for a, a_fr in enumerate(a_frs):
|
|
|
|
model_params = model_cells[model_cells['cell'] == cell_here].iloc[0]
|
|
# model_params = model_cells.iloc[cell_nr]
|
|
|
|
# embed()
|
|
eod_fr = model_params['EODf'] # .iloc[0]
|
|
|
|
offset = model_params.pop('v_offset')
|
|
|
|
cell = model_params.pop('cell')
|
|
print(cell)
|
|
SAM, adapt_offset, cell_recording, constant_reduction, damping, damping_type, dent_tau_change, exponential, f1, f2, fish_emitter, fish_receiver, fish_morph_harmonics_var, lower_tol, mimick, n, phase_right, phaseshift_fr, sampling_factor, upper_tol, zeros = default_model0()
|
|
# in case you want a different sampling here we can adujust
|
|
time_array, sampling, deltat = deltat_choice(model_params, sampling_factor, eod_fr,
|
|
stimulus_length)
|
|
|
|
# generate the eod_fish_r in the four mimick variants (copy, thunderfish, mimick, just sinus)
|
|
eod_fish_r, deltat, eod_fr, time_array = eod_fish_r_generation(time_array, eod_fr, a_fr,
|
|
stimulus_length, phaseshift_fr,
|
|
cell_recording, zeros, mimick,
|
|
sampling, fish_receiver, deltat,
|
|
nfft, nfft_for_morph,
|
|
fish_morph_harmonics_var=fish_morph_harmonics_var,
|
|
beat=beat)
|
|
sampling = 1 / deltat
|
|
multiple = 0
|
|
slope = 0
|
|
add = 0
|
|
plus = 0
|
|
sig_val = (7, 1)
|
|
variant = 'sinz'
|
|
if exponential == '':
|
|
v_exp = 1
|
|
exp_tau = 0.001
|
|
# prepare for adapting offset due to baseline modification
|
|
|
|
baseline_with_wave_damping, baseline_without_wave = prepare_baseline_array(time_array, eod_fr,
|
|
nfft_for_morph,
|
|
phaseshift_fr,
|
|
mimick, zeros,
|
|
cell_recording,
|
|
sampling,
|
|
stimulus_length,
|
|
fish_receiver,
|
|
deltat, nfft,
|
|
damping_type,
|
|
damping, us_name,
|
|
gain, beat=beat,
|
|
fish_morph_harmonics_var=fish_morph_harmonics_var)
|
|
|
|
spikes_base = [[]] * trials_nr
|
|
|
|
color01_2 = 'purple'
|
|
|
|
fig = plt.figure(figsize=figsize)
|
|
# embed()#
|
|
grid = gridspec.GridSpec(1, 2, wspace=0.3, left=0.09, top=top, bottom=bottom,
|
|
right=0.96, height_ratios=[1], width_ratios=[4, 2.8]) # 1.3,1
|
|
|
|
grid0 = gridspec.GridSpecFromSubplotSpec(3, 2, wspace=0.18, hspace=0.1,
|
|
subplot_spec=grid[0],
|
|
height_ratios=[1, 0.6, 1]) # ,0.4,1.2
|
|
|
|
grid1 = gridspec.GridSpecFromSubplotSpec(1, 1,
|
|
subplot_spec=grid[1]) # wspace=0.5, hspace=0.55,
|
|
for run in range(runs):
|
|
print(run)
|
|
t1 = time.time()
|
|
for t in range(trials_nr):
|
|
# get the baseline properties here
|
|
# baseline_after,spikes_base,rate_adapted, rate_baseline_before, rate_baseline_after, np.array(spike_times), stimulus_power, v_dent_output[int(0.05 / deltat):-1], offset, v_mem_output
|
|
stimulus = eod_fish_r
|
|
stimulus_base = eod_fish_r
|
|
if 'Zero' in titles_amp[a]:
|
|
power_here = 'sinz' + '_' + zeros
|
|
else:
|
|
power_here = 'sinz'
|
|
|
|
cvs, adapt_output, baseline_after_b, _, rate_adapted_b, rate_baseline_before_b, rate_baseline_after_b, \
|
|
spikes_base[t], _, _, offset_new, _,noise_final = simulate(cell, offset, stimulus, f1,
|
|
n, power_here,
|
|
adapt_offset=adapt_offset,
|
|
add=add, alpha=alpha,
|
|
reshuffle=reshuffled,
|
|
lower_tol=lower_tol,
|
|
upper_tol=upper_tol,
|
|
v_exp=v_exp, exp_tau=exp_tau,
|
|
dent_tau_change=dent_tau_change,
|
|
alter_taus=constant_reduction,
|
|
exponential=exponential,
|
|
exponential_mult=1,
|
|
exponential_plus=plus,
|
|
exponential_slope=slope,
|
|
sig_val=sig_val, j=f2,
|
|
deltat=deltat, t=t,
|
|
**model_params)
|
|
|
|
if t == 0:
|
|
# here we record the changes in the offset due to the adaptation
|
|
change_offset = offset - offset_new
|
|
# and we subsequently reset the offset to be the new adapted for all subsequent trials
|
|
offset = offset_new * 1
|
|
|
|
if printing:
|
|
print('Baseline time' + str(time.time() - t1))
|
|
base_cut, mat_base = find_base_fr(spikes_base, deltat, stimulus_length, time_array, dev=dev)
|
|
|
|
if not fr:
|
|
fr = np.mean(base_cut)
|
|
if 'diagonal' in diagonal:
|
|
|
|
two_third_fr = fr * freq2_ratio
|
|
freq1_ratio = (1 - freq2_ratio)
|
|
third_fr = fr * freq1_ratio
|
|
else:
|
|
two_third_fr = fr * freq2_ratio
|
|
third_fr = fr * freq1_ratio
|
|
|
|
if plus_q == 'minus':
|
|
two_third_fr = -two_third_fr
|
|
third_fr = -third_fr
|
|
freqs2 = [eod_fr + two_third_fr] # , eod_fr - third_fr, two_third_fr,
|
|
# third_fr,
|
|
# two_third_eodf, eod_fr - two_third_eodf,
|
|
# third_eodf, eod_fr - third_eodf, ]
|
|
freqs1 = [
|
|
eod_fr + third_fr] # , eod_fr - two_third_fr, third_fr,two_third_fr,third_eodf, eod_fr - third_eodf,two_third_eodf, eod_fr - two_third_eodf, ]
|
|
# embed()
|
|
sampling_rate = 1 / deltat
|
|
base_cut, mat_base, smoothed0, mat0 = find_base_fr2(sampling_rate, spikes_base, deltat,
|
|
stimulus_length, time_array, dev=dev)
|
|
fr = np.mean(base_cut)
|
|
frate, isis_diff = ISI_frequency(time_array, spikes_base[0], fill=0.0)
|
|
isi = np.diff(spikes_base[0])
|
|
cv0 = np.std(isi) / np.mean(isi)
|
|
cv1 = np.std(frate) / np.mean(frate)
|
|
|
|
for ff, freq1 in enumerate(freqs1):
|
|
freq1 = [freq1]
|
|
freq2 = [freqs2[ff]]
|
|
print(cell+' f1'+str(freq1)+' f2 '+str(freq2) +' f1'+str(freq1 - eod_fr)+' f2 '+str(freq2 - eod_fr))
|
|
# time_var = time.time()
|
|
|
|
# if printing:
|
|
# print(cell )
|
|
# f_corr = create_beat_corr(np.array([freq1[f1]]), np.array([eod_fr]))
|
|
# create the second eod_fish1 array analogous to the eod_fish_r array
|
|
t1 = time.time()
|
|
phaseshift_f1, phaseshift_f2 = get_phaseshifts(a_f1, a_f2, phase_right, phaseshift_fr)
|
|
eod_fish1, time_fish_e = eod_fish_e_generation(time_array, a_f1, freq1, f1,
|
|
nfft_for_morph, phaseshift_f1,
|
|
cell_recording, fish_morph_harmonics_var,
|
|
zeros, mimick, fish_emitter, sampling,
|
|
stimulus_length, thistype='emitter')
|
|
eod_fish2, time_fish_j = eod_fish_e_generation(time_array, a_f2, freq2, f2,
|
|
nfft_for_morph, phaseshift_f2,
|
|
cell_recording, fish_morph_harmonics_var,
|
|
zeros, mimick, fish_jammer, sampling,
|
|
stimulus_length, thistype='jammer')
|
|
|
|
eod_stimulus = eod_fish1 + eod_fish2
|
|
# np.array([v_mem_output_01, v_mem_output_02, v_mem_output_012]), offset_new, mat01, mat02, mat012,smoothed01, smoothed02, smoothed012, stimulus_01, stimulus_02, stimulus_012, meansmoothed05_01, spikes_01, meansmoothed05_02, spikes_02, meansmoothed05_012, spikes_012
|
|
|
|
v_mems, offset_new, mat01, mat02, mat012, smoothed01, smoothed02, smoothed012, stimulus_01, stimulus_02, stimulus_012, mat05_01, spikes_01, mat05_02, spikes_02, mat05_012, spikes_012 = get_arrays_for_three(
|
|
cell, a_f2, a_f1,
|
|
SAM, eod_stimulus, eod_fish_r, freq2, eod_fish1, eod_fish_r,
|
|
eod_fish2, stimulus_length,
|
|
baseline_with_wave_damping, baseline_without_wave,
|
|
offset, model_params, n, variant, t, adapt_offset,
|
|
upper_tol, lower_tol, dent_tau_change, constant_reduction,
|
|
exponential, plus, slope, add,
|
|
deltat, alpha, sig_val, v_exp, exp_tau, f2,
|
|
trials_nr, time_array,
|
|
f1, freq1, damping_type,
|
|
gain, eod_fr, damping, us_name, redo_stim = False, dev=dev, reshuffle=reshuffled)
|
|
# embed()
|
|
if printing:
|
|
print('Generation process' + str(time.time() - t1))
|
|
|
|
##################################
|
|
# power spectrum
|
|
# plt_power_spectrum(female, nfft, smoothed012,
|
|
# smoothed01, smoothed02, smoothed0, sampling_rate)
|
|
|
|
# embed()
|
|
array0 = [mat_base]
|
|
|
|
array01 = [mat05_01]
|
|
|
|
array02 = [mat05_02]
|
|
array012 = [mat05_012]
|
|
|
|
|
|
position_diff = 0
|
|
results_diff = pd.DataFrame()
|
|
results_diff['f1'] = freq1
|
|
results_diff['f2'] = freq2
|
|
results_diff['f0'] = eod_fr
|
|
trials, results_diff, tp_012_all, tp_01_all, tp_02_all, fp_all, roc_01, roc_0, roc_02, roc_012, threshhold = calc_auci_pd(
|
|
results_diff, position_diff, array012, array01, array02, array0, t_off=t_off,
|
|
way=way, printing=True, datapoints=datapoints, f0='f0', sampling=sampling)
|
|
# embed()
|
|
if run == 0:
|
|
color = 'black'
|
|
lw = 1.5
|
|
z = 2
|
|
else:
|
|
color = 'grey'
|
|
lw = 0.8
|
|
z = 1
|
|
if cont_redo:
|
|
frame = pd.read_csv(save_name_roc)
|
|
tp_012_all = frame['tp_012'] # = tp_012_all
|
|
tp_01_all = frame['tp_01'] # = tp_01_all
|
|
tp_02_all = frame['tp_02'] # = tp_02_all
|
|
fp_all = frame['fp_all'] # = fp_all
|
|
threshhold = frame['threshhold'] # = threshhold
|
|
#embed()
|
|
lw_g = 1
|
|
if 'wo_female' in female:
|
|
ax_roc_wof = plt.subplot(grid1[0])
|
|
roc_female(ax_roc_wof, color, fp_all, tp_01_all, lw, color0, color01,title_color = color01, z=z, lw_g = lw_g)
|
|
elif 'base_female' in female:
|
|
ax_roc_wof = plt.subplot(grid1[0])
|
|
roc_female(ax_roc_wof, color, fp_all, tp_02_all, lw, color0, color02, z=z,
|
|
add_01='\n Female', add_base=' Baseline', lw_g = lw_g)
|
|
ax_roc_wof.set_title('Receiver Operating Characteristics (ROC)')
|
|
else:
|
|
ax_roc_wf = plt.subplot(grid1[0])
|
|
roc_wo_female(color, ax_roc_wf, tp_02_all, tp_012_all, lw, color02, color012,title_color = color012, lw_g = lw_g, z=z)
|
|
|
|
if run == 0:
|
|
plt_traces_to_roc(freq2_ratio, freq1_ratio, t_off, spikes_02, spikes_01, spikes_012,
|
|
spikes_base, mat_base, mat05_01,
|
|
mat05_012, mat05_02, color02, color012, a_f2, trials, sampling,
|
|
a_f1, fr, female, color01, color0, grid0, color, run, eod_fr,
|
|
freq2,
|
|
freq1, sampling_rate, stimulus_012, stimulus_02, stimulus_01,
|
|
stimulus_base, time_array, carrier=True)
|
|
|
|
# plt_power_spectrum(female,nfft, smoothed012, smoothed01, smoothed02, smoothed0,sampling_rate)
|
|
ax = fig.axes
|
|
ax[0 + 1].set_ylabel('Amplitude')
|
|
ax[2 + 1].set_ylabel('Trials')
|
|
ax[4 + 1].set_ylabel('Firing Rate [Hz]')
|
|
# ax[6+1].set_xlabel('Time [ms]')
|
|
|
|
ax[3 + 2].set_xlabel('Time [ms]')
|
|
ax[4 + 2].set_xlabel('Time [ms]')
|
|
# ax[8+2].set_xlabel('Time [ms]')
|
|
# ax[9+2].set_xlabel('Frequency [Hz]')
|
|
|
|
# ax[5 + 2].set_xlabel('Frequency [Hz]')
|
|
# embed()
|
|
# ax[6 + 2].set_xlabel('Frequency [Hz]')
|
|
# ax[11 + 2].set_xlabel('Frequency [Hz]')
|
|
# ax[5 + 2].set_ylabel('Power [Hz]')
|
|
for aa, ax_here in enumerate(ax[2:5]):
|
|
ax_here.set_xticks([])
|
|
for aa, ax_here in enumerate(ax[1::]):
|
|
if aa not in np.arange(0, 100, 2):
|
|
# ax_here.set_yticks([])
|
|
hi = True
|
|
else:
|
|
ax_here.get_shared_y_axes().join(*ax[1 + aa:1 + aa + 2])
|
|
#embed()
|
|
fig.tag([ax[1],ax[2],ax[0]], xoffs = -4.6, yoffs = 1.5)
|
|
plt.subplots_adjust(top=0.95, left=0.09, right=0.95, hspace=0.5, bottom=0.12, wspace=0.25)
|
|
individual_tag = '_way_' + str(way) + '_runs_' + str(runs) + '_trial_nr_' + str(
|
|
trials_nr) + '_stimulus_length_' + str(
|
|
stimulus_length) + cell + ' cv ' + str(cv0) + single_wave + '_a_f0_' + str(
|
|
a_fr) + '_a_f1_' + str(a_f1) + '_a_f2_' + str(a_f2) + '_trialsnr_' + str(trials_nr)
|
|
|
|
# save_visualization(add = add_name)
|
|
# embed()
|
|
save_visualization(individual_tag, show=show, add=add_name, pdf=pdf, counter_contrast=0,
|
|
savename='')
|
|
#linewidth=lw_g,
|
|
|
|
def roc_wo_female(color, ax_roc_wf, tp_02_all, tp_012_all, lw, color02, color012, add_01='\n Intruder + Female', z=2,
|
|
add_base=' Female', color_e = 'grey', title_color='black',lw_g = 0.75):
|
|
lim = 0.02
|
|
|
|
ax_roc_wf.set_title(r'With Female: ROC\ensuremath{\rm{_{Female}}}', color=title_color)# linewidth=lw,'With Female'
|
|
ax_roc_wf.plot(tp_02_all, tp_012_all, color=color,zorder=z, clip_on=False) # , aspect = 'auto'
|
|
ax_roc_wf.set_aspect('equal')
|
|
if color_e:
|
|
ax_roc_wf.plot([0, 1], [0, 1], color=color_e, linestyle='--')
|
|
# ax_roc_wf.plot([0 - lim, 0 - lim], [1 + lim, 1 + lim], color='grey', linestyle='--')
|
|
# ax_roc_wf.plot([0 - lim, 0 - lim], [1 + lim, 1 + lim], color='grey', linewidth=0.5, linestyle='--')
|
|
|
|
ax_roc_wf.set_xlabel('False-Positive Rate: ' + add_base, color=color02)
|
|
ax_roc_wf.set_ylabel('Correct-Detection Rate: ' + add_01, color=color012)
|
|
|
|
# lw_g = 1,
|
|
def roc_female(ax_roc_wof, color, fp_all, tp_01_all, lw, color0, color01,color_e = 'grey', lw_g = 1,z=2,title_color='black',
|
|
add_01='\n Intruder', add_base=' Baseline'):
|
|
ax_roc_wof.set_title(r'Without Female: ROC\ensuremath{\rm{_{NoFemale}}}', color=title_color)#'Without Female'
|
|
ax_roc_wof.plot(fp_all, tp_01_all, color=color, linewidth=lw, zorder=z, clip_on=False) # , aspect = 'auto'
|
|
if color_e:
|
|
ax_roc_wof.plot([0, 1], [0, 1], color=color_e, linestyle='--', clip_on=False)
|
|
ax_roc_wof.set_aspect('equal')
|
|
ax_roc_wof.set_xlabel('False-Positive Rate: ' + add_base, color=color0) #: 0
|
|
ax_roc_wof.set_ylabel('Correct-Detection Rate: ' + add_01, color=color01) # 01
|
|
# ax_roc_wof.plot([0, 0], [1, 1], color='grey', linewidth=0.25, linestyle='--', clip_on = False)
|
|
# ax_roc_wof.set_ylim([-0.01,0.01])
|
|
|
|
|
|
def c_to_dist_reverse(distance, power = 2.09, factor = 12.23):
|
|
#factor = 9.793241127295891
|
|
#1 / ((distance/factor) ** 3) # /10
|
|
# Power = , factor =
|
|
c_changed = factor / (distance) ** power
|
|
#c_changed = factor / (c)** (1** power)
|
|
#c_changed = 10 / c ** (1 / 3)
|
|
return c_changed
|
|
|
|
|
|
def vary_contrasts50(freqs=[(39.5, -210.5)], printing=False, cells=[], nfft=int(2 ** 15), beat='',
|
|
nfft_for_morph=4096 * 4, gain=1, freq_mult=False, sampling_factors=[''], cells_here=[],
|
|
fish_receiver='Alepto', end_f1=4645, fish_jammer='Alepto', reshuffle='reshuffled',
|
|
redo_level='celllevel', step=10, zeros='zeros', corr='ratecorrrisidual', us_name='', show=True,
|
|
start_f1=20, plot=False, c_nrs_orig=[0.03, 0.2, 0.8]): # "2013-01-08-aa-invivo-1"
|
|
# c_nrs_orig = [0.05,0.1, 0.8]#, 3] # 0.0002, 0.05, 0.5
|
|
|
|
trials_nrs = [1]
|
|
runs = 1
|
|
n = 1
|
|
|
|
dev = 0.0005
|
|
|
|
#############################################
|
|
# plot a single ROC Curve for the model!
|
|
# das aus dem Lissabon talk und das was wir für Jörg verwenden werden
|
|
# also wir wollen hier viele Kontraste und einige Frequenzen
|
|
# das will ich noch für verschiedene Frequenzen und Kontraste
|
|
|
|
#default_settings() # ts=13, ls=13, fs=13, lw = 0.7
|
|
|
|
reshuffled = 'reshuffled' # ,
|
|
|
|
# standard combination with intruder small
|
|
a_f2s = [0.1]
|
|
a_f1s = [0.03] # np.logspace(np.log10(0.0001), np.log10(1), 25)
|
|
|
|
min_amps = '_minamps_'
|
|
females = np.arange(500, 800, 25)
|
|
males = np.arange(750, 1000, 25)
|
|
dev_name = ['05']
|
|
|
|
model_cells = pd.read_csv(load_folder_name('calc_model_core') + "/models_big_fit_d_right.csv")
|
|
# if len(cells) < 1:
|
|
if len(cells_here) < 1:
|
|
cells_here = np.array(model_cells.cell)
|
|
|
|
a_fr = 1
|
|
a = 0
|
|
trials_nrs = [5]
|
|
|
|
datapoints = 1000
|
|
stimulus_length = 2
|
|
results_diff = pd.DataFrame()
|
|
position_diff = 0
|
|
plot_style()
|
|
default_figsize(column=2, length=6) #6.4
|
|
for trials_nr in trials_nrs: # +[trials_nrs[-1]]
|
|
|
|
# sachen die ich variieren will
|
|
###########################################
|
|
single_wave = '_SeveralWave_' # , '_SingleWave_']
|
|
|
|
auci_wo = []
|
|
auci_w = []
|
|
|
|
nfft = 32768
|
|
# embed()
|
|
full_names = [
|
|
'calc_model_amp_freqs-F1_750-975-25_F2_500-775-25_C2_0.1_C1Len_25_FirstC1_0.0001_LastC1_1.0_StimLen_' + str(
|
|
stimulus_length) + '_nfft_' + str(nfft) + '_trialsnr_1_absolut_power_1_minamps__dev_05temporal']
|
|
full_names = [
|
|
'calc_model_amp_freqs-F1_750-975-25_F2_500-775-25_C2_0.1_C1Len_25_FirstC1_0.0001_LastC1_1.0_StimLen_' + str(
|
|
stimulus_length) + '_nfft_' + str(nfft) + '_trialsnr_1_absolut_power_1_minamps__dev_originaltemporal']
|
|
full_names = [
|
|
'calc_model_amp_freqs-F1_750-975-75_F2_500-725-75_C2_0.1_C1Len_50_FirstC1_0.0001_LastC1_1.0_mult__start_0.0001_end_1_StimLen_25_nfft_32768_trialsnr_1__power_1_minamps__dev_original_05AUCI_point_1temporal']
|
|
|
|
frame = pd.read_csv(load_folder_name('calc_cocktailparty') + '/' + full_names[0] + '.csv')
|
|
|
|
for cell_here in cells_here:
|
|
|
|
# 'calc_model_amp_freqs-F1_750-975-25_F2_500-775-25_C2Len_25_FirstC2_0.0001_LastC2_1.0_C1_0.1_StimLen_2_nfft_32768_trialsnr_1_absolut_power_1_minamps__dev_05temporal']
|
|
c_grouped = ['c1'] # , 'c2']
|
|
# adds = [-150, -50, -10, 10, 50, 150]
|
|
# fig, ax = plt.subplots(4, len(adds), constrained_layout=True, figsize=(12, 5.5))
|
|
# for ff, full_name in enumerate(full_names):
|
|
# embed()
|
|
frame_cell_orig = frame[(frame.cell == cell_here)]
|
|
df_desired = 40
|
|
|
|
if freq_mult:
|
|
freqs = freq_two_mult_recalc(frame_cell_orig, freqs)
|
|
|
|
# embed()
|
|
if len(frame_cell_orig) > 0:
|
|
print('cell there')
|
|
try:
|
|
males = [frame_cell_orig.iloc[
|
|
np.argmin(np.abs(frame_cell_orig.df1 - df_desired))].f1] # DF=39.5[775, 825]
|
|
except:
|
|
print('min thing')
|
|
embed()
|
|
# (135.5, 625.0), (110.5, 650.0), (85.5, 675.0),(60.5, 700.0), (35.5, 725.0), (10.5, 750.0),(151.07000000000005, 675.0)
|
|
# frame_cell_orig[['df2', 'f2']]
|
|
get_frame_cell_params(c_grouped, cell_here, df_desired, frame, frame_cell_orig)
|
|
|
|
grid0 = gridspec.GridSpec(1, 1, bottom=0.08, top=0.96, left=0.115,
|
|
right=0.95,
|
|
wspace=0.04) #
|
|
grid00 = gridspec.GridSpecFromSubplotSpec(1, 1,
|
|
wspace=0.04, hspace=0.1,
|
|
subplot_spec=grid0[0]) # height_ratios=[2,1],
|
|
# grid_u = gridspec.GridSpecFromSubplotSpec(1, len(c_nrs_orig),
|
|
# hspace=0.2,
|
|
# wspace=0.2,
|
|
# subplot_spec=grid00[1]) # hspace=0.4,wspace=0.2,len(chirps)
|
|
# grid_l = gridspec.GridSpecFromSubplotSpec(1, len(freqs),
|
|
# hspace=0.7,
|
|
# wspace=0.1,
|
|
# subplot_spec=grid00[0]) # hspace=0.4,wspace=0.2,len(chirps)
|
|
grid_ll = gridspec.GridSpecFromSubplotSpec(2, len(c_nrs_orig),
|
|
hspace=0.35,
|
|
wspace=0.2, height_ratios=[1, 0.8],
|
|
subplot_spec=grid00[0]) # hspace=0.4,wspace=0.2,len(chirps)
|
|
|
|
#################################################################
|
|
|
|
# calc_model_amp_freqs-F1_750-975-25_F2_500-775-25_C2_0.1_C1Len_20_FirstC1_0.0001_LastC1_1.0_StimLen_25_nfft_32768_trialsnr_1_absolut_power_1temporal.csv
|
|
# devs_extra = ['stim','stim_rec','stim_am','original','05']#['original','05']
|
|
|
|
# da implementiere ich das jetzt für eine Zelle
|
|
# wo wir den einezlnen Punkt und Kontraste variieren
|
|
full_names = [
|
|
'calc_model_amp_freqs-F1_750-975-25_F2_500-775-25_C2_0.1_C1Len_25_FirstC1_0.0001_LastC1_1.0_StimLen_2_nfft_32768_trialsnr_1_absolut_power_1_minamps__dev_05temporal', ]
|
|
|
|
c_here = 'c1'
|
|
|
|
f_counter = 0
|
|
ax_upper = []
|
|
|
|
frame_cell_orig, df1s, df2s, f1s, f2s = find_dfs(frame_cell_orig)
|
|
|
|
eodf = frame_cell_orig.f0.unique()[0]
|
|
|
|
f = -1
|
|
axts_all = []
|
|
axps_all = []
|
|
ax_us = []
|
|
for freq1, freq2 in freqs:
|
|
f += 1
|
|
|
|
frame_cell = frame_cell_orig[(frame_cell_orig.df1 == freq1) & (frame_cell_orig.df2 == freq2)]
|
|
if len(frame_cell) < 1:
|
|
freq1 = frame_cell_orig.iloc[(np.argmin(np.abs(frame_cell_orig.df1 - freq1)))].df1
|
|
freq2 = frame_cell_orig.iloc[(np.argmin(np.abs(frame_cell_orig.df2 - freq2)))].df2
|
|
# frame_cell = frame_cell_orig[ == freq1 & ]
|
|
frame_cell = frame_cell_orig[(frame_cell_orig.df1 == freq1) & (frame_cell_orig.df2 == freq2)]
|
|
|
|
scores = ['amp_B1_01_mean', 'amp_B1_012_mean', 'amp_B2_02_mean', 'amp_B2_012_mean']
|
|
scores = ['amp_B1_01_mean_original', 'amp_f0_01_mean_original',
|
|
'amp_f1_01_mean_original'] # 'amp_B1+B2_012_mean',
|
|
color01 = 'darkgreen'
|
|
color02 = 'red'
|
|
color_stim = color_stim_core()
|
|
color01_012 = 'darkgreen' # 'blue'#
|
|
color02_012 = 'darkred'
|
|
color_eodf = coloer_eod_fr_core()
|
|
colors = [color01, color_eodf, color_stim, ] # color01_012, color02, color02_012, 'grey']
|
|
|
|
colors_array = [color_stim_core(), color01, color02, 'purple']
|
|
linestyles = ['-', '-', '-', '-', '--']
|
|
alpha = [1, 1, 1, 1, 1]
|
|
labels = scores
|
|
|
|
print(cell_here + ' F1' + str(freq1) + ' F2 ' + str(freq2))
|
|
|
|
sampling = 20000
|
|
|
|
try:
|
|
ax_u1 = plt.subplot(grid_ll[-1, :])
|
|
except:
|
|
print('grid search problem')
|
|
embed()
|
|
# if default_colors:
|
|
if 'amp_B1_01_mean_original' in frame_cell_orig.keys():
|
|
add = '_mean_original'
|
|
else:
|
|
add = '_mean'
|
|
|
|
labels, alpha, color01, color01_012, color02, color02_012, colors, colors_array, linestyles, scores, linewidths = colors_susept(
|
|
add=add)
|
|
scores = ['amp_B1_01' + add, 'amp_f1_01' + add, 'amp_f0_01' + add, ] # 'amp_B1+B2_012_mean',
|
|
labels = labels_pi_core()
|
|
#labels = ['$\Delta f$',
|
|
# '$f_{EOD}$',
|
|
# '$f$',
|
|
# ] # in ' + onebeat_cond() + ' $ \Delta f_{p}$ (f_{EOD} + f_{p})$(f_{EOD} + f_{p}) (f_{EOD} + f_{p})
|
|
alpha = [1, 1, 1]
|
|
c_dist_recalc = dist_recalc_phaselockingchapter()
|
|
ax_us = plt_single_trace(ax_us, ax_u1, frame, frame_cell_orig, freq1, freq2,
|
|
scores=scores, colors=[color01, coloer_eod_fr_core(), color_stim_core()],
|
|
linestyles=['-','-','-'], alpha=alpha, labels=labels,
|
|
sum=False, B_replace='F', default_colors=False,
|
|
c_dist_recalc=c_dist_recalc, delta = False)
|
|
|
|
ax_u1.set_xlabel('Contrast$_{' + vary_val() + '}$ [$\%$]')
|
|
if f != 0:
|
|
# remove_yticks(ax_u0)
|
|
# remove_yticks(ax_u1)
|
|
print('hi')
|
|
else:
|
|
ax_u1.set_ylabel(representation_ylabel(delta = False))#power_spectrum_name()
|
|
# embed()
|
|
|
|
#plt.suptitle() #_{p} + cell_here + ' DF2=' + str(freq2)
|
|
# rainbow_title(plt.gcf(), ax_u1, [' DF$_{s}$=' + str(freq2_here) + ' Hz',' DF$_{p}$=' + str(freq1_here) + ' Hz','c$_{s}$=10$\%$'],
|
|
# [[color_second,color_first, 'black']], start_xpos=0, ha='left', y_pos=1.02)
|
|
|
|
colors_contrasts = ['purple', coloer_eod_fr_core(), color_stim_core()]
|
|
axts = []
|
|
axps = []
|
|
axes = []
|
|
|
|
recalc = 100
|
|
c_nrs = c_dist_recalc_func(frame_cell, c_nrs=c_nrs_orig, cell=cell_here,
|
|
c_dist_recalc=c_dist_recalc, recalc_contrast_in_perc=recalc)
|
|
# embed()
|
|
mults_period = 3
|
|
xlim = [1000, 1000 + (mults_period * 1000 / np.min([np.abs(freq1), np.abs(freq2)]))]
|
|
|
|
letters = ['A','B','C']
|
|
height = 240
|
|
for c_nn, c_nr in enumerate(c_nrs):
|
|
ax_u1.scatter(c_nrs, height*np.ones(len(c_nrs)), color='black', marker='v', clip_on=False, s = 7)
|
|
ax_u1.text(c_nr, height+15, letters[c_nn], ha = 'center', va = 'center', color='black')
|
|
#lw_tuning()
|
|
ax_u1.plot([c_nr, c_nr], [0, height], color='black',linewidth = 0.05, clip_on=False)
|
|
ax_u1.set_ylim(0,285)
|
|
v_mems, arrays_spikes, arrays_stim, results_diff, position_diff, auci_wo, auci_w, arrays_original, names, p_arrays, ff = calc_roc_amp_core_cocktail(
|
|
[freq1 + eodf], [freq2 + eodf], datapoints, auci_wo, auci_w, results_diff, a_f2s,
|
|
fish_jammer, a,
|
|
trials_nr, nfft, '', us_name, gain, runs, a_fr, nfft_for_morph, beat, printing,
|
|
stimulus_length,
|
|
model_cells, position_diff, 'original', cell_here, dev_name=dev_name,
|
|
a_f1s=[c_nrs_orig[c_nn]], n=n,
|
|
reshuffled=reshuffled, min_amps=min_amps)
|
|
|
|
v_mems, arrays_spikes, arrays_stim, results_diff, position_diff, auci_wo, auci_w, arrays, names, _, ff = calc_roc_amp_core_cocktail(
|
|
[freq1 + eodf], [freq2 + eodf], datapoints, auci_wo, auci_w, results_diff, a_f2s,
|
|
fish_jammer, a,
|
|
trials_nr, nfft, '', us_name, gain, runs, a_fr, nfft_for_morph, beat, printing,
|
|
stimulus_length,
|
|
model_cells, position_diff, dev, cell_here, dev_name=dev_name, a_f1s=[c_nrs_orig[c_nn]],
|
|
n=n,
|
|
reshuffled=reshuffled, min_amps=min_amps)
|
|
|
|
time = np.arange(0, len(arrays[a][0]) / sampling, 1 / sampling)
|
|
time = time * 1000
|
|
# arrays
|
|
|
|
#######################
|
|
# plot the first array
|
|
arrays_here, arrays_sp, arrays_st, arrays_time = choose_arrays_phaselocking(arrays,
|
|
arrays_spikes,
|
|
arrays_stim,
|
|
choice='01')
|
|
|
|
colors_array_here = ['grey', 'grey', 'grey'] # colors_array[1::]
|
|
p_arrays_here = p_arrays[1::]
|
|
# embed()
|
|
for a in range(len(arrays_here)):
|
|
print('a' + str(a))
|
|
# if a != 2:
|
|
# colors_peaks = [colors_array[1], colors_array[2]]
|
|
# else:
|
|
eodf = frame_cell.f0.iloc[0]
|
|
f1 = frame_cell.f1.iloc[0]
|
|
# if a == 0:
|
|
|
|
colors_peaks = [color01, color_stim, color_eodf] # , 'red']
|
|
freqs_psd = [np.abs(freq1), f1, eodf]
|
|
grid_pt = gridspec.GridSpecFromSubplotSpec(6, 1,
|
|
hspace=0.3,
|
|
wspace=0.2,
|
|
subplot_spec=grid_ll[a, c_nn],
|
|
height_ratios=[1, 0.7, 0, 1, 0.25,
|
|
2.2
|
|
]) #.2 hspace=0.4,wspace=0.2,len(chirps)
|
|
# xlim_psd = [0, 1000]
|
|
ylim_both_psd = [-40, 40]
|
|
ylim_psd = [] # [-40, 10]
|
|
color_psd = 'black'
|
|
# embed()
|
|
ax_as = []
|
|
#############################
|
|
|
|
axe = plt.subplot(grid_pt[0])
|
|
axes.append(axe)
|
|
plt_stim_saturation(a, a_f1s, a_f2s, [], arrays_st, axe, colors_array_here, f,
|
|
f_counter, names, time, xlim=xlim) # np.array(arrays_sp)*1000
|
|
# if a == 0:
|
|
a_f2_cm = c_dist_recalc_func(frame_cell, c_nrs=[a_f2s[0]], cell=cell_here)
|
|
# embed()#{p}
|
|
if a == 2: # if (a_f1s[0] != 0) & (a_f2s[0] != 0):
|
|
title_name = ' $c_{' + vary_val() + '}=%s\% c' + stable_val() + '=' % (
|
|
((int(np.round(a_f2_cm[0]))), int(np.round(c_nrs[c_nn])))) # + '$\%$'str(
|
|
elif a == 0: # elif (a_f1s[0] != 0):_{p}_{s}
|
|
title_name = ' $c_{' + vary_val() + '}=%s$' % int(np.round(c_nrs[c_nn])) + '\,$\%$, '+' $\Delta f_{' + vary_val() + '}= %s$\,Hz' % (int(freq1)) # str() #+ '$\%$'
|
|
elif a == 1: # elif (a_f2s[0] != 0):
|
|
title_name = ' $c_{' + vary_val() + '}=%s$' % int(np.round(a_f2_cm[0])) + '\,$\%$, '+' $\Delta f_{' + vary_val() + '}= %s$\,Hz' % (int(freq1)) # str()
|
|
|
|
axe.text(1, 1, title_name, va='bottom', ha='right',
|
|
transform=axe.transAxes)
|
|
|
|
#############################
|
|
|
|
axs = plt.subplot(grid_pt[1])
|
|
# embed()
|
|
plt_spikes_ROC(axs, 'grey', np.array(arrays_sp[a]) * 1000, xlim)
|
|
|
|
#############################
|
|
axt = plt.subplot(grid_pt[3])
|
|
axts.append(axt)
|
|
plt_vmem_saturation(a, a_f1s, a_f2s, arrays_sp, arrays_time, axt, colors_array_here, f,
|
|
f_counter, names, time, xlim=xlim)
|
|
#############################
|
|
axp = plt.subplot(grid_pt[5])
|
|
axps.append(axp)
|
|
# todo das mit dem gemeinsamen log noch anpassen
|
|
# embed()
|
|
# p_arrays[a], ff = ml.psd(arrays_here_original[a][0] - np.mean(arrays_here[a][0]), Fs=sampling, NFFT=nfft,
|
|
# noverlap=nfft // 2)
|
|
# embed()
|
|
log = ''#'log' # 'log'
|
|
maxx = eodf * 1.15 # 5
|
|
pp = log_calc_psd(axp, colors_array_here[a], ff, log, p_arrays_here[a][0],
|
|
np.nanmax(p_arrays_here))
|
|
freqs_peaks1, colors_peaks1, labels1, alphas1 = chose_all_freq_combos(freq2, colors_array,
|
|
freq1,
|
|
maxx, eodf,
|
|
color_eodf=coloer_eod_fr_core(),
|
|
name='01',
|
|
stim_thing=False,
|
|
color_stim=color_stim_core(),
|
|
color_stim_mult=color_stim_core())
|
|
|
|
# embed()
|
|
plt_peaks_several(labels1, freqs_peaks1, [pp], 0,
|
|
axp, pp, colors_peaks1, ff, ms=25, alphas=alphas1,
|
|
clip_on=False, limit=10000)
|
|
|
|
plt_psd_saturation(pp, ff, a, axp, colors_array_here, nfft, sampling, freqs=freqs_psd,
|
|
colors_peaks=colors_peaks, xlim=(0, maxx))
|
|
|
|
# if c_nn != 0:
|
|
# remove_yticks(axt)
|
|
# remove_yticks(axp)
|
|
if log:
|
|
axp.show_spines('b')
|
|
if a == 0:
|
|
axp.yscalebar(-0.05, 0.5, 20, 'dB', va='center', ha='left')
|
|
else:
|
|
axp.show_spines('lb')
|
|
if c_nn != 0:
|
|
remove_yticks(axp)
|
|
else:
|
|
axp.set_ylabel(power_spectrum_name())
|
|
|
|
if a == 0:
|
|
axt.show_spines('')
|
|
axt.xscalebar(0.1, -0.1, 5, 'ms', va='right', ha='bottom')
|
|
axt.yscalebar(-0.02, 0.35, 600, 'Hz', va='left', ha='top')
|
|
# ax00.xscalebar(0.1, -0.02, length, 'ms', va='right', ha='bottom') ##ylim[0]
|
|
# ax00.yscalebar(-0.02, 0.35, 500, 'Hz', va='center', ha='left')
|
|
# axt.set_xlabel('Time [s]')
|
|
# if c_nn == 1:
|
|
axp.set_xlabel('Frequency [Hz]')
|
|
|
|
|
|
|
|
#############################
|
|
isis = False
|
|
if isis:
|
|
axi = plt.subplot(grid_pt[-1])
|
|
isis = []
|
|
|
|
for t in range(len(arrays_sp[a])):
|
|
isi = calc_isi(arrays_sp[a][t], eodf)
|
|
isis.append(isi)
|
|
axi.hist(np.concatenate(isis), bins=100, color='grey')
|
|
axi.set_xlabel(isi_xlabel())
|
|
axi.show_spines('b')
|
|
# plt.show()
|
|
|
|
f_counter += 1
|
|
axts_all.extend(axts)
|
|
axps_all.extend(axps)
|
|
ax_us[0].legend(ncol=3, loc=(0, 1), columnspacing=2.5) #5 -0.07#loc=(0.9, 0.7)
|
|
|
|
axts_all[0].get_shared_y_axes().join(*axts_all)
|
|
axts_all[0].get_shared_x_axes().join(*axts_all)
|
|
axps_all[0].get_shared_y_axes().join(*axps_all)
|
|
axps_all[0].get_shared_x_axes().join(*axps_all)
|
|
join_y(axts)
|
|
set_same_ylim(axts)
|
|
set_same_ylim(axps)
|
|
join_x(axts)
|
|
join_x(ax_us)
|
|
join_y(ax_us)
|
|
fig = plt.gcf()
|
|
fig.tag([axes[0], axes[1], axes[2]], xoffs=-3, yoffs=1)
|
|
fig.tag([ax_u1], xoffs=-3, yoffs=3)
|
|
save_visualization(cell_here, show)
|
|
print('finished cell here')
|
|
|
|
|
|
def color_stim_core():
|
|
return 'grey'
|
|
|
|
|
|
def coloer_eod_fr_core():
|
|
return 'black'
|
|
|
|
|
|
def labels_pi_core():
|
|
labels = [DF_pi_core(),
|
|
f_pi_core(),
|
|
f_eod_pi_core(),
|
|
] # (f_{EOD} + f_{p})$(f_{EOD} + f_{p}) (f_{EOD} + f_{p})
|
|
return labels
|
|
|
|
|
|
def vary_contrasts5(freqs=[(39.5, -210.5)], printing=False, cells=[], nfft=int(2 ** 15), beat='',
|
|
nfft_for_morph=4096 * 4, gain=1, freq_mult=False, sampling_factors=[''], cells_here=[],
|
|
fish_receiver='Alepto', end_f1=4645, fish_jammer='Alepto', reshuffle='reshuffled',
|
|
redo_level='celllevel', step=10, zeros='zeros', corr='ratecorrrisidual', us_name='', show=True,
|
|
start_f1=20, plot=False, c_nrs_orig=[0.05, 0.1, 0.8]):#"2013-01-08-aa-invivo-1"
|
|
#c_nrs_orig = [0.05,0.1, 0.8]#, 3] # 0.0002, 0.05, 0.5
|
|
|
|
trials_nrs = [1]
|
|
runs = 1
|
|
n = 1
|
|
|
|
dev = 0.0005
|
|
|
|
#############################################
|
|
# plot a single ROC Curve for the model!
|
|
# das aus dem Lissabon talk und das was wir für Jörg verwenden werden
|
|
# also wir wollen hier viele Kontraste und einige Frequenzen
|
|
# das will ich noch für verschiedene Frequenzen und Kontraste
|
|
|
|
default_settings() # ts=13, ls=13, fs=13, lw = 0.7
|
|
|
|
reshuffled = 'reshuffled' # ,
|
|
|
|
# standard combination with intruder small
|
|
a_f2s = [0.1]
|
|
a_f1s = [0.03] # np.logspace(np.log10(0.0001), np.log10(1), 25)
|
|
|
|
min_amps = '_minamps_'
|
|
females = np.arange(500, 800, 25)
|
|
males = np.arange(750, 1000, 25)
|
|
dev_name = ['05']
|
|
|
|
model_cells = pd.read_csv(load_folder_name('calc_model_core') + "/models_big_fit_d_right.csv")
|
|
# if len(cells) < 1:
|
|
if len(cells_here) < 1:
|
|
cells_here = np.array(model_cells.cell)
|
|
|
|
a_fr = 1
|
|
a = 0
|
|
trials_nrs = [5]
|
|
|
|
datapoints = 1000
|
|
stimulus_length = 2
|
|
results_diff = pd.DataFrame()
|
|
position_diff = 0
|
|
plot_style()
|
|
default_settings(column=2, length=6.5)
|
|
for trials_nr in trials_nrs: # +[trials_nrs[-1]]
|
|
|
|
# sachen die ich variieren will
|
|
###########################################
|
|
single_wave = '_SeveralWave_' # , '_SingleWave_']
|
|
|
|
auci_wo = []
|
|
auci_w = []
|
|
|
|
nfft = 32768
|
|
# embed()
|
|
full_names = [
|
|
'calc_model_amp_freqs-F1_750-975-25_F2_500-775-25_C2_0.1_C1Len_25_FirstC1_0.0001_LastC1_1.0_StimLen_' + str(
|
|
stimulus_length) + '_nfft_' + str(nfft) + '_trialsnr_1_absolut_power_1_minamps__dev_05temporal']
|
|
full_names = [
|
|
'calc_model_amp_freqs-F1_750-975-25_F2_500-775-25_C2_0.1_C1Len_25_FirstC1_0.0001_LastC1_1.0_StimLen_' + str(
|
|
stimulus_length) + '_nfft_' + str(nfft) + '_trialsnr_1_absolut_power_1_minamps__dev_originaltemporal']
|
|
full_names = [
|
|
'calc_model_amp_freqs-F1_750-975-75_F2_500-725-75_C2_0.1_C1Len_50_FirstC1_0.0001_LastC1_1.0_mult__start_0.0001_end_1_StimLen_25_nfft_32768_trialsnr_1__power_1_minamps__dev_original_05AUCI_point_1temporal']
|
|
|
|
frame = pd.read_csv(load_folder_name('calc_cocktailparty') + '/' + full_names[0] + '.csv')
|
|
|
|
for cell_here in cells_here:
|
|
|
|
# 'calc_model_amp_freqs-F1_750-975-25_F2_500-775-25_C2Len_25_FirstC2_0.0001_LastC2_1.0_C1_0.1_StimLen_2_nfft_32768_trialsnr_1_absolut_power_1_minamps__dev_05temporal']
|
|
c_grouped = ['c1'] # , 'c2']
|
|
# adds = [-150, -50, -10, 10, 50, 150]
|
|
# fig, ax = plt.subplots(4, len(adds), constrained_layout=True, figsize=(12, 5.5))
|
|
# for ff, full_name in enumerate(full_names):
|
|
# embed()
|
|
frame_cell_orig = frame[(frame.cell == cell_here)]
|
|
df_desired = 40
|
|
|
|
if freq_mult:
|
|
freqs = freq_two_mult_recalc(frame_cell_orig, freqs)
|
|
|
|
#embed()
|
|
if len(frame_cell_orig) > 0:
|
|
print('cell there')
|
|
try:
|
|
males = [frame_cell_orig.iloc[
|
|
np.argmin(np.abs(frame_cell_orig.df1 - df_desired))].f1] # DF=39.5[775, 825]
|
|
except:
|
|
print('min thing')
|
|
embed()
|
|
# (135.5, 625.0), (110.5, 650.0), (85.5, 675.0),(60.5, 700.0), (35.5, 725.0), (10.5, 750.0),(151.07000000000005, 675.0)
|
|
# frame_cell_orig[['df2', 'f2']]
|
|
get_frame_cell_params(c_grouped, cell_here, df_desired, frame, frame_cell_orig)
|
|
|
|
|
|
|
|
grid0 = gridspec.GridSpec(1, 1, bottom=0.08, top=0.92, left=0.11,
|
|
right=0.95,
|
|
wspace=0.04) #
|
|
grid00 = gridspec.GridSpecFromSubplotSpec(1, 1,
|
|
wspace=0.04, hspace=0.1,
|
|
subplot_spec=grid0[0]) # height_ratios=[2,1],
|
|
# grid_u = gridspec.GridSpecFromSubplotSpec(1, len(c_nrs_orig),
|
|
# hspace=0.2,
|
|
# wspace=0.2,
|
|
# subplot_spec=grid00[1]) # hspace=0.4,wspace=0.2,len(chirps)
|
|
# grid_l = gridspec.GridSpecFromSubplotSpec(1, len(freqs),
|
|
# hspace=0.7,
|
|
# wspace=0.1,
|
|
# subplot_spec=grid00[0]) # hspace=0.4,wspace=0.2,len(chirps)
|
|
grid_ll = gridspec.GridSpecFromSubplotSpec(2, len(c_nrs_orig),
|
|
hspace=0.35,
|
|
wspace=0.2, height_ratios=[1,0.8],
|
|
subplot_spec=grid00[0]) # hspace=0.4,wspace=0.2,len(chirps)
|
|
|
|
#################################################################
|
|
|
|
# calc_model_amp_freqs-F1_750-975-25_F2_500-775-25_C2_0.1_C1Len_20_FirstC1_0.0001_LastC1_1.0_StimLen_25_nfft_32768_trialsnr_1_absolut_power_1temporal.csv
|
|
# devs_extra = ['stim','stim_rec','stim_am','original','05']#['original','05']
|
|
|
|
# da implementiere ich das jetzt für eine Zelle
|
|
# wo wir den einezlnen Punkt und Kontraste variieren
|
|
full_names = [
|
|
'calc_model_amp_freqs-F1_750-975-25_F2_500-775-25_C2_0.1_C1Len_25_FirstC1_0.0001_LastC1_1.0_StimLen_2_nfft_32768_trialsnr_1_absolut_power_1_minamps__dev_05temporal', ]
|
|
|
|
c_here = 'c1'
|
|
|
|
f_counter = 0
|
|
ax_upper = []
|
|
|
|
frame_cell_orig, df1s, df2s, f1s, f2s = find_dfs(frame_cell_orig)
|
|
|
|
eodf = frame_cell_orig.f0.unique()[0]
|
|
|
|
f = -1
|
|
axts_all = []
|
|
axps_all = []
|
|
ax_us = []
|
|
for freq1, freq2 in freqs:
|
|
f += 1
|
|
|
|
frame_cell = frame_cell_orig[(frame_cell_orig.df1 == freq1) & (frame_cell_orig.df2 == freq2)]
|
|
if len(frame_cell) < 1:
|
|
freq1 = frame_cell_orig.iloc[(np.argmin(np.abs(frame_cell_orig.df1 - freq1)))].df1
|
|
freq2 = frame_cell_orig.iloc[(np.argmin(np.abs(frame_cell_orig.df2 - freq2)))].df2
|
|
# frame_cell = frame_cell_orig[ == freq1 & ]
|
|
frame_cell = frame_cell_orig[(frame_cell_orig.df1 == freq1) & (frame_cell_orig.df2 == freq2)]
|
|
|
|
scores = ['amp_B1_01_mean', 'amp_B1_012_mean', 'amp_B2_02_mean', 'amp_B2_012_mean']
|
|
scores = ['amp_B1_01_mean_original', 'amp_f0_01_mean_original','amp_f1_01_mean_original'] # 'amp_B1+B2_012_mean',
|
|
color01 = 'darkgreen'
|
|
color02 = 'red'
|
|
color_stim = 'grey'
|
|
color01_012 = 'darkgreen' # 'blue'#
|
|
color02_012 = 'darkred'
|
|
color_eodf = 'black'
|
|
colors = [color01,color_eodf,color_stim,]# color01_012, color02, color02_012, 'grey']
|
|
|
|
colors_array = ['grey', color01, color02, 'purple']
|
|
linestyles = ['-', '-', '-', '-', '--']
|
|
alpha = [1, 1, 1, 1, 1]
|
|
labels = scores
|
|
|
|
print(cell_here + ' F1' + str(freq1) + ' F2 ' + str(freq2))
|
|
|
|
sampling = 20000
|
|
|
|
try:
|
|
ax_u1 = plt.subplot(grid_ll[-1, :])
|
|
except:
|
|
print('grid search problem')
|
|
embed()
|
|
#if default_colors:
|
|
if 'amp_B1_01_mean_original' in frame_cell_orig.keys():
|
|
add = '_mean_original'
|
|
else:
|
|
add = '_mean'
|
|
|
|
labels, alpha, color01, color01_012, color02, color02_012, colors, colors_array, linestyles, scores,linewidths = colors_susept(
|
|
add=add)
|
|
scores = ['amp_B1_01' + add, 'amp_f0_01' + add, 'amp_f1_01' + add, ] # 'amp_B1+B2_012_mean',
|
|
labels = ['$\Delta f_{p}$ peak in ' + onebeat_cond() + ' $(f_{EOD} + f_{p})$',
|
|
'$f_{EOD}$ peak in ' + onebeat_cond() + ' $(f_{EOD} + f_{p})$',
|
|
'$f_{p}$ peak in ' + onebeat_cond() + ' $(f_{EOD} + f_{p})$',
|
|
]
|
|
|
|
alpha = [1,1,1]
|
|
c_dist_recalc = dist_recalc_phaselockingchapter()
|
|
ax_us = plt_single_trace(ax_us, ax_u1, frame, frame_cell_orig, freq1, freq2,
|
|
scores=scores, colors=[color01, 'black','grey'],
|
|
linestyles=linestyles, alpha=alpha, labels = labels,
|
|
sum=False, B_replace='F', default_colors = False, c_dist_recalc = c_dist_recalc)
|
|
|
|
if f != 0:
|
|
# remove_yticks(ax_u0)
|
|
# remove_yticks(ax_u1)
|
|
print('hi')
|
|
else:
|
|
ax_u1.set_ylabel(power_spectrum_name())
|
|
# embed()
|
|
|
|
plt.suptitle(' $\Delta f_{p}= %s $ Hz' % (int(freq1)))# + cell_here + ' DF2=' + str(freq2)
|
|
#rainbow_title(plt.gcf(), ax_u1, [' DF$_{s}$=' + str(freq2_here) + ' Hz',' DF$_{p}$=' + str(freq1_here) + ' Hz','c$_{s}$=10$\%$'],
|
|
# [[color_second,color_first, 'black']], start_xpos=0, ha='left', y_pos=1.02)
|
|
|
|
colors_contrasts = ['purple', 'black', 'grey']
|
|
axts = []
|
|
axps = []
|
|
axes = []
|
|
|
|
recalc = 100
|
|
c_nrs = c_dist_recalc_func(frame_cell, c_nrs=c_nrs_orig, cell=cell_here, c_dist_recalc = c_dist_recalc, recalc_contrast_in_perc= recalc)
|
|
# embed()
|
|
mults_period = 3
|
|
xlim = [1000, 1000 + (mults_period * 1000 / np.min([np.abs(freq1), np.abs(freq2)]))]
|
|
for c_nn, c_nr in enumerate(c_nrs):
|
|
ax_u1.scatter(c_nrs, np.zeros(len(c_nrs)), color='black', marker='^', clip_on=False)
|
|
|
|
v_mems, arrays_spikes, arrays_stim, results_diff, position_diff, auci_wo, auci_w, arrays_original, names ,p_arrays, ff = calc_roc_amp_core_cocktail(
|
|
[freq1 + eodf], [freq2 + eodf], datapoints, auci_wo, auci_w, results_diff, a_f2s,
|
|
fish_jammer, a,
|
|
trials_nr, nfft, '', us_name, gain, runs, a_fr, nfft_for_morph, beat, printing,
|
|
stimulus_length,
|
|
model_cells, position_diff, 'original', cell_here, dev_name=dev_name, a_f1s=[c_nrs_orig[c_nn]], n=n,
|
|
reshuffled=reshuffled, min_amps=min_amps)
|
|
|
|
v_mems, arrays_spikes, arrays_stim, results_diff, position_diff, auci_wo, auci_w, arrays, names, _, ff = calc_roc_amp_core_cocktail(
|
|
[freq1 + eodf], [freq2 + eodf], datapoints, auci_wo, auci_w, results_diff, a_f2s,
|
|
fish_jammer, a,
|
|
trials_nr, nfft, '', us_name, gain, runs, a_fr, nfft_for_morph, beat, printing,
|
|
stimulus_length,
|
|
model_cells, position_diff, dev, cell_here, dev_name=dev_name, a_f1s=[c_nrs_orig[c_nn]],
|
|
n=n,
|
|
reshuffled=reshuffled, min_amps=min_amps)
|
|
|
|
time = np.arange(0, len(arrays[a][0]) / sampling, 1 / sampling)
|
|
time = time * 1000
|
|
# arrays
|
|
|
|
#######################
|
|
# plot the first array
|
|
arrays_here, arrays_sp, arrays_st, arrays_time = choose_arrays_phaselocking(arrays,
|
|
arrays_spikes,
|
|
arrays_stim, choice = '01')
|
|
|
|
colors_array_here = ['grey', 'grey', 'grey'] # colors_array[1::]
|
|
p_arrays_here = p_arrays[1::]
|
|
# embed()
|
|
for a in range(len(arrays_here)):
|
|
print('a' + str(a))
|
|
# if a != 2:
|
|
# colors_peaks = [colors_array[1], colors_array[2]]
|
|
# else:
|
|
eodf = frame_cell.f0.iloc[0]
|
|
f1 = frame_cell.f1.iloc[0]
|
|
#if a == 0:
|
|
|
|
colors_peaks = [color01, color_stim, color_eodf] # , 'red']
|
|
freqs_psd = [np.abs(freq1), f1, eodf]
|
|
grid_pt = gridspec.GridSpecFromSubplotSpec(8, 1,
|
|
hspace=0.3,
|
|
wspace=0.2,
|
|
subplot_spec=grid_ll[a, c_nn],
|
|
height_ratios=[1, 0.7, 0, 1, 0.25,
|
|
2.2, 1, 1.2]) # hspace=0.4,wspace=0.2,len(chirps)
|
|
# xlim_psd = [0, 1000]
|
|
ylim_both_psd = [-40, 40]
|
|
ylim_psd = [] # [-40, 10]
|
|
color_psd = 'black'
|
|
# embed()
|
|
ax_as = []
|
|
#############################
|
|
|
|
axe = plt.subplot(grid_pt[0])
|
|
axes.append(axe)
|
|
plt_stim_saturation(a, a_f1s, a_f2s, [], arrays_st, axe, colors_array_here, f,
|
|
f_counter, names, time, xlim=xlim) # np.array(arrays_sp)*1000
|
|
# if a == 0:
|
|
a_f2_cm = c_dist_recalc_func(frame_cell, c_nrs=[a_f2s[0]], cell=cell_here)
|
|
# embed()
|
|
if a == 2: # if (a_f1s[0] != 0) & (a_f2s[0] != 0):
|
|
title_name = ' c$_{p}=%s\% c2=' %(((int(np.round(a_f2_cm[0]))),int(np.round(c_nrs[c_nn])))) #+ '$\%$'str(
|
|
elif a == 0: # elif (a_f1s[0] != 0):
|
|
title_name = ' c$_{p}=%s$' % int(np.round(c_nrs[c_nn]))+'$\%$'#str() #+ '$\%$'
|
|
elif a == 1: # elif (a_f2s[0] != 0):
|
|
title_name = ' $c2=%s$' % int(np.round(a_f2_cm[0]))+'$\%$'#str()
|
|
|
|
axe.text(1, 1, title_name, va='bottom', ha='right',
|
|
transform=axe.transAxes)
|
|
|
|
#############################
|
|
|
|
axs = plt.subplot(grid_pt[1])
|
|
# embed()
|
|
plt_spikes_ROC(axs, 'grey', np.array(arrays_sp[a]) * 1000, xlim)
|
|
|
|
#############################
|
|
axt = plt.subplot(grid_pt[3])
|
|
axts.append(axt)
|
|
plt_vmem_saturation(a, a_f1s, a_f2s, arrays_sp, arrays_time, axt, colors_array_here, f,
|
|
f_counter, names, time, xlim=xlim)
|
|
#############################
|
|
axp = plt.subplot(grid_pt[-3])
|
|
axps.append(axp)
|
|
# todo das mit dem gemeinsamen log noch anpassen
|
|
# embed()
|
|
# p_arrays[a], ff = ml.psd(arrays_here_original[a][0] - np.mean(arrays_here[a][0]), Fs=sampling, NFFT=nfft,
|
|
# noverlap=nfft // 2)
|
|
# embed()
|
|
log = '' # 'log'
|
|
maxx = eodf*1.15#5
|
|
pp = log_calc_psd(axp, colors_array_here[a], ff, log, p_arrays_here[a][0],
|
|
np.nanmax(p_arrays_here))
|
|
plt_psd_saturation(pp, ff, a, axp, colors_array_here, nfft, sampling, freqs=freqs_psd,
|
|
colors_peaks=colors_peaks, xlim=(0, maxx))
|
|
|
|
# if c_nn != 0:
|
|
# remove_yticks(axt)
|
|
# remove_yticks(axp)
|
|
if log:
|
|
axp.show_spines('b')
|
|
if a == 0:
|
|
axp.yscalebar(-0.05, 0.5, 20, 'dB', va='center', ha='left')
|
|
else:
|
|
axp.show_spines('lb')
|
|
if c_nn != 0:
|
|
remove_yticks(axp)
|
|
else:
|
|
axp.set_ylabel(power_spectrum_name())
|
|
|
|
if a == 0:
|
|
axt.show_spines('')
|
|
axt.xscalebar(0.1, -0.1, 5, 'ms', va='right', ha='bottom')
|
|
axt.yscalebar(-0.02, 0.35, 600, 'Hz', va='left', ha='top')
|
|
# ax00.xscalebar(0.1, -0.02, length, 'ms', va='right', ha='bottom') ##ylim[0]
|
|
# ax00.yscalebar(-0.02, 0.35, 500, 'Hz', va='center', ha='left')
|
|
# axt.set_xlabel('Time [s]')
|
|
# if c_nn == 1:
|
|
axp.set_xlabel('Frequency [Hz]')
|
|
|
|
freqs_peaks, colors_peaks, labels, alphas = chose_all_freq_combos(freq2, colors_array, freq1,
|
|
maxx, eodf,
|
|
color_eodf='black',
|
|
name='01',
|
|
color_stim='grey',
|
|
color_stim_mult='grey')
|
|
|
|
plt_peaks_several(labels, freqs_peaks, [pp], 0,
|
|
axp, pp, colors_peaks, ff, ms=18, alphas=alphas,
|
|
clip_on=False, limit = 10000)
|
|
|
|
#############################
|
|
axi = plt.subplot(grid_pt[-1])
|
|
isis = []
|
|
|
|
for t in range(len(arrays_sp[a])):
|
|
isi = calc_isi(arrays_sp[a][t], eodf)
|
|
isis.append(isi)
|
|
axi.hist(np.concatenate(isis), bins = 100, color = 'grey')
|
|
axi.set_xlabel(isi_xlabel())
|
|
axi.show_spines('b')
|
|
#plt.show()
|
|
|
|
f_counter += 1
|
|
axts_all.extend(axts)
|
|
axps_all.extend(axps)
|
|
ax_us[0].legend(ncol = 3, loc = (0,1)) # -0.07#loc=(0.9, 0.7)
|
|
|
|
axts_all[0].get_shared_y_axes().join(*axts_all)
|
|
axts_all[0].get_shared_x_axes().join(*axts_all)
|
|
axps_all[0].get_shared_y_axes().join(*axps_all)
|
|
axps_all[0].get_shared_x_axes().join(*axps_all)
|
|
join_y(axts)
|
|
set_same_ylim(axts)
|
|
set_same_ylim(axps)
|
|
join_x(axts)
|
|
join_x(ax_us)
|
|
join_y(ax_us)
|
|
fig = plt.gcf()
|
|
fig.tag([axes[0],axes[1], axes[2]], xoffs = -3, yoffs = 1)
|
|
fig.tag([ax_u1], xoffs = -3, yoffs = 3)
|
|
save_visualization(cell_here, show)
|
|
print('finished cell here')
|
|
|
|
|
|
def power_spectrum_name():
|
|
return 'Power [Hz]'
|
|
|
|
|
|
def choose_arrays_phaselocking(arrays, arrays_spikes, arrays_stim, choice = 'all'):
|
|
if choice == 'all':
|
|
arrays_time = arrays[1::] # [v_mems[1],v_mems[3]]#[1,2]#[1::]
|
|
arrays_here = arrays[1::] # [arrays[1],arrays[3]]#arrays[1::]#
|
|
# arrays_here_original = arrays_original[1::] # [arrays[1],arrays[3]]#arrays[1::]#
|
|
arrays_st = arrays_stim[1::] # [arrays_stim[1],arrays_stim[3]]#
|
|
arrays_sp = arrays_spikes[1::] # [arrays_spikes[1],arrays_spikes[3]]#arrays_spikes[1::]
|
|
elif choice == '01':
|
|
arrays_time = [arrays[1]] # [v_mems[1],v_mems[3]]#[1,2]#[1::]
|
|
arrays_here = [arrays[1]] # [arrays[1],arrays[3]]#arrays[1::]#
|
|
# arrays_here_original = arrays_original[1::] # [arrays[1],arrays[3]]#arrays[1::]#
|
|
arrays_st = [arrays_stim[1]] # [arrays_stim[1],arrays_stim[3]]#
|
|
arrays_sp = [arrays_spikes[1]] # [arrays_spikes[1],arrays_spikes[3]]#arrays_spikes[1::]
|
|
return arrays_here, arrays_sp, arrays_st, arrays_time
|
|
|
|
|
|
def test_here():
|
|
embed()
|
|
|
|
def f_vary_name(delta =False, freq = None):
|
|
if delta:
|
|
val = '\ensuremath{\Delta f_{1}}'
|
|
else:
|
|
val = '\ensuremath{f_{1}}'
|
|
if freq:
|
|
val = '$'+val+'=%s$' % (freq)+'\,Hz'
|
|
return val
|
|
|
|
def f_stable_name(freq = None, delta = False):
|
|
if delta:
|
|
val = '\ensuremath{\Delta f_{2}}'
|
|
else:
|
|
val = '\ensuremath{f_{2}}'
|
|
if freq:
|
|
val = '$'+val+'=%s$' % (freq)+'\,Hz'
|
|
return val
|
|
|
|
def vary_contrasts4(yposs = [450, 450, 450],freqs=[(39.5, -210.5)], printing=False, beat='', nfft_for_morph=4096 * 4, gain=1,
|
|
sampling_factors=[''], cells_here=["2013-01-08-aa-invivo-1"], fish_jammer='Alepto', us_name='',
|
|
show=True):
|
|
trials_nrs = [1]
|
|
runs = 1
|
|
n = 1
|
|
|
|
dev = 0.001
|
|
|
|
#############################################
|
|
# plot a single ROC Curve for the model!
|
|
# das aus dem Lissabon talk und das was wir für Jörg verwenden werden
|
|
# also wir wollen hier viele Kontraste und einige Frequenzen
|
|
# das will ich noch für verschiedene Frequenzen und Kontraste
|
|
|
|
#default_settings() # ts=13, ls=13, fs=13, lw = 0.7
|
|
|
|
reshuffled = 'reshuffled' # ,
|
|
|
|
# standard combination with intruder small
|
|
a_f2s = [0.1]
|
|
a_f1s = [0.04] # np.logspace(np.log10(0.0001), np.log10(1), 25)
|
|
|
|
min_amps = '_minamps_'
|
|
females = np.arange(500, 800, 25)
|
|
males = np.arange(750, 1000, 25)
|
|
dev_name = ['05']
|
|
|
|
model_cells = pd.read_csv(load_folder_name('calc_model_core') + "/models_big_fit_d_right.csv")
|
|
# if len(cells) < 1:
|
|
if len(cells_here) < 1:
|
|
cells_here = np.array(model_cells.cell)
|
|
|
|
a_fr = 1
|
|
a = 0
|
|
trials_nrs = [5]
|
|
|
|
datapoints = 1000
|
|
stimulus_length = 2
|
|
results_diff = pd.DataFrame()
|
|
position_diff = 0
|
|
plot_style()
|
|
|
|
default_figsize(column=2, length=7.5)
|
|
for trials_nr in trials_nrs: # +[trials_nrs[-1]]
|
|
|
|
# sachen die ich variieren will
|
|
###########################################
|
|
single_wave = '_SeveralWave_' # , '_SingleWave_']
|
|
|
|
auci_wo = []
|
|
auci_w = []
|
|
|
|
nfft = 32768
|
|
|
|
for cell_here in cells_here:
|
|
# embed()
|
|
full_names = [
|
|
'calc_model_amp_freqs-F1_750-975-25_F2_500-775-25_C2_0.1_C1Len_25_FirstC1_0.0001_LastC1_1.0_StimLen_' + str(
|
|
stimulus_length) + '_nfft_' + str(nfft) + '_trialsnr_1_absolut_power_1_minamps__dev_05temporal']
|
|
|
|
# 'calc_model_amp_freqs-F1_750-975-25_F2_500-775-25_C2Len_25_FirstC2_0.0001_LastC2_1.0_C1_0.1_StimLen_2_nfft_32768_trialsnr_1_absolut_power_1_minamps__dev_05temporal']
|
|
c_grouped = ['c1'] # , 'c2']
|
|
# adds = [-150, -50, -10, 10, 50, 150]
|
|
# fig, ax = plt.subplots(4, len(adds), constrained_layout=True, figsize=(12, 5.5))
|
|
# for ff, full_name in enumerate(full_names):
|
|
frame = pd.read_csv(load_folder_name('calc_cocktailparty') + '/' + full_names[0] + '.csv')
|
|
# embed()
|
|
frame_cell_orig = frame[(frame.cell == cell_here)]
|
|
df_desired = 40
|
|
if len(frame_cell_orig) > 0:
|
|
try:
|
|
males = [frame_cell_orig.iloc[
|
|
np.argmin(np.abs(frame_cell_orig.df1 - df_desired))].f1] # DF=39.5[775, 825]
|
|
except:
|
|
print('min thing')
|
|
embed()
|
|
# (135.5, 625.0), (110.5, 650.0), (85.5, 675.0),(60.5, 700.0), (35.5, 725.0), (10.5, 750.0),(151.07000000000005, 675.0)
|
|
# frame_cell_orig[['df2', 'f2']]
|
|
get_frame_cell_params(c_grouped, cell_here, df_desired, frame, frame_cell_orig)
|
|
|
|
c_nrs_orig = [0.05,0.15]#0.0002, 0.05, 0.5
|
|
c_nrs_orig = [0.02,0.2]#0.0002, 0.05, 0.5
|
|
trials_nr = 20#20
|
|
redo = False#True
|
|
log = 'log'#'log'
|
|
grid0 = gridspec.GridSpec(1, 1, bottom=0.08, top=0.93, left=0.11,
|
|
right=0.95,wspace=0.04) #
|
|
grid00 = gridspec.GridSpecFromSubplotSpec(1, 1,
|
|
wspace=0.04, hspace=0.1,
|
|
subplot_spec=grid0[0]) # height_ratios=[2,1],
|
|
#grid_u = gridspec.GridSpecFromSubplotSpec(1, len(c_nrs_orig),
|
|
# hspace=0.2,
|
|
# wspace=0.2,
|
|
# subplot_spec=grid00[1]) # hspace=0.4,wspace=0.2,len(chirps)
|
|
#grid_l = gridspec.GridSpecFromSubplotSpec(1, len(freqs),
|
|
# hspace=0.7,
|
|
# wspace=0.1,
|
|
# subplot_spec=grid00[0]) # hspace=0.4,wspace=0.2,len(chirps)
|
|
grid_ll = gridspec.GridSpecFromSubplotSpec(len(c_nrs_orig)+1,3,
|
|
hspace=0.75,
|
|
wspace=0.1, height_ratios = [1,1,0.7],
|
|
subplot_spec=grid00[0]) # 1.2hspace=0.4,wspace=0.2,len(chirps)
|
|
|
|
#################################################################
|
|
|
|
# calc_model_amp_freqs-F1_750-975-25_F2_500-775-25_C2_0.1_C1Len_20_FirstC1_0.0001_LastC1_1.0_StimLen_25_nfft_32768_trialsnr_1_absolut_power_1temporal.csv
|
|
# devs_extra = ['stim','stim_rec','stim_am','original','05']#['original','05']
|
|
|
|
# da implementiere ich das jetzt für eine Zelle
|
|
# wo wir den einezlnen Punkt und Kontraste variieren
|
|
full_names = [
|
|
'calc_model_amp_freqs-F1_750-975-25_F2_500-775-25_C2_0.1_C1Len_25_FirstC1_0.0001_LastC1_1.0_StimLen_2_nfft_32768_trialsnr_1_absolut_power_1_minamps__dev_05temporal', ]
|
|
|
|
c_here = 'c1'
|
|
|
|
f_counter = 0
|
|
ax_upper = []
|
|
|
|
frame_cell_orig, df1s, df2s, f1s, f2s = find_dfs(frame_cell_orig)
|
|
|
|
eodf = frame_cell_orig.f0.unique()[0]
|
|
|
|
f = -1
|
|
axts_all = []
|
|
axps_all = []
|
|
ax_us = []
|
|
for freq1, freq2 in freqs:
|
|
f += 1
|
|
#plt.suptitle('$\Delta '+f_vary_name()+'=%s$'%(freq1)+'\,Hz $\Delta '+f_stable_name()+'=%s$'%(freq2)+'\,Hz')
|
|
frame_cell = frame_cell_orig[(frame_cell_orig.df1 == freq1) & (frame_cell_orig.df2 == freq2)]
|
|
if len(frame_cell) < 1:
|
|
freq1 = frame_cell_orig.iloc[(np.argmin(np.abs(frame_cell_orig.df1 - freq1)))].df1
|
|
freq2 = frame_cell_orig.iloc[(np.argmin(np.abs(frame_cell_orig.df2 - freq2)))].df2
|
|
# frame_cell = frame_cell_orig[ == freq1 & ]
|
|
frame_cell = frame_cell_orig[(frame_cell_orig.df1 == freq1) & (frame_cell_orig.df2 == freq2)]
|
|
print('Tuning curve needed for F1' + str(frame_cell.f1.unique()) + ' F2' + str(
|
|
frame_cell.f2.unique()) + ' for cell ' + str(cell_here))
|
|
|
|
#scores = ['amp_B1_01_mean', 'amp_B1_012_mean', 'amp_B2_02_mean', 'amp_B2_012_mean']
|
|
labels, alpha, color01, color01_012, color02, color02_012, colors, colors_array, linestyles, scores,linewidths = colors_susept(add = '_mean', nr = 4)
|
|
#labels = scores
|
|
|
|
print(cell_here + ' F1' + str(freq1) + ' F2 ' + str(freq2))
|
|
|
|
sampling = 20000
|
|
|
|
|
|
c_dist_recalc = dist_recalc_phaselockingchapter()
|
|
|
|
c_nrs = c_dist_recalc_func(frame_cell, c_nrs=c_nrs_orig, cell=cell_here,
|
|
c_dist_recalc=c_dist_recalc)
|
|
if c_dist_recalc == False:
|
|
c_nrs = np.array(c_nrs) * 100
|
|
mults_period = 3
|
|
start = 200#1000
|
|
xlim = [start, start + (mults_period * 1000 / np.min([np.abs(freq1), np.abs(freq2)]))]
|
|
letters = ['A', 'B']
|
|
|
|
indexes = [[0,1],[2,3],[0,1,2,3]]
|
|
for i, index in enumerate(indexes):
|
|
try:
|
|
ax_u1 = plt.subplot(grid_ll[-1,i])
|
|
except:
|
|
print('grid search problem')
|
|
embed()
|
|
plt_single_trace([], ax_u1, frame, frame_cell_orig, freq1, freq2,
|
|
scores=np.array(scores)[index], labels = np.array(labels)[index],colors=np.array(colors)[index],
|
|
linestyles=np.array(linestyles)[index],linewidths = np.array(linewidths)[index], alpha=np.array(alpha)[index],
|
|
sum=False, B_replace='F', default_colors = False, c_dist_recalc = c_dist_recalc)
|
|
ax_us.append(ax_u1)
|
|
frame_cell = frame_cell_orig[(frame_cell_orig.df1 == freq1) & (frame_cell_orig.df2 == freq2)]
|
|
c1 = c_dist_recalc_here(c_dist_recalc, frame_cell)
|
|
ax_u1.set_xlim(0,50)
|
|
if i != 0:
|
|
ax_u1.set_ylabel('')
|
|
remove_yticks(ax_u1)
|
|
if i < 2:
|
|
#embed()
|
|
ax_u1.fill_between(c1, frame_cell[np.array(scores)[index][0]], frame_cell[np.array(scores)[index][1]], color = 'grey', alpha = 0.1)
|
|
|
|
ax_u1.scatter(c_nrs, (np.array(yposs[i]) -35) * np.ones(len(c_nrs)), color='black', marker='v', clip_on=False)
|
|
|
|
#
|
|
for c_nn, c_nr in enumerate(c_nrs):
|
|
ax_u1.text(c_nr, yposs[i][c_nn] +50, letters[c_nn], color='black', ha='center', va='top')
|
|
#ax_u1.plot([c_nr, c_nr], [0, 435], color='black', linewidth=0.8, clip_on=False)
|
|
#embed()
|
|
#plt.show()
|
|
#embed()
|
|
#if f != 0:
|
|
# # remove_yticks(ax_u0)
|
|
# # remove_yticks(ax_u1)
|
|
# print('hi')
|
|
#else:
|
|
# ax_u1.set_ylabel(power_spectrum_name())
|
|
# embed()
|
|
|
|
#plt.suptitle(cell_here + ' DF1=' + str(freq1) + ' DF2=' + str(freq2))
|
|
colors_contrasts = ['purple', 'black', 'grey']
|
|
axts = []
|
|
axps = []
|
|
axes = []
|
|
# embed()
|
|
#dist_redo = False
|
|
#if dist_redo:
|
|
|
|
|
|
p_arrays_all = []
|
|
for c_nn, c_nr in enumerate(c_nrs):
|
|
|
|
#################################
|
|
# arrays plot
|
|
save_dir = load_savedir(level=0).split('/')[0]
|
|
name_psd = save_dir+'_psd.npy'
|
|
name_psd_f = save_dir+'_psdf.npy'
|
|
#embed()
|
|
|
|
if (not os.path.exists(name_psd)) | (redo == True):
|
|
if log != 'log':
|
|
stimulus_length_here = 0.5
|
|
nfft_here = 32768
|
|
else:
|
|
stimulus_length_here = 50
|
|
trials_nr = 20
|
|
nfft_here = 2**22
|
|
#trials_nr = 20#20
|
|
else:
|
|
nfft_here = 2 ** 14
|
|
stimulus_length_first = 0.1
|
|
stimulus_length_here = 0.5
|
|
|
|
|
|
v_mems, arrays_spikes, arrays_stim, results_diff, position_diff, auci_wo, auci_w, arrays, names ,p_arrays_p, ff_p = calc_roc_amp_core_cocktail(
|
|
[freq1 + eodf], [freq2 + eodf], datapoints, auci_wo, auci_w, results_diff, a_f2s,
|
|
fish_jammer, a,
|
|
trials_nr, nfft_here, '', us_name, gain, runs, a_fr, nfft_for_morph, beat, printing,
|
|
stimulus_length_here,
|
|
model_cells, position_diff, dev, cell_here, dev_name=dev_name, a_f1s=[c_nrs_orig[c_nn]], n=n,
|
|
reshuffled=reshuffled, min_amps=min_amps)
|
|
|
|
p_arrays_here = p_arrays_p[1::]
|
|
xlimp = (0, 300)
|
|
for p in range(len(p_arrays_here)):
|
|
p_arrays_here[p][0] = p_arrays_here[p][0][ff_p < xlimp[1]]
|
|
|
|
ff_p = ff_p[ff_p < xlimp[1]]
|
|
|
|
time = np.arange(0, len(arrays[a][0]) / sampling, 1 / sampling)
|
|
time = time*1000
|
|
# arrays
|
|
#
|
|
|
|
# embed()
|
|
'''###############################
|
|
# arrays psd
|
|
nfft_here = 2 ** 22 # 2**25
|
|
stimulus_length_first = 10
|
|
stimulus_length_here = 6 # 10
|
|
v_mems, arrays_spikes_p, arrays_stim_p, results_diff, position_diff, auci_wo, auci_w, arrays_p, names, p_arrays_p, ff_p = calc_roc_amp_core_cocktail(
|
|
[freq1 + eodf], [freq2 + eodf], datapoints, auci_wo, auci_w, results_diff, a_f2s,
|
|
fish_jammer, a,
|
|
1, nfft_here, '', us_name, gain, runs, a_fr, nfft_for_morph, beat, printing,
|
|
stimulus_length_here,
|
|
model_cells, position_diff, dev, cell_here, dev_name=dev_name, a_f1s=[c_nrs_orig[c_nn]],
|
|
n=n,
|
|
reshuffled=reshuffled, min_amps=min_amps, p_xlim = 1)
|
|
'''
|
|
#embed()
|
|
#######################
|
|
# plot the first array
|
|
arrays_time = arrays[1::]#[v_mems[1],v_mems[3]]#[1,2]#[1::]
|
|
arrays_here = arrays[1::]#[arrays[1],arrays[3]]#arrays[1::]#
|
|
#arrays_here_original = arrays_original[1::] # [arrays[1],arrays[3]]#arrays[1::]#
|
|
|
|
arrays_st = arrays_stim[1::]#[arrays_stim[1],arrays_stim[3]]#
|
|
arrays_sp = arrays_spikes[1::]#[arrays_spikes[1],arrays_spikes[3]]#arrays_spikes[1::]
|
|
colors_array_here = ['grey','grey','grey']#colors_array[1::]
|
|
|
|
p_arrays_all.append(p_arrays_here)
|
|
for a in range(len(arrays_here)):
|
|
print('a'+str(a))
|
|
#if a != 2:
|
|
# colors_peaks = [colors_array[1], colors_array[2]]
|
|
#else:
|
|
if a == 0:
|
|
colors_peaks = [color01]#, 'red']
|
|
freqs = [np.abs(freq1)]#], np.abs(freq2)],
|
|
elif a == 1:
|
|
colors_peaks = [color02] # , 'red']
|
|
freqs = [np.abs(freq2)]
|
|
else:
|
|
colors_peaks = [color01_012,color02_012] # , 'red']
|
|
freqs = [np.abs(freq1), np.abs(freq2)]
|
|
grid_pt = gridspec.GridSpecFromSubplotSpec(5, 1,
|
|
hspace=0.3,
|
|
wspace=0.2,
|
|
subplot_spec=grid_ll[c_nn, a], height_ratios = [1,0.7,1,0.25,2.5]) # hspace=0.4,wspace=0.2,len(chirps)
|
|
# xlim_psd = [0, 1000]
|
|
ylim_both_psd = [-40, 40]
|
|
ylim_psd = [] # [-40, 10]
|
|
color_psd = 'black'
|
|
# embed()
|
|
ax_as = []
|
|
#############################
|
|
|
|
axe = plt.subplot(grid_pt[0])
|
|
axes.append(axe)
|
|
plt_stim_saturation(a, a_f1s, a_f2s, [], arrays_st, axe, colors_array_here, f,
|
|
f_counter, names, time, xlim=xlim)#np.array(arrays_sp)*1000
|
|
#if a == 0:
|
|
a_f2_cm = c_dist_recalc_func(frame_cell, c_nrs=[a_f2s[0]], cell=cell_here, c_dist_recalc = c_dist_recalc)
|
|
|
|
if c_dist_recalc == False:
|
|
a_f2_cm = np.array(a_f2_cm)*100
|
|
#embed()
|
|
#'$\Delta '+f_vary_name()+'=%s$'%(freq1)+'\,Hz $\Delta '+f_stable_name()+'=%s$'%(freq2)+'\,Hz'
|
|
if a == 2:#if (a_f1s[0] != 0) & (a_f2s[0] != 0):
|
|
fish = 'Three fish: $f_{EOD}$\,\&\,' + f_vary_name()+'\,\&\,'+f_stable_name()# + '$'#' $\Delta '$\Delta$
|
|
beat_here = twobeat_cond(big = True, double = True, cond = False)+'\,' +f_vary_name(freq = int(freq1), delta = True)+',\,$c_{1}=%s$' %(int(np.round(c_nrs[c_nn]))) + '$\%$'+'\n'+f_stable_name(freq = int(freq2), delta = True) +',\,$c_{2}=%s$' %(int(np.round(a_f2_cm[0])))+'$\%$'#+'$'
|
|
#c1 =
|
|
#c2 =
|
|
title_name = fish+ '\n' + beat_here#+c1+c2
|
|
elif a == 0:#elif (a_f1s[0] != 0):
|
|
beat_here = ' ' + onebeat_cond(big = True, double = True, cond = False)+ '\,'+f_vary_name(freq =int(freq1), delta = True)#+'$' + ' $\Delta '
|
|
fish = 'Two fish: $f_{EOD}$\,\&\,' + f_vary_name()#+'$'
|
|
c1 = ',\,$c_{1}=%s$' % (int(np.round(c_nrs[c_nn]))) + '$\%$ \n '
|
|
title_name = fish + '\n'+beat_here+c1#+'cm'+'cm'+'cm'
|
|
elif a == 1:#elif (a_f2s[0] != 0):
|
|
beat_here = ' ' + onebeat_cond(big = True, double = True, cond = False) +'\,'+ f_stable_name(freq = int(freq2), delta = True)# +'$'
|
|
fish = '\n Two fish: $f_{EOD}$\,\&\,' + f_stable_name()#+'$'
|
|
c1 = ',\,$c_{2}=%s$' % (int(np.round(a_f2_cm[0]))) + '$\%$ \n'
|
|
title_name = fish+'\n'+beat_here+ c1#+'cm'
|
|
#embed()
|
|
axe.text(1, 1.1, title_name, va='bottom', ha='right',
|
|
transform=axe.transAxes)
|
|
|
|
#############################
|
|
|
|
axs = plt.subplot(grid_pt[1])
|
|
#embed()
|
|
plt_spikes_ROC(axs, 'grey', np.array(arrays_sp[a])*1000, xlim, lw = 1)
|
|
|
|
#############################
|
|
axt = plt.subplot(grid_pt[2])
|
|
axts.append(axt)
|
|
plt_vmem_saturation(a, a_f1s, a_f2s, arrays_sp, arrays_time, axt, colors_array_here, f,
|
|
f_counter, names, time, xlim=xlim)
|
|
|
|
#############################
|
|
axp = plt.subplot(grid_pt[-1])
|
|
axps.append(axp)
|
|
|
|
|
|
if a == 0:
|
|
axt.show_spines('')
|
|
axt.xscalebar(0.1, -0.1, 10, 'ms', va='right', ha='bottom')
|
|
axt.yscalebar(-0.02, 0.35, 600, 'Hz', va='left', ha='top')
|
|
#ax00.xscalebar(0.1, -0.02, length, 'ms', va='right', ha='bottom') ##ylim[0]
|
|
#ax00.yscalebar(-0.02, 0.35, 500, 'Hz', va='center', ha='left')
|
|
# axt.set_xlabel('Time [s]')
|
|
#if c_nn == 1:
|
|
|
|
|
|
#embed()
|
|
|
|
f_counter += 1
|
|
|
|
# todo das mit dem gemeinsamen log noch anpassen
|
|
# embed()
|
|
# p_arrays[a], ff = ml.psd(arrays_here_original[a][0] - np.mean(arrays_here[a][0]), Fs=sampling, NFFT=nfft,
|
|
# noverlap=nfft // 2)
|
|
# embed()
|
|
|
|
if (not os.path.exists(name_psd)) | (redo == True):
|
|
np.save(name_psd, p_arrays_all)
|
|
np.save(name_psd_f, ff_p)
|
|
else:
|
|
ff_p = np.load(name_psd_f) # p_arrays_p
|
|
p_arrays_all = np.load(name_psd) # p_arrays_p
|
|
|
|
#embed()
|
|
for c_nn, c_nr in enumerate(c_nrs):
|
|
for a in range(len(arrays_here)):
|
|
|
|
|
|
axps_here = [[axps[0],axps[1], axps[2]],[axps[3],axps[4], axps[5]]]
|
|
axp = axps_here[c_nn][a]
|
|
pp = log_calc_psd(axp, colors_array_here[a], ff_p, log, p_arrays_all[c_nn][a][0],np.nanmax(p_arrays_all))
|
|
|
|
markeredgecolors = []
|
|
if a == 0:
|
|
colors_peaks = [color01]#, 'red']
|
|
freqs = [np.abs(freq1)]#], np.abs(freq2)],
|
|
elif a == 1:
|
|
colors_peaks = [color02] # , 'red']
|
|
freqs = [np.abs(freq2)]
|
|
else:
|
|
colors_peaks = [color01_012,color02_012] # , 'red']
|
|
freqs = [np.abs(freq1), np.abs(freq2)]
|
|
markeredgecolors = [color01,color02]
|
|
plt_psd_saturation(pp, ff_p, a, axp, colors_array_here, nfft, sampling, freqs=freqs,
|
|
colors_peaks=colors_peaks, xlim=xlimp,markeredgecolor=markeredgecolors,)
|
|
|
|
|
|
# if c_nn != 0:
|
|
# remove_yticks(axt)
|
|
# remove_yticks(axp)
|
|
if log:
|
|
scalebar = False
|
|
if scalebar:
|
|
axp.show_spines('b')
|
|
if a == 0:
|
|
axp.yscalebar(-0.05, 0.5, 20, 'dB', va='center', ha='left')
|
|
axp.set_ylim(-33, 5)
|
|
else:
|
|
#embed()
|
|
axp.show_spines('lb')
|
|
if a == 0:
|
|
axp.set_ylabel('dB')#, va='center', ha='left'
|
|
else:
|
|
remove_yticks(axp)
|
|
axp.set_ylim(-39, 5)
|
|
else:
|
|
axp.show_spines('lb')
|
|
if a != 0:
|
|
remove_yticks(axp)
|
|
else:
|
|
axp.set_ylabel(power_spectrum_name())
|
|
axp.set_xlabel('Frequency [Hz]')
|
|
|
|
axts_all.extend(axts)
|
|
axps_all.extend(axps)
|
|
#ax_us[-1].legend(loc=(-2.4,1), ncol=2, handlelength = 2.5)#-0.07loc=(0.4,1)
|
|
ax_us[-1].legend(loc=(-2.22, 1.2), ncol=2, handlelength=2.5) # -0.07loc=(0.4,1)
|
|
|
|
#ax_us[-1].legend(loc=(-2.22, 1), ncol=2, handlelength=2.5) # -0.07loc=(0.4,1)
|
|
axts_all[0].get_shared_y_axes().join(*axts_all)
|
|
axts_all[0].get_shared_x_axes().join(*axts_all)
|
|
axps_all[0].get_shared_y_axes().join(*axps_all)
|
|
axps_all[0].get_shared_x_axes().join(*axps_all)
|
|
join_y(axts)
|
|
set_same_ylim(axts)
|
|
set_same_ylim(axps)
|
|
join_x(axts)
|
|
join_x(ax_us)
|
|
join_y(ax_us)
|
|
fig = plt.gcf()
|
|
#fig.tag([[axes[0], axes[1], axes[2]]], xoffs = -3.45, yoffs = 3.3)
|
|
#fig.tag([[axes[3], axes[4], axes[5]]], xoffs = -3.45, yoffs = 3.3)
|
|
fig.tag([[axes[0], axes[1], axes[2]]], xoffs=0, yoffs=3.7)
|
|
fig.tag([[axes[3], axes[4], axes[5]]], xoffs=0, yoffs= 3.7)
|
|
#fig.tag([ax_us[0], ax_us[1], ax_us[2]], xoffs = -3, yoffs = 3.4)
|
|
#fig.tag([ax_us[0], ax_us[1], ax_us[2]], xoffs = -3, yoffs = 1.4)
|
|
fig.tag([ax_us[0], ax_us[1], ax_us[2]], xoffs = -2.3, yoffs = 1.4)
|
|
#embed()
|
|
save_visualization(cell_here, show)
|
|
|
|
#two-beat conditionTwo-beat condition
|
|
def twobeat_cond(big = False, double = False, cond = True):
|
|
if cond:
|
|
if not big:
|
|
val = 'two-beat condition'
|
|
else:
|
|
val = 'Two-beat condition'
|
|
if double:
|
|
val += ':'
|
|
else:
|
|
if not big:
|
|
val = 'two beats'
|
|
else:
|
|
val = 'Two beats'
|
|
if double:
|
|
val += ':'
|
|
return val
|
|
|
|
|
|
def colors_susept(add='_mean', nr = 4):
|
|
scores = ['amp_B1_01'+add, 'amp_B1_012'+add, 'amp_B2_02'+add,
|
|
'amp_B2_012'+add] # 'amp_B1+B2_012_mean',#($f_{EOD}$ + $f_{p}$)($f_{EOD}$ + $f_{p}$ + $f_{s}$)($f_{EOD}$ + $f_{s}$ )($f_{EOD}$ + $f_{p}$ + $f_{s}$)
|
|
#embed()
|
|
lables = ['$A(\Delta $' + f_vary_name() +'$)$ in ' + onebeat_cond() + ' $\Delta $' + f_vary_name(),
|
|
'$A(\Delta $' + f_vary_name() +'$)$ in ' + twobeat_cond() +' $\Delta $' + f_vary_name() +'\,\&\,$\Delta $' + f_stable_name(),
|
|
'$A(\Delta $' + f_stable_name() +'$)$ in ' + onebeat_cond() + ' $\Delta $' + f_stable_name(),
|
|
'$A(\Delta $' + f_stable_name() +'$)$ in ' + twobeat_cond() +' $\Delta $' + f_vary_name() +'\,\&\,$\Delta $' + f_stable_name()
|
|
]
|
|
color01 = 'darkred'#'darkgreen'
|
|
color02 = 'darkblue'
|
|
color01_012 = 'red'#'black'##'lightgreen' # 'blue'#
|
|
color02_012 = 'blue'#'lightblue'#'grey'#
|
|
color01 = 'black'#'darkgreen'
|
|
color02 = 'darkred'#'darkblue'
|
|
color01_012 = 'grey'#'red'#'black'##'lightgreen' # 'blue'#
|
|
color02_012 = 'red'#'green'#'lightblue'#'grey'#
|
|
color01 = 'darkred'#'darkgreen'
|
|
color02 = 'darkblue'#'darkblue'
|
|
color01_012 = 'red'#'red'#'black'##'lightgreen' # 'blue'#
|
|
color02_012 = 'cyan'#'green'#'lightblue'#'grey'#
|
|
colors = [color01, color01_012, color02, color02_012, 'grey']
|
|
colors_array = ['grey', color01, color02, 'purple']
|
|
dashed = (0,(nr, nr))
|
|
linestyles = ['-', dashed, '-', dashed, dashed]
|
|
alpha = [1, 1, 1, 1, 1]
|
|
linewidth = [1.6,1.4,1.6,1.4,1.4]
|
|
return lables, alpha, color01, color01_012, color02, color02_012, colors, colors_array, linestyles, scores,linewidth
|
|
|
|
|
|
def square_part(ax, shrink = 1, what = [], labelpad = 21,end = '.pkl',folder = 'calc_model',full_name = 'modell_all_cell_no_sinz1_afe1_0.03__afr0_1__afj2_0.1__phaseright__len5_adaptoffset_bisecting_0.995_1.005____ratecorrrisidual35__modelbigfit_nfft4096_StartE1_1_EndE1_1.3_in0.005_StartJ2_1_EndJ2_1.3_in0.005_trialnr20__reshuffled_ThreeDiff_SameOffset'):
|
|
score = 'auci02_012-auci_base_01'#'previous_auci02_012-auci_base_01'#['auci_02_012', 'auci_base_01', 'previous_auci02_012-auci_base_01', ]
|
|
symbols = ['-', '=', '', ]
|
|
cell_orig = '2013-01-08-aa-invivo-1' # '2012-12-13-an-invivo-1'
|
|
#model_cells = pd.read_csv("models_big_fit_d_right.csv.csv")
|
|
dev = '_05' # ,'_2','_original','_stim','_isi'
|
|
mult = '_abs1000' # ,'_mult3'
|
|
counter = 0
|
|
versions = {}
|
|
if ('auci' not in score) and ('auc' not in score):
|
|
mult_new = ''
|
|
else:
|
|
mult_new = mult
|
|
if len(what) <1 :
|
|
what = score + mult_new + dev
|
|
#
|
|
#embed()
|
|
mat, vers_here, cell, eod_m, fr_rate_mult = define_squares_model_three(what=what,
|
|
square=[],
|
|
full_name=full_name,
|
|
minimum=0, folder = folder,
|
|
maximum=3, end = end,
|
|
cell_data=cell_orig,
|
|
emb=False)
|
|
|
|
|
|
lim = find_lims(what, vers_here)
|
|
versions[what] = vers_here
|
|
|
|
ax.set_aspect('equal')
|
|
#trials_nr, line_pos, name_end, name_start = find_variable_from_savename(full_name,
|
|
# name='trialnr')
|
|
#length, line_pos, name_end, name_start = find_variable_from_savename(full_name,
|
|
# name='length')
|
|
#a_f1 = np.unique(control['a_f1'])[0]
|
|
#a_f2 = np.unique(control['a_f2'])[0]
|
|
try:
|
|
power = np.unique(mat['power'])[0]
|
|
except:
|
|
print('power thing')
|
|
embed()
|
|
plt.suptitle(str(cell_orig) + ' power ' + str(power) + ' dev ' + str(dev))
|
|
|
|
mult_type = ''
|
|
pcolor = True
|
|
|
|
im = plt_square(mat, pcolor, mult_type, vers_here, lim)
|
|
|
|
|
|
|
|
|
|
square_labels(mult_type, ax, vers_here, 0)
|
|
extra_labels = True
|
|
if extra_labels:
|
|
ax.set_xlabel('$\Delta \mathrm{f_{Intruder}}$ [Hz]')
|
|
ax.set_ylabel('$\Delta \mathrm{f_{Female}}$ [Hz]')
|
|
#embed()
|
|
cbar, left, bottom, width, height = colorbar_outside(ax, im, add=5, delta = 0.25, round_digit = 2, width=0.01, shrink = shrink)
|
|
|
|
ax.text(1.3
|
|
,0.5, core_scatter_wfemale(),va = 'center',ha = 'center', rotation = 90
|
|
,transform=ax.transAxes)#va = 'center',270
|
|
#embed()
|
|
#im.set_clim_delta(0.1)
|
|
im.set_clim(-0.5, 0.5)
|
|
#set_clim_same_here([im], mats=[mat], nr_clim='perc', clims='', percnr=95)
|
|
counter += 1
|
|
|
|
|
|
def find_lims(what, vers_here):
|
|
if 'auci' in what:
|
|
lim = [-0.5, 0.5]
|
|
elif 'auc' in what:
|
|
lim = [-1, 1]
|
|
else:
|
|
vmax = np.nanpercentile(np.abs(vers_here), 95)
|
|
vmin = np.nanpercentile(np.abs(vers_here), 5)
|
|
lims = np.max([vmax, np.abs(vmin)])
|
|
lim = [-lims, lims]
|
|
return lim
|
|
|
|
|
|
def cut_matrix_generation(condition, minimum, maximum):
|
|
index_chosen = condition.index[(condition.index > minimum) & (condition.index < maximum)]
|
|
column_chosen = condition.columns[(condition.columns > minimum) & (condition.columns < maximum)]
|
|
condition = condition.loc[index_chosen, column_chosen]
|
|
return condition, column_chosen, index_chosen
|
|
|
|
|
|
def define_squares_model2(a_fe, nr, a_fj, cell_nr, what, step, cell=[], a_fr=1, adapt='adaptoffsetallall2', variant='no',
|
|
self='', symetric='', resize=True, version_diff='', minimum=0.5, maximum=1.5,
|
|
dist_type='SimpleDist', redo=False, beat_type='', version_sinz='sinz', varied='emitter',
|
|
diff='std', full_name='', emb=False):
|
|
if full_name == '':
|
|
name = load_folder_name('calc_model') + '/modell_all_cell_' + variant + '_' + version_sinz + str(
|
|
nr) + self + '_afe' + str(a_fe) + '__afr' + str(a_fr) + '__afj' + str(
|
|
str(a_fj)) + '__length1.5_' + adapt + '___stepefish' + str(
|
|
step) + 'Hz_ratecorrrisidual35__modelbigfit_nfft4096' + beat_type + '.pkl'
|
|
else:
|
|
name = load_folder_name('calc_model') + '/' + full_name + '.pkl'
|
|
name_test = load_folder_name('calc_model') + '/modell_all_cell_no_sinz3_afe0.1__afr1__afj0.1__length1.5_adaptoffsetallall2___stepefish10Hz_ratecorrrisidual35__modelbigfit_nfft4096_beat.pkl'
|
|
test = pd.read_pickle(name_test)
|
|
# embed()
|
|
if os.path.exists(name):
|
|
############################
|
|
# Simples GLOBAL scores, like std, amp etc, without temporal inforrmation
|
|
what_orig = what
|
|
if 'spike_times' in what:
|
|
what = 'spike_times'
|
|
#time_var1 = time.time()
|
|
# embed()
|
|
control, condition, cell, eod_f, fr_rate_mult = get_condition(a_fe, nr, a_fj, cell_nr, what, a_fr=a_fr,
|
|
variant=variant,
|
|
adapt=adapt, full_name=full_name,
|
|
version_sinz=version_sinz, resize=resize,
|
|
symetric=symetric, minimum=minimum,
|
|
maximum=maximum,
|
|
beat_type=beat_type, self=self, varied=varied,
|
|
step=step,
|
|
cell=cell)
|
|
|
|
time_var2 = time.time()
|
|
time_var3 = time_var2 - time_var1
|
|
# embed()
|
|
base, base_matrix, baseline = load_baseline_matrix(what, cell, condition, a_fr=a_fr)
|
|
control_afj, DF_e, dict_here, eod_m = get_control(nr, cell_nr, what, 'afj', a_fr=a_fr, adapt=adapt,
|
|
varied=varied
|
|
, symetric=symetric, duration=duration, contrast1=a_fe,
|
|
beat_type=beat_type, contrast2='0', version_sinz=version_sinz,
|
|
step=step, cell=cell, variant=variant, minimum=minimum,
|
|
maximum=maximum, self=self)
|
|
control_afe, DF_e, dict_here, eod_m = get_control(nr, cell_nr, what, 'afe', a_fr=a_fr, adapt=adapt,
|
|
varied=varied,
|
|
contrast1='0', duration=duration, symetric=symetric,
|
|
beat_type=beat_type, contrast2=a_fj,
|
|
version_sinz=version_sinz,
|
|
step=step, cell=cell, variant=variant, minimum=minimum,
|
|
maximum=maximum, self=self)
|
|
time_var2 = time.time()
|
|
time_var4 = time_var2 - time_var1
|
|
|
|
if 'spike_times' in what_orig:
|
|
#############################
|
|
# temporal information
|
|
if maximum != []:
|
|
max_name = '_min' + str(minimum) + '_min' + str(maximum)
|
|
else:
|
|
max_name = ''
|
|
name_diff = load_folder_name('calc_model') + '/diffsquare_' + variant + '_' + version_sinz + str(
|
|
nr) + self + '_afe' + str(a_fe) + '__afr' + str(a_fr) + '__afj' + str(
|
|
str(a_fr)) + '__length1.5_' + adapt + '___stepefish' + str(
|
|
step) + 'Hz_ratecorrrisidual35__modelbigfit_nfft4096' + '_' + dist_type + beat_type + max_name
|
|
'diffsquare_no_sinz3_afe0.1__afr1__afj1__length1.5_adaptoffsetallall2___stepefish10Hz_ratecorrrisidual35__modelbigfit_nfft4096_SimpleDist_beat_min0.5_min1'
|
|
|
|
# embed()
|
|
if (os.path.exists(name_diff + '.pkl')) and (redo == False):
|
|
diff_loaded = pd.read_pickle(name_diff + '.pkl')
|
|
if cell in np.unique(diff_loaded['dataset']):
|
|
diff_load = diff_loaded[diff_loaded['dataset'] == cell]
|
|
diff_load.pop('dataset')
|
|
if '05' in what_orig:
|
|
dev = '05'
|
|
elif '2' in what_orig:
|
|
dev = '2'
|
|
else:
|
|
dev = 'original'
|
|
# embed()
|
|
diff_load = diff_load[diff_load['dev'] == dev]
|
|
diff_load.pop('dev')
|
|
|
|
versions = {}
|
|
sorted = retrieve_mat(diff_load, '0-1-2')
|
|
versions['diff'] = sorted
|
|
|
|
sorted = retrieve_mat(diff_load, '0-1')
|
|
versions['0-1'] = sorted
|
|
|
|
sorted = retrieve_mat(diff_load, '0-2')
|
|
versions['0-2'] = sorted
|
|
|
|
diff_load.pop('dist')
|
|
cont = False
|
|
print('cell already there')
|
|
# embed()
|
|
else:
|
|
cont = True
|
|
else:
|
|
diff_loaded = pd.DataFrame()
|
|
cont = True
|
|
# embed()
|
|
if cont:
|
|
print('load diff ' + cell)
|
|
versions = {}
|
|
|
|
# get parameters
|
|
|
|
control, nfft, cell, eod_f, fr_rate_mult = get_condition(a_fe, nr, a_fj, cell_nr, 'nfft', a_fr=a_fr,
|
|
beat_type=beat_type, variant=variant,
|
|
adapt=adapt,
|
|
version_sinz=version_sinz, self=self,
|
|
varied=varied,
|
|
step=step, cell=cell)
|
|
|
|
control, sampling_rate, cell, eod_f, fr_rate_mult = get_condition(a_fe, nr, a_fj, cell_nr,
|
|
'sampling_rate',
|
|
beat_type=beat_type, a_fr=a_fr,
|
|
variant=variant, adapt=adapt,
|
|
version_sinz=version_sinz, self=self,
|
|
varied=varied, step=step, cell=cell)
|
|
control, length, cell, eod_f, fr_rate_mult = get_condition(a_fe, nr, a_fj, cell_nr, 'length', a_fr=a_fr,
|
|
beat_type=beat_type, variant=variant,
|
|
adapt=adapt,
|
|
version_sinz=version_sinz, self=self,
|
|
varied=varied,
|
|
step=step, cell=cell)
|
|
control, cut_spikes, cell, eod_f, fr_rate_mult = get_condition(a_fe, nr, a_fj, cell_nr, 'cut_spikes',
|
|
beat_type=beat_type, a_fr=a_fr,
|
|
variant=variant,
|
|
adapt=adapt,
|
|
version_sinz=version_sinz, self=self,
|
|
varied=varied, step=step, cell=cell)
|
|
|
|
# embed()
|
|
diff = pd.DataFrame()
|
|
diff05 = pd.DataFrame()
|
|
diff2 = pd.DataFrame()
|
|
|
|
diff_1 = pd.DataFrame()
|
|
diff05_1 = pd.DataFrame()
|
|
diff2_1 = pd.DataFrame()
|
|
diff_2 = pd.DataFrame()
|
|
diff05_2 = pd.DataFrame()
|
|
diff2_2 = pd.DataFrame()
|
|
cond = np.array(condition)
|
|
cond2 = cond * 1
|
|
|
|
min_array = 0.5
|
|
max_array = 1
|
|
for i in range(len(condition)):
|
|
for j in range(len(condition.iloc[0])):
|
|
print(j)
|
|
print(i)
|
|
try:
|
|
arrays = [condition.iloc[i, j][0], control_afe.iloc[i, j][0], control_afj.iloc[i, j][0],
|
|
base_matrix.iloc[i, j][0]]
|
|
except:
|
|
embed()
|
|
# nfft_here = nfft.iloc[i, j]
|
|
sampling_rate_here = sampling_rate.iloc[i, j]
|
|
length_here = length.iloc[i, j]
|
|
cut_spikes_here = cut_spikes.iloc[i, j]
|
|
spikes_mat = {}
|
|
mat05 = {}
|
|
mat2 = {}
|
|
names = ['condition', 'control_afe', 'control_afj', 'base_matrix']
|
|
for a, array in enumerate(arrays):
|
|
# spikes_mat = cr_spikes_mat(array, sampling_rate_here, length_here- cut_spikes_here*2)
|
|
# embed()
|
|
|
|
spikes_cut, spikes_mat[names[a]], mat05[names[a]], mat2[names[a]] = create_spikes_mat(
|
|
max_array - min_array,
|
|
array[(array < max_array) & (array > min_array)] - min_array,
|
|
sampling_rate_here) # length_here- cut_spikes_here*2
|
|
# spikes_mat = cr_spikes_mat(spikes_cut, sampling_rate_here, length_here)
|
|
# p_arrays[a], f[a] = ml.psd(spikes_mat - np.mean(spikes_mat), Fs=sampling_rate_here, NFFT=nfft_here,
|
|
# noverlap=nfft_here / 2) #
|
|
# if '05' in what_orig :
|
|
# array_here = mat05
|
|
# elif '2' in what_orig :
|
|
# # array_here = mat2
|
|
# else:
|
|
# array_here = spikes_mat
|
|
# embed()
|
|
if 'SimpleDist' in dist_type:
|
|
diff05.loc[condition.index[i], condition.columns[j]] = np.nanmean(
|
|
mat05['condition'] - mat05['control_afe'] - mat05['control_afj'] + mat05['base_matrix'])
|
|
diff2.loc[condition.index[i], condition.columns[j]] = np.nanmean(
|
|
mat2['condition'] - mat2['control_afe'] - mat2['control_afj'] + mat2['base_matrix'])
|
|
diff.loc[condition.index[i], condition.columns[j]] = np.nanmean(
|
|
spikes_mat['condition'] - spikes_mat['control_afe'] - spikes_mat['control_afj'] +
|
|
spikes_mat['base_matrix'])
|
|
|
|
diff05_1.loc[condition.index[i], condition.columns[j]] = np.nanmean(
|
|
mat05['condition'] - mat05['control_afe'])
|
|
diff2_1.loc[condition.index[i], condition.columns[j]] = np.nanmean(
|
|
mat2['condition'] - mat2['control_afe'])
|
|
diff_1.loc[condition.index[i], condition.columns[j]] = np.nanmean(
|
|
spikes_mat['condition'] - spikes_mat['control_afe'])
|
|
|
|
diff05_2.loc[condition.index[i], condition.columns[j]] = np.nanmean(
|
|
mat05['condition'] - mat05['control_afj'])
|
|
diff2_2.loc[condition.index[i], condition.columns[j]] = np.nanmean(
|
|
mat2['condition'] - mat2['control_afj'])
|
|
diff_2.loc[condition.index[i], condition.columns[j]] = np.nanmean(
|
|
spikes_mat['condition'] - spikes_mat['control_afj'])
|
|
|
|
# todo: here noch ein paar andere Differenzen machen
|
|
elif 'ConspDist' in dist_type:
|
|
length_consp = 0.030 * sampling_rate_here
|
|
shift = 0.005
|
|
shift_conditions = np.arange(0, len(mat2['control_afe']), shift * sampling_rate_here)
|
|
shift_controls = np.arange(0, len(mat2['control_afe']), shift * sampling_rate_here)
|
|
|
|
consp = pd.DataFrame()
|
|
for s, shift_condition in enumerate(shift_conditions):
|
|
for ss, shift_control in enumerate(shift_controls):
|
|
if (int(length_consp + shift_control) < len(mat2['control_afe'])) & (
|
|
int(length_consp + shift_condition) < len(mat2['condition'])):
|
|
consp.loc[s, ss] = np.sqrt(np.mean((mat2['control_afe'][
|
|
0 + int(shift_control):int(
|
|
length_consp + shift_control)]
|
|
- mat2['condition'][
|
|
0 + int(shift_condition):int(
|
|
length_consp + shift_condition)]) ** 2))
|
|
consp_value = np.min(consp, axis=1)
|
|
embed()
|
|
|
|
diff['dataset'] = cell
|
|
diff05['dataset'] = cell
|
|
diff2['dataset'] = cell
|
|
diff_1['dataset'] = cell
|
|
diff05_1['dataset'] = cell
|
|
diff2_1['dataset'] = cell
|
|
diff_2['dataset'] = cell
|
|
diff05_2['dataset'] = cell
|
|
diff2_2['dataset'] = cell
|
|
|
|
diff['dist'] = '0-1-2'
|
|
diff05['dist'] = '0-1-2'
|
|
diff2['dist'] = '0-1-2'
|
|
diff_1['dist'] = '0-1'
|
|
diff05_1['dist'] = '0-1'
|
|
diff2_1['dist'] = '0-1'
|
|
diff_2['dist'] = '0-2'
|
|
diff05_2['dist'] = '0-2'
|
|
diff2_2['dist'] = '0-2'
|
|
|
|
diff['dev'] = 'original'
|
|
diff05['dev'] = '05'
|
|
diff2['dev'] = '2'
|
|
diff_1['dev'] = 'original'
|
|
diff05_1['dev'] = '05'
|
|
diff2_1['dev'] = '2'
|
|
diff_2['dev'] = 'original'
|
|
diff05_2['dev'] = '05'
|
|
diff2_2['dev'] = '2'
|
|
|
|
if len(diff_loaded) < 1:
|
|
vertical_stack = pd.concat(
|
|
[diff, diff05, diff2, diff_1, diff05_1, diff2_1, diff_2, diff05_2, diff2_2, ], axis=0)
|
|
vertical_stack.to_pickle(name_diff + '.pkl')
|
|
else:
|
|
# diff_new = diff*1
|
|
|
|
vertical_stack = pd.concat(
|
|
[diff_loaded, diff, diff05, diff2, diff_1, diff05_1, diff2_1, diff_2, diff05_2, diff2_2, ],
|
|
axis=0)
|
|
vertical_stack.to_pickle(name_diff + '.pkl')
|
|
|
|
# embed()
|
|
if '05' in what_orig:
|
|
dev = '05'
|
|
elif '2' in what_orig:
|
|
dev = '2'
|
|
else:
|
|
dev = 'original'
|
|
|
|
dev_here = vertical_stack[vertical_stack['dev'] == dev]
|
|
diff_output = dev_here[dev_here['dist'] == '0-1-2']
|
|
diff_output.pop('dist')
|
|
diff_output.pop('dev')
|
|
diff_output.pop('dataset')
|
|
versions['diff'] = diff_output
|
|
|
|
diff_output = dev_here[dev_here['dist'] == '0-1']
|
|
diff_output.pop('dist')
|
|
diff_output.pop('dev')
|
|
diff_output.pop('dataset')
|
|
versions['0-1'] = diff_output
|
|
|
|
diff_output = dev_here[dev_here['dist'] == '0-2']
|
|
diff_output.pop('dist')
|
|
diff_output.pop('dev')
|
|
diff_output.pop('dataset')
|
|
versions['0-2'] = diff_output
|
|
|
|
versions['eod'] = eod_m
|
|
else:
|
|
print('load diff ' + cell)
|
|
|
|
else:
|
|
#time_var1 = time.time()
|
|
diff_output = condition - control_afe - control_afj + base_matrix
|
|
simple_diff = condition - control_afe
|
|
versions = {}
|
|
versions['base'] = base_matrix
|
|
versions['control1'] = control_afe
|
|
versions['control2'] = control_afj
|
|
versions['12'] = condition
|
|
versions['diff'] = diff_output
|
|
versions['0-1'] = condition - control_afe
|
|
versions['0-2'] = condition - control_afj
|
|
versions['eod'] = eod_m
|
|
#time_var2 = time.time()
|
|
#time_var5 = time_var2 - time_var1
|
|
# embed()
|
|
else:
|
|
versions = []
|
|
cell = ''
|
|
eod_m = ''
|
|
if emb:
|
|
embed()
|
|
return versions, cell, eod_m
|
|
|
|
|
|
def get_condition(contrast1, nr, contrast2, cell_nr, what, step=60, a_fr=1, varied='jammer', adapt='adaptoffsetallall2',
|
|
variant='no',
|
|
version_sinz='sinz', full_name='', resize=True, symetric='', SAM='SAM', square=[], three='',
|
|
length='1.5',
|
|
duration='', folder = 'model', minimum=[], maximum=[], f0='f0', f2='f2', f1='f1', self='', beat_type='',
|
|
cell=[], emb=False, end = '.pkl'): # f0 = 'eodf' f2 = 'eodj', f1 = 'eode'
|
|
#embed()
|
|
if 'csv' in end:
|
|
# das ist falls wir ein csv haben wie das simplified Threewave protokoll
|
|
if full_name == '':
|
|
control = pd.read_csv(
|
|
load_folder_name('calc_model') + '/modell_all_cell_' + variant + '_' + version_sinz + str(
|
|
nr) + self + '_afe' + str(contrast1) + '__afr' + str(a_fr) + '__afj' + str(
|
|
str(contrast2)) + '__length' + str(length) + '_' + adapt + '_' + SAM + '__stepefish' + str(
|
|
step) + 'Hz_ratecorrrisidual35__modelbigfit_nfft4096' + duration + beat_type + symetric + three + end, index_col = 0)
|
|
else:
|
|
control = pd.read_csv(
|
|
folder+'/' + full_name + end, index_col = 0)
|
|
#end = '.csv'
|
|
#folder = 'ROC'
|
|
control = pd.read_csv(
|
|
'../data/' + folder + '/' + full_name + end, index_col=0)
|
|
#embed()
|
|
cell_array = control[control.cell == cell]
|
|
df2 = np.round(cell_array.df2, 2)
|
|
df1 = np.round(cell_array.df1, 2)
|
|
cell_array.df2 = df2
|
|
cell_array.df1 = df1#np.unique(cell_array.df2)np.unique(cell_array.df1)
|
|
condition = cell_array.pivot(index='df2', columns='df1',
|
|
values=what) # index=['eode', 'nnft'] this will create multiindexing
|
|
eod_f = cell_array['f0']
|
|
if resize == True:
|
|
fr = cell_array.fr
|
|
fr_rate_mult = fr / np.mean(cell_array['f0'])
|
|
else:
|
|
# das ist für die pkls also vor allem für das nicht simplified protokoll, was am meisten verwendet wurde
|
|
if full_name == '':
|
|
control = pd.read_pickle(
|
|
load_folder_name('calc_model') + +'/modell_all_cell_' + variant + '_' + version_sinz + str(
|
|
nr) + self + '_afe' + str(contrast1) + '__afr' + str(a_fr) + '__afj' + str(
|
|
str(contrast2)) + '__length' + str(length) + '_' + adapt + '_' + SAM + '__stepefish' + str(
|
|
step) + 'Hz_ratecorrrisidual35__modelbigfit_nfft4096' + duration + beat_type + symetric + three + end)
|
|
else:
|
|
#embed()
|
|
control = pd.read_pickle(
|
|
load_folder_name('calc_model') + '/' + full_name + end)#'../data/'+#'../data/'+
|
|
#embed()
|
|
test = False
|
|
if test == True:
|
|
test_controls()
|
|
if square != []:
|
|
sqaure_array = control[control['square'] == square]
|
|
else:
|
|
sqaure_array = control
|
|
#
|
|
#embed()
|
|
if not cell:
|
|
if cell_nr < len(np.unique(sqaure_array['dataset'])):
|
|
cell = np.unique(sqaure_array['dataset'])[cell_nr]
|
|
else:
|
|
cell = []
|
|
|
|
if cell != []:
|
|
cell_array = sqaure_array[sqaure_array['dataset'] == cell]
|
|
if square != []:
|
|
base = control[control['square'] == 'base_0']
|
|
base_cell = base[base['dataset'] == cell]
|
|
# embed()
|
|
fr_rate = np.unique(base_cell.mean_fr)
|
|
fr_rate_mult = fr_rate
|
|
else:
|
|
fr_rate_mult = np.mean(cell_array.rate_baseline_after.iloc[
|
|
1::]) # todo: ok als das stimmt schon das after, ab dem zweiten trial das die ursprüngliche baseline
|
|
# embed()
|
|
print(fr_rate_mult)
|
|
#embed()
|
|
if (what in cell_array.keys()) and not (cell_array.empty):
|
|
|
|
condition = cell_array.pivot(index=f2, columns=f1,
|
|
values=what) # index=['eode', 'nnft'] this will create multiindexing
|
|
|
|
if square == 'base_0':
|
|
# embed()
|
|
sqaure_array_012 = control[control['square'] == '012']
|
|
cell_array = sqaure_array_012[sqaure_array_012['dataset'] == cell]
|
|
condition_012 = cell_array.pivot(index=f2, columns=f1,
|
|
values=what)
|
|
condition_012[:] = condition.iloc[0, 0]
|
|
condition = condition_012
|
|
|
|
DF_1 = np.unique(
|
|
np.array((cell_array[f1] - cell_array[f0]) / cell_array[
|
|
f0] + 1))
|
|
DF_2 = np.round(np.unique(np.array(
|
|
(cell_array[f2] - cell_array[f0]) / cell_array[
|
|
f0] + 1)),3)
|
|
#embed()
|
|
dict_here = dict(zip(np.unique(cell_array[f2]), np.round(DF_2,3)))
|
|
|
|
eod_e = np.unique(cell_array[f1])
|
|
eod_f = cell_array[f1]
|
|
#eod_f = cell_array[f1]
|
|
if resize == True:
|
|
fr_rate_mult = fr_rate_mult / np.mean(cell_array[f0])
|
|
dict_here = dict(zip(np.unique(cell_array[f1]), np.round(DF_1,3)))
|
|
|
|
condition = condition.rename(columns=dict_here)
|
|
|
|
condition = condition.set_index(DF_2)
|
|
condition.columns.name = f1 + str('-f0') # 'fish2-fish0 $f_{stim}/f_{EOD}$' # 'DeltaF-eodj-eodf'
|
|
condition.index.name = f2 + str('-f0') # 'fish1-fish0 $f_{stim}/f_{EOD}$' # 'DeltaF-eode-eodf'
|
|
|
|
if maximum != []:
|
|
condition, column_chosen, index_chosen = cut_matrix_generation(condition, minimum, maximum)
|
|
else:
|
|
# embed()
|
|
condition = []
|
|
cell = []
|
|
eod_f = []
|
|
fr_rate_mult = []
|
|
else:
|
|
condition = []
|
|
cell = []
|
|
eod_f = []
|
|
fr_rate_mult = []
|
|
|
|
#embed()
|
|
if emb:
|
|
embed()
|
|
return control, condition, cell, eod_f, fr_rate_mult
|
|
|
|
|
|
def define_squares_model_three(emb=False, a_fe=0.1, nr=3, a_fj=0.1, cell_nr=0, what='std', step=50, cell_data=[],
|
|
a_fr=1,
|
|
adapt='adaptoffsetallall2', variant='no', square=[], full_name='', self='',
|
|
length=0.5, SAM='SAM', resize=True, cell=[], duration='', symmetric='', version_diff='',
|
|
three='ThreeDiff', minimum=[], maximum=[], dist_type='SimpleDist', redo=False,
|
|
beat_type='', folder = 'model', end = '.pkl', version_sinz='sinz', varied='emitter', diff='std'):
|
|
#define_squares_model_three(a_fe=0.1, nr=3, a_fj=0.1, cell_nr=0, what='std', step=50, cell_data=[], a_fr=1,
|
|
# adapt='adaptoffsetallall2', variant='no', square='012', full_name='', self='',
|
|
# length=0.5, SAM='SAM', resize=True, cell=[], duration='', symmetric='', version_diff='',
|
|
# three='ThreeDiff', minimum=0.5, maximum=1.5, dist_type='SimpleDist', redo=False,
|
|
# beat_type='', version_sinz='sinz', varied='emitter', diff='std')
|
|
|
|
if full_name == '':
|
|
name = load_folder_name('calc_model') + '/modell_all_cell_' + variant + '_' + version_sinz + str(
|
|
nr) + self + '_afe' + str(a_fe) + '__afr' + str(a_fr) + '__afj' + str(
|
|
str(a_fj)) + '__length' + str(length) + '_' + adapt + '_' + SAM + '__stepefish' + str(
|
|
step) + 'Hz_ratecorrrisidual35__modelbigfit_nfft4096' + duration + symmetric + three + end
|
|
else:
|
|
name = load_folder_name('calc_model') + '/' + full_name + end#'../data/''../data/'+
|
|
|
|
condition = []
|
|
|
|
eod_f = []
|
|
fr_rate_mult = []
|
|
control = []
|
|
print(name)
|
|
#embed()
|
|
if os.path.exists(name):
|
|
############################
|
|
# Simples GLOBAL scores, like std, amp etc, without temporal inforrmation
|
|
#embed()
|
|
#try:
|
|
control, condition, cell, eod_f, fr_rate_mult = get_condition(a_fe, nr, a_fj, cell_nr, what, a_fr=a_fr,
|
|
variant=variant,
|
|
adapt=adapt, full_name=full_name,
|
|
version_sinz=version_sinz, SAM=SAM,
|
|
symetric=symmetric, folder = folder,
|
|
resize=resize,end = end, square=square, duration=duration,
|
|
length=length, three=three, minimum=minimum,
|
|
maximum=maximum, beat_type=beat_type, self=self,
|
|
varied=varied, step=step, cell=cell_data,
|
|
emb=False)
|
|
|
|
# embed()
|
|
if len(condition) > 0:
|
|
if condition.iloc[0].dtype == complex:
|
|
condition = np.abs(condition)
|
|
if emb:
|
|
embed()
|
|
return control, condition, cell, eod_f, fr_rate_mult
|
|
|
|
|
|
def plt_square(control,pcolor, mult_type, vers, lim):
|
|
if pcolor:
|
|
if 'mult' in mult_type:
|
|
axs = plt.pcolormesh(
|
|
np.array(list(map(float, vers.columns))),
|
|
np.array(vers.index),
|
|
vers, vmin=lim[0], vmax=lim[1],
|
|
cmap="RdBu_r")
|
|
else:
|
|
#embed()
|
|
axs = plt.pcolormesh(
|
|
(np.array(list(map(float, vers.columns))) - 1) * control.f0.iloc[0],
|
|
(np.array(vers.index) - 1) * control.f0.iloc[0],
|
|
vers, vmin=lim[0], vmax=lim[1],
|
|
cmap="RdBu_r")
|
|
else:
|
|
try:
|
|
axs = plt.imshow(vers, origin='lower', cmap="RdBu_r", vmin=lim[0],
|
|
vmax=lim[1], extent=[np.min(vers.columns),
|
|
np.max(vers.columns),
|
|
np.min(vers.index),
|
|
np.max(vers.index)])
|
|
except:
|
|
print('axs problenm')
|
|
embed()
|
|
return axs
|
|
|
|
|
|
def square_labels(mult_type, ax, vers_here, w):
|
|
|
|
if 'mult' in mult_type:
|
|
if '2' in vers_here.index.names:
|
|
ax.set_xlabel('m2')
|
|
else:
|
|
ax.set_xlabel('m1')
|
|
else:
|
|
if '2' in vers_here.index.names:
|
|
ax.set_xlabel('Beat2 [Hz]')
|
|
if w == 0:
|
|
ax.set_ylabel('Beat1 [Hz]')
|
|
else:
|
|
ax.set_xlabel('Beat1 [Hz]')
|
|
if w == 0:
|
|
ax.set_ylabel('Beat2 [Hz]')
|
|
|
|
|
|
def figsize_ROC_start():
|
|
return [column2(), 2.8]#3.03.370,2.92.73.5# 13.5/7 = 1.9285, 6.5/1.9285 = 3.3704
|
|
|
|
|
|
def plt_several_ROC_square_nonlin_single(shrink = 0.5, top = 0.9, loc = (0.4, 0.8), fs = 14, defaultst = True,figsize = (13.5, 6.5),xlim = [0,70], colors_w = ['green'], colors_wo = ['orange'],):
|
|
xlim = core_xlim_dist_roc()
|
|
if defaultst:
|
|
default_settings(width=12, ts=20, ls=20, fs=20)
|
|
#default_settings(column = 2, length = 3.3)
|
|
if figsize:
|
|
fig = plt.figure(figsize=figsize)
|
|
color_base = 'blue'
|
|
color_01 = 'green'
|
|
color_02 = 'red'
|
|
color_012 = 'orange'
|
|
colors_w, colors_wo,color_base, color_01, color_02, color_012 = colors_cocktailparty_all()
|
|
#fig = plt.figure(figsize= (11, 5.5))
|
|
|
|
|
|
#default_settings(width=12, ts=12, ls=13, fs=11)
|
|
only_extra_nonlin = 'amp_B1Harm&B2Harm&B1-B2&B1+B2_mean(012-0102_012-0102)_norm_01B1+02B2_mean'
|
|
#embed()
|
|
frame_names_both = [['calc_ROC_contrasts-ROCmodel_contrasts1_diagonal1_FrF1rel_0.33_FrF2rel_0.67_C2_0.1_LenNrs_20_1Nrs_0.0001_LastNrs_0.1_len_25_nfft_32768_trialsnr_20_mult_minimum_1temporal',
|
|
'calc_ROC_contrasts-ROCmodel_contrasts1_diagonal1_FrF1rel_0.33_FrF2rel_0.67_C2_0.1_LenNrs_20_1Nrs_0.0001_LastNrs_0.1_len_25_nfft_32768_trialsnr_100_mult_minimum_1temporal',
|
|
'calc_ROC_contrasts-ROCmodel_contrasts1_diagonal1_FrF1rel_0.33_FrF2rel_0.67_C2_0.1_LenNrs_20_1Nrs_0.0001_LastNrs_0.1_len_25_nfft_32768_trialsnr_1000_mult_minimum_1temporal'],
|
|
['calc_ROC_contrasts-ROCmodel_contrasts1_vertical1_FrF1rel_1_FrF2rel_0.7_C2_0.1_LenNrs_20_1Nrs_0.0001_LastNrs_0.1_len_25_nfft_32768_trialsnr_20_mult_minimum_1temporal',
|
|
'calc_ROC_contrasts-ROCmodel_contrasts1_vertical1_FrF1rel_1_FrF2rel_0.7_C2_0.1_LenNrs_20_1Nrs_0.0001_LastNrs_0.1_len_25_nfft_32768_trialsnr_100_mult_minimum_1temporal',
|
|
'calc_ROC_contrasts-ROCmodel_contrasts1_vertical1_FrF1rel_1_FrF2rel_0.7_C2_0.1_LenNrs_20_1Nrs_0.0001_LastNrs_0.1_len_25_nfft_32768_trialsnr_1000_mult_minimum_1temporal']]
|
|
|
|
frame_names, trial_nr = core_decline_ROC()
|
|
frame_names = [
|
|
core_decline_ROC(trial_nr = '20')[0][0]]
|
|
'calc_ROC_contrasts-ROCmodel_contrasts1_diagonal1_FrF1rel_0.33_FrF2rel_0.67_C2_0.1_LenNrs_20_1Nrs_0.0001_LastNrs_0.1_len_25_nfft_32768_trialsnr_' + trial_nr + '_mult_minimum_1temporal',
|
|
|
|
frame_names_both = [[
|
|
core_decline_ROC(trial_nr = '20')[0][0]],
|
|
[
|
|
'calc_ROC_contrasts-ROCmodel_contrasts1_vertical1_FrF1rel_1_FrF2rel_0.7_C2_0.1_LenNrs_20_1Nrs_0.0001_LastNrs_0.1_len_25_nfft_32768_trialsnr_'+trial_nr+'_mult_minimum_1temporal',
|
|
]]
|
|
|
|
frame_names_both = [['calc_ROC_contrasts-ROCmodel_contrasts1_B1+B2_diagonal3_FrF1rel_0.3_FrF2rel_0.7_C2_0.1_LenNrs_20_1Nrs_0.0001_LastNrs_0.1_len_25_nfft_32768_trialsnr_20_absoluttemporal'],
|
|
['calc_ROC_contrasts-ROCmodel_contrasts1_vertical1_FrF1rel_1_FrF2rel_0.7_C2_0.1_LenNrs_20_1Nrs_0.0001_LastNrs_0.1_len_25_nfft_32768_trialsnr_20_absoluttemporal']]
|
|
|
|
short = True
|
|
frame_names_both = [[
|
|
core_decline_ROC(trial_nr='20', short=short, absolut=True)[0][0]],
|
|
[core_decline_ROC(trial_nr='20', pos=False, short=short, absolut=True)[0][0]]]
|
|
|
|
print(frame_names_both)
|
|
cm = plt.get_cmap("hsv")
|
|
cells = ["2013-01-08-aa-invivo-1"]#, "2012-12-13-an-invivo-1", "2012-06-27-an-invivo-1", "2012-12-21-ai-invivo-1","2012-06-27-ah-invivo-1", ]
|
|
|
|
cells_chosen = ['2013-01-08-aa-invivo-1']#, "2012-06-27-ah-invivo-1","2014-06-06-ac-invivo-1" ]#'2012-06-27-an-invivo-1',
|
|
#cells_chosen = ['2012-06-27-an-invivo-1']
|
|
diff_012_01_02_0 = ['amp_B1_012-01-02+0_norm_01B1+02B2_mean',
|
|
'amp_B2_012-01-02+0_norm_01B1+02B2_mean',
|
|
'amp_B1_harms__012-01-02+0_norm_01B1+02B2_mean',
|
|
'amp_B2_harms__012-01-02+0_norm_01B1+02B2_mean',
|
|
'amp_B1-B2_012-01-02+0_norm_01B1+02B2_mean',
|
|
|
|
'amp_B1Harm&B2Harm&B1-B2&B1+B2_012-01-02+0_norm_01B1+02B2_mean',
|
|
'amp_B1&B1Harm&B2&B2Harm&B1-B2&B1+B2_012-01-02+0_norm_01B1+02B2_mean']
|
|
|
|
all_lins = ['auci02_012-auci_base_01','amp_B1+B2_012-01-02+0_norm_01B1+02B2_mean','amp_B1&B1Harm&B2&B2Harm&B1-B2&B1+B2_012-01-02+0_norm_01B1+02B2_mean']#'amp_B1_harms__012-01-02+0_norm_01B1+02B2_mean','amp_B1&B1Harm&B2&B2Harm&B1-B2&B1+B2_012-01-02+0_norm_01B1+02B2_mean']
|
|
ylabel = ['Determinant','B1+B2 Nonlin','All nonlin']
|
|
|
|
#embed()
|
|
x_pos = [10**-2,(10**-2)/2,10**-3,]
|
|
ranges = [[0.05,0.002], [0.04,0.001], [0.03,0.0004]]
|
|
colors_range = ['darkblue', 'blue', 'lightblue']
|
|
|
|
grid = gridspec.GridSpec(2, 4, wspace=0.45, width_ratios = [0.27,0.27,0,0.7], hspace=0.5, left=0.1, top=top, bottom=0.17,
|
|
right = 0.9,) #, width_ratios = [1,1,1,0.5,1] height_ratios = [1,6]bottom=0.25, top=0.8,
|
|
#square_part(ax)
|
|
#grid1 = gridspec.GridSpecFromSubplotSpec(3, 1, wspace=0.3, hspace=0.75,
|
|
# subplot_spec=grid[-1])
|
|
|
|
df1 = []
|
|
df2 = []
|
|
axes = []
|
|
for c,cell in enumerate(cells_chosen):
|
|
|
|
for ff, frame_names in enumerate(frame_names_both):
|
|
grid0 = gridspec.GridSpecFromSubplotSpec(2, 1, wspace=0.15, hspace=0.25,
|
|
subplot_spec=grid[:,ff]) # height_ratios=[1, 0.7, 1, 1],
|
|
ax1 = plt.subplot(grid0[0])
|
|
frame_cell = plt_gain_area(all_lins, ax1, c, cell, cells, cm, colors_w, colors_wo, df1, df2, ff,
|
|
frame_names, fs, loc, xlim)
|
|
|
|
axes.append(ax1)
|
|
if ff != 0:
|
|
ax1.set_ylabel('')
|
|
else:
|
|
ax1.set_ylabel('AUC')
|
|
ax1.set_xlabel('')
|
|
###############################
|
|
# roc nonlin part
|
|
ax2 = plt.subplot(grid0[1])
|
|
plt_nonlin_line(ax2, cell, ff, frame_cell, xlim)
|
|
#axes.append(ax2)
|
|
#############################
|
|
# squares
|
|
ax = plt.subplot(grid[:,3])
|
|
axes.append(ax)
|
|
full_name = 'modell_all_cell_no_sinz1_afe1_0.03__afr0_1__afj2_0.1__phaseright__len5_adaptoffset_bisecting_0.995_1.005____ratecorrrisidual35__modelbigfit_nfft4096_StartE1_1_EndE1_1.3_in0.005_StartJ2_1_EndJ2_1.3_in0.005_trialnr20__reshuffled_ThreeDiff_SameOffset'
|
|
square_part(ax, shrink =shrink, labelpad = 330,full_name = full_name)
|
|
#ax.plot([-2,0],[50,200], color = 'black', linewidth = 1.5)
|
|
#ax.plot([100,100],[50,200], color = 'black', linewidth = 1.5)
|
|
#ax.plot([-2,100],[50,50], color = 'black', linewidth = 1.5)
|
|
#ax.plot([-2,100],[200,200], color = 'black', linewidth = 1.5)
|
|
max_val = 236
|
|
ax.plot([-2,0],[50,max_val], color = 'black', linewidth = 1)
|
|
ax.plot([max_val,max_val],[50,max_val], color = 'black', linewidth = 1)
|
|
ax.plot([-2,max_val],[50,50], color = 'black', linewidth = 1)
|
|
ax.plot([-2,max_val],[max_val,max_val], color = 'black', linewidth = 1)
|
|
#embed()
|
|
#embed()
|
|
|
|
|
|
third_diagonal = True
|
|
if third_diagonal:
|
|
df1.append(df1[0])
|
|
df2.append(df2[0]+np.abs(frame_cell.fr.iloc[0]-df2[0])*2)
|
|
|
|
plt_circles_matrix(ax, df1, df2)
|
|
|
|
plt.suptitle('')
|
|
fig.tag(axes, xoffs = -3.6, yoffs = 2.7,)
|
|
save_visualization(jpg=True, png=False)
|
|
#plt.subplots_adjust(top = 0.8)
|
|
plt.show()
|
|
|
|
|
|
def plt_circles_matrix(ax, df1, df2, scat = True):
|
|
titles = [r'$\numcircled{1}$', r'$\numcircled{2}$', r'$\numcircled{3}$']
|
|
for d in range(len(df1)):
|
|
if d == 2:
|
|
ax.text(df1[d] + 5, df2[d] + 5, titles[d]) # va = 'center', fontsize=11, transform=ax.transAxes
|
|
elif d == 1:
|
|
ax.text(df1[d] + 5, df2[d] + 5, titles[d]) # va = 'center', fontsize=11, transform=ax.transAxes
|
|
if scat:
|
|
ax.scatter(df1[d], df2[d], facecolors='none', edgecolor='black', marker='s')
|
|
elif d == 0:
|
|
# ax.text(df1[d] + 5, df2[d] + 5, titles[d]) # va = 'center', fontsize=11, transform=ax.transAxes
|
|
|
|
ax.text(df1[d] + 5, df2[d] - 15, titles[d]) # va = 'center', fontsize=11, transform=ax.transAxes
|
|
if scat:
|
|
ax.scatter(df1[d], df2[d], facecolors='none', edgecolor='black', marker='s')
|
|
|
|
|
|
def colors_cocktailparty_all():
|
|
color_base, color_01, color_02, color_012 = colors_cocktailparty()
|
|
colors_w = [color_012]
|
|
colors_wo = [color_01]
|
|
return colors_w, colors_wo,color_base, color_01, color_02, color_012
|
|
|
|
|
|
def plt_gain_area(all_lins, ax1, c, cell, cells, cm, colors_w, colors_wo, df1, df2, ff, frame_names, fs, loc, xlim):
|
|
for f, frame_name in enumerate(frame_names):
|
|
|
|
path = load_folder_name('calc_ROC') + '/' + frame_name + '.csv'
|
|
#embed()
|
|
if os.path.exists(path):
|
|
frame = pd.read_csv(path)
|
|
# embed()
|
|
all_nonlin = all_lins[
|
|
0] # 'amp_B1&B1Harm&B2&B2Harm&B1-B2&B1+B2/10_mean(012-0102_012-0102)_norm_01B1+02B2_mean'
|
|
title = cut_title(frame_name, datapoints=50)
|
|
# if f == 0:
|
|
# ax0.set_title(cell[0:13] + '\n cv ' + str(np.round(np.mean(frame_cell.cv_0.unique()), 2)),
|
|
# color=colr[col_pos], fontsize=8)
|
|
|
|
# cells = frame.sort_values(by='cv_0').cell.unique()
|
|
path_ref = load_folder_name(
|
|
'calc_ROC') + '/' + 'calc_ROC_contrasts-ROCmodel_contrasts1_diagonal1_FrF1rel_0.33_FrF2rel_0.67_C2_0.1_C1_0.02_len_25_nfft_32768_trialsnr_20_mult_minimum_1temporal.csv'
|
|
frame_ref = pd.read_csv(path_ref)
|
|
frame_ref = frame_ref.sort_values(by='cv_0')
|
|
colr = [cm(float(i) / (len(frame_ref))) for i in range(len(frame_ref))]
|
|
cells_sorted = frame_ref.cell.unique()
|
|
col, row = find_row_col(cells, row=4)
|
|
# fig, ax = plt.subplots(row, col, figsize=(12, 5), constrained_layout=True, sharex=True,
|
|
# sharey=True) # sharex = True,sharex=True,
|
|
# ax0 = ax.flatten()
|
|
# for c, cell in enumerate(cells):
|
|
frame_cell = frame[frame.cell == cell]
|
|
nrs = int(frame_name.split('LenNrs_')[1].split('_')[0])
|
|
frame_cell = frame_cell.iloc[0:nrs]
|
|
df1.append(np.mean(frame_cell.df1.unique()))
|
|
df2.append(np.mean(frame_cell.df2.unique()))
|
|
# plt.suptitle(title + ' \n' + cell[0:13] + ' cv ' + str(np.round(np.mean(frame_cell.cv_0.unique()), 2)))
|
|
|
|
# ax2 = plt.subplot(grid0[4])
|
|
axs = [ax1]
|
|
colors = ['lightgrey', 'grey', 'black']
|
|
label_f = ['CMS: 20n with female', 'CLS: 100n with female', 'LS: 1000n with female', ]
|
|
label_f2 = ['CMS: 20n without female', 'CLS: 100n without female', 'LS: 1000n without female', ]
|
|
label_f = ['with female', 'CLS: 100n with female', 'LS: 1000n with female', ]
|
|
label_f2 = ['without female', 'CLS: 100n without female', 'LS: 1000n without female', ]
|
|
|
|
labels = [label_f[f], label_f[f]]
|
|
labels2 = [label_f2[f], label_f2[f]]
|
|
for a, ax in enumerate(axs):
|
|
#embed()
|
|
if len(frame_cell) > 0:
|
|
# if a != 3:
|
|
#baseline, b, eod_size, = load_eod_size(cell)
|
|
#c1 = c_to_dist(eod_size * 0.5 * frame_cell.c1)
|
|
plt_area_between(frame_cell, ax, ax, colors_w, colors_wo, f, labels_with_female=labels[a],
|
|
labels_without_female=labels2[a])
|
|
ax.set_xlim(xlim)
|
|
# ax.axhline(0, linestyle='--', color='grey', linewidth=0.5)
|
|
# embed()
|
|
col_pos = np.where(cells_sorted == cell)[0][0]
|
|
# embed()
|
|
titles = [r'$\numcircled{1}$: Female + Intruder' + '\n = Baseline',
|
|
r'$\numcircled{2}$: Female + Intruder' + '\n ' + r' $\neq$ Baseline']
|
|
titles = [' $ \Delta \mathrm{f_{Female}} + \Delta \mathrm{f_{Intruder}} $\n'+'$ = \mathrm{f_{Base}}$'+r'$\numcircled{1}$ ',
|
|
' $ \Delta \mathrm{f_{Female}} + \Delta \mathrm{f_{Intruder}} $\n '+r' $\neq \mathrm{f_{Base}}$'+r'$\numcircled{2}$ ']
|
|
|
|
#'$\Delta f_{fntruder}$
|
|
ax.set_title(titles[ff])
|
|
# ax.set_title()
|
|
|
|
if ff == 1:
|
|
if a == 0:
|
|
try:
|
|
ax.legend(loc=loc, fontsize=fs, ncol=1)
|
|
except:
|
|
print('legend something')
|
|
embed()
|
|
else:
|
|
ax.legend(loc=loc, fontsize=fs, ncol=1)
|
|
ax.set_ylim(0, 0.52)
|
|
ax.set_yticks_delta(0.25)
|
|
if c != 0:
|
|
remove_yticks(ax)
|
|
# remove_tick_ymarks(ax2)
|
|
ax.spines['right'].set_visible(False)
|
|
ax.spines['top'].set_visible(False)
|
|
# embed()
|
|
# ax.spines['top'].
|
|
# ax.spines['left' == False]
|
|
# else:
|
|
# #ax2.set_ylabel('B1+B2')
|
|
# if f == 1:
|
|
# ax.axvline(0.03, color = 'grey', linestyle = '--', linewidth = 0.5)
|
|
if a == 0:
|
|
#ax.set_ylabel(core_)
|
|
ax.set_ylabel('AUC')
|
|
# if ff != 0:
|
|
#
|
|
#ax.set_xlabel('mV/cm')
|
|
# ax1.set_xlabel('mV/cm')
|
|
# ax.invert_xaxis()
|
|
remove_xticks(ax)
|
|
if ff != 0:
|
|
remove_yticks(ax)
|
|
# if ff != 0:
|
|
# remove_tick_ymarks(ax1)
|
|
|
|
col = [cm(float(i) / (len(frame))) for i in range(len(frame))]
|
|
return frame_cell
|
|
|
|
|
|
def plt_nonlin_line(ax2, cell, ff, frame_cell, xlim):
|
|
#baseline, b, eod_size, = load_eod_size(cell)
|
|
#c1 = c_to_dist(eod_size * 0.5 * frame_cell.c1)
|
|
c1 = c_dist_recalc_func(frame_cell=frame_cell, c_nrs=frame_cell.c1, cell=cell, c_dist_recalc=True)
|
|
talk = False
|
|
#embed()
|
|
if talk:
|
|
ax2.plot(c1, sum_score(frame_cell), color='black', clip_on=True)#, linewidth=lw
|
|
else:
|
|
|
|
#embed()
|
|
#frame_cell['amp_B1+B2_012_mean']
|
|
#frame_cell['amp_B1+B2_01_mean']
|
|
#frame_cell['amp_B1+B2_02_mean']
|
|
#frame_cell['amp_B1+B2_012-01-02+0']
|
|
#ax2.plot(c1, , color='black', clip_on=True, linewidth=0.75)
|
|
|
|
score = nonlinval_core(frame_cell)
|
|
#score = frame_cell[val_nonlin_chapter4()]
|
|
|
|
#score = sum_score(frame_cell)
|
|
score = val_new_core(frame_cell) #, color='black', clip_on=True, linewidth = 0.75)
|
|
|
|
#score = sum_score(frame_cell)
|
|
score[score < 0] = 0
|
|
ax2.plot(c1, score, color='black', clip_on=True)#, linewidth = 0.75
|
|
|
|
#embed()
|
|
ax2.set_ylim(0, 7)
|
|
#7)
|
|
ax2.set_xlim(xlim)
|
|
if ff != 0:
|
|
remove_yticks(ax2)
|
|
# ax2.set_xscale('log')
|
|
# ax2.invert_xaxis()
|
|
if ff == 0:
|
|
ax2.set_ylabel(peak_b1b2_name())#nonlin_title()
|
|
ax2.set_xlabel(core_distance_label())
|
|
#ax2.set_xlabel('Distance [cm]')
|
|
|
|
|
|
def val_new_core(frame_cell):
|
|
return frame_cell['amp_B1+B2_012-01-02+0_norm_01B1_mean']
|
|
|
|
|
|
def sum_score(frame_cell):
|
|
return frame_cell['amp_B1+B2_012-01-02+0_norm_01B1_mean']
|
|
#'amp_B1+B2_012-01-02+0_norm_01B1_mean'
|
|
|
|
def find_variable_from_savename(full_name, name='trialnr'):
|
|
verb_length = len(name)
|
|
name_start = full_name.find(name)
|
|
name_end = name_start + verb_length
|
|
line_pos = full_name.find('_', name_start)
|
|
trials_nr = full_name[name_end:line_pos] # trials_nr
|
|
return trials_nr, line_pos, name_end, name_start,
|
|
|
|
|
|
def freq_two_mult_recalc(frame_cell_orig, freqs):
|
|
# embed()
|
|
freqs = [((freqs[0][0] - 1) * frame_cell_orig.f0.iloc[0], (freqs[0][1] - 1) * frame_cell_orig.f0.iloc[0])]
|
|
# embed()
|
|
return freqs
|
|
|
|
def figure_out_score_and_add(add, c_here, frame_cell):
|
|
score1, score2, score3 = score_choice(c_here, add)
|
|
if score1 not in frame_cell.keys():
|
|
add = ''
|
|
score1, score2, score3 = score_choice(c_here, add)
|
|
if score1 not in frame_cell.keys():
|
|
add = ''
|
|
score1, score2, score3 = score_choice(c_here, add)
|
|
return add, score1, score2, score3
|
|
|
|
def plt_matrix_saturation_loss(ax,frame_cell, cs_nr=-1, c_here='c1',add = '', ims=[], ims_diff=[], imshow=False, xlabel = True):
|
|
#frame_cell = prepare_diff(c_here, frame_cell)
|
|
|
|
add, score1, score2, score3 = figure_out_score_and_add(add, c_here, frame_cell)
|
|
|
|
cls = ["RdBu_r", "RdBu_r", "RdBu_r"]
|
|
for ss, score_here in enumerate([score1, score2, score3]):
|
|
|
|
new_frame = frame_cell.groupby(['df1', 'df2'], as_index=False).mean() # ['score']
|
|
|
|
|
|
matrix = new_frame.pivot(index='df2', columns='df1', values=score_here)
|
|
|
|
if ss == 2:
|
|
lim = np.max([np.max(matrix), np.abs(np.min(matrix))])
|
|
ax[ss].set_title(score_here)
|
|
# embed()
|
|
if imshow:
|
|
im = ax[2].imshow(matrix, origin='lower', cmap="RdBu_r", vmin=-lim, vmax=lim,
|
|
extent=[np.min(matrix.columns),
|
|
np.max(matrix.columns),
|
|
np.min(matrix.index),
|
|
np.max(matrix.index)])
|
|
else:
|
|
try:
|
|
im = ax[ss].pcolormesh(
|
|
np.array(list(map(float, matrix.columns))), np.array(matrix.index),
|
|
matrix,
|
|
cmap=cls[ss],
|
|
rasterized=False) # 'Greens'#vmin=np.percentile(np.abs(stack_plot), 5),vmax=np.percentile(np.abs(stack_plot), 95),
|
|
except:
|
|
print('ims probelem')
|
|
embed()
|
|
if ss == 2:
|
|
im.set_clim(-lim, lim)
|
|
# embed()
|
|
ims_diff.append(im)
|
|
else:
|
|
ims.append(im)
|
|
cbar = plt.colorbar(im, ax=ax[ss])
|
|
cbar.set_label(score_here, labelpad=100) # rotation=270,
|
|
ax[0].set_ylabel('df2')
|
|
if xlabel:
|
|
ax[ss].set_xlabel('df1')
|
|
return lim, matrix, ss, ims
|
|
|
|
|
|
def score_choice(c_here, add=''):
|
|
if c_here == 'c1': # 'B1_diff'
|
|
score1 = 'amp_B1_012_mean' + add
|
|
score2 = 'amp_B1_01_mean' + add
|
|
score3 = 'diff'
|
|
if c_here == 'c1': # 'B1_diff'
|
|
score1 = 'amp_B1_012_mean' + add
|
|
score2 = 'amp_B1_01_mean' + add
|
|
score3 = 'diff'
|
|
return score1, score2, score3
|
|
|
|
|
|
def area_vs_single_peaks_frame(cell, frame_cell, c_here='c1', cs_type='all'):
|
|
if cs_type != 'all':
|
|
frame_cell = frame_cell[(frame_cell.c1 == cs_type) & (frame_cell.c2 == cs_type)]
|
|
# embed()
|
|
# diffs = frame_cell['c_here']
|
|
return frame_cell
|
|
|
|
|
|
def plt_cross(matrix, ax, type='small'):
|
|
zero_val = np.min([np.min(matrix.index) + 1, np.min(matrix.columns) + 1])
|
|
max_val = np.max([np.max(matrix.index) - 1, np.max(matrix.columns) - 1])
|
|
x_axis = np.arange(zero_val, max_val, 1)
|
|
y_axis = np.arange(zero_val, max_val, 1)
|
|
if type == 'big':
|
|
ax.plot(x_axis, y_axis, color='black', zorder=100)
|
|
ax.plot(np.array(x_axis), -np.array(y_axis), color='black', zorder=100)
|
|
ax.set_xlim(x_axis[0], x_axis[-1])
|
|
ax.set_ylim(y_axis[0], y_axis[-1])
|
|
elif type == 'small':
|
|
# embed()
|
|
for y_axis_here in [y_axis, -y_axis]:
|
|
restrict = ((x_axis > np.min(matrix.columns)) & (x_axis < np.max(matrix.columns))) & (
|
|
(y_axis_here > np.min(matrix.index)) & (y_axis_here < np.max(matrix.index)))
|
|
ax.plot(x_axis[restrict], y_axis_here[restrict], color='black', zorder=100)
|
|
# ax.plot(x_axis[restrict], -y_axis[restrict], color='black', zorder=100)
|
|
# embed()
|
|
ax.set_xlim(np.min(matrix.columns), np.max(matrix.columns))
|
|
ax.set_ylim(np.min(matrix.index), np.max(matrix.index))
|
|
# ax.set_xlim(x_axis[restrict][0], x_axis[restrict][-1])
|
|
# ax.set_ylim(y_axis[restrict][0], y_axis[restrict][-1])
|
|
elif type == 'zerozentered':
|
|
x_rt = np.max(matrix.index)
|
|
x_lb = np.min(matrix.index)
|
|
y_rt = np.max(matrix.columns)
|
|
y_lb = np.min(matrix.columns)
|
|
max_val = np.max([np.abs(y_lb), np.abs(y_rt), np.abs(x_lb), np.abs(x_rt)])
|
|
ax.plot([0, x_rt], [0, x_rt], color='black', zorder=100)
|
|
ax.plot([0, x_lb], [0, x_lb], color='black', zorder=100)
|
|
ax.plot([0, y_rt], [0, y_rt], color='black', zorder=100)
|
|
ax.plot([0, y_lb], [0, y_lb], color='black', zorder=100)
|
|
ax.plot([0, -x_rt], [0, x_rt], color='black', zorder=100)
|
|
ax.plot([0, -x_lb], [0, x_lb], color='black', zorder=100)
|
|
ax.plot([0, -y_rt], [0, y_rt], color='black', zorder=100)
|
|
ax.plot([0, -y_lb], [0, y_lb], color='black', zorder=100)
|
|
ax.plot([0, x_rt], [0, -x_rt], color='black', zorder=100)
|
|
ax.plot([0, x_lb], [0, -x_lb], color='black', zorder=100)
|
|
ax.plot([0, y_rt], [0, -y_rt], color='black', zorder=100)
|
|
ax.plot([0, y_lb], [0, -y_lb], color='black', zorder=100)
|
|
embed()
|
|
|
|
|
|
|
|
def plt_square_row(orientation, matrix_extend, dev, name, fig, title_pos, shrink, auc_lim, addsteps, counter_contrast,
|
|
cut, dfs, gridspacing, scores, contr2, cc, grid0, cell, combinations,
|
|
matrix_sorted='grid_sorted', xlim=[], ylim=[], text=True):
|
|
axes = []
|
|
y_max = []
|
|
y_min = []
|
|
x_max = []
|
|
x_min = []
|
|
c = -1
|
|
for contrast11, contrast22 in combinations:
|
|
|
|
print('print: ' + str(cell))
|
|
# contrasts11 = c1_unique
|
|
#embed()
|
|
grid1 = gridspec.GridSpecFromSubplotSpec(1, int(len(combinations)),
|
|
hspace=0.7,
|
|
wspace=0.2,
|
|
|
|
subplot_spec=
|
|
grid0
|
|
[cc]) # hspace=0.4,wspace=0.2,len(chirps)
|
|
|
|
|
|
|
|
# embed()
|
|
if os.path.exists(name):
|
|
# try:
|
|
c += 1
|
|
df = pd.read_pickle(name)
|
|
# df_all = pd.read_pickle(save_name_all)
|
|
# embed()
|
|
if len(df) > 0:
|
|
try:
|
|
frame = df[(df['cell'] == cell) & (
|
|
df[contr2] == contrast22) & (df['dev'] == dev)] #
|
|
except:
|
|
print('contrast think')
|
|
embed()
|
|
pivots = {}
|
|
if len(frame) > 0:
|
|
if 'auc' not in scores[0]:
|
|
grid2 = gridspec.GridSpecFromSubplotSpec(1, len(scores) + 1,
|
|
hspace=0.4,
|
|
wspace=0.4,
|
|
|
|
subplot_spec=
|
|
grid1[c]) # hspace=0.4,wspace=0.2,len(chirps)
|
|
|
|
trans = False
|
|
|
|
#embed()
|
|
ax, pivots_scores, orientation, limit_diff, axs = plt_ingridients(trans, gridspacing, scores,
|
|
scores, xlim, ylim, cut,
|
|
grid2, frame, dev,
|
|
contrast11, dfs,
|
|
matrix_sorted, orientation,
|
|
matrix_extend, colorbar=False)
|
|
|
|
# ax,pivots_scores,orientation, limit_diff, axs
|
|
axes.append(ax)
|
|
if len(pivots_scores) > 0:
|
|
# embed()
|
|
try:
|
|
y_max.append(np.max(pivots_scores[scores[0]].index))
|
|
except:
|
|
print('y_max')
|
|
embed()
|
|
y_min.append(np.min(pivots_scores[scores[0]].index))
|
|
x_max.append(np.max(pivots_scores[scores[0]].columns))
|
|
x_min.append(np.min(pivots_scores[scores[0]].columns))
|
|
|
|
else:
|
|
grid2 = gridspec.GridSpecFromSubplotSpec(1, len(scores) + 2,
|
|
hspace=0.4,
|
|
wspace=0.4,
|
|
|
|
subplot_spec=
|
|
grid1[c]) # hspace=0.4,wspace=0.2,len(chirps)
|
|
|
|
####################################
|
|
# plot the auc parts
|
|
if counter_contrast == 0:
|
|
colorbar = True
|
|
else:
|
|
colorbar = False
|
|
|
|
|
|
# grid0 = gridspec.GridSpecFromSubplotSpec(1, len(pivots_diff[di]) + add,
|
|
# wspace=ws,
|
|
# hspace=0.2,
|
|
# subplot_spec=
|
|
# grid_orig_orig[grid_final])
|
|
orientation, ax, limit_diff, axs, pivots = plt_auc(grid2, matrix_sorted,
|
|
orientation, shrink, cut,
|
|
xlim, ylim, pivots, trans,
|
|
gridspacing,
|
|
matrix_extend, dfs, contrast11, dev,
|
|
frame, [scores],
|
|
cell, auc_lim, addsteps,
|
|
scores, 0,
|
|
contr2, contrast22,
|
|
pad=0.3,
|
|
bar_orientation="horizontal",
|
|
colorbar=colorbar, fig=fig)
|
|
|
|
pivots_scores = pivots
|
|
axes.append(ax)
|
|
y_max.append(np.max(pivots[scores[0]].index))
|
|
y_min.append(np.min(pivots[scores[0]].index))
|
|
x_max.append(np.max(pivots[scores[0]].columns))
|
|
x_min.append(np.min(pivots[scores[0]].columns))
|
|
for a in ax:
|
|
ax.axvline(1, color='grey', linewidth=0.5, )
|
|
ax.axhline(1, color='grey', linewidth=0.5, )
|
|
|
|
if c != len(combinations) - 1:
|
|
for a in ax:
|
|
if a != 0:
|
|
try:
|
|
ax[a].set_xticks([])
|
|
except:
|
|
# embed()
|
|
a.set_xticks([])
|
|
else:
|
|
# if cell_counter in np.arange(row*col-col,row*col,1):
|
|
chose_xlabel_roc_matrix(ax, contrast11, contrast22, contr2, pivots_scores, scores)
|
|
|
|
for s in range(len(scores)):
|
|
if s != 0:
|
|
ax[s].set_yticks([])
|
|
else:
|
|
# if cell_counter in np.arange(0,row*col,col):
|
|
if c == len(combinations) - 1:
|
|
chose_ylabel_ROC_matrix(ax, contrast11, contrast22, contr2, pivots_scores, s,
|
|
scores)
|
|
|
|
# embed()
|
|
if text:
|
|
if c == 0:
|
|
ax[0].text(0, title_pos, cell, transform=ax[0].transAxes,
|
|
fontweight='bold')
|
|
# cell+'_C1_' + str( contrast22) + '_C2_' + str(contrast11)
|
|
# else:
|
|
ax[0].text(0
|
|
, 1.2, 'C1 ' + str(
|
|
contrast22) + ' C2 ' + str(
|
|
contrast11), transform=ax[3].transAxes,
|
|
fontweight='bold') #
|
|
ax[0].set_title('')
|
|
ax[1].set_title('')
|
|
ax[2].set_title('')
|
|
ax[3].set_title('')
|
|
ax[0].axvline(0, color='grey', linewidth=0.5, )
|
|
ax[0].axhline(0, color='grey', linewidth=0.5, )
|
|
ax[1].axvline(0, color='grey', linewidth=0.5, )
|
|
ax[1].axhline(0, color='grey', linewidth=0.5, )
|
|
ax[2].axvline(0, color='grey', linewidth=0.5, )
|
|
ax[2].axhline(0, color='grey', linewidth=0.5, )
|
|
ax[3].axvline(0, color='grey', linewidth=0.5, )
|
|
ax[3].axhline(0, color='grey', linewidth=0.5, )
|
|
|
|
if len(ax) > 4:
|
|
ax[4].set_title('')
|
|
set_same_lim(xlim, ylim, y_min, y_max, x_min, x_max, axes)
|
|
return axes, y_max, y_min, x_max, x_min
|
|
|
|
|
|
def chose_ylabel_ROC_matrix(ax, contrast11, contrast22, contrastc2, pivots_scores, s, scores):
|
|
if (('1' in contrastc2) & (
|
|
'1' in pivots_scores[scores[0]].index.name)) | (
|
|
(('2' in contrastc2) & (
|
|
'2' in pivots_scores[scores[0]].index.name))):
|
|
ax[s].set_ylabel(
|
|
pivots_scores[scores[0]].index.name + ' ' + str(
|
|
contrast22) + '%', labelpad=-25)
|
|
else:
|
|
ax[s].set_ylabel(
|
|
pivots_scores[scores[0]].index.name + ' ' + str(
|
|
contrast11) + '%', labelpad=-25)
|
|
|
|
|
|
def chose_xlabel_roc_matrix(ax, contrast11, contrast22, contrastc2, pivots_scores, scores):
|
|
if (('1' in contrastc2) &
|
|
('1' in pivots_scores[scores[0]].columns.name)) | (
|
|
('2' in contrastc2) & (
|
|
'2' in pivots_scores[scores[0]].columns.name)):
|
|
ax[0].set_xlabel(
|
|
pivots_scores[scores[0]].columns.name + ' ' + str(
|
|
contrast22) + '%', labelpad=-15)
|
|
else:
|
|
ax[0].set_xlabel(
|
|
pivots_scores[scores[0]].columns.name + ' ' + str(
|
|
contrast11) + '%',
|
|
labelpad=-15)
|
|
|
|
|
|
def set_same_lim(xlim, ylim, y_min, y_max, x_min, x_max, axes):
|
|
# embed()
|
|
# xlim = [0.5, 1.5]
|
|
|
|
# ylim = [0.5, 1.5]
|
|
if len(xlim) > 0:
|
|
ylim_here = ylim
|
|
xlim_here = xlim
|
|
else:
|
|
ylim_here = [np.min(y_min) * 0.99, np.max(y_max) * 1.01]
|
|
xlim_here = [np.min(x_min) * 0.99, np.max(x_max) * 1.01]
|
|
# embed()
|
|
for aa in range(len(axes)):
|
|
for a in axes[aa]:
|
|
try:
|
|
axes[aa][a].set_ylim(ylim_here)
|
|
axes[aa][a].set_xlim(xlim_here)
|
|
except:
|
|
a.set_ylim(ylim_here)
|
|
a.set_xlim(xlim_here)
|
|
|
|
|
|
def plt_ingridients(trans, gridspacing, pivots_diff, scores, xlim, ylim, cut, grid_orig2, frame, dev, contrast11,
|
|
dfs, matrix_sorted='grid_sorted', orientation='f1 on x, f2 on y', matrix_extent='min', title=True,
|
|
colorbar_title=True, fig=[], colorbar=False, pad=0.1, bar_orientation='vertical', cl_outside=False):
|
|
|
|
|
|
ax = {}
|
|
pivots_scores = {}
|
|
pivots_min = []
|
|
pivot = []
|
|
limit_diff = []
|
|
axs = []
|
|
if len(frame) > 0:
|
|
save = 'yes'
|
|
for s, score in enumerate(scores):
|
|
if score in frame.keys():
|
|
pivot, _, indexes, resorted, orientation, cut_type = get_data_pivot_three(frame, score,
|
|
matrix_extent=matrix_extent,
|
|
matrix_sorted=matrix_sorted,
|
|
orientation=orientation,
|
|
gridspacing=gridspacing,
|
|
dfs=dfs)
|
|
|
|
|
|
if trans:#
|
|
pivot = np.transpose(pivot)
|
|
#embed()
|
|
if 'var' in score:
|
|
pivot = np.sqrt(pivot)
|
|
#embed()
|
|
pivots_scores[score] = pivot
|
|
pivots_min.append(pivot)
|
|
else:
|
|
if len(pivot) > 0:
|
|
pivots_scores[score] = np.ones_like(pivot)
|
|
|
|
symbol = ['$-$', '$-$', '$+$', '$=$']
|
|
for s, score in enumerate(scores):
|
|
if score in frame.keys():
|
|
ax[s] = plt.subplot(grid_orig2[s])
|
|
|
|
ax[s].text(1.5, 0.5, symbol[s],
|
|
fontsize=15, va = 'center', ha = 'center',
|
|
transform=ax[s].transAxes) # ha='center', va='center',
|
|
|
|
vmax = np.nanmax(pivots_min)
|
|
vmin = np.nanmin(pivots_min)
|
|
|
|
# print(vmin)
|
|
#if len(pivots_scores[score])> 1:
|
|
axs = plt.imshow(pivots_scores[score], extent=[np.min(pivots_scores[score].columns),
|
|
np.max(pivots_scores[score].columns),
|
|
np.min(pivots_scores[score].index),
|
|
np.max(pivots_scores[score].index)], vmax=vmax, vmin=vmin,
|
|
origin='lower')
|
|
if title:
|
|
plt.title(score, fontsize=7)
|
|
if colorbar:
|
|
if cl_outside:
|
|
cbar_ax,left, bottom, width, height = colorbar_outside(ax[s], axs, fig,
|
|
orientation='bottom')
|
|
if colorbar_title:
|
|
ax[s].text(0.2, -1.4, score, transform=ax[s].transAxes)#, va = 'center', ha = 'center'
|
|
else:
|
|
plt.colorbar(orientation = bar_orientation, pad = pad)
|
|
#embed()
|
|
if cut:
|
|
ax[s].set_ylim(ylim)
|
|
ax[s].set_xlim(xlim)
|
|
|
|
###############################
|
|
# plot sum of both
|
|
if len(scores) == len(pivots_scores):
|
|
ax[s+1] = plt.subplot(grid_orig2[4])
|
|
diff = pivots_scores[scores[0]] - pivots_scores[scores[1]] - pivots_scores[scores[2]] + pivots_scores[scores[3]]
|
|
min = np.min(np.min(diff))
|
|
max = np.max(np.max(diff))
|
|
lim = np.max([np.abs(min), np.abs(max)])
|
|
axs = plt.imshow(diff, vmin=-lim, vmax=lim, origin='lower', cmap="RdBu_r",
|
|
extent=[np.min(diff.columns),
|
|
np.max(diff.columns),
|
|
np.min(diff.index),
|
|
np.max(diff.index)])
|
|
limit_diff = np.array([np.min(np.min(diff)), np.max(np.max(diff))])
|
|
plt.yticks([])
|
|
# plt.colorbar()#orientation = 'horizontal'
|
|
if cut:
|
|
ax[s+1].set_ylim(ylim)
|
|
ax[s+1].set_xlim(xlim)
|
|
if scores != pivots_diff[-1]:#
|
|
plt.xticks([])
|
|
# plt.yticks([])
|
|
if colorbar:
|
|
if cl_outside:
|
|
cbar_ax,left, bottom, width, height = colorbar_outside(ax[s + 1], axs, fig,
|
|
orientation='bottom', top=True)
|
|
else:
|
|
plt.colorbar(orientation=bar_orientation, pad=pad)
|
|
if len(ax)> 0:
|
|
ax[s+1].scatter(1,1, marker = 'o', facecolors='none', edgecolors='black')
|
|
return ax,pivots_scores,orientation, limit_diff, axs
|
|
|
|
|
|
def plt_auc(grid0, matrix, orientation, shrink, cut, xlim, ylim, pivots, trans, gridspacing, start, dfs, contrast11,
|
|
dev, df_datapoint, pivots_diff, cell, auc_lim, addsteps, scores,
|
|
di, contrastc2, contrast22, add=0, bar_orientation="vertical", pad=0.1, colorbar=True,
|
|
cl_outside=True, fig=[]):
|
|
good_cells = [
|
|
'2022-01-06-ai-invivo-1',
|
|
'2022-01-06-ag-invivo-1',
|
|
'2022-01-08-ad-invivo-1',
|
|
'2022-01-08-ah-invivo-1',
|
|
|
|
'2021-07-06-ab-invivo-1',
|
|
'2021-08-03-ac-invivo-1',
|
|
|
|
] #
|
|
if cell in good_cells:
|
|
color_title = 'green'
|
|
else:
|
|
color_title = 'red'
|
|
|
|
if addsteps == True:
|
|
row = len(scores)
|
|
else:
|
|
row = 0
|
|
|
|
counter = 0
|
|
ax_cont = []
|
|
for ss, score in enumerate(scores):
|
|
|
|
what = score # + '_'+dev
|
|
|
|
df_contrast = df_datapoint[df_datapoint[contrastc2] == contrast22]
|
|
# embed()
|
|
if len(df_contrast) > 0:
|
|
save = 'yes'
|
|
if score in df_contrast:
|
|
|
|
pivot, _, indexes, resorted, orientation, cut_type = get_data_pivot_three(df_contrast, what,
|
|
matrix_extent=start,
|
|
matrix_sorted=matrix,
|
|
orientation=orientation,
|
|
gridspacing=gridspacing,
|
|
dfs=dfs) # 35
|
|
|
|
# try:
|
|
try:
|
|
datapoints_way = np.unique(df_datapoint[
|
|
'datapoints_way'])
|
|
except:
|
|
datapoints_way = df_datapoint['datapoints_way'].iloc[0]
|
|
# embed()
|
|
|
|
# except:
|
|
# embed()
|
|
# np.unique(df_datapoint['trial_nrs']))
|
|
if trans:
|
|
pivot = np.transpose(pivot)
|
|
pivots[score] = pivot
|
|
|
|
if addsteps == True:
|
|
ax = plt.subplot(grid0[counter])
|
|
counter += 1
|
|
plt.title(' ' + str(what), fontsize=8) # +' dev'+str(dev)
|
|
ax_cont.append(ax)
|
|
if 'auci' in score:
|
|
vmin = -0.5
|
|
vmax = 0.5
|
|
elif 'auc' in score:
|
|
vmin = 0
|
|
vmax = 1
|
|
else:
|
|
vmax = np.nanmax(pivot)
|
|
vmin = np.nanmin(pivot)
|
|
|
|
axs = plt.imshow(pivot, vmin=vmin,
|
|
vmax=vmax, origin='lower', cmap="RdBu_r",
|
|
extent=[np.min(pivot.columns),
|
|
np.max(pivot.columns),
|
|
np.min(pivot.index),
|
|
np.max(pivot.index)])
|
|
|
|
if cut:
|
|
plt.xlim(xlim)
|
|
plt.ylim(ylim)
|
|
if not ((di == 1) & (ss == 0)):
|
|
# plt.xticks([])
|
|
# plt.yticks([])
|
|
hi = True
|
|
else:
|
|
plt.xlabel('EOD mult 2')
|
|
plt.ylabel('EOD mult 1')
|
|
# plt.colorbar(shrink=shrink,orientation=bar_orientation,pad=pad) # ,
|
|
if colorbar:
|
|
if cl_outside:
|
|
cbar_ax,left, bottom, width, height = colorbar_outside(ax, axs, fig, add=add,
|
|
top=True) #colorbar_outside
|
|
# g1 = sns.heatmap(pivot, square='equal',
|
|
|
|
|
|
if di != len(pivots_diff) - 1:
|
|
plt.xticks([])
|
|
if ss != 0:
|
|
plt.yticks([])
|
|
|
|
symbol = ['$-$', '$=$']
|
|
ax.text(1.5, 0.5, symbol[ss],
|
|
fontsize=15, va='center', ha='center',
|
|
transform=ax.transAxes) # ha='center',
|
|
|
|
if cut:
|
|
ax.set_ylim(ylim)
|
|
ax.set_xlim(xlim)
|
|
else:
|
|
print(str(score) + ' score not found')
|
|
# else:
|
|
# embed()
|
|
################################
|
|
# plot sum
|
|
if di == 0:
|
|
if addsteps == False:
|
|
ax.text(1 + ws * 1, 0.5, '=', va='center', ha='center', fontsize=15,
|
|
transform=ax.transAxes) # ha='center',
|
|
name = pivots_diff[di]
|
|
ax = plt.subplot(grid0[counter])
|
|
ax_cont.append(ax)
|
|
if name[0] in pivots.keys():
|
|
pivot_diff = pivots[name[0]]
|
|
title = name[0]
|
|
|
|
for p in range(1, len(name), 1):
|
|
if name[p] in pivots.keys():
|
|
pivot_diff = pivot_diff - pivots[name[p]]
|
|
title = title + ' - ' + name[p]
|
|
limit_diff = np.array([np.min(np.min(pivot_diff)), np.max(np.max(pivot_diff))])
|
|
axs = plt.imshow(pivot_diff, vmin=-0.5,
|
|
vmax=0.5, origin='lower', cmap="RdBu_r",
|
|
extent=[np.min(pivot_diff.columns),
|
|
np.max(pivot_diff.columns),
|
|
np.min(pivot_diff.index),
|
|
np.max(pivot_diff.index)])
|
|
|
|
if cut:
|
|
plt.xlim(xlim)
|
|
plt.ylim(ylim)
|
|
|
|
plt.ylabel('')
|
|
plt.xlabel('')
|
|
if colorbar:
|
|
if cl_outside:
|
|
cbar_ax,left, bottom, width, height = colorbar_outside(ax, axs, fig, add=add, top=True)
|
|
else:
|
|
plt.colorbar(shrink=shrink, orientation=bar_orientation, pad=pad)
|
|
if di != len(pivots_diff) - 1:
|
|
plt.xticks([])
|
|
if ss != 0:
|
|
plt.yticks([])
|
|
|
|
if auc_lim != 'nonlinm':
|
|
ax = plt.subplot(grid0[counter + 1])
|
|
# plt.title(title, fontsize=8)
|
|
ax_cont.append(ax)
|
|
vmax = np.nanpercentile(np.abs(pivot_diff), 95)
|
|
vmin = np.nanpercentile(np.abs(pivot_diff), 5)
|
|
lim = np.max([vmax, np.abs(vmin)])
|
|
axs = plt.imshow(pivot_diff, vmin=-lim,
|
|
vmax=lim, origin='lower', cmap="RdBu_r",
|
|
extent=[np.min(pivot_diff.columns),
|
|
np.max(pivot_diff.columns),
|
|
np.min(pivot_diff.index),
|
|
np.max(pivot_diff.index)])
|
|
|
|
if cut:
|
|
plt.xlim(xlim)
|
|
plt.ylim(ylim)
|
|
plt.ylabel('')
|
|
plt.xlabel('')
|
|
if di != len(pivots_diff) - 1:
|
|
plt.xticks([])
|
|
if ss != 0:
|
|
plt.yticks([])
|
|
# if colorbar:
|
|
if colorbar:
|
|
if cl_outside:
|
|
cbar_ax,left, bottom, width, height = colorbar_outside(ax, axs, fig, add=add, top=True)
|
|
else:
|
|
plt.colorbar(orientation=bar_orientation, pad=pad) # shrink=shrinkorientation = 'horizontal'
|
|
counter += 1
|
|
if '*' in score:
|
|
score = 'auci'
|
|
else:
|
|
limit_diff = []
|
|
axs = []
|
|
return orientation, ax_cont, limit_diff, axs, pivots
|
|
|
|
|
|
def condition_for_roc_thesis():
|
|
global diagonal, freq1_ratio, freq2_ratio, plus_q, way, length
|
|
combis = diagonal_points()
|
|
diagonal = 'B1+B2_diagonal2' # 'B1+B2_diagonal'#'diagonal11'#'test_data_cell_2022-01-05-aa-invivo-1'
|
|
# embed()
|
|
freq1_ratio = combis[diagonal][0]
|
|
freq2_ratio = combis[diagonal][1]
|
|
plus_q = 'plus' # 'minus'#'plus'##'minus'
|
|
way = 'mult_minimum_1' # 'mult'#'absolut'
|
|
ways = [
|
|
'mult_minimum_1'] # , 'absolut', 'mult_env_3', 'mult_f1_3', 'mult_f2_3', 'mult_minimum_3', 'mult_env_1','mult_f1_1', 'mult_f2_1', ]
|
|
ways = ['absolut']
|
|
# das hier brauchen wir
|
|
# doch das brauchen wir hier sonst klappt das nicht mit dem ROC!
|
|
length = 25 # 20 # 5
|
|
trials_nr = 20#100
|
|
return trials_nr, length, ways, way, plus_q, freq2_ratio, freq1_ratio, diagonal
|
|
|
|
|
|
def save_RAM_to_csv(data_name, spikes_data_short, end = ''):
|
|
file_name, spikes, spikes_selected = save_RAM_spikes_core(data_name, end, spikes_data_short)
|
|
# spikes = load_spikes_RAM(amp, file_name, 'spikes', 'calc_RAM_data_spikes_extra__first1_order__')
|
|
|
|
# embed()
|
|
save_RAM_overview_csv(data_name, end, spikes_data_short)
|
|
|
|
file_name, spikes_selected = save_RAM_both_csv(data_name, file_name, spikes, spikes_data_short, spikes_selected)
|
|
|
|
save_RAM_eod_to_csv(data_name, file_name, spikes_selected)
|
|
|
|
|
|
def save_RAM_both_csv(data_name, file_name, spikes, spikes_data_short, spikes_selected):
|
|
amp, file_name = get_min_amp_and_first_file(spikes_data_short, min_find = True)
|
|
spikes_selected = spikes_data_short[(spikes_data_short.amp == amp) & (spikes_data_short.file_name == file_name)] #
|
|
eod_path = load_only_spikes_RAM(data_name=data_name, emb=False, core_name='calc_RAM_data_eod_extra__first1_order__')
|
|
if os.path.exists(eod_path):
|
|
eod_data_short = pd.read_pickle(eod_path)
|
|
# amp = np.min(eod_data_short.amp)
|
|
amp, file_name = get_min_amp_and_first_file(eod_data_short, min_find = True)
|
|
eod_selected = eod_data_short[(eod_data_short.amp == amp) & (eod_data_short.file_name == file_name)] #
|
|
frame_cell = save_spikes_csv(eod_selected, spikes, spikes_selected)
|
|
frame_cell.to_pickle('calc_RAM/spikes_and_eod_' + data_name + '.pkl')
|
|
return file_name, spikes_selected
|
|
|
|
|
|
def save_RAM_overview_csv(data_name, end, spikes_data_short):#, name = ''
|
|
frame_ov = pd.DataFrame()
|
|
amps, file_names = get_min_amp_and_first_file(spikes_data_short)
|
|
path_sascha = load_folder_name('calc_base') + '/' + 'calc_base_data-base_frame_overview.pkl'
|
|
frame = pd.read_pickle(path_sascha)
|
|
frame_c = frame[frame.cell == data_name]
|
|
#frame_c.species.iloc[0]
|
|
for a,amp in enumerate(amps):
|
|
for file_name in file_names:
|
|
#file_name = file_names[a]
|
|
frame_ov = pd.DataFrame()
|
|
spikes_selected = spikes_data_short[(spikes_data_short.amp == amp) & (spikes_data_short.file_name == file_name)] #
|
|
spikes = get_array_from_pandas(spikes_selected['spikes'], abs=False)
|
|
if len(spikes_selected)>0:
|
|
frame_ov['file_name'] = spikes_selected.file_name
|
|
frame_ov['sampling'] = spikes_selected.sampling
|
|
frame_ov['cell'] = spikes_selected.cell
|
|
# das entspricht der abschätzung aus der baseline, aber ich könnte das auch aus dem RAM global EOD berechnen
|
|
frame_ov['eod_fr'] = spikes_selected.eod_fr
|
|
#embed()
|
|
frame_ov['species'] = frame_c.species.iloc[0]
|
|
lim = find_lim_here(data_name, 'individual')
|
|
frame_ov['burst_corr_individual'] = lim
|
|
frame_ov['cell_type_reclassified'] = frame_c.cell_type_reclassified.iloc[0]
|
|
|
|
#for key in spikes_selected.keys():
|
|
# if ('EODf' in key) | ('freq_step' in key):
|
|
# frame_ov[key] = spikes_selected[key]
|
|
|
|
|
|
|
|
#embed()
|
|
spikes, pos_reshuffled = reshuffle_spike_lengths(spikes)
|
|
names = names_eodfs()
|
|
vars = []
|
|
for name in names:
|
|
vars.append(spikes_selected[name].iloc[0])
|
|
#embed()
|
|
frame_ov = reshuffle_eodfs(frame_ov, names, pos_reshuffled, vars, res_name = 'res')
|
|
#embed()
|
|
#path_sascha = load_folder_name('calc_base') + '/' + 'calc_base_data-base_frame_overview.pkl'
|
|
#frame = pd.read_pickle(path_sascha)
|
|
#frame_c = frame[frame.cell == data_name]
|
|
cell_type = frame_c.cell_type_reclassified.iloc[0]
|
|
#frame_ov['cell_type'] = spikes_selected.species
|
|
#if name == '':
|
|
name = end_calc_ram_name_eod(end = '-overview_') + end_calc_ram_name(data_name, end, file_name, amp,cell_type='_' + cell_type, species = frame_c.species.iloc[0]) #data_name + end +'_amp_'+str(amp)+'_filename_'+str(file_name)+ '.csv'
|
|
#name = end_calc_ram_name_eod(end='-eod_') + end_calc_ram_name(amp, data_name, end, file_name,
|
|
# cell_type='_' + cell_type) # +cell_type
|
|
|
|
frame_ov.to_csv(name)
|
|
del frame
|
|
#eods_df.to_csv('calc_RAM/calc_nix_RAM-eod_' + data_name + end+'_amp_'+str(amp)+'_filename_'+str(file_name)+'.csv')#calc_nix_RAM
|
|
|
|
def save_RAM_spikes_core(data_name, end, spikes_data_short, cell_type = '', species = ''):
|
|
amps, file_names = get_min_amp_and_first_file(spikes_data_short)
|
|
#poss =
|
|
for a,amp in enumerate(amps):
|
|
for file_name in file_names:
|
|
#file_name = file_names[a]
|
|
spikes_selected = spikes_data_short[(spikes_data_short.amp == amp) & (spikes_data_short.file_name == file_name)] #
|
|
spikes = get_array_from_pandas(spikes_selected['spikes'], abs=False)
|
|
if len(spikes) > 0:
|
|
#try:
|
|
# spikes_df = pd.DataFrame(spikes[0], columns=['spikes'])
|
|
#except:
|
|
# print('spikes something')
|
|
# embed()
|
|
spikes_df = pd.DataFrame()
|
|
spikes, pos_reshuffled = reshuffle_spike_lengths(spikes)
|
|
try:
|
|
spikes_df = save_spikestrains_several(spikes_df, spikes)
|
|
except:
|
|
print('shuffling thing')
|
|
embed()
|
|
#if name == '':
|
|
name = end_calc_ram_name_eod(end = '-spikes_') + end_calc_ram_name(data_name, end, file_name, amp,
|
|
'_' + cell_type,species.replace(' ','')) #data_name + end + '_amp_' + str(amp) + '_filename_' + str(file_name) + '.csv'
|
|
#name = end_calc_ram_name_eod(end='-overview_') + end_calc_ram_name(amp, data_name, end, file_name,
|
|
# cell_type='_' + cell_type) # data_name + end +'_amp_'+str(amp)+'_filename_'+str(file_name)+ '.csv'
|
|
#name = end_calc_ram_name_eod(end='-eod_') + end_calc_ram_name(amp, data_name, end, file_name,
|
|
# cell_type='_' + cell_type) # +cell_type
|
|
|
|
spikes_df.to_csv(name, index=False)
|
|
##eods_df.to_csv('calc_RAM/calc_nix_RAM-eod_' + data_name + end+'_amp_'+str(amp)+'_filename_'+str(file_name)+'.csv')#calc_nix_RAM
|
|
|
|
return file_name, spikes, spikes_selected
|
|
|
|
|
|
def get_min_amp_and_first_file(spikes_data_short, min_find = False):
|
|
if min_find == True:
|
|
amp = [np.min(spikes_data_short.amp)]
|
|
if len(spikes_data_short.file_name.unique()) > 1:
|
|
print('alignment problem')
|
|
embed()
|
|
file_name = [spikes_data_short.file_name.unique()[0]]
|
|
else:
|
|
amp = spikes_data_short.amp.unique()
|
|
file_name = spikes_data_short.file_name.unique()#[0]
|
|
return amp, file_name
|
|
|
|
|
|
def save_RAM_eod_to_csv(data_name, file_name, spikes_selected):
|
|
eod_path = load_only_spikes_RAM(data_name=data_name, emb=False, core_name='calc_RAM_data_eod_extra__first1_order__')
|
|
if os.path.exists(eod_path):
|
|
eod_data_short = pd.read_pickle(eod_path)
|
|
# amp = np.min(eod_data_short.amp)
|
|
|
|
save_RAM_wod_to_csv_core(data_name, eod_data_short)
|
|
else:
|
|
if spikes_selected.file_name2.iloc[0] == 'InputArr_400hz_30s':
|
|
eod_path = load_only_spikes_RAM(data_name='2022-01-06-aa-invivo-1', emb=False,
|
|
core_name='calc_RAM_data_eod_extra__first1_order__')
|
|
eod_data_short = pd.read_pickle(eod_path)
|
|
save_RAM_wod_to_csv_core(data_name, eod_data_short)
|
|
else:
|
|
eods = []
|
|
|
|
|
|
def save_RAM_wod_to_csv_core(data_name, eod_data_short, end = '', cell_type = '',species = '', ):
|
|
|
|
#amp = np.min(eod_data_short.amp)
|
|
amps, file_names = get_min_amp_and_first_file(eod_data_short)
|
|
for a,amp in enumerate(amps):
|
|
for file_name in file_names:
|
|
#file_name = file_names[a]
|
|
eod_selected = eod_data_short[(eod_data_short.amp == amp) & (eod_data_short.file_name == file_name)] #
|
|
eods = get_array_from_pandas(eod_selected['eod'], abs=False)
|
|
if len(eods)> 0:
|
|
length = []
|
|
for eod in eods:
|
|
length.append(len(eod))
|
|
|
|
try:
|
|
eods_df = pd.DataFrame(eods[np.argmax(length)], columns=['eod'])
|
|
except:
|
|
print('something')
|
|
embed()
|
|
#if name == '':
|
|
name = end_calc_ram_name_eod(end = '-eod_') + end_calc_ram_name(data_name, end, file_name, amp,
|
|
cell_type='_' + cell_type, species = species) #+cell_type
|
|
#embed()
|
|
eods_df.to_csv(name, index=False)#calc_nix_RAM
|
|
|
|
|
|
def end_calc_ram_name_eod(end = '-eod_'):
|
|
return 'calc_RAM/calc_nix_RAM'+end
|
|
|
|
|
|
def end_calc_ram_name(data_name='', end='', file_name='', amp='', cell_type='', species = ''):
|
|
#embed()
|
|
return data_name + end + '_amp_' + str(amp) + '_filename_' + str(file_name) + cell_type.replace(' ','')+species.replace(' ','')+'.csv'
|
|
|
|
|
|
def save_spikes_csv(eod_selected, spikes, spikes_selected):
|
|
frame_cell = pd.DataFrame()
|
|
# if os.path.exists(eod_path):
|
|
# frame_cell['eod'] = eods
|
|
frame_cell['spikes'] = spikes
|
|
print(spikes_selected.file_name2.iloc[0])
|
|
frame_cell['file_name'] = spikes_selected.file_name2.iloc[0]
|
|
frame_cell['sampling'] = eod_selected.sampling
|
|
frame_cell['cell'] = eod_selected.cell
|
|
frame_cell['eod_fr'] = eod_selected.eod_fr
|
|
return frame_cell
|
|
|
|
|
|
def compare_powers(show = False, visualize = False, cell_nrs=5, step=str(30), nrs=[0.5, 1.5, 3, 1, ], color='green', what='expected_third_wave',
|
|
v='diff', a_fes=[0.1], a_fjs=[0.1],
|
|
names=['amp_max_05']):#a_fjs=[0, 0.01, 0.05, 0.1, 0.2]
|
|
lim = []
|
|
default_settings(column=2, length=4)
|
|
#
|
|
cells = ['2012-07-03-ak-invivo-1' '2012-04-20-ak-invivo-1','2012-05-10-ad-invivo-1', '2012-06-27-ah-invivo-1','2012-06-27-an-invivo-1'] # ,'2012-07-03-ak-invivo-1' '2012-04-20-ak-invivo-1','2012-05-10-ad-invivo-1', '2012-06-27-ah-invivo-1','2012-06-27-an-invivo-1', '2012-07-03-ak-invivo-1']
|
|
#'2012-05-10-ad-invivo-1', '2012-07-03-ak-invivo-1'
|
|
nrs = [0.5,1,1.5,3]
|
|
adapt='adaptoffsetallall2'
|
|
full_name=''
|
|
self=''
|
|
version_sinz='sinz'
|
|
for aa, a_fe in enumerate(a_fes):
|
|
for a, a_fj in enumerate(a_fjs):
|
|
for what in names:
|
|
plt.figure()
|
|
grid = gridspec.GridSpec(len(cells), len(nrs), hspace=0.65, wspace=0.34, bottom=0.15, top=0.97)
|
|
for c,cell in enumerate(cells):
|
|
for n, nr in enumerate(nrs):
|
|
|
|
version = 'new'
|
|
|
|
|
|
|
|
# embed()
|
|
# plt.suptitle(
|
|
# 'score:' + what + 'contrast' + str(a_fj) + ' cell' + cell)
|
|
|
|
|
|
|
|
|
|
#versions, cell = define_squares_model(a_fe, nr, a_fj, cell_nr, what, step)
|
|
full_name = 'modell_all_cell_no_sinz'+str(nr)+'_afe0.1__afr1__afj0.1__length0.5_adaptoffsetallall2_0.995_1.005____stepefish50Hz_ratecorrrisidual35__modelbigfit_nfft4096_StartEmitter0.5_EndEmitter1.5_StartJammer0.5_EndJammer1.5Three_SameOffset'
|
|
|
|
versions, arrays = get_all_squares(adapt=adapt,full_name=full_name, self=self, version_sinz=version_sinz,cell=cell, a_fe=a_fe, nr=nr, a_fj=a_fj, what=what, step=step,
|
|
|
|
)
|
|
|
|
if len(versions['diff']) > 0:
|
|
#embed()
|
|
# plt.suptitle(cell + ' threshold^' + str(nr) + ' a_j' + str(a_fj) + ' '+what)
|
|
# ax[1 + a] = plt.subplot(4, 5, 1 + a)
|
|
# plt.title('a_fe 0.2' + 'afj' + str(a_fj))
|
|
|
|
if len(versions) > 0:
|
|
|
|
plt.subplot(grid[c, n])
|
|
plt.title('Power:' + str(nr))
|
|
#if color == 'green':
|
|
# axs = sns.heatmap(versions[v],
|
|
# cmap='viridis')
|
|
#else:
|
|
if lim == []:
|
|
min = np.min(np.min(versions[v]))
|
|
max = np.max(np.max(versions[v]))
|
|
lim = np.max([np.abs(min), np.abs(max)])
|
|
axs = sns.heatmap(versions[v], vmin=-lim, vmax=lim, cmap="RdBu_r",
|
|
cbar_kws={'label': 'Nonlinearity [Hz]'}) # 'location': "left"
|
|
axs.invert_yaxis()
|
|
plt.subplots_adjust(hspace=0.8, wspace=0.8)
|
|
#plt.savefig(
|
|
# r'C:\Users\alexi\OneDrive - bwedu\Präsentations\2021.28.09_Benjamin\plot_simulation_square_power' + str(
|
|
# nr) + what + 'contrast2' + str(a_fj) + 'contrast1' + str(
|
|
# a_fe) + 'version' + v + 'sorted' + '.png')
|
|
#if visualize:
|
|
save_visualization(show)
|
|
|
|
|
|
def get_all_squares(full_name='', self='', version_sinz='sinz',cell = [], a_fe =0.2, nr=1, a_fj=0.2,what = 'std', step='30',adapt='adaptoffset_bisecting', variant='no'):
|
|
squares = ['012','control_01','control_02','base_0']#'base_0'
|
|
versions = {}
|
|
|
|
|
|
arrays = []
|
|
#embed()
|
|
for s, square in enumerate(squares):
|
|
|
|
control, vers_here, cell, eod_m, fr_rate_mult = define_squares_model_three(a_fe =a_fe, nr=nr, a_fj=a_fj,what = what, step = step,
|
|
adapt=adapt, variant=variant, square=square,cell_data = cell,
|
|
full_name=full_name, self=self, minimum=0.5,
|
|
maximum=1.5, version_sinz=version_sinz)
|
|
|
|
versions[square] = vers_here
|
|
arrays.append(np.array(vers_here))
|
|
#embed()
|
|
if len(versions['012']) > 0:
|
|
versions['diff'] = versions['012']-versions['control_01']-versions['control_02']+versions['base_0']
|
|
else:
|
|
versions['diff'] = []
|
|
return versions, arrays
|
|
|
|
|
|
def plot_shemes_lis(eod_fish_r, eod_fish_e, eod_fish_j, grid0, time, ylim=[-1.1, 1.1], g=0, jammer_label='f2',
|
|
emitter_label='f1', remove = True, receiver_label='f0',
|
|
waves_present=['receiver', 'emitter', 'jammer', 'all'], color='grey', eod_fr=700, add=0,
|
|
xlim=[0, 0.05],extract_here = True, sheme_shift=0, extract = '',title=[],threshold=0.02):
|
|
stimulus = np.zeros(len(eod_fish_r))
|
|
axes = []
|
|
|
|
axes = []
|
|
for ww, w in enumerate(waves_present):
|
|
|
|
ax = plt.subplot(grid0[ww + sheme_shift, g])
|
|
axes.append(ax)
|
|
#axes.append(ax)
|
|
if w == 'receiver':
|
|
|
|
# ax.text(0.5, 1.25, '$+$', transform=ax.transAxes, fontsize=20)
|
|
ax.plot(time, eod_fish_r, color='grey', lw=0.5)
|
|
stimulus += eod_fish_r
|
|
ax.set_ylim(ylim)
|
|
if len(xlim) > 0:
|
|
ax.set_xlim(xlim)
|
|
ax.spines['bottom'].set_visible(False)
|
|
if g == 0:
|
|
ax.set_ylabel(receiver_label)
|
|
# embed()
|
|
elif w == 'emitter':
|
|
ax.text(0.5, 1.01, '$+$', va='center', ha='center', transform=ax.transAxes, fontsize=20)
|
|
ax.plot(time, eod_fish_e, color='grey', lw=0.5)
|
|
stimulus += eod_fish_e
|
|
ax.set_ylim(ylim)
|
|
# embed()
|
|
if len(xlim) > 0:
|
|
ax.set_xlim(xlim)
|
|
ax.spines['bottom'].set_visible(False)
|
|
if g == 0:
|
|
ax.set_ylabel(emitter_label)#, color='grey'
|
|
elif w == 'jammer':
|
|
ax.text(0.5, 1.01, '$+$', va='center', ha='center', transform=ax.transAxes, fontsize=20)
|
|
ax.plot(time, eod_fish_j, color='grey', lw=0.5)
|
|
stimulus += eod_fish_j
|
|
# embed()
|
|
ax.set_ylim(ylim)
|
|
if len(xlim) > 0:
|
|
ax.set_xlim(xlim)
|
|
if g == 0:
|
|
ax.set_ylabel(jammer_label)
|
|
elif w == 'all':
|
|
if title:
|
|
ax.set_title(title, color=color)
|
|
ax.text(0.5, 1.45 + add, '$=$', va='center', ha='center', transform=ax.transAxes, fontsize=20)
|
|
|
|
#if extract_here:
|
|
eod_interp, eod_norm = extract_am(stimulus, time,extract=extract, norm=False, sampling=1 / time[1], eodf=eod_fr,
|
|
emb=False,threshold=threshold) # , extract=extract
|
|
|
|
#else:
|
|
|
|
plt.plot(time, stimulus, color='grey', lw=0.5)
|
|
if extract_here:
|
|
plt.plot(time[1::], eod_interp[1::], color=color) # , clip_on = False
|
|
plt.ylim(-1.22, 1.22)
|
|
if len(xlim) > 0:
|
|
plt.xlim(xlim)
|
|
plt.ylim(ylim)
|
|
if g == 0:
|
|
plt.ylabel('stimulus')
|
|
if (g == 0):
|
|
if (ww == 0):
|
|
plt.ylabel(receiver_label)
|
|
elif (ww == 1):
|
|
plt.ylabel(emitter_label)
|
|
elif (ww == 2):
|
|
plt.ylabel(jammer_label)
|
|
elif (ww == 3):
|
|
plt.ylabel('stimulus')
|
|
|
|
# if ax != []:
|
|
if remove:
|
|
ax.spines['right'].set_visible(False)
|
|
ax.spines['left'].set_visible(False)
|
|
ax.spines['top'].set_visible(False)
|
|
ax.spines['bottom'].set_visible(False)
|
|
ax.set_xticks([])
|
|
ax.set_yticks([])
|
|
return ax, axes
|
|
|
|
|
|
def experimental_protocol_lissbon_amps(add='', color=['green', 'blue', 'red', 'orange'],figsize=(12, 5.5),
|
|
show=True,
|
|
step=str(30),
|
|
):
|
|
control = pd.read_pickle(
|
|
load_folder_name(
|
|
'calc_model') + '/modell_all_cell_no_sinz3_afe0.1__afr1__afj0.1__length1.5_adaptoffsetallall2___stepefish' + step + 'Hz_ratecorrrisidual35__modelbigfit_nfft4096.pkl')
|
|
|
|
# plt.figure(figsize=(12, 2.5))
|
|
|
|
default_figsize(column=2, length=3)
|
|
# grid = gridspec.GridSpec(2, 1, wspace=0.7, left=0.05, top=0.95, bottom=0.15,
|
|
# right=0.98)
|
|
grid = gridspec.GridSpec(1, 1, wspace=0.7, hspace=0.5, left=0.05, top=0.99, bottom=0.07,
|
|
right=0.98) # height_ratios = [1,6]bottom=0.25, top=0.8,
|
|
|
|
stimulus_length = 0.1
|
|
deltat = 1 / 20000
|
|
eod_fr = 750
|
|
# embed()
|
|
a_fr = 1
|
|
eod_fe = 680 # data.eodf.iloc[0] + 10 # cell_model.eode.iloc[0]
|
|
a_fes = [0.01, 0.2, 0.6, 1]#,1.2,2]1
|
|
ylim = [-2.3, 2.3]#[-2, 2]
|
|
eod_fj = 730 # data.eodf.iloc[0] + 50 # cell_model.eodj.iloc[0]
|
|
a_fj = 0.05
|
|
variant_cell = 'no' # 'receiver_emitter_jammer'
|
|
|
|
|
|
# ['', '', '', ''],
|
|
symbols = ['$+$', '$-$', '$-$', '$=$', '']
|
|
|
|
|
|
waves_presents = [['receiver', 'emitter', 'all']]*len(a_fes)
|
|
titles = ['receiver',
|
|
'receiver + female',
|
|
'receiver + intruder',
|
|
|
|
'receiver + female + intruder',
|
|
[]],
|
|
color = ['black']*len(a_fes)
|
|
symbols = ['']*len(a_fes)
|
|
gs = np.arange(0, len(color),1)
|
|
#embed()
|
|
grid0 = gridspec.GridSpecFromSubplotSpec(3, len(gs), wspace=0.3, hspace=0.35,
|
|
subplot_spec=grid[0])
|
|
# grid1 = gridspec.GridSpecFromSubplotSpec(1, 5, wspace=0.35, hspace=0.35,
|
|
# subplot_spec=grid[1])
|
|
|
|
a_fes_cm = c_dist_recalc_func(c_nrs=a_fes, mult_eod = 1)
|
|
axes0 = []
|
|
for i in range(len(waves_presents)):
|
|
eod_fish_j, time, time_fish_r, eod_fish_r, time_fish_e, eod_fish_e, time_fish_sam, eod_fish_sam, stimulus_am, stimulus_sam = extract_waves(
|
|
variant_cell, '',
|
|
stimulus_length, deltat, eod_fr, a_fr, a_fes[i], [eod_fe], 0, eod_fj, a_fj)
|
|
time = time * 1000
|
|
|
|
|
|
print(eod_fe-eod_fr)
|
|
xlim = [0, 30]
|
|
if i == 3:
|
|
extract_here = False
|
|
else:
|
|
extract_here = True
|
|
ax, axes = plot_shemes_lis(eod_fish_r, eod_fish_e, eod_fish_j, grid0, time, g=gs[i],
|
|
waves_present=waves_presents[i], color=color[i], eod_fr=eod_fr, ylim=ylim, xlim=xlim,
|
|
jammer_label='', emitter_label='', receiver_label='',
|
|
title='',extract_here = extract_here,remove = True,threshold=-0.25)#extract = 'globalmax',
|
|
axes0.append(axes[0])
|
|
if extract_here == False:
|
|
time = np.arange(0, stimulus_length, deltat)
|
|
time_fish_r = time * 2 * np.pi * np.abs((eod_fr-eod_fe))
|
|
eod_fish_r = 1+(a_fes[i]-0.12) * np.cos(time_fish_r)
|
|
time = time * 1000
|
|
ax.plot(time, eod_fish_r+0.3, color = 'black')
|
|
|
|
ax.set_ylim(ylim)
|
|
ax.text(1,1.03,'$c=%s'%(int(np.round(a_fes[i]*100)))+'\,\%$', transform=ax.transAxes, ha = 'right')#+' distance = '+str(int(np.round(a_fes_cm[i])))+' cm')
|
|
#embed()
|
|
test = False
|
|
if test:
|
|
print(str(np.max(eod_fish_r))+' '+str(np.max(eod_fish_e)))
|
|
|
|
plt.plot(eod_fish_r)
|
|
plt.plot(eod_fish_e)
|
|
plt.show()
|
|
if ax != []:
|
|
ax.text(1.1, 0.45, symbols[i], fontsize=35, transform=ax.transAxes)
|
|
if i == 0:
|
|
manual = False
|
|
if manual:
|
|
ax.plot([0, 10], [ylim[0] + 0.01, ylim[0] + 0.01], color='black')
|
|
ax.text(0, -0.1, '10 ms', va='center', fontsize=11, transform=ax.transAxes)
|
|
ax.xscalebar(0.25, -0.02, 10, 'ms', va='right', ha='bottom')
|
|
#ax.yscalebar(-0.045, 0.3, 1, 'mV', va='right', ha='bottom')
|
|
|
|
extra = False
|
|
if extra:
|
|
# stimuli.append(stimulus)
|
|
models = resave_small_files("models_big_fit_d_right.csv", load_folder='calc_model_core')
|
|
cell = '2012-07-03-ak-invivo-1'
|
|
deltat, eod_fr, model_params, offset = get_model_params(models, cell = cell)
|
|
spikes = [[]]*5
|
|
for t in range(5):
|
|
cvs, adapt_output, baseline_after, _, rate_adapted, rate_baseline_before, rate_baseline_after, spikes[t], \
|
|
stimulus_altered, \
|
|
v_dent_output, offset_new, v_mem_output,noise_final = simulate(cell, offset, eod_fish_r + eod_fish_e + eod_fish_j, EODf = eod_fr, deltat = deltat,
|
|
**model_params)
|
|
#spikes[t] = spikes[t][spikes[t]<stimulus_length]
|
|
#embed()
|
|
base_cut, mat_base = find_base_fr(spikes, deltat, stimulus_length, time, dev=0.0005)
|
|
ax = plt.subplot(grid0[-2,i])
|
|
ax.eventplot(np.array(spikes)*1000, color = 'grey')
|
|
ax.set_xlim(xlim)
|
|
ax.show_spines('')
|
|
|
|
ax = plt.subplot(grid0[-1,i])
|
|
ax.plot(time, mat_base[0:len(time)], color = 'black')
|
|
ax.set_xlim(xlim)
|
|
ax.set_ylabel('Firing Rate [Hz]')
|
|
#embed()
|
|
fig = plt.gcf()
|
|
ax = plt.gca()
|
|
fig.tag(axes0, xoffs = -3.5, yoffs = 0.1)
|
|
# plt.savefig(r'C:\Users\alexi\OneDrive - bwedu\Präsentations\latex\experimental_protocol.pdf')
|
|
# save_visualization(jpg=True, png=False, add = add)
|
|
save_visualization('', show, jpg=True, png=False, counter_contrast=0, savename='', add=add)
|
|
# if visualize:
|
|
# return
|
|
# plt.show()
|
|
|
|
|
|
def experimental_protocol_lissbon(add='', color=['green', 'blue', 'red', 'orange'], titles=['receiver',
|
|
'receiver + female',
|
|
'receiver + intruder',
|
|
|
|
'receiver + female + intruder',
|
|
[]],
|
|
waves_presents=[['receiver', '', '', 'all'],
|
|
['receiver', 'emitter', '', 'all'],
|
|
['receiver', '', 'jammer', 'all'],
|
|
|
|
['receiver', 'emitter', 'jammer', 'all'],
|
|
|
|
], figsize=(12, 5.5),
|
|
show=True,
|
|
step=str(30),
|
|
):
|
|
control = pd.read_pickle(
|
|
load_folder_name(
|
|
'calc_model') + '/modell_all_cell_no_sinz3_afe0.1__afr1__afj0.1__length1.5_adaptoffsetallall2___stepefish' + step + 'Hz_ratecorrrisidual35__modelbigfit_nfft4096.pkl')
|
|
|
|
# plt.figure(figsize=(12, 2.5))
|
|
|
|
plt.figure(figsize=figsize)
|
|
# grid = gridspec.GridSpec(2, 1, wspace=0.7, left=0.05, top=0.95, bottom=0.15,
|
|
# right=0.98)
|
|
grid = gridspec.GridSpec(1, 1, wspace=0.7, hspace=0.5, left=0.05, top=0.99, bottom=0.07,
|
|
right=0.95) # height_ratios = [1,6]bottom=0.25, top=0.8,
|
|
grid0 = gridspec.GridSpecFromSubplotSpec(4, 4, wspace=0.3, hspace=0.35, height_ratios=[1, 1, 1, 1],
|
|
subplot_spec=grid[0])
|
|
# grid1 = gridspec.GridSpecFromSubplotSpec(1, 5, wspace=0.35, hspace=0.35,
|
|
# subplot_spec=grid[1])
|
|
|
|
stimulus_length = 0.3
|
|
deltat = 1 / 40000
|
|
eod_fr = 750
|
|
# embed()
|
|
a_fr = 1
|
|
eod_fe = 600 # data.eodf.iloc[0] + 10 # cell_model.eode.iloc[0]
|
|
a_fe = 0.5
|
|
eod_fj = 680 # data.eodf.iloc[0] + 50 # cell_model.eodj.iloc[0]
|
|
a_fj = 0.05
|
|
variant_cell = 'no' # 'receiver_emitter_jammer'
|
|
eod_fish_j, time, time_fish_r, eod_fish_r, time_fish_e, eod_fish_e, time_fish_sam, eod_fish_sam, stimulus_am, stimulus_sam = extract_waves(
|
|
variant_cell, '',
|
|
stimulus_length, deltat, eod_fr, a_fr, a_fe, [eod_fe], 0, eod_fj, a_fj)
|
|
|
|
gs = [0, 1, 2, 3, 4]
|
|
# ['', '', '', ''],
|
|
symbols = ['$+$', '$-$', '$-$', '$=$', '']
|
|
symbols = ['', '', '', '', '']
|
|
ylim = [-2, 2]
|
|
time = time * 1000
|
|
|
|
axes = []
|
|
for i in range(len(waves_presents)):
|
|
ax, axes = plot_shemes_lis(eod_fish_r, eod_fish_e, eod_fish_j, grid0, time, g=gs[i],
|
|
waves_present=waves_presents[i], color=color[i], eod_fr=eod_fr, ylim=ylim, xlim=[0, 70],
|
|
jammer_label='intruder', emitter_label='female', receiver_label='receiver',
|
|
title=titles[i])
|
|
if ax != []:
|
|
ax.text(1.1, 0.45, symbols[i], fontsize=35, transform=ax.transAxes)
|
|
if i == 0:
|
|
ax.plot([0, 20], [ylim[0] + 0.01, ylim[0] + 0.01], color='black')
|
|
ax.text(0, -0.1, '20 ms', va='center', fontsize=11, transform=ax.transAxes)
|
|
ax.set_ylim(ylim)
|
|
axes.append(ax)
|
|
|
|
fig = plt.gcf()
|
|
axes = fig.axes
|
|
fig.tag(axes[0::4], xoffs=-3, yoffs=0.3)
|
|
# plt.savefig(r'C:\Users\alexi\OneDrive - bwedu\Präsentations\latex\experimental_protocol.pdf')
|
|
# save_visualization(jpg=True, png=False, add = add)
|
|
save_visualization('', show, jpg=True, png=False, counter_contrast=0, savename='', add=add)
|
|
# if visualize:
|
|
# return
|
|
# plt.show()
|
|
|
|
|
|
def rainbow_title(fig, axt, titles, color_add_pos, ha = 'left', a = 0, start_xpos= 0,y_pos = 1.1):
|
|
#embed()
|
|
if type(titles) != str:
|
|
#embed()
|
|
for aa in range(len(titles)):
|
|
if aa == 0:
|
|
pos = start_xpos #+ add_pos[a][aa]
|
|
text = axt.text(pos, y_pos, titles[aa], color=color_add_pos[a][aa],
|
|
transform=axt.transAxes, ha = ha) # verticalalignment='right',
|
|
text.draw(fig.canvas.get_renderer())
|
|
|
|
ex = text.get_window_extent()
|
|
ex2 = ex.transformed(axt.transAxes.inverted())
|
|
pos = ex2.get_points()[1][0] + 0.01
|
|
|
|
else:
|
|
axt.text(0, 1.1, titles, color='black',
|
|
transform=axt.transAxes) # verticalalignment='right',add_pos[a]
|
|
|
|
|
|
def calc_areas(path, frame_ref, colr, name, x_pos, cells_chosen):
|
|
default_settings(column=2, length=3)
|
|
frame = pd.read_csv(path)
|
|
cvs = frame_ref.cv_0
|
|
# cells = frame_ref.cell.unique()
|
|
cells = frame_ref.cell.unique()
|
|
areas_01 = np.ones(len(cells)) * float('nan')
|
|
areas_012 = np.ones(len(cells)) * float('nan')
|
|
areas_01_one = np.ones(len(cells)) * float('nan')
|
|
areas_012_one = np.ones(len(cells)) * float('nan')
|
|
nonlin = np.ones(len(cells)) * float('nan')
|
|
nonlin_area = np.ones(len(cells)) * float('nan')
|
|
areas_01_scatter = colr * 1
|
|
# areas_012_scatter = [None] * len(cells)
|
|
#name = 'amp_B1+B2_012_mean'
|
|
#frame.loc[pos, 'amp_' + 'B1_' + '01' + add] + frame.loc[pos, 'amp_' + 'B2_' + '02' + add]
|
|
#embed()
|
|
name = 'score'
|
|
for c, cell in enumerate(cells):
|
|
frame_cell = frame[frame.cell == cell]
|
|
|
|
frame_cell['score'] = get_nonlin_scores(frame_cell)
|
|
areas_01_one[c] = fin_min_pos(c, frame_cell, 'auci_base_01', x_pos)
|
|
areas_012_one[c] = fin_min_pos(c, frame_cell, 'auci_02_012', x_pos)
|
|
areas_01[c] = metrics.auc(frame_cell.c1, frame_cell['auci_base_01'])
|
|
areas_012[c] = metrics.auc(frame_cell.c1, frame_cell['auci_02_012'])
|
|
|
|
#embed()
|
|
nonlin[c] = fin_min_pos(c, frame_cell, name, x_pos)
|
|
|
|
nonlin_area[c] = metrics.auc(frame_cell.c1, frame_cell[
|
|
name]) # metrics.auc(frame_cell.c1,frame_cell['amp_B1+B2_012-01-02+0_norm_01B1+02B2_mean'])
|
|
|
|
if cell in cells_chosen:
|
|
areas_01_scatter[c] = 'black'
|
|
# areas_01[c] = 'black'
|
|
# embed()
|
|
diff_areas = np.array(areas_012) - np.array(areas_01)
|
|
return cvs, nonlin_area, diff_areas, areas_01_scatter, nonlin, areas_012_one-areas_01_one
|
|
|
|
|
|
def get_nonlin_scores(frame_cell):
|
|
score = sum_score(frame_cell)
|
|
score = frame_cell[val_nonlin_chapter4()]
|
|
score = nonlinval_core(frame_cell) # frame_cell['amp_B2_02_mean']+
|
|
score = val_new_core(frame_cell)
|
|
return score
|
|
|
|
def nonlinval_core(frame_cell):
|
|
return frame_cell[val_nonlin_chapter4()] / (frame_cell['amp_B1_01_mean'])
|
|
|
|
|
|
def val_nonlin_chapter4():
|
|
return 'amp_B1+B2_012_mean'
|
|
|
|
|
|
def fin_min_pos(c, frame_cell, name, x_pos):
|
|
nonlin = frame_cell[name].iloc[np.argmin(np.abs(
|
|
frame_cell.c1 - x_pos))] # metrics.auc(frame_cell.c1,frame_cell['amp_B1+B2_012-01-02+0_norm_01B1+02B2_mean'])
|
|
return nonlin
|
|
|
|
def plt_scatter_nonlin_all_main():
|
|
default_settings(column=2, length=2.3)
|
|
frame_names = [
|
|
'calc_ROC_contrasts-ROCmodel_contrasts1_diagonal1_FrF1rel_0.33_FrF2rel_0.67_C2_0.1_LenNrs_20_1Nrs_0.0001_LastNrs_0.1_len_25_nfft_32768_trialsnr_20_mult_minimum_1temporal',
|
|
'calc_ROC_contrasts-ROCmodel_contrasts1_diagonal1_FrF1rel_0.33_FrF2rel_0.67_C2_0.1_LenNrs_20_1Nrs_0.0001_LastNrs_0.1_len_25_nfft_32768_trialsnr_100_mult_minimum_1temporal',
|
|
'calc_ROC_contrasts-ROCmodel_contrasts1_diagonal1_FrF1rel_0.33_FrF2rel_0.67_C2_0.1_LenNrs_20_1Nrs_0.0001_LastNrs_0.1_len_25_nfft_32768_trialsnr_1000_mult_minimum_1temporal']
|
|
|
|
path = load_folder_name('calc_ROC') + '/' + frame_names[1] + '.csv'
|
|
path_ref = load_folder_name('calc_ROC') + '/' + 'calc_ROC_contrasts-ROCmodel_contrasts1_diagonal1_FrF1rel_0.33_FrF2rel_0.67_C2_0.1_C1_0.02_len_25_nfft_32768_trialsnr_20_mult_minimum_1temporal.csv'
|
|
frame_ref = pd.read_csv(path_ref)
|
|
frame_ref = frame_ref.sort_values(by='cv_0')
|
|
cm = plt.get_cmap("hsv")
|
|
cells_chosen = ['2013-01-08-aa-invivo-1', "2012-06-27-ah-invivo-1",
|
|
"2014-06-06-ac-invivo-1"] # '2012-06-27-an-invivo-1',
|
|
|
|
colr = [cm(float(i) / (len(frame_ref))) for i in range(len(frame_ref))]
|
|
|
|
fig, ax = plt.subplots(1,3)# figsize = (12,5.5)
|
|
|
|
x_pos = 0.02#'amp_B1+B2_012-01-02+0_norm_01B1+02B2_mean',
|
|
names = ['amp_B1+B2_012-01-02+0_norm_01B1_mean']#'amp_B1+B2_012-01-02+0_norm_01B1_mean',
|
|
|
|
for n, name in enumerate(names):
|
|
|
|
cvs, nonlin_area, diff_areas, areas_01_scatter, nonlin,areas_012_one = calc_areas(path, frame_ref, colr, name, x_pos,
|
|
cells_chosen)
|
|
|
|
#cvs, nonlin_area, diff_areas = plt_scatter_nonlin(x_pos, ax_scatter_nonlin, path, frame_ref, colr, ax_scatter, cells_chosen, ax_scatter_nonlin_sole, s = 15, name = name)
|
|
color = 'grey'
|
|
ax[0].scatter(cvs, diff_areas, color = color, s=15, clip_on = False)#color=colr,
|
|
ax[0].axhline(0,linestyle = '--',linewidth = 0.5, color = 'grey')
|
|
ax[0].set_xlabel('CV')
|
|
ax[0].set_xlim(0,1.1)
|
|
ax[0].set_ylabel(core_scatter_wfemale())
|
|
ax[1].scatter(cvs,nonlin_area,color = color, s = 15, clip_on = False)#color = colr,
|
|
ax[1].axhline(0, linestyle='--',linewidth = 0.5, color='grey')
|
|
ax[1].set_xlabel('CV')
|
|
ax[1].set_xlim(0,1.1)
|
|
ax[1].set_ylabel(peak_b1b2_name())
|
|
#ax[n, 3].scatter(cvs,diff_areas)
|
|
ax[2].set_xlabel(core_scatter_wfemale())
|
|
ax[2].set_ylabel(peak_b1b2_name())
|
|
corr = np.corrcoef(nonlin_area, diff_areas)[0][1]
|
|
|
|
corr, p_value = stats.pearsonr(nonlin_area, diff_areas)
|
|
label = pearson_label(corr, p_value, nonlin_area, n=True)
|
|
ax[2].text(1, 1.05, label, ha='right', transform=ax[2].transAxes)
|
|
|
|
ax[2].scatter(nonlin_area, diff_areas, color = color, s=15, clip_on=False)#color=colr,
|
|
#plt.title('Correlation = '+)
|
|
model = LinearRegression()
|
|
#corr_t
|
|
#embed()
|
|
#embed()
|
|
model.fit(nonlin_area.reshape((-1, 1)), diff_areas.reshape((-1, 1)))
|
|
slope = model.coef_
|
|
intercept = model.intercept_
|
|
|
|
ax[2].plot([0,np.max(nonlin_area)*1.05],[intercept,intercept+np.max(nonlin_area)*1.05*slope], color = 'grey', linewidth = 0.5)##embed()'Correlation='+str(np.round(corr,2))
|
|
#fig.tag(ax, xoffs=-3, yoffs=0.7, )
|
|
make_simple_tags(ax,xpos = -0.07, letters = ['A','B','C'])
|
|
plt.subplots_adjust(wspace = 0.85, hspace = 0.4, bottom = 0.21, right = 0.95)#, top = 0.6
|
|
save_visualization()
|
|
plt.show()
|
|
|
|
|
|
def core_scatter_wfemale():
|
|
return '$\mathrm{AUC_{Female}}-\mathrm{AUC_{NoFemale}}$ '
|
|
|
|
|
|
def peak_b1b2_name():
|
|
#return 'Peak Amplitude\n Intruder$\,+\,$Female [Hz]'
|
|
return 'Nonlinearity $A(\Delta \mathrm{f_{Sum}})$ [Hz]'
|
|
#A(|\Delta \mathrm{f_{Female}}| + |\Delta \mathrm{f_{Intruder}}|)
|
|
|
|
#def female_name():
|
|
#return '$$'
|
|
|
|
|
|
def core_decline_ROC(trial_nr = '20', absolut = True, short = True, pos = True):
|
|
#global frame_names
|
|
|
|
|
|
last_nrs = '0.1'
|
|
last_nrs = '1.0'
|
|
lastnr = '0.1'
|
|
frame_names = [
|
|
'calc_ROC_contrasts-ROCmodel_contrasts1_diagonal1_FrF1rel_0.33_FrF2rel_0.67_C2_0.1_LenNrs_20_1Nrs_0.0001_LastNrs_'+last_nrs+'_len_25_nfft_32768_trialsnr_'+trial_nr+'_mult_minimum_1temporal',
|
|
] # 'calc_ROC_contrasts-ROCmodel_contrasts1_diagonal1_FrF1rel_0.33_FrF2rel_0.67_C2_0.1_LenNrs_20_1Nrs_0.0001_LastNrs_0.1_len_25_nfft_32768_trialsnr_20_mult_minimum_1temporal',
|
|
|
|
combpos = 'B1+B2_diagonal31_FrF1rel_0.31_FrF2rel_0.69'
|
|
|
|
combpos = 'B1+B2_diagonal32_FrF1rel_0.32_FrF2rel_0.68'
|
|
combpos = 'B1+B2_diagonal33_FrF1rel_0.33_FrF2rel_0.67'
|
|
b_cond = b_cond_core()
|
|
combpos = b_cond+'_FrF1rel_0.3_FrF2rel_0.7'
|
|
combneg = 'vertical3_FrF1rel_1.02_FrF2rel_1.09'
|
|
|
|
|
|
|
|
combneg = 'vertical5_FrF1rel_0.8_FrF2rel_0.55'
|
|
combneg = 'vertical4_FrF1rel_0.8_FrF2rel_0.6'
|
|
combneg = 'vertical1_FrF1rel_1_FrF2rel_0.7'
|
|
#'calc_ROC_contrasts-ROCmodel_contrasts1_B1+B2_diagonal3_FrF1rel_0.3_FrF2rel_0.7_C2_0.1_LenNrs_20_1Nrs_0.0001_LastNrs_0.1_len_25_nfft_32768_trialsnr_20_absoluttemporal'
|
|
if not absolut:
|
|
if not short:
|
|
if pos:
|
|
frame_names = [
|
|
'calc_ROC_contrasts-ROCmodel_contrasts1_'+combpos+'_C2_0.1_LenNrs_50_1Nrs_0.0001_LastNrs_'+lastnr+'_len_25_nfft_32768_trialsnr_' + trial_nr + '_mult_minimum_1temporal']
|
|
else:
|
|
frame_names = [
|
|
'calc_ROC_contrasts-ROCmodel_contrasts1_'+combneg+'_C2_0.1_LenNrs_50_1Nrs_0.0001_LastNrs_'+lastnr+'_len_25_nfft_32768_trialsnr_' + trial_nr + '_mult_minimum_1temporal']
|
|
else:
|
|
if pos:
|
|
frame_names = [
|
|
'calc_ROC_contrasts-ROCmodel_contrasts1_'+combpos+'_C2_0.1_LenNrs_20_1Nrs_0.0001_LastNrs_'+lastnr+'_len_25_nfft_32768_trialsnr_' + trial_nr + '_mult_minimum_1temporal']
|
|
else:
|
|
frame_names = [
|
|
'calc_ROC_contrasts-ROCmodel_contrasts1_'+combneg+'_C2_0.1_LenNrs_20_1Nrs_0.0001_LastNrs_'+lastnr+'_len_25_nfft_32768_trialsnr_' + trial_nr + '_mult_minimum_1temporal']
|
|
|
|
else:
|
|
if not short:
|
|
if pos:
|
|
frame_names = ['calc_ROC_contrasts-ROCmodel_contrasts1_'+combpos+'_C2_0.1_LenNrs_50_1Nrs_0.0001_LastNrs_'+lastnr+'_len_25_nfft_32768_trialsnr_'+trial_nr+'_absoluttemporal']
|
|
frame_names = ['calc_ROC_contrasts-ROCmodel_contrasts1_'+combpos+'_C2_0.1_LenNrs_20_1Nrs_0.0001_LastNrs_'+lastnr+'_len_25_nfft_32768_trialsnr_'+trial_nr+'_absoluttemporal']
|
|
else:
|
|
frame_names = ['calc_ROC_contrasts-ROCmodel_contrasts1_'+combneg+'_C2_0.1_LenNrs_50_1Nrs_0.0001_LastNrs_'+lastnr+'_len_25_nfft_32768_trialsnr_'+trial_nr+'_absoluttemporal']
|
|
else:
|
|
if pos:
|
|
frame_names = [
|
|
'calc_ROC_contrasts-ROCmodel_contrasts1_'+combpos+'_C2_0.1_LenNrs_20_1Nrs_0.0001_LastNrs_'+lastnr+'_len_25_nfft_32768_trialsnr_'+trial_nr+'_absoluttemporal']
|
|
else:
|
|
frame_names = [
|
|
'calc_ROC_contrasts-ROCmodel_contrasts1_'+combneg+'_C2_0.1_LenNrs_20_1Nrs_0.0001_LastNrs_'+lastnr+'_len_25_nfft_32768_trialsnr_'+trial_nr+'_absoluttemporal']
|
|
|
|
return frame_names, trial_nr
|
|
|
|
|
|
def b_cond_core():
|
|
return 'B1+B2_diagonal3'
|
|
|
|
|
|
def calc_right_core_nonlin(transient, steps_name, T, steps, results, data_mat, position, dt, fr, add_name=''):
|
|
c = [[]] * 4
|
|
phi = [[]] * 4
|
|
# print(steps)
|
|
c0_tmp = 0.0
|
|
a_tmp = np.zeros(4)
|
|
b_tmp = np.zeros(4)
|
|
|
|
# Calculate a and b for groundmode and higher harmonics
|
|
for j in range(4):
|
|
# if steps_name
|
|
|
|
freq_here = (j + 1) / (T)
|
|
time_here_all = np.arange(transient + steps) * dt
|
|
# also hier gibts die option den anfang für die trans rauszunehmen, kann aber auch Null sein
|
|
if j < 1:
|
|
c0_tmp = np.mean(data_mat[transient:transient + len(time_here_all)])
|
|
# embed()
|
|
try:
|
|
a_tmp[j] = np.mean(data_mat[transient:len(time_here_all)] * np.cos(
|
|
2.0 * np.pi * time_here_all[transient:len(time_here_all)] * freq_here))
|
|
except:
|
|
print('a tmp problems')
|
|
embed()
|
|
b_tmp[j] = np.mean(data_mat[transient:len(time_here_all)] * np.sin(
|
|
2.0 * np.pi * time_here_all[transient:len(time_here_all)] * freq_here))
|
|
# embed()
|
|
# Average
|
|
c0 = c0_tmp # / (steps)
|
|
a = a_tmp * 2.0 # / (steps)
|
|
b = b_tmp * 2.0 # / (steps)
|
|
for k in range(4):
|
|
c[k] = np.sqrt(a[k] ** 2 + b[k] ** 2)
|
|
phi[k] = np.arctan(a[k] / b[k])
|
|
test = False
|
|
if test:
|
|
c0, c, phi = average_fft(a_tmp, b_tmp, c, c0_tmp, phi, s)
|
|
|
|
for c_nr in range(len(c)):
|
|
try:
|
|
results.loc[position, 'c_' + str(c_nr) + steps_name + add_name] = c[c_nr]
|
|
except:
|
|
print('c problem')
|
|
embed()
|
|
for c_nr in range(len(c)):
|
|
results.loc[position, 'phi_' + str(c_nr) + steps_name + add_name] = phi[c_nr]
|
|
# embed()
|
|
results.loc[position, 'c0' + steps_name + add_name] = c0
|
|
return results
|
|
|
|
|
|
def average_fft(a_tmp, b_tmp, c, c0_tmp, phi, s, steps = 1):
|
|
c0 = c0_tmp / (1.0 * steps)#(single_period)
|
|
a = a_tmp * 2.0 / (1.0 * steps)#/ (single_period)
|
|
b = b_tmp * 2.0 / (1.0 * steps) # / (single_period)
|
|
for k in range(4):
|
|
c[s, k] = np.sqrt(a[k] ** 2 + b[k] ** 2)
|
|
phi[s, k] = np.arctan(a[k] / b[k])
|
|
return c0, c, phi
|
|
|
|
|
|
def load_savedir(level = 0, individual_tag ='', frame = [], save = False, csv = False, pkl = False, emb=False):
|
|
# ich kann das einmal als übersichtsfile haben auf level 0
|
|
# als variierendes file auf level 1
|
|
# und vielleich ein example file auf level 1 ziehen damit man eine versinosübersicht hat
|
|
|
|
if 'miniconda3' in inspect.stack()[1][1]:
|
|
initial_function = \
|
|
inspect.stack()[-16][1].split('/')[-1].split('.')[0]
|
|
last_function = inspect.stack()[-16][4][0].split('(')[0].strip()
|
|
# show = True
|
|
else:
|
|
initial_function = \
|
|
inspect.stack()[-1][1].split('\\')[-1].split('.')[0]
|
|
last_function = inspect.stack()[-1][4][0].split('(')[0].strip()
|
|
|
|
list_name = []
|
|
next = True
|
|
|
|
for i in range(len(inspect.stack())):
|
|
save_name = inspect.stack()[i][3]
|
|
# print(save_name)
|
|
list_name.append(save_name)
|
|
|
|
|
|
pos = -2#np.where(np.array(list_name) == '<module>')[0][0]-1
|
|
last_function = list_name[pos]
|
|
if emb:
|
|
embed()
|
|
# show = True
|
|
#embed()
|
|
print(initial_function)
|
|
# if initial_function != 'plt_ROC':
|
|
# embed()
|
|
# embed()
|
|
t1 = time.time()
|
|
|
|
data_extra_fold = ''#'_data'
|
|
|
|
|
|
if level == 0: # Null für die neuen
|
|
#auf dem Nuller Level muss man das mit dem Funktionsnamen machen
|
|
# aber das sollte man selten verwenden
|
|
save_name = initial_function + data_extra_fold+'/' + last_function + '-'
|
|
elif level == 1: # 1 für die alten
|
|
# auf dem Nuller Level muss man das mit dem Funktionsnamen machen
|
|
# aber das sollte man selten verwenden
|
|
save_name = initial_function + data_extra_fold+'/'
|
|
elif level == 2:
|
|
# am besten tut man die Basic functions auf das 1er Level
|
|
# die haben einen eigenständigen Namen und sind in dem Funktions Ordner
|
|
save_name = initial_function + data_extra_fold+'/' + last_function + '/'
|
|
elif level == 3:
|
|
# und die Zellen etc Sachen bzw die Versions Sachen sind dann im nächsten Ordner
|
|
if not os.path.isdir(initial_function + + data_extra_fold+'/' + last_function +'/cells'):
|
|
os.mkdir(initial_function + data_extra_fold+'/' + last_function +'/cells')
|
|
save_name = initial_function + data_extra_fold+'/' + last_function +'/cells/'
|
|
try:
|
|
if save:
|
|
if csv:
|
|
frame.to_csv(save_name+ individual_tag +'.csv',index=False)
|
|
if pkl:
|
|
frame.to_pickle(save_name+ individual_tag + '.pkl')
|
|
except:
|
|
print('save problem')
|
|
embed()
|
|
#if png:
|
|
# plt.savefig(initial_function + '_detailed/' + last_function + individual_tag + add + '.png')
|
|
#if pdf:
|
|
# plt.savefig(initial_function + '_detailed/' + last_function + individual_tag + add + '.pdf')
|
|
#if jpg:
|
|
# plt.savefig(initial_function + '_detailed/' + last_function + individual_tag + add + '.jpg')
|
|
|
|
t2 = time.time() - t1
|
|
print(f'save time {t2}')
|
|
return save_name
|
|
|
|
|
|
def redo_on_cell_level(redo_level, append_cells, redo, beat_results, cell, counter_continued, cell_name = 'dataset', range_orig1 = [], range_orig2 = []):
|
|
# Function to decide if which of the cells frequencies to redo
|
|
# Input
|
|
# redo - if True then do everything from scetch else only not yet don
|
|
# append_cells - this variables has the information if there is anything saved for this variant name
|
|
# if true then there is a file with the desired name else not
|
|
# redo_level - celllevel: redo for each cell not yet saved
|
|
# eodlevel: redo for each frequency
|
|
# beat_results - preallocated results array
|
|
# cell - the cell you check for if its in the saved sample
|
|
# counter_continued - count how many cells are already there
|
|
|
|
# output
|
|
# do_thiscell - if true then do this cell new
|
|
# do_thiseod - of true do this frequency new
|
|
combs = []
|
|
#embed()'celllevel_clusters'
|
|
if 'celllevel' in redo_level:
|
|
# decide if cell in sample or not
|
|
if (append_cells == True) and (redo == False):
|
|
if cell in np.unique(beat_results[cell_name]):
|
|
if 'clusters' in redo_level:
|
|
f1_present = np.unique(beat_results[beat_results[cell_name] == cell].f1)#].f1
|
|
f2_present = np.unique(beat_results[beat_results[cell_name] == cell].f2) # ].f1
|
|
|
|
len_required = len(range_orig1)*len(range_orig2)
|
|
len_present = len(f1_present)*len(f2_present)
|
|
# ich subtrahiere noch die kontrolle mit 10 Hz,
|
|
# also ich schau erst ob das wirklich nur eine Kontrolle ist oder doch nicht
|
|
if (10 not in list(map(int, range_orig1))) & (10 not in list(map(int, range_orig2))):
|
|
len_remaining = len_present - (len(f1_present) + len(f2_present))
|
|
beat_cell = beat_results[beat_results[cell_name] == cell]
|
|
beat_corrected = beat_cell[(beat_cell['f2'] != 10) & (beat_cell['f1'] != 10)]
|
|
combs_all = beat_corrected[['f2', 'f1']]
|
|
|
|
elif (10 not in range_orig1):
|
|
len_remaining = len_present - (len(f1_present))
|
|
beat_cell = beat_results[beat_results[cell_name] == cell]
|
|
beat_corrected = beat_cell[beat_cell['f1'] != 10]
|
|
combs_all = beat_corrected[['f2', 'f1']]
|
|
elif (10 not in range_orig2):
|
|
len_remaining = len_present - (len(f2_present))
|
|
beat_cell = beat_results[beat_results[cell_name] == cell]
|
|
beat_corrected = beat_cell[beat_cell['f2'] != 10]
|
|
combs_all = beat_corrected[['f2', 'f1']]
|
|
else:
|
|
len_remaining = len_present
|
|
combs_all = beat_results[beat_results[cell_name] == cell][['f2', 'f1']]
|
|
#embed()
|
|
# wir können das mit unique machen weil wir hatten ja davor den range chek
|
|
combs = np.unique(combs_all, axis=0)
|
|
#embed()
|
|
if len_remaining != len_required:
|
|
do_thiscell = True
|
|
do_thiseod = True
|
|
else:
|
|
do_thiscell = False
|
|
do_thiseod = False
|
|
counter_continued += 1
|
|
print('Nr ' + str(counter_continued) + 'already there')
|
|
else:
|
|
do_thiscell = False
|
|
do_thiseod = False
|
|
counter_continued += 1
|
|
print('Nr ' + str(counter_continued) + 'already there')
|
|
else:
|
|
do_thiscell = True
|
|
do_thiseod = True
|
|
# just do all cells irrespective if they are in any files or not
|
|
else:
|
|
do_thiscell = True
|
|
do_thiseod = True
|
|
else:
|
|
do_thiscell = True
|
|
do_thiseod = True
|
|
return do_thiscell, do_thiseod, counter_continued, combs
|
|
|
|
|
|
def redo_or_append(save_name, redo=False, name_orig = []):
|
|
# Function to decide if we just do the whole population new (redo = True)
|
|
# or instead load the already saved partial population and only append the
|
|
# not yet recorded cells
|
|
# input
|
|
# save_name - where you usually save this consetation
|
|
# redo - if True then delete code_old and resave, if False append new cells
|
|
# output
|
|
# beatresults - preallocated array
|
|
# addcell - add cells or redo
|
|
|
|
# if we dont redo but continue saving
|
|
if (redo == False):
|
|
if len(name_orig)<1:
|
|
#embed()#folder_name('calc_model')+'/modell_all_cell_'
|
|
name = save_name + '.pkl'
|
|
#name1 = folder_name('calc_model')+'/modell_all_cell_' + save_name + '.pkl'
|
|
# if the datataname exists add new cells to the existing
|
|
if os.path.exists(name):
|
|
preallocated = pd.read_pickle(name)
|
|
position = len(preallocated)
|
|
if len(preallocated) > 0:
|
|
append_cells = True
|
|
else:
|
|
append_cells = False
|
|
# preallocated = []
|
|
preallocated = pd.DataFrame()
|
|
position = 0
|
|
else:
|
|
# preallocated = []
|
|
preallocated = pd.DataFrame()
|
|
position = 0
|
|
append_cells = False
|
|
|
|
else:
|
|
if os.path.exists(name_orig):
|
|
preallocated = pd.read_pickle(name_orig)
|
|
position = len(preallocated)
|
|
append_cells = True
|
|
else:
|
|
# preallocated = []
|
|
preallocated = pd.DataFrame()
|
|
position = 0
|
|
append_cells = False
|
|
# else preallocate an empty array
|
|
|
|
|
|
else:
|
|
# if we want to redo the whole simulation
|
|
# preallocated = []
|
|
preallocated = pd.DataFrame()
|
|
position = 0
|
|
append_cells = False
|
|
# embed()
|
|
return append_cells, preallocated, position
|
|
|
|
|
|
def calc_nonlinearity_contrasts(transient_s=0, cells=[], n=1, adapt_offset='adaptoffsetallall2', stimulus_length_orig=2,
|
|
freq_type='_beat_', single_train='', fft='fft', dev='original', trials_nr=150,
|
|
cell_start=13, zeros='zeros', eod_fr_give='no',
|
|
a_f1s=[0, 0.005, 0.01, 0.05, 0.1, 0.2, ],a_f2s = [0], a_frs=[1], add_half=0, show=False,
|
|
nfft=int(2 ** 15), beat='', nfft_for_morph=4096 * 4, gain=1, fish_jammer='Alepto',
|
|
redo_level='celllevel', us_name='', adapt_type=''):
|
|
#adapt = ''_adaptMean_
|
|
stimulus_length = stimulus_length_orig
|
|
#single_train = 'single_train'
|
|
model_cells = pd.read_csv(load_folder_name('calc_model_core') + "/models_big_fit_d_right.csv")
|
|
|
|
position = 0
|
|
cell_nrs = [] #
|
|
cell_nrs = [11,22,5,13, 12, 6, 15, 20,4,7,26,23]
|
|
cell_nrs = [11,22,5,13, 12, 6, 15, 20,4,7,26,23]
|
|
#cells = []
|
|
if len(cells)< 1:
|
|
frame = pd.read_pickle('cv.pkl')
|
|
frame = frame.sort_values(by='cv')
|
|
cells = frame.cell#np.array(model_cells['cell'])
|
|
#embed()
|
|
#cell_nrs = []
|
|
if len(cell_nrs)< 1:
|
|
cell_nrs = range(len(model_cells))
|
|
#results = pd.DataFrame()
|
|
|
|
titles_amp = ['base eodf', 'baseline to Zero', ]
|
|
#if a_fr == 0:
|
|
# single_waves = ['_SeveralWave_']
|
|
#else:
|
|
# single_waves = ['_SingleWave_'] # , '_SeveralWave_', ]
|
|
|
|
freqs2 = [0]#freqs1#[0]#
|
|
#adapt = '_adaptMean_'
|
|
single_waves = ['_SingleWave_']
|
|
a_f2s = [0]#[0.03]# [0] # , 0,0.2
|
|
# else:
|
|
a_f2s = [np.max(a_f1s)]
|
|
for a, a_fr in enumerate(a_frs):
|
|
|
|
####### VARY HERE
|
|
for single_wave in single_waves:
|
|
#if single_wave == '_SingleWave_':
|
|
|
|
for a_f2 in a_f2s:
|
|
try:
|
|
save_name = save_name_nonlinearity(add_half,a_f2s =a_f2s, freqs2 = freqs2, a_f1_end = a_f1s[-1],transient_s = transient_s, n = n, adapt_offset = adapt_offset, freq_type = freq_type, adapt = adapt_type, stimulus_length = stimulus_length, fft = fft, dev = dev, trials_nr = trials_nr, a_fr = a_fr, zeros = zeros)
|
|
except:
|
|
print('save name problem')
|
|
embed()
|
|
#embed()
|
|
print(save_name)
|
|
redo = False
|
|
save_dir = load_savedir(level=1)
|
|
append_cells, results, position = redo_or_append(
|
|
save_dir+'modell_all_cell_'+save_name, redo=redo,name_orig = save_name)
|
|
counter_continued = 0
|
|
#embed()
|
|
for cell in cells:#cell_nr in cell_nrs:
|
|
|
|
# eod_fr, eod_fj, eod_fe = frequency_choice(model_params, step1, step2, three_waves, a_fj, step_type=step_type,
|
|
# symmetry=symmetry, start_mult_jammer=start_mult_jammer,
|
|
# start_mult_emitter=start_mult_emitter, start_f1=start_f1, end_f1=end_f1,
|
|
# start_f2=start_f2, end_f2=end_f2)
|
|
|
|
# embed()
|
|
|
|
# sachen die ich variieren will
|
|
###########################################
|
|
|
|
|
|
#fig, ax = plt.subplots(len(cell_nrs), 1, figsize=(12, 5.5)) # sharex=True,
|
|
|
|
#embed()
|
|
try:
|
|
model_cells_here = model_cells[model_cells['cell'] == cell]
|
|
model_params = model_cells_here.iloc[0]
|
|
except:
|
|
print('single positional index doesnt exists')
|
|
embed()
|
|
eod_fr = model_params['EODf']
|
|
offset = model_params.pop('v_offset')
|
|
cell = model_params.pop('cell')
|
|
|
|
print(cell)
|
|
do_this_cell_orig, do_thiseod, counter_continued,combs_all = redo_on_cell_level(
|
|
redo_level, append_cells, redo, results, cell, counter_continued,cell_name = 'cell')
|
|
#do_this_cell = True
|
|
|
|
if type(add_half) == str:
|
|
# beat1 = fr / 2 + add_half
|
|
freqs1_len = freqs_array(add_half, eod_fr)
|
|
else:
|
|
freqs1_len= [0]
|
|
if do_this_cell_orig == False:
|
|
results_cell = results[results['cell'] == cell]
|
|
if len(results_cell) == len(a_f1s)*len(freqs1_len):
|
|
do_this_cell_now = False
|
|
else:
|
|
do_this_cell_now = True
|
|
else:
|
|
do_this_cell_now = True
|
|
if do_this_cell_now:
|
|
f1 = 0
|
|
f2 = 0
|
|
sampling_factor = ''
|
|
|
|
phaseshift_fr = 0
|
|
cell_recording = ''
|
|
mimick = 'no'
|
|
|
|
fish_morph_harmonics_var = 'harmonic'
|
|
fish_emitter = 'Alepto' # ['Sternarchella', 'Sternopygus']
|
|
fish_receiver = 'Alepto' #
|
|
phase_right = '_phaseright_'
|
|
|
|
constant_reduction = ''
|
|
# a_fr = 1
|
|
|
|
corr_nr = 35
|
|
lower_tol = 0.995
|
|
upper_tol = 1.005
|
|
upper_tol_hz = 1
|
|
SAM = '' # ,
|
|
damping = 0.45 # 0.65,0.2,0.5,0.2,0.6,0.45,0.6,0.35
|
|
damping_type = ''
|
|
exponential = ''
|
|
# embed()
|
|
dent_tau_change = 1
|
|
# in case you want a different sampling here we can adujust
|
|
time_array, sampling, deltat = deltat_choice(model_params, sampling_factor, eod_fr,
|
|
stimulus_length)
|
|
|
|
# generate the eod_fish_r in the four mimick variants (copy, thunderfish, mimick, just sinus)
|
|
eod_fish_r, deltat, eod_fr, time_array = eod_fish_r_generation(time_array, eod_fr, a_fr,
|
|
stimulus_length, phaseshift_fr,
|
|
cell_recording, zeros, mimick,
|
|
sampling, fish_receiver, deltat,
|
|
nfft, nfft_for_morph,
|
|
fish_morph_harmonics_var=fish_morph_harmonics_var,
|
|
beat=beat)
|
|
|
|
sampling = 1 / deltat
|
|
multiple = 0
|
|
slope = 0
|
|
add = 0
|
|
plus = 0
|
|
sig_val = (7, 1)
|
|
variant = 'sinz'
|
|
if exponential == '':
|
|
v_exp = 1
|
|
exp_tau = 0.001
|
|
# prepare for adapting offset due to baseline modification
|
|
|
|
baseline_with_wave_damping, baseline_without_wave = prepare_baseline_array(time_array, eod_fr,
|
|
nfft_for_morph,
|
|
phaseshift_fr,
|
|
mimick, zeros,
|
|
cell_recording,
|
|
sampling,
|
|
stimulus_length,
|
|
fish_receiver,
|
|
deltat, nfft,
|
|
damping_type,
|
|
damping, us_name,
|
|
gain, beat=beat,
|
|
fish_morph_harmonics_var=fish_morph_harmonics_var)
|
|
|
|
# now we are ready for the final modeling part in this function
|
|
# embed()
|
|
trials_nr_base = 10
|
|
rate_adapted = [[]] * trials_nr_base
|
|
rate_baseline_before = [[]] * trials_nr_base
|
|
rate_baseline_after = [[]] * trials_nr_base
|
|
spikes = [[]] * trials_nr_base
|
|
v_dent_output = [[]] * trials_nr_base
|
|
stimulus_altered = [[]] * trials_nr_base
|
|
offset_new = [[]] * trials_nr_base
|
|
v_mem_output = [[]] * trials_nr_base
|
|
spike_adapted = [[]] * trials_nr_base
|
|
stimuli = []
|
|
|
|
#stimulus_length_base = 10
|
|
#embed()
|
|
for t in range(trials_nr_base):
|
|
# get the baseline properties here
|
|
# baseline_after,spike_adapted,rate_adapted, rate_baseline_before, rate_baseline_after, np.array(spike_times), stimulus_power, v_dent_output[int(0.05 / deltat):-1], offset, v_mem_output
|
|
if a_fr == 0:
|
|
power_here = 'sinz'+'_'+zeros
|
|
else:
|
|
power_here = 'sinz'
|
|
#embed()
|
|
# todo: evnetuell das mit dem zeros am ende dazu!
|
|
cvs, adapt_output, baseline_after_b, _, rate_adapted_b, rate_baseline_before_b, rate_baseline_after_b, \
|
|
spike_adapted[t], _, _, offset_new, _,noise_final = simulate(cell, offset, eod_fish_r, f1,
|
|
n, power_here,
|
|
adapt_offset=adapt_offset,
|
|
adapt_type=adapt_type, add=add,
|
|
alpha=alpha,
|
|
lower_tol=lower_tol,
|
|
upper_tol=upper_tol,
|
|
v_exp=v_exp, exp_tau=exp_tau,
|
|
dent_tau_change=dent_tau_change,
|
|
alter_taus=constant_reduction,
|
|
exponential=exponential,
|
|
exponential_mult=1,
|
|
exponential_plus=plus,
|
|
exponential_slope=slope,
|
|
sig_val=sig_val,
|
|
upper_tol_hz=upper_tol_hz,
|
|
j=f2, deltat=deltat, t=t,
|
|
**model_params)
|
|
|
|
|
|
# print(offset_new)
|
|
# print(offset)
|
|
# HERE WE GET THE OFFSET ONLY ONCE
|
|
if t == 0:
|
|
print('first Baseline '+str(rate_baseline_before_b))
|
|
# here we record the changes in the offset due to the adaptation
|
|
change_offset = offset - offset_new
|
|
# and we subsequently reset the offset to be the new adapted for all subsequent trials
|
|
offset = offset_new * 1
|
|
|
|
#embed()
|
|
#base_cut, mat_base = find_base_fr(spike_adapted, deltat, stimulus_length, time_array)
|
|
|
|
#fr = np.mean(base_cut)
|
|
#for t in range(len(spike_adapted)):
|
|
# print(len(spike_adapted[t])/stimulus_length)
|
|
|
|
###########################################
|
|
# Baseline Characteristics
|
|
#embed()
|
|
mean_isi, std_isi, fr, isi, cv0, ser0, ser_first0,ser_sum = calc_baseline_char(spike_adapted,stimulus_length,trials_nr_base)
|
|
print('fr base '+str(fr))
|
|
#embed()
|
|
fundamental = [[]]*len(a_f1s)
|
|
h1 = [[]]*len(a_f1s)
|
|
h2 = [[]] * len(a_f1s)
|
|
h3 = [[]] * len(a_f1s)
|
|
freqs1 = get_freqs_contrasts(a_fr, add_half, eod_fr, fr)
|
|
#freq1 = [eod_fr / 2]
|
|
|
|
for ff, freq1 in enumerate(freqs1):
|
|
freq1 = [freq1]
|
|
titles = ['']
|
|
#freqs2 = [0] * len(freqs1)
|
|
sampling_rate = 1 / deltat
|
|
|
|
for fff, freq2 in enumerate(freqs2):#
|
|
freq2 = [freq2[fff]]
|
|
# Array Fouriercoefficients and phase, columns for groundmode and higher harmonics (4 total)
|
|
c = np.zeros((len(a_f1s), 4))
|
|
phi = np.zeros((len(a_f1s), 4))
|
|
# Array for proportional lines
|
|
function1 = np.zeros(len(a_f1s))
|
|
function2 = np.zeros(len(a_f1s))
|
|
function3 = np.zeros(len(a_f1s))
|
|
function4 = np.zeros(len(a_f1s))
|
|
if 'f1' in results.keys():
|
|
results_f = results[results['f1'] == freq1[0]]
|
|
else:
|
|
results_f = results#[results['f1'] == freq1[0]]
|
|
#embed()
|
|
for aa, a_f1 in enumerate(a_f1s):
|
|
if do_this_cell_orig:
|
|
do_af1 = True
|
|
else:
|
|
if np.round(a_f1,6) not in np.array(np.round(results_f.a_f1,6)):
|
|
do_af1 = True
|
|
else:
|
|
do_af1 = False
|
|
print('f1_'+str(freq1)+'_af1_'+str(a_f1))
|
|
#results = results.drop(results.index[-6::])
|
|
#embed()
|
|
if do_af1:
|
|
results, position = calc_single_af_nonlin(transient_s, freq_type, ser0, single_train, dev, fft, a_fr, trials_nr, results, nfft, damping_type, gain,
|
|
save_name, cvs, position, cv0, fr, cell,
|
|
sampling_rate, model_params, n,
|
|
dent_tau_change, constant_reduction,
|
|
exponential, plus,
|
|
slope, add,
|
|
deltat, alpha,
|
|
t, lower_tol,
|
|
upper_tol,
|
|
v_exp,
|
|
exp_tau, f2,
|
|
baseline_with_wave_damping,
|
|
baseline_without_wave, fish_jammer, freq2,
|
|
damping, us_name, a_f2, eod_fish_r, SAM,
|
|
aa, offset, freq1, eod_fr, phase_right,
|
|
a_f1, phaseshift_fr, nfft_for_morph,
|
|
|
|
cell_recording,
|
|
fish_morph_harmonics_var, time_array, mimick,
|
|
fish_emitter,
|
|
f1, sampling, stimulus_length, adapt_type = adapt_type)
|
|
|
|
|
|
def get_freqs_contrasts(a_fr, add_half, eod_fr, fr):
|
|
if a_fr == 1: # das ist fals wir einen freq scan haben
|
|
# embed()
|
|
if type(add_half) == str:
|
|
# beat1 = fr / 2 + add_half
|
|
freqs1 = freqs_array(add_half, eod_fr)
|
|
|
|
else:
|
|
beat1 = fr / 2 + add_half
|
|
freqs1 = [eod_fr - beat1]
|
|
else:
|
|
freqs1 = [fr / 2 + add_half]
|
|
# freqs1 = [eod_fr - beat1]
|
|
return freqs1
|
|
|
|
|
|
def freqs_array(add_half, eod_fr):
|
|
from_val = add_half.split('frange_from_')[1].split('_to')[0]
|
|
to_val = add_half.split('to_')[1].split('_in')[0]
|
|
in_step = add_half.split('in_')[1].split('_')[0] # frange_from_0_to_400_in_1
|
|
freqs1 = np.arange(eod_fr + float(from_val), eod_fr + float(to_val), float(in_step))
|
|
return freqs1
|
|
|
|
|
|
def calc_single_af_nonlin(transient_s, freq_type, ser0, single_train, dev, fft, a_fr, trials_nr, results, nfft, damping_type, gain,save_name, cvs, position, cv0, fr, cell, sampling_rate, model_params, n, dent_tau_change,constant_reduction,exponential, plus,
|
|
slope, add,
|
|
deltat, alpha,
|
|
t, lower_tol,
|
|
upper_tol,
|
|
v_exp,
|
|
exp_tau, f2,
|
|
baseline_with_wave_damping,
|
|
baseline_without_wave,fish_jammer, freq2, damping, us_name,a_f2, eod_fish_r, SAM, aa, offset, freq1, eod_fr, phase_right, a_f1, phaseshift_fr,nfft_for_morph,
|
|
cell_recording,
|
|
fish_morph_harmonics_var, time_array, mimick,
|
|
fish_emitter,
|
|
f1, sampling, stimulus_length,adapt_type = '',adapt_offset = ''):
|
|
print('af1_nr ' + str(aa) + ' offset ' + str(offset))
|
|
|
|
# cv1 = np.std(frate) / np.mean(frate)
|
|
# embed()
|
|
|
|
fs = 8
|
|
# for fff, freq2 in enumerate(freqs2):
|
|
# freq2 = [freq2]
|
|
|
|
# time_var = time.time()
|
|
beat1 = freq1 - eod_fr
|
|
|
|
phaseshift_f1, phaseshift_f2 = get_phaseshifts(a_f1, a_f2, phase_right, phaseshift_fr)
|
|
eod_fish1, time_fish_e = eod_fish_e_generation(time_array, a_f1, freq1, f1, nfft_for_morph, phaseshift_f1,
|
|
cell_recording, fish_morph_harmonics_var, 'zeros', mimick, fish_emitter,
|
|
sampling, stimulus_length, thistype='emitter')
|
|
eod_fish2, time_fish_j = eod_fish_e_generation(time_array, a_f2, freq2, f2, nfft_for_morph, phaseshift_f2,
|
|
cell_recording, fish_morph_harmonics_var, 'zeros', mimick, fish_jammer,
|
|
sampling, stimulus_length, thistype='jammer')
|
|
|
|
eod_stimulus = eod_fish1 + eod_fish2
|
|
|
|
t1 = time.time()
|
|
rate_adapted = [[]] * trials_nr
|
|
rate_baseline_before = [[]] * trials_nr
|
|
rate_baseline_after = [[]] * trials_nr
|
|
spikes = [[]] * trials_nr
|
|
v_dent_output = [[]] * trials_nr
|
|
stimulus_altered = [[]] * trials_nr
|
|
offset_new = [[]] * trials_nr
|
|
v_mem_output = [[]] * trials_nr
|
|
spike_adapted = [[]] * trials_nr
|
|
for t in range(trials_nr):
|
|
stimulus, eod_fish_sam = create_stimulus_SAM(SAM, eod_stimulus, eod_fish_r, freq1, f1,
|
|
eod_fr,
|
|
time_array, a_f1, eod_fj=freq2, j=f2,
|
|
a_fj=a_f2)
|
|
|
|
stimulus_orig = stimulus * 1
|
|
|
|
# damping variants
|
|
std_dump, max_dump, range_dump, stimulus, damping_output = all_damping_variants(stimulus, time_array,
|
|
damping_type, eod_fr, gain,
|
|
damping, us_name, plot=False,
|
|
std_dump=0, max_dump=0,
|
|
range_dump=0)
|
|
|
|
#stimuli.append(stimulus)
|
|
# ok ich glaube das passt hier weil hier kein adapt drin ist, man könnte auch überall die gleiche power function rein machen
|
|
|
|
# WIR BRAUCHEN KEIN ADAPT HIER DAS HABEN WIR SCHON BEI DER BASELIN GEMACHT
|
|
adapt_offset_here = 'no'
|
|
#adapt_offset_here = adapt_offset
|
|
# also entweder so oder man kann adapt anlassen und einen anderen sinz machen
|
|
# if a_fr == 0:
|
|
# power_here = zeros
|
|
# else:
|
|
# hier muss das trotzdem sinz bleiben weil das das sonst nicht rectified!
|
|
if a_fr == 0:
|
|
power_here = 'sinz' + '_' + zeros
|
|
else:
|
|
power_here = 'sinz'
|
|
|
|
_, adapt_output, baseline_after, _, _, _, \
|
|
_, spikes[t], \
|
|
_, \
|
|
_, offset_new, _,noise_final = simulate(cell, offset, stimulus, f1, n, power_here,
|
|
adapt_offset=adapt_offset_here, adapt_type=adapt_type, add=add,
|
|
alpha=alpha, lower_tol=lower_tol, upper_tol=upper_tol, v_exp=v_exp,
|
|
exp_tau=exp_tau, dent_tau_change=dent_tau_change,
|
|
alter_taus=constant_reduction, exponential=exponential,
|
|
exponential_mult=1, exponential_plus=plus, exponential_slope=slope,
|
|
j=f2, deltat=deltat, t=t, **model_params)
|
|
# .astype(np.uint8)
|
|
#embed()
|
|
|
|
#embed()
|
|
|
|
fr1 = len(np.concatenate(spikes)) / (stimulus_length * trials_nr)
|
|
mean_isi, std_isi, fr1, isi, cv1, ser1, ser_first_stim, ser_sum_stim = calc_baseline_char(spikes, stimulus_length, trials_nr)
|
|
print('fr stim' + str(fr1))
|
|
# frate, isis_diff = ISI_frequency(time_array, spike_adapted[0], fill=0.0)
|
|
#isi = np.diff(spikes[0])
|
|
#cv1 = np.std(isi) / np.mean(isi)
|
|
#ser1,ser_first,sum_corr = calc_serial(isi)
|
|
##################
|
|
# hier das mittel der psds
|
|
# hier noch das psd einer gemittelten rate
|
|
|
|
##################
|
|
# hier das mittel der psds
|
|
t2 = time.time()
|
|
print('model' + str(t2 - t1))
|
|
|
|
t2 = time.time()
|
|
# embed()
|
|
|
|
# embed()#v_mem_output[t]#spikes_mat
|
|
|
|
if fft == 'psd':
|
|
spikes_mat = [[]] * len(spikes)
|
|
pp = [[]] * len(spikes)
|
|
for s in range(len(spikes)):
|
|
spikes_mat[s] = cr_spikes_mat(spikes[s], 1 / deltat,
|
|
int(stimulus_length * 1 / deltat))
|
|
|
|
for s in range(len(spikes)):
|
|
pp[s], f = ml.psd(spikes_mat[s] - np.mean(spikes_mat[s]), Fs=1 / deltat,
|
|
NFFT=nfft,
|
|
noverlap=nfft // 2)
|
|
pp_mean = np.mean(pp, axis=0)
|
|
names = peaks_1d(fr, a_fr, beat1, freq1)
|
|
results = find_peaks_power(names, f, pp_mean, '_original', position, results)
|
|
t2 = time.time()
|
|
print('psd' + str(t2 - t1))
|
|
elif 'fft' in fft:
|
|
# embed()
|
|
# c = np.zeros((len(stimulus_times), 4))
|
|
# phi = np.zeros((len(stimulus_times), 4))
|
|
|
|
# dev = 'dev'
|
|
|
|
test = False
|
|
if test:
|
|
test_spikes()
|
|
spikes_here = np.concatenate(spikes)
|
|
mat_orig, time2, samp2 = calc_spikes_hist(trials_nr, stimulus_length,
|
|
spikes_here,
|
|
deltat=deltat)
|
|
|
|
mat_orig2, time2, samp2 = calc_spikes_hist(trials_nr, stimulus_length, spikes_here, deltat=1 / 500)
|
|
# mat_orig2 = np.mean(smoothened2, axis=0)
|
|
mat_orig_eod, time_eod, samp_eod = calc_spikes_hist(trials_nr, stimulus_length, spikes_here, deltat=1 / eod_fr)
|
|
# mat_orig_eod = np.mean(smoothened_eod, axis=0)
|
|
mat_orig_02, time02, samp02 = calc_spikes_hist(trials_nr, stimulus_length, spikes_here, deltat=1 / 2000)
|
|
# mat_orig_02 = np.mean(smoothened_eod, axis=0)
|
|
mat_orig_05, time05, samp05 = calc_spikes_hist(trials_nr, stimulus_length, spikes_here, deltat=1 / 5000)
|
|
# mat_orig_05 = np.mean(smoothened_eod, axis=0)
|
|
|
|
sampling_rates = [sampling_rate]
|
|
times = [[0, stimulus_length]]
|
|
|
|
if single_train == '_singletrain_':
|
|
if dev == 'original':
|
|
mats = [spikes_mat[0]]
|
|
mat_names = ['']
|
|
else:
|
|
smoothed05 = gaussian_filter(spikes_mat, sigma=0.0005 * sampling_rate)
|
|
mat = np.mean(smoothed05, axis=0)
|
|
mats = [smoothed05[0]]
|
|
|
|
mat_names = ['']
|
|
else:
|
|
if dev == 'original':
|
|
several = False
|
|
if several == 'several':
|
|
mats = [mat_orig2, mat_orig_eod, mat_orig_02, mat_orig_05, mat_orig]
|
|
mat_names = ['_500', '_eodfr', '_2000', '_5000', '_dt']
|
|
times = [time2, time_eod, time02, time05, [0, stimulus_length]]
|
|
test = False
|
|
if test:
|
|
test_mean()
|
|
sampling_rates = [500, eod_fr, 2000, 5000, sampling_rate]
|
|
else:
|
|
mats = [mat_orig]
|
|
mat_names = ['_dt']
|
|
sampling_rates = [ sampling_rate]
|
|
else:
|
|
smoothed05 = gaussian_filter(spikes_mat, sigma=0.0005 * sampling_rate)
|
|
mat = np.mean(smoothed05, axis=0)
|
|
mats = [mat]
|
|
mat_names = ['']
|
|
#embed()
|
|
for m, mat_use in enumerate(mats):
|
|
|
|
dt = 1 / sampling_rates[m]
|
|
transient = int(transient_s / dt)
|
|
if 'fr' in freq_type :
|
|
try:
|
|
freq_type_var = 0.5 * fr
|
|
except:
|
|
print('fr0 problem')
|
|
embed()
|
|
elif 'beat' in freq_type :
|
|
freq_type_var = np.abs(beat1[0])
|
|
T = 1 / (freq_type_var) ## 1 Period of the external signal (1/f)
|
|
# make sure that the signal is always multiples of the period
|
|
stimulus_times = int((len(mat_use)-transient) * dt / T) # np.arange(1, int(stimulus_length / (1 / (0.5 * fr))), 25)
|
|
try:
|
|
maximal_period = int((T / dt) * stimulus_times) # Mascha hat 476 steps
|
|
except:
|
|
print('fr1 problem')
|
|
embed()
|
|
single_period = int(np.round(T / dt)) # single_period = int(T / dt+0.5)
|
|
steps_all = [maximal_period] # , single_period]
|
|
steps_name = ['_all'] # , '_one']
|
|
#embed()
|
|
for s, steps in enumerate(steps_all):
|
|
results = calc_right_core_nonlin(transient, steps_name[s], T, steps, results, mat_use,position, dt, fr, add_name = mat_names[m])
|
|
|
|
subsequent = ''
|
|
if 'subsequent' in subsequent:
|
|
#################################################
|
|
# for subseuqent steps
|
|
## das ist die fft berechnung!
|
|
#results = get_cfs(a_f1, a_f2, a_fr, cell, cv0, cvs, eod_fr, fr, freq1, freq2, position, results,
|
|
# sampling_rate, spikes_mat, stimulus_length)
|
|
get_cfs2(T, dt, m, mat_names, mat_use, maximal_period, position, results, single_period)
|
|
|
|
results.loc[position, 'a_fr'] = a_fr
|
|
results.loc[position, 'a_f2'] = a_f2
|
|
results.loc[position, 'a_f1'] = a_f1
|
|
results.loc[position, 'f1'] = freq1[0]
|
|
results.loc[position, 'f2'] = freq2[0]
|
|
results.loc[position, 'cell'] = cell
|
|
results.loc[position, 'max_adapt'] = np.nanmin(adapt_output)
|
|
results.loc[position, 'min_adapt'] = np.nanmax(adapt_output)
|
|
results.loc[position, 'fr'] = fr
|
|
results.loc[position, 'ser'] = ser0
|
|
results.loc[position, 'cv'] = cv0
|
|
|
|
results.loc[position, 'fr_stim'] = fr1
|
|
results.loc[position, 'ser_stim'] = ser1
|
|
results.loc[position, 'ser_sum_stim'] = ser_sum_stim
|
|
results.loc[position, 'ser_first_stim'] = ser_first_stim
|
|
results.loc[position, 'cv_stim'] = cv1
|
|
|
|
results.loc[position, 'eod_fr'] = eod_fr # 500 *30
|
|
|
|
for cv_all in cvs:
|
|
if 'cv' in cv_all:
|
|
try:
|
|
results.loc[position, cv_all] = cvs[cv_all]
|
|
except:
|
|
print('cv something')
|
|
embed()
|
|
position += 1
|
|
results.to_pickle(save_name)
|
|
#embed()
|
|
return results, position
|
|
|
|
|
|
def get_cfs2(T, dt, m, mat_names, mat_use, maximal_period, position, results, single_period):
|
|
steps_all = np.arange(0, maximal_period, single_period)
|
|
c = np.zeros([len(steps_all), 4])
|
|
phi = np.zeros([len(steps_all), 4])
|
|
# embed()
|
|
for s in range(len(steps_all) - 1):
|
|
# print(single_period)
|
|
c0_tmp = 0.0
|
|
a_tmp = np.zeros(4)
|
|
b_tmp = np.zeros(4)
|
|
|
|
# Calculate a and b for groundmode and higher harmonics
|
|
for j in range(4):
|
|
# if steps_name
|
|
if j < 1:
|
|
c0_tmp = np.mean(mat_use[steps_all[s]:steps_all[s + 1]])
|
|
freq_here = (j + 1) / (T)
|
|
time_here_all = np.arange(0, single_period, 1) * dt
|
|
# time_here_all = np.arange(0,steps_all[s],1) * dt
|
|
try:
|
|
a_tmp[j] = np.mean(
|
|
mat_use[steps_all[s]:steps_all[s + 1]] * np.cos(2.0 * np.pi * time_here_all * freq_here))
|
|
except:
|
|
print('a tmp problems')
|
|
embed()
|
|
b_tmp[j] = np.mean(
|
|
mat_use[steps_all[s]:steps_all[s + 1]] * np.sin(2.0 * np.pi * time_here_all * freq_here))
|
|
|
|
# Average
|
|
c0, c, phi = average_fft(a_tmp, b_tmp, c, c0_tmp, phi, s)
|
|
row, col = np.shape(c)
|
|
for c_nr in range(col):
|
|
results.loc[position, 'c_' + str(c_nr) + '_mean' + mat_names[m]] = np.mean(c[:, c_nr])
|
|
for c_nr in range(col):
|
|
results.loc[position, 'phi_' + str(c_nr) + '_mean' + mat_names[m]] = np.mean(phi[:, c_nr])
|
|
# embed()
|
|
results.loc[position, 'c0' + '_mean' + mat_names[m]] = c0
|
|
|
|
|
|
def arg_left_corr(arg, right_step=3, left_step=2):
|
|
arg_right = arg + right_step
|
|
arg_left = arg - left_step
|
|
if arg_left < 0:
|
|
arg_right += np.abs(arg_left)
|
|
arg_left = 0
|
|
return arg_left, arg_right
|
|
|
|
|
|
def find_peaks_power(names, f, pp, title, position, results, a_start = 'a_', f_start = 'f_', points = 5):#
|
|
# embed()
|
|
for name in names:
|
|
# print(name)
|
|
#nonlocal points
|
|
|
|
arg = np.argmin(np.abs(f - names[name]))
|
|
if points == 5:
|
|
arg_left, arg_right = arg_left_corr(arg, right_step=3, left_step=2)
|
|
results = results.copy()
|
|
results.loc[position, a_start + name + title] = np.sqrt(
|
|
np.sum((pp[arg_left:arg_right]) * np.abs(f[1] - f[0])))
|
|
results.loc[position, f_start + name + title] = names[name]
|
|
elif points == 3:
|
|
arg_left, arg_right = arg_left_corr(arg, right_step=2, left_step = 1)
|
|
results = results.copy()
|
|
results.loc[position, a_start + name + title] = np.sqrt(
|
|
np.sum((pp[arg_left:arg_right]) * np.abs(f[1] - f[0])))
|
|
results.loc[position, f_start + name + title] = names[name]
|
|
elif points == 1:
|
|
results = results.copy()
|
|
results.loc[position, a_start + name + title] = np.sqrt(pp[arg] * np.abs(f[1] - f[0]))
|
|
results.loc[position, f_start + name + title] = names[name]
|
|
# if name == 'f0-B2_':
|
|
#embed()
|
|
|
|
|
|
return results
|
|
|
|
|
|
def plot_stimulus(ax, time_ms, beat_here, am_corr_synth, color, i, ylim = [-2.5, 4]):
|
|
ax.show_spines('')
|
|
ax.plot(time_ms, beat_here, color='grey', linewidth = 0.5)
|
|
ax.plot(time_ms, am_corr_synth, color=color)
|
|
ax.set_xlim(0, time_ms[-1])
|
|
ax.set_ylim(ylim)
|
|
|
|
|
|
def plot_raster(ax, all_spikes, color, i, plot_segment, name = 'raster'):
|
|
ax.eventplot(all_spikes, orientation='horizontal',
|
|
linelengths=0.8, linewidths=1, colors=[color])
|
|
ax.show_spines('')
|
|
ax.set_xlim(0, plot_segment)
|
|
if i % 3 == 0:
|
|
ax.text(-0.05, 0.6, name, transform=ax.transAxes, rotation=90, va='center', ha='right')
|
|
|
|
|
|
def plot_peri(ax, smoothed, sampling_rate, lw_beat_corr, color, i, name = 'rate'):
|
|
time = np.arange(len(smoothed[-1])) / sampling_rate
|
|
mean_smoothed = np.mean(smoothed, axis=0)
|
|
ax.plot(1000 * time, mean_smoothed, linewidth=lw_beat_corr, color=color, clip_on=False)
|
|
ax.set_xlim(0, 1000 * time[-1])
|
|
ax.set_ylim(-10, 850)
|
|
ax.show_spines('')
|
|
if i % 3 == 0:
|
|
ax.text(-0.05, 0.3, name, transform=ax.transAxes, rotation=90, va='center', ha='right')
|
|
if i % 3 == 2:
|
|
ax.scalebars(1.05, 0, 10, 800, 'ms', 's$^{-1}$', ha='right', vat='bottom')
|
|
|
|
|
|
def load_cell(data, fname='singlecellexample5', big_file='beat_results_smoothed_limit35minimalduration0.3', redo=False, save=True):
|
|
#embed()
|
|
if (not os.path.exists(fname + '.csv')) or (redo == True):
|
|
print('reloaded')
|
|
data_all = pd.read_pickle('../code/calc_model'+'/'+big_file + '.pkl')
|
|
just_cell = data_all[data_all['dataset'] == data]
|
|
spikes_data = just_cell[just_cell['contrasts'] == 20]
|
|
results1 = pd.DataFrame(spikes_data)
|
|
results = results1.groupby(['df']).mean()
|
|
spikes = []
|
|
#embed()
|
|
for d in np.unique(results1['df']):
|
|
spikes.append(results1[results1['df'] == d].spike_times.iloc[0])
|
|
#spikes.append(d[0]()
|
|
#'amp_max_beat_0_2', 'amp_max_beat_2', 'base_trials'
|
|
#embed()
|
|
results['base'] = results1['amp_max_beat_05']
|
|
results['spikes'] = spikes
|
|
results['df'] = np.unique(results1['df'])
|
|
#embed()
|
|
baseline = pd.read_pickle('../code/calc_base/calc_base_data-base_frame.pkl')
|
|
baseline_cell = baseline[baseline.cell == data]
|
|
base = baseline_cell['fr'].iloc[0]
|
|
results['fr'] = base
|
|
spikes_data = results
|
|
#embed()
|
|
#if save == True:
|
|
names = ['spikes']
|
|
results.to_csv(fname + '.csv')
|
|
save_object_from_frame(results, names, fname)
|
|
#results.to_pickle(fname + '.pkl')
|
|
#spikes_data = pd.read_pickle(fname + '.pkl')
|
|
#embed()
|
|
else:
|
|
#spikes_data = pd.read_pickle(fname + '.pkl')
|
|
names = ['spikes']
|
|
# save_name = load_function + 'base_frame_all_'
|
|
spikes_data = load_object_to_pandas(names, fname)
|
|
#spikes_data['spikes']
|
|
#spikes_data['df']
|
|
#spikes = pd.DataFrame(data = np.transpose(np.array(spikes_data['spikes'])),columns = spikes_data['df'])
|
|
#pd.pivot(data = spikes_data['spikes'],columns = spikes_data['df'])
|
|
#embed()
|
|
return spikes_data
|
|
|
|
def ws_nonlin_systems():
|
|
ws = 0.15
|
|
return ws
|
|
|
|
|
|
def restrict_cell_type(cells, cell_type):
|
|
p_units_cells = []
|
|
pyramidals = []
|
|
for cell in cells:
|
|
if cell == '2021-11-05-ai-invivo-1':
|
|
p_units_cells.append(cell)
|
|
elif ('2022-02-08' not in cell) & ('2022-02-07' not in cell) & (
|
|
'2022-02-04' not in cell) & ('2022-02-03' not in cell) & (
|
|
'2021-11-11' not in cell) & ('2021-11-05' not in cell) & (
|
|
'2021-11-04' not in cell):
|
|
p_units_cells.append(cell)
|
|
else:
|
|
pyramidals.append(cell)
|
|
|
|
if cell_type == 'p-units':
|
|
cells = p_units_cells
|
|
else:
|
|
cells = pyramidals
|
|
return cells,p_units_cells,pyramidals
|
|
|
|
|
|
def plt_peaks_several(labels, freqs, p_arrays, j, axs_p, p0_means, colors, fs, markeredgecolors=[],zorder = 2, ha ='left', rot = 45, add_texts = [], limit = None, texts_left = [], add_log = 2, rots =[], several_peaks_nr = 2, exact = True, text_extra = False, perc = 0.04, rel='rel', alphas = [], extend = False, edgecolor = None, ms =25, clip_on = False, several_peaks = True, alpha = 1, log =''):
|
|
df_passed = [] # ,
|
|
for ff, f in enumerate(range(len(freqs))):
|
|
|
|
#else:
|
|
|
|
if rel == 'rel':
|
|
|
|
if exact == True:
|
|
condition = int(freqs[f]) in df_passed
|
|
else:
|
|
if len(df_passed) == 0:
|
|
condition = False
|
|
else:
|
|
condition = np.min(np.abs(df_passed - freqs[f])) < 10
|
|
|
|
if condition:
|
|
count = 0
|
|
|
|
for df in df_passed:
|
|
if exact == True:
|
|
if int(freqs[f]) == df:
|
|
count += 1
|
|
else:
|
|
count = np.sum(np.abs(df_passed - freqs[f]) < 10)
|
|
#print(count)
|
|
#if count == 2:
|
|
# embed()
|
|
if log == 'log':
|
|
add = (np.max(np.max(p_arrays)) * perc) + add_log * count
|
|
else:
|
|
add = (np.max(np.max(p_arrays)) * perc * count)
|
|
#embed()
|
|
#if log == 'log':
|
|
# add_ext = add_log
|
|
#else:
|
|
add_ext = 30
|
|
add_text = add + add_ext *count
|
|
if j == 0:
|
|
add = (np.max(np.max(p_arrays)) * perc*count)
|
|
add_text = add + add_ext *count
|
|
# embed()
|
|
else:
|
|
add = (np.max(np.max(p_arrays)) * 0.01) # * 0.01
|
|
add_text = (np.max(np.max(p_arrays)) * perc) # * 0.01
|
|
else:
|
|
if int(freqs[f]) in df_passed:
|
|
add = 60
|
|
add_text = add + 30
|
|
if j == 0:
|
|
add = (np.max(np.max(p_arrays)) * perc) # * 0.25
|
|
add_text = add + 30
|
|
# embed()
|
|
else:
|
|
add = 30
|
|
add_text = (np.max(np.max(p_arrays)) * perc) # * 0.01
|
|
|
|
if len(alphas)> 0:
|
|
alpha = alphas[f]
|
|
#embed()
|
|
#print(add)
|
|
if len(rots)<1:
|
|
rot = 45
|
|
else:
|
|
rot = rots[f]
|
|
|
|
#embed()
|
|
if len(add_texts)> 0:
|
|
add_text = add_texts[f]
|
|
print('extraf' + str(add_texts[f]))
|
|
else:
|
|
add_text = 0
|
|
if len(texts_left)> 0:
|
|
text_left = texts_left[f]
|
|
print('extraf' + str(add_texts[f]))
|
|
else:
|
|
text_left = 0
|
|
#embed()
|
|
if len(markeredgecolors)<1:
|
|
markeredgecolor = colors[f]
|
|
else:
|
|
markeredgecolor = markeredgecolors[f]
|
|
#embed()
|
|
plt_peaks(axs_p, p0_means, freqs[f], fs, fr_color=colors[f], s=ms,
|
|
label=labels[f], zorder = zorder, markeredgecolor=markeredgecolor, ha = ha, several_peaks_nr = several_peaks_nr, limit = limit, rot = rot, text_left = text_left, add_text = add_text, text_extra = text_extra, extend = extend, add=add, alpha = alpha, clip_on = clip_on, several_peaks = several_peaks, log = log)
|
|
|
|
|
|
df_passed.append(int(freqs[f]))
|
|
|
|
|
|
def plt_peaks(ax, p, fr, f_axis,several_peaks_nr = 2, zorder = 2, markeredgecolor=None, several_peaks = True, ha = 'left', limit = None, text_left = 0,rot = 45,add_text = 0, text_extra = False, extend = True,log = '', fr_color='grey', add=0, s=12, label='', alpha = 1, clip_on = False):
|
|
# DAS ist die RICHTIGE Variante
|
|
minimum = np.argmin(np.abs(fr - f_axis))
|
|
minimums = [minimum - 2, minimum - 1, minimum, minimum + 1, minimum + 2]
|
|
|
|
if several_peaks:
|
|
# das machen wir in der Regel bei Power Spektren
|
|
try:
|
|
#
|
|
#embed()
|
|
minimum_array = [minimum]*(several_peaks_nr*2+1)
|
|
minus_array = np.arange(0,several_peaks_nr*2+1, 1)-several_peaks_nr
|
|
minimums = minimum_array+minus_array#[minimum - 2, minimum - 1, minimum, minimum + 1, minimum + 2]
|
|
|
|
max_pos = np.argmax(p[minimums])
|
|
except:
|
|
minimums = [minimum]
|
|
max_pos = np.argmax(p[minimums])
|
|
#print('plt peaks problem ')
|
|
#embed()
|
|
else:
|
|
# das hier in den anderen Fällen
|
|
minimums = [minimum]
|
|
max_pos = np.argmax(p[minimums])
|
|
# print('plt peaks problem ')
|
|
# embed()
|
|
new_f = minimums[max_pos]
|
|
max_pos_neg = np.argmin(p[minimums])
|
|
new_f_neg = minimums[max_pos_neg]
|
|
|
|
#embed()
|
|
if not markeredgecolor:
|
|
markeredgecolor = fr_color
|
|
|
|
try:
|
|
if p[new_f] > p[new_f_neg]:
|
|
|
|
f_scatter = f_axis[new_f]
|
|
p_scatter = p[new_f]
|
|
#embed()
|
|
if limit:
|
|
if p_scatter > limit:
|
|
cont = True
|
|
else:
|
|
cont = False
|
|
else:
|
|
cont = True
|
|
if cont:
|
|
if label != '':
|
|
ax.scatter(f_scatter, p_scatter + add, color=fr_color, zorder=zorder, s=s, label=label, clip_on= clip_on,
|
|
alpha=alpha, edgecolor=markeredgecolor)
|
|
else:
|
|
ax.scatter(f_scatter, p_scatter + add, color=fr_color, zorder=zorder, s=s, clip_on = clip_on, alpha = alpha, edgecolor=markeredgecolor)
|
|
if extend:
|
|
#embed()
|
|
ax.plot(f_axis[new_f - 2: new_f + 3], p[new_f - 2: new_f + 3], color=fr_color, alpha=0.5, zorder = 100)
|
|
#embed()
|
|
if text_extra: # +add_text
|
|
ax.text(f_scatter-text_left, p_scatter+ add+add_text, label, ha = ha , rotation=rot, color=fr_color)
|
|
|
|
else:
|
|
|
|
try:
|
|
max_pos = np.argmin(p[minimums])
|
|
new_f = minimums[max_pos]
|
|
except:
|
|
new_f = minimum # minimums[minimum]
|
|
f_scatter = f_axis[new_f]
|
|
p_scatter = p[new_f]
|
|
|
|
if limit:
|
|
if p_scatter > limit:
|
|
cont = True
|
|
else:
|
|
cont = False
|
|
else:
|
|
cont = True
|
|
if cont:
|
|
if label != '':
|
|
ax.scatter(f_scatter, p_scatter - add, color=fr_color, zorder=2, s=s, label=label, clip_on= clip_on,
|
|
alpha=alpha, edgecolor=markeredgecolor)
|
|
else:
|
|
ax.scatter(f_scatter, p_scatter - add, color=fr_color, zorder=2, s=s, clip_on = clip_on, alpha = alpha, markeredgecolor=edgecolor)
|
|
if extend:
|
|
ax.plot(f_axis[new_f-2:new_f+3],p[new_f-2:new_f+3], color=fr_color, alpha = 0.5, zorder = 100)
|
|
|
|
if text_extra:#+add_text
|
|
ax.text(f_scatter+4, p_scatter- add+2+add_text,label, rotation = rot, color=fr_color, ha = ha)
|
|
except:
|
|
print('peaks thing inside')
|
|
embed()
|
|
return f_scatter, p_scatter
|
|
|
|
|
|
def calc_beat_spikes(final_eod, sampling_rate, final_DF, i, cell, plus_bef, minus_bef, version='spikes', data='',
|
|
predicted_DF=5, data_beat=[], trial_nr = 0):
|
|
# ax['scatter'] = plt.subplot(single_example_grid[1])
|
|
ll = np.abs(plus_bef)
|
|
ul = np.abs(minus_bef)
|
|
df = final_DF[i]
|
|
eod = final_eod[i]
|
|
len_smoothed = []
|
|
len_smoothed_b = []
|
|
if version == 'spikes':
|
|
if len(data_beat[data_beat['df'] == df]['spikes']) == 1:
|
|
tranformed_spikes = np.array(data_beat[data_beat['df'] == df]['spikes'].iloc[0])
|
|
if len(data_beat[data_beat['df'] == df]['spikes'].iloc[0]) == 1:
|
|
tranformed_spikes = np.array(data_beat[data_beat['df'] == df]['spikes'].iloc[0][0])
|
|
|
|
else:
|
|
tranformed_spikes = np.array(data_beat[data_beat['df'] == df]['spikes'].iloc[trial_nr])
|
|
|
|
#spikes = cell[cell['df_orig'] == df]['spikes']
|
|
|
|
#try:
|
|
|
|
#embed()
|
|
size = int(tranformed_spikes[-1] * sampling_rate + 5) # duration.iloc[0]
|
|
spikes_mat = np.zeros(size)
|
|
spikes_idx = np.round(tranformed_spikes * sampling_rate)
|
|
for spike in spikes_idx:
|
|
spikes_mat[int(spike)] = 1 * sampling_rate
|
|
smoothed = gaussian_filter(spikes_mat, sigma=gaussian_intro() * sampling_rate)
|
|
|
|
else:
|
|
spikes_mat = []
|
|
spikes = cell[cell['df'] == df]['local']
|
|
if len(spikes) == 1:
|
|
tranformed_spikes = np.array(spikes.iloc[0])
|
|
else:
|
|
tranformed_spikes = np.array(spikes.iloc[trial_nr])
|
|
smoothed = tranformed_spikes * 1
|
|
smoothed[smoothed < 0] = 0
|
|
p_array, f = ml.psd(smoothed ** 3 - np.mean(smoothed ** 3), Fs=sampling_rate, NFFT=2**15,
|
|
noverlap=2**14)
|
|
maximal_f = f[np.argmax(p_array[f < eod / 2])]
|
|
# duration = cell[cell['df'] == df]['durations']
|
|
plot_segment = ul - ll
|
|
|
|
p_array, f = ml.psd(smoothed - np.mean(smoothed), Fs=sampling_rate, NFFT=4096,
|
|
noverlap=4096//2)
|
|
|
|
period = (1 / predicted_DF)
|
|
corr = create_beat_corr2(df, eod)
|
|
period = (1 / corr)
|
|
# den Beat nehmen wir aus den Daten als das local EOD
|
|
# beat = data_beat[data_beat['df'] == final_DF[i]]['efield']+data_beat[data_beat['df'] == final_DF[i]]['global']
|
|
time = np.arange(0, len(smoothed) / sampling_rate, 1 / sampling_rate)
|
|
|
|
beat_version = 'sumu'
|
|
if beat_version == 'local':
|
|
beat = data_beat[data_beat['df'] == df]['local']
|
|
if len(beat) == 1:
|
|
beat = np.array(beat.iloc[0])
|
|
if len(beat) == 1:
|
|
beat = np.array(beat.iloc[0][0])
|
|
else:
|
|
beat = np.array(beat.iloc[trial_nr])
|
|
else:
|
|
if len(data_beat[data_beat['df'] == df]['efield']) == 1:
|
|
efield = np.array(data_beat[data_beat['df'] == df]['efield'].iloc[0])
|
|
if len(efield) == 1:
|
|
efield = np.array(data_beat[data_beat['df'] == df]['efield'].iloc[0][0])
|
|
else:
|
|
efield = np.array(data_beat[data_beat['df'] == df]['efield'].iloc[trial_nr])
|
|
efield = zenter_and_normalize(efield, 0.2)
|
|
if len(data_beat[data_beat['df'] == df]['global']) == 1:
|
|
global_eod = np.array(data_beat[data_beat['df'] == df]['global'].iloc[0])
|
|
if len(global_eod) == 1:
|
|
global_eod = np.array(data_beat[data_beat['df'] == df]['global'].iloc[0][0])
|
|
else:
|
|
global_eod= np.array(data_beat[data_beat['df'] == df]['global'].iloc[trial_nr])
|
|
|
|
global_eod = zenter_and_normalize(global_eod, 1)
|
|
|
|
beat = global_eod + efield
|
|
#embed()
|
|
if 'ds' in data_beat.keys():
|
|
ds = int(data_beat.ds.iloc[0])
|
|
time_beat = np.arange(0, ds*len(beat) / sampling_rate, 1 / sampling_rate)
|
|
beat = interpolate(time_beat [::ds], beat, time_beat, kind='cubic')
|
|
#smoothed = smoothed[::ds]
|
|
#sampling_rate = sampling_rate/ds
|
|
#embed()
|
|
beat3 = beat * 1
|
|
beat3[beat3 < 0] = 0
|
|
p_array, f = ml.psd(beat3 ** 3 - np.mean(beat3 ** 3), Fs=sampling_rate, NFFT=2**15,
|
|
noverlap=2**14)
|
|
maximal_f = f[np.argmax(p_array[f < eod / 2])]
|
|
period = (1 / maximal_f)
|
|
# period bestimmen wir lieber aus dem corr, weil das f_max ist nfft abhäängig
|
|
period = 1 / corr
|
|
#embed()
|
|
if period < plot_segment:
|
|
shift_period = period * 2
|
|
else:
|
|
shift_period = period * np.ceil(plot_segment / period)
|
|
# und diese Shifts die sollten hatl ja die Länge des segments haben und keine 0.05 Sekunden..
|
|
|
|
###################################
|
|
# ich mache ein festes fenster also habe ich einen schift der in einem sehr kleinen schritt durchgeht
|
|
# das period 2 hätte ich wenn das Fenster immer die gleiche länge hätte
|
|
shift_period = 0.005#period * 2#
|
|
shifts = np.arange(0, 200 * shift_period, shift_period)
|
|
|
|
time_b = np.arange(0, len(beat) / sampling_rate, 1 / sampling_rate)
|
|
am_corr = extract_am(beat, time_b, eodf=eod, norm=False, extract='globalmax', kind ='cubic')[0]
|
|
|
|
len_smoothed,smoothed_trial, all_spikes, maxima, error, spikes_cut, beat_cut, am_corr_cut = create_shifted_spikes(eod, len_smoothed_b, len_smoothed, beat, am_corr, sampling_rate, time_b, time, smoothed, shifts, plot_segment, tranformed_spikes, version = version)
|
|
|
|
am_final, beat_final, most_similiar, spike, spike_sm = get_most_similiar_spikes(all_spikes, am_corr_cut, beat_cut,
|
|
error, maxima, spike, spikes_cut)
|
|
|
|
test = False
|
|
if test:
|
|
test_spikes()
|
|
|
|
#embed()
|
|
test = False
|
|
if test == True:
|
|
test_maximal()
|
|
return am_final, beat_final, smoothed, tranformed_spikes, spike_sm, spike, spikes_mat, plot_segment
|
|
|
|
|
|
def gaussian_intro():
|
|
return 0.001
|
|
|
|
|
|
def plot_power(ax, stim_f, spikes_mat, sampling_rate, main_color, eod, color, i, ms = 3, nfft = 4096 * 4):
|
|
|
|
p, f = ml.psd(spikes_mat - np.mean(spikes_mat), Fs=sampling_rate, NFFT=nfft, noverlap=nfft // 2)
|
|
db = 10 * np.log10(p / np.max(p))
|
|
ax.plot(f, db, zorder=1, color=main_color, linewidth=1)
|
|
maxi = np.argmax(db[f < 0.5 * eod[i]])
|
|
#ax.plot(f[maxi], db[maxi] + 2, 'o', zorder=2, color=color, ms=ms)
|
|
#eodi = np.argmin(np.abs(f - eod[i]))
|
|
eodi = np.argmax(p)
|
|
#ax.plot(f[eodi], db[eodi] + 2, 'o', zorder=2, ms=ms, color='white', mec='black')
|
|
#plt_pe
|
|
# aks()
|
|
#embed()
|
|
# hier habe ich die eine Funktion wo man nur die Frequenzen und Farben reingibt und die kümmert sich um die Punkte, dass sie
|
|
# nicht überlappen etc.
|
|
xlim_max = 1000
|
|
if stim_f < xlim_max:
|
|
freqs = [eod[i], f[maxi], stim_f]
|
|
else:
|
|
freqs = [eod[i], f[maxi]]
|
|
|
|
plt_peaks_several(['', '', ''], freqs, [db], 5, ax, db, ['white',color,'black'], f, edgecolor=['black',color,'black'], ms=ms, rel='rel',
|
|
clip_on=False, add_log = 0.1,several_peaks_nr = 4, log = 'log', markeredgecolors = ['black',color,'black'])
|
|
|
|
ax.axvline(x=eod[i] / 2, color='black', linestyle='dashed', lw=0.5)
|
|
ax.set_xlim(0, xlim_max)
|
|
ax.set_ylim(-20, 10)
|
|
ax.show_spines('b')
|
|
ax.set_xticks_delta(500)
|
|
if i >= 3:
|
|
ax.set_xlabel('Frequency [Hz]')
|
|
else:
|
|
ax.set_xticks_blank()
|
|
if i % 3 == 0:
|
|
ax.text(-0.05, 0.5, 'psd', transform=ax.transAxes, rotation=90, va='center', ha='right')
|
|
if i % 3 == 2:
|
|
ax.yscalebar(1.05, 0.0, 20, 'dB', ha='right')
|
|
|
|
|
|
def plt_RAM_explained_single3(exponential='', v_exp=1, exp_tau=0.001, lower_tol=0.995, upper_tol=1.005):
|
|
plot_style()
|
|
#default_settings(width=12)#, ts=12, ls=13, fs=11
|
|
cells = ["2012-06-27-ah-invivo-1"] # ,"2013-01-08-aa-invivo-1" , "2014-06-06-ac-invivo-1"]
|
|
model_cells = pd.read_csv(load_folder_name('calc_model_core') + "/models_big_fit_d_right.csv")
|
|
# fig, ax = plt.subplots(3, 3, constrained_layout=True, figsize=(12, 5.5)) # figsize=(12, 5),
|
|
|
|
for run in range(1):
|
|
#fig = plt.figure(figsize=(12, 5.5))
|
|
default_figsize(column=2, length=2.5)
|
|
grid = gridspec.GridSpec(1, 1, wspace=0.35, left=0.1, top=0.95, bottom=0.13, right=0.87,
|
|
hspace=0.35)
|
|
#grid1 = gridspec.GridSpecFromSubplotSpec(3, 1, wspace=0.5, hspace=0.02,
|
|
# subplot_spec=grid[0])
|
|
grid2 = gridspec.GridSpecFromSubplotSpec(2, 1, wspace=0.5, hspace=0.4,
|
|
subplot_spec=grid[0])
|
|
for c, cell in enumerate(cells):
|
|
''' arrays, arrays2, colors, deltat, spikes = get_RAM_stimulus(cell, exp_tau, exponential, lower_tol,
|
|
model_cells, upper_tol, v_exp)
|
|
|
|
##################################################
|
|
plt_RAM_arrays(arrays, arrays2, colors, deltat, grid1, spikes)'''
|
|
##################################################
|
|
##################################
|
|
# model part
|
|
ax = plt.subplot(grid2[:])
|
|
|
|
perc, im, stack_final = plt_model_big(ax)
|
|
set_clim_same_here([im], mats=[np.abs(stack_final)], lim_type='up', nr_clim='perc', clims='', percnr=95)
|
|
fig = plt.gcf()
|
|
#fig.tag([fig.axes[1]], xoffs=-5.5, yoffs=0.7)
|
|
plt.subplots_adjust(hspace=0.85, wspace=0.25)
|
|
save_visualization(str(run), False, counter_contrast=0, savename='')
|
|
|
|
|
|
def plt_RAM_explained_single2(exponential='', v_exp=1, exp_tau=0.001, lower_tol=0.995, upper_tol=1.005):
|
|
plot_style()
|
|
default_settings(width=12) #, ts=12, ls=13, fs=11
|
|
cells = ["2012-06-27-ah-invivo-1"] # ,"2013-01-08-aa-invivo-1" , "2014-06-06-ac-invivo-1"]
|
|
model_cells = pd.read_csv(load_folder_name('calc_model_core') + "/models_big_fit_d_right.csv")
|
|
# fig, ax = plt.subplots(3, 3, constrained_layout=True, figsize=(12, 5.5)) # figsize=(12, 5),
|
|
|
|
for run in range(1):
|
|
#fig = plt.figure(figsize=(12, 5.5))
|
|
default_settings(column=2, length=3)
|
|
grid = gridspec.GridSpec(1, 2, wspace=0.35, left=0.1, top=0.95, bottom=0.16, right=0.87,
|
|
hspace=0.35)
|
|
grid1 = gridspec.GridSpecFromSubplotSpec(3, 1, wspace=0.5, hspace=0.02,
|
|
subplot_spec=grid[0])
|
|
grid2 = gridspec.GridSpecFromSubplotSpec(2, 1, wspace=0.5, hspace=0.4,
|
|
subplot_spec=grid[1])
|
|
for c, cell in enumerate(cells):
|
|
arrays, arrays2, colors, deltat, spikes = get_RAM_stimulus(cell, exp_tau, exponential, lower_tol,
|
|
model_cells, upper_tol, v_exp)
|
|
|
|
##################################################
|
|
plt_RAM_arrays(arrays, arrays2, colors, deltat, grid1, spikes)
|
|
##################################################
|
|
##################################
|
|
# model part
|
|
ax = plt.subplot(grid2[:])
|
|
|
|
perc, im, stack_final = plt_model_big(ax)
|
|
set_clim_same_here([im], mats=[np.abs(stack_final)], lim_type='up', nr_clim='perc', clims='', percnr=95)
|
|
fig = plt.gcf()
|
|
fig.tag([fig.axes[1],fig.axes[-2]], xoffs=-5.5, yoffs=0.7)
|
|
plt.subplots_adjust(hspace=0.85, wspace=0.25)
|
|
save_visualization(str(run), False, counter_contrast=0, savename='')
|
|
|
|
|
|
def plt_RAM_arrays(arrays, arrays2, colors, deltat, grid1, spikes):
|
|
ax = plt.subplot(grid1[1])
|
|
ax.eventplot(np.array(spikes)*1000, color='black')
|
|
ax.show_spines('')
|
|
#ax.set_ylabel('Spike Nr')
|
|
rx = 0.1*1000
|
|
ax.set_xlim(0, rx)
|
|
ylabel = ['', '', 'Firing Rate [Hz]']
|
|
for i in range(len(arrays)):
|
|
|
|
if arrays[i] != '':
|
|
ax = plt.subplot(grid1[i])
|
|
try:
|
|
ax.plot(np.arange(0, len(arrays[i]) * deltat, deltat)*1000, arrays[i], color=colors[i])
|
|
except:
|
|
print('arrays problem')
|
|
embed()
|
|
|
|
if arrays2[i] != '':
|
|
ax.plot(np.arange(0, len(arrays2[i]) * deltat, deltat)*1000, arrays2[i], color='black')
|
|
|
|
ax.set_xlim(0, rx)
|
|
|
|
if i < 2:
|
|
ax.show_spines('')
|
|
remove_xticks(ax)
|
|
remove_xticks(ax)
|
|
|
|
ax.set_ylabel(ylabel[i])
|
|
ax.set_xlabel('Time [ms]')
|
|
|
|
|
|
def phaselocking_loss2(show=True):
|
|
data_names, data_dir = find_all_dir_cells()
|
|
stack_cell_all = []
|
|
# if data_name != '2020-10-29-af-invivo-1':
|
|
# check if cell is there
|
|
|
|
# data_names = ['2019-10-28-ab-invivo-1', '2019-10-28-ac-invivo-1', '2019-10-28-ad-invivo-1', '2019-10-28-ae-invivo-1']
|
|
|
|
# mt_names = np.unique(mt_names)
|
|
# tag_names = np.unique(tag_names)
|
|
frame_all = pd.DataFrame()
|
|
|
|
save_dir = load_savedir(level=1, save=False)
|
|
save_name = save_dir + 'FI_with_f0' # calc_FI_Curves/
|
|
# embed()
|
|
redo = True
|
|
data_names = ['2018-05-08-af-invivo-1']
|
|
data_names = ['2022-01-28-af-invivo-1']
|
|
#find_path, save_name, file = load_path_data(l0='calc_FI_Curve_data', l1='calc_FI_contrasts_data',
|
|
# file='FI_with_contrasts.csv', load=True)
|
|
|
|
#file_big_big = file[file.contrasts > 100]#
|
|
#file_big_big = file[file.contrasts > 75]
|
|
#data_names = np.array(file_big_big.cell.unique())
|
|
data_names = ['2018-05-08-af-invivo-1', '2018-08-14-ac-invivo-1', '2018-09-06-as-invivo-1',
|
|
'2018-08-04-aa-invivo-1', '2018-01-17-an-invivo-1']
|
|
data_names = ['2019-10-28-ae-invivo-1', '2020-10-01-ae-invivo-1', '2020-06-16-ah-invivo-1',
|
|
'2020-07-02-aa-invivo-1', '2019-06-28-ae-invivo-1']
|
|
|
|
data_names = ['2019-10-21-aa-invivo-1']
|
|
data_names = ['2019-09-10-ae-invivo-1']
|
|
data_names = ['2019-09-10-ae-invivo-1']
|
|
plot_style()
|
|
default_figsize(column=2, length=3.5)
|
|
#cells, frame, not_frame_punits_cells = filter_cells_punit()
|
|
# embed()
|
|
#cells_here = np.split(list(np.array(cells)), np.arange(0, len(list(np.array(cells))), 48))
|
|
# todo: hier über Zellen iterieren
|
|
##cells = [-40::]
|
|
# for cc,cells in enumerate(cells_here):
|
|
for data_name in data_names:
|
|
print(data_name)
|
|
# if redo == False:
|
|
|
|
#############################################
|
|
# print traces
|
|
|
|
name_core = load_folder_name('data') + 'cells/' + data_name
|
|
nix_name = name_core + '/' + data_name + '.nix' # '/'
|
|
#embed()
|
|
if os.path.exists(name_core):
|
|
# try:
|
|
f = nix.File.open(nix_name, nix.FileMode.ReadOnly)
|
|
nix_there = True
|
|
# except:
|
|
# nix_there = False
|
|
if nix_there:
|
|
|
|
# print(str(data_name) + ' ' + str(cont))
|
|
b = f.blocks[0]
|
|
t = find_tags(b) # tag
|
|
# mt = find_multitags(b) # multitag
|
|
all_mt_names = find_mt_all(b)
|
|
all_tag_names = find_tags_all(b)
|
|
ts = find_tags_list(b, names='ficurve')
|
|
# embed()
|
|
|
|
#embed()
|
|
if len(ts) > 0:
|
|
# embed()
|
|
for n, names_mt_gwn in enumerate(all_mt_names):
|
|
if ('rectangle' in names_mt_gwn) | ('FI' in names_mt_gwn):
|
|
|
|
mt = b.multi_tags[names_mt_gwn]
|
|
# eodf, eodf_orig = find_eodf_three(b, mt, [])
|
|
features, delay_name = feature_extract(mt, )
|
|
# embed()
|
|
Intensity, preIntensity, contrasts, precontrasts = find_contrasts(features, mt)
|
|
units = 2 * 7
|
|
if len(np.shape(contrasts)) > 1:
|
|
contrasts = np.concatenate(contrasts)
|
|
negativ = 'negativ' # 'positiv'#'highest'#'negativ' # 'positiv'
|
|
next_step = int(np.round(len(contrasts) / units))
|
|
|
|
val = 31
|
|
indeces_show = np.arange(0, len(contrasts), 1)[(contrasts > val-3) & (contrasts < val+3)]##[np.argsort(contrasts)[-1]]
|
|
contrasts_show = contrasts[(contrasts > val-3) & (contrasts < val+3)]#[np.sort(contrasts)[-1]]
|
|
#embed()#contrasts
|
|
# contrasts_show[idx]
|
|
# embed()
|
|
# fig, ax = plt.subplots(5,len(contrasts_show), sharex = True, figsize = (12,5.5))
|
|
###############################################
|
|
# show the kennlinien
|
|
save_name = load_folder_name('calc_FI_Curve') + '\FI5_with_f0_nfft_16384'#FI_with_f0'
|
|
frame = pd.read_csv(save_name + '.csv')
|
|
|
|
names_all = [['ss_s', 'ss_r']]#, [['ss_s', 'on_s']] # , 'on_s', 'on_r',
|
|
linestyles = ['-', '--', '-', '--', '-', '--', '-', '--']
|
|
colors = ['black', 'grey', 'lightgreen', 'lightgreen', 'blue', 'blue', 'purple', 'purple']
|
|
# '_amp_norm'
|
|
|
|
row, col = find_row_col(frame.cell.unique())
|
|
row = 6 # 7#4
|
|
col = 7 # 5
|
|
axes = []
|
|
#default_settings()
|
|
#fig = plt.figure(figsize=(15, 7))
|
|
grid0 = gridspec.GridSpec(1, 2, bottom=0.15, top=0.92, left=0.1,
|
|
right=0.98,
|
|
wspace=0.27, hspace=0.45, width_ratios=[2, 1.3]) #
|
|
|
|
# fig, ax = plt.subplots(row, col, sharex=True, figsize=(12, 5.5))
|
|
# ax = np.concatenate(ax)
|
|
gridr = gridspec.GridSpecFromSubplotSpec(1, 1, subplot_spec=grid0[1],
|
|
hspace=0.5)
|
|
frame_cv = pd.read_pickle(
|
|
load_folder_name('calc_base') + '/calc_base_data-base_frame.pkl')
|
|
not_frame_punits_cells = frame_cv[
|
|
frame_cv['cell_type_reclassified'] != ' P-unit'].cell.unique()
|
|
cells_saved = frame.cell.unique()
|
|
c_counter = 0
|
|
cells_p_units = np.setdiff1d(list(cells_saved), list(not_frame_punits_cells))
|
|
|
|
frame_punit = frame[frame.cell.isin(cells_p_units)]
|
|
frame_final = frame_punit.groupby('cell').contrasts.max().sort_values()[-40::]
|
|
cells = frame_final.index.unique()
|
|
color_title = 'red'
|
|
frame_cell = frame[frame.cell == data_name]
|
|
# embed()#index
|
|
frame_cell['contrasts'] = np.round(frame_cell['contrasts'])
|
|
frame_cell = frame_cell.groupby('contrasts', as_index=True).mean()
|
|
sort_order = np.argsort(frame_cell.index)
|
|
logs = [''] # , 'log'
|
|
lables = ['Onset State Curve','Steady State Curve']#
|
|
coloro = 'red'
|
|
colors = 'green'
|
|
delta = 200
|
|
for l in range(len(logs)):
|
|
my_curves = 'chirp'
|
|
if my_curves == 'new':
|
|
for nn, names in enumerate(names_all):
|
|
ax = plt.subplot(gridr[nn, l])
|
|
for n, name in enumerate(names):
|
|
contrast_labels = frame_cell.index[sort_order] / 100
|
|
flip = False
|
|
if flip:
|
|
steady_func = frame_cell[name].iloc[sort_order][::-1]
|
|
ax.scatter(-contrast_labels,
|
|
steady_func,
|
|
color=colors[n],
|
|
linestyle=linestyles[n])#label=name,
|
|
# ax.scatter(-contrasts_show[idx] / 100, 0, marker='^', color='black')
|
|
else:
|
|
steady_func = frame_cell[name].iloc[sort_order]
|
|
ax.scatter(contrast_labels,
|
|
steady_func, color=colors[n],
|
|
linestyle=linestyles[n])#label=name,
|
|
|
|
# ax.scatter(contrasts_show[idx] / 100, 0, marker='^', color='black')
|
|
try:
|
|
plt_FI_curve(contrast_labels, bolzmann_steady, steady_func, label = lables[n], color = colors[n])
|
|
except:
|
|
print('color something')
|
|
embed()
|
|
#plt.ylim([0, 720])
|
|
|
|
#plt.xlabel('Contrasts [%]', labelpad=10)
|
|
#plt.ylabel('Firing Frequency [Hz]')
|
|
#plt.legend()
|
|
#bolzmann_onset
|
|
# ax.set_title(data_name[0:14], fontsize=8, color=color_title)
|
|
if logs[l] == 'log':
|
|
ax.set_xscale(logs[l])
|
|
else:
|
|
ax.axvline(0, color='grey', linestyle='--', linewidth=0.5)
|
|
#embed()
|
|
if l == 0:
|
|
ax.legend(ncol=2, loc=(0, 1.05))
|
|
#ax.legend(ncol=2, loc=(-0.5, 1.05))
|
|
ax.set_ylabel('Firing Frequency [Hz]')
|
|
else:
|
|
remove_yticks(ax)
|
|
#if nn == 0:
|
|
# remove_xticks(ax)
|
|
elif my_curves == 'chirp':
|
|
results = []
|
|
onset_state, steady_state, sorted_contrast, steady, onset, indices, mean_indices = np.load(load_folder_name('calc_FI_Curve')+'/F_I_curve-distances5st_nm_w2_dm_alpha_consp2_bnr6_ROCsFI_cells.npy',allow_pickle=True)
|
|
cells = onset_state.keys()
|
|
#for cell in cells:
|
|
# if os.path.exists(load_folder_name('data')+'cells/'+cell):
|
|
# print(cell)
|
|
ax = plt.subplot(gridr[0])
|
|
|
|
ax.plot(sorted_contrast[data_name],
|
|
steady_function(sorted_contrast[data_name], steady[data_name][0], steady[data_name][1],
|
|
steady[data_name][2]),zorder = 1,
|
|
label='Fitted function for the steady F-I Cure', color='black')
|
|
ax.plot(sorted_contrast[data_name],
|
|
onset_function(sorted_contrast[data_name], onset[data_name][0], onset[data_name][1], onset[data_name][2]),
|
|
label='Fitted function for the onset F-I Cure', zorder = 1, color='black')
|
|
s = 30
|
|
|
|
|
|
steady_val = np.array(steady_state[data_name])[sorted_contrast[data_name] == val]
|
|
onset_val = np.array(onset_state[data_name])[sorted_contrast[data_name] == val]
|
|
|
|
ax.scatter(sorted_contrast[data_name], onset_state[data_name], s=s, clip_on=False,
|
|
color=coloro, zorder=120, alpha=0.5) # color='black',
|
|
ax.scatter(sorted_contrast[data_name], steady_state[data_name], s=s, clip_on=False,
|
|
color=colors, zorder=120, alpha=0.5) # color='grey',
|
|
ax.scatter(sorted_contrast[data_name][sorted_contrast[data_name] == val], onset_val,
|
|
s=s, color=coloro,
|
|
clip_on=False, zorder=100,alpha=1, edgecolor='black')
|
|
ax.scatter(sorted_contrast[data_name][sorted_contrast[data_name] == val],
|
|
steady_val, s=s, color=colors,
|
|
clip_on=False, zorder=100,alpha=1, edgecolor='black')
|
|
# embed()
|
|
ax.set_yticks_delta(delta)
|
|
print('onsetsnip' + str(onset_val))
|
|
print('steadysnip' + str(steady_val))
|
|
else:
|
|
data = pd.read_csv('../data/Kennlinien/cell_fi_curves_csvs/' + cell + '.csv')
|
|
''' df_cell['inputs'].iloc[0]
|
|
df_cell['on_r'].iloc[0]
|
|
df_cell['ss_r'].iloc[0]
|
|
df_cell['on_s'].iloc[0]
|
|
df_cell['ss_s'].iloc[0]
|
|
data['contrasts']'''
|
|
# embed()
|
|
sort_data = np.argsort(data['contrasts'])
|
|
#data, model, n, nn, sort_data, sort_model = load_fi_curves_alex(cell, df_cell, n,
|
|
# nn, results)
|
|
plt.scatter(data['contrasts'][sort_data],
|
|
(data['f_onset'][sort_model] - ymin) / ymax,
|
|
color = 'black', s = 7, zorder = 2)
|
|
colors = ['green', 'blue', 'orange', 'pink', 'purple', 'red']
|
|
plt.xlabel('Contrast [%]')
|
|
plt.ylabel('Firing Rate [Hz]')
|
|
# if c_counter > row * col - col:
|
|
ax.set_xlabel('Contrast [$\%$]')
|
|
ax.set_ylabel('Firing Rate [Hz]')
|
|
axes.append(ax)
|
|
# if c_counter in np.arange(0, 100, col):
|
|
|
|
#ax.set_xscale('log')
|
|
##############################
|
|
|
|
spike_mats = []
|
|
smootheneds = []
|
|
for idx, mt_idx in enumerate(indeces_show): # range(len(mt.positions[:]))
|
|
print(idx)
|
|
|
|
gridl = gridspec.GridSpecFromSubplotSpec(3, 1, subplot_spec=grid0[0],
|
|
hspace=0.1, wspace = 0.35)
|
|
|
|
# embed()
|
|
|
|
# number_of_intensities = t.metadata.sections[0].sections['settings']['nints']
|
|
# contrasts, contrast_labels = find_features(mt, number_of_intensities)
|
|
# all_spikes = mt.references['Spikes-1'][:]
|
|
# features, delay_name = feature_extract(mt)
|
|
# embed()
|
|
try:
|
|
delay_orig = mt.features[delay_name].data[:][mt_idx][0]
|
|
except:
|
|
delay_orig = mt.features[delay_name].data[:][mt_idx]
|
|
delay = delay_and_reality_alignment(mt, mt.extents[mt_idx], mt_idx,
|
|
mt.extents[mt_idx])
|
|
|
|
negativ = 0.5
|
|
if delay < negativ:
|
|
negativ = delay
|
|
if negativ < 0:
|
|
negativ = delay_orig
|
|
|
|
if mt_idx != len(mt.extents) - 1:
|
|
try:
|
|
positive = delay_and_reality_alignment(mt, mt.extents[mt_idx + 1],
|
|
mt_idx + 1,
|
|
mt.extents[mt_idx + 1])
|
|
except:
|
|
print('positiv thing')
|
|
embed()
|
|
positive = 0.5
|
|
if delay < positive:
|
|
positive = delay
|
|
else:
|
|
positive = delay
|
|
|
|
# ich glaube da gibts porbleme wenn das mt davor oder danach negativ war
|
|
# deswegen werden beide in dem fall einfach zum delay!
|
|
if positive < 0:
|
|
# print('positive thing')
|
|
# embed()
|
|
positive = negativ * 1
|
|
if positive < 0:
|
|
positive = delay_orig
|
|
print('positive thing')
|
|
embed()
|
|
|
|
duration = mt.extents[mt_idx][0]
|
|
|
|
if (mt.extents[mt_idx] > 0):
|
|
f_snippet = np.min([duration / 2, negativ, positive])
|
|
if f_snippet < 0:
|
|
print('snippet thing')
|
|
embed()
|
|
if f_snippet > 0.1:
|
|
start_time = mt.positions[mt_idx] - negativ
|
|
end_time = start_time + duration + positive
|
|
eod_g, spikes_mt, sampling = link_arrays(b, start_time,
|
|
duration + negativ + positive,
|
|
start_time,
|
|
load_eod_array='LocalEOD-1')#'EOD'
|
|
spike_mats.append(spikes_mt)
|
|
# eod_g, spikes_mt, sampling = link_arrays(b, start_time,
|
|
# duration + negativ + positive,
|
|
# start_time,
|
|
# load_eod_array='EOD')
|
|
# link_arrays_eod
|
|
v1, sampling = link_arrays_eod(b, start_time,
|
|
duration + negativ + positive,
|
|
array_name='V-1')
|
|
eod_field, sampling = link_arrays_eod(b, start_time,
|
|
duration + negativ + positive,
|
|
array_name='GlobalEFieldStimulus')
|
|
|
|
# embed()
|
|
# embed()
|
|
spikes_mat = cr_spikes_mat(spikes_mt, sampling, int((mt.extents[
|
|
mt_idx] + negativ + positive) * sampling))
|
|
smoothened = gaussian_filter(spikes_mat, sigma=0.001 * sampling)
|
|
smootheneds.append(smoothened)
|
|
# embed()
|
|
dt = 1 / sampling
|
|
time_array = np.arange(0, len(smoothened) * dt, dt) - negativ
|
|
ratetime = np.arange(time_array[0], time_array[-1], 0.001)
|
|
axs = []
|
|
xlim = [-0.02, 0.04]
|
|
xlim = [-0.1*1000, 0.5*1000]
|
|
# ax = plt.subplot(gridl[0])
|
|
# axs.append(ax)
|
|
# ax.set_xlim(xlim)
|
|
# ax.plot(time_array,smoothened)
|
|
#
|
|
# ax.set_ylabel('FR')
|
|
# remove_yticks(ax)
|
|
# remove_xticks(ax)
|
|
|
|
###########################
|
|
ax = plt.subplot(gridl[0])
|
|
axes.append(ax)
|
|
ax.set_xlim(xlim)
|
|
time_array = np.arange(0, len(eod_g) * dt, dt) - negativ
|
|
#eod_g = np.sin()
|
|
|
|
time_fish_e = time_array * 2 * np.pi * 750#eod_fe[e]
|
|
eod_g = 100 * np.sin(time_fish_e)
|
|
#embed()
|
|
eod_g[(time_array > 0) & (time_array <0.4)] = eod_g[(time_array > 0) & (time_array <0.4)]*((100+val)/100)
|
|
ax.plot(time_array*1000, eod_g, color='grey', linewidth=0.5)#0.2
|
|
#ax.eventplot((spikes_mt - negativ), lineoffsets=np.mean(eod_g),
|
|
# color='black') # np.max(v1)*
|
|
|
|
axs.append(ax)
|
|
ax.set_ylabel('Contrast [$\%$]')
|
|
remove_xticks(ax)
|
|
ax.show_spines('l')
|
|
#ax.text(0.5,1,'contrast$=%s$\,Hz'%(val), ha = 'right', transform=ax.transAxes)
|
|
ax.set_title('Contrast\,$=%s$' % (val)+'\,$\%$')
|
|
|
|
#remove_yticks(ax)
|
|
# remove_xticks(ax)
|
|
|
|
###########################
|
|
ax = plt.subplot(gridl[1])
|
|
flip = False
|
|
#if flip:
|
|
# ax.set_title(str(-np.round(contrasts_show[idx])) + ' %')
|
|
#else:
|
|
# ax.set_title(str(np.round(contrasts_show[idx])) + ' %')
|
|
axs.append(ax)
|
|
ax.set_xlim(xlim)
|
|
time_array = np.arange(0, len(v1) * dt, dt) - negativ
|
|
#ax.plot(time_array, v1)
|
|
ax.eventplot((spike_mats - negativ)*1000, color='black', linewidths=0.3)
|
|
#ax.eventplot((spike_mats - negativ)*1000, lineoffsets=np.max(v1),
|
|
# color='black',orientation='horizontal',linelengths=0.8, linewidths=1) # np.max(v1)*
|
|
ax.show_spines('l')
|
|
# ax.eventplot((spikes_mt - negativ), lineoffsets=np.mean(eod_g),
|
|
# color='black') # np.max(v1)*
|
|
ax.set_ylabel('Trials')
|
|
remove_xticks(ax)
|
|
|
|
# ax = plt.subplot(gridl[3])
|
|
# ax.set_xlim(xlim)
|
|
# ax.plot(time_array, eod_mt_l, color = 'grey',linewidth = 0.5)
|
|
# ax.eventplot((spikes_mt - negativ), lineoffsets=np.mean(eod_mt_l),
|
|
# color='black') # np.max(v1)*
|
|
|
|
# axs.append(ax)
|
|
# ax.set_ylabel('Local EOD')
|
|
# remove_yticks(ax)
|
|
# remove_xticks(ax)
|
|
|
|
# ax = plt.subplot(gridl[4])
|
|
# remove_yticks(ax)
|
|
# axs.append(ax)
|
|
# ax.eventplot((spikes_mt - negativ), lineoffsets=np.mean(eod_field),
|
|
# color='black') # np.max(v1)*
|
|
# ax.set_ylabel('Efield')
|
|
###########################
|
|
ax = plt.subplot(gridl[-1])
|
|
ax.set_xlabel('Time [ms]')
|
|
ax.set_ylabel('Firing Rate [Hz]')
|
|
#embed()
|
|
smoothed_mean = np.mean(smootheneds, axis = 0)
|
|
time_cut = time_array[0: len(np.mean(smootheneds, axis = 0))]*1000
|
|
ax.plot(time_cut, smoothed_mean, color = 'black')
|
|
ax.set_xlim(xlim)
|
|
#embed()
|
|
ax.axhline(np.mean(smoothed_mean[time_cut <1]), color = 'grey', linewidth = 0.5)
|
|
# start_fi_o(), end_fi_o(),start_fi_s(),end_fi_s()
|
|
ax.set_yticks_delta(delta)
|
|
minus = 15
|
|
onset_snip = smoothed_mean[(time_cut >start_fi_o()) & (time_cut <end_fi_o()-minus)]
|
|
steady_snip = smoothed_mean[(time_cut > (300+start_fi_s())) & (time_cut < (300 +end_fi_s()))]
|
|
print('onsetsnip'+str(np.mean(onset_snip)))
|
|
print('steadysnip'+str(np.mean(steady_snip)))
|
|
ax.plot(time_cut[(time_cut >start_fi_o()) & (time_cut <end_fi_o()-minus)], onset_snip, color = coloro)
|
|
ax.plot(time_cut[(time_cut > (300+start_fi_s())) & (time_cut < (300 +end_fi_s()))],
|
|
steady_snip,
|
|
color=colors)
|
|
|
|
#ax.axvline(, color = 'grey', linewidth = 0.7)
|
|
#ax.axvline(end_fi_o(), color = 'grey', linewidth = 0.7)
|
|
#ax.axvline(300+start_fi_s(), color='grey', linewidth=0.7)
|
|
#ax.axvline(300 end_fi_s(), color='grey', linewidth=0.7)
|
|
# ax.set_xlim(xlim)
|
|
#ax.plot(time_array[time_array < 0],
|
|
# np.ones(len(time_array[time_array < 0])) * np.mean(eod_field),
|
|
# color='red')
|
|
#ax.plot(time_array[(time_array > 0) & (time_array < 0.2)], np.ones(
|
|
# len(time_array[(time_array > 0) & (time_array < 0.2)])) * np.mean(
|
|
# eod_field), color='lightgreen')
|
|
|
|
# ax.plot(time_array, eod_field, color = 'grey',linewidth = 0.5)
|
|
#ax.get_shared_x_axes().join(*axs)
|
|
#plt.suptitle(data_name)
|
|
|
|
|
|
c_counter += 1
|
|
|
|
# save_visualization(show)
|
|
print(show)
|
|
fig = plt.gcf()
|
|
fig.tag(axes[::-1], xoffs = -3.5, yoffs = 1.8)
|
|
save_visualization(
|
|
data_name + '_idx_' + str(mt_idx) + '_contrast_' + str(contrasts[mt_idx]),
|
|
show)
|
|
|
|
print('finished plotting')
|
|
|
|
|
|
def plt_model_big(ax, ls = '--', lw = 0.5, cell = '2012-07-03-ak-invivo-1'):
|
|
trial_nr = 1000000
|
|
#cell = '2013-01-08-aa-invivo-1'
|
|
|
|
cells_given = [cell]
|
|
#'calc_RAM_model-2__nfft_whole_power_1_afe_0.009_RAM_RAM_additiv_cv_adapt_factor_scaled_cNoise_0.1_cSig_0.9_cutoff1_300_cutoff2_300no_sinz_length1_TrialsStim_1000000_a_fr_1__trans1s__TrialsNr_1_fft_o_forward_fft_i_forward_Hz_mV',
|
|
#'calc_RAM_model-2__nfft_whole_power_1_RAM_additiv_cv_adapt_factor_scaled_cNoise_0.1_cSig_0.9_cutoff1_300_cutoff2_300no_sinz_length1_TrialsStim_' + str(trial_nr) + '_a_fr_1__trans1s__TrialsNr_1_fft_o_forward_fft_i_forward_Hz_mV'
|
|
save_name_rev = load_folder_name(
|
|
'calc_model') + '/' + 'calc_RAM_model-2__nfft_whole_power_1_RAM_additiv_cv_adapt_factor_scaled_cNoise_0.1_cSig_0.9_cutoff1_300_cutoff2_300no_sinz_length1_TrialsStim_' + str(
|
|
trial_nr) + '_a_fr_1__trans1s__TrialsNr_1_fft_o_forward_fft_i_forward_Hz_mV_revQuadrant_'
|
|
save_name = load_folder_name(
|
|
'calc_model') + '/' + 'calc_RAM_model-2__nfft_whole_power_1_RAM_additiv_cv_adapt_factor_scaled_cNoise_0.1_cSig_0.9_cutoff1_300_cutoff2_300no_sinz_length1_TrialsStim_' + str(
|
|
trial_nr) + '_a_fr_1__trans1s__TrialsNr_1_fft_o_forward_fft_i_forward_Hz_mV'
|
|
cell_add, cells_save = find_cell_add(cells_given)
|
|
perc = 'perc'
|
|
path_rev = save_name_rev + '.pkl' # '../'+
|
|
path = save_name + '.pkl' # '../'+
|
|
path_rev = 'model_full_nfft_whole_p_1_RAM_additiv_cv_adapt_factor_scaled_cNoise_0.1_cSig_0.9_cutoff1_300_cutoff2_300no_sinz_length1_TS_1000000_a_fr_1__TrialsNr_1__revQuadrant_2012-07-03-ak-invivo-1.csv'
|
|
path = 'model_full_nfft_whole_p_1_RAM_additiv_cv_adapt_factor_scaled_cNoise_0.1_cSig_0.9_cutoff1_300_cutoff2_300no_sinz_length1_TS_1000000_a_fr_1__TrialsNr_1_2012-07-03-ak-invivo-1.csv'
|
|
stack_rev = get_stack_one_quadrant(cell, cell_add, cells_save, path_rev, save_name_rev, direct_load = True)
|
|
|
|
stack = get_stack_one_quadrant(cell, cell_add, cells_save, path, save_name, direct_load = True)
|
|
full_matrix = create_full_matrix2(np.array(stack), np.array(stack_rev))
|
|
stack_final = get_axis_on_full_matrix(full_matrix, stack)
|
|
im = plt_RAM_perc(ax, perc, np.abs(stack_final))
|
|
set_xlabel_arrow(ax, xpos=1, ypos=-0.07)
|
|
set_ylabel_arrow(ax, xpos=-0.07, ypos=0.97)
|
|
cbar, left, bottom, width, height = colorbar_outside(ax, im, add=5, width=0.01)
|
|
cbar.set_label(nonlin_title(add_nonlin_title=' ['), rotation=90, labelpad=8)
|
|
ax.axhline(0, color='white', linewidth=lw, linestyle=ls)
|
|
ax.axvline(0, color='white', linewidth=lw, linestyle=ls)
|
|
return perc, im, stack_final
|
|
|
|
|
|
def FI_curves_plot(contrast_labels, onset_function, onset_state, steady_function, steady_state, label = 'Fitted function for the onset F-I Cure'):
|
|
|
|
plt_FI_curve(contrast_labels, steady_function, steady_state)
|
|
|
|
plt.scatter(contrast_labels, onset_state, color='black')
|
|
params_o, params_covariance = optimize.curve_fit(onset_function, contrast_labels, onset_state, bounds=(
|
|
[0, -np.inf, - np.inf], [np.max(onset_state) * 4, np.inf, np.inf]))
|
|
|
|
plt.plot(contrast_labels, onset_function(contrast_labels, params_o[0], params_o[1], params_o[2]),
|
|
label=label, color='black')
|
|
plt.ylim([0, 720])
|
|
#plt.title(data_name[0:13])
|
|
#plt.xticks(size=tick_size)
|
|
#plt.yticks(size=tick_size)
|
|
|
|
plt.xlabel('Contrasts [%]', labelpad=10)
|
|
plt.ylabel('Firing Frequency [Hz]')
|
|
plt.legend(['Steady State Curve', 'Onset State Curve'])
|
|
|
|
|
|
def plt_FI_curve(contrast_labels, steady_function, steady_state, color = 'grey', label = 'Fitted function for the steady F-I Cure'):
|
|
plt.scatter(contrast_labels, steady_state, color='grey')
|
|
params_s, params_covariance = optimize.curve_fit(steady_function, contrast_labels, steady_state, bounds=(
|
|
[0, -np.inf, - np.inf], [np.max(steady_state) * 4, np.inf, np.inf]))
|
|
plt.plot(contrast_labels, steady_function(contrast_labels, params_s[0], params_s[1], params_s[2]),
|
|
label=label, color=color)
|
|
|
|
|
|
def second_saturation_freq():
|
|
return (39.5,
|
|
-10.5)
|
|
|
|
|
|
def time_nonlin_first_sine(sampling = 20000,f0 = 40, duration = 0.1):
|
|
|
|
delta = 1 / sampling
|
|
time_array = np.arange(0, duration, 1 / sampling)
|
|
|
|
time_s = time_array * 2 * np.pi * f0
|
|
sine = np.sin(time_s)
|
|
return delta, f0, sine, time_array
|
|
|
|
|
|
def second_sine(f0, time_array, amp = 1.25, phase = 1):
|
|
time_s = time_array * 2 * np.pi * f0
|
|
sine = amp * np.sin(time_s + phase)
|
|
return sine
|
|
|
|
|
|
def rectangle_plot(ax, lw, ws):
|
|
rectangle = plt.Rectangle((0, 0), 20, 20, fc='black', ec="black")
|
|
ax[1].add_patch(rectangle)
|
|
# ax[1].axis('scaled')
|
|
ax[1].annotate('', ha='center', xycoords='axes fraction',
|
|
xy=(1 + ws, 0.5), textcoords='axes fraction',
|
|
xytext=(1, 0.5),
|
|
arrowprops={"arrowstyle": "->",
|
|
"linestyle": "-",
|
|
"linewidth": lw,
|
|
"color":
|
|
'black'},
|
|
zorder=1, annotation_clip=False, transform=ax[0].transAxes, )
|
|
ax[1].set_title('$H\{s(t)\}$')
|
|
ax[1].show_spines('')
|
|
|
|
|
|
def base_csvs_save(cell, frame=[], load_folder='calc_base'):
|
|
if len(frame)<1:
|
|
path_sascha = load_folder_name('calc_base') + '/' + 'calc_base_data-base_frame_nfftmedium__overview.pkl'
|
|
frame = pd.read_pickle(path_sascha)
|
|
frame_c = frame[frame.cell == cell]
|
|
frame_cell = pd.DataFrame()
|
|
# if os.path.exists(eod_path):
|
|
# frame_cell['eod'] = eods
|
|
# embed()
|
|
spikes_all, isi, frs_calc, spikes_cont = load_spikes(np.array(frame_c.spikes.iloc[0]), 1, ms_factor=1)
|
|
spikes_all, pos_reshuffled = reshuffle_spike_lengths(spikes_all)
|
|
save_spikestrains_several(frame_cell, spikes_all)
|
|
# frame_cell['spikes'] = frame_c.spikes.iloc[0][0][0]
|
|
# burst_corr
|
|
frame_cell['fr'] = frame_c.fr.iloc[0]
|
|
# print(spikes_selected.file_name2.iloc[0])
|
|
# frame_cell['file_name'] = spikes_selected.file_name2.iloc[0]
|
|
if len(np.shape(frame_c['freq_steps_medium'].iloc[0])) == 2:
|
|
vars = [frame_c['EODfs_medium'].iloc[0][0], frame_c['freq_steps_medium'].iloc[0][0],
|
|
frame_c['EODfs'].iloc[0][0], frame_c['freq_steps_trial'].iloc[0][0]]
|
|
elif len(np.shape(frame_c['freq_steps_medium'].iloc[0])) == 1:
|
|
vars = [frame_c['EODfs_medium'].iloc[0], frame_c['freq_steps_medium'].iloc[0],
|
|
frame_c['EODfs'].iloc[0], frame_c['freq_steps_trial'].iloc[0]]
|
|
elif len(np.shape(frame_c['freq_steps_medium'].iloc[0])) == 3:
|
|
vars = [frame_c['EODfs_medium'].iloc[0][0][0], frame_c['freq_steps_medium'].iloc[0][0][0],
|
|
frame_c['EODfs'].iloc[0][0][0], frame_c['freq_steps_trial'].iloc[0][0][0]]
|
|
names = ['EODf_res','freq_step_res', 'EODf', 'freq_step_trial']
|
|
frame_cell = reshuffle_eodfs(frame_cell, names, pos_reshuffled, vars)
|
|
lim = find_lim_here(cell, 'individual')
|
|
#embed()
|
|
frame_cell['burst_corr_individual'] = float('nan')
|
|
frame_cell['burst_corr_individual'].iloc[0] = lim
|
|
frame_cell['sampling'] = frame_c.sampling.iloc[0]
|
|
frame_cell['cell'] = frame_c.cell.iloc[0]
|
|
frame_cell['eod_fr'] = frame_c.EODf.iloc[0]
|
|
# frame_cell = save_spikes_csv(eod_selected, spikes, spikes_selected)
|
|
save = True#.iloc[0]
|
|
if save:
|
|
frame_cell.to_csv(load_folder+'/base_csvs_save-spikesonly_' + cell + '.csv')
|
|
del frame
|
|
del frame_cell
|
|
return frame_c
|
|
|
|
|
|
def reshuffle_eodfs(frame_cell, names, pos_reshuffled, vars, res_name = 'arbitrary'):
|
|
# stack_sp = []
|
|
stack_sp = {}
|
|
for v, var in enumerate(vars):
|
|
if (res_name not in names[v]) & ('all' not in names[v]):
|
|
try:
|
|
var = np.array(var)[pos_reshuffled]
|
|
except:
|
|
print('reshuffle thing')
|
|
stack_sp = resave_vars_corr(names, res_name, stack_sp, v, var)
|
|
for key in stack_sp:
|
|
if key not in frame_cell.keys():
|
|
frame_cell[key] = np.float('nan')
|
|
try:
|
|
frame_cell[key].loc[0] = stack_sp[key] # .iloc[0]
|
|
except:
|
|
print('sequence thing')
|
|
embed()
|
|
return frame_cell
|
|
|
|
|
|
def save_spikestrains_several(frame_cell, spikes_all):
|
|
for ss, sp in enumerate(spikes_all):
|
|
try:
|
|
frame_cell['spikes' + str(ss)] = sp # frame_c.spikes.iloc[0][0][0]
|
|
except:
|
|
frame_cell['spikes' + str(ss)] = float('nan')
|
|
frame_cell['spikes' + str(ss)].iloc[0:len(sp)] = sp
|
|
print('spikes something')
|
|
return frame_cell
|
|
|
|
|
|
def reshuffle_spike_lengths(spikes_all):
|
|
lengths = []
|
|
for r in spikes_all:
|
|
lengths.append(len(r))
|
|
pos_reshuffled = np.argsort(lengths)[::-1]
|
|
spikes_all = np.array(spikes_all)[pos_reshuffled]
|
|
return spikes_all,pos_reshuffled
|
|
|
|
|
|
def rename(model_folder, dir_prev,dir_new, function_name = 'calc_phaselocking-'):
|
|
# damit das nicht mehrmals passiert
|
|
not_renamed = True
|
|
if (function_name not in dir_prev) | (function_name == ''):
|
|
change_to = model_folder + '/' + function_name + dir_new
|
|
|
|
#if 'calc_base' in model_folder:
|
|
# embed()
|
|
if not os.path.exists(change_to):
|
|
try:
|
|
os.rename(model_folder + '/' + dir_prev, change_to)
|
|
except:
|
|
print('some problem renaming')
|
|
embed()
|
|
not_renamed = False
|
|
else:
|
|
print('already there:',model_folder + '/' + dir_prev, 'to',change_to)
|
|
not_renamed = True
|
|
else:
|
|
change_to = model_folder + '/' + function_name + dir_prev
|
|
|
|
return not_renamed,change_to
|
|
|
|
|
|
def title_motivation():
|
|
|
|
titles = ['$f_{EOD}$',
|
|
'$f_{EOD} + f_{1}$',
|
|
'$f_{EOD} + f_{2}$',
|
|
|
|
'$f_{EOD} + f_{1} + f_{2}$',
|
|
[]] ##'receiver + ' + 'receiver + receiver
|
|
titles = ['$f_{EOD}$',
|
|
'$f_{EOD}$ \& $f_{1}$',
|
|
'$f_{EOD}$ \& $f_{2}$',
|
|
|
|
'$f_{EOD}$ \& $f_{1}$ \& $f_{2}$',
|
|
[]] ##'receiver + ' + 'receiver + receiver
|
|
return titles
|
|
|
|
|
|
def exp_params(exp_tau, exponential, v_exp):
|
|
if exponential == '':
|
|
v_exp = 1
|
|
exp_tau = 0.001
|
|
elif exponential == 'EIF':
|
|
v_exp = np.array([0, 0.5, 1, 1.5])
|
|
exp_tau = np.array([0.0001, 0.00005, 0.001, 0.0002, 0.0003, 0.0005, 0.0007, 0.01, 0.1, 1, 10, 1000, ])
|
|
v_exp = np.array([0])
|
|
exp_tau = np.array([0.001, 0.01, 0.1]) # 10
|
|
elif exponential == 'CIF':
|
|
v_exp = np.array([0, 0.5, 1, 1.5, 2, 0.2, -0.5, -1]) #
|
|
exp_tau = np.array([0]) # 10
|
|
return exp_tau, v_exp
|
|
|
|
|
|
def filter_square_params(c_grouped, cell_here, df_desired, frame, frame_cell_orig):
|
|
new_f2_tuple = frame_cell_orig[['df2', 'f2']].apply(tuple, 1).unique()
|
|
dfs = [tup[0] for tup in new_f2_tuple]
|
|
sorted = np.argsort(np.abs(dfs))
|
|
new_f2_tuple = new_f2_tuple[sorted]
|
|
dfs = np.array(dfs)[sorted]
|
|
dfs_new = dfs[(dfs > 0) & (dfs < df_desired + 100)]
|
|
f2s = [tup[1] for tup in new_f2_tuple]
|
|
frame_cell = frame[(frame.cell == cell_here)] # & (frame[c_here] == c_h)]
|
|
frame_cell, df1s, df2s, f1s, f2s = find_dfs(frame_cell)
|
|
diffs = find_deltas(frame_cell, c_grouped[0])
|
|
frame_cell = find_diffs(c_grouped[0], frame_cell, diffs, add='_original')
|
|
new_frame = frame_cell.groupby(['df1', 'df2'], as_index=False).sum() # ['score']
|
|
matrix = new_frame.pivot(index='df2', columns='df1', values='diff')
|
|
return frame_cell, matrix
|
|
|
|
|
|
def plt_square_here3(ax, frame, score_here, c_nr=0.1, cls="RdBu_r", c_here='c1'):
|
|
cs = frame[c_here].unique()
|
|
c_chosen = cs[np.argmin(np.abs(cs - c_nr))]
|
|
frame_cell = frame[(frame[c_here] == c_chosen)] # & (frame[c_here] == c_h)]
|
|
frame_cell = frame_cell[~ (frame_cell.f1 == frame_cell.f2)]
|
|
frame_cell, df1s, df2s, f1s, f2s = find_dfs(frame_cell)
|
|
new_frame = frame_cell.groupby(['df1', 'df2'], as_index=False).mean() # ['score']
|
|
matrix = new_frame.pivot(index='df2', columns='df1', values=score_here)
|
|
|
|
# embed()
|
|
try:
|
|
im = ax.pcolormesh(
|
|
np.array(list(map(float, matrix.columns))), np.array(matrix.index),
|
|
matrix,
|
|
cmap=cls,
|
|
rasterized=False) # 'Greens'#vmin=np.percentile(np.abs(stack_plot), 5),vmax=np.percentile(np.abs(stack_plot), 95),
|
|
except:
|
|
print('ims probelem')
|
|
embed()
|
|
|
|
return im, matrix
|
|
|
|
|
|
def roc_filename2():
|
|
return 'calc_ROC_contrasts-ROCmodel_contrasts1_diagonal1_FrF1rel_0.33_FrF2rel_0.67_C2_0.1_LenNrs_20_1Nrs_0.0001_LastNrs_0.1_len_25_nfft_32768_trialsnr_1000_mult_minimum_1temporal'
|
|
|
|
|
|
def roc_filename1():
|
|
return 'calc_ROC_contrasts-ROCmodel_contrasts1_diagonal1_FrF1rel_0.33_FrF2rel_0.67_C2_0.1_LenNrs_20_1Nrs_0.0001_LastNrs_0.1_len_25_nfft_32768_trialsnr_100_mult_minimum_1temporal'
|
|
|
|
|
|
def roc_filename0():
|
|
return 'calc_ROC_contrasts-ROCmodel_contrasts1_diagonal1_FrF1rel_0.33_FrF2rel_0.67_C2_0.1_LenNrs_20_1Nrs_0.0001_LastNrs_0.1_len_25_nfft_32768_trialsnr_20_mult_minimum_1temporal'
|
|
#'calc_ROC_contrasts-ROCmodel_contrasts1_diagonal1_FrF1rel_0.33_FrF2rel_0.67_C2_0.1_LenNrs_20_1Nrs_0.0001_LastNrs_1.0_len_25_nfft_32768_trialsnr_' + trial_nr + '_mult_minimum_1temporal',
|
|
|
|
|
|
def isi_xlabel():
|
|
return '1/$f_{EOD}$'
|
|
|
|
|
|
def get_global_eod_for_eodf(b, duration, mt, mt_nr_small):
|
|
try:
|
|
# global_eod = mt.retrieve_data(mt_nr_small, 'EOD')[:]
|
|
|
|
global_eod, sampling = link_arrays_eod(b, mt.positions[:][mt_nr_small], duration, 'EOD')
|
|
# spikes = link_arrays_spikes(b, mt.positions[:][mt_nr_small], mt.extents[:][mt_nr_small],
|
|
# mt.positions[:][mt_nr_small])
|
|
|
|
# global_eod, sampling = link_arrays_eod(b, mt.positions[:][mt_nr_small], 0.1,
|
|
# mt.positions[:][mt_nr_small], 'EOD')
|
|
|
|
except:
|
|
|
|
try:
|
|
global_eod, sampling = link_arrays_eod(b, mt.positions[:][mt_nr_small], duration,
|
|
'EOD-1')
|
|
|
|
except:
|
|
b_names = get_data_array_names(b)
|
|
for b_name in b_names:
|
|
if 'eod' in b_name:
|
|
print('EOD 1 prob')
|
|
embed()
|
|
#eod_fr = float('nan')
|
|
sampling = 0
|
|
return global_eod, sampling
|
|
|
|
|
|
def get_eodf_here(b, eodf_orig, global_eod, mt_nr_small, nfft_eod, sampling):
|
|
if sampling > 0:
|
|
if len(global_eod) / sampling > 0.1:
|
|
# names = get_data_array_names(b)
|
|
try:
|
|
if len(eodf_orig) > 0:
|
|
try:
|
|
eod_fr_orig = eodf_orig.iloc[mt_nr_small]
|
|
except:
|
|
eod_fr_orig = eodf_orig[mt_nr_small]
|
|
else:
|
|
eod_fr_orig = eodf_orig
|
|
eod_fr, p, f = get_eodf(global_eod, b, eod_fr_orig, mt_nr_small, nfft_eod=nfft_eod)
|
|
except:
|
|
print('still eodf problem')
|
|
embed()
|
|
else:
|
|
eod_fr = float('nan')
|
|
else:
|
|
eod_fr = float('nan')
|
|
return eod_fr
|
|
|
|
|
|
def get_eodf(global_eod, b, eodf_orig, mt_nr_small, nfft_eod=2 ** 16):
|
|
if len(global_eod) > 0:
|
|
sampling_rate = get_sampling(b, load_eod_array='EOD')
|
|
# sampling_rate = 40000
|
|
eod_fr, p, f = calc_freq_from_psd(global_eod, sampling_rate, nfft=nfft_eod) # v
|
|
else:
|
|
p = None
|
|
f = None
|
|
if eodf_orig:
|
|
eod_fr = eodf_orig
|
|
else:
|
|
eod_fr = float('nan')
|
|
# embed()
|
|
|
|
if eodf_orig:
|
|
if not np.isnan(eodf_orig):
|
|
if (np.max(np.array(eodf_orig)) > 300) & (np.min(np.array(eodf_orig)) < 1000):
|
|
eodf_orig = np.array(eodf_orig)
|
|
if np.abs(eod_fr - eodf_orig) > 25:
|
|
# sampling_rate = 40000##todo: eventuel hier das sampling anpasen
|
|
sampling_rate = get_sampling(b, load_eod_array='EOD')
|
|
|
|
# ok hier checke ich nochmal ob diese Effekte stabil sind
|
|
frequency_saves, frequency = nfft_improval(sampling_rate, eodf_orig,
|
|
global_eod, eod_fr)
|
|
|
|
if np.min(np.abs(frequency_saves - eodf_orig)) > 300:
|
|
print('EODf diff too big')
|
|
# also hier sage ich wenn alle immer noch das gleiche sagen dann passt das schon
|
|
# embed()
|
|
test = False
|
|
if test:
|
|
fig, ax = plt.subplots(3, 1)
|
|
ax[0].plot(global_eod)
|
|
ax[1].plot(eodf_orig)
|
|
ax[1].plot(eodf)
|
|
ax[2].plot(f, p)
|
|
plt.show()
|
|
|
|
if np.min(np.abs(frequency_saves - eodf_orig)) < 10:
|
|
# und hier sage ich wenn es doch unterschiede gibt dann wähle das minimum
|
|
eod_fr = frequency_saves[np.argmin(np.abs(frequency_saves - eodf_orig))]
|
|
# print('EODf diff solvable')
|
|
# embed()
|
|
# print('EODf diff too big')
|
|
if (eod_fr > 1000) & (eod_fr < 350): # das ist unmöglich
|
|
# wenn es unmöglich ist nehmen wir wieder die ursprüngliche Abschätzung
|
|
# embed()
|
|
eod_fr = eodf_orig
|
|
|
|
# print(eod_fr)
|
|
test = False
|
|
if test:
|
|
plt.plot(f, p)
|
|
# fish_number_base = remove_interspace_fish_nr(fish_number)
|
|
# eods_glb, _ = create_eods_arrays_v2(eod_global, fish_cuts, cut=0, rec=False,
|
|
# fish_number=fish_type, fillup=True, fish_number_base=fish_type)
|
|
return eod_fr, p, f
|
|
|
|
|
|
def calc_freq_from_psd(noise_eod, eod_sampling_frequency, nfft=2 ** 16):
|
|
p, f = ml.psd(noise_eod - np.mean(noise_eod), Fs=eod_sampling_frequency, NFFT=nfft, noverlap=nfft // 2)
|
|
eod_fr = f[np.argmax(p)]
|
|
zero_crossings_time_adapted = []
|
|
zero_crossings_eod = []
|
|
return eod_fr, p, f
|
|
|
|
|
|
def nfft_improval(sampling_rate, frequency_orig, global_stimulus, frequency,
|
|
nffts=[2 ** 16, 2 ** 15, 2 ** 14, 2 ** 13]):
|
|
# print('freq diff')
|
|
# , 2 ** 12
|
|
# diesen Teil gibt es wegen einer Zelle, da finde ich das nfft was am nächsten zu der Urpsurngsfrequnez ist
|
|
# 2019-10-21-aj-invivo-1
|
|
frequency_saves = []
|
|
for nfft_here in nffts:
|
|
frequency_save, p, f = calc_freq_from_psd(global_stimulus, sampling_rate, nfft=nfft_here)
|
|
if np.abs(frequency_orig - frequency_save) < 20:
|
|
frequency = frequency_save
|
|
nfft_chosen = nfft_here
|
|
frequency_saves.append(frequency_save)
|
|
# if np.abs(frequency_orig - frequency) > 20:
|
|
# print('freq diff')
|
|
# embed()
|
|
return frequency_saves, frequency
|
|
|
|
|
|
def get_nffts_medium(baseline_eod_long, nfft, sampling):
|
|
freq_step_maximal, maximal_length = get_freq_step(baseline_eod_long, sampling)
|
|
eod_fr_long, p, f = calc_freq_from_psd(baseline_eod_long, sampling, nfft=nfft)
|
|
return eod_fr_long, freq_step_maximal, maximal_length
|
|
|
|
|
|
def get_freq_step(baseline_eod_long, sampling):
|
|
maximal_length = len(baseline_eod_long)
|
|
freq_step_maximal = get_freq_steps(maximal_length, sampling)
|
|
return freq_step_maximal, maximal_length
|
|
|
|
|
|
def get_freq_steps(maximal_length, sampling):
|
|
freq_step_maximal = sampling / maximal_length
|
|
return freq_step_maximal
|
|
|
|
|
|
def find_eod_fr_mt(b, mts, type = 'SAM', extended = False, indices = [], freq_step_nfft_eod = 0.6103515625):
|
|
# also manche der arrays haben das ja nicht
|
|
|
|
# Hier laden wir erstmal das was schon da ist und dann verifizieren wir das mit dem power spectrum!
|
|
# ok wir nehmen einfach die weil für alle tags das zu haben ist schon schwierig!
|
|
eod_redo, eod_frs_orig_b = find_eod_fr_orig(mts, b, mts.positions[:])
|
|
if len(eod_frs_orig_b) != len(mts.positions[:]):
|
|
eod_redo, eod_frs_orig_b = find_eod_fr_orig(mts, b, mts.positions[:], type='redo')
|
|
# data_array_names = get_data_array_names(b)
|
|
# # eod_frs_orig = [mts.metadata[mts.name]['Frequency']]*len(contrasts)
|
|
features, delay_name = feature_extract(mts)
|
|
eod_frs_orig = []
|
|
for feat in features:
|
|
if 'EODf' in feat:
|
|
print(True)
|
|
if len(indices)> 0:
|
|
eod_frs_orig = mts.features[feat].data[:]#[indices]
|
|
else:
|
|
eod_frs_orig = mts.features[feat].data[:]#[indices]
|
|
eodf_name = feat
|
|
array_names = get_data_array_names(b)
|
|
# b.data_arrays
|
|
# embed()
|
|
# mts.metadata.pprint(max_depth = -1)
|
|
# perdefault nehmen wir die mt infos außer sie sind nicht da
|
|
if (len(eod_frs_orig) < 1): # | (np.sum(np.isnan(np.array(eod_frs_orig_b)))> 0)
|
|
if len(indices)> 0:
|
|
#try:
|
|
eod_frs_orig = np.array(eod_frs_orig_b)#[indices]
|
|
#except:
|
|
# print('eodf something')
|
|
# embed()
|
|
else:
|
|
eod_frs_orig = eod_frs_orig_b
|
|
# wenn sie nicht da ist auch ok
|
|
# if np.sum(np.isnan(np.array(eod_frs_orig))):
|
|
# print('eodf extract problem')
|
|
# embed()
|
|
# b.metadata.pprint(max_depth=-1)
|
|
# np.max(np.abs(np.array(eod_frs_orig) - np.array(eod_frs_orig_b)))
|
|
# except:
|
|
# print('still some problem')
|
|
# embed()
|
|
|
|
# mts.metadata.pprint(max_depth = -1)
|
|
# hier will ich sehen ob beide Methoden das gleiche machen
|
|
# if np.max(np.abs(np.array(eod_frs_orig)-np.array(eod_frs_orig_b))) > 50:
|
|
# print('b and mt eodf two different')
|
|
# embed()
|
|
# mts.metadata.pprint(max_depth = -1)
|
|
|
|
##################################
|
|
# eodfs single
|
|
# hier das mit dem freqstep noc heinarbeiten
|
|
eod_frs, eodf_orig, freq_steps_single = find_eodf_three(b, mts, eod_frs_orig, mt_idx=indices, freq_step_nfft_eod = freq_step_nfft_eod, max_eod = True)
|
|
|
|
eod_fr_medium = []
|
|
freq_step_medium = []
|
|
freq_step_mts = []
|
|
eod_fr_mts = []
|
|
#freq_steps_single
|
|
if extended:
|
|
##################################
|
|
# eodfs for all mts
|
|
print('doing the rest')
|
|
|
|
|
|
mt_poss = concat_mts_pos(mts)#[indices]
|
|
mt_poss_ind = concat_mts_pos(mts)[indices]
|
|
|
|
min_pos = mt_poss_ind[np.argmin(mt_poss_ind)]
|
|
mt_nr_small = np.where(mt_poss == min_pos)[0][0]
|
|
start_pos = mts.positions[:][mt_nr_small]
|
|
|
|
max_pos = mt_poss_ind[np.argmax(mt_poss_ind)]
|
|
mt_nr_max = np.where(mt_poss == max_pos)[0][0]
|
|
#start_pos = mts.positions[:][mt_nr_small]
|
|
|
|
duration = (np.max(mt_poss_ind) + mts.extents[:][mt_nr_max]) - start_pos
|
|
|
|
#260/duration =
|
|
|
|
global_eod, sampling = get_global_eod_for_eodf(b, duration, mts, mt_nr_small)
|
|
|
|
nfft_eod = len(global_eod)
|
|
eod_fr_mts = get_eodf_here(b, eodf_orig, global_eod, mt_nr_small, nfft_eod, sampling)
|
|
freq_step_mts, maximal_length = get_freq_step(global_eod, sampling)
|
|
|
|
|
|
##################################
|
|
#embed()
|
|
# eodfs for all with higher resolution
|
|
# hier das mit der desired auflösung noch machen
|
|
freq_step = 0.01
|
|
nfft = int(np.round(sampling / freq_step))
|
|
#start_pos
|
|
baseline_eod_long = link_arrays_eod(b, first=start_pos, second=nfft / sampling,
|
|
array_name='EOD')[0]
|
|
eod_fr_medium, freq_step_medium, maximal_length = get_nffts_medium(baseline_eod_long,
|
|
nfft, sampling)
|
|
#global_eod, sampling = get_global_eod_for_eodf(b, duration, mts, mt_nr_small)
|
|
#
|
|
#nfft_eod = len(global_eod)
|
|
#eod_fr_mts = get_eodf_here(b, eodf_orig, global_eod, mt_nr_small, nfft_eod, sampling)
|
|
#freq_step_mts, maximal_length = get_freq_step(global_eod, sampling)
|
|
|
|
|
|
if len(eodf_orig[indices]) != len(eod_frs):
|
|
print('len differences core')
|
|
embed()
|
|
return eod_frs, eod_frs_orig,eod_fr_medium, freq_step_medium,freq_step_mts,eod_fr_mts,freq_steps_single
|
|
|
|
|
|
def find_eod_fr_orig(mts, b, mt_length, type ='SAM'):
|
|
names = get_data_array_names(b)
|
|
#redo_eod = True
|
|
if (mts.name+'_EOD Rate' in names) & (type == 'SAM'):
|
|
eod_frs = b.data_arrays[mts.name+'_EOD Rate'][:]#sinewave-1
|
|
eod_redo = False
|
|
#redo_eod = False#True#b.data_arrays['gwn300Hz10s0-1_StimContrast'][:]'gwn300Hz10s0-1_StimContrast'
|
|
else:
|
|
try:
|
|
eod_frs = b.metadata['Recording']['Subject']['EOD Frequency']
|
|
except:
|
|
eod_frs = float('nan') #b.metadata.pprint(max_depth = -1)
|
|
#b.tags
|
|
eod_frs = [eod_frs] * len(mt_length)
|
|
eod_redo = True
|
|
return eod_redo, eod_frs
|
|
|
|
|
|
def concat_mts(indices, mt):
|
|
if len(np.shape(mt.extents[:][indices])) > 1:
|
|
try:
|
|
mt_extends = np.concatenate(mt.extents[:][indices])
|
|
except:
|
|
print('still some shape mt problems')
|
|
embed()
|
|
else:
|
|
mt_extends = mt.extents[:][indices]
|
|
return mt_extends
|
|
|
|
def concat_mts_pos(mts):
|
|
if len(np.shape(mts.positions[:])) > 1:
|
|
try:
|
|
mt_extends = np.concatenate(mts.positions[:])
|
|
except:
|
|
print('still some shape mt problems')
|
|
embed()
|
|
else:
|
|
mt_extends = mts.positions[:]
|
|
return mt_extends
|
|
|
|
|
|
def resave_vars_eodfs(names, stack_sp, vars, res_name = 'res'):
|
|
for v, var in enumerate(vars):
|
|
stack_sp = resave_vars_corr(names, res_name, stack_sp, v, var)
|
|
return stack_sp
|
|
|
|
|
|
def resave_vars_corr(names, res_name, stack_sp, v, var):
|
|
if (res_name not in names[v]) & ('all' not in names[v]):
|
|
for vv, var_trial in enumerate(var):
|
|
stack_sp[names[v] + str(vv)] = var_trial
|
|
stack_sp[names[v]] = np.mean(var)
|
|
else:
|
|
stack_sp[names[v]] = var
|
|
return stack_sp
|
|
|
|
def names_eodfs():
|
|
names = ['EODf', 'EODf_all', 'EODf_res', 'freq_step_trial', 'freq_step_res', 'freq_step_all', ]
|
|
return names
|
|
|
|
|
|
def first_saturation_freq():
|
|
return (20.5, -300.5)#(39.5, -210.5)#(39.5, -210.5)
|
|
|
|
|
|
def plt_FI_data_alex(cell, data, model, sort_data, sort_model):
|
|
plt.title(cell)
|
|
# plt.plot(data['contrasts'], data['f_onset'],color = 'black',linewidth = 2,zorder = 2,label = 'data')
|
|
x, d, y, ymax, ymin, _ = interp_fi(model['inputs'].iloc[0][sort_model], data['f_onset'][sort_data])
|
|
plt.plot(x, d, color='black', linewidth=2, zorder=2, label='data')
|
|
plt.scatter(data['contrasts'][sort_data], (data['f_onset'][sort_model] - ymin) / ymax,
|
|
color='black', s=7, zorder=2)
|
|
colors = ['green', 'blue', 'orange', 'pink', 'purple', 'red']
|
|
plt.xlabel('Contrast [%]')
|
|
plt.ylabel('Firing Rate [Hz]')
|
|
return colors
|
|
|
|
|
|
def load_fi_curves_alex(cell, df_cell, n, nn, results):
|
|
results.append({})
|
|
# embed()
|
|
results[-1]['cell'] = cell
|
|
results[-1]['n'] = n
|
|
model = df_cell[df_cell['n'] == n]
|
|
data = pd.read_csv('../data/Kennlinien/cell_fi_curves_csvs/' + cell + '.csv')
|
|
''' df_cell['inputs'].iloc[0]
|
|
df_cell['on_r'].iloc[0]
|
|
df_cell['ss_r'].iloc[0]
|
|
df_cell['on_s'].iloc[0]
|
|
df_cell['ss_s'].iloc[0]
|
|
data['contrasts']'''
|
|
# embed()
|
|
sort_data = np.argsort(data['contrasts'])
|
|
sort_model = np.argsort(model['inputs'].iloc[0])
|
|
# intrpolate(data['f_onset'][sort_data
|
|
# x = model['inputs'].iloc[0][sort_data]
|
|
# data = data['f_onset'][sort_data]
|
|
# model = model['on_r'].iloc[0][sort_model]
|
|
mses = mse(model['inputs'].iloc[0][sort_model], data['f_onset'][sort_data],
|
|
model['on_r'].iloc[0][sort_model])
|
|
names = ['', '_fmax', '_k', 'half']
|
|
for nn, n in enumerate(names):
|
|
results[-1]['on_r' + n] = mses[nn]
|
|
mses = mse(model['inputs'].iloc[0][sort_model], data['f_onset'][sort_data],
|
|
model['on_s'].iloc[0][sort_model])
|
|
for nn, n in enumerate(names):
|
|
results[-1]['on_s' + n] = mses[nn]
|
|
mses = mse(model['inputs'].iloc[0][sort_model], data['f_steady_state'][sort_data],
|
|
model['ss_r'].iloc[0][sort_model])
|
|
for nn, n in enumerate(names):
|
|
results[-1]['ss_r' + n] = mses[nn]
|
|
mses = mse(model['inputs'].iloc[0][sort_model], data['f_steady_state'][sort_data],
|
|
model['ss_s'].iloc[0][sort_model])
|
|
for nn, n in enumerate(names):#
|
|
results[-1]['ss_s' + n] = mses[nn]
|
|
return data, model, n, nn, sort_data, sort_model
|
|
|
|
|
|
def interp_fi(xdata, ydata):
|
|
# xdata = xdata/np.max
|
|
try:
|
|
popt, pcov = curve_fit(bolzmann, xdata, ydata, bounds=(
|
|
[0, - np.inf, - np.inf], [np.max(ydata) * 4, np.inf, np.inf]))
|
|
# try:
|
|
x = np.linspace(xdata[0] * 1.1, xdata[-1] * 1.1, 1000)
|
|
y = bolzmann(x, *popt)
|
|
y_norm1 = y - np.min(y)
|
|
# if np.max(y_norm1) == 0:
|
|
# embed()
|
|
y_norm2 = y_norm1 / np.max(y_norm1)
|
|
except:
|
|
popt = [float('nan'), float('nan'), float('nan')]
|
|
x = float('nan')
|
|
y = float('nan')
|
|
y_norm1 = float('nan')
|
|
y_norm2 = float('nan')
|
|
plot = False
|
|
if plot:
|
|
plt.subplot(1, 2, 1)
|
|
plt.plot(x, y)
|
|
plt.scatter(xdata, ydata)
|
|
plt.subplot(1, 2, 2)
|
|
plt.plot(x, y_norm2)
|
|
plt.scatter(xdata, ydata / (np.max(y)))
|
|
plt.show()
|
|
return x, y_norm2, y, np.max(y_norm1), np.min(y), popt
|
|
|
|
|
|
def mse(x, data, model):
|
|
_, d, _, _, _, d_popt = interp_fi(x, data)
|
|
_, m, _, _, _, m_popt = interp_fi(x, model)
|
|
return np.mean((d - m) ** 2), (d_popt[0] - m_popt[0]) ** 2, (d_popt[1] - m_popt[1]) ** 2, (
|
|
d_popt[2] - m_popt[2]) ** 2
|
|
|
|
|
|
def onset_function(x, f_max, k, I_half):
|
|
return f_max / (1 + np.exp(-k * (x - I_half)))
|
|
|
|
|
|
def steady_function(x, f_max, k, I_half):
|
|
return f_max / (1 + np.exp(-k * (x - I_half)))
|
|
|
|
|
|
def start_fi_o():
|
|
return 7
|
|
|
|
|
|
def end_fi_o():
|
|
return 55
|
|
|
|
|
|
def start_fi_s():
|
|
return 30
|
|
|
|
|
|
def end_fi_s():
|
|
return 90
|
|
|
|
|
|
def trial_nrs_ram_model():
|
|
trial_nrs_here = np.array([9, 11, 20, 30, 100, 500, 1000, 10000, 100000, 250000, 500000, 750000, 1000000])
|
|
return trial_nrs_here
|
|
|
|
|
|
def colors_suscept_paper_dots():
|
|
color0 = 'blue'
|
|
color0_burst = 'darkgreen'
|
|
color01 = 'green'
|
|
color02 = 'purple'
|
|
color012 = 'orange'
|
|
color01_2 = 'red' ##
|
|
return color01, color012, color01_2, color02, color0_burst, color0
|
|
|
|
|
|
def plt_voltage_trace(cell, eod_fr, frame_cell, axs, lim_here, test, spikes_plotted = True, dir = '', scaling_factor = 1):
|
|
|
|
spike_times_all = []
|
|
spike_times_all_full = []
|
|
#embed()
|
|
if os.path.exists(dir+'../data/cells/' + cell + '/' + cell + '.nix'):
|
|
f, nix_exists, nix_missing = load_f(['cells'], 0, cell, dir = dir)
|
|
# if nix exists
|
|
|
|
#embed()
|
|
if nix_exists:
|
|
b = f.blocks[0]
|
|
cont_baseline, nix_missing, ts = find_tags_baseline(b, nix_missing)
|
|
#tags_all = find_tags_all(b)
|
|
# alternativ halt hier die Filestimuli laden oder
|
|
position = frame_cell.index[0]
|
|
# embed()
|
|
# name_pkl = load_folder_name('calc_base') + '/calc_base_data-base_frame.pkl'
|
|
|
|
# embed()
|
|
if cont_baseline & (len(ts) > 0):
|
|
# cont_baseline = False
|
|
# if rlx_needed == False:
|
|
spike_times_all = []
|
|
data_array_names = get_data_array_names(b)
|
|
if 'eod' in ''.join(data_array_names).lower():
|
|
lengths = []
|
|
for t in ts:
|
|
lengths.append(t.extent[:][0])
|
|
tag = ts[np.argmax(lengths)]
|
|
# if tag.extent[0] * sampling_spikes > nfft:
|
|
# embed()
|
|
add_mt = False
|
|
# for mt_add in mts_do:
|
|
# if mt_add in tag.name.lower():
|
|
add_mt = True
|
|
if add_mt:
|
|
if 'base' in tag.name.lower():
|
|
print(tag.name)
|
|
# eod_fr = align_eodfrorig_and_calc(eod_fr, eod_frs_orig)
|
|
# if np.abs(eod_fr - eod_frs_orig) > 40:
|
|
# print('eod_fr diff3')
|
|
# embed()
|
|
t1 = time.time()
|
|
|
|
# b = f.blocks[0]
|
|
tag_here = b.tags[tag.name] # 2/3
|
|
# try:
|
|
# spike_times = tag.retrieve_data('Spikes-1')[:] - tag.position[:][0]
|
|
# except:
|
|
# spike_times = tag.retrieve_data('spikes-1')[:] - tag.position[:][0]
|
|
|
|
# embed()
|
|
|
|
#############################################
|
|
# hier führen wir eine maximale Länge ein, weil es Zellen gibt die man zu lange mit der Basleine gemessen hat?
|
|
# try:
|
|
# tag.extent[:][0]
|
|
# except:
|
|
# print('tag problem')
|
|
# embed()
|
|
if len(tag_here.extent[:]) > 0:
|
|
duration = restrict_base_durationts(tag_here.extent[:][0])
|
|
|
|
xlim = 0.400
|
|
if duration < xlim:
|
|
duration_base = xlim
|
|
else:
|
|
duration_base = xlim
|
|
spike_times = link_arrays_spikes(b, first=tag.position[:][0],
|
|
second=duration_base,
|
|
minus_spikes=tag.position[:][0])
|
|
spike_times_full = link_arrays_spikes(b, first=tag.position[:][0],
|
|
second=tag.extent[:][0],
|
|
minus_spikes=tag.position[:][0])
|
|
spike_times_all.append(spike_times)
|
|
spike_times_all_full.append(spike_times_full)
|
|
# embed()
|
|
# names = get_data_array_names(b)
|
|
# baseline_voltage = tag.retrieve_data('V-1')[:]
|
|
|
|
eods_g, sampling = link_arrays_eod(b, first=tag.position[:][0],
|
|
second=duration_base,
|
|
array_name='V-1')
|
|
|
|
#embed()
|
|
axs.plot(np.arange(0, len(eods_g) / sampling, 1 / sampling)*scaling_factor,
|
|
eods_g, color='grey')
|
|
if spikes_plotted:
|
|
if len(spike_times) > 0:
|
|
axs.scatter(spike_times*scaling_factor, np.percentile(eods_g, 90) * np.ones(len(spike_times)),
|
|
color='black')
|
|
axs.scatter(spike_times*scaling_factor,
|
|
np.percentile(eods_g, 100) * np.ones(len(spike_times)),
|
|
color='black')
|
|
|
|
hists2 = [(np.diff(spike_times) / (1 / eod_fr))]
|
|
# embed()
|
|
if len(hists2[0]) > 0:
|
|
try:
|
|
np.min(hists2) < 1.5
|
|
except:
|
|
print('hist thing')
|
|
embed()
|
|
|
|
if np.min(hists2[0]) < 1.5:
|
|
burst_corr = '_burstIndividual_'
|
|
hists2, spikes_ex, frs_calc2 = correct_burstiness(hists2, [spike_times],
|
|
[eod_fr] * len(
|
|
[spike_times]),
|
|
[eod_fr] * len(
|
|
[spike_times]),
|
|
lim=lim_here,
|
|
burst_corr=burst_corr)
|
|
if spikes_plotted:
|
|
try:
|
|
axs.scatter(spikes_ex[0]*scaling_factor,
|
|
np.percentile(eods_g, 90) * np.ones(len(spikes_ex[0])),
|
|
color='blue')
|
|
axs.scatter(spikes_ex[0]*scaling_factor,
|
|
np.percentile(eods_g, 100) * np.ones(len(spikes_ex[0])),
|
|
color='blue')
|
|
except:
|
|
print('scatter thing')
|
|
embed()
|
|
axs.set_xlim(0, xlim)
|
|
if test:
|
|
plt.plot(np.arange(0, len(eods_g) / sampling, 1 / sampling)*scaling_factor,
|
|
eods_g, color='black')
|
|
plt.scatter(spike_times*scaling_factor,
|
|
np.percentile(eods_g, 90) * np.ones(len(spike_times)),
|
|
color='black')
|
|
if (len(ts) < 1):
|
|
axs.set_title('no nix')
|
|
return spike_times_all_full
|
|
|
|
|
|
def find_tags_baseline(b, cont_rlx):
|
|
try:
|
|
ts = find_tags_list(b, names='baseline')
|
|
cont_baseline = True
|
|
except:
|
|
print('ts problem')
|
|
try:
|
|
ts = find_tags_list(b, names='baseline')
|
|
cont_baseline = True
|
|
except:
|
|
cont_baseline = False
|
|
cont_rlx = True
|
|
ts = []
|
|
return cont_baseline, cont_rlx, ts
|
|
|
|
|
|
def load_f(data_dir, c, cell, dir = ''):
|
|
cont_rlx = False
|
|
try:
|
|
f = nix.File.open(dir +'../data/' + data_dir[c] + '/' + cell + '/' + cell + '.nix', nix.FileMode.ReadOnly)
|
|
cont_here = True
|
|
except:
|
|
f = []
|
|
cont_here = False
|
|
cont_rlx = True
|
|
return f, cont_here, cont_rlx |