Skip to content

Commit

Permalink
Add pebm biomarkers
Browse files Browse the repository at this point in the history
  • Loading branch information
goldina committed Aug 5, 2021
1 parent c49eef1 commit 93ff4d4
Show file tree
Hide file tree
Showing 7 changed files with 779 additions and 359 deletions.
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,9 @@ ExamplesTXT/
Examples Shani/
Examples Sheina/
Examples Will/
Examples Eran/

pebm - Copy/

SHANY Sheina ecg-kit.txt

Expand Down
86 changes: 45 additions & 41 deletions GUI/Biomarkers/biomarkers_intervals.m
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
%%

function pebm_intervals_stat = biomarkers_intervals(signal, Fs, fud_points, measures_cb_array)
function pebm_intervals_stat = biomarkers_intervals(signal_file, Fs, fud_file, measures_cb_array)

pebm_intervals_stat = table;

Expand All @@ -9,16 +9,15 @@

result_measures = [];

if ~all(isnan(signal)) && exist(executable_file, 'file')

% func_args = zip_args({'fs', 'fiducials'}, {Fs, fud_points});
func_args = zip_args({'fs'}, {Fs});
if exist(executable_file, 'file') % ~all(isnan(signal)) &&

signal_file = [tempdir 'temp.dat'];
dlmwrite(signal_file, signal, '\n');
func_args = zip_args({'fs'}, {Fs});

fud_file = [tempdir 'fud_temp.mat'];
save(fud_file, 'fud_points');
% signal_file = [tempdir 'temp.dat'];
% dlmwrite(signal_file, signal, '\n');
%
% fud_file = [tempdir 'fud_temp.mat'];
% save(fud_file, 'fud_points');

if measures_cb_array
command = ['"' executable_file '" ' '"' signal_file '"' ' "' fud_file '"' ' biomarkers_intervals ' func_args];
Expand All @@ -27,7 +26,7 @@
result_measures.Pwave_int = ' ';
result_measures.PR_int = ' ';
result_measures.PR_seg = ' ';
result_measures.PR_int2 = ' ';
result_measures.PR2_int = ' ';
result_measures.QRS_int = ' ';

result_measures.QT_int = ' ';
Expand All @@ -36,10 +35,10 @@
result_measures.RR_int = ' ';
result_measures.QTc_b = ' ';

result_measures.QTc_frid = ' ';
result_measures.QTc_fra = ' ';
result_measures.QTc_hod = ' ';

result_measures.QTcFri = ' ';
result_measures.QTcF = ' ';
result_measures.QTcH = ' ';
result_measures.R_depolarization = ' ';
end
end

Expand All @@ -58,7 +57,8 @@

result_measures.QTc_frid = NaN;
result_measures.QTc_fra = NaN;
result_measures.QTc_hod = NaN;
result_measures.QTc_hod = NaN;
result_measures.R_depolarization = NaN;
end

pebm_intervals_stat.Properties.Description = 'Fiducials Biomarkers Interval duration and segments';
Expand All @@ -67,54 +67,58 @@

pebm_intervals_stat.Pwave_int = result_measures.Pwave_int;
pebm_intervals_stat.Properties.VariableUnits{'Pwave_int'} = 'ms';
pebm_intervals_stat.Properties.VariableDescriptions{'Pwave_int'} = 'Time interval between P on and P off';
pebm_intervals_stat.Properties.VariableDescriptions{'Pwave_int'} = 'Time interval between P-peak and P-offset';

pebm_intervals_stat.PR_int = result_measures.PR_int;
pebm_intervals_stat.Properties.VariableUnits{'PR_int'} = 'ms';
pebm_intervals_stat.Properties.VariableDescriptions{'PR_int'} = 'Time interval between the P on to the QRS on';
pebm_intervals_stat.Properties.VariableDescriptions{'PR_int'} = 'Time interval between P-onset and Q-onset';

pebm_intervals_stat.PR_seg = result_measures.PR_seg;
pebm_intervals_stat.Properties.VariableUnits{'PR_seg'} = 'ms';
pebm_intervals_stat.Properties.VariableDescriptions{'PR_seg'} = 'Time interval between the P off to the QRS on';
pebm_intervals_stat.Properties.VariableDescriptions{'PR_seg'} = 'Time interval between P-offset and Q-onset ';

