summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMario Mulansky <mario.mulansky@gmx.net>2015-08-17 17:19:18 +0200
committerMario Mulansky <mario.mulansky@gmx.net>2015-08-17 17:19:18 +0200
commit84f3333317e119cc87c4cb5f9c444ff66f1f7a23 (patch)
tree7d5fc73de61fd124f93f24c588700f25ffe896c6
parent0d7255c1fb7398720de10653efee617075c30892 (diff)
first unit tests for directionality
-rw-r--r--pyspike/directionality/cython/cython_directionality.pyx4
-rw-r--r--pyspike/directionality/spike_delay_asymmetry.py11
-rw-r--r--test/test_spike_delay_asymmetry.py41
3 files changed, 50 insertions, 6 deletions
diff --git a/pyspike/directionality/cython/cython_directionality.pyx b/pyspike/directionality/cython/cython_directionality.pyx
index 00e3b86..3936372 100644
--- a/pyspike/directionality/cython/cython_directionality.pyx
+++ b/pyspike/directionality/cython/cython_directionality.pyx
@@ -198,7 +198,7 @@ def spike_delay_asymmetry_cython(double[:] spikes1, double[:] spikes2,
# coincidence between the current spike and the previous spike
# spike in spike train 2 appeared before spike in spike train 1
# mark with -1
- asym -= 1
+ asym -= 2
elif (j < N2-1) and (i == N1-1 or spikes1[i+1] > spikes2[j+1]):
j += 1
mp += 1
@@ -207,7 +207,7 @@ def spike_delay_asymmetry_cython(double[:] spikes1, double[:] spikes2,
# coincidence between the current spike and the previous spike
# spike in spike train 1 appeared before spike in spike train 2
# mark with +1
- asym += 1
+ asym += 2
else: # spikes1[i+1] = spikes2[j+1]
# advance in both spike trains
j += 1
diff --git a/pyspike/directionality/spike_delay_asymmetry.py b/pyspike/directionality/spike_delay_asymmetry.py
index 0676f6d..7da49ee 100644
--- a/pyspike/directionality/spike_delay_asymmetry.py
+++ b/pyspike/directionality/spike_delay_asymmetry.py
@@ -64,7 +64,7 @@ def spike_delay_asymmetry_profile(spike_train1, spike_train2, max_tau=None):
############################################################
# spike_delay_asymmetry
############################################################
-def spike_delay_asymmetry(spike_train1, spike_train2,
+def spike_delay_asymmetry(spike_train1, spike_train2, normalize=True,
interval=None, max_tau=None):
""" Computes the overall spike delay asymmetry value for two spike trains.
"""
@@ -81,7 +81,10 @@ def spike_delay_asymmetry(spike_train1, spike_train2,
spike_train1.t_start,
spike_train1.t_end,
max_tau)
- return c
+ if normalize:
+ return 1.0*c/mp
+ else:
+ return c
except ImportError:
# Cython backend not available: fall back to profile averaging
raise NotImplementedError()
@@ -123,7 +126,7 @@ def spike_delay_asymmetry_profile_multi(spike_trains, indices=None,
############################################################
# spike_delay_asymmetry_matrix
############################################################
-def spike_delay_asymmetry_matrix(spike_trains, indices=None,
+def spike_delay_asymmetry_matrix(spike_trains, normalize=True, indices=None,
interval=None, max_tau=None):
""" Computes the spike delay asymmetry matrix for the given spike trains.
"""
@@ -139,7 +142,7 @@ def spike_delay_asymmetry_matrix(spike_trains, indices=None,
distance_matrix = np.zeros((len(indices), len(indices)))
for i, j in pairs:
- d = spike_delay_asymmetry(spike_trains[i], spike_trains[j],
+ d = spike_delay_asymmetry(spike_trains[i], spike_trains[j], normalize,
interval, max_tau=max_tau)
distance_matrix[i, j] = d
distance_matrix[j, i] = -d
diff --git a/test/test_spike_delay_asymmetry.py b/test/test_spike_delay_asymmetry.py
new file mode 100644
index 0000000..93c18de
--- /dev/null
+++ b/test/test_spike_delay_asymmetry.py
@@ -0,0 +1,41 @@
+""" test_spike_delay_asymmetry.py
+
+Tests the asymmetry functions
+
+Copyright 2015, Mario Mulansky <mario.mulansky@gmx.net>
+
+Distributed under the BSD License
+
+"""
+
+import numpy as np
+from numpy.testing import assert_equal, assert_almost_equal, \
+ assert_array_equal
+
+import pyspike as spk
+from pyspike import SpikeTrain, DiscreteFunc
+
+
+def test_profile():
+ st1 = SpikeTrain([100, 200, 300], [0, 1000])
+ st2 = SpikeTrain([105, 205, 300], [0, 1000])
+ expected_x = np.array([0, 100, 105, 200, 205, 300, 1000])
+ expected_y = np.array([1, 1, 1, 1, 1, 0, 0])
+ expected_mp = np.array([1, 1, 1, 1, 1, 2, 2])
+
+ f = spk.drct.spike_delay_asymmetry_profile(st1, st2)
+
+ assert f.almost_equal(DiscreteFunc(expected_x, expected_y, expected_mp))
+ assert_almost_equal(f.avrg(), 2.0/3.0)
+ assert_almost_equal(spk.drct.spike_delay_asymmetry(st1, st2), 2.0/3.0)
+ assert_almost_equal(spk.drct.spike_delay_asymmetry(st1, st2,
+ normalize=False),
+ 4.0)
+
+ st3 = SpikeTrain([105, 195, 500], [0, 1000])
+ expected_x = np.array([0, 100, 105, 195, 200, 300, 500, 1000])
+ expected_y = np.array([1, 1, 1, -1, -1, 0, 0, 0])
+ expected_mp = np.array([1, 1, 1, 1, 1, 1, 1, 1])
+
+ f = spk.drct.spike_delay_asymmetry_profile(st1, st3)
+ assert f.almost_equal(DiscreteFunc(expected_x, expected_y, expected_mp))