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