clc;
clear;
% nastavenie vypisovania na 4 cisla za desatinnov ciarkov
format long;
% deklaracia premenných

% Rozlíšenie sondy
Inkrement_tolerancie=0.0005;
% Index potencialu meracieho systému je pre nasu sustavu stanoveny na
% hodnotu 1,33 podla normy VDI5
Cg=1.33;

% Vytvorenie vektoru obsahujúceho rôzne tvary grafu
Tvar_grafu={':bs','--go',':rx','-c*',':mp','-yd',':kv','-bv',':gd','-rp',':cx','-m*',':yo','-ks'};
%Vyzvanie používateľa k zadaniu cesty k pracovnej zložke
cesta=input('Zadajte cestu k zložke s excelovskými formulármi nameraných hodnôt:  ','s');
% Zmenenie cesty ku Current folder
cesta_hodnot= dir(cesta);
% Odstranenie bodiek pri vektore názvov excelov
cesta_hodnot(ismember( {cesta_hodnot.name}, {'.', '..'})) = [];
% Vytvorenie vektoru s názvami jednotlivých súborov(bude použíté pre legendy grafu)
Vektor_nazvov_excelu={cesta_hodnot.name};
% V ďalších dvoch riadkoch odstránim z predchádzajúceho vektoru koncovky
% xlsx. Novovzniknutý vektoru bude slúžiť na prehladnejšie vypísanie
% legiend do grafu
Nechcena_koncovka='.xlsx';
Vektor_nazvov_excelu_bez_pripon=strrep(Vektor_nazvov_excelu,Nechcena_koncovka,'');
disp('Počet súborov vo vybranej zložke je: ')
disp(length(Vektor_nazvov_excelu))
Pocet_excelovskych_suborov=length(Vektor_nazvov_excelu);
% Presmerovanie cesty zdrojoveho suboru
path(path,cesta);
% Získanie vektoru popisujúceho počty etalónov v jednotlivých pokusoch(bude dôležité neskôr)
for u=1:Pocet_excelovskych_suborov
      [data, textdata]=xlsread(char(Vektor_nazvov_excelu(u)));
      Matica_hodnot=data;
      Vektor_poctov_etalonov(u)=length(Matica_hodnot(1,:))-1;
      
end
% Vytvorenie nulových matíc, do ktorých budeme zapisovať hodnoty tolerancií,
% smerodajných odchyliek a aritmetických priemerov stlcov
% Matica je vytvorená tak, aby mala rozmery vyhovojúce akurát súboru s
% najväčším možným počtom etalónov
TOL=zeros(Pocet_excelovskych_suborov,max(Vektor_poctov_etalonov));
Smerodatne_odchylky=zeros(Pocet_excelovskych_suborov,max(Vektor_poctov_etalonov));
Matica_aritmetickych_priemerov_stlpcov=zeros(Pocet_excelovskych_suborov,max(Vektor_poctov_etalonov));
%Matica_hodnot=[0];

for o=1:Pocet_excelovskych_suborov
    [data, textdata]=xlsread (char(Vektor_nazvov_excelu(o)));
    Matica_hodnot=data;
    % Zistím počet riadkov a stĺpcov v danom meraní.
    % V našom prípade počet stĺpcov reprezentuje počet použitých etalónov v
    % pokuse je vo forme vektoru
    Pocet_stlpcov(o)=length(Matica_hodnot(1,:))-1;
    %Pocet riadkov reprezentuje pocet merani na jednom etalone
    Pocet_riadkov=length(Matica_hodnot(:,1))-1;
    % Vytvorenie upozornenia na nedostatočný počet meraní a etalónov podľa
    % danej normy
    if Pocet_stlpcov(o)<3 
        disp('V pokuse ')
        disp(char(Vektor_nazvov_excelu(o)))
        disp('bol podľa normy VDA 5 zmeraný nedostatočný počet etalónov')
    end
    if Pocet_riadkov<10 
        disp('V pokuse ')
        disp(char(Vektor_nazvov_excelu(o)))
        disp('bol podľa normy VDI 5 zmeraný nedostatočný počet meraní')
    end
    % Pre neskoršie aplikácie je treba vytvoriť vektor dĺžok etalónov,
    % ktorý poslúži pri finálnom vyhodnocovaní
    for s=1:(Pocet_stlpcov(o))  
    Vektor_dlzok_etalonov(s)=Matica_hodnot(1,s+1);
    end
    %Vytvojenie prázdneho vektora o správnej veľkosti, do ktoreho budem
    % zapisovať súčet stĺpcov
    Sucet_stlpca=zeros(1,Pocet_stlpcov(o));
    for i=2:(Pocet_stlpcov(o)+1);
        for j=2:(Pocet_riadkov+1);
        Sucet_stlpca(i-1)=Sucet_stlpca(i-1)+Matica_hodnot(j,i);
        end
    end
    %Vytvojenie vektoru aritmetických priemerov stĺpcov
    for i=1:Vektor_poctov_etalonov(o)
    Aritmeticke_priemery_stlpcov(o,i)=Sucet_stlpca(i)/Pocet_riadkov;
    end
    % Vytvorenie pomocnej premennej na výpočet smerodajných odchyliek
    Suma_k_odchylke=zeros(1,Pocet_stlpcov(o));
for L=2:(Pocet_stlpcov(o)+1);
    for m=2:(Pocet_riadkov+1);
        %Vypocet sumy rozptylu
    Suma_k_odchylke(L-1)=Suma_k_odchylke(L-1)+(Aritmeticke_priemery_stlpcov(o,L-1)-Matica_hodnot(m,L))^2;
   end
end
% Výpočet samotnej smerodajnej odchýlky
for L=1:Pocet_stlpcov(o)
Smerodatne_odchylky(o,L)=sqrt((1/(Pocet_riadkov-1))*Suma_k_odchylke(L));
end

TOL1(o,:)=(4*Cg*Smerodatne_odchylky(o,:))/0.2;
% Vytvorenie matice tolerancii, kde počet riadkov reprezentujú počet konfigurácii
% stroja a počet stĺpcov reprezentujú počty etalónov.
for p=1:Pocet_stlpcov(o)
TOL(o,p)=TOL1(o,p);    
end
% Vytvorenie vektoru aktuálnych tolerancií potrebných pre vykreslenie grafu
% podľa normy VDI 5.
for x=1:Pocet_stlpcov(o);
    Systematicke_odchylky(o,x)=abs(Matica_hodnot(1,x+1)-Aritmeticke_priemery_stlpcov(o,x));
    Cgk(o,x)=((0.1*TOL(o,x))-(Systematicke_odchylky(o,x)))/(2*Smerodatne_odchylky(o,x));
while (((0.1*TOL(o,x))-(Systematicke_odchylky(o,x)))/(2*Smerodatne_odchylky(o,x)))<1.33
    TOL(o,x)=(TOL(o,x)+Inkrement_tolerancie);
end
% Zapísanie tolerancoí do matice
 for t=1:Pocet_stlpcov(o)
       Aktualne_tolerancie(t)=TOL(o,t); 
   end    
end    
% Vykreslenie grafu
plot(Vektor_dlzok_etalonov,Aktualne_tolerancie,Tvar_grafu{o},'linewidth',2.6)
% Nastavenie veľkosti popisiek osí
set(gca,'fontsize',24);
% Nastavenie popiskov osí a veľkosti popisiek
xlabel('Dĺžka etalónov[mm]','fontsize',28)
ylabel('Hodnota tolerancie[mm]','fontsize',28)
% Nastavenie legiend - extrahovanie legiend z názvov excelu
legendy{o}=sprintf(char(Vektor_nazvov_excelu_bez_pripon(o)));
hold on;
% Nastavenie veľkostí legiend
hold on
% Niektoré parametre je treba na konci cyklu vynulovať
Aktualne_tolerancie=[0];
Vektor_dlzok_etalonov=[0];
Suma_k_odchylke=[0];
Sucet_stlpca=[0];
end
legend(legendy,'Location','northoutside','NumColumns',1,'FontSize',24)
hold off
% Kontrolné vypísanie matíc dôležitých údajov merania
TOL
TOL1
Cgk
Systematicke_odchylky
Aritmeticke_priemery_stlpcov
Smerodatne_odchylky