From 7989b2d337a0e5d2e0223d7fdec73833ff47c7bb Mon Sep 17 00:00:00 2001 From: Mario Mulansky Date: Tue, 3 Feb 2015 16:40:55 +0100 Subject: first version of psth profile --- examples/spike_sync.py | 8 ++++++++ pyspike/__init__.py | 3 ++- pyspike/cython/python_backend.py | 1 - pyspike/psth.py | 27 +++++++++++++++++++++++++++ 4 files changed, 37 insertions(+), 2 deletions(-) create mode 100644 pyspike/psth.py 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 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 + +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)) -- cgit v1.2.3