pebm_intervals_stat.PR_int2 = result_measures.PR_int2;
pebm_intervals_stat.Properties.VariableUnits{'PR_int2'} = 'ms';
pebm_intervals_stat.Properties.VariableDescriptions{'PR_int2'} = 'Time interval between P peak and R peak'; % as defined by Mao et al1.
pebm_intervals_stat.PR2_int = result_measures.PR_int2;
pebm_intervals_stat.Properties.VariableUnits{'PR2_int'} = 'ms';
pebm_intervals_stat.Properties.VariableDescriptions{'PR2_int'} = 'Time interval between P-peak and R-peak'; % as defined by Mao et al1.

pebm_intervals_stat.QRS_int = result_measures.QRS_int;
pebm_intervals_stat.Properties.VariableUnits{'QRS_int'} = 'ms';
pebm_intervals_stat.Properties.VariableDescriptions{'QRS_int'} = 'Time interval between the QRS on to the QRS off';
pebm_intervals_stat.Properties.VariableUnits{'QRS_int'} = 'ms';
pebm_intervals_stat.Properties.VariableDescriptions{'QRS_int'} = 'Time interval between Q-onset and S-offset ';


pebm_intervals_stat.QT_int = result_measures.QT_int;
pebm_intervals_stat.Properties.VariableUnits{'QT_int'} = 'ms';
pebm_intervals_stat.Properties.VariableDescriptions{'QT_int'} = 'Time interval between the QRS on to the T off';
pebm_intervals_stat.Properties.VariableDescriptions{'QT_int'} = 'Time interval between Q-onset and T-offset';

pebm_intervals_stat.Twave_int = result_measures.Twave_int;
pebm_intervals_stat.Properties.VariableUnits{'Twave_int'} = 'ms';
pebm_intervals_stat.Properties.VariableDescriptions{'Twave_int'} = 'Time interval between T on and T off';
pebm_intervals_stat.Properties.VariableDescriptions{'Twave_int'} = 'Time interval between T-onset and T-offset';

pebm_intervals_stat.TP_seg = result_measures.TP_seg;
pebm_intervals_stat.Properties.VariableUnits{'TP_seg'} = 'ms';
pebm_intervals_stat.Properties.VariableDescriptions{'TP_seg'} = 'Time interval between T off and P on';
pebm_intervals_stat.Properties.VariableUnits{'TP_seg'} = 'ms';
pebm_intervals_stat.Properties.VariableDescriptions{'TP_seg'} = 'Time interval between T-offset and P-onset';

pebm_intervals_stat.RR_int = result_measures.RR_int;
pebm_intervals_stat.Properties.VariableUnits{'RR_int'} = 'ms';
pebm_intervals_stat.Properties.VariableDescriptions{'RR_int'} = 'Time interval between sequential R peaks.';
pebm_intervals_stat.Properties.VariableUnits{'RR_int'} = 'ms';
pebm_intervals_stat.Properties.VariableDescriptions{'RR_int'} = 'Time interval between consecutive R peaks ';

pebm_intervals_stat.QTcB = result_measures.QTc_b;
pebm_intervals_stat.Properties.VariableUnits{'QTcB'} = 'ms';
pebm_intervals_stat.Properties.VariableDescriptions{'QTcB'} = 'Corrected QT interval (QTc) by Bazett';

pebm_intervals_stat.QTc_b = result_measures.QTc_b;
pebm_intervals_stat.Properties.VariableUnits{'QTc_b'} = 'ms';
pebm_intervals_stat.Properties.VariableDescriptions{'QTc_b'} = 'Corrected QT interval (QTc) using Bazett’s formula';

pebm_intervals_stat.QTcFri = result_measures.QTc_frid;
pebm_intervals_stat.Properties.VariableUnits{'QTcFri'} = 'ms';
pebm_intervals_stat.Properties.VariableDescriptions{'QTcFri'} = 'QTc by Fridericia';

pebm_intervals_stat.QTc_frid = result_measures.QTc_frid;
pebm_intervals_stat.Properties.VariableUnits{'QTc_frid'} = 'ms';
pebm_intervals_stat.Properties.VariableDescriptions{'QTc_frid'} = 'QTc using the Fridericia formula';
pebm_intervals_stat.QTcF = result_measures.QTc_fra;
pebm_intervals_stat.Properties.VariableUnits{'QTcF'} = 'ms';
pebm_intervals_stat.Properties.VariableDescriptions{'QTcF'} = 'QTc by Framingham';

