Source code for pebm.ebm.IntervalsDuration
import numpy as np
[docs]def compute_int(freq, features_dict, factor=1000):
if len(features_dict[0][~np.isnan(features_dict[0])]) == 0 or \
0 == len(features_dict[1][~np.isnan(features_dict[1])]):
return np.nan
begin_fiducial = features_dict[0]
end_fiducial = features_dict[1]
units = (factor / freq)
intv = (end_fiducial - begin_fiducial) * units
intv = intv[~np.isnan(intv)]
return intv
[docs]def compute_QTc(QT, RR, factor=1000):
if len(RR[~np.isnan(RR)]) == 0 or len(QT[~np.isnan(QT)]) == 0:
QTc_dict = dict(QTc_b=np.asarray(np.nan),
QTc_frid=np.asarray(np.nan),
QTc_fra=np.asarray(np.nan),
QTc_hod=np.asarray(np.nan))
return QTc_dict
HR = np.median(RR[~np.isnan(RR)])
HRf = HR / factor
n = len(QT)
QTc_b, QTc_frid, QTc_fra, QTc_hod = [np.nan] * n, [np.nan] * n, [np.nan] * n, [np.nan] * n
for i, QTi in enumerate(QT):
if ((HR == np.nan) | (QTi == np.nan)):
continue
else:
QTc_b[i] = QTi / np.sqrt(HRf) # ms
QTc_frid[i] = QTi / HRf ** (1 / float(3)) # ms
QTc_fra[i] = QTi + (0.154 * (1 - HRf) * factor) # ms
QTc_hod[i] = QTi + (0.00175 * (60 / HRf - 60) * factor) # ms
QTc_b = np.asarray([QTc_b], dtype=np.float64).squeeze()
QTc_frid = np.asarray([QTc_frid], dtype=np.float64).squeeze()
QTc_fra = np.asarray([QTc_fra], dtype=np.float64).squeeze()
QTc_hod = np.asarray([QTc_hod], dtype=np.float64).squeeze()
QTc_dict = dict(QTc_b=QTc_b[~np.isnan(QTc_b)],
QTc_frid=QTc_frid[~np.isnan(QTc_frid)],
QTc_fra=QTc_fra[~np.isnan(QTc_fra)],
QTc_hod=QTc_hod[~np.isnan(QTc_hod)])
return QTc_dict
[docs]def extract_intervals_duration(fs, features_dict, factor=1000):
intervals_points = dict(Pwave_int=[features_dict['Pon'], features_dict['Poff']],
PR_int=[features_dict['Pon'], features_dict['QRSon']],
PR_seg=[features_dict['Poff'], features_dict['QRSon']],
PR_int2=[features_dict['P'], features_dict['qrs']],
QRS_int=[features_dict['QRSon'], features_dict['QRSoff']],
QT_int=[features_dict['QRSon'], features_dict['Toff']],
Twave_int=[features_dict['Ton'], features_dict['Toff']],
TP_seg=[features_dict['Toff'][:-1], features_dict['Pon'][1:]],
RR_int=[features_dict['qrs'][:-1], features_dict['qrs'][1:]],
R_dep=[features_dict['QRSon'], features_dict['qrs']])
intervals = {}
for key in intervals_points:
intervals[key] = np.asarray(compute_int(fs, intervals_points[key], factor=1000))
QTc_dict = compute_QTc(intervals['QT_int'], intervals['RR_int'], factor=1000)
intervals.update(QTc_dict)
return intervals