From 4fd98cc5f26c516f742c9b0a2dc787d309d65d32 Mon Sep 17 00:00:00 2001 From: Mario Mulansky Date: Mon, 15 Dec 2014 16:52:44 +0100 Subject: improved implementation of spike_sync --- pyspike/python_backend.py | 54 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) (limited to 'pyspike/python_backend.py') diff --git a/pyspike/python_backend.py b/pyspike/python_backend.py index b85262d..7f8ea8c 100644 --- a/pyspike/python_backend.py +++ b/pyspike/python_backend.py @@ -242,6 +242,60 @@ def cumulative_sync_python(spikes1, spikes2): return st, c +############################################################ +# coincidence_python +############################################################ +def coincidence_python(spikes1, spikes2): + + def get_tau(spikes1, spikes2, i, j): + return 0.5*min([spikes1[i]-spikes1[i-1], spikes1[i+1]-spikes1[i], + spikes2[j]-spikes2[j-1], spikes2[j+1]-spikes2[j]]) + N1 = len(spikes1) + N2 = len(spikes2) + i = 0 + j = 0 + n = 0 + st = np.zeros(N1 + N2 - 2) + c = np.zeros(N1 + N2 - 3) + c[0] = 0 + st[0] = 0 + while n < N1 + N2: + if spikes1[i+1] < spikes2[j+1]: + i += 1 + n += 1 + tau = get_tau(spikes1, spikes2, i, j) + st[n] = spikes1[i] + if spikes1[i]-spikes2[j] > tau: + c[n] = 0 + else: + c[n] = 1 + elif spikes1[i+1] > spikes2[j+1]: + j += 1 + n += 1 + tau = get_tau(spikes1, spikes2, i, j) + st[n] = spikes2[j] + if spikes2[j]-spikes1[i] > tau: + c[n] = 0 + else: + c[n] = 1 + else: # spikes1[i+1] = spikes2[j+1] + j += 1 + i += 1 + if i == N1-1 or j == N2-1: + break + n += 1 + st[n] = spikes1[i] + c[n] = 0 + n += 1 + st[n] = spikes1[i] + c[n] = 1 + c[0] = c[2] + st[0] = spikes1[0] + st[-1] = spikes1[-1] + + return st, c + + ############################################################ # add_piece_wise_const_python ############################################################ -- cgit v1.2.3