mne-tools / mne-python

MNE: Magnetoencephalography (MEG) and Electroencephalography (EEG) in Python
https://mne.tools
BSD 3-Clause "New" or "Revised" License
2.73k stars 1.33k forks source link

Highlight bad Epochs instead of dropping them when preload=False upon plotting #12253

Open withmywoessner opened 11 months ago

withmywoessner commented 11 months ago

Describe the new feature or enhancement

Hello! I am currently working on a feature to drop Epoch based on callables in #12195, and thought it would be a nice feature to be able to see which Epochs would be dropped (since you may have complicated callables) if preload=False in the Epochs constructor.

Describe your proposed implementation

I think this could be implemented by displaying the rejected epochs instead of dropping them when plotting. For instance:

epochs = mne.Epochs(
    raw,
    events,
    tmin=-0.2,
    tmax=0.5,
    reject_tmax=0,
    reject=reject_criteria,
    flat=flat_criteria,
    reject_by_annotation=False,
    preload=False
)
epochs.plot()

Hypothetical output (Epochs in red will be dropped):

image

Describe possible alternatives

Maybe instead of this method. I can add another parameter, but I think this is too complicated.

Additional context

No response

larsoner commented 11 months ago

Based on how Epochs works under the hood, I suspect this would be complicated to implement.

Another way to accomplish something similar using current API would be with something like

all_epochs = mne.Epochs(..., reject=None)
good_epochs = all_epochs.copy().drop_bad(reject=reject_criteria)
bad_epochs = all_epochs[np.setdiff1d(all_epochs.selection, good_epochs.selection)]
bad_epochs.plot()

It would only plot the bad ones but maybe it's good enough?