function skupinky = multiQRS(data, vzdalenost, typ)
% Funkce multiQRS představuje shlukovou analýzu. Vstupem jsou data, která
% představují detekce v každém svodu, vzdálenost je maximální vzdálenost
% mezi prvky shluku a typ značí zda chce brát medián (0), minimum (1), nebo 
% maximum (2) ze shluku. Výstupem jsou pozice společné pro všechny svody.

if exist('typ')==0
    typ = 0;
end
m = [];
skupinky = [];
[r s] = size(data);
for j = 1:r
    m = [m data(j,:)];
end
m = sort(m);
if length(m)>=2
    Y = pdist(m'); % vypocet vzdalenosti
    Z = linkage(Y); % shlukovani
    T = cluster(Z,'cutoff', vzdalenost,'criterion','distance')'; % rozdeleni do shluku
    [uT,oT] = unique(T,'first'); % zjisteni poctu shluku
    [~,pos] = sort(oT); % zjisteni poradi shluku
    skup = cell(1,length(uT)); % a nasazeni do bunkoveho pole
    for i = uT
        skup{i} = sort(m(T==pos(i)));
    end
else
    skup = {m};
end



for j = 1:length(skup)
    n = 1;
    if length(skup{1,j})>=r/2
        switch typ
            case 0
                pozice = round(median(skup{1,j}));
            case 1
                while n < length(skup{1,j})-3
                    pom = [skup{1,j}(n)+2 skup{1,j}(n+1)+6 skup{1,j}(n+2)+8 ];  
                    if skup{1,j}(n+1)<=pom(1) & skup{1,j}(n+2)<=pom(2) & skup{1,j}(n+3)<=pom(3)
                        pozice = skup{1,j}(n);
                        n = 100;
                    elseif n == 7 | length(skup{1,j})-3<6
                        pozice = round(median(skup{1,j}));
                        n = 100;
                    else
                        n = n+1;
                    end
                end
            case 2                              
                while n < length(skup{1,j})-3
                    pom = [skup{1,j}(end-n+1)-5 skup{1,j}(end-n)-4 skup{1,j}(end-n-1)-4];
                    if skup{1,j}(end-n)>=pom(1) & skup{1,j}(end-n-1)>=pom(2) & skup{1,j}(end-n-2)>=pom(3)
                        pozice = skup{1,j}(end-n-1);            %+1
                        n = 100;
                    elseif n == 7 | length(skup{1,j})-3<=5
                        pozice = round(median(skup{1,j}));
                        n = 100;
                    else
                        n = n+1;
                    end
                end
            otherwise
                pozice = round(median(skup{1,j}));
                error('Shluková analýza nemusí fungovat správně, při zpracovávání se vyskytl problém');
        end
    else
        pozice =[];
    end
    
skupinky = [skupinky pozice];

if pozice == 0
    skupinky(:,end) = [];
end
end


end

