I don’t think there are any tutorials/examples for automatic bad channel detection with MNE-only.
I’ve been using PyPREP to suggest bad channels for a while now, and it works very well.
Here is an example where I chose to apply a BP filter between [1, 45] Hz before; but maybe other users will have different opinions.
import pyprep
import numpy as np
# Until 0.4 release, make sure to use the development version.
if '0.3.1' in pyprep.__version__:
assert pyprep.__version__.split('0.3.1')[1] != ''
else:
assert 4 <= int(pyprep.__version__.split('.')[1])
def _prepapre_raw(raw):
"""
Copy the raw instance and prepare it for PyPREP.
Set the montage as 'standard_1020'. The reference 'CPz' is not added.
"""
raw = raw.copy()
raw.filter(
l_freq=1.,
h_freq=45.,
picks='eeg',
method="fir",
phase="zero-double",
fir_window="hamming",
fir_design="firwin",
pad="edge")
raw.notch_filter(np.arange(50, 151, 50), picks='eeg')
raw.set_montage('standard_1020')
return raw
def PREP_bads_suggestion(raw):
"""
Apply the PREP pipeline to detect bad channels:
- SNR
- Correlation
- Deviation
- HF Noise
- NaN flat
- RANSAC
"""
raw = _prepapre_raw(raw)
raw.pick_types(eeg=True)
nc = pyprep.find_noisy_channels.NoisyChannels(raw)
nc.find_all_bads()
return nc.get_bads()
Thank you @mscheltienne this is helpful.
A side question - Is there a way to push the output it shows on the console (or terminal) to a log file. I piped using ‘> <output.log>’ but it still prints some output on console.
With a logger, it is possible to set a file handler to record all logs to a file. It is also possible to limit the verbosity to a certain level: DEBUG, ÌNFO, WARNING, CRITICAL.
With prints, I don’t see an easy way to record the console prints to a file, and it is not possible to limit the verbosity.
That said, even if I know it is possible to add a file handler to a logger, I never had to do it, and I don’t know if MNE has any easy-public API to do so.