From 84f3333317e119cc87c4cb5f9c444ff66f1f7a23 Mon Sep 17 00:00:00 2001 From: Mario Mulansky Date: Mon, 17 Aug 2015 17:19:18 +0200 Subject: first unit tests for directionality --- .../cython/cython_directionality.pyx | 4 +-- pyspike/directionality/spike_delay_asymmetry.py | 11 +++--- test/test_spike_delay_asymmetry.py | 41 ++++++++++++++++++++++ 3 files changed, 50 insertions(+), 6 deletions(-) create mode 100644 test/test_spike_delay_asymmetry.py 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 + +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)) -- cgit v1.2.3