summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMario Mulansky <mario.mulansky@gmx.net>2015-01-20 10:47:27 +0100
committerMario Mulansky <mario.mulansky@gmx.net>2015-01-20 10:47:27 +0100
commitcce93ecbb1c961ab075a4924a42543483ffffb77 (patch)
tree1d8d2cf15fb3fdc065b9bc204886a25e43958297
parentf2d742c06fd013a013c811593257b67502ea9486 (diff)
added spike sync matrix
-rw-r--r--pyspike/__init__.py4
-rw-r--r--pyspike/distances.py62
-rw-r--r--pyspike/function.py1
-rw-r--r--test/test_distance.py20
4 files changed, 68 insertions, 19 deletions
diff --git a/pyspike/__init__.py b/pyspike/__init__.py
index 1b18569..55687e6 100644
--- a/pyspike/__init__.py
+++ b/pyspike/__init__.py
@@ -10,9 +10,9 @@ from function import PieceWiseConstFunc, PieceWiseLinFunc, \
DiscreteFunction, average_profile
from distances import isi_profile, isi_distance, \
spike_profile, spike_distance, \
- spike_sync_profile, spike_sync_distance, \
+ spike_sync_profile, spike_sync, \
isi_profile_multi, isi_distance_multi, isi_distance_matrix, \
spike_profile_multi, spike_distance_multi, spike_distance_matrix, \
- spike_sync_profile_multi
+ spike_sync_profile_multi, spike_sync_multi, spike_sync_matrix
from spikes import add_auxiliary_spikes, load_spike_trains_from_txt, \
spike_train_from_string, merge_spike_trains, generate_poisson_spikes
diff --git a/pyspike/distances.py b/pyspike/distances.py
index 0f0efa9..8a14a8d 100644
--- a/pyspike/distances.py
+++ b/pyspike/distances.py
@@ -152,10 +152,10 @@ Falling back to slow python backend.")
############################################################
-# spike_sync_distance
+# spike_sync
############################################################
-def spike_sync_distance(spikes1, spikes2):
- return spike_sync_profile(spikes1, spikes2).avrg()
+def spike_sync(spikes1, spikes2, interval=None):
+ return spike_sync_profile(spikes1, spikes2).avrg(interval)
############################################################
@@ -314,6 +314,28 @@ def spike_profile_multi(spike_trains, indices=None):
############################################################
+# spike_distance_multi
+############################################################
+def spike_distance_multi(spike_trains, indices=None, interval=None):
+ """ Computes the multi-variate spike distance for a set of spike trains.
+ That is the time average of the multi-variate spike profile:
+ S_{spike} = \int_0^T 2/((N(N-1)) sum_{<i,j>} S_{spike}^{i, j} dt
+ where the sum goes over all pairs <i,j>
+
+ :param spike_trains: list of spike trains
+ :param indices: list of indices defining which spike trains to use,
+ if None all given spike trains are used (default=None)
+ :type indices: list or None
+ :param interval: averaging interval given as a pair of floats, if None
+ the average over the whole function is computed.
+ :type interval: Pair of floats or None.
+ :returns: The averaged spike distance S.
+ :rtype: double
+ """
+ return spike_profile_multi(spike_trains, indices).avrg(interval)
+
+
+############################################################
# spike_profile_multi
############################################################
def spike_sync_profile_multi(spike_trains, indices=None):
@@ -341,11 +363,9 @@ def spike_sync_profile_multi(spike_trains, indices=None):
############################################################
# spike_distance_multi
############################################################
-def spike_distance_multi(spike_trains, indices=None, interval=None):
- """ Computes the multi-variate spike distance for a set of spike trains.
- That is the time average of the multi-variate spike profile:
- S_{spike} = \int_0^T 2/((N(N-1)) sum_{<i,j>} S_{spike}^{i, j} dt
- where the sum goes over all pairs <i,j>
+def spike_sync_multi(spike_trains, indices=None, interval=None):
+ """ Computes the multi-variate spike synchronization value for a set of
+ spike trains.
:param spike_trains: list of spike trains
:param indices: list of indices defining which spike trains to use,
@@ -354,10 +374,10 @@ def spike_distance_multi(spike_trains, indices=None, interval=None):
:param interval: averaging interval given as a pair of floats, if None
the average over the whole function is computed.
:type interval: Pair of floats or None.
- :returns: The averaged spike distance S.
+ :returns: The averaged spike synchronization value SYNC.
:rtype: double
"""
- return spike_profile_multi(spike_trains, indices).avrg(interval)
+ return spike_sync_profile_multi(spike_trains, indices).avrg(interval)
############################################################
@@ -433,3 +453,25 @@ def spike_distance_matrix(spike_trains, indices=None, interval=None):
"""
return _generic_distance_matrix(spike_trains, spike_distance,
indices, interval)
+
+
+############################################################
+# spike_sync_matrix
+############################################################
+def spike_sync_matrix(spike_trains, indices=None, interval=None):
+ """ Computes the time averaged spike-synchronization value of all pairs of
+ spike-trains.
+
+ :param spike_trains: list of spike trains
+ :param indices: list of indices defining which spike trains to use,
+ if None all given spike trains are used (default=None)
+ :type indices: list or None
+ :param interval: averaging interval given as a pair of floats, if None
+ the average over the whole function is computed.
+ :type interval: Pair of floats or None.
+ :returns: 2D array with the pair wise time spike synchronization values
+ :math:`SYNC_{ij}`
+ :rtype: np.array
+ """
+ return _generic_distance_matrix(spike_trains, spike_sync,
+ indices, interval)
diff --git a/pyspike/function.py b/pyspike/function.py
index 62b0e2c..e0dadf6 100644
--- a/pyspike/function.py
+++ b/pyspike/function.py
@@ -429,6 +429,7 @@ class DiscreteFunction(object):
"""
def get_indices(ival):
+ """ Retuns the indeces surrounding the given interval"""
start_ind = np.searchsorted(self.x, ival[0], side='right')
end_ind = np.searchsorted(self.x, ival[1], side='left')
assert start_ind > 0 and end_ind < len(self.x), \
diff --git a/test/test_distance.py b/test/test_distance.py
index 6bdb049..2650313 100644
--- a/test/test_distance.py
+++ b/test/test_distance.py
@@ -135,22 +135,22 @@ def test_spike_sync():
spikes2 = np.array([2.1])
spikes1 = spk.add_auxiliary_spikes(spikes1, 4.0)
spikes2 = spk.add_auxiliary_spikes(spikes2, 4.0)
- assert_almost_equal(spk.spike_sync_distance(spikes1, spikes2),
+ assert_almost_equal(spk.spike_sync(spikes1, spikes2),
0.5, decimal=16)
spikes2 = np.array([3.1])
spikes2 = spk.add_auxiliary_spikes(spikes2, 4.0)
- assert_almost_equal(spk.spike_sync_distance(spikes1, spikes2),
+ assert_almost_equal(spk.spike_sync(spikes1, spikes2),
0.5, decimal=16)
spikes2 = np.array([1.1])
spikes2 = spk.add_auxiliary_spikes(spikes2, 4.0)
- assert_almost_equal(spk.spike_sync_distance(spikes1, spikes2),
+ assert_almost_equal(spk.spike_sync(spikes1, spikes2),
0.5, decimal=16)
spikes2 = np.array([0.9])
spikes2 = spk.add_auxiliary_spikes(spikes2, 4.0)
- assert_almost_equal(spk.spike_sync_distance(spikes1, spikes2),
+ assert_almost_equal(spk.spike_sync(spikes1, spikes2),
0.5, decimal=16)
@@ -207,11 +207,11 @@ def test_multi_spike_sync():
spikes1 = spk.add_auxiliary_spikes(spikes1, 1000)
spikes2 = spk.add_auxiliary_spikes(spikes2, 1000)
spikes3 = spk.add_auxiliary_spikes(spikes3, 1000)
- assert_almost_equal(spk.spike_sync_distance(spikes1, spikes2),
+ assert_almost_equal(spk.spike_sync(spikes1, spikes2),
0.5, decimal=15)
- assert_almost_equal(spk.spike_sync_distance(spikes1, spikes3),
+ assert_almost_equal(spk.spike_sync(spikes1, spikes3),
0.5, decimal=15)
- assert_almost_equal(spk.spike_sync_distance(spikes2, spikes3),
+ assert_almost_equal(spk.spike_sync(spikes2, spikes3),
0.5, decimal=15)
f = spk.spike_sync_profile_multi([spikes1, spikes2, spikes3])
@@ -220,6 +220,8 @@ def test_multi_spike_sync():
# (np.sum(f1.mp[1:-1])+np.sum(f2.mp[1:-1])+np.sum(f3.mp[1:-1]))
expected = 0.5
assert_almost_equal(f.avrg(), expected, decimal=15)
+ assert_almost_equal(spk.spike_sync_multi([spikes1, spikes2, spikes3]),
+ expected, decimal=15)
# multivariate regression test
spike_trains = spk.load_spike_trains_from_txt("test/SPIKE_Sync_Test.txt",
@@ -267,6 +269,10 @@ def test_spike_matrix():
check_dist_matrix(spk.spike_distance, spk.spike_distance_matrix)
+def test_spike_sync_matrix():
+ check_dist_matrix(spk.spike_sync, spk.spike_sync_matrix)
+
+
def test_regression_spiky():
spike_trains = spk.load_spike_trains_from_txt("test/PySpike_testdata.txt",
(0.0, 4000.0))