%vytvori testovaci mnozinu pro analyzu (statistika, NN) z vybranych
%pacientu
close all
clear all
clc
fprintf('||| VYTVORENI TRENOVACICH A TESTOVACICH MATIC |||\n');
%% Nacteni vstupnich dat
load('path.mat');
FileName4 = 'TREN_MAT_AVG.mat';
FileName5 = 'TEST_MAT_AVG.mat';

if exist(fullfile(PathName2,FileName3),'file') 
    %jestlize neni soubor VST_MAT_AVG vypise hlasku a skonci
    fprintf('Nalezen soubor databaze "...%s" \n',fullfile(PathName2,FileName3));
    fprintf('Vytvari se testovaci mnozina ...\n');
    
    if exist(fullfile(PathName2,FileName5),'file') %jestlize existuje soubor(.m), vypise hlasku a smaze stary
    delete(fullfile(PathName2,FileName5));
    fprintf('Soubor %s jiz existuje. Tento soubor bude prepsan novym ...\n',FileName5);
    end
    load(fullfile(PathName2,FileName3)); %jestlize existuje soubor, provede se program

    mat_AF = mat_AVG_test.AF; ID_mat_AF = mat_AVG_test.ID_AF;
    mat_AP = mat_AVG_test.AP; ID_mat_AP = mat_AVG_test.ID_AP;
    mat_ATP = mat_AVG_test.ATP; ID_mat_ATP = mat_AVG_test.ID_ATP;
    mat_LEG = mat_AVG_test.LEG; ID_mat_LEG = mat_AVG_test.ID_LEG;
%% Vypocet HK por clustering a rozdeleni do test mnozin
    
    [COEFF,test_mat_AF,latent] = princomp(mat_AF);
    %COEFF...hlavni komponenty
    %test_mat_AF...souradnice komponenty
    %latent...hodnota komponenty
    cumsum(latent./sum(latent) * 100) %vypis obsahu informaci v hlavnich komponentach 
    [COEFF,test_mat_AP,latent] = princomp(mat_AP);
    cumsum(latent./sum(latent) * 100) %vypis obsahu informaci v hlavnich komponentach 
    [COEFF,test_mat_ATP,latent] = princomp(mat_ATP);
    cumsum(latent./sum(latent) * 100) %vypis obsahu informaci v hlavnich komponentach 
    [COEFF,test_mat_LEG,latent] = princomp(mat_LEG);
    cumsum(latent./sum(latent) * 100) %vypis obsahu informaci v hlavnich komponentach 
%     test_mat_AF = mat_AF;
%     test_mat_AP = mat_AP;
%     test_mat_ATP = mat_ATP;
%     test_mat_LEG = mat_LEG;
    ID_test_mat_AF = ID_mat_AF;
    ID_test_mat_AP = ID_mat_AP;
    ID_test_mat_ATP = ID_mat_ATP;
    ID_test_mat_LEG = ID_mat_LEG;

%% Ulozeni targetu a patternu pro vstup NN
    for index1=1:4
        switch index1
            case 1
                patterns = mat_AF';
                zarazeni_pac = ID_mat_AF(:,4);
                targets = zeros(3,length(zarazeni_pac));
                targets(1,zarazeni_pac==1) = 1;
                targets(2,zarazeni_pac==2) = 1;
                targets(3,zarazeni_pac==3) = 1;
                save(fullfile(PathName2,'NN_test_AF.mat'),'patterns','targets',...
                    'ID_mat_AF');
            case 2
                patterns = mat_AP';
                zarazeni_pac = ID_mat_AP(:,4);
                targets = zeros(3,length(zarazeni_pac));
                targets(1,zarazeni_pac==1) = 1;
                targets(2,zarazeni_pac==2) = 1;
                targets(3,zarazeni_pac==3) = 1;
                save(fullfile(PathName2,'NN_test_AP.mat'),'patterns','targets',...
                    'ID_mat_AP');
            case 3
                patterns = mat_ATP';
                zarazeni_pac = ID_mat_ATP(:,4);
                targets = zeros(3,length(zarazeni_pac));
                targets(1,zarazeni_pac==1) = 1;
                targets(2,zarazeni_pac==2) = 1;
                targets(3,zarazeni_pac==3) = 1;
                save(fullfile(PathName2,'NN_test_ATP.mat'),'patterns','targets',...
                    'ID_mat_ATP');
            case 4
                patterns = mat_LEG';
                zarazeni_pac = ID_mat_LEG(:,6);
                targets = zeros(3,length(zarazeni_pac));
                targets(1,zarazeni_pac==1) = 1;
                targets(2,zarazeni_pac==2) = 1;
                targets(3,zarazeni_pac==3) = 1;
                save(fullfile(PathName2,'NN_test_LEG.mat'),'patterns','targets',...
                    'ID_mat_LEG');
        end
    end

