% Skript popisuje ako spustit jednotlive simulacie. Vysvetluje vstupy a vystupy a pod.
% Po vypocitanej simulacii sa vykresli signal
% Na zaciatku je potrebne nacitat subory 
% Subory obsahuju 5000 simulovanych elektronov

load('ElectronH1C1.mat') % Electron  - simulacia 350 nm H1C1 vrstvy
load('ElectronPSS.mat')  % Electron2 - simulacia 350 nm PSS vrstvy

%% Simulacia na hrane 
  [Electron_LAYER]  = MC_layer(Electron, 150,75,1,0,0.00076, 1, 1,1,1,0);
% [Electron_LAYER]  = MC_layer(Electron, T,L,dL,focus,TH_max, Probe_diam, TH_calc,Probe_calc,A,ML)
%   T - Tloustka [nm]
%   L - Vzdialenost ku hrane  [nm]
%   dL - krok pri posune svazku  [nm]
%   focus - hlbka ostrosti[mn]
%   TH_max - maximalny aperturovy uhol [rad] 
%   Probe_diam - prumer svazku [nm]
%   TH_calc - sposob vypoctu - funguje len TH_calc == 1
%   Probe_calc - sposob vypoctu - funguje len Probe_calc == 1
%   A: 1 - v kazdom kroku generuje novy posun a uhol
%      0 - posun a naklon generuje na zaciatku pre vsetky elektrony rovnaky

%% Simulacia na hrane zlozenej z viac vrstiev rozneho materialu
% - nacitanie suborov len pre ilustraciu
% - Je potrebne spustit celu tuto cast

[Electron_MULTILAYER] = MC_multilayer([100,100],Electron,Electron2);
[Electron_MULTILAYER]  = MC_layer(Electron_MULTILAYER, 200,25,1,0,0.076, 1, 1,1,1,1);

% [Electron_LAYER]  = MC_layer(Electron, T,L,dL,focus,TH_max, Probe_diam, TH_calc,Probe_calc,A)
%   T - Tloustka [nm]
%   L - Vzdialenost ku hrane  [nm]
%   dL - krok  [nm]
%   focus [mn]
%   TH_max - maximalny aperturovy uhol [mrad]
%   Probe_diam - prumer svazku [nm]
%   TH_calc - sposob vypoctu - funguje len 1
%   Probe_calc - sposob vypoctu - funguje len 1
%   A: 1 - v kazdom kroku generuje novy posun a uhol
%      0 - generuje na zaciatku a potom uz nie

% [Electron_MULTILAYER] = MC_multilayer(Thicknesses,Electron1,Electron2);
% Electron1 simulace na prvnim materialu
% Electron2 simulace na druhem materialu



%% Simulacia na guli
[Electron_NEW_BS] = MC_sphere(Electron, 0.076, 1, 1,1,1,0,150,1,0);
% [Electron_NEW_BS] = MC_sphere(Electron, TH_max, Probe_diam, TH_calc,Probe_calc,A,focus,R,dR,MultiCapsle)
     
%     R - polomer [nm]  musi byt <= tloustke simulovanej vrstvy v monca2_1
%     dR: >0 - o kolik sa bude posuvat svazkem k okraji 
%          0 - nebude sa posuvat svazkem k okraji
%     MultiCapsle:  1 - ide o simulaciu na capsli 
%                   0 - nejde o simulaciu na capsli
%     focus      - hlbka ostrosti[nm]
%     TH_max     - maximalny aperturovy uhol [mrad]
%     Probe_diam - prumer svazku [nm]
%     TH_calc    - sposob vypoctu - funguje len 1
%     Probe_calc - sposob vypoctu - funguje len 1
%     A: 1 - v kazdom kroku generuje novy posun a uhol
%        0 - generuje na zaciatku a potom uz nie  
%% Simulacia na dutej kapsle
% predchadza jej simulacia na guli! 
[Electron_NEW_BS] = MC_sphere(Electron, 0.076, 1, 1,1,1,0,150,1,0);
[Electron_NEW_BS_CAPS] = MC_capsule_fromSphere(Electron_NEW_BS, 150,100);
% [Electron_NEW_BS_CAPS] = MC_capsule_fromSphere(Electron_NEW_BS, R,R2)
% R = polomer vnejsi vrstvy
% R2 = polomer vnitrni vrstvy
% Electron_NEW_BS = Vysledek simulace na kouli


%% Simulacia na plnej kapsli
% simulacie na dvoch materialoch + z prveho materialu simulacia na guli

[Electron_FilledCapsle] = MC_FilledCapsle(Electron,Electron2,150,100,'N',0.076,1);
% [Electron_FilledCapsle] = MC_FilledCapsle(Electron1,Electron2,R1,R2,Gula,TH_max, Probe_diam)

% R1 = polomer vnejsi vrstvy
% R2 = polomer vnitrni vrstvy
%  'A','N' = bola provedena simulace na kouli ? 
%   TH_max - maximalny aperturovy uhol
%   Probe_diam - prumer svazku [nm]



%% start Monte Carlo simulace (samotna simulace)
% Simulacia nieje sucastou prilohy. Program je dielom veduceho prace, ktory
% si nezela zverejnovat tuto funkciu. 

monca2_1(sEquation,sDensity,Energy,maxT,Theta0,probeRad,NMAX,TypeMCsimul)
% sEquation - chem. vzorec materialu
% sDensity - hustota
% Energy - energia primarneho zvazku
% maxT - maximalna tloustka materialu
% Theta0 - naklon primarneho zvazku
% probeRad - prumer zvazku
% NMAX - pocet simulovanych elektronov
% TypeMCsimul - jeden z dvoch typov vypoctu ubytku energie

% -Priklad spustenia pre uhlik
% monca2_1('C',2,30,500,0.76,1,100000,'A') %priklad pro uhlik



%% Vytvori jeden .mat subor obsahujuci parametre rozptylov pre dalsiu analyzu tvarov
% v pripade absencie predchadzajuceho skriptu nema vyznam
ElectronFullFile = mc_create_ElectronFile(Fname,Thick);
% Z ulozenych suborov vytvori .mat subor obsahujuci suradnice, uhly a pod.
% Fname - meno suboru 
% Thick - Tloustka [nm]
% vyskoci dialog - vybrat vystup monca2_1


%% analyza dat
% v pripade absencie monca2_1 vyznam
[t,f,BSE,IHIST]=get_mc1n_file;
% je potreba zvolit soubor ulozeny predchozi procedurou
% pak se to pta na parametry, je potreba zadat
% L, cisloA, cisloB
%     kde L (jen pismeno L)
%     cisloA je max. tloustka (musi byt mnsi nez max tloustka v predchozi funkci)
%     cisloB je krok v tloustce (zlomek cislaA)

% Rozseka vrstvu T na useky dT a z nich vytiahne info o elektronoch - 
% BSE, Scattered, Unscattered


%vykresli to nejake grafy, ale dulezite je pak toto:
% plot(t,f)
% figure;plot(t,BSE); title('Fraction of Backscattered Electrons'); xlabel('No. of impinging electrons');ylabel('Fraction of BSE'); 
% figure(1); title('Fraction of scattered electrons')

%% Ostatne 
% Nasledujuce funkcie su pouzite v simulacnom engine monca2_1.m. V ramci DP nebudu zverejnene 
% newcor.m
% samplpar.m
% sigelt.m
% sigin1.m
% sigin2.m 
% sigint.m 