import nixio as nix import os from IPython import embed #from utility import * import matplotlib.pyplot as plt import numpy as np import pandas as pd import matplotlib.mlab as ml import scipy.integrate as si from scipy.ndimage import gaussian_filter from IPython import embed from myfunctions import * #from axes import label_axes, labelaxes_params from myfunctions import auto_rows #from differentcells import default_settings #from differentcells import plot_single_cells import matplotlib.gridspec as gridspec from functionssimulation import single_stim import math from functionssimulation import find_times from functionssimulation import rectify from functionssimulation import global_maxima from functionssimulation import integrate_chirp from functionssimulation import find_periods from myfunctions import default_settings, load_cell from axes import labelaxes_params,label_axes from mpl_toolkits.axes_grid1 import host_subplot import mpl_toolkits.axisartist as AA import string def plot_single_cells(ax, colors = ['#BA2D22', '#F47F17', '#AAB71B', '#3673A4', '#53379B'], data = ['2019-10-21-aa-invivo-1','2019-11-18-af-invivo-1','2019-10-28-aj-invivo-1'], var = '05'): y_sum = [[]] * len(data) axis = {} for ee, e in enumerate([var]): #d = data_all[data_all['dataset'] == ] d = load_cell(data[0], fname='singlecellexample5_smoothed'+data[0], big_file='beat_results_smoothed') eod = d['eodf'].iloc[0] #embed() x = d['delta_f'] / d['eodf'] + 1 xx = d['delta_f'] y = d['result_frequency_' + e] y2 = d['result_amplitude_max_' + e] y_sum[0] = np.nanmax(y) axis[1] = plt.subplot(ax[0]) axis[1].plot(x, y, zorder = 1,color=colors[0]) axis[1].set_ylabel('[Hz]') axis[1].set_xlim([0, 4]) labels = [item.get_text() for item in axis[1].get_xticklabels()] empty_string_labels = [''] * len(labels) axis[1].set_xticklabels(empty_string_labels) #axis[2] = host_subplot(ax[1], axes_class=AA.Axes) axis[2] = plt.subplot(ax[1]) #aixs[3] = axis[2].twinx() #par2 = axis[2].twinx() #host = host_subplot(ax[1], axes_class=AA.Axes) #host.spines['right'].set_visible(False) #host.spines['top'].set_visible(False) #axis[2] = host.twiny() axis[2].plot(xx, y2, label="Beats [Hz]", zorder = 2,color=colors[0]) axis[2].set_ylabel('Modulation ') axis[1].spines['right'].set_visible(False) axis[1].spines['top'].set_visible(False) axis[2].spines['right'].set_visible(False) axis[2].spines['top'].set_visible(False) axis[1].set_xlim([0, np.max(x)]) axis[2].set_xlim([-eod, np.max(xx)]) nr_size = 10 axis[2].text(-0.02, 1.1, string.ascii_uppercase[4], transform=axis[2].transAxes, size=nr_size, weight='bold') axis[1].text(-0.02, 1.1, string.ascii_uppercase[3], transform=axis[1].transAxes, size=nr_size, weight='bold') #axis[4] = axis[2].twiny() axis[3] = axis[2].twiny() axis[3].set_xlabel('EOD multiples') offset = -40 #new_fixed_axis = axis[3].get_grid_helper().new_fixed_axis #axis[3].axis["bottom"] = new_fixed_axis(loc="bottom", axes=axis[3], # offset=(0,offset)) axis[3].xaxis.set_ticks_position("bottom") axis[3].xaxis.set_label_position("bottom") axis[3].spines["bottom"].set_position(("axes", -1.2)) axis[3].spines['right'].set_visible(False) axis[3].spines['top'].set_visible(False) #axis[3].axis["bottom"].toggle(all=True) axis[2].set_xlabel("Difference frequency [Hz]") #par2.set_xlim([np.min(xx), np.max(xx)]) axis[3].set_xlim([0, np.max(x)]) #p1, = host.plot([0, 1, 2], [0, 1, 2], label="Density") #p2, = par1.plot([0, 1, 2], [0, 3, 2], label="Temperature") p3, = axis[3].plot(x, y2,color = 'grey',zorder = 1) #p3, = axis[4].plot(x, y2, color='grey', zorder=1) #embed() axis[2].set_xticks(np.arange(-eod,np.max(xx),eod/2)) #ax['corr'].set_yticks(np.arange(eod_fe[0] - eod_fr, eod_fe[-1] - eod_fr, eod_fr / 2)) axis[2].set_ylim([0, np.nanmax(y_sum)]) plt.subplots_adjust(wspace = 0.4,left = 0.17, right = 0.96,bottom = 0.2) return axis,y2 def plot_beat_corr(ax,lower,beat_corr_col = 'red',df_col = 'pink',ax_nr = 3,multiple = 3): eod_fr = 500 eod_fe = np.arange(0, eod_fr * multiple, 5) beats = eod_fe - eod_fr beat_corr = eod_fe % eod_fr beat_corr[beat_corr > eod_fr / 2] = eod_fr - beat_corr[beat_corr > eod_fr / 2] #gs0 = gridspec.GridSpec(3, 1, height_ratios=[4, 1, 1], hspace=0.7) #plt.figure(figsize=(4.5, 6)) style = 'dotted' color_v = 'black' color_b = 'silver' # plt.subplot(3,1,1) ax['corr'] = plt.subplot(lower[ax_nr]) np.max(beats) / eod_fr ax['corr'].set_xticks(np.arange((eod_fe[0]-eod_fr)/eod_fr+1, (eod_fe[-1]-eod_fr)/eod_fr+1,(eod_fr/2)/eod_fr+1)) ax['corr'].set_yticks(np.arange((eod_fe[0]-eod_fr)/eod_fr+1, (eod_fe[-1]-eod_fr)/eod_fr+1,(eod_fr/2)/eod_fr+1)) ax['corr'].set_xticks(np.arange(0,10,0.5)) ax['corr'].set_yticks(np.arange(0, 10, 0.5)) # plt.axvline(x = -250, Linestyle = style,color = color_v) # plt.axvline(x = 250, Linestyle = style,color = color_v) # plt.axvline(x = 750, Linestyle = style,color = color_v) # plt.axvline(x = 1500, Linestyle = style) # plt.subplot(3,1,2) plt.xlabel('Beats [Hz]') plt.ylabel('Difference frequency [Hz]') #plt.subplot(gs0[1]) if beat_corr_col != 'no': plt.plot(beats/eod_fr+1, beat_corr/(eod_fr+1), color=beat_corr_col, alpha = 0.7) plt.ylim([0,np.max(beat_corr/(eod_fr+1))*1.4]) plt.xlim([(beats/eod_fr+1)[0],(beats/eod_fr+1)[-1]]) if df_col != 'no': plt.plot(beats/eod_fr+1, np.abs(beats)/(eod_fr+1), color=df_col, alpha = 0.7) #plt.axvline(x=-250, Linestyle=style, color=color_v) #plt.axvline(x=250, Linestyle=style, color=color_v) #plt.axvline(x=750, Linestyle=style, color=color_v) plt.xlabel('EOD adjusted beat [Hz]') ax['corr'] .spines['right'].set_visible(False) ax['corr'] .spines['top'].set_visible(False) ax['corr'] .spines['left'].set_visible(True) ax['corr'] .spines['bottom'].set_visible(True) # plt.axvline(x = 1250, Linestyle = style,color = color_v) # plt.axvline(x = 1500, Linestyle = style,color = color_v) mult = np.array(beats) / eod_fr + 1 # plt.subplot(3,1,3) plt.xlabel('EOD multiples') plt.ylabel('EOD adj. beat [Hz]', fontsize = 10) plt.grid() #plt.subplot(gs0[2]) #plt.plot(mult, beat_corr, color=color_b) # plt.axvline(x = 0, Linestyle = style) #plt.axvline(x=0.5, Linestyle=style, color=color_v) # plt.axvline(x = 1, Linestyle = style) #plt.axvline(x=1.5, Linestyle=style, color=color_v) #plt.axvline(x=2.5, Linestyle=style, color=color_v) #plt.xlabel('EOD multiples') #plt.ylabel('EOD adj. beat [Hz]', fontsize = 10) return ax def try_resort_automatically(): diffs = np.diff(dfs) fast_sampling = dfs[np.concatenate([np.array([True]),diffs <21])] second_derivative = np.diff(np.diff(fast_sampling)) first_index = np.concatenate([np.array([False]),second_derivative <0]) second_index = np.concatenate([second_derivative > 0,np.array([False])]) remaining = fast_sampling[np.concatenate([np.array([True]),second_derivative == 0, np.array([True])])] first = np.arange(0,len(first_index),1)[first_index] second = np.arange(0, len(second_index), 1)[second_index]-1 residual = [] indeces = [] for i in range(len(first)): index = np.arange(first[i],second[i],2) index2 = np.arange(first[i], second[i], 1) indeces.append(index2) residual.append(fast_sampling[index])#first[i]:second[i]:2 indeces = np.concatenate(indeces) remaining = fast_sampling[~indeces] residual = np.concatenate(residual) new_dfs = np.sort(np.concatenate([residual, remaining])) def gap_subplot(ax, dfs, pos_left = 0, pos_right = 1, xl = -0.5, xr = 30, ax_name = 'between'): ax[ax_name] = plt.subplot(grid[pos_left, pos_right]) ax[ax_name].spines['right'].set_visible(False) ax[ax_name].spines['top'].set_visible(False) ax[ax_name].spines['left'].set_visible(False) ax[ax_name].spines['bottom'].set_visible(False) ax[ax_name].set_ylim([np.min(dfs), np.max(dfs)]) ax[ax_name].set_xlim([xl,xr]) ax[ax_name].set_xticks([]) ax[ax_name].set_yticks([]) ax[ax_name].set_ylim(ax[ax_name].get_ylim()[::-1]) return ax[ax_name] def morane_plot(ax, dfs, grid, d,nr_size = 11, ll = 0.1, ul = 0.3, ax_name = 'scatter',gl = 0, gr =0): ax[ax_name] = plt.subplot(grid[gl,gr]) ax[ax_name].spines['right'].set_visible(False) ax[ax_name].spines['top'].set_visible(False) counter = 0 new_dfs = np.concatenate([dfs[0:25], dfs[25:40:2], dfs[40:53:2], dfs[54:-1]]) for i in range(len(new_dfs)): spikes = d[d['df'] == new_dfs[i]]['spike_times'] counter += 1 transformed_spikes = spikes.iloc[0]-spikes.iloc[0][0] used_spikes = transformed_spikes[transformed_spikes>ll] used_spikes = used_spikes[used_spikes