/
kilosort_example.py
49 lines (34 loc) · 1.65 KB
/
kilosort_example.py
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
49
import spikeinterface.extractors as si_extractors
import spikeinterface.preprocessing as si_prepro
import spikeinterface.sorters as si_sorters
from pathlib import Path
base_path = Path(r"/ceph/neuroinformatics/neuroinformatics/scratch/jziminski/extracellular-ephys-analysis-course-2023/example_data")
data_path = base_path / r"rawdata" / "sub-001" / "ses-001" / "ephys"
output_path = base_path / "derivatives" / "sub-001" / "ses-001" / "ephys"
# Loading Raw Data ---------------------------------------------------------------------
print("Loading data)")
raw_recording = si_extractors.read_spikeglx(data_path)
# Preprocessing ------------------------------------------------------------------------
# We skip the whitening step, because it is performed in Kilosort
print("Running preprocessing")
shifted_recording = si_prepro.phase_shift(raw_recording)
filtered_recording = si_prepro.bandpass_filter(
shifted_recording, freq_min=300, freq_max=6000
)
preprocessed_recording = si_prepro.common_reference(
filtered_recording, reference="global", operator="median"
)
# Sorting ------------------------------------------------------------------------------
# We do common median referencing in SpikeInterface, and skip Common Average Reference
# in Kilosort. We also set the frequency cutoff for Kilosort#s lowpass filter
# very low (so it has no effect) because we bandpass filter in SpikeInterface.
print("Starting sorting")
sorting_output_path = output_path / "sorting"
sorting = si_sorters.run_sorter(
"kilosort2_5",
preprocessed_recording,
output_folder=(output_path / "sorting").as_posix(),
singularity_image=True,
car=False,
freq_min=300,
)