#! /usr/bin/octave-3.2.3 -qf

arg_list = argv ();
if (size(arg_list)(1)!=3)
  printf("Usage: gossip m-files-dir data-file-dir out-dir\n");
  exit(0);
endif
dir = arg_list{2};
addpath(arg_list{1});
out = arg_list{3};

printf("computing one round gossip\n");
load(strcat(dir,"/graph.mat"),"A");
load(strcat(dir,"/gap.mat"),"gap");
load(strcat(dir,"/data_TOL.mat"),"Vtol");
load(strcat(dir,"/data_rank.mat"),"Vrank"); 
i=0;
Gtol=[];
Grank=[];
for k=[4:4:120]
  i=i+1;
  printf("k= %d\n",k);
  Gtol = [Gtol, one_round_gossip_vote(A,Vtol(:,i))];
  Grank = [Grank, one_round_gossip_vote(A,Vrank(:,i))];
endfor

printf("process gossip data\n");

e=log(10^-6);
g=gap;
l=1-g;
t=e/log(l);

for z=1:2
  if (z==1)
    G=Gtol;
    printf("TOL\n");
  elseif (z==2)
    G=Grank;
    printf("rank\n");
  endif

  L=1-G;
  T=[];
  for i=1:size(L)(1)
    for j=1:size(L)(2)
      T(i,j)=e/log(L(i,j));
    endfor
    #T(:,i)=e./log(L(:,i));
  endfor

  #save("check.dat","T");

  i=0;
  RelG=[];
  RelL=[];
  RelT=[];
  AbsG=[];
  AbsL=[];
  AbsT=[];

  for k1=[4:4:120]
    printf("k1=%d\n",k1);
    i=i+1;
    ##gap
    data=G(:,i);
    err=abs(g-data);
    q=quantile(err, [0.1 0.5 0.9]);
    q=[k1 q'];
    AbsG=[AbsG; q];
    err=(abs(data-g)/g)*100;
    q=quantile(err, [0.1 0.5 0.9]);
    q=[k1 q'];
    RelG=[RelG; q];
    ##lambda
   data=L(:,i);
    err=abs(l-data);
    q=quantile(err, [0.1 0.5 0.9]);
    q=[k1 q'];
    AbsL=[AbsL; q];
    err=(abs(data-l)/l)*100;
    q=quantile(err, [0.1 0.5 0.9]);
    q=[k1 q'];
    RelL=[RelL; q];
    ##tau
    data=T(:,i);
    err=abs(t-data);
    q=quantile(err, [0.1 0.5 0.9]);
    q=[k1 q'];
    AbsT=[AbsT; q];
    err=(abs(data-t)/t)*100;
    q=quantile(err, [0.1 0.5 0.9]);
    q=[k1 q'];
    RelT=[RelT; q];
  endfor

  if (z==1)
    printf("save TOL\n");
    save(strcat(dir,"/gossip_rel_gap_TOL.mat"),"RelG");
    save(strcat(dir,"/gossip_rel_lambda_TOL.mat"),"RelL");
    save(strcat(dir,"/gossip_rel_tau_TOL.mat"),"RelT");
    save(strcat(dir,"/gossip_abs_gap_TOL.mat"),"AbsG");
    save(strcat(dir,"/gossip_abs_lambda_TOL.mat"),"AbsL");
    save(strcat(dir,"/gossip_abs_tau_TOL.mat"),"AbsT");
  elseif (z==2)
    printf("save rank\n");
    save(strcat(dir,"/gossip_rel_gap_rank.mat"),"RelG");
    save(strcat(dir,"/gossip_rel_lambda_rank.mat"),"RelL");
    save(strcat(dir,"/gossip_rel_tau_rank.mat"),"RelT");
    save(strcat(dir,"/gossip_abs_gap_rank.mat"),"AbsG");
    save(strcat(dir,"/gossip_abs_lambda_rank.mat"),"AbsL");
    save(strcat(dir,"/gossip_abs_tau_rank.mat"),"AbsT");
  endif
endfor
 


