From ee9bdae7864ff6767ea704fa6371a3472ad3eca9 Mon Sep 17 00:00:00 2001 From: Samuel Garcia Date: Mon, 27 Apr 2026 21:21:53 +0200 Subject: [PATCH 1/7] generate recording with probe from library --- .../generation/drifting_generator.py | 100 +++++++++--------- .../tests/test_drifing_generator.py | 22 +++- 2 files changed, 69 insertions(+), 53 deletions(-) diff --git a/src/spikeinterface/generation/drifting_generator.py b/src/spikeinterface/generation/drifting_generator.py index 7c388713d7..9ef1cd1098 100644 --- a/src/spikeinterface/generation/drifting_generator.py +++ b/src/spikeinterface/generation/drifting_generator.py @@ -10,7 +10,7 @@ import numpy as np -from probeinterface import generate_multi_columns_probe +from probeinterface import generate_multi_columns_probe, get_probe, generate_tetrode from spikeinterface import Templates from spikeinterface.core import ms_to_samples @@ -24,53 +24,50 @@ from .drift_tools import DriftingTemplates, make_linear_displacement, InjectDriftingTemplatesRecording from .noise_tools import generate_noise -# this should be moved in probeinterface but later -_toy_probes = { - "Neuropixels1-384": dict( - num_columns=4, - num_contact_per_column=[96] * 4, - xpitch=16, - ypitch=40, - y_shift_per_column=[20, 0, 20, 0], - contact_shapes="square", - contact_shape_params={"width": 12}, - ), - "Neuropixels2-384": dict( - num_columns=2, - num_contact_per_column=[192] * 2, - xpitch=32, - ypitch=15, - contact_shapes="square", - contact_shape_params={"width": 12}, - ), - "Neuropixels2-128": dict( - num_columns=2, - num_contact_per_column=[64] * 2, - xpitch=32, - ypitch=15, - contact_shapes="square", - contact_shape_params={"width": 12}, - ), - "Neuropixels1-128": dict( - num_columns=4, - num_contact_per_column=[32] * 4, - xpitch=16, - ypitch=40, - y_shift_per_column=[20, 0, 20, 0], - contact_shapes="square", - contact_shape_params={"width": 12}, - ), - "Neuronexus-32": dict( - num_columns=3, - num_contact_per_column=[10, 12, 10], - xpitch=30, - ypitch=30, - y_shift_per_column=[0, -15, 0], - contact_shapes="circle", - contact_shape_params={"radius": 8}, - ), -} +def _make_probe_by_name(probe_name: str): + # this function replace the old _toy_probes dict that generate probe using generate_multi_columns_probe() + # this is now using the probeinterface library directly + # for using the library the namùe can be given: + # dataset_name = 'cambridgeneurotech/ASSY-37-H7b_50_1800.s' + # dataset_name = 'cambridgeneurotech#ASSY-37-H7b_50_1800.s' + if probe_name == "Neuropixels1-384": + probe = get_probe("imec", "NP1000") + probe = probe.get_slice(np.arange(384)) + elif probe_name == "Neuropixels1-128": + probe = get_probe("imec", "NP1000") + probe = probe.get_slice(np.arange(128)) + elif probe_name == "Neuropixels2-384": + probe = get_probe("imec", "NP2000") + probe = probe.get_slice(np.arange(384)) + elif probe_name == "Neuropixels2-128": + probe = get_probe("imec", "NP2000") + probe = probe.get_slice(np.arange(128)) + elif probe_name == "Neuronexus-32": + # this probe was not existing really, it was a 'generic' 32 channels + # lets keep as before + probe = generate_multi_columns_probe( + num_columns=3, + num_contact_per_column=[10, 12, 10], + xpitch=30, + ypitch=30, + y_shift_per_column=[0, -15, 0], + contact_shapes="circle", + contact_shape_params={"radius": 8}, + ) + elif probe_name == "tetrode": + probe = generate_tetrode() + elif "/" in probe_name: + manufacturer, probe_name_ = probe_name.split("/") + probe = get_probe(manufacturer, probe_name_) + elif "#" in probe_name: + manufacturer, probe_name_ = probe_name.split("#") + probe = get_probe(manufacturer, probe_name_) + else: + raise ValueError("wring probe_name") + + print(probe) + return probe def make_one_displacement_vector( drift_mode="zigzag", @@ -449,10 +446,11 @@ def generate_drifting_recording( # probe if probe is None: - if generate_probe_kwargs is None: - generate_probe_kwargs = _toy_probes[probe_name] - - probe = generate_multi_columns_probe(**generate_probe_kwargs) + if generate_probe_kwargs is not None: + probe = generate_multi_columns_probe(**generate_probe_kwargs) + else: + probe = _make_probe_by_name(probe_name) + # the wiring do not matter because the traces are generated after using the channel locations num_channels = probe.get_contact_count() probe.set_device_channel_indices(np.arange(num_channels)) diff --git a/src/spikeinterface/generation/tests/test_drifing_generator.py b/src/spikeinterface/generation/tests/test_drifing_generator.py index a7f6040ec2..a4166a515c 100644 --- a/src/spikeinterface/generation/tests/test_drifing_generator.py +++ b/src/spikeinterface/generation/tests/test_drifing_generator.py @@ -95,6 +95,24 @@ def test_generate_drifting_recording(): seed=2205, ) + static_recording, drifting_recording, sorting = generate_drifting_recording( + num_units=10, + probe_name="cambridgeneurotech/ASSY-1-E-1", + seed=2205, + ) + static_recording, drifting_recording, sorting = generate_drifting_recording( + num_units=10, + probe_name="cambridgeneurotech#ASSY-1-E-1", + seed=2205, + ) + + static_recording, drifting_recording, sorting = generate_drifting_recording( + num_units=10, + probe_name="Neuropixels2-128", + seed=2205, + ) + + # print(static_recording) # print(drifting_recording) # print(sorting) @@ -104,6 +122,6 @@ def test_generate_drifting_recording(): if __name__ == "__main__": # test_make_one_displacement_vector() - test_generate_displacement_vector() + # test_generate_displacement_vector() # test_generate_noise() - # test_generate_drifting_recording() + test_generate_drifting_recording() From 20908204756d0f8988308cac841d1185b3544671 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 27 Apr 2026 19:22:52 +0000 Subject: [PATCH 2/7] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- src/spikeinterface/generation/drifting_generator.py | 1 + src/spikeinterface/generation/tests/test_drifing_generator.py | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/src/spikeinterface/generation/drifting_generator.py b/src/spikeinterface/generation/drifting_generator.py index 9ef1cd1098..abb53147ed 100644 --- a/src/spikeinterface/generation/drifting_generator.py +++ b/src/spikeinterface/generation/drifting_generator.py @@ -69,6 +69,7 @@ def _make_probe_by_name(probe_name: str): print(probe) return probe + def make_one_displacement_vector( drift_mode="zigzag", duration=600.0, diff --git a/src/spikeinterface/generation/tests/test_drifing_generator.py b/src/spikeinterface/generation/tests/test_drifing_generator.py index a4166a515c..5eb49a04c6 100644 --- a/src/spikeinterface/generation/tests/test_drifing_generator.py +++ b/src/spikeinterface/generation/tests/test_drifing_generator.py @@ -112,7 +112,6 @@ def test_generate_drifting_recording(): seed=2205, ) - # print(static_recording) # print(drifting_recording) # print(sorting) From 4a57ceffb406c47269b692db5b050e9c34c97215 Mon Sep 17 00:00:00 2001 From: Samuel Garcia Date: Wed, 29 Apr 2026 17:11:56 +0200 Subject: [PATCH 3/7] sinaps probe --- src/spikeinterface/generation/drifting_generator.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/spikeinterface/generation/drifting_generator.py b/src/spikeinterface/generation/drifting_generator.py index 9ef1cd1098..6398f6664d 100644 --- a/src/spikeinterface/generation/drifting_generator.py +++ b/src/spikeinterface/generation/drifting_generator.py @@ -57,6 +57,10 @@ def _make_probe_by_name(probe_name: str): ) elif probe_name == "tetrode": probe = generate_tetrode() + elif 'sinaps-128': + probe = get_probe('sinaps-research-platform', 'p1024s1NHP') + order = np.argsort(probe.contact_ids.astype('int64')) + probe = probe.get_slice(order[:128]) elif "/" in probe_name: manufacturer, probe_name_ = probe_name.split("/") probe = get_probe(manufacturer, probe_name_) @@ -66,7 +70,6 @@ def _make_probe_by_name(probe_name: str): else: raise ValueError("wring probe_name") - print(probe) return probe def make_one_displacement_vector( From 51ff25aa98402c4f23195cf49a48a0405ca354fa Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Wed, 29 Apr 2026 15:12:47 +0000 Subject: [PATCH 4/7] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- src/spikeinterface/generation/drifting_generator.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/spikeinterface/generation/drifting_generator.py b/src/spikeinterface/generation/drifting_generator.py index e3cf4e197a..1f68c1a62e 100644 --- a/src/spikeinterface/generation/drifting_generator.py +++ b/src/spikeinterface/generation/drifting_generator.py @@ -57,9 +57,9 @@ def _make_probe_by_name(probe_name: str): ) elif probe_name == "tetrode": probe = generate_tetrode() - elif 'sinaps-128': - probe = get_probe('sinaps-research-platform', 'p1024s1NHP') - order = np.argsort(probe.contact_ids.astype('int64')) + elif "sinaps-128": + probe = get_probe("sinaps-research-platform", "p1024s1NHP") + order = np.argsort(probe.contact_ids.astype("int64")) probe = probe.get_slice(order[:128]) elif "/" in probe_name: manufacturer, probe_name_ = probe_name.split("/") From f4891960d22980637a02e7d94bbb8c325a4d9cfa Mon Sep 17 00:00:00 2001 From: Samuel Garcia Date: Wed, 29 Apr 2026 21:58:38 +0200 Subject: [PATCH 5/7] oups --- src/spikeinterface/generation/drifting_generator.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/spikeinterface/generation/drifting_generator.py b/src/spikeinterface/generation/drifting_generator.py index 1f68c1a62e..5a17bc3e29 100644 --- a/src/spikeinterface/generation/drifting_generator.py +++ b/src/spikeinterface/generation/drifting_generator.py @@ -57,7 +57,7 @@ def _make_probe_by_name(probe_name: str): ) elif probe_name == "tetrode": probe = generate_tetrode() - elif "sinaps-128": + elif probe_name == "sinaps-128": probe = get_probe("sinaps-research-platform", "p1024s1NHP") order = np.argsort(probe.contact_ids.astype("int64")) probe = probe.get_slice(order[:128]) From a3bf3affc2298467215bcda64cc94ebaef50f3e5 Mon Sep 17 00:00:00 2001 From: Alessio Buccino Date: Mon, 4 May 2026 15:24:37 +0200 Subject: [PATCH 6/7] Apply suggestion from @chrishalcrow Co-authored-by: Chris Halcrow <57948917+chrishalcrow@users.noreply.github.com> --- src/spikeinterface/generation/drifting_generator.py | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/spikeinterface/generation/drifting_generator.py b/src/spikeinterface/generation/drifting_generator.py index 5a17bc3e29..cbb93844b2 100644 --- a/src/spikeinterface/generation/drifting_generator.py +++ b/src/spikeinterface/generation/drifting_generator.py @@ -26,11 +26,14 @@ def _make_probe_by_name(probe_name: str): - # this function replace the old _toy_probes dict that generate probe using generate_multi_columns_probe() - # this is now using the probeinterface library directly - # for using the library the namùe can be given: - # dataset_name = 'cambridgeneurotech/ASSY-37-H7b_50_1800.s' - # dataset_name = 'cambridgeneurotech#ASSY-37-H7b_50_1800.s' + """ + Generates a probe from probeinterface library, using the manufacturer name combined with the probe name, e.g. + - 'cambridgeneurotech/ASSY-37-H7b' + - 'cambridgeneurotech#ASSY-37-H7b' + - 'imec#NP1000" + + This function replace the old `_toy_probes` dict that generate probe using `generate_multi_columns_probe()` + """ if probe_name == "Neuropixels1-384": probe = get_probe("imec", "NP1000") probe = probe.get_slice(np.arange(384)) From a04aaf08aecce83f19efb60ab5e8df7513229844 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 4 May 2026 13:25:00 +0000 Subject: [PATCH 7/7] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- src/spikeinterface/generation/drifting_generator.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/spikeinterface/generation/drifting_generator.py b/src/spikeinterface/generation/drifting_generator.py index cbb93844b2..5529c56a4f 100644 --- a/src/spikeinterface/generation/drifting_generator.py +++ b/src/spikeinterface/generation/drifting_generator.py @@ -31,7 +31,7 @@ def _make_probe_by_name(probe_name: str): - 'cambridgeneurotech/ASSY-37-H7b' - 'cambridgeneurotech#ASSY-37-H7b' - 'imec#NP1000" - + This function replace the old `_toy_probes` dict that generate probe using `generate_multi_columns_probe()` """ if probe_name == "Neuropixels1-384":