From c124cf595ded629a038b3b070eef408c9eb9a011 Mon Sep 17 00:00:00 2001 From: Heberto Mayorquin Date: Thu, 18 Sep 2025 17:03:31 -0600 Subject: [PATCH 1/2] neuralynx encoding error --- neo/rawio/neuralynxrawio/nlxheader.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/neo/rawio/neuralynxrawio/nlxheader.py b/neo/rawio/neuralynxrawio/nlxheader.py index 15b812820..f13ae4365 100644 --- a/neo/rawio/neuralynxrawio/nlxheader.py +++ b/neo/rawio/neuralynxrawio/nlxheader.py @@ -55,7 +55,13 @@ def _to_bool(txt): ("DspHighCutNumTaps", "", None), ("DspHighCutFilterType", "", None), ("DspDelayCompensation", "", None), - ("DspFilterDelay_µs", "", None), + # DspFilterDelay key with flexible µ symbol matching + # Different Neuralynx versions encode the µ (micro) symbol differently: + # - Some files use single-byte encoding (latin-1): DspFilterDelay_µs (raw bytes: \xb5) + # - Other files use UTF-8 encoding: DspFilterDelay_µs (raw bytes: \xc2\xb5) + # When UTF-8 encoded µ (\xc2\xb5) is decoded with latin-1, it becomes "µ" + # This regex matches both variants: "µs" and "µs" but normalizes to "DspFilterDelay_µs" + (r"DspFilterDelay_[Â]?µs", "DspFilterDelay_µs", None), ("DisabledSubChannels", "", None), ("WaveformLength", "", int), ("AlignmentPt", "", None), From f81a7a144da9d79bf3beb0a6aa0cafd511218fca Mon Sep 17 00:00:00 2001 From: Heberto Mayorquin Date: Sat, 20 Sep 2025 11:40:51 -0600 Subject: [PATCH 2/2] add tests --- neo/test/rawiotest/test_neuralynxrawio.py | 1 + 1 file changed, 1 insertion(+) diff --git a/neo/test/rawiotest/test_neuralynxrawio.py b/neo/test/rawiotest/test_neuralynxrawio.py index f83d58c2c..7000c97fb 100644 --- a/neo/test/rawiotest/test_neuralynxrawio.py +++ b/neo/test/rawiotest/test_neuralynxrawio.py @@ -31,6 +31,7 @@ class TestNeuralynxRawIO( "neuralynx/Cheetah_v5.6.3/original_data", "neuralynx/Cheetah_v5.7.4/original_data", "neuralynx/Cheetah_v6.3.2/incomplete_blocks", + "neuralynx/two_streams_different_header_encoding", ] def test_scan_ncs_files(self):