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

arg_list = argv ();
if (size(arg_list)(1)!=2)
  printf("Usage: process_compare_system_order_results [m-files-dir data-dir]\n");
  exit(0);
endif

dir = arg_list{2};
addpath(arg_list{1});

load(strcat(dir,"gaps.mat"),"gaps");
g=gaps(2);
e=log(10^-6);
l=1-g;
t=e/log(l);


GT = fopen(strcat(dir,"/rel_gap_gossip_TOL_Map.dat"),"w");
LT = fopen(strcat(dir,"/rel_lambda_gossip_TOL_Map.dat"),"w");
TT = fopen(strcat(dir,"/rel_tau_gossip_TOL_Map.dat"),"w");
GR = fopen(strcat(dir,"/rel_gap_gossip_rank_Map.dat"),"w");
LR = fopen(strcat(dir,"/rel_lambda_gossip_rank_Map.dat"),"w");
TR = fopen(strcat(dir,"/rel_tau_gossip_rank_Map.dat"),"w");
GTV = fopen(strcat(dir,"/rel_gap_gossip_var_TOL_Map.dat"),"w");
LTV = fopen(strcat(dir,"/rel_lambda_gossip_var_TOL_Map.dat"),"w");
TTV = fopen(strcat(dir,"/rel_tau_gossip_var_TOL_Map.dat"),"w");
GRV = fopen(strcat(dir,"/rel_gap_gossip_var_rank_Map.dat"),"w");
LRV = fopen(strcat(dir,"/rel_lambda_gossip_var_rank_Map.dat"),"w");
TRV = fopen(strcat(dir,"/rel_tau_gossip_var_rank_Map.dat"),"w");

fdisp(GT, "## X Y Z");
fdisp(LT, "## X Y Z");
fdisp(TT, "## X Y Z");
fdisp(GR, "## X Y Z");
fdisp(LR, "## X Y Z");
fdisp(TR, "## X Y Z");
fdisp(GTV, "## X Y Z");
fdisp(LTV, "## X Y Z");
fdisp(TTV, "## X Y Z");
fdisp(GRV, "## X Y Z");
fdisp(LRV, "## X Y Z");
fdisp(TRV, "## X Y Z");

GT0=[];
LT0=[];
TT0=[];
GR0=[];
LR0=[];
TR0=[];
GTV0=[];
LTV0=[];
TTV0=[];
GRV0=[];
LRV0=[];
TRV0=[];



r=0;
variance=0;

