Perievent#
The perievent module allows to re-center time series and timestamps data around a particular event as well as computing events (spikes) trigger average.
Peri-Event Time Histogram (PETH)#
stim = nap.Tsd(
t=np.sort(np.random.uniform(0, 1000, 50)),
d=np.random.rand(50), time_units="s"
)
ts1 = nap.Ts(t=np.sort(np.random.uniform(0, 1000, 2000)), time_units="s")
The function compute_perievent align timestamps to a particular set of timestamps.
peth = nap.compute_perievent(
timestamps=ts1,
tref=stim,
minmax=(-0.1, 0.2),
time_unit="s")
print(peth)
Index rate ref_times
------- ------- -----------
0 nan 8.64
1 nan 23.72
2 3.33333 69.3
3 6.66667 110.66
4 nan 172.73
5 3.33333 178.42
6 nan 180.01
... ... ...
43 6.66667 894.18
44 3.33333 931.77
45 nan 949.24
46 3.33333 964.66
47 3.33333 967.92
48 3.33333 974.65
49 nan 982.1
The returned object is a TsGroup. The column ref_times is a
metadata column that indicates the center timestamps.
Raster plot#
It is then easy to create a raster plot around the times of the
stimulation event by calling the to_tsd function of pynapple to “flatten” the TsGroup peth.
plt.figure(figsize=(10, 6))
plt.subplot(211)
plt.plot(np.mean(peth.count(0.01), 1) / 0.01, linewidth=3, color="red")
plt.xlim(-0.1, 0.2)
plt.ylabel("Rate (spikes/sec)")
plt.axvline(0.0)
plt.subplot(212)
plt.plot(peth.to_tsd(), "|", markersize=20, color="red", mew=4)
plt.xlabel("Time from stim (s)")
plt.ylabel("Stimulus")
plt.xlim(-0.1, 0.2)
plt.axvline(0.0)
<matplotlib.lines.Line2D at 0x7f7e646f18e0>
The same function can be applied to a group of neurons.
In this case, it returns a dict of TsGroup.
Event trigger average#
The function compute_event_trigger_average compute the average feature around a particular event time.
eta = nap.compute_event_trigger_average(
group=tsgroup,
feature=stim,
binsize=0.1,
windowsize=(-1, 1))
print(eta)
Time (s) 0 1 2
---------- -------- -------- --------
-1.0 0.162717 0.16499 0.168318
-0.9 0.162717 0.16499 0.168318
-0.8 0.162717 0.16499 0.168318
-0.7 0.162717 0.16499 0.168318
-0.6 0.162717 0.16499 0.168318
-0.5 0.162717 0.16499 0.168318
-0.4 0.162717 0.16499 0.168318
...
0.4 0.162717 0.165604 0.16876
0.5 0.162717 0.165604 0.16876
0.6 0.162717 0.165604 0.16876
0.7 0.162717 0.16156 0.16876
0.8 0.162717 0.16156 0.16876
0.9 0.162717 0.16156 0.16876
1.0 0.162717 0.16156 0.16876
dtype: float64, shape: (21, 3)
Peri-Event continuous time series#
The function nap.compute_perievent_continuous align a time series of any dimensions around events.
perievent = nap.compute_perievent_continuous(
timeseries=features,
tref=events,
minmax=(-1, 1))
print(perievent)
Time (s)
---------- -------------------------------
-1 [[-0.552925 ... -0.870809] ...]
0 [[-0.886159 ... -0.729884] ...]
1 [[-0.601281 ... 0.268176] ...]
dtype: float64, shape: (3, 5, 6)
The object perievent is now of shape (number of bins, (dimensions of input), number of events):
print(perievent.shape)
(3, 5, 6)