Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions doc/release_notes.rst
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ Release notes
.. toctree::
:maxdepth: 1

releases/0.4.1.rst
releases/0.4.0.rst
releases/0.3.2.rst
releases/0.3.1.rst
Expand Down
9 changes: 9 additions & 0 deletions doc/releases/0.4.1.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
probeinterface 0.4.1
--------------------

Oct, 13th 2026


Bug fixes
^^^^^^^^^
* OpenEphys: check channel maps on same signal chain as NP probe (#471)
25 changes: 17 additions & 8 deletions src/probeinterface/neuropixels_tools.py
Original file line number Diff line number Diff line change
Expand Up @@ -1032,29 +1032,38 @@ def _parse_openephys_settings(
channel_map = None
channel_map_position = None
record_node_position = None
proc_counter = 0
channel_map_chain = None
record_node_chain = None
probe_chain = None

for signal_chain in root.findall("SIGNALCHAIN"):
for chain_index, signal_chain in enumerate(root.findall("SIGNALCHAIN")):
proc_counter = 0
for processor in signal_chain:
if "PROCESSOR" == processor.tag:
name = processor.attrib["name"]
if "Neuropix-PXI" in name:
neuropix_pxi_processor = processor
probe_chain = chain_index
if "OneBox" in name:
onebox_processor = processor
probe_chain = chain_index
if "ONIX" in name:
onix_processor = processor
probe_chain = chain_index
if "Channel Map" in name:
channel_map = processor
channel_map_position = proc_counter
channel_map_chain = chain_index
if "Record Node" in name:
record_node_position = proc_counter
record_node_chain = chain_index
proc_counter += 1

# Check if Channel Map comes before Record Node
# Channel Map must be in the same signal chain as the probe and the Record Node, and come before the latter
channel_map_before_record_node = (
channel_map_position is not None
and record_node_position is not None
and channel_map_chain == record_node_chain == probe_chain
and channel_map_position < record_node_position
)

Expand Down Expand Up @@ -1720,14 +1729,14 @@ def get_saved_channel_indices_from_openephys_settings(settings_file: str | Path,
tree = ET.parse(str(settings_file))
root = tree.getroot()

signal_chain = root.find("SIGNALCHAIN")
record_node = None
for processor in signal_chain:
if "PROCESSOR" == processor.tag:
name = processor.attrib["name"]
if "Record Node" in name:
for signal_chain in root.findall("SIGNALCHAIN"):
for processor in signal_chain:
if "PROCESSOR" == processor.tag and "Record Node" in processor.attrib["name"]:
record_node = processor
break
if record_node is not None:
Comment thread
chrishalcrow marked this conversation as resolved.
break
chans_saved = None
if record_node is not None:
custom_params = record_node.find("CUSTOM_PARAMETERS")
Expand Down
Loading
Loading