From 30215ef0b01536590be3e13f3e9981e1b3eb47e9 Mon Sep 17 00:00:00 2001 From: Ramona <efish@verliernix.com> Date: Thu, 15 Nov 2018 15:24:53 +0100 Subject: [PATCH 1/4] small differences --- code/analysis_rs.py | 2 +- code/utility.py | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/code/analysis_rs.py b/code/analysis_rs.py index 356d461..106fb28 100644 --- a/code/analysis_rs.py +++ b/code/analysis_rs.py @@ -42,7 +42,7 @@ cv = sigma/mu # plot psth into the same plot # calculate vector strength -threshold = 0; +threshold = 0 shift_eod = np.roll(eod, 1) eod_times = time[(eod >= threshold) & (shift_eod < threshold)] sampling_rate = 40000.0 diff --git a/code/utility.py b/code/utility.py index 86f2407..0c1ce34 100644 --- a/code/utility.py +++ b/code/utility.py @@ -2,7 +2,7 @@ import numpy as np def zero_crossing(eod,time): - threshold = 0; + threshold = 0 shift_eod = np.roll(eod, 1) eod_times = time[(eod >= threshold) & (shift_eod < threshold)] sampling_rate = 40000.0 @@ -10,9 +10,9 @@ def zero_crossing(eod,time): return eod_idx -def vector_strength(spike_times, eod_durations) +def vector_strength(spike_times, eod_durations): alphas = spike_times/ eod_durations cs = (1/len(spike_times))*np.sum(np.cos(alphas))^2 sn = (1/len(spike_times))*np.sum(np.sin(alphas))^2 - vs = np.sprt(cs+sn) + vs = np.sqrt(cs+sn) return vs From cf4d63966af1031f3ec096f2173f557430a89268 Mon Sep 17 00:00:00 2001 From: Ramona <efish@verliernix.com> Date: Thu, 15 Nov 2018 15:48:34 +0100 Subject: [PATCH 2/4] vector strength --- code/analysis_rs.py | 11 ++++++++++- code/utility.py | 10 ++++++---- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/code/analysis_rs.py b/code/analysis_rs.py index 106fb28..7a50853 100644 --- a/code/analysis_rs.py +++ b/code/analysis_rs.py @@ -3,6 +3,7 @@ import matplotlib.pyplot as plt from read_baseline_data import * from IPython import embed from NixFrame import * +from utility import * inch_factor = 2.54 data_dir = '../data' @@ -53,6 +54,7 @@ max_cut = int(np.max(np.diff(eod_idx))) eod_cuts = np.zeros([len(eod_idx)-1, max_cut]) # eods 15 + 16 are to short relative_times = [] +eod_durations = [] for i, idx in enumerate(eod_idx[:-1]): eod_cut = eod[int(idx):int(eod_idx[i+1])] @@ -63,14 +65,20 @@ for i, idx in enumerate(eod_idx[:-1]): relative_time = spike_cut - time_cut[0] if len(relative_time) > 0: relative_times.append(relative_time[:][0]*1000) + eod_durations.append(len(eod_cut)) mu_eod = np.nanmean(eod_cuts, axis=0) std_eod = np.nanstd(eod_cuts, axis=0)*3 -time_axis = np.arange(max_cut)/sampling_rate*1000 +vs = vector_strength(relative_times, eod_durations) +embed() +exit() + +#time_axis = np.arange(max_cut)/sampling_rate*1000 #fig = plt.figure(figsize=(12/inch_factor, 8/inch_factor)) +''' fig, ax1 = plt.subplots(figsize=(12/inch_factor, 8/inch_factor)) ax1.hist(relative_times, color='crimson') ax1.set_xlabel('time [ms]', fontsize=12) @@ -90,4 +98,5 @@ plt.xticks(fontsize = 8) plt.yticks(fontsize = 8) fig.tight_layout() plt.show() +''' diff --git a/code/utility.py b/code/utility.py index 0c1ce34..a83b5c2 100644 --- a/code/utility.py +++ b/code/utility.py @@ -11,8 +11,10 @@ def zero_crossing(eod,time): def vector_strength(spike_times, eod_durations): - alphas = spike_times/ eod_durations - cs = (1/len(spike_times))*np.sum(np.cos(alphas))^2 - sn = (1/len(spike_times))*np.sum(np.sin(alphas))^2 - vs = np.sqrt(cs+sn) + n = len(spike_times) + phase_times = np.zeros(n) + for i, idx in enumerate(spike_times): + phase_times[i]= spike_times[i]/eod_durations[i] + + vs = np.sqrt((1/n*sum(np.cos(phase_times)))**2 + (1/n*sum(np.sin(phase_times)))**2) return vs From c9bc805d0349267587c6aac85a50bda1497a162d Mon Sep 17 00:00:00 2001 From: Ramona <efish@verliernix.com> Date: Thu, 15 Nov 2018 16:21:55 +0100 Subject: [PATCH 3/4] stuff for plotting --- code/analysis_rs.py | 84 ++++++++++++++++++++------------------------- code/utility.py | 7 ++-- 2 files changed, 40 insertions(+), 51 deletions(-) diff --git a/code/analysis_rs.py b/code/analysis_rs.py index 7a50853..1d6be94 100644 --- a/code/analysis_rs.py +++ b/code/analysis_rs.py @@ -1,59 +1,54 @@ import numpy as np import matplotlib.pyplot as plt from read_baseline_data import * -from IPython import embed from NixFrame import * from utility import * +from IPython import embed +# plot and data values inch_factor = 2.54 data_dir = '../data' dataset = '2018-11-09-ad-invivo-1' + +# read eod and time of baseline time, eod = read_baseline_eod(os.path.join(data_dir, dataset)) -#fig = plt.figure(figsize=(12/inch_factor, 8/inch_factor)) -#ax = fig.add_subplot(111) -#ax.plot(time[:1000], eod[:1000]) -#ax.set_xlabel('time [ms]', fontsize=12) -#ax.set_ylabel('voltage [mV]', fontsize=12) -#plt.xticks(fontsize = 8) -#plt.yticks(fontsize = 8) -#fig.tight_layout() +fig, ax = plt.subplots(figsize=(12/inch_factor, 8/inch_factor)) +ax.plot(time[:1000], eod[:1000]) +ax.set_xlabel('time [ms]', fontsize=12) +ax.set_ylabel('voltage [mV]', fontsize=12) +plt.xticks(fontsize=8) +plt.yticks(fontsize=8) +fig.tight_layout() #plt.savefig('eod.pdf') +plt.show() -#interspikeintervalhistogram, windowsize = 1 ms -#plt.hist -#coefficient of variation -#embed() -#exit() - +# read spikes during baseline activity spikes = read_baseline_spikes(os.path.join(data_dir, dataset)) +# calculate interpike intervals and plot them interspikeintervals = np.diff(spikes) -#fig = plt.figure() -#plt.hist(interspikeintervals, bins=np.arange(0, np.max(interspikeintervals), 0.0001)) -#plt.show() +fig, ax = plt.subplots(figsize=(12/inch_factor, 8/inch_factor)) +plt.hist(interspikeintervals, bins=np.arange(0, np.max(interspikeintervals), 0.0001)) +plt.show() + +# calculate coefficient of variation mu = np.mean(interspikeintervals) sigma = np.std(interspikeintervals) cv = sigma/mu -#print(cv) - -# calculate zero crossings of the eod -# plot mean of eod circles -# plot std of eod circles -# plot psth into the same plot -# calculate vector strength +print(cv) +# calculate eod times and indices by zero crossings threshold = 0 shift_eod = np.roll(eod, 1) eod_times = time[(eod >= threshold) & (shift_eod < threshold)] sampling_rate = 40000.0 eod_idx = eod_times*sampling_rate - +# align eods and spikes to eods max_cut = int(np.max(np.diff(eod_idx))) eod_cuts = np.zeros([len(eod_idx)-1, max_cut]) -# eods 15 + 16 are to short -relative_times = [] +spike_times = [] eod_durations = [] for i, idx in enumerate(eod_idx[:-1]): @@ -62,41 +57,36 @@ for i, idx in enumerate(eod_idx[:-1]): eod_cuts[i, len(eod_cut):] = np.nan time_cut = time[int(idx):int(eod_idx[i+1])] spike_cut = spikes[(spikes > time_cut[0]) & (spikes < time_cut[-1])] - relative_time = spike_cut - time_cut[0] - if len(relative_time) > 0: - relative_times.append(relative_time[:][0]*1000) - eod_durations.append(len(eod_cut)) + spike_time = spike_cut - time_cut[0] + if len(spike_time) > 0: + spike_times.append(spike_time[:][0]*1000) + eod_durations.append(len(eod_cut)/sampling_rate*1000) +# calculate vector strength +vs = vector_strength(spike_times, eod_durations) +# determine means and stds of eod for plot +# determine time axis mu_eod = np.nanmean(eod_cuts, axis=0) std_eod = np.nanstd(eod_cuts, axis=0)*3 +time_axis = np.arange(max_cut)/sampling_rate*1000 -vs = vector_strength(relative_times, eod_durations) -embed() -exit() - -#time_axis = np.arange(max_cut)/sampling_rate*1000 - -#fig = plt.figure(figsize=(12/inch_factor, 8/inch_factor)) -''' +# plot eod form and spike histogram fig, ax1 = plt.subplots(figsize=(12/inch_factor, 8/inch_factor)) -ax1.hist(relative_times, color='crimson') +ax1.hist(spike_times, color='crimson') ax1.set_xlabel('time [ms]', fontsize=12) ax1.set_ylabel('number', fontsize=12) ax1.tick_params(axis='y', labelcolor='crimson') -plt.yticks(fontsize = 8) +plt.yticks(fontsize=8) ax1.spines['top'].set_visible(False) ax2 = ax1.twinx() - ax2.fill_between(time_axis, mu_eod+std_eod, mu_eod-std_eod, color='dodgerblue', alpha=0.5) ax2.plot(time_axis, mu_eod, color='black', lw=2) ax2.set_ylabel('voltage [mV]', fontsize=12) ax2.tick_params(axis='y', labelcolor='dodgerblue') -plt.xticks(fontsize = 8) -plt.yticks(fontsize = 8) +plt.xticks(fontsize=8) +plt.yticks(fontsize=8) fig.tight_layout() plt.show() -''' - diff --git a/code/utility.py b/code/utility.py index a83b5c2..1ad9601 100644 --- a/code/utility.py +++ b/code/utility.py @@ -1,7 +1,7 @@ import numpy as np -def zero_crossing(eod,time): +def zero_crossing(eod, time): threshold = 0 shift_eod = np.roll(eod, 1) eod_times = time[(eod >= threshold) & (shift_eod < threshold)] @@ -12,9 +12,8 @@ def zero_crossing(eod,time): def vector_strength(spike_times, eod_durations): n = len(spike_times) - phase_times = np.zeros(n) + phase_times = np.zeros(len(spike_times)) for i, idx in enumerate(spike_times): - phase_times[i]= spike_times[i]/eod_durations[i] - + phase_times[i] = (spike_times[i] / eod_durations[i]) * 2 * np.pi vs = np.sqrt((1/n*sum(np.cos(phase_times)))**2 + (1/n*sum(np.sin(phase_times)))**2) return vs From 30e7413838125e894846ba85d3567653914c2c7f Mon Sep 17 00:00:00 2001 From: Ramona <efish@verliernix.com> Date: Thu, 15 Nov 2018 16:49:21 +0100 Subject: [PATCH 4/4] bla --- code/analysis_rs.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/analysis_rs.py b/code/analysis_rs.py index 1d6be94..950b572 100644 --- a/code/analysis_rs.py +++ b/code/analysis_rs.py @@ -90,3 +90,5 @@ plt.xticks(fontsize=8) plt.yticks(fontsize=8) fig.tight_layout() plt.show() + +#NixToFrame(data_dir) \ No newline at end of file