% _________________________________________________________________________
% จจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจ
% 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)
% จจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจ
% mmCorrelation.m
%__________________________________________________________________________
% จจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจจ


%บบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบ
%บบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบ OUTPUT
%บบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบ

function [YY, YM, CC, II, CCM]=mmCorrelation(YBEF, DBEF, YAFT, DAFT, ...
    ORDSIZ, TOL, TOLSUM, TYPECOR, WEIGHT, NUMCOR );

%บบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบ
%                                                   Correlation coeficients
%บบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบ
N  =size(DBEF,2);
TAM=length(YBEF);
CC =zeros(1, N );
%จจจจจจจจจจจจจจจจจจจจจจจจจจจจ Correlation between ABP signal and templates
%จจจจจจจจจจจจจจจจจจจจจจจจจจจจ Consider time period = SIZE = ORDSIZ(i,2)
for j=1:N
 
    bef=ORDSIZ(j,2);
    ini=TAM-bef+1;
    y1=YBEF(ini:end);
    y2=DBEF(ini:end,j);
    y1=mmNormalize(y1, -1, 1, 0, length(y1) );
    y2=mmNormalize(y2, -1, 1, 0, length(y2) );
    ci=corrcoef(y1,y2);
    CC(j)=ci(1,2);
end
if size(DBEF,1)<size(DBEF,2)
    DBEF=DBEF';
end

%บบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบ
%                                                               TYPECOR = 0
%บบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบ
%[CI,II]=sort(CC);
%จจจจจจจจจจจจจจจจจจจจจจจจจจจ Templates such that corrleation > TOL
if TYPECOR==0
    id=find(CC>TOL);
    ii=id;
    %..............................
    if isempty(ii)
        [val,ii]=max(CC);
    end
    II=ii;
end


%บบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบ
%                                                               TYPECOR = 1
%บบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบ
%จจจจจจจจจจจจจจจจจจจจจจจจจจจ Templates such that sum(correlation) < TOLSUM
if TYPECOR==1
    idp = find(CC>0);
    CCP  = CC(idp);
    TOLSUM = TOLSUM*sum(CCP);
    [valor,indice]=sort(CC);
    some=0;
    posicao=length(CC);
    indii=[];
    while some<TOLSUM & posicao>2
        some=some+CC(indice(posicao));
        indii=[indii indice(posicao)];
        posicao=posicao-1;
    end
    II=indii;
     
end

%บบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบ
%                                                               TYPECOR = 2
%บบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบ
%จจจจจจจจจจจจจจจจจจจจจจจจจจจ First NUMCOR templates
if TYPECOR==2
    [CI,II]=sort(CC);
    CCM=CI(end-NUMCOR+1:end);
    II =II(end-NUMCOR+1:end);
end

%บบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบ
%                                                                   WEIGHTS
%บบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบ
%จจจจจจจจจจจจจจจจจจจจจจจจจจจ 1:  Weight proportional to correlation
%จจจจจจจจจจจจจจจจจจจจจจจจจจจ 0:  Weight equal for all templates
if WEIGHT
    CCM=CC(II)./sum(CC(II));
else
    CCM=ones( size(II) )./max(size(II));
end

%บบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบ
%                                           PREDICTION based on correlation
%บบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบบ
%จจจจจจจจจจจจจจจจจจจจจจจจจจจ 1:  Weight proportional to correlation
YY   = [];
Yset = [YBEF; YAFT ];
YM   = 0*Yset;
for indice=1:length(II)
    ind  = II(indice);
    Dset = [DBEF(:,ind); DAFT(:,ind) ];
    YMcon= mmConverte( Yset, Dset, length(Yset) );
    YY   = [YY YMcon];
    YM   = YM + CCM(indice)*YMcon;
end
