function [ cellTend_upr, Tend_final ] = T( DERFI, PS, Databaze )
% Funkce má za úkol detekovat konce vlny T. Vstupem je filtrovaný signál
% určený pro detekci konce T, pozice kmitu S a počet svodů. Výstupme jsou
% pak body detekce ve všech svodech a detekce konce T na kterou bylo
% aplikováno vícesvodové rozhodovací pravidla (shluková analýza).

db = sum(Databaze);

%% Zpresneni pozic kmitu S
cellS_r=cell(12,1);

delka_okna=60;
delka_okna2=10;
vektor1=[];
vektor2=[];

[nic delka] = size(PS);

    for k = 1:db ;
        finalS =[]; final_loc =[];
        for i = 1:delka
        q = PS(k,i);
            if   q+delka_okna < 4998 & q - delka_okna2 > 0
                win = DERFI(k,q-delka_okna2:q+delka_okna); 
                [val1,loc1] = max(win); 
                [val2,loc2] = min(win); 
                loc1 = loc1+q-delka_okna2;
                loc2 = loc2+q-delka_okna2;
                if loc1 > loc2
                    for i= loc2:loc1
                        if ((DERFI(k,i)>0 && DERFI(k,i+1)<0) || (DERFI(k,i)<0 && DERFI(k,i+1)>0))
                            final_loc =(i); 
                        end
                    end
                end
                if loc1 < loc2
                    for i= loc1:loc2
                        if ((DERFI(k,i)>0 && DERFI(k,i+1)<0) || (DERFI(k,i)<0 && DERFI(k,i+1)>0))
                            final_loc =(i); 
                        end
                    end
                end
            end         
        finalS = [finalS final_loc];
        end          
    cellS_r{k,1}=finalS;
    end

%% Detekce vlny T
    cellT=cell(12,1);
    vektor1=[];
    vektor2=[];
    refrakt = 50;
    delka_okna=100;

    for k = 1:db ;
        finalT =[];
        for q = cellS_r{k,1}  ;
            if   q + delka_okna+refrakt < 4998
                win = DERFI(k,q+refrakt:q+refrakt+ delka_okna); 
                [val1,loc1] = max(win); 
                [val2,loc2] = min(win); 
                loc1 = loc1+q+refrakt;
                loc2 = loc2+q+refrakt;
                if loc1 > loc2
                    for i= loc2:loc1
                        if ((DERFI(k,i)>0 && DERFI(k,i+1)<0) || (DERFI(k,i)<0 && DERFI(k,i+1)>0))
                            final_loc =(i); 
                        end
                    end
                end
                if loc1 < loc2
                    for i= loc1:loc2
                        if ((DERFI(k,i)>0 && DERFI(k,i+1)<0) || (DERFI(k,i)<0 && DERFI(k,i+1)>0))
                            final_loc =(i); 
                        end
                    end
                end
            end         
            finalT = [finalT final_loc];final_loc = [];
        end       
    cellT{k,1}=finalT;
    end
 
%% Detekce konce vlny T
    cellTend=cell(12,1);
    sizeTend_pk=cell(12,1);
    for k =1:db;
        values=[];
        vektor_polohTend=[];
        delka_okna= 30;

        for q= cellT{k,1};
            if q+delka_okna  < 4999 
                if DERFI(k,q-2)<0 
                    win = DERFI(k,q:q+delka_okna); 
                    [val,loc] = max(win );  
                    vektor_polohTend= [vektor_polohTend, q+loc]; 
                    values = [values val];
                end 
                if DERFI(k,q-2)>0 
                    win = DERFI(k,q:q+delka_okna); 
                    [val,loc] = min(win );  
                    vektor_polohTend= [vektor_polohTend, q+loc]; 
                    values = [values val];
                end 
            end
        end
    cellTend{k,1}=vektor_polohTend;  sizeTend_pk{k,1}=values;
    end

    cellTend_upr=cell(12,1);
    vektor_upr_polohTend=[];
    vektor_upr_polohyTend=[];
    konst=1.9;

    for k =1:db;
        for q= cellTend{k,1};
            if q+20 < 4999
                win = DERFI(k, q:q+20);
                vektor_upr_polohTend =find(abs(win) < abs(DERFI(k,q))/(konst), 1);
                vektor_upr_polohyTend=[ vektor_upr_polohyTend  (q+vektor_upr_polohTend)];
                kontrola = isempty (vektor_upr_polohTend) ;
                    if kontrola == 1 ; 
                        vektor_upr_polohyTend=[ vektor_upr_polohyTend  (q)];
                    end
            end
       end
    cellTend_upr{k,1}=vektor_upr_polohyTend;
    vektor_upr_polohTend=[];vektor_upr_polohyTend=[];

    end

    %% Vícesvod konec T
    vzdalenost = 65;
    m = sort(cell2mat(cellTend_upr'));
    if length(m)>=2
        Y = pdist(m'); 
        Z = linkage(Y); 
        T = cluster(Z,'cutoff', vzdalenost,'criterion','distance')'; 
        [uT,oT] = unique(T,'first'); 
        [~,pos] = sort(oT); 
        skupinky = cell(1,length(uT)); 
        for i = uT;
            skupinky{i} = sort(m(T==pos(i)));
        end
    else
        skupinky = {m};
    end
    pom2 = [];pom=skupinky;

    for i = 1:length(pom);
        if length(pom{1,i})>=length(cellTend_upr')/2
            pom2 = [pom2 round(median(pom{1,i}))];
        end
    end
    Tend_vysledny = pom2;
    Tend_final{1,:} =Tend_vysledny;
    
end