File: spike_sorting_example.py

package info (click to toggle)
neo 0.14.3-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 10,400 kB
  • sloc: python: 45,316; makefile: 92; sh: 16
file content (48 lines) | stat: -rw-r--r-- 1,267 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
"""
Example for usecases.rst
"""

import numpy as np
from neo import Segment, AnalogSignal, SpikeTrain, Group, ChannelView
from quantities import Hz

# generate some fake data
seg = Segment()
seg.analogsignals.append(
    AnalogSignal(
        [
            [0.1, 0.1, 0.1, 0.1],
            [-2.0, -2.0, -2.0, -2.0],
            [0.1, 0.1, 0.1, 0.1],
            [-0.1, -0.1, -0.1, -0.1],
            [-0.1, -0.1, -0.1, -0.1],
            [-3.0, -3.0, -3.0, -3.0],
            [0.1, 0.1, 0.1, 0.1],
            [0.1, 0.1, 0.1, 0.1],
        ],
        sampling_rate=1000 * Hz,
        units="V",
    )
)

# extract spike trains from all channels
st_list = []
for signal in seg.analogsignals:
    # use a simple threshhold detector
    spike_mask = np.where(np.min(signal.magnitude, axis=1) < -1.0)[0]

    # create a spike train
    spike_times = signal.times[spike_mask]
    st = SpikeTrain(spike_times, t_start=signal.t_start, t_stop=signal.t_stop)

    # remember the spike waveforms
    wf_list = []
    for spike_idx in np.nonzero(spike_mask)[0]:
        wf_list.append(signal[spike_idx - 1 : spike_idx + 2, :])
    st.waveforms = np.array(wf_list)

    st_list.append(st)

unit = Group()
unit.spiketrains = st_list
unit.analogsignals.extend(seg.analogsignals)