#!/usr/bin/perl -w 
#This will take as input HAPMIX 4/5 column file when running in Haploid mode
use Switch;

$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.HAPLOID.$n.$CHR") ||die("COF");

    @row = <ANCFILE>;
    $nsnps = scalar @row;
    for($i = 0; $i < scalar @row; $i++)
      {
	chomp($row[$i]);
	@data = split(' ',$row[$i]);
	$key=$n.":".$i;
	if(scalar @data == 5)
	  {
	    $exppopA = ($data[1]+$data[2])/($data[1]+$data[2]+$data[3]+$data[4]);
	  }
	elsif(scalar @data == 4)
	  {
	    $exppopA = ($data[0]+$data[1])/($data[0]+$data[1]+$data[2]+$data[3]);
	  }

	if($mode eq 'ANC_PROB')
	  {
	    $mode1 = 'ANCPROB';
	    $prpopA{$key} = $exppopA;
	  }
	elsif($mode eq 'ANC_INT_THRESH')
	  {
	    $mode1 = 'ANCINTTHRESH';
	    if($exppopA > $thresh)
	      {
		$prpopA{$key} = 1;
	      }
	    elsif((1.0-$exppopA) > $thresh)
	      {
		$prpopA{$key} = 0;
	      }
	    else
	      {
		$prpopA{$key} = 9;
	      }

	  }
	elsif($mode eq 'ANC_INT_ROUND')
	  {
	    $mode1 = 'ANCINTRND';
	    $prpopA{$key} = sprintf("%.0f",$exppopA);
	  } 
	elsif($mode eq 'ANC_INT_SAMPLE')
	  {
	    $mode1 = 'ANCINTSAMPLE';
	    $r = rand();
	    if($r < $exppopA)
	      {
		$prpopA{$key} = 1;
	      }
	    else
	      {
		$prpopA{$key} = 0;
	      }
	  } 
	elsif($mode eq 'HAPLOID_FILES')
	  {
	    if(scalar @data == 4) 
	      {           
		$l = 0; 
	      }                                           
	    elsif(scalar @data == 5) 
	      {       
		$l = 1;   
	      } 
	
	    
#	    $col = -1;   
	    
	    $maxind = $l; 
            while($l < scalar @data) 
              { 
                if($data[$l] > $data[$maxind]){$maxind = $l;} 
                $l++; 
              } 
                 
            if($data[$maxind] > $thresh) 
              { 
                $col = $maxind; 
              } 
            else 
              { 
                $col = -1; 
              } 

	
	    if(scalar @data ==5)
	      {
		$col--;
	      }
	    switch($col)   
	      { 
		case 0  {$anc{$key} = 0; $geno{$key} = 0;}
		 case 1  {$anc{$key} =0;  $geno{$key} =1;}
		case 2  {$anc{$key} = 1; $geno{$key} = 0;}
		 case 3  {$anc{$key} = 1; $geno{$key} =1;}
		  else {$anc{$key}=9; $geno{$key}=9;}
	      }
	  }
      }
    close ANCFILE;
  }


if(($mode eq 'ANC_PROB') || ($mode eq 'ANC_INT_THRESH') || ($mode eq 'ANC_INT_SAMPLE'))
  {
    open(LOCALANCFILE,">$DIR/$admixpop.HAPLOID.$mode1.$CHR") || die("COF");
  }
elsif($mode eq 'HAPLOID_FILES')
  {
    open(ANCFILE,">$DIR/$admixpop.HAPLOID.ANCHAP.$CHR") || die("COF");
    open(GENOFILE,">$DIR/$admixpop.HAPLOID.GENOHAP.$CHR") || die("COF");
  }


for($j = 0; $j < $nsnps;$j++)
  {
    for($k=0;$k<$NADMIX;$k++)
      {
	$key = $k.":".$j;
	if(($mode eq 'ANC_INT_THRESH') || ($mode eq 'ANC_INT_SAMPLE'))
	  {
	    print LOCALANCFILE $prpopA{$key};
	  }
	elsif(($mode eq 'ANC_PROB'))
	  {
	    print LOCALANCFILE $prpopA{$key}," ";
	  }
	elsif($mode eq 'HAPLOID_FILES')
	  {
	    print GENOFILE $geno{$key};
	    print ANCFILE (1.0-$anc{$key});
	  }
      }
    if(($mode eq 'ANC_PROB') || ($mode eq 'ANC_INT_THRESH') || ($mode eq 'ANC_INT_SAMPLE'))
      {
	print LOCALANCFILE "\n";
      }
    elsif($mode eq 'HAPLOID_FILES')
      {
	print ANCFILE "\n";
	print GENOFILE "\n";
      }
  }
