diff --git a/doc/changes/dev/13917.bugfix.rst b/doc/changes/dev/13917.bugfix.rst new file mode 100644 index 00000000000..4b975cd0038 --- /dev/null +++ b/doc/changes/dev/13917.bugfix.rst @@ -0,0 +1 @@ +Fix bug with :func:`mne.set_eeg_reference` not working when passing a single channel name as string, by `Michael Straube`_. diff --git a/mne/_fiff/reference.py b/mne/_fiff/reference.py index 3b654ee7784..1ed7135fa71 100644 --- a/mne/_fiff/reference.py +++ b/mne/_fiff/reference.py @@ -414,6 +414,10 @@ def set_eeg_reference( logger.info("Applying a custom dict-based reference.") return _apply_dict_reference(inst, ref_channels) + # We need 'ref_channels' to be a list, even for a single channel name. + if isinstance(ref_channels, str) and ref_channels not in ("average", "REST"): + ref_channels = [ref_channels] + ch_type = _get_ch_type(inst, ch_type) if projection: # average reference projector diff --git a/mne/_fiff/tests/test_reference.py b/mne/_fiff/tests/test_reference.py index 085f34e1bcb..3ce7d98d492 100644 --- a/mne/_fiff/tests/test_reference.py +++ b/mne/_fiff/tests/test_reference.py @@ -257,6 +257,10 @@ def test_set_eeg_reference(): with pytest.raises(ValueError, match='supported for ref_channels="averag'): set_eeg_reference(raw, ["EEG 001"], True, True) + # Test passing a single channel name as string + reref, ref_data = set_eeg_reference(raw, "EEG 001", copy=True) + _test_reference(raw, reref, ref_data, ["EEG 001"]) + @pytest.mark.parametrize( "ch_type, msg", diff --git a/tutorials/intro/15_inplace.py b/tutorials/intro/15_inplace.py index e9cbd4769f1..49cdd033b38 100644 --- a/tutorials/intro/15_inplace.py +++ b/tutorials/intro/15_inplace.py @@ -83,7 +83,7 @@ # we specified ``copy=True``: # sphinx_gallery_thumbnail_number=2 -rereferenced_raw, ref_data = mne.set_eeg_reference(original_raw, ["EEG 003"], copy=True) +rereferenced_raw, ref_data = mne.set_eeg_reference(original_raw, "EEG 003", copy=True) fig_orig = original_raw.plot() fig_reref = rereferenced_raw.plot() diff --git a/tutorials/preprocessing/55_setting_eeg_reference.py b/tutorials/preprocessing/55_setting_eeg_reference.py index 770af624de7..d5ca2718815 100644 --- a/tutorials/preprocessing/55_setting_eeg_reference.py +++ b/tutorials/preprocessing/55_setting_eeg_reference.py @@ -79,13 +79,13 @@ # earlobe or mastoid channels, so this is just for demonstration purposes: # use a single channel reference (left earlobe) -# raw.set_eeg_reference(ref_channels=['A1']) +# raw.set_eeg_reference(ref_channels='A1') # use average of mastoid channels as reference # raw.set_eeg_reference(ref_channels=['M1', 'M2']) # use a bipolar reference (contralateral) -# raw.set_bipolar_reference(anode='[F3'], cathode=['F4']) +# raw.set_bipolar_reference(anode='F3', cathode='F4') # %% # If a scalp electrode was used as reference but was not saved alongside the @@ -109,14 +109,14 @@ # ``copy=False``. # add new reference channel (all zero) -raw_new_ref = mne.add_reference_channels(raw, ref_channels=["EEG 999"]) +raw_new_ref = mne.add_reference_channels(raw, ref_channels="EEG 999") raw_new_ref.plot() # %% # .. KEEP THESE BLOCKS SEPARATE SO FIGURES ARE BIG ENOUGH TO READ # set reference to `EEG 050` -raw_new_ref.set_eeg_reference(ref_channels=["EEG 050"]) +raw_new_ref.set_eeg_reference(ref_channels="EEG 050") raw_new_ref.plot() # %% @@ -218,7 +218,7 @@ # :footcite:`YaoEtAl2019` which creates a new virtual channel # named ``EEG 054-EEG 055``. -raw_bip_ref = mne.set_bipolar_reference(raw, anode=["EEG 054"], cathode=["EEG 055"]) +raw_bip_ref = mne.set_bipolar_reference(raw, anode="EEG 054", cathode="EEG 055") raw_bip_ref.plot() # %%