def test_eog_plot(): eog_signal = nk.data("eog_100hz") signals, info = nk.eog_process(eog_signal, sampling_rate=100) # Plot nk.eog_plot(signals, peaks=info, sampling_rate=100) fig = plt.gcf() assert len(fig.axes) == 3 titles = ["Raw and Cleaned Signal", "Blink Rate", "Individual Blinks"] legends = [["Raw", "Cleaned", "Blinks"], ["Rate", "Mean"], ["Median"]] ylabels = ["Amplitude (mV)", "Blinks per minute"] for (ax, title, legend, ylabel) in zip(fig.get_axes(), titles, legends, ylabels): assert ax.get_title() == title subplot = ax.get_legend_handles_labels() assert subplot[1] == legend assert ax.get_ylabel() == ylabel assert fig.get_axes()[1].get_xlabel() == "Time (seconds)" np.testing.assert_array_equal(fig.axes[0].get_xticks(), fig.axes[1].get_xticks()) plt.close(fig) with pytest.raises(ValueError, match=r'NeuroKit error: eog_plot.*'): nk.eog_plot(None)
def test_eog_process(): eog_signal = nk.data("eog_200hz")["vEOG"] signals, info = nk.eog_process(eog_signal, sampling_rate=200) # Extract blinks, test across dataframe and dict blinks = np.where(signals["EOG_Blinks"] == 1)[0] assert np.all(blinks == info["EOG_Blinks"])
def test_eog_eventrelated(): eog = nk.data('eog_200hz')['vEOG'] eog_signals, info = nk.eog_process(eog, sampling_rate=200) epochs = nk.epochs_create(eog_signals, events=[5000, 10000, 15000], epochs_start=-0.1, epochs_end=1.9) eog_eventrelated = nk.eog_eventrelated(epochs) # Test rate features assert np.alltrue( np.array(eog_eventrelated["EOG_Rate_Min"]) < np.array( eog_eventrelated["EOG_Rate_Mean"])) assert np.alltrue( np.array(eog_eventrelated["EOG_Rate_Mean"]) < np.array( eog_eventrelated["EOG_Rate_Max"])) # Test blink presence assert np.alltrue( np.array(eog_eventrelated["EOG_Blinks_Presence"]) == np.array( [1, 0, 0])) # Test warning on missing columns with pytest.warns(nk.misc.NeuroKitWarning, match=r".*does not have an `EOG_Blinks`.*"): first_epoch_key = list(epochs.keys())[0] first_epoch_copy = epochs[first_epoch_key].copy() del first_epoch_copy["EOG_Blinks"] nk.eog_eventrelated({**epochs, first_epoch_key: first_epoch_copy}) with pytest.warns(nk.misc.NeuroKitWarning, match=r".*does not have an `EOG_Rate`.*"): first_epoch_key = list(epochs.keys())[0] first_epoch_copy = epochs[first_epoch_key].copy() del first_epoch_copy["EOG_Rate"] nk.eog_eventrelated({**epochs, first_epoch_key: first_epoch_copy})
def test_eog_eventrelated(): eog = nk.data('eog_200hz')['vEOG'] eog_signals, info = nk.eog_process(eog, sampling_rate=200) epochs = nk.epochs_create(eog_signals, events=[5000, 10000, 15000], epochs_start=-0.1, epochs_end=1.9) eog_eventrelated = nk.eog_eventrelated(epochs) # Test rate features assert np.alltrue( np.array(eog_eventrelated["EOG_Rate_Min"]) < np.array( eog_eventrelated["EOG_Rate_Mean"])) assert np.alltrue( np.array(eog_eventrelated["EOG_Rate_Mean"]) < np.array( eog_eventrelated["EOG_Rate_Max"])) # Test blink presence assert np.alltrue( np.array(eog_eventrelated["EOG_Blinks_Presence"]) == np.array( [1, 0, 0]))
def test_eog_intervalrelated(): eog = nk.data('eog_200hz')['vEOG'] eog_signals, info = nk.eog_process(eog, sampling_rate=200) columns = ['EOG_Peaks_N', 'EOG_Rate_Mean'] # Test with signal dataframe features = nk.eog_intervalrelated(eog_signals) assert all(elem in np.array(features.columns.values, dtype=str) for elem in columns) assert features.shape[0] == 1 # Number of rows # Test with dict epochs = nk.epochs_create(eog_signals, events=[5000, 10000, 15000], epochs_start=-0.1, epochs_end=1.9) epochs_dict = nk.eog_intervalrelated(epochs) assert all(elem in columns for elem in np.array(epochs_dict.columns.values, dtype=str)) assert epochs_dict.shape[0] == len(epochs) # Number of rows
nk.ppg_plot(signals, sampling_rate=250) # Save it plot = nk.ppg_plot(signals, sampling_rate=250) plot.set_size_inches(10, 6, forward=True) plot.savefig("README_ppg.png", dpi=300, h_pad=3) # ============================================================================= # Electrooculography (EOG) # ============================================================================= # Import EOG data eog_signal = nk.data("eog_100hz") # Process it signals, info = nk.eog_process(eog_signal, sampling_rate=100) # Plot plot = nk.eog_plot(signals, peaks=info, sampling_rate=100) plot.set_size_inches(10, 6, forward=True) plot.savefig("README_eog.png", dpi=300, h_pad=3) # ============================================================================= # Signal Processing # ============================================================================= # Generate original signal original = nk.signal_simulate(duration=6, frequency=1) # Distort the signal (add noise, linear trend, artifacts etc.) distorted = nk.signal_distort(original,