def test_muscle_annotation_without_meeg_data(meas_date): """Call annotate_muscle_zscore with data without meg or eeg.""" raw = read_raw_fif(raw_fname, allow_maxshield='yes') if meas_date is None: raw.set_meas_date(None) raw.crop(0, .1).load_data() raw.pick_types(meg=False, stim=True) with pytest.raises(ValueError, match="No M/EEG channel types found"): annotate_muscle_zscore(raw, threshold=10)
def test_muscle_annotation(): """Test correct detection muscle artifacts.""" raw = read_raw_fif(raw_fname, allow_maxshield='yes').load_data() raw.notch_filter([50, 110, 150]) # Check 2 muscle segments are detected annot_muscle, scores = annotate_muscle_zscore(raw, ch_type='mag', threshold=10) onset = annot_muscle.onset * raw.info['sfreq'] onset = onset.astype(int) np.testing.assert_array_equal(scores[onset].astype(int), np.array([23, 10])) assert (annot_muscle.duration.size == 2)
def test_muscle_annotation(meas_date, events): """Test correct detection muscle artifacts.""" raw = read_raw_fif(raw_fname, allow_maxshield='yes').load_data() if meas_date is None: raw.set_meas_date(None) raw.notch_filter([50, 110, 150]) # Check 2 muscle segments are detected annot_muscle, scores = annotate_muscle_zscore(raw, ch_type='mag', threshold=10) assert annot_muscle.orig_time == raw.info["meas_date"] onset = annot_muscle.onset * raw.info['sfreq'] if meas_date is not None: onset -= raw.first_samp onset = onset.astype(int) assert_array_equal(scores[onset].astype(int), np.array([23, 10])) assert annot_muscle.duration.size == 2 raw.set_annotations(annot_muscle)
# .. note:: # If line noise is present, you should perform notch-filtering *before* # detecting muscle artifacts. See :ref:`tut-section-line-noise` for an # example. raw.notch_filter([50, 100]) # %% # The threshold is data dependent, check the optimal threshold by plotting # ``scores_muscle``. threshold_muscle = 5 # z-score # Choose one channel type, if there are axial gradiometers and magnetometers, # select magnetometers as they are more sensitive to muscle activity. annot_muscle, scores_muscle = annotate_muscle_zscore( raw, ch_type="mag", threshold=threshold_muscle, min_length_good=0.2, filter_freq=[110, 140]) # %% # Plot muscle z-scores across recording # -------------------------------------------------------------------------- fig, ax = plt.subplots() ax.plot(raw.times, scores_muscle) ax.axhline(y=threshold_muscle, color='r') ax.set(xlabel='time, (s)', ylabel='zscore', title='Muscle activity') # %% # View the annotations # -------------------------------------------------------------------------- order = np.arange(144, 164) raw.set_annotations(annot_muscle)