 function c = clusteran(QRS,vstup_sig,vyberQRS,clus1,clus2,svod,metr,link,num,auto,drift,fvz) % definice fce

QRS = round(QRS); % zaokrouhleni pozic R vlnn
switch vyberQRS % vyber podle typu vstupu - cas atd.
    case 1 % procenta
       vzdalenostRR = zeros(1,length(QRS)-1);
       for i = 1:length(QRS)-1
           vzdalenostRR(i) = QRS(i+1)-QRS(i);
       end;
       vzdalenostRR = sum(vzdalenostRR)/length(vzdalenostRR);
       velikost_komplexu1 = round((vzdalenostRR/100)*clus1);
       velikost_komplexu2 = round((vzdalenostRR/100)*clus2);
    case 2 % cas
       velikost_komplexu1 = abs(round(clus1*(fvz/1000)));
       velikost_komplexu2 = abs(round(clus2*(fvz/1000)));
    case 3 % rucni vstup
        f = figure;
        plot(vstup_sig(svod,:));
        [velikost_komplexu, ~] = ginput(2); 
        velikost_komplexu = sort(velikost_komplexu); 
        plot(vstup_sig(svod,velikost_komplexu(1):velikost_komplexu(2)));
        [velikost_komplexu, ~] = ginput(3); 
        delete(f);
        velikost_komplexu = sort(velikost_komplexu);
        velikost_komplexu1 = round(velikost_komplexu(2)-velikost_komplexu(1));
        velikost_komplexu2 = round(velikost_komplexu(3)-velikost_komplexu(2));
end;
j = 0; % definice promennych
prvni = 0;
posledni = 0;
for i = 1:length(QRS) %od 1 po pocet detekovanych QRS
    pozice1 = QRS(i)-velikost_komplexu1; % zacatek
    pozice2 = QRS(i)+velikost_komplexu2; % konec 
    if pozice1>0
        if pozice2<length(vstup_sig(svod,:))
            j = j+1;
            segmented(j,:) = vstup_sig(svod,pozice1:pozice2);
            segmented1(j,:) = vstup_sig(svod,pozice1:pozice2);
            if drift == 1
%                  figure; % zobraz
%                  plot(segmented(j,:)); % zobraz
%                  hold on; % zobraz
                S = fft(segmented(j,:));
                S(1) = 0;
                 segmented(j,:) = ifft(S);
%                   plot(segmented(j,:),'r'); % zobraz
%                  hold off; % zobraz
            end;
        end;
    end;   
    if pozice1<0  % osetreni necelych QRS - prvni, posledni nize
        prvni = prvni + 1;
    end;
    if pozice2>length(vstup_sig(svod,:))
        posledni = posledni + 1;
    end;
end
%--------------------------------------------------------------------------
% % zobrazeni odstraneni SS slozky
% figure('Name','Ukazka odstraneni stejnosmerne slozky');
% k = 0;
% for i = 1:length(segmented(1,:)):length(segmented(1,:))*length(QRS)
%     k = k+1;
% plot(i:i+length(segmented(1,:))-1,segmented1(k,:));
% hold on;
% plot(i:i+length(segmented(1,:))-1,segmented(k,:),'r');
% end;
% xlabel('Vzorky [-]');
% ylabel('Amplituda [µV]');
% % legend('nefiltrovano','filtrovano');
% hold off;
%--------------------------------------------------------------------------

if strcmp(metr,'mahalanobis') % kovariancni matice pro mahalanobise
    N = length(segmented);
    [u,~,~]=svd(ones(N,N)); % build some random eigen vectors
    C=u*diag(ones(N,1))*u'; % reassemble with random, positive, eigen values
    dist = pdist(segmented,metr,C);
else
    dist = pdist(segmented,metr); % jinak normalne bez dalsich podpurnych veci
end;
Z = linkage(dist,link); % algoritmus shlukovky
if auto == 1 % rez v nejvetsi vzdalenosti
    Y = Z(:,3);
    for i = 1:length(Y)-1
    Y(i) = Y(i+1) - Y(i);
    end;
    Y(end) = 0;
    nejvetsi = max(Y);
    index = find(Y==nejvetsi);
    num = length(Y(index:end));
%     [Y,~] = cophenet(Z,dist);
end;
c = cluster(Z,'maxclust',num);
if prvni > 0
    prvni = zeros(prvni,1);
    c = [prvni; c];
end;
if posledni > 0
    posledni = zeros(posledni,1);
    c = [c; posledni];
end;

max_diff=0; % barveni dendrogramu
for i=1:length(Z(:,3))-1 
    if (Z(i+1,3)-Z(i,3))>max_diff
        max_diff=Z(i+1,3)-Z(i,3);
        prah=Z(i+1,3)-0.001;
    end
end

figure('Name','Dendrogram');
[H]=dendrogram(Z,'colorthreshold',prah);
set(H, 'LineWidth',1.5);
% title('Dendrogram');
xlabel('Pořadí QRS komplexu [-]');
ylabel('Podobnostní vzdálenost dle metriky [-]');

% figure;
% plot(vstup_sig(svod,:));
% ylabel('Amplituda [µV]');
% xlabel('Vzorky [-]');
