Source code for pyPPG

from pyPPG.pack_ppg._ErrorHandler import _check_shape_, WrongParameter
import pandas as pd

[docs] class PPG: ''' This is class for the input PPG parameters. ''' def __init__(self,s={}, check_ppg_len=True): """ :param s: dictionary of the PPG signal: * s.start_sig: beginning of the signal in sample * s.end_sig: end of the signal in sample * s.v: a vector of PPG values * s.fs: the sampling frequency of the PPG in Hz * s.name: name of the record * s.v: 1-d array, a vector of raw PPG values * s.fs: the sampling frequency of the PPG in Hz * s.ppg: 1-d array, a vector of the filtered PPG values * s.vpg: 1-d array, a vector of the filtered PPG' values * s.apg: 1-d array, a vector of the filtered PPG" values * s.jpg: 1-d array, a vector of the filtered PPG'" values * s.filtering: a bool for filtering * s.fL: Lower cutoff frequency (Hz) * s.fH: Upper cutoff frequency (Hz) * s.order: Filter order * s.sm_wins: dictionary of smoothing windows in millisecond: - ppg: window for PPG signal - vpg: window for PPG' signal - apg: window for PPG" signal - jpg: window for PPG'" signal * s.correction: DataFrame where the key is the name of the fiducial points and the value is bool :type s: DotMap :param check_ppg_len: a bool for checking ppg length and sampling frequency :type check_ppg_len: bool """ if s.fs <= 0: raise WrongParameter("Sampling frequency should be strictly positive") if check_ppg_len: _check_shape_(s.v, s.fs) s.check_ppg_len=check_ppg_len try: s.start_sig>0 except: s.start_sig = 0 try: s.end_sig>-1 except: s.end_sig = -1 # Initialise the correction for fiducial points if len(s.correction)<1: corr_on = ['on', 'dn', 'dp', 'v', 'w', 'f'] corr_off = ['dn'] correction=pd.DataFrame() correction.loc[0, corr_on] = True correction.loc[0, corr_off] = False s.correction=correction keys=s.keys() keys_list = list(keys) for i in keys_list: exec('self.'+i+' = s[i]')
[docs] def get_s(self): """ This function retrieves the dictionary of the PPG signal. :return: s: dictionary of the PPG signal """ keys = self.__dict__.keys() keys_list = list(keys) s = {} for i in keys_list: s[i] = getattr(self, i, None) return pd.DataFrame(s)
[docs] class Fiducials: ''' This is class for the PPG fiducial points. ''' def __init__(self, fp: pd.DataFrame): """ :param fiducials: DataFrame where the key is the name of the fiducial points and the value is the list of fiducial points PPG Fiducials Points * PPG signal (fp.on, fp.sp, fp.dn, fp.dp): List of pulse onset, systolic peak, dicrotic notch, diastolic peak * 1st derivative (fp.u, fp.v, fp.w): List of points of 1st maximum and minimum in 1st derivitive between the onset to onset intervals * 2nd derivative (fp.a, fp.b, fp.c, fp.d, fp.e, fp.f): List of maximum and minimum points in 2nd derivitive between the onset to onset intervals * 3rd derivative (fp.p1, fp.p2): List of points of 1st maximum and minimum in 3rd derivitive between the onset to onset intervals :type fiducials: DataFrame """ keys = fp.keys() keys_list = list(keys) for i in keys_list: exec('self.' + i + ' = fp[i]')
[docs] def get_fp(self): """ This function retrieves the struct of the fiducial points. :return: fp: DataFrame of the fiducial points """ keys = self.__dict__.keys() keys_list = list(keys) fp={} for i in keys_list: fp[i]=getattr(self, i, None) return pd.DataFrame(fp)
[docs] def get_row(self, row_index: int): """ This function retrieves the specified row from the DataFrame of fiducial points. :param row_index: the index corresponding to the row in the fiducial points DataFrame :type row_index: int :return: the corresponding row in the fiducial points DataFrame """ keys = self.__dict__.keys() keys_list = list(keys) fp_row={} for i in keys_list: fp_row[i]=getattr(self, i, None)[row_index] return pd.DataFrame(fp_row,[row_index])
[docs] class Biomarkers: ''' This is class for the PPG biomarkers. ''' def __init__(self, bm_defs={}, bm_vals={}, bm_stats={}): """ This class constitutes a comprehensive dictionary encompassing biomarker definitions, values, and statistics. Each dictionary is organized into the subsequent subdirectories: * ppg_sig: description for the PPG signal * sig_ratios: description for the Signal ratios * ppg_derivs: description for the PPG derivatives * derivs_ratios: description for the Derivatives ratios :param bm_defs: dictionary with name, definition and unit of biomarkers in different categories: :type bm_defs: dict :param bm_vals: dictionary with values of biomarkers in different categories: :type bm_vals: dict :param bm_stats: data frame with summary of PPG features :type bm_stats: dict """ for i in ['bm_defs', 'bm_vals', 'bm_stats']: exec('self.' + i + ' = ' +i)
[docs] def get_bm(self): """ This function retrieves the dictionary of the biomarkers. :return: bm: dictionary of the biomarkers """ keys = self.__dict__.keys() keys_list = list(keys) bm={} for i in keys_list: bm[i]=getattr(self, i, None) return pd.DataFrame(bm)