From 52cb89185b28927a522c7c08ba3acdea0ed9a67e Mon Sep 17 00:00:00 2001 From: Martin Oberg Date: Wed, 17 Jun 2026 13:31:02 -0700 Subject: [PATCH 1/2] ENH: return label and description fields from read_raw_egi rst --- doc/changes/dev/13967.newfeature.rst | 1 + mne/io/egi/egimff.py | 8 ++++++-- mne/io/egi/events.py | 7 +++++-- 3 files changed, 12 insertions(+), 4 deletions(-) create mode 100644 doc/changes/dev/13967.newfeature.rst diff --git a/doc/changes/dev/13967.newfeature.rst b/doc/changes/dev/13967.newfeature.rst new file mode 100644 index 00000000000..410767fb47e --- /dev/null +++ b/doc/changes/dev/13967.newfeature.rst @@ -0,0 +1 @@ +Include label and description fields when reading EGI mff files, by `Martin Oberg`_. diff --git a/mne/io/egi/egimff.py b/mne/io/egi/egimff.py index 870f58890a2..6c438cac413 100644 --- a/mne/io/egi/egimff.py +++ b/mne/io/egi/egimff.py @@ -526,7 +526,7 @@ def __init__( first_samps = [0] last_samps = [egi_info["last_samps"][-1] - 1] - annot = dict(onset=list(), duration=list(), description=list()) + annot = dict(onset=list(), duration=list(), description=list(), extras=list()) if len(idx["pns"]): # PNS Data is present and should be read: @@ -566,15 +566,19 @@ def __init__( annot["onset"].append((prev_last - 0.5) / egi_info["sfreq"]) annot["duration"].append(gap / egi_info["sfreq"]) annot["description"].append("BAD_ACQ_SKIP") + annot["extras"].append({}) # create events from annotations if events_as_annotations: - for code, samples in mff_events.items(): + for code, dicts in mff_events.items(): if code not in include: continue + samples = [d["start_sample"] for d in dicts] + extras = [d["extras"] for d in dicts] annot["onset"].extend(np.array(samples) / egi_info["sfreq"]) annot["duration"].extend([0.0] * len(samples)) annot["description"].extend([code] * len(samples)) + annot["extras"].extend(extras) if len(annot["onset"]): self.set_annotations(Annotations(**annot)) diff --git a/mne/io/egi/events.py b/mne/io/egi/events.py index 0f03c15f581..45ae41084c7 100644 --- a/mne/io/egi/events.py +++ b/mne/io/egi/events.py @@ -28,7 +28,8 @@ def _read_events(input_fname, info): info["event_codes"] = event_codes events = np.zeros([info["n_events"], info["n_segments"] * n_samples]) for n, event in enumerate(event_codes): - for i in mff_events[event]: + for dct in mff_events[event]: + i = dct["start_sample"] if (i < 0) or (i >= events.shape[1]): continue events[n][i] = n + 1 @@ -74,6 +75,7 @@ def _read_mff_events(filename, sfreq, start_time): event_start = event["beginTime"] start_sec = (event_start - start_time).total_seconds() duration = event["duration"] / 1e9 + extras = dict(label=event["label"], desc=event["description"]) markers.append( { @@ -82,11 +84,12 @@ def _read_mff_events(filename, sfreq, start_time): "start_sample": int(np.trunc(start_sec * sfreq)), "end": start_sec + duration, "chan": None, + "extras": extras, } ) events_tims = { - ev: [marker["start_sample"] for marker in markers if marker["name"] == ev] + ev: [dict(start_sample=marker["start_sample"], extras=marker["extras"]) for marker in markers if marker["name"] == ev] for ev in code } return events_tims, code From 0251cd261009edb9eba2003f7d8dc66683c5f38d Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Wed, 17 Jun 2026 20:58:14 +0000 Subject: [PATCH 2/2] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- mne/io/egi/events.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/mne/io/egi/events.py b/mne/io/egi/events.py index 45ae41084c7..f80ff651245 100644 --- a/mne/io/egi/events.py +++ b/mne/io/egi/events.py @@ -89,7 +89,11 @@ def _read_mff_events(filename, sfreq, start_time): ) events_tims = { - ev: [dict(start_sample=marker["start_sample"], extras=marker["extras"]) for marker in markers if marker["name"] == ev] + ev: [ + dict(start_sample=marker["start_sample"], extras=marker["extras"]) + for marker in markers + if marker["name"] == ev + ] for ev in code } return events_tims, code