|
@@ -5,8 +5,9 @@ import matplotlib as mpl
|
|
|
import numpy as np
|
|
|
from sklearn.metrics import ConfusionMatrixDisplay, confusion_matrix
|
|
|
from scipy.ndimage import gaussian_filter
|
|
|
+from scipy import signal
|
|
|
|
|
|
-from .utils import cut_epochs
|
|
|
+from .utils import cut_epochs, apply_baseline
|
|
|
from .feature_extractors import filterbank_extractor
|
|
|
|
|
|
|
|
@@ -30,6 +31,28 @@ def plot_embeddings(embd, y, event_id, size=20, figsize=(4, 5), show_legend=True
|
|
|
return fig
|
|
|
|
|
|
|
|
|
+def plot_hg_envelope(raw, events, event_id, fs, freqs, tmin, tmax, t_smooth=0.3, target_event='flex'):
|
|
|
+ power = raw.filter(*freqs).apply_hilbert(envelope=True).get_data()
|
|
|
+
|
|
|
+ n_smooth = int(t_smooth * fs)
|
|
|
+
|
|
|
+ power = signal.filtfilt(np.ones(n_smooth) / n_smooth, 1, power, axis=-1)
|
|
|
+ epochs_hg = cut_epochs((tmin, tmax, fs), power, events[:, 0])
|
|
|
+ epochs_hg = apply_baseline((tmin, tmax, fs), epochs_hg)
|
|
|
+
|
|
|
+ times = np.linspace(tmin, tmax, epochs_hg.shape[-1])
|
|
|
+ move_average = epochs_hg[events[:, 2] == event_id[target_event]].mean(axis=0)
|
|
|
+ move_se = epochs_hg[events[:, 2] == event_id[target_event]].std(axis=0) / np.sqrt(np.sum(events[:, 2] == event_id[target_event]))
|
|
|
+ n_ch = power.shape[0]
|
|
|
+ fig, axes = plt.subplots(1, 1)
|
|
|
+ for i in range(n_ch):
|
|
|
+ axes.plot(times, move_average[i], label=f'ch_{i + 1}')
|
|
|
+ axes.fill_between(times, move_average[i] - move_se[i], move_average[i] + move_se[i], alpha=0.1)
|
|
|
+ axes.legend()
|
|
|
+ fig.suptitle(f'HG line plot ({freqs[0], freqs[1]}))')
|
|
|
+ return fig
|
|
|
+
|
|
|
+
|
|
|
def snapshot_brain(fig_3d, info, data=None, show_name=False):
|
|
|
if data is not None:
|
|
|
cmap = mpl.cm.viridis
|