Predicting Acute Hypotensive Episodes: The PhysioNet/Computing in Cardiology Challenge 2009 1.0.0

File: <base>/sources/Henriques/codeMatlab/mainPreProcessingABPSignal.m (11,004 bytes)
% _________________________________________________________________________
% จจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจ
% PREDICTION OF ACUTE HYPOTENSIVE EPISODES USING NEURAL NETWORK MULTIMODELS
% _________________________________________________________________________
% จจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจ
%        Copyright (C) 2009
%          : Jorge Henriques ...  <jh@dei.uc.pt>,
%          : Teresa Rocha    ...  <teresa@sun.isec.pt>
%        This software is released under the terms of the GNU
%        General Public License (http://www.gnu.org/copyleft/gpl.html)
% จจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจ
% mainPreprocessingABPSignal.m
%__________________________________________________________________________
% จจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจ

%__________________________________________________________________________
% จจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจ
% Prepare datasets (A, B, H, C)
%     1. Load a raw signal (ABP in this case) from SOURCE folder
%     2. Preprocessing (missing values + noise reduction)
%     3. Save the final result  TARGET folder
%บบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบ INPUT
%           : Training {H, C}
%                      source= '..\MIMIC_TRAIN_TXT\';
%                      target= '..\dataTrain\';
%           : Testing  {A, B}
%                      source= '..\MIMIC_TEST_MAT\';
%                      target= '..\dataTest\';
%บบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบ OUTPUT
%    DAT=[ YR YF YA]
%      : YR - Raw data       (660x1) - minutes  (10+1 h : before/after t0)
%      : YF - Filter data    (660x1) - minutes  (10+1 h : before/after t0)
%      : YA - AHE episode    (660x1) - minutes  (10+1 h : before/after t0)
%      : for dataSet A and B [600:660]=value(600)
%__________________________________________________________________________
% จจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจ


clc; clear; close all
warning off

showDAT= 1;     %.. (0/1) Show results
saveDAT= 1;     %.. (0/1) Save results

disp('___________________________________________________________________')
disp('จจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจ')
disp('                                mainPreprocessingABPSignal         ')
disp('___________________________________________________________________')
disp('จจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจ')
pause(1)


%บบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบ
%                                                           DEFINITIONS  1.
%บบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบ

%__________________________________________________________________________
%                                                            Data Set - 1.1
%จจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจ
option=menu(' -------- DATASET -------- ', ...
    ' .  H ', ' .  C ',' .  A ',' .  B ');
switch option
    case 1; dataSet='H';
    case 2; dataSet='C';
    case 3; dataSet='A';
    case 4; dataSet='B';
end
if dataSet=='A' | dataSet=='B'
    numSet='1'
else
    option=menu(' -------- DATASET -------- ', ' . 1 ', ' . 2 ');
    switch option
        case 1; numSet='1';
        case 2; numSet='2';
    end
end
sinal  ='BP';   %.. Only ABP is considered

%__________________________________________________________________________
%                                                                Time - 1.2
%จจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจ
BEFORE=600;  %... 10  hours before
AFTER = 60;  %... 1   hours after
mmHG  = 60;  %... Limit value for computing AHE episodes

%__________________________________________________________________________
%                                                           Data Sets - 1.3
%จจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจ
%Downloaded from Physionet/MIMIC II
% 1.Hour   2.Day
% 3.HR     4.ABPSys	 5.ABPDias	 6.ABPMean	  7.PULSE
% 8.RESP   9.SpO2    10.NBPSys	11.NBPDias	 12.NBPMean

ABP=6;  %.. Number of column corresponding to ABP
listH1={
    'h1_a40439', 'h1_a40493', 'h1_a40764', 'h1_a40834', 'h1_a40928', ...
    'h1_a41200', 'h1_a41447', 'h1_a41770', 'h1_a41835', 'h1_a41882', ...
    'h1_a41925', 'h1_a42277', 'h1_a42397', 'h1_a42410', 'h1_a42928'};
indBPH1= ABP*ones(length(listH1),1);
indBPH1([2 8])=8;  %..... consider column 8 for dataSet 2 and 8
listH2={
    'h2_a40006', 'h2_a40012', 'h2_a40050', 'h2_a40051', 'h2_a40064', ...
    'h2_a40076', 'h2_a40096', 'h2_a40099', 'h2_a40113', 'h2_a40119', ...
    'h2_a40125', 'h2_a40127', 'h2_a40154', 'h2_a40164', 'h2_a40172'};
indBPH2= ABP*ones(length(listH2),1);
indBPH2([9 13])=8; %..... consider column 8 for dataSet 9 and 13
listC1={
    'c1_a40282', 'c1_a40473', 'c1_a40551', 'c1_a40802', 'c1_a40921', ...
    'c1_a41137', 'c1_a41177', 'c1_a41385', 'c1_a41434', 'c1_a41466', ...
    'c1_a41495', 'c1_a41664', 'c1_a41934', 'c1_a42141', 'c1_a42259' };
indBPC1= ABP*ones(length(listC1),1);
listC2={
    'c2_a40207', 'c2_a40215', 'c2_a40225', 'c2_a40234', 'c2_a40260', ...
    'c2_a40264', 'c2_a40277', 'c2_a40306', 'c2_a40329', 'c2_a40355', ...
    'c2_a40374', 'c2_a40376', 'c2_a40384', 'c2_a40408', 'c2_a40424' };
indBPC2= ABP*ones(length(listC2),1);
indBPC2([4])=8; %..... consider column 8 for dataSet 4
listA1={...
    '101bnm','102bnm','103bnm','104bnm','105bnm', ...
    '106bnm','107bnm','108bnm','109bnm','110bnm'};
listB1={...
    '201bnm','202bnm','203bnm','204bnm','205bnm', ...
    '206bnm','207bnm','208bnm','209bnm','210bnm', ...
    '211bnm','212bnm','213bnm','214bnm','215bnm', ...
    '216bnm','217bnm','218bnm','219bnm','220bnm', ...
    '221bnm','222bnm','223bnm','224bnm','225bnm', ...
    '226bnm','227bnm','228bnm','229bnm','230bnm', ...
    '231bnm','232bnm','233bnm','234bnm','235bnm', ...
    '236bnm','237bnm','238bnm','239bnm','240bnm'};

%__________________________________________________________________________
%                                                   Source and Target - 1.4
%จจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจ
if dataSet=='H' | dataSet=='C'
    source= '..\MIMIC_TRAIN_TXT\';
    target= '..\dataTrain\';
    cmd   = [ 'list = list' char(dataSet) char(numSet) ';'];
    eval(cmd)
    cmd=['t0=load(''' source char(dataSet) char(numSet) '_Indice.txt'');'];
    eval(cmd);
end
if dataSet=='A' | dataSet=='B'
    source ='..\MIMIC_TEST_MAT\';
    target ='..\dataTest\';
    cmd   = [ 'list = list' char(dataSet) char(numSet) ';'];
    eval(cmd)
end


%บบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบ
%                                                         PREPROCESSING  2.
%บบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบ
clc
for itlist=1:length(list)

    file = char(list(itlist));

    %______________________________________________________________________
    %                                                   Training Data {H,C}
    %จจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจ
    if dataSet=='H' | dataSet=='C'

        %จจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจ Load raw data
        cmd=[' Yraw=load(''' source file '.txt'');'];
        eval(cmd);
        cmd=[ 'indBP=indBP' char(dataSet) char(numSet) '(itlist);'];
        eval(cmd)
        Yraw = Yraw(:,indBP);

        %จจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจ  Missing+Noise
        Yraw = mmMissingValues(Yraw);
        Yfil = mmFilter(Yraw, 0.8, 1);

        %จจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจ  t0 = start of AHE
        indt0= t0(itlist,1);
        Yahe =  0*Yraw;
        Yahe(indt0:end) = mmHG;

        %จจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจ  10+1 h(before+after)
        YR=Yraw(indt0-BEFORE+1:indt0+AFTER);
        YF=Yfil(indt0-BEFORE+1:indt0+AFTER);
        YA=Yahe(indt0-BEFORE+1:indt0+AFTER);
        YRFA=[YR YF YA];
    end


    %______________________________________________________________________
    %                                                    Testing Data {A,B}
    %จจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจ
    if dataSet=='A' | dataSet=='B'

        %จจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจ Load raw data
        cmd=[' Yraw=load(''' source file ''');'];
        eval(cmd)
        Yraw= mmBaseGain(Yraw.val, itlist, sinal, dataSet);
        %จจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจ Resampling+Missing+Noise
        Yraw = mmResampling(Yraw, 60);
        Yraw = mmMissingValues(Yraw);
        Yfil = mmFilter(Yraw, 0.75, 1);

        %จจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจ  10+1 h(before+after)
        YP=Yfil(end)*ones(AFTER,1);   % Forecast = After = last value
        YR=[   Yraw; YP];
        YF=[   Yfil; YP];
        YA=[ 0*Yfil; mmHG*ones(size(YP))];
        YRFA=[YR YF YA];
    end


    %บบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบ
    %                                                              SAVE  3.
    %บบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบ
    if saveDAT
        DAT=YRFA;
        saveFile=[ 'save ' char(target) char(sinal) '_' ...
            char(dataSet) char(numSet) '_'  num2str(itlist) ' DAT'   ];
        eval(saveFile);
    end

    %บบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบ
    %                                                              SHOW  4.
    %บบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบ
    if showDAT
        mmMaximize
        N=size(YRFA,1);
        figure(1)
        hold on
        plot(1:N,YRFA(:,1),'r', 1:N,YRFA(:,2),'b', 1:N,YRFA(:,3),'k',...
            'LineWidth',1.5)
        plot(1:N,60*ones(N,1),'g:')
        axis([0 BEFORE+AFTER  -5 max(max(YRFA))+5 ])
        legend('Missing','Filter','AHE')
        strTitle=[ 'file: ' char(file) '          # ' ...
            char(dataSet)  char(numSet) '-'  num2str(itlist) ];
        mmLabel(strTitle,'minutes','mmHG')
        %จจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจ
        pause
        close all
    end

end

clc
disp('___________________________________________________________________')
disp('จจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจ')
disp(['        Dataset  ' char(dataSet)  '  has been processed          '])
disp('___________________________________________________________________')
disp('จจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจ')
pause(1)
option=1;