summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorMario Mulansky <mario.mulansky@gmx.net>2015-12-14 14:23:02 +0100
committerMario Mulansky <mario.mulansky@gmx.net>2015-12-14 14:23:02 +0100
commitb970055641b215d30b671ee810e29c6a55e6214a (patch)
tree084efe915343c652c4398907145378cf2582613f /test
parent691bf73c06322a2c47c37a5c48d085b789c8e8bf (diff)
improved edge correction for spike distance
Improvement following Eeros suggestions to use auxiliary spike at the edges consistently with the corresponding corrected ISI intervals.
Diffstat (limited to 'test')
-rw-r--r--test/test_distance.py50
-rw-r--r--test/test_empty.py4
2 files changed, 46 insertions, 8 deletions
diff --git a/test/test_distance.py b/test/test_distance.py
index e45ac16..626b438 100644
--- a/test/test_distance.py
+++ b/test/test_distance.py
@@ -36,6 +36,7 @@ def test_isi():
f = spk.isi_profile(t1, t2)
# print("ISI: ", f.y)
+ print("ISI value:", expected_isi_val)
assert_equal(f.x, expected_times)
assert_array_almost_equal(f.y, expected_isi, decimal=15)
@@ -73,8 +74,19 @@ def test_spike():
assert_equal(f.x, expected_times)
- assert_almost_equal(f.avrg(), 1.6624149659863946e-01, decimal=15)
- assert_almost_equal(f.y2[-1], 0.1394558, decimal=6)
+ # from SPIKY:
+ y_all = np.array([0.000000000000000000, 0.555555555555555580,
+ 0.222222222222222210, 0.305555555555555580,
+ 0.255102040816326536, 0.000000000000000000,
+ 0.000000000000000000, 0.255102040816326536,
+ 0.255102040816326536, 0.285714285714285698,
+ 0.285714285714285698, 0.285714285714285698])
+
+ #assert_array_almost_equal(f.y1, y_all[::2])
+ assert_array_almost_equal(f.y2, y_all[1::2])
+
+ assert_almost_equal(f.avrg(), 0.186309523809523814, decimal=15)
+ assert_equal(spk.spike_distance(t1, t2), f.avrg())
t1 = SpikeTrain([0.2, 0.4, 0.6, 0.7], 1.0)
t2 = SpikeTrain([0.3, 0.45, 0.8, 0.9, 0.95], 1.0)
@@ -99,6 +111,8 @@ def test_spike():
(expected_y1+expected_y2)/2)
expected_spike_val /= (expected_times[-1]-expected_times[0])
+ print("SPIKE value:", expected_spike_val)
+
f = spk.spike_profile(t1, t2)
assert_equal(f.x, expected_times)
@@ -117,9 +131,14 @@ def test_spike():
# for left and right values
s1_r = np.array([0.1, (0.1*0.1+0.1*0.1)/0.2, 0.1, 0.0, 0.0, 0.0, 0.0])
s1_l = np.array([0.1, (0.1*0.1+0.1*0.1)/0.2, 0.1, 0.0, 0.0, 0.0, 0.0])
- s2_r = np.array([0.1*0.1/0.3, 0.1*0.3/0.3, 0.1*0.2/0.3,
+ # s2_r = np.array([0.1*0.1/0.3, 0.1*0.3/0.3, 0.1*0.2/0.3,
+ # 0.0, 0.1, 0.0, 0.0])
+ # s2_l = np.array([0.1*0.1/0.3, 0.1*0.1/0.3, 0.1*0.2/0.3, 0.0,
+ # 0.1, 0.0, 0.0])
+ # eero's edge correction:
+ s2_r = np.array([0.1, 0.1*0.3/0.3, 0.1*0.2/0.3,
0.0, 0.1, 0.0, 0.0])
- s2_l = np.array([0.1*0.1/0.3, 0.1*0.1/0.3, 0.1*0.2/0.3, 0.0,
+ s2_l = np.array([0.1, 0.1*0.3/0.3, 0.1*0.2/0.3, 0.0,
0.1, 0.0, 0.0])
isi1 = np.array([0.2, 0.2, 0.2, 0.2, 0.2, 0.4])
isi2 = np.array([0.3, 0.3, 0.3, 0.1, 0.1, 0.4])
@@ -345,7 +364,7 @@ def test_regression_spiky():
assert_equal(isi_profile.y, 0.1/1.1 * np.ones_like(isi_profile.y))
spike_dist = spk.spike_distance(st1, st2)
- assert_equal(spike_dist, 2.1105878248735391e-01)
+ assert_equal(spike_dist, 0.211058782487353908)
spike_sync = spk.spike_sync(st1, st2)
assert_equal(spike_sync, 8.6956521739130432e-01)
@@ -363,12 +382,31 @@ def test_regression_spiky():
spike_dist = spk.spike_distance_multi(spike_trains)
# get the full precision from SPIKY
- assert_almost_equal(spike_dist, 2.4432433330596512e-01, decimal=15)
+ assert_almost_equal(spike_dist, 0.25188056475463755, decimal=15)
spike_sync = spk.spike_sync_multi(spike_trains)
# get the full precision from SPIKY
assert_equal(spike_sync, 0.7183531505298066)
+ # Eero's edge correction example
+ st1 = SpikeTrain([0.5, 1.5, 2.5], 6.0)
+ st2 = SpikeTrain([3.5, 4.5, 5.5], 6.0)
+
+ f = spk.spike_profile(st1, st2)
+
+ expected_times = np.array([0.0, 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.0])
+ y_all = np.array([0.271604938271605, 0.271604938271605, 0.271604938271605,
+ 0.617283950617284, 0.617283950617284, 0.444444444444444,
+ 0.285714285714286, 0.285714285714286, 0.444444444444444,
+ 0.617283950617284, 0.617283950617284, 0.271604938271605,
+ 0.271604938271605, 0.271604938271605])
+ expected_y1 = y_all[::2]
+ expected_y2 = y_all[1::2]
+
+ assert_equal(f.x, expected_times)
+ assert_array_almost_equal(f.y1, expected_y1, decimal=14)
+ assert_array_almost_equal(f.y2, expected_y2, decimal=14)
+
def test_multi_variate_subsets():
spike_trains = spk.load_spike_trains_from_txt("test/PySpike_testdata.txt",
diff --git a/test/test_empty.py b/test/test_empty.py
index af7fb36..5a0042f 100644
--- a/test/test_empty.py
+++ b/test/test_empty.py
@@ -70,8 +70,8 @@ def test_spike_empty():
st1 = SpikeTrain([], edges=(0.0, 1.0))
st2 = SpikeTrain([0.4, ], edges=(0.0, 1.0))
d = spk.spike_distance(st1, st2)
- assert_almost_equal(d, 0.4*0.4*1.0/(0.4+1.0)**2 + 0.6*0.4*1.0/(0.6+1.0)**2,
- decimal=15)
+ d_expect = 0.4*0.4*1.0/(0.4+1.0)**2 + 0.6*0.4*1.0/(0.6+1.0)**2
+ assert_almost_equal(d, d_expect, decimal=15)
prof = spk.spike_profile(st1, st2)
assert_equal(d, prof.avrg())
assert_array_equal(prof.x, [0.0, 0.4, 1.0])