summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMario Mulansky <mario.mulansky@gmx.net>2015-02-03 16:40:55 +0100
committerMario Mulansky <mario.mulansky@gmx.net>2015-02-03 16:40:55 +0100
commit7989b2d337a0e5d2e0223d7fdec73833ff47c7bb (patch)
tree6d4fcfd1cf8ab3743ff023d361414d6c967d88e0
parentea61fc2ed03e42b3ea159b7ef7886d005c90e29f (diff)
first version of psth profile
-rw-r--r--examples/spike_sync.py8
-rw-r--r--pyspike/__init__.py3
-rw-r--r--pyspike/cython/python_backend.py1
-rw-r--r--pyspike/psth.py27
4 files changed, 37 insertions, 2 deletions
diff --git a/examples/spike_sync.py b/examples/spike_sync.py
index 7f9e762..9c5f75c 100644
--- a/examples/spike_sync.py
+++ b/examples/spike_sync.py
@@ -30,6 +30,8 @@ plt.legend(loc="center right")
plt.figure()
+plt.subplot(211)
+
f = spk.spike_sync_profile_multi(spike_trains)
x, y = f.get_plottable_data()
plt.plot(x, y, '-b', alpha=0.7, label="SPIKE-Sync profile")
@@ -37,6 +39,12 @@ plt.plot(x, y, '-b', alpha=0.7, label="SPIKE-Sync profile")
x1, y1 = f.get_plottable_data(averaging_window_size=50)
plt.plot(x1, y1, '-k', lw=2.5, label="averaged SPIKE-Sync profile")
+plt.subplot(212)
+
+f_psth = spk.psth(spike_trains, bin_size=5.0)
+x, y = f_psth.get_plottable_data()
+plt.plot(x, y, '-k', alpha=1.0, label="PSTH")
+
print("Average:", f.avrg())
diff --git a/pyspike/__init__.py b/pyspike/__init__.py
index 945dd4e..4d3f9f6 100644
--- a/pyspike/__init__.py
+++ b/pyspike/__init__.py
@@ -4,7 +4,7 @@ Copyright 2014-2015, Mario Mulansky <mario.mulansky@gmx.net>
Distributed under the BSD License
"""
-__all__ = ["isi_distance", "spike_distance", "spike_sync",
+__all__ = ["isi_distance", "spike_distance", "spike_sync", "psth",
"spikes", "PieceWiseConstFunc", "PieceWiseLinFunc",
"DiscreteFunc"]
@@ -18,6 +18,7 @@ from spike_distance import spike_profile, spike_distance, spike_profile_multi,\
spike_distance_multi, spike_distance_matrix
from spike_sync import spike_sync_profile, spike_sync,\
spike_sync_profile_multi, spike_sync_multi, spike_sync_matrix
+from psth import psth
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/cython/python_backend.py b/pyspike/cython/python_backend.py
index 481daf9..4efefc5 100644
--- a/pyspike/cython/python_backend.py
+++ b/pyspike/cython/python_backend.py
@@ -482,4 +482,3 @@ def add_discrete_function_python(x1, y1, mp1, x2, y2, mp2):
# the last value is again the end of the interval
# only use the data that was actually filled
return x_new[:index+1], y_new[:index+1], mp_new[:index+1]
-
diff --git a/pyspike/psth.py b/pyspike/psth.py
new file mode 100644
index 0000000..8516460
--- /dev/null
+++ b/pyspike/psth.py
@@ -0,0 +1,27 @@
+"""
+
+Module containing functions to compute the PSTH profile
+
+Copyright 2015, Mario Mulansky <mario.mulansky@gmx.net>
+
+Distributed under the BSD License
+"""
+
+import numpy as np
+from pyspike import PieceWiseConstFunc
+
+
+# Computes the Peristimulus time histogram of a set of spike trains
+def psth(spike_trains, bin_size):
+
+ bins = int((spike_trains[0][-1] - spike_trains[0][0]) / bin_size)
+
+ N = len(spike_trains)
+ combined_spike_train = spike_trains[0][1:-1]
+ for i in xrange(1, len(spike_trains)):
+ combined_spike_train = np.append(combined_spike_train,
+ spike_trains[i][1:-1])
+
+ vals, edges = np.histogram(combined_spike_train, bins, density=False)
+ bin_size = edges[1]-edges[0]
+ return PieceWiseConstFunc(edges, vals/(N*bin_size))