SpikeInterface / SpikeInterface/spikeinterface

Support for Neuropixels Ultra (NP1110) in SpikeInterface

Open
#3,913 14 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

extractors
Dominant language
Python
Stars
847
Forks
280
Avg merge
3d 9h
Merged PRs (30d)
29

Description

Title: Support for Neuropixels Ultra (NP1110) in SpikeInterface and DREDge

Description:

I am using Neuropixels Ultra (NP1110) probes for neural recordings and encountered issues when processing the data using SpikeInterface and DREDge. The current implementation appears to lack explicit support for NP Ultra probes. Below are the specific issues identified and proposed modifications:


Issues Identified:
  1. IMRO Table Parsing (SpikeInterface)

    • The .meta file for NP1110 uses a different imroTbl format: (channel_id, bank, mux_group) compared to NP1/NP2.
    • Global parameters (AP/LF gains, reference, filter) are stored in the header rather than per-channel values.
    • The _read_imro_string() function currently expects per-channel gain/filter fields, leading to a failure when processing NP1110 data.

    Proposed Fix:

    • Modify _read_imro_string() to handle NP1110-specific parsing.
    • Extract global parameters directly from the IMRO header and adjust the data structure to use ("channel_ids", "banks", "mux_groups").

  1. Channel Index Mismatch (SpikeInterface)

    • After slicing the probe to match snsSaveChanSubset, the device_channel_indices are reset using np.arange(), causing set_probe(inplace=True) to fail.
    • The original channel indices need to be preserved for accurate mapping.

    Proposed Fix:

    • Update the slicing procedure to retain original channel indices:

      probe.set_device_channel_indices(saved_chans)  # Preserve instead of using np.arange()  
      

  1. Global Parameters Handling (SpikeInterface)

    • NP1110 AP/LF gains and filters are defined once in the IMRO header (e.g., (1110,2,0,500,250,1)), while the current code assumes per-channel values.

    Proposed Fix:

    • Modify the .meta file reader to annotate the global parameters directly, e.g., probe.annotate(global_ap_gain=500).

  1. NP Ultra Compatibility in DREDge

    • The read_spikeglx() function in DREDge currently supports NP0.0, NP1.0, NP2.0, and NP1.0-NHP but not NP Ultra (1.0 HD).
    • Despite this, the demo code ap_registration.ipynb and the published paper demonstrate results using NP Ultra data.

    Proposed Questions/Clarifications:

    • How was NP Ultra compatibility enabled for DREDge in the published paper?

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with SpikeInterface's _read_imro_string() and the probe slicing around device_channel_indices; compare the NP1110 .meta format with the existing NP variants. Then inspect DREDge's read_spikeglx() and ap_registration.ipynb for the expected NP Ultra path. Done means NP1110 parsing preserves channel mappings and global parameters, and the stated DREDge compatibility question is resolved.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
data
Issue type
Feature
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.