%% Vytvoreni vstupni matice (vst_matice) + soubor s indexovanymi radky
% signalu (ID_sig_pac), ktery odkazuje na radky se zaznamy pacientu v
% souborech db_avg_znak a db_avg_cisl
clear all
close all
clc
fprintf('||| VYTVORENI VSTUPNI MATICE |||\n');

%% nacte soubor s cestami a soubor se zarazenim pacientu podle projektu GACR
load('path.mat'); 
FileName3='VST_MATICE.mat';
if exist(fullfile(PathName2,FileName2),'file') %jestlize neni soubor vypise hlasku a skonci
    fprintf('Nalezen soubor databaze "...%s" \n',fullfile(PathName2,FileName3));
        
    if exist(fullfile(PathName2,FileName3),'file') %jestlize existuje soubor(.m), vypise hlasku a smaze stary
    delete(fullfile(PathName2,FileName3));
    fprintf('Soubor %s jiz existuje. Tento soubor bude prepsan novym ...\n',FileName3);
    end
    fprintf('Vytvari se vstupni mnozina ...\n');
    load(fullfile(PathName2,FileName2));
    
    pocet_pacientu = 140;
    pacient = sort(randperm(pocet_pacientu));
    ID_pacienta = []; druh_zaznamu = []; zarazeni = []; ID_sig_pac = []; 
    strana =[]; misto = [];
    for index=1:size(db_avg,2) 
        ID_pacienta(index) = db_avg{index}.ID;
        druh_zaznamu(index,:) = db_avg{index}.Druh_zazn; 
        zarazeni(index,:) = db_avg{index}.Zarazeni;
        ID_sig_pac(index,:) = db_avg{index}.Cislo_zaznamu;
        strana(index,:) = db_avg{index}.Strana;
        misto(index,:) = db_avg{index}.Misto;
    end
    druh_zaznamu = char(druh_zaznamu);
    strana = char(strana);
    misto = char(misto);
    pacient = pacient(1:pocet_pacientu); %ID pacienta ze seznamu
    index3 = 1;
    ID_sig_PR=[];
    for index1 = 1:pocet_pacientu
        index_zaznamu = find(ID_pacienta==pacient(index1));
        for index2 = 1:length(index_zaznamu)
            if strcmpi(druh_zaznamu(index_zaznamu(index2),:),'PR')
                ID_sig_PR(index3,1) = index1;
                ID_sig_PR(index3,2) = ID_sig_pac(index_zaznamu(index2));
                ID_sig_PR(index3,4) = zarazeni(index_zaznamu(index2));
                if strcmpi(strana(index_zaznamu(index2),:),'DX ')
                    ID_sig_PR(index3,3) = 1; %strana DX = 1
                elseif strcmpi(strana(index_zaznamu(index2),:),'SIN')
                    ID_sig_PR(index3,3) = 2; %strana SIN = 2
                end
                index3 = index3+1;
            end
        end
    end
    %% Vytvoreni samotneho seznamu vst_matice
    save(fullfile(PathName2,FileName2),'-append','ID_sig_PR');

    vst_matice=[];
    for index1 = 1:size(ID_sig_PR,1)
        vst_matice(index1,:) = db_avg_cisl(ID_sig_PR(index1,2),:);
    end

    % Vynechani zaznamu podle grantoveho projektu 
    index3=0; vyradit=[];
    for strana=1:2
        switch strana
            case 1 %1...prava strana DX
                pacient_vyrad = [60,61:65,84,91,94,98,107,108,111,114,128,131,134:140];
            case 2 %2...leva strana SIN
                pacient_vyrad = [60,61:65,84,91,94,98,107,108,118,124,134:140];
        end
        for index=1:length(pacient_vyrad)
            vyrad=find(ID_sig_PR(:,1)==pacient_vyrad(index));
            for index2=1:length(vyrad)
                if ID_sig_PR(vyrad(index2),1)==pacient_vyrad(index)... 
                    && ID_sig_PR(vyrad(index2),3)==strana
                    index3=index3+1;
                    vyradit(index3,1)=vyrad(index2);

                end 
            end
        end
    end
    vst_matice(vyradit,:)=[];
    ID_sig_PR(vyradit,:)=[];
    %kompletni vstupni matice zaznamu PR
    ID_sig_PR_komplet=ID_sig_PR;

