# -*- coding: utf-8 -*-
import numpy as np
from ..epochs.eventrelated_utils import _eventrelated_addinfo, _eventrelated_sanitizeinput, _eventrelated_sanitizeoutput
# =============================================================================
# Internals
# =============================================================================
def _emg_eventrelated_features(epoch, output={}):
# Sanitize input
colnames = epoch.columns.values
if len([i for i in colnames if "EMG_Onsets" in i]) == 0:
print(
"NeuroKit warning: emg_eventrelated(): input does not"
"have an `EMG_Onsets` column. Unable to process EMG features."
)
return output
if len([i for i in colnames if "EMG_Activity" or "EMG_Amplitude" in i]) == 0:
print(
"NeuroKit warning: emg_eventrelated(): input does not"
"have an `EMG_Activity` column or `EMG_Amplitude` column."
"Will skip computation of EMG amplitudes."
)
return output
# Peak amplitude and Time of peak
activations = len(np.where(epoch["EMG_Onsets"][epoch.index > 0] == 1)[0])
activated_signal = np.where(epoch["EMG_Activity"][epoch.index > 0] == 1)
mean = np.array(epoch["EMG_Amplitude"][epoch.index > 0].iloc[activated_signal]).mean()
maximum = np.array(epoch["EMG_Amplitude"][epoch.index > 0].iloc[activated_signal]).max()
index_time = np.where(epoch["EMG_Amplitude"][epoch.index > 0] == maximum)[0]
time = np.array(epoch["EMG_Amplitude"][epoch.index > 0].index[index_time])[0]
output["EMG_Amplitude_Mean"] = mean
output["EMG_Amplitude_Max"] = maximum
output["EMG_Amplitude_Max_Time"] = time
output["EMG_Bursts"] = activations
return output