pebm_intervals_stat.QTc_fra = result_measures.QTc_fra;
pebm_intervals_stat.Properties.VariableUnits{'QTc_fra'} = 'ms';
pebm_intervals_stat.Properties.VariableDescriptions{'QTc_fra'} = 'QTc using the Framingham formula';
pebm_intervals_stat.QTcH = result_measures.QTc_hod;
pebm_intervals_stat.Properties.VariableUnits{'QTcH'} = 'ms';
pebm_intervals_stat.Properties.VariableDescriptions{'QTcH'} = 'QTc by Hodges';

pebm_intervals_stat.QTc_hod = result_measures.QTc_hod;
pebm_intervals_stat.Properties.VariableUnits{'QTc_hod'} = 'ms';
pebm_intervals_stat.Properties.VariableDescriptions{'QTc_hod'} = 'QTc using the Hodges formula';
pebm_intervals_stat.R_depol = result_measures.R_depolarization;
pebm_intervals_stat.Properties.VariableUnits{'R_depol'} = 'ms';
pebm_intervals_stat.Properties.VariableDescriptions{'R_depol'} = 'Time interval between Q-onset and R-peak';
83 changes: 41 additions & 42 deletions GUI/Biomarkers/biomarkers_waves.m
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
%%

function pebm_waves_stat = biomarkers_waves(signal, Fs, fud_points, measures_cb_array)
function pebm_waves_stat = biomarkers_waves(signal_file, Fs, fud_file, measures_cb_array)

pebm_waves_stat= table;

Expand All @@ -9,30 +9,29 @@

result_measures = [];

if ~all(isnan(signal)) && exist(executable_file, 'file')

% func_args = zip_args({'fs', 'fiducials'}, {Fs, fud_points});
func_args = zip_args({'fs'}, {Fs});
if exist(executable_file, 'file')

signal_file = [tempdir 'temp.dat'];
dlmwrite(signal_file, signal, '\n');
func_args = zip_args({'fs'}, {Fs});

fud_file = [tempdir 'fud_temp.mat'];
save(fud_file, 'fud_points');
% signal_file = [tempdir 'temp.dat'];
% dlmwrite(signal_file, signal, '\n');
%
% fud_file = [tempdir 'fud_temp.mat'];
% save(fud_file, 'fud_points');

if measures_cb_array
if measures_cb_array
command = ['"' executable_file '" ' '"' signal_file '"' ' "' fud_file '"' ' biomarkers_waves ' func_args];
result_measures = exec_pzpy(command);
else
result_measures.Pwave_amp = ' ';
result_measures.Twave_amp = ' ';
result_measures.Rwave_amp = ' ';
result_measures.Parea = ' ';
result_measures.Tarea = ' ';
result_measures.Pwave = ' ';
result_measures.Twave = ' ';
result_measures.Rwave = ' ';
result_measures.Pwave_area = ' ';
result_measures.Twave_area = ' ';

result_measures.QRSarea = ' ';
result_measures.STamp = ' ';
result_measures.Jpoint = ' ';
result_measures.QRS_area = ' ';
result_measures.ST_seg = ' ';
result_measures.Jpoint = ' ';
end
end

Expand All @@ -45,43 +44,43 @@

result_measures.QRSarea = NaN;
result_measures.STamp = NaN;
result_measures.Jpoint = NaN;
result_measures.Jpoint = NaN;
end

pebm_waves_stat.Properties.Description = 'Fiducials Biomarkers Wave characteristics';

pebm_waves_stat.Properties.UserData = 6;

pebm_waves_stat.Pwave_amp = result_measures.Pwave_amp;
pebm_waves_stat.Properties.VariableUnits{'Pwave_amp'} = sprintf('10\x207B\x2074v'); %'1e-4v';
pebm_waves_stat.Properties.VariableDescriptions{'Pwave_amp'} = 'Amplitude difference between P peak and P off';
pebm_waves_stat.Pwave = result_measures.Pwave_amp;
pebm_waves_stat.Properties.VariableUnits{'Pwave'} = 'mV'; %'1e-4v';
pebm_waves_stat.Properties.VariableDescriptions{'Pwave'} = 'Amplitude difference between P peak and P off';