%% Vyber trenovacich signalu
% Vybrani pacientu pro trenovaci mnozinu a vyber vstupnich dat podle ID
% pacienta
    index_zaznamu_AF = []; index_zaznamu_AP = []; index_zaznamu_ATP = []; index_zaznamu_LEG = [];
    for krok = 1:2 
        %rozdeleni na levou (sin) a pravou stranu (dx) a vyber pacientu pro
        %trenovaci mnozinu (???myslim ze to je uz bez tech odchylek brutalnich???)
        switch krok
            case 1 %prava strana 
                strana = 1;
                pacient = [14:21,42:59,66:68, ... %zdravi pacienti
                4,24:26,28,29,41,69,70,72:74,76,79,81:83,85,90,95,97,100,104,106,... %stenoticti pacienti
                2,5,7,10:12,22,23,34,35,39,40,71,80,92,93,99,101,105]; %pacienti s uzavery
            case 2 %leva strana
                strana = 2;
                pacient = [14:21,42:59,66:68, ... %zdravi pacienti
                3,4,23:26,28,29,32,40,70,73:82,88:90,92,95,100,101,106,... %stenoticti pacienti
                1,6:12,22,34,35,69,71,72,83,85,86,93,97,99,102,104,105]; %pacienti s uzavery
        end

        pocet_pacientu = length(pacient);
        pacient = sort(pacient(1:pocet_pacientu)); %ID pacienta ze seznamu
        pacient = pacient';
% Vtvoreni celkove trenovaci matice
        for index=1:pocet_pacientu        
            index_zaznamu_AF = [index_zaznamu_AF;find(ID_test_mat_AF(:,1)==pacient(index)&ID_test_mat_AF(:,3)==strana)];
            index_zaznamu_AP = [index_zaznamu_AP;find(ID_test_mat_AP(:,1)==pacient(index)&ID_test_mat_AP(:,3)==strana)];
            index_zaznamu_ATP = [index_zaznamu_ATP;find(ID_test_mat_ATP(:,1)==pacient(index)&ID_test_mat_ATP(:,3)==strana)];
            index_zaznamu_LEG = [index_zaznamu_LEG;find(ID_test_mat_LEG(:,1)==pacient(index)&ID_test_mat_LEG(:,5)==strana)];
        end
        tren_mat_AF = test_mat_AF(index_zaznamu_AF,:);
        NN_tren_mat_AF = mat_AF(index_zaznamu_AF,:);
        ID_tren_mat_AF = ID_test_mat_AF(index_zaznamu_AF,:);
        tren_mat_AP = test_mat_AP(index_zaznamu_AP,:);
        NN_tren_mat_AP = mat_AP(index_zaznamu_AP,:);
        ID_tren_mat_AP = ID_test_mat_AP(index_zaznamu_AP,:);
        tren_mat_ATP = test_mat_ATP(index_zaznamu_ATP,:);
        NN_tren_mat_ATP = mat_ATP(index_zaznamu_ATP,:);
        ID_tren_mat_ATP = ID_test_mat_ATP(index_zaznamu_ATP,:);
        tren_mat_LEG = test_mat_LEG(index_zaznamu_LEG,:);
        NN_tren_mat_LEG = mat_LEG(index_zaznamu_LEG,:);
        ID_tren_mat_LEG = ID_test_mat_LEG(index_zaznamu_LEG,:);
    end

