diff --git a/doc/changes/dev/13428.bugfix.rst b/doc/changes/dev/13428.bugfix.rst new file mode 100644 index 00000000000..513bbcf697b --- /dev/null +++ b/doc/changes/dev/13428.bugfix.rst @@ -0,0 +1 @@ +Preserve event-to-epoch mapping when exporting EEGLAB .set files by `Scott Huberty`_ \ No newline at end of file diff --git a/mne/export/_eeglab.py b/mne/export/_eeglab.py index 459207f0616..c73243b0311 100644 --- a/mne/export/_eeglab.py +++ b/mne/export/_eeglab.py @@ -2,6 +2,8 @@ # License: BSD-3-Clause # Copyright the MNE-Python contributors. +from inspect import getfullargspec + import numpy as np from ..annotations import _sync_onset @@ -64,6 +66,11 @@ def _export_epochs(fname, epochs): else: annot = None + # https://github.com/jackz314/eeglabio/pull/18 + kwargs = dict() + if "epoch_indices" in getfullargspec(eeglabio.epochs.export_set).kwonlyargs: + kwargs["epoch_indices"] = epochs.selection + eeglabio.epochs.export_set( fname, data=epochs.get_data(picks=ch_names), @@ -75,6 +82,7 @@ def _export_epochs(fname, epochs): event_id=epochs.event_id, ch_locs=cart_coords, annotations=annot, + **kwargs, ) diff --git a/mne/export/tests/test_export.py b/mne/export/tests/test_export.py index 6f712923c7d..743491f26c9 100644 --- a/mne/export/tests/test_export.py +++ b/mne/export/tests/test_export.py @@ -35,6 +35,7 @@ _check_edfio_installed, _record_warnings, _resource_path, + check_version, object_diff, ) @@ -534,7 +535,7 @@ def test_export_raw_edf_does_not_fail_on_empty_header_fields(tmp_path): raw.export(tmp_path / "test.edf", add_ch_type=True) -@pytest.mark.xfail(reason="eeglabio (usage?) bugs that should be fixed") +@pytest.mark.skipif(not check_version("eeglabio", "0.1.2"), reason="fixed by 0.1.2") @pytest.mark.parametrize("preload", (True, False)) def test_export_epochs_eeglab(tmp_path, preload): """Test saving an Epochs instance to EEGLAB's set format.""" diff --git a/mne/io/eeglab/eeglab.py b/mne/io/eeglab/eeglab.py index b5b57588acd..83148666ffa 100644 --- a/mne/io/eeglab/eeglab.py +++ b/mne/io/eeglab/eeglab.py @@ -631,13 +631,14 @@ def __init__( event_type = "/".join([str(et) for et in ep.eventtype]) event_name.append(event_type) # store latency of only first event - event_latencies.append(events[ev_idx].latency) + # -1 to account for Matlab 1-based indexing of samples + event_latencies.append(events[ev_idx].latency - 1) ev_idx += len(ep.eventtype) warn_multiple_events = True else: event_type = ep.eventtype event_name.append(ep.eventtype) - event_latencies.append(events[ev_idx].latency) + event_latencies.append(events[ev_idx].latency - 1) ev_idx += 1 if event_type not in unique_ev: