#!/usr/bin/perl -w 
#LOCAL_ANC Output mode
#This will take as input HAPMIX ancestry estimates and create a file with 
#a) Expected number of European copies at each marker using: 0*p[0]+1*p[1]+2*p[2]
#b) Most probable ancestry state based on a threshold of 90% else UNKN
#c) Rounding expected num of Eur copies to nearest integer

$DIR = $ARGV[0];
$NADMIX = $ARGV[1];
$CHR = $ARGV[2];
$mode = $ARGV[3];
$thresh = $ARGV[4];
$admixpop = $ARGV[5];

if($thresh == -1)
  {
    $thresh = 0.0;
  }

for($n=0;$n<$NADMIX;$n++)
  {
    open(ANCFILE,"$DIR/$admixpop.LOCALANC.$n.$CHR") ||die("COF");

    @row = <ANCFILE>;
    $nsnps = scalar @row;
    for($i = 0; $i < scalar @row; $i++)
      {
	chomp($row[$i]);
	$key=$n.":".$i;
	@data = split(' ',$row[$i]);
	if(scalar @data == 3)
	  {
	    if($mode eq 'ANC_INT_THRESH')
	      {
		$mode1 = 'ANCINTTHRESH';
		$maxind = 0;
		$lind = 1; 
		while($lind < scalar @data)
		  {
		    if($data[$lind] > $data[$maxind]){$maxind = $lind;}
		    $lind++;
		  }
		if($data[$maxind] > $thresh)
		  {
		    $pr = 2 - $maxind;
		  }
		else
		  {
		    $pr = 9;
		  }

		$prpopA{$key} = $pr;
	      }
	    elsif($mode eq 'ANC_INT_ROUND')
	      {
		$mode1 = 'ANCINTRND';
		$exptpopA = 2*$data[0]+$data[1];
		$prpopA{$key} = sprintf("%.0f",$exptpopA);
	      }
	    elsif($mode eq 'ANC_EXPECTED')
	      {
		$mode1 ='ANCEXP';
		$prpopA{$key} = 2*$data[0]+$data[1];
	      }
	  }
	elsif(scalar @data ==4)
	  {
	    if($mode eq 'ANC_INT_THRESH')
	      {
		$mode1 ='ANCINTTHRESH';
		$maxind = 1;
		$lind = 2;
		while($lind < scalar @data)
		  {
		    if($data[$lind] > $data[$maxind]){$maxind = $lind;}
		    $lind++;
		  }
		if($data[$maxind] > $thresh)
		  {
		    $pr = 2 - ($maxind-1);
		  }
		else
		  {
		    $pr = 9;
		  }
		$prpopA{$key} = $pr; 
	      }
	    elsif($mode eq 'ANC_INT_ROUND')
	      {
		$mode1 ='ANCINTRND';
		$exptpopA = 2*$data[1]+$data[2];
		$prpopA{$key} = sprintf("%d",$exptpopA);
	      }
	    elsif($mode eq 'ANC_EXPECTED')
	      {
		$mode1 ='ANCEXP';
		$prpopA{$key} = 2*$data[1]+$data[2];
	      }
	  }

      }
    close ANCFILE;
  }



open(EIGENANCFILE,">$DIR/$admixpop.LOCALANC.$mode1.$CHR") || die("COF");

for($j = 0; $j < $nsnps;$j++)
  {
    for($k=0;$k<$NADMIX;$k++)
      {
	$key = $k.":".$j;
	if($mode eq 'ANC_EXPECTED')
	  {
	    
	    print EIGENANCFILE $prpopA{$key}," ";
	  }
	else
	  {	
	    print EIGENANCFILE $prpopA{$key};
	  }
      }
    print EIGENANCFILE "\n";
  }