for k1=4:4:120
  r=r+1;
  load(strcat(dir,"k1-gossip-",num2str(k1),"-TOL.mat"),"Gtol");
  load(strcat(dir,"k1-gossip-",num2str(k1),"-rank.mat"),"Grank");
  
  printf("TOL\n");
 
  G=Gtol;
  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
  endfor
  
  c=0; 
  for k2=0:4:120-k1
    printf("k1=%d k2=%d\n",k1,k2);
    c=c+1;
    i=0;
    if c==1
      for i=1:r-1
        out=[i*4 k1 GT0(i)];
        fdisp(GT,out);
        out=[i*4 k1 LT0(i)];
        fdisp(LT,out);
        out=[i*4 k1 TT0(i)];
        fdisp(TT,out);
        out=[i*4 k1 GTV0(i)];
        fdisp(GTV,out);
        out=[i*4 k1 LTV0(i)];
        fdisp(LTV,out);
        out=[i*4 k1 TTV0(i)];
        fdisp(TTV,out);
      endfor
    endif
    #gap
    data=G(:,c);
    err=abs(data-g);
    q=quantile(err, [0.1 0.5 0.9]);
    rel=(q(2)/g)*100;
    out=[(r-1+c)*4 k1 rel];
    fdisp(GT,out);
    if c==1
      GT0=[GT0 rel];
    endif
    variance = (abs(q(1)-q(3))/g)*100;
    out=[(r-1+c)*4 k1 variance];
    fdisp(GTV,out);
    if c==1
      GTV0=[GTV0 variance];
    endif
    #lambda
    data=L(:,c);
    err=abs(data-l);
    q=quantile(err, [0.1 0.5 0.9]);
    rel = (q(2)/l)*100;
    out=[(r-1+c)*4 k1 rel];
    fdisp(LT,out);
    if c==1
      LT0=[LT0 rel];
    endif
    variance = (abs(q(1)-q(3))/l)*100;
    out=[(r-1+c)*4 k1 variance];
    fdisp(LTV,out);
    if c==1
      LTV0=[LTV0 variance];
    endif
    #tau
    data=T(:,c);
    err=abs(data-t);
    q=quantile(err, [0.1 0.5 0.9]);
    rel = (q(2)/t)*100;
    out=[(r-1+c)*4 k1 rel];
    fdisp(TT,out);
    if c==1
      TT0=[TT0 rel];
    endif
    variance = (abs(q(1)-q(3))/t)*100;
    out=[(r-1+c)*4 k1 variance];
    fdisp(TTV,out);
    if c==1
      TTV0=[TTV0 variance];
    endif

  endfor 

  printf("rank\n");

  G=Grank;
  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
  endfor
  
  c=0;
  for k2=0:4:120-k1
    printf("k1=%d k2=%d\n",k1,k2);
    c=c+1;
    i=0;
    if c==1
      for i=1:r-1
        out=[i*4 k1 GR0(i)];
        fdisp(GR,out);
        out=[i*4 k1 LR0(i)];
        fdisp(LR,out);
        out=[i*4 k1 TR0(i)];
        fdisp(TR,out);
        out=[i*4 k1 GRV0(i)];
        fdisp(GRV,out);
        out=[i*4 k1 LRV0(i)];
        fdisp(LRV,out);
        out=[i*4 k1 TRV0(i)];
        fdisp(TRV,out);
      endfor
    endif
    #gap
    data=G(:,c);
    err=abs(data-g);
    q=quantile(err, [0.1 0.5 0.9]);
    rel=(q(2)/g)*100;
    out=[(r-1+c)*4 k1 rel];
    fdisp(GR,out);
    if c==1
      GR0=[GR0 rel];
    endif
    variance = (abs(q(1)-q(3))/g)*100;
    out=[(r-1+c)*4 k1 variance];
    fdisp(GRV,out);
    if c==1
      GRV0=[GRV0 variance];
    endif
    #lambda
    data=L(:,c);
    err=abs(data-l);
    q=quantile(err, [0.1 0.5 0.9]);
    rel=(q(2)/l)*100;
    out=[(r-1+c)*4 k1 rel];
    fdisp(LR,out);
    if c==1
      LR0=[LR0 rel];
    endif
    variance = (abs(q(1)-q(3))/l)*100;
    out=[(r-1+c)*4 k1 variance];
    fdisp(LRV,out);
    if c==1
      LRV0=[LRV0 variance];
    endif
    #tau
    data=T(:,c);
    err=abs(data-t);
    q=quantile(err, [0.1 0.5 0.9]);
    rel = (q(2)/t)*100;
    out=[(r-1+c)*4 k1 rel];
    fdisp(TR,out);
    if c==1
      TR0=[TR0 rel];
    endif
    variance = (abs(q(1)-q(3))/t)*100;
    out=[(r-1+c)*4 k1 variance];
    fdisp(TRV,out);
    if c==1
      TRV0=[TRV0 variance];
    endif
  endfor
fdisp(GT,"");
fdisp(LT,"");
fdisp(TT,"");
fdisp(GR,"");
fdisp(LR,"");
fdisp(TR,"");
fdisp(GTV,"");
fdisp(LTV,"");
fdisp(TTV,"");
fdisp(GRV,"");
fdisp(LRV,"");
fdisp(TRV,"");

endfor

fclose(GT);
fclose(LT);
fclose(TT);
fclose(GR);
fclose(LR);
fclose(TR);
fclose(GTV);
fclose(LTV);
fclose(TTV);
fclose(GRV);
fclose(LRV);
fclose(TRV);

