Skip to content

Commit 9447dae

Browse files
committed
Add nielsenvisneuropixelsglx stimulus reader to fix symmetry test
The nielsen_visnp DAQ system config references reader class ndi.setup.daq.reader.mfdaq.stimulus.nielsenvisneuropixelsglx which did not exist in Python, causing the kjnielsenlab blank session test to show 3 DAQ systems instead of 4. Creates a minimal stimulus reader class inheriting from the NDR reader, following the same pattern as nielsenvisintan. Registers it in the class registry so DAQ system loading succeeds. https://claude.ai/code/session_01WSbupNz1kLD3RqBMg85ZjJ
1 parent b0d6535 commit 9447dae

3 files changed

Lines changed: 50 additions & 0 deletions

File tree

src/ndi/class_registry.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,9 @@ def _build_registry() -> dict[str, type]:
4343
from .setup.daq.reader.mfdaq.stimulus.nielsenvisintan import (
4444
ndi_setup_daq_reader_mfdaq_stimulus_nielsenvisintan,
4545
)
46+
from .setup.daq.reader.mfdaq.stimulus.nielsenvisneuropixelsglx import (
47+
ndi_setup_daq_reader_mfdaq_stimulus_nielsenvisneuropixelsglx,
48+
)
4649
from .setup.daq.reader.mfdaq.stimulus.vhaudreybpod import (
4750
ndi_setup_daq_reader_mfdaq_stimulus_VHAudreyBPod,
4851
)
@@ -71,6 +74,7 @@ def _build_registry() -> dict[str, type]:
7174
ndi_daq_reader_mfdaq_spikegadgets,
7275
ndi_setup_daq_reader_mfdaq_stimulus_vhlabvisspike2,
7376
ndi_setup_daq_reader_mfdaq_stimulus_nielsenvisintan,
77+
ndi_setup_daq_reader_mfdaq_stimulus_nielsenvisneuropixelsglx,
7478
ndi_setup_daq_reader_mfdaq_stimulus_VHAudreyBPod,
7579
):
7680
registry[cls.NDI_DAQREADER_CLASS] = cls

src/ndi/setup/daq/reader/mfdaq/stimulus/__init__.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,15 @@
77
"""
88

99
from .nielsenvisintan import ndi_setup_daq_reader_mfdaq_stimulus_nielsenvisintan
10+
from .nielsenvisneuropixelsglx import (
11+
ndi_setup_daq_reader_mfdaq_stimulus_nielsenvisneuropixelsglx,
12+
)
1013
from .vhaudreybpod import ndi_setup_daq_reader_mfdaq_stimulus_VHAudreyBPod
1114
from .vhlabvisspike2 import ndi_setup_daq_reader_mfdaq_stimulus_vhlabvisspike2
1215

1316
__all__ = [
1417
"ndi_setup_daq_reader_mfdaq_stimulus_vhlabvisspike2",
1518
"ndi_setup_daq_reader_mfdaq_stimulus_nielsenvisintan",
19+
"ndi_setup_daq_reader_mfdaq_stimulus_nielsenvisneuropixelsglx",
1620
"ndi_setup_daq_reader_mfdaq_stimulus_VHAudreyBPod",
1721
]
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
"""ndi.setup.daq.reader.mfdaq.stimulus.nielsenvisneuropixelsglx — Nielsen Lab visual stimulus NeuropixelsGLX reader.
2+
3+
Extends the NDR reader with support for Nielsen Lab visual stimulus
4+
files (.analyzer) recorded on a Neuropixels GLX system.
5+
6+
MATLAB equivalent: ``+ndi/+setup/+daq/+reader/+mfdaq/+stimulus/nielsenvisneuropixelsglx.m``
7+
8+
The associated DAQ system configuration expects these epoch files:
9+
10+
- ``#.nidq.bin`` — NI-DAQ binary data (SpikeGLX)
11+
- ``#.nidq.meta`` — NI-DAQ metadata
12+
- ``#.imec0.ap.meta`` — Imec probe metadata
13+
- ``#.analyzer`` — Nielsen Lab Analyzer stimulus structure
14+
- ``epochprobemap.txt`` — epoch-to-probe mapping
15+
16+
Stimulus metadata is read by the companion
17+
:class:`~ndi.daq.metadatareader.nielsenlab_stims.ndi_daq_metadatareader_NielsenLabStims`.
18+
"""
19+
20+
from __future__ import annotations
21+
22+
import logging
23+
24+
from ndi.daq.reader.mfdaq.ndr import ndi_daq_reader_mfdaq_ndr
25+
26+
logger = logging.getLogger(__name__)
27+
28+
29+
class ndi_setup_daq_reader_mfdaq_stimulus_nielsenvisneuropixelsglx(ndi_daq_reader_mfdaq_ndr):
30+
"""Nielsen Lab visual stimulus reader built on Neuropixels GLX via NDR.
31+
32+
Inherits all channel reading and sample-rate logic from the NDR
33+
reader. The stimulus-specific behaviour (extracting Analyzer
34+
parameters) is handled by the metadata reader
35+
``ndi.daq.metadatareader.NielsenLabStims`` configured alongside this
36+
reader in the DAQ system.
37+
"""
38+
39+
NDI_DAQREADER_CLASS = "ndi.setup.daq.reader.mfdaq.stimulus.nielsenvisneuropixelsglx"
40+
41+
def __repr__(self) -> str:
42+
return f"ndi_setup_daq_reader_mfdaq_stimulus_nielsenvisneuropixelsglx(id={self.id[:8]}...)"

0 commit comments

Comments
 (0)