Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions doc/changes/latest.inc
Original file line number Diff line number Diff line change
Expand Up @@ -287,6 +287,8 @@ Bugs

- :func:`mne.preprocessing.find_ecg_events` now correctly handles situation where no ECG activity could be detected, and correctly returns an empty array of ECG events (:gh:`9236` by `Richard Höchenberger`_)

- `mne.preprocessing.compute_proj_eog` and `mne.preprocessing.compute_proj_ecg` now return empty lists if no EOG or ECG events, respectively, could be found. Previously, we'd return ``None`` in these situations, which does not match the documented behavior of returning a list of projectors (:gh:`9277` by `Richard Höchenberger`_)

API changes
~~~~~~~~~~~
- Introduced new ``'auto'`` settings for ``ICA.max_iter``. The old default ``max_iter=200`` will be removed in MNE-Python 0.24 (:gh:`9099` **by new contributor** |Cora Kim|_)
Expand Down
8 changes: 4 additions & 4 deletions mne/preprocessing/ssp.py
Original file line number Diff line number Diff line change
Expand Up @@ -69,8 +69,8 @@ def _compute_exg_proj(mode, raw, raw_event, tmin, tmax,

# Check to make sure we actually got at least one usable event
if events.shape[0] < 1:
warn('No %s events found, returning None for projs' % mode)
return (None, events) + (([],) if return_drop_log else ())
warn(f'No {mode} events found')
return ([], events) + (([],) if return_drop_log else ())

logger.info('Computing projector')
my_info = cp.deepcopy(raw.info)
Expand Down Expand Up @@ -120,8 +120,8 @@ def _compute_exg_proj(mode, raw, raw_event, tmin, tmax,

drop_log = epochs.drop_log
if epochs.events.shape[0] < 1:
warn('No good epochs found, returning None for projs')
return (None, events) + ((drop_log,) if return_drop_log else ())
warn('No good epochs found')
return ([], events) + ((drop_log,) if return_drop_log else ())

if average:
evoked = epochs.average()
Expand Down
15 changes: 12 additions & 3 deletions mne/preprocessing/tests/test_ssp.py
Original file line number Diff line number Diff line change
Expand Up @@ -63,8 +63,12 @@ def test_compute_proj_ecg(short_raw, average):
projs, events, drop_log = compute_proj_ecg(
raw, n_mag=2, n_grad=2, n_eeg=2, ch_name='MEG 1531', bads=[],
average=average, avg_ref=True, no_proj=True, l_freq=None,
h_freq=None, tmax=dur_use, return_drop_log=True)
assert projs is None
h_freq=None, tmax=dur_use, return_drop_log=True,
# XXX can be removed once
# XXX https://github.com/mne-tools/mne-python/issues/9273
# XXX has been resolved:
qrs_threshold=1e-15)
assert projs == []
assert len(events) == len(drop_log)


Expand Down Expand Up @@ -100,7 +104,12 @@ def test_compute_proj_eog(average, short_raw):
raw, n_mag=2, n_grad=2, n_eeg=2, average=average, bads=[],
avg_ref=True, no_proj=False, l_freq=None, h_freq=None,
tmax=dur_use)
assert projs is None
assert projs == []

raw._data[raw.ch_names.index('EOG 061'), :] = 1.
with pytest.warns(RuntimeWarning, match='filter.*longer than the signal'):
projs, events = compute_proj_eog(raw=raw, tmax=dur_use,
ch_name='EOG 061')


@pytest.mark.slowtest # can be slow on OSX
Expand Down