Skip to content

Commit 6e1a5b5

Browse files
committed
fix keys
1 parent 42e128b commit 6e1a5b5

File tree

1 file changed

+32
-19
lines changed

1 file changed

+32
-19
lines changed

neo/rawio/spikeglxrawio.py

Lines changed: 32 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -352,27 +352,40 @@ def scan_files(dirname):
352352
normalize = lambda x: x if isinstance(x, int) else -1
353353

354354
# Segment index is determined by the gate_num and trigger_num in that order
355-
gate_trigger_tuples = [
356-
(info_index, (normalize(info["gate_num"]), normalize(info["trigger_num"])))
357-
for info_index, info in enumerate(info_list)
358-
]
355+
def get_segment_tuple(info):
356+
# Create a key from the normalized gate_num and trigger_num
357+
gate_num = normalize(info.get("gate_num"))
358+
trigger_num = normalize(info.get("trigger_num"))
359+
return (gate_num, trigger_num)
359360

360-
sorted_info = sorted(gate_trigger_tuples, key=lambda x: x[1])
361-
362-
for seg_index, (info_index, _) in enumerate(sorted_info):
363-
info_list[info_index]["seg_index"] = seg_index
364-
365-
# Add probe_index
366-
# The logic is that the probe_index is the order of the probe_slot, probe_port, and probe_dock
367-
slot_port_dock_tuples = [
368-
(info_index, (normalize(info["probe_slot"]), normalize(info["probe_port"]), normalize(info["probe_dock"])))
369-
for info_index, info in enumerate(info_list)
370-
]
361+
unique_segment_tuples = {get_segment_tuple(info) for info in info_list}
362+
sorted_keys = sorted(unique_segment_tuples)
363+
364+
# Map each unique key to a corresponding index
365+
segment_tuple_to_segment_index = {key: idx for idx, key in enumerate(sorted_keys)}
366+
367+
for info in info_list:
368+
info["seg_index"] = segment_tuple_to_segment_index[get_segment_tuple(info)]
371369

372-
# Sorts by the probe_slot, probe_port, and probe_dock tuples
373-
sorted_info = sorted(slot_port_dock_tuples, key=lambda x: x[1])
374-
for probe_index, (info_index, _) in enumerate(sorted_info):
375-
info_list[info_index]["probe_index"] = probe_index
370+
371+
# Probe index calculation
372+
# This ensures that all nidq entries come before any other keys, which corresponds to index 0.
373+
def get_probe_tuple(info):
374+
slot = normalize(info.get("probe_slot"))
375+
port = normalize(info.get("probe_port"))
376+
dock = normalize(info.get("probe_dock"))
377+
return (slot, port, dock)
378+
379+
unique_probe_tuples = {get_probe_tuple(info) for info in info_list}
380+
sorted_probe_keys = sorted(unique_probe_tuples)
381+
probe_tuple_to_probe_index = {key: idx for idx, key in enumerate(sorted_probe_keys)}
382+
383+
for info in info_list:
384+
if info.get("device") == "nidq":
385+
info["device_index"] = 0 # TODO: Handle multi nidq case
386+
else:
387+
info["device_index"] = probe_tuple_to_probe_index[get_probe_tuple(info)]
388+
376389

377390
return info_list
378391

0 commit comments

Comments
 (0)