pebm_waves_stat.Twave_amp = result_measures.Twave_amp;
pebm_waves_stat.Properties.VariableUnits{'Twave_amp'} = sprintf('10\x207B\x2074v');
pebm_waves_stat.Properties.VariableDescriptions{'Twave_amp'} = 'Amplitude difference between T peak on and T off';
pebm_waves_stat.Twave = result_measures.Twave_amp;
pebm_waves_stat.Properties.VariableUnits{'Twave'} = 'mV'; %sprintf('10\x207B\x2074v');
pebm_waves_stat.Properties.VariableDescriptions{'Twave'} = 'Amplitude difference between T peak on and T off';

pebm_waves_stat.Rwave_amp = result_measures.Rwave_amp;
pebm_waves_stat.Properties.VariableUnits{'Rwave_amp'} = sprintf('10\x207B\x2074v');
pebm_waves_stat.Properties.VariableDescriptions{'Rwave_amp'} = 'R peak amplitude.';
pebm_waves_stat.Rwave = result_measures.Rwave_amp;
pebm_waves_stat.Properties.VariableUnits{'Rwave'} = 'mV';
pebm_waves_stat.Properties.VariableDescriptions{'Rwave'} = 'R peak amplitude';

pebm_waves_stat.Parea = result_measures.Parea;
pebm_waves_stat.Properties.VariableUnits{'Parea'} = sprintf('10\x207B\x2074v*ms'); %'1e-4v*ms';
pebm_waves_stat.Properties.VariableDescriptions{'Parea'} = 'P wave interval area defined as integral from the P on to the P off';
pebm_waves_stat.Pwave_area = result_measures.Parea;
pebm_waves_stat.Properties.VariableUnits{'Pwave_area'} = 'mV*ms'; %'1e-4v*ms';
pebm_waves_stat.Properties.VariableDescriptions{'Pwave_area'} = 'P wave interval area defined as integral between P-onset and P-offset';

pebm_waves_stat.Tarea = result_measures.Tarea;
pebm_waves_stat.Properties.VariableUnits{'Tarea'} = sprintf('10\x207B\x2074v*ms');
pebm_waves_stat.Properties.VariableDescriptions{'Tarea'} = 'T wave interval area defined as integral from the T on to the T off';
pebm_waves_stat.Twave_area = result_measures.Tarea;
pebm_waves_stat.Properties.VariableUnits{'Twave_area'} = 'mV*ms';
pebm_waves_stat.Properties.VariableDescriptions{'Twave_area'} = 'T wave interval area defined as integral between T-onset and T-offset';


pebm_waves_stat.QRSarea = result_measures.QRSarea;
pebm_waves_stat.Properties.VariableUnits{'QRSarea'} = sprintf('10\x207B\x2074v*ms');
pebm_waves_stat.Properties.VariableDescriptions{'QRSarea'} = 'QRS interval area defined as integral from the QRS on to the QRS off';
pebm_waves_stat.QRS_area = result_measures.QRSarea;
pebm_waves_stat.Properties.VariableUnits{'QRS_area'} = 'mV*ms';
pebm_waves_stat.Properties.VariableDescriptions{'QRS_area'} = 'QRS interval area defined as integral between Q-onset and S-offset';

pebm_waves_stat.STamp = result_measures.STamp;
pebm_waves_stat.Properties.VariableUnits{'STamp'} = sprintf('10\x207B\x2074v');
pebm_waves_stat.Properties.VariableDescriptions{'STamp'} = 'Amplitude difference between QRS off and T on';
pebm_waves_stat.ST_seg = result_measures.STamp;
pebm_waves_stat.Properties.VariableUnits{'ST_seg'} = 'mV';
pebm_waves_stat.Properties.VariableDescriptions{'ST_seg'} = 'Amplitude difference between S-offset and T-onset';

pebm_waves_stat.Jpoint = result_measures.Jpoint;
pebm_waves_stat.Properties.VariableUnits{'Jpoint'} = sprintf('10\x207B\x2074v');
pebm_waves_stat.Properties.VariableDescriptions{'Jpoint'} = 'Amplitude in 40ms after QRS off'; % as defined by Hollander et al6
pebm_waves_stat.Properties.VariableUnits{'Jpoint'} = 'mV';
pebm_waves_stat.Properties.VariableDescriptions{'Jpoint'} = 'Amplitude 40ms after S-offset'; % as defined by Hollander et al6

0 comments on commit 93ff4d4

Please sign in to comment.