%Példa gráfok:
%[G] = RegularNetwork(1,0, 50, 2, 0.0); %0; 0.2; 0.7; 1
%[G] = ERmodel(1,1, 50, 0, 50);
%[G] = BAmodel(1,1, 50, 3, 1, 3);

%%
% Gráfrajzoló subrutin. Elhelyezi a gráf nv csúcsát egy körvonal mentén
% Created by Pablo Blinder. blinderp@bgu.ac.il
% Updated by David Tekan. tekda@digitus.itk.ppke.hu
center=[0,0];
theta=linspace(0,2*pi,G.nv+1);
rho=ones(1,G.nv+1);
[X,Y] = pol2cart(theta',rho');
X=X+center(1);
Y=Y+center(2);
x=(X(1:end-1)*10)';
y=(Y(1:end-1)*10)';
%
h = nan(G.nv,1);

figure;
[XX,YY]=gplot(G.Adj,[x' y'],'k-');
i=~isnan(XX);
XX=XX(i);YY=YY(i);
XX=reshape(XX,2,length(XX)/2);
YY=reshape(YY,2,length(YY)/2);
hLines=line(XX,YY);
set(hLines,'color','k');

hold on;
kv=full(diag(G.Adj*G.Adj));
kvGroups=unique(setdiff(kv,0));
map=jet(max(kvGroups));


for i=1:G.nv
    h(i,:)=plot(x(i),y(i),'ko');
end


    for i=1:G.nv
       text(x(i)+0.1*x(i),y(i)+0.1*y(i),num2str(i));
    end

set(h,'LineWidth',1,...
    'MarkerEdgeColor','k',...
    'MarkerSize',10);
set(gca,'Visible','Off','YDir','reverse');
colormap(map);
hc=colorbar;

set(hc,'FontSize',8,'FontW','Demi')
set(hc,'Visible','off')
set(gcf,'Color','w')

%%
%SIR modell véletlen gráfon:
%paraméterek:
itnum=50;
infectionrate=1;%0.4; %1;
kezdetifert=0.1;
healingrate=0.2;%0.2; %1;
immunloss_rate=0.2; %1;% 0.2;% 0;%
csucs=zeros(1,G.nv); %itt tárolom a csúcsok állapotát: 0 egészséges=fertõzhetõ, 1 fertõzött, 2 felgyógyult immunis
fert_num=zeros(1, itnum+1); %fertõzöttek aránya lépésenként

kezd=rand(1,G.nv);
fert=find(kezd<=kezdetifert); %alapból ennyi fertõzött csúccsal kezdünk
csucs(fert)=1;
hfert=h(fert); %fertõzött csúcsok koordinátái

egeszs=find(csucs==0); %nem fertõzöttek
hegeszs=h(egeszs);  %egészséges csúcsok koordinátái

fert_num(1)=length(fert)/G.nv; %fertõzöttek aránya az összes csúcshoz képest
%a csúcsok színezése az állapotuk szerint: fert: piros, egészs: zöld, immunis: kék
set(hegeszs,'MarkerFaceColor',[0 1 0]); 
set(hfert,'MarkerFaceColor',[1 0 0]);
waitforbuttonpress;

for i=1:itnum %a járvány lépései

%betegszik biz valséggel:
%fertõzöttek szomszédai (1-esek szomszédsági mx rájuk vonatkozó soraiban)
%adott valséggel fertõzõdnek (ha egy hozzájuk rendelt random szám elég nagy), 
%ezután kikeresem az újonnan fertözött csúcsokat (a szomszédsági mx melyik oszlopaiban van valami)
ujfert=; 

%csucs(ujfert)=1; %csúcs frissítése
csucs(..)=1; %csúcs fertõzött lesz az ujfert csúcsok közül, ha nem volt immunis %%%%%%
csucs(..)=0; %bizonyos valséggel immunitás vesztés, fertõzhetõ megint %%%%%%%

%gyógyul biz valséggel:
gyogyul=;
csucs(gyogyul)=0;%0%2 %(gyógyult csúcs fertõzhetõ vagy immunis lesz SIR vagy SIS modell) %%%%

%frissít állapotokat, csúcs koordinátákat:
fert=find(csucs==1);
hfert=h(fert);
egeszs=find(csucs==0);
hegeszs=h(egeszs);
hgyogyul=h(gyogyul);%%%%

fert_num(i+1)=length(fert)/G.nv; %fertõzöttek aránya
set(hegeszs,'MarkerFaceColor',[0 1 0]); %csúcsok színezése
set(hfert,'MarkerFaceColor',[1 0 0]);
set(hgyogyul,'MarkerFaceColor',[0 0 1]); %%%%%

%waitforbuttonpress;
pause(0.05)
end

%fertõzöttek arányának ábrázolása
figure;
plot(fert_num);
ylim([0 1]);
xlim([1 length(fert_num)]);
xlabel('lépés');
ylabel('fertõzött');

atlag_fert=mean(fert_num(itnum/2:end)) %átlag fertõzöttségi szint a járvány 2. felében (tranziensek ne számítsanak)