Note
Go to the end to download the full example code.
Read various format into SpikeInterface¶
SpikeInterface can read various formats of “recording” (traces) and “sorting” (spike train) data.
- Internally, to read different formats, SpikeInterface either uses:
a wrapper to neo rawio classes
or a direct implementation
Note that:
file formats contain a “recording”, a “sorting”, or “both”
file formats can be file-based (NWB, …) or folder based (SpikeGLX, OpenEphys, …)
In this example we demonstrate how to read different file formats into SI
import matplotlib.pyplot as plt
import spikeinterface.core as si
import spikeinterface.extractors as se
Let’s download some datasets in different formats from the ephy_testing_data repo:
MEArec: a simulator format which is hdf5-based. It contains both a “recording” and a “sorting” in the same file.
Spike2: file from spike2 devices. It contains “recording” information only.
spike2_file_path = si.download_dataset(remote_path="spike2/130322-1LY.smr")
print(spike2_file_path)
mearec_folder_path = si.download_dataset(remote_path="mearec/mearec_test_10s.h5")
print(mearec_folder_path)
0%| | 0.00/16.6M [00:00<?, ?B/s]
0%| | 9.22k/16.6M [00:00<03:38, 75.9kB/s]
0%| | 41.0k/16.6M [00:00<01:30, 184kB/s]
1%|▏ | 94.2k/16.6M [00:00<01:20, 205kB/s]
1%|▍ | 197k/16.6M [00:00<00:53, 305kB/s]
2%|▊ | 319k/16.6M [00:00<00:42, 384kB/s]
2%|▉ | 393k/16.6M [00:01<00:37, 433kB/s]
3%|█ | 451k/16.6M [00:01<00:36, 441kB/s]
3%|█▏ | 508k/16.6M [00:01<00:36, 447kB/s]
3%|█▎ | 565k/16.6M [00:01<00:35, 453kB/s]
4%|█▍ | 623k/16.6M [00:01<00:34, 457kB/s]
4%|█▌ | 683k/16.6M [00:01<00:34, 468kB/s]
4%|█▊ | 745k/16.6M [00:01<00:33, 480kB/s]
5%|█▉ | 803k/16.6M [00:01<00:33, 476kB/s]
5%|██ | 868k/16.6M [00:02<00:31, 492kB/s]
6%|██▏ | 934k/16.6M [00:02<00:31, 505kB/s]
6%|██▎ | 994k/16.6M [00:02<00:31, 502kB/s]
6%|██▍ | 1.06M/16.6M [00:02<00:30, 508kB/s]
7%|██▌ | 1.12M/16.6M [00:02<00:30, 511kB/s]
7%|██▋ | 1.19M/16.6M [00:02<00:29, 518kB/s]
8%|██▊ | 1.25M/16.6M [00:02<00:29, 523kB/s]
8%|███ | 1.32M/16.6M [00:02<00:29, 526kB/s]
8%|███▏ | 1.38M/16.6M [00:03<00:29, 509kB/s]
9%|███▎ | 1.44M/16.6M [00:03<00:29, 517kB/s]
9%|███▍ | 1.51M/16.6M [00:03<00:28, 522kB/s]
9%|███▌ | 1.57M/16.6M [00:03<00:28, 526kB/s]
10%|███▋ | 1.64M/16.6M [00:03<00:28, 528kB/s]
10%|███▉ | 1.71M/16.6M [00:03<00:27, 550kB/s]
11%|████ | 1.78M/16.6M [00:03<00:27, 547kB/s]
11%|████▏ | 1.84M/16.6M [00:03<00:27, 542kB/s]
12%|████▍ | 1.92M/16.6M [00:04<00:26, 559kB/s]
12%|████▌ | 1.99M/16.6M [00:04<00:25, 572kB/s]
12%|████▋ | 2.06M/16.6M [00:04<00:25, 566kB/s]
13%|████▊ | 2.13M/16.6M [00:04<00:25, 571kB/s]
13%|█████ | 2.20M/16.6M [00:04<00:24, 580kB/s]
14%|█████▏ | 2.28M/16.6M [00:04<00:24, 583kB/s]
14%|█████▍ | 2.35M/16.6M [00:04<00:24, 592kB/s]
15%|█████▌ | 2.42M/16.6M [00:04<00:23, 591kB/s]
15%|█████▋ | 2.50M/16.6M [00:05<00:23, 598kB/s]
15%|█████▉ | 2.57M/16.6M [00:05<00:23, 600kB/s]
16%|██████ | 2.65M/16.6M [00:05<00:22, 619kB/s]
16%|██████▏ | 2.73M/16.6M [00:05<00:22, 622kB/s]
17%|██████▍ | 2.81M/16.6M [00:05<00:21, 630kB/s]
17%|██████▌ | 2.89M/16.6M [00:05<00:21, 639kB/s]
18%|██████▊ | 2.97M/16.6M [00:05<00:21, 648kB/s]
18%|██████▉ | 3.06M/16.6M [00:05<00:20, 654kB/s]
19%|███████▏ | 3.13M/16.6M [00:06<00:21, 638kB/s]
19%|███████▎ | 3.22M/16.6M [00:06<00:20, 663kB/s]
20%|███████▌ | 3.30M/16.6M [00:06<00:19, 668kB/s]
20%|███████▋ | 3.39M/16.6M [00:06<00:19, 676kB/s]
21%|███████▉ | 3.47M/16.6M [00:06<00:19, 682kB/s]
21%|████████▏ | 3.56M/16.6M [00:06<00:19, 682kB/s]
22%|████████▎ | 3.64M/16.6M [00:06<00:19, 678kB/s]
22%|████████▌ | 3.73M/16.6M [00:06<00:18, 702kB/s]
23%|████████▋ | 3.82M/16.6M [00:06<00:18, 703kB/s]
24%|████████▉ | 3.91M/16.6M [00:07<00:17, 713kB/s]
24%|█████████▏ | 4.00M/16.6M [00:07<00:17, 719kB/s]
25%|█████████▎ | 4.09M/16.6M [00:07<00:17, 726kB/s]
25%|█████████▌ | 4.18M/16.6M [00:07<00:17, 727kB/s]
26%|█████████▊ | 4.28M/16.6M [00:07<00:16, 749kB/s]
26%|██████████ | 4.37M/16.6M [00:07<00:15, 765kB/s]
27%|██████████▏ | 4.47M/16.6M [00:07<00:15, 776kB/s]
28%|██████████▍ | 4.58M/16.6M [00:07<00:14, 804kB/s]
28%|██████████▋ | 4.69M/16.6M [00:08<00:14, 823kB/s]
29%|██████████▉ | 4.80M/16.6M [00:08<00:13, 857kB/s]
30%|███████████▏ | 4.92M/16.6M [00:08<00:13, 880kB/s]
30%|███████████▌ | 5.04M/16.6M [00:08<00:12, 919kB/s]
31%|███████████▊ | 5.16M/16.6M [00:08<00:12, 944kB/s]
32%|████████████ | 5.26M/16.6M [00:08<00:14, 800kB/s]
33%|████████████▍ | 5.44M/16.6M [00:08<00:11, 995kB/s]
33%|████████████▋ | 5.54M/16.6M [00:09<00:12, 862kB/s]
34%|████████████▉ | 5.64M/16.6M [00:09<00:14, 780kB/s]
34%|█████████████ | 5.72M/16.6M [00:09<00:17, 629kB/s]
35%|█████████████▎ | 5.81M/16.6M [00:09<00:16, 668kB/s]
35%|█████████████▍ | 5.88M/16.6M [00:09<00:19, 550kB/s]
36%|█████████████▌ | 5.95M/16.6M [00:09<00:19, 538kB/s]
36%|█████████████▋ | 6.00M/16.6M [00:09<00:20, 522kB/s]
36%|█████████████▊ | 6.06M/16.6M [00:10<00:20, 503kB/s]
37%|█████████████▉ | 6.11M/16.6M [00:10<00:21, 481kB/s]
37%|██████████████ | 6.16M/16.6M [00:10<00:22, 459kB/s]
37%|██████████████▏ | 6.21M/16.6M [00:10<00:23, 443kB/s]
38%|██████████████▎ | 6.27M/16.6M [00:10<00:22, 450kB/s]
38%|██████████████▍ | 6.32M/16.6M [00:10<00:22, 455kB/s]
38%|██████████████▌ | 6.39M/16.6M [00:10<00:21, 471kB/s]
39%|██████████████▊ | 6.45M/16.6M [00:10<00:21, 478kB/s]
39%|██████████████▉ | 6.50M/16.6M [00:11<00:21, 474kB/s]
40%|███████████████ | 6.56M/16.6M [00:11<00:21, 475kB/s]
40%|███████████████▏ | 6.62M/16.6M [00:11<00:21, 471kB/s]
40%|███████████████▎ | 6.68M/16.6M [00:11<00:20, 485kB/s]
41%|███████████████▍ | 6.73M/16.6M [00:11<00:25, 385kB/s]
41%|███████████████▌ | 6.82M/16.6M [00:11<00:21, 465kB/s]
41%|███████████████▋ | 6.87M/16.6M [00:11<00:21, 448kB/s]
42%|███████████████▊ | 6.91M/16.6M [00:12<00:22, 431kB/s]
42%|███████████████▉ | 6.96M/16.6M [00:12<00:23, 413kB/s]
42%|████████████████ | 7.00M/16.6M [00:12<00:24, 395kB/s]
42%|████████████████ | 7.05M/16.6M [00:12<00:24, 385kB/s]
43%|████████████████▎ | 7.10M/16.6M [00:12<00:23, 409kB/s]
43%|████████████████▎ | 7.15M/16.6M [00:12<00:23, 407kB/s]
43%|████████████████▍ | 7.20M/16.6M [00:12<00:22, 410kB/s]
44%|████████████████▌ | 7.26M/16.6M [00:12<00:22, 422kB/s]
44%|████████████████▋ | 7.32M/16.6M [00:13<00:21, 435kB/s]
44%|████████████████▊ | 7.37M/16.6M [00:13<00:20, 445kB/s]
45%|█████████████████ | 7.43M/16.6M [00:13<00:19, 462kB/s]
45%|█████████████████▏ | 7.50M/16.6M [00:13<00:19, 473kB/s]
45%|█████████████████▎ | 7.55M/16.6M [00:13<00:19, 457kB/s]
46%|█████████████████▍ | 7.61M/16.6M [00:13<00:18, 474kB/s]
46%|█████████████████▌ | 7.67M/16.6M [00:13<00:18, 473kB/s]
47%|█████████████████▋ | 7.73M/16.6M [00:13<00:18, 471kB/s]
47%|█████████████████▊ | 7.78M/16.6M [00:13<00:18, 470kB/s]
47%|█████████████████▉ | 7.85M/16.6M [00:14<00:17, 489kB/s]
48%|██████████████████ | 7.91M/16.6M [00:14<00:17, 485kB/s]
48%|██████████████████▏ | 7.96M/16.6M [00:14<00:18, 478kB/s]
48%|██████████████████▎ | 8.03M/16.6M [00:14<00:17, 493kB/s]
49%|██████████████████▌ | 8.09M/16.6M [00:14<00:17, 487kB/s]
49%|██████████████████▋ | 8.14M/16.6M [00:14<00:17, 481kB/s]
49%|██████████████████▊ | 8.20M/16.6M [00:14<00:17, 482kB/s]
50%|██████████████████▉ | 8.27M/16.6M [00:14<00:16, 493kB/s]
50%|███████████████████ | 8.32M/16.6M [00:15<00:17, 485kB/s]
51%|███████████████████▏ | 8.39M/16.6M [00:15<00:16, 495kB/s]
51%|███████████████████▎ | 8.45M/16.6M [00:15<00:16, 492kB/s]
51%|███████████████████▍ | 8.50M/16.6M [00:15<00:16, 485kB/s]
52%|███████████████████▌ | 8.57M/16.6M [00:15<00:16, 499kB/s]
52%|███████████████████▊ | 8.63M/16.6M [00:15<00:15, 510kB/s]
52%|███████████████████▉ | 8.70M/16.6M [00:15<00:15, 517kB/s]
53%|████████████████████ | 8.77M/16.6M [00:15<00:15, 522kB/s]
53%|████████████████████▏ | 8.83M/16.6M [00:16<00:14, 526kB/s]
54%|████████████████████▎ | 8.90M/16.6M [00:16<00:14, 529kB/s]
54%|████████████████████▌ | 8.97M/16.6M [00:16<00:13, 550kB/s]
54%|████████████████████▋ | 9.04M/16.6M [00:16<00:13, 545kB/s]
55%|████████████████████▊ | 9.11M/16.6M [00:16<00:13, 561kB/s]
55%|████████████████████▉ | 9.18M/16.6M [00:16<00:13, 554kB/s]
56%|█████████████████████▏ | 9.25M/16.6M [00:16<00:12, 573kB/s]
56%|█████████████████████▎ | 9.32M/16.6M [00:16<00:12, 576kB/s]
57%|█████████████████████▌ | 9.40M/16.6M [00:17<00:12, 584kB/s]
57%|█████████████████████▋ | 9.47M/16.6M [00:17<00:12, 588kB/s]
57%|█████████████████████▊ | 9.54M/16.6M [00:17<00:11, 594kB/s]
58%|██████████████████████ | 9.62M/16.6M [00:17<00:11, 596kB/s]
58%|██████████████████████▏ | 9.69M/16.6M [00:17<00:11, 597kB/s]
59%|██████████████████████▎ | 9.76M/16.6M [00:17<00:11, 598kB/s]
59%|██████████████████████▌ | 9.85M/16.6M [00:17<00:10, 619kB/s]
60%|██████████████████████▋ | 9.93M/16.6M [00:17<00:10, 633kB/s]
60%|██████████████████████▉ | 10.0M/16.6M [00:18<00:10, 624kB/s]
61%|███████████████████████ | 10.1M/16.6M [00:18<00:10, 637kB/s]
61%|███████████████████████▎ | 10.2M/16.6M [00:18<00:09, 646kB/s]
62%|███████████████████████▍ | 10.3M/16.6M [00:18<00:09, 658kB/s]
62%|███████████████████████▋ | 10.3M/16.6M [00:18<00:09, 658kB/s]
63%|███████████████████████▊ | 10.4M/16.6M [00:18<00:09, 679kB/s]
63%|████████████████████████ | 10.5M/16.6M [00:18<00:08, 706kB/s]
64%|████████████████████████▎ | 10.6M/16.6M [00:18<00:08, 728kB/s]
64%|████████████████████████▌ | 10.7M/16.6M [00:19<00:07, 746kB/s]
65%|████████████████████████▋ | 10.8M/16.6M [00:19<00:07, 763kB/s]
66%|████████████████████████▉ | 10.9M/16.6M [00:19<00:07, 795kB/s]
66%|█████████████████████████▏ | 11.0M/16.6M [00:19<00:06, 817kB/s]
67%|█████████████████████████▍ | 11.1M/16.6M [00:19<00:06, 832kB/s]
68%|█████████████████████████▋ | 11.3M/16.6M [00:19<00:06, 889kB/s]
68%|██████████████████████████ | 11.4M/16.6M [00:19<00:05, 915kB/s]
69%|██████████████████████████▎ | 11.5M/16.6M [00:19<00:05, 960kB/s]
70%|██████████████████████████▌ | 11.6M/16.6M [00:19<00:05, 993kB/s]
71%|██████████████████████████▏ | 11.8M/16.6M [00:20<00:04, 1.04MB/s]
72%|██████████████████████████▌ | 11.9M/16.6M [00:20<00:04, 1.07MB/s]
73%|██████████████████████████▉ | 12.1M/16.6M [00:20<00:04, 1.12MB/s]
74%|███████████████████████████▏ | 12.2M/16.6M [00:20<00:03, 1.17MB/s]
74%|████████████████████████████▏ | 12.3M/16.6M [00:20<00:04, 997kB/s]
75%|████████████████████████████▋ | 12.5M/16.6M [00:20<00:04, 904kB/s]
77%|█████████████████████████████ | 12.7M/16.6M [00:21<00:04, 833kB/s]
77%|█████████████████████████████▍ | 12.8M/16.6M [00:21<00:04, 896kB/s]
78%|█████████████████████████████▌ | 12.9M/16.6M [00:21<00:04, 750kB/s]
78%|█████████████████████████████▊ | 13.0M/16.6M [00:21<00:04, 730kB/s]
79%|█████████████████████████████▉ | 13.1M/16.6M [00:21<00:05, 651kB/s]
79%|██████████████████████████████▏ | 13.2M/16.6M [00:21<00:05, 631kB/s]
80%|██████████████████████████████▎ | 13.2M/16.6M [00:22<00:05, 604kB/s]
80%|██████████████████████████████▍ | 13.3M/16.6M [00:22<00:05, 587kB/s]
80%|██████████████████████████████▌ | 13.4M/16.6M [00:22<00:05, 570kB/s]
81%|██████████████████████████████▋ | 13.4M/16.6M [00:22<00:05, 574kB/s]
81%|██████████████████████████████▉ | 13.5M/16.6M [00:22<00:05, 562kB/s]
82%|███████████████████████████████ | 13.6M/16.6M [00:22<00:05, 583kB/s]
82%|███████████████████████████████▏ | 13.6M/16.6M [00:22<00:05, 575kB/s]
83%|███████████████████████████████▍ | 13.7M/16.6M [00:22<00:05, 567kB/s]
83%|███████████████████████████████▌ | 13.8M/16.6M [00:22<00:04, 577kB/s]
83%|███████████████████████████████▋ | 13.9M/16.6M [00:23<00:04, 580kB/s]
84%|███████████████████████████████▊ | 13.9M/16.6M [00:23<00:04, 571kB/s]
84%|████████████████████████████████ | 14.0M/16.6M [00:23<00:04, 587kB/s]
85%|████████████████████████████████▏ | 14.1M/16.6M [00:23<00:04, 567kB/s]
85%|████████████████████████████████▎ | 14.1M/16.6M [00:23<00:04, 574kB/s]
86%|████████████████████████████████▌ | 14.2M/16.6M [00:23<00:04, 583kB/s]
86%|████████████████████████████████▋ | 14.3M/16.6M [00:23<00:03, 587kB/s]
86%|████████████████████████████████▊ | 14.4M/16.6M [00:23<00:03, 597kB/s]
87%|█████████████████████████████████ | 14.4M/16.6M [00:24<00:03, 593kB/s]
87%|█████████████████████████████████▏ | 14.5M/16.6M [00:24<00:03, 595kB/s]
88%|█████████████████████████████████▎ | 14.6M/16.6M [00:24<00:03, 597kB/s]
88%|█████████████████████████████████▌ | 14.7M/16.6M [00:24<00:03, 618kB/s]
89%|█████████████████████████████████▋ | 14.7M/16.6M [00:24<00:03, 616kB/s]
89%|█████████████████████████████████▉ | 14.8M/16.6M [00:24<00:02, 629kB/s]
90%|██████████████████████████████████ | 14.9M/16.6M [00:24<00:02, 641kB/s]
90%|██████████████████████████████████▎ | 15.0M/16.6M [00:24<00:02, 629kB/s]
91%|██████████████████████████████████▍ | 15.0M/16.6M [00:25<00:03, 462kB/s]
91%|██████████████████████████████████▋ | 15.2M/16.6M [00:25<00:02, 612kB/s]
92%|██████████████████████████████████▊ | 15.2M/16.6M [00:25<00:02, 595kB/s]
92%|███████████████████████████████████ | 15.3M/16.6M [00:25<00:02, 575kB/s]
93%|███████████████████████████████████▏ | 15.4M/16.6M [00:25<00:02, 558kB/s]
93%|███████████████████████████████████▎ | 15.4M/16.6M [00:25<00:02, 536kB/s]
93%|███████████████████████████████████▍ | 15.5M/16.6M [00:25<00:02, 537kB/s]
94%|███████████████████████████████████▌ | 15.6M/16.6M [00:26<00:01, 537kB/s]
94%|███████████████████████████████████▊ | 15.6M/16.6M [00:26<00:01, 546kB/s]
95%|███████████████████████████████████▉ | 15.7M/16.6M [00:26<00:01, 553kB/s]
95%|████████████████████████████████████ | 15.8M/16.6M [00:26<00:01, 570kB/s]
95%|████████████████████████████████████▎ | 15.8M/16.6M [00:26<00:01, 577kB/s]
96%|████████████████████████████████████▍ | 15.9M/16.6M [00:26<00:01, 599kB/s]
96%|████████████████████████████████████▌ | 16.0M/16.6M [00:26<00:01, 605kB/s]
97%|████████████████████████████████████▊ | 16.1M/16.6M [00:26<00:00, 604kB/s]
97%|████████████████████████████████████▉ | 16.2M/16.6M [00:27<00:00, 622kB/s]
98%|█████████████████████████████████████▏| 16.2M/16.6M [00:27<00:00, 635kB/s]
98%|█████████████████████████████████████▎| 16.3M/16.6M [00:27<00:00, 637kB/s]
99%|█████████████████████████████████████▌| 16.4M/16.6M [00:27<00:00, 640kB/s]
99%|█████████████████████████████████████▋| 16.5M/16.6M [00:27<00:00, 646kB/s]
100%|█████████████████████████████████████▉| 16.6M/16.6M [00:27<00:00, 650kB/s]
0%| | 0.00/16.6M [00:00<?, ?B/s]
100%|█████████████████████████████████████| 16.6M/16.6M [00:00<00:00, 57.4GB/s]
/home/docs/spikeinterface_datasets/ephy_testing_data/spike2/130322-1LY.smr
/home/docs/spikeinterface_datasets/ephy_testing_data/mearec/mearec_test_10s.h5
Now that we have downloaded the files, let’s load them into SI.
The read_spike2() function returns one object,
a BaseRecording.
Note that internally this file contains 2 data streams (‘0’ and ‘1’), so we need to specify which one we
want to retrieve (‘0’ in our case).
the stream information can be retrieved by using the get_neo_streams() function.
stream_names, stream_ids = se.get_neo_streams("spike2", spike2_file_path)
print(stream_names)
print(stream_ids)
stream_id = stream_ids[0]
print("stream_id", stream_id)
recording = se.read_spike2(spike2_file_path, stream_id="0")
print(recording)
print(type(recording))
print(isinstance(recording, si.BaseRecording))
['Signal stream 0', 'Signal stream 1']
['0', '1']
stream_id 0
Spike2RecordingExtractor: 1 channels - 20.8kHz - 1 segments - 4,126,365 samples
198.07s (3.30 minutes) - int16 dtype - 7.87 MiB
file_path: /home/docs/spikeinterface_datasets/ephy_testing_data/spike2/130322-1LY.smr
<class 'spikeinterface.extractors.neoextractors.spike2.Spike2RecordingExtractor'>
True
The read_spike2`() function is equivalent to instantiating a
Spike2RecordingExtractor object:
recording = se.Spike2RecordingExtractor(spike2_file_path, stream_id="0")
print(recording)
Spike2RecordingExtractor: 1 channels - 20.8kHz - 1 segments - 4,126,365 samples
198.07s (3.30 minutes) - int16 dtype - 7.87 MiB
file_path: /home/docs/spikeinterface_datasets/ephy_testing_data/spike2/130322-1LY.smr
The read_mearec() function returns two objects,
a BaseRecording and a BaseSorting:
recording, sorting = se.read_mearec(mearec_folder_path)
print(recording)
print(type(recording))
print()
print(sorting)
print(type(sorting))
MEArecRecordingExtractor: 32 channels - 32.0kHz - 1 segments - 320,000 samples - 10.00s
float32 dtype - 39.06 MiB
file_path: /home/docs/spikeinterface_datasets/ephy_testing_data/mearec/mearec_test_10s.h5
<class 'spikeinterface.extractors.neoextractors.mearec.MEArecRecordingExtractor'>
MEArecSortingExtractor: 10 units - 1 segments - 32.0kHz
file_path: /home/docs/spikeinterface_datasets/ephy_testing_data/mearec/mearec_test_10s.h5
<class 'spikeinterface.extractors.neoextractors.mearec.MEArecSortingExtractor'>
The read_mearec() function is equivalent to:
recording = se.MEArecRecordingExtractor(mearec_folder_path)
sorting = se.MEArecSortingExtractor(mearec_folder_path)
SI objects (BaseRecording and BaseSorting)
can be plotted quickly with the spikeinterface.widgets submodule:
import spikeinterface.widgets as sw
w_ts = sw.plot_traces(recording, time_range=(0, 5))
w_rs = sw.plot_rasters(sorting, time_range=(0, 5))
plt.show()
Total running time of the script: (0 minutes 30.093 seconds)