%% Vynechani radku (pacientu) s nekompletnimi daty, skoumany nulove hodnoty
    % fmax,A,T0,PI 
    index2 =1;
    index_nekompl_dat=[];
    for index1 = 1:length(vst_matice)
         if vst_matice(index1,1) == 0 || vst_matice(index1,3) == 0 || vst_matice(index1,5) == 0 || vst_matice(index1,6) == 0
             index_nekompl_dat(index2,1) = index1;
             index2 = index2 +1;
         end
    end
    %vyrazeni nekompletnich zaznamu ze vst_matice (aby se s nimi nepocitalo)
    if index2 > 1
        vyrazeni = ID_sig_PR(index_nekompl_dat,2);
        vst_matice(index_nekompl_dat,:) = [];
        ID_sig_PR(index_nekompl_dat,:) = [];
    end
    vst_matice(81,:) = []; ID_sig_PR(81,:) = [];
    pocet_vyrazenych = length(vyradit)+length(index_nekompl_dat); %pocet vyrazenych zaznamu 
    %ulozeni vyrazenych pacientu do promenych, pro pozdejsi mozne zobrazeni a
    %kontrolu
    nekompl_cisl = [];
    for i=1:length(index_nekompl_dat)
        nekompl_cisl(i,:) = db_avg_cisl(vyrazeni(i),:);
    end
    ID_sig_PR_nekompletni = vyrazeni;
    mat_AVG_nekomplet.nekompl_cisl = nekompl_cisl;
    mat_AVG_nekomplet.ID_sig_PR_nekompletni = ID_sig_PR_nekompletni;

%% vybrani zaznamu pouze obsahujici AF AP ATP
    vst_mat = []; ID_vst_mat = []; zaznam = 0;
    for index1 = 1:length(ID_sig_PR)
        switch misto(index1,:)
            case 'AF '
                zaznam = zaznam+1;
                vst_mat(zaznam,:) = vst_matice(index1,:);
                ID_vst_mat(zaznam,:) = ID_sig_PR(index1,:);
                %disp(db_avg_znak(ID_test_sig_pac(index1,2),:));
            case 'AP '
                zaznam = zaznam+1;
                vst_mat(zaznam,:) = vst_matice(index1,:);
                ID_vst_mat(zaznam,:) = ID_sig_PR(index1,:);
                %disp(db_avg_znak(ID_test_mat_AP(zaznam2),:));
            case 'ATP'
                zaznam = zaznam+1;
                vst_mat(zaznam,:) = vst_matice(index1,:);
                ID_vst_mat(zaznam,:) = ID_sig_PR(index1,:);
                %disp(db_avg_znak(ID_test_mat_ATP(zaznam3),:));
        end
    end
    
    mat_AVG.vst_matice = vst_mat; clear vst_mat;
    mat_AVG.ID_sig_pac = ID_vst_mat; clear ID_vst_mat;

%% Rozdeleni do jednotlivych vst matic podle mista mereni
    zaznam1=0; zaznam2=0; zaznam3=0;
    for index1 = 1:length(vst_matice)
        switch misto(ID_sig_PR(index1,2),:)
            case 'AF '
                zaznam1 = zaznam1+1;
                mat_AVG.AF(zaznam1,:) = vst_matice(index1,:);
                mat_AVG.ID_AF(zaznam1,:) = ID_sig_PR(index1,:);
                %disp(db_avg_znak(ID_test_sig_pac(index1,2),:));
            case 'AP '
                zaznam2 = zaznam2+1;
                mat_AVG.AP(zaznam2,:) = vst_matice(index1,:);
                mat_AVG.ID_AP(zaznam2,:) = ID_sig_PR(index1,:);
                %disp(db_avg_znak(ID_test_mat_AP(zaznam2),:));
            case 'ATP'
                zaznam3 = zaznam3+1;
                mat_AVG.ATP(zaznam3,:) = vst_matice(index1,:);
                mat_AVG.ID_ATP(zaznam3,:) = ID_sig_PR(index1,:);
                %disp(db_avg_znak(ID_test_mat_ATP(zaznam3),:));
        end
    end

%% Vypis a ulozeni dat
    fprintf('\n');
    fprintf('Z kompletniho poctu mereni %.0f bylo vynechano \n',size(ID_sig_pac,1));
    fprintf('%.0f zaznamu s nekompletnimi daty.\n',pocet_vyrazenych);
    fprintf('Pro misto mereni  AF obsahuje vstupni mnozina %3.0f zaznamu a %2.0f parametru.\n',size(mat_AVG.AF));
    fprintf('Pro misto mereni  AP obsahuje vstupni mnozina %3.0f zaznamu a %2.0f parametru.\n',size(mat_AVG.AP));
    fprintf('Pro misto mereni ATP obsahuje vstupni mnozina %3.0f zaznamu a %2.0f parametru.\n',size(mat_AVG.ATP));
%     fprintf('Pro misto mereni LEG obsahuje vstupni mnozina %3.0f zaznamu a %2.0f parametru.\n',size(mat_LEG));
    fprintf('\n');

    save(fullfile(PathName2,FileName3),'mat_AVG_nekomplet','mat_AVG');
    save(('path.mat'),'-append','FileName3');
fprintf('Vytvoren soubor "...%s".\n',fullfile(PathName2,FileName3));

else
    fprintf('Nenalezen soubor databaze "...%s" ... program bude ukoncen.\n',fullfile(PathName2,FileName2));
    
end %koncovy end celeho programu, rozhodovani estli je nalezen soubor databaze