%% Ulozeni targetu a patternu pro vstup NN (TRENOVACI)
    for index1=1:4
        switch index1
            case 1
                patterns = NN_tren_mat_AF';
                zarazeni_pac = ID_tren_mat_AF(:,4);
                targets = zeros(3,length(zarazeni_pac));
                targets(1,zarazeni_pac==1) = 1;
                targets(2,zarazeni_pac==2) = 1;
                targets(3,zarazeni_pac==3) = 1;
                save(fullfile(PathName2,'NN_tren_AF.mat'),'patterns','targets',...
                    'ID_tren_mat_AF');
            case 2
                patterns = NN_tren_mat_AP';
                zarazeni_pac = ID_tren_mat_AP(:,4);
                targets = zeros(3,length(zarazeni_pac));
                targets(1,zarazeni_pac==1) = 1;
                targets(2,zarazeni_pac==2) = 1;
                targets(3,zarazeni_pac==3) = 1;
                save(fullfile(PathName2,'NN_tren_AP.mat'),'patterns','targets',...
                    'ID_tren_mat_AP');
            case 3
                patterns = NN_tren_mat_ATP';
                zarazeni_pac = ID_tren_mat_ATP(:,4);
                targets = zeros(3,length(zarazeni_pac));
                targets(1,zarazeni_pac==1) = 1;
                targets(2,zarazeni_pac==2) = 1;
                targets(3,zarazeni_pac==3) = 1;
                save(fullfile(PathName2,'NN_tren_ATP.mat'),'patterns','targets',...
                    'ID_tren_mat_ATP');
            case 4
                patterns = NN_tren_mat_LEG';
                zarazeni_pac = ID_tren_mat_LEG(:,6);
                targets = zeros(3,length(zarazeni_pac));
                targets(1,zarazeni_pac==1) = 1;
                targets(2,zarazeni_pac==2) = 1;
                targets(3,zarazeni_pac==3) = 1;
                save(fullfile(PathName2,'NN_tren_LEG.mat'),'patterns','targets',...
                    'ID_tren_mat_LEG');
        end
    end
%% Vypis ulozeni
    fprintf('\n');
    fprintf('Vybrana testovaci mnozina se sklada z techto prvku:\n');
    fprintf('Testovaci mnozina  AF obsahuje %.0f vzoru, %2.0f parametru. \n',size(test_mat_AF));
    fprintf('Testovaci mnozina  AP obsahuje %.0f vzoru, %2.0f parametru. \n',size(test_mat_AP));
    fprintf('Testovaci mnozina ATP obsahuje %.0f vzoru, %2.0f parametru. \n',size(test_mat_ATP));
    fprintf('Testovaci mnozina LEG obsahuje %.0f vzoru, %2.0f parametru. \n',size(test_mat_LEG));
    fprintf('\n');
    fprintf('Vybrana trenovaci mnozina se sklada z techto prvku:\n');
    fprintf('Trenovaci mnozina  AF obsahuje %.0f vzoru, %2.0f parametru. \n',size(tren_mat_AF));
    fprintf('Trenovaci mnozina  AP obsahuje %.0f vzoru, %2.0f parametru. \n',size(tren_mat_AP));
    fprintf('Trenovaci mnozina ATP obsahuje %.0f vzoru, %2.0f parametru. \n',size(tren_mat_ATP));
    fprintf('Trenovaci mnozina LEG obsahuje %.0f vzoru, %2.0f parametru. \n',size(tren_mat_LEG));
    fprintf('\n');
        
    trenovaci.tren_AF = tren_mat_AF;
    trenovaci.ID_tren_AF = ID_tren_mat_AF;
    trenovaci.tren_AP = tren_mat_AP;
    trenovaci.ID_tren_AP = ID_tren_mat_AP;
    trenovaci.tren_ATP = tren_mat_ATP;
    trenovaci.ID_tren_ATP = ID_tren_mat_ATP;
    trenovaci.tren_LEG = tren_mat_LEG;
    trenovaci.ID_tren_LEG = ID_tren_mat_LEG;
    
    testovaci.test_AF = test_mat_AF;
    testovaci.ID_test_AF = ID_test_mat_AF;
    testovaci.test_AP = test_mat_AP;
    testovaci.ID_test_AP = ID_test_mat_AP;
    testovaci.test_ATP = test_mat_ATP;
    testovaci.ID_test_ATP = ID_test_mat_ATP;
    testovaci.test_LEG = test_mat_LEG;
    testovaci.ID_test_LEG = ID_test_mat_LEG;
    
    save(fullfile(PathName2,FileName4),'trenovaci');
    save(fullfile(PathName2,FileName5),'testovaci');
    
    fprintf('Vytvoren soubor "%s".\n',fullfile(PathName2,FileName4));
    fprintf('Vytvoren soubor "%s".\n',fullfile(PathName2,FileName5));
    save(('path.mat'),'-append','FileName4','FileName5');
else
    fprintf('Nenalezen soubor databaze "...%s"\n',fullfile(PathName2,FileName2));
    fprintf('... program bde ukoncen!!!\n');
    
end %koncovy end celeho programu, rozhodovani estli je DB_AVG.mat
