#!/bin/perl
#use warnings;
#use strict;

my $inputfile=$ARGV[0]; #transcript
my $inputfile2=$ARGV[1];
my $inputfile3=$ARGV[2];

open (file2,">$inputfile3.bed") or die "$!\n";
#open (file3,">test.bed") or die "$!\n";

my %matrix1;my %matrix2;
my @matrix2;
my @matrix3;
my @matrix4;my @matrix4b;
my @matrix5;
my @matrix6;
my @matrix6;
my @matrixtest;
my $scale=0;
my $var1=0;
my $var2=0;
my $var3=0;
my $var4=0;my $var4b=0;my $var4c=0;my $vardiff=0;
my $var7=0;
my $var5=0;
my $var6=0;
my $var8=0;
my $temp2=0;

open (INPUT_FILE,$inputfile);

while(my $line1=<INPUT_FILE>)  
 { 
   if ($line1=~/\>(.*)/)
   {
   @matrix2=split(/\s/,$1);
   @{$matrix1{$matrix2[0]}}=split(/\s/,$line1);   
   }
 }

open (INPUT_FILE,$inputfile2);

while(my $line2=<INPUT_FILE>)
  { 

  @{$matrix2{$var1}}=split(/\s/,$line2);
  @matrix6=split(/\,/,${$matrix2{$var1}}[7]);
  $temp2=scalar(@matrix6);
  #print "$temp2\n";
  if ($temp2>3)
  {}
  elsif ($temp2<=2)
  {
  if (${$matrix2{$var1}}[6] eq 0)
   {
  $var2=${$matrix2{$var1}}[2];
  @matrix3=split(/\,/,${$matrix1{$var2}}[3]);
  $var3=scalar(@matrix3);
  @matrix5=split(//,${$matrix2{$var1}}[4]);
  $var7=scalar(@matrix5);#print "${$matrix2{$var1}}[4]\n";
if ($var7>=18)
 {
 for ( my $i=0; $i<=$var3; $i++)
    { 
     @matrix4=split(/\-/,$matrix3[$i]);@matrix4b=split(/\-/,$matrix3[$i-1]);
     $var4=($matrix4[1]-($matrix4[0]-1))+$var4;$var4b=($matrix4b[1]-($matrix4b[0]-1))+$var4b;$var4c=abs($var4b-${$matrix2{$var1}}[3]);
   if (( ${$matrix2{$var1}}[3] <= $var4 )&&($var4c>20))
      { $var5=$i;$vardiff=abs($var4-${$matrix2{$var1}}[3]);
        $var6=$matrix4[1]-$vardiff;$var8=$var6+$var7;
   print file2"${$matrix1{$var2}}[2]\t$var6\t$var8\t${$matrix2{$var1}}[1]\t${$matrix2{$var1}}[6]\t${$matrix2{$var1}}[7]\t${$matrix2{$var1}}[4]\t${$matrix2{$var1}}[3]\t$var4\n";
   #print file3"$var2\t${$matrix1{$var2}}[3]\t${$matrix1{$var2}}[0]\n";
       last;
      }
   elsif (( ${$matrix2{$var1}}[3] <= $var4 )&&($var4c<=20))
      { $var5=$i;$vardiff=abs($var4b-${$matrix2{$var1}}[3]);
        $var6=$matrix4b[1]-$vardiff;$var8=$var6+$var7;
   print file2"${$matrix1{$var2}}[2]\t$var6\t$var8\t${$matrix2{$var1}}[1]\t${$matrix2{$var1}}[6]\t${$matrix2{$var1}}[7]\t${$matrix2{$var1}}[4]\t${$matrix2{$var1}}[3]\t$var4\n";
    last;
      } 
    }
   }
 }
}

elsif (($temp2==3)&&(${$matrix2{$var1}}[1]=~/\+/))
{  @matrixtest=split(/\d{1,2}\:T\>C\,/,${$matrix2{$var1}}[7]);
   $scale=scalar(@matrixtest);

  if ((${$matrix2{$var1}}[6] eq 0)&&($scale eq 3))
   {
  $var2=${$matrix2{$var1}}[2];
  @matrix3=split(/\,/,${$matrix1{$var2}}[3]);
  $var3=scalar(@matrix3);
  @matrix5=split(//,${$matrix2{$var1}}[4]);
  $var7=scalar(@matrix5);#print "${$matrix2{$var1}}[4]\n";
if ($var7>=18)
 {
 for ( my $i=0; $i<=$var3; $i++)
   { 
     @matrix4=split(/\-/,$matrix3[$i]);@matrix4b=split(/\-/,$matrix3[$i-1]);
      $var4=($matrix4[1]-($matrix4[0]-1))+$var4;$var4b=($matrix4b[1]-($matrix4b[0]-1))+$var4b;$var4c=abs($var4b-${$matrix2{$var1}}[3]);
   if (( ${$matrix2{$var1}}[3] <= $var4 )&&($var4c>5))
      { $var5=$i;$vardiff=abs($var4-${$matrix2{$var1}}[3]);
        $var6=$matrix4[1]-$vardiff;$var8=$var6+$var7;
   print file2"${$matrix1{$var2}}[2]\t$var6\t$var8\t${$matrix2{$var1}}[1]\t${$matrix2{$var1}}[6]\t${$matrix2{$var1}}[7]\t${$matrix2{$var1}}[4]\t${$matrix2{$var1}}[3]\t$var4\n";
    last;
      }
   elsif (( ${$matrix2{$var1}}[3] <= $var4 )&&($var4c<=5))
      { $var5=$i;$vardiff=abs($var4b-${$matrix2{$var1}}[3]);
        $var6=$matrix4b[1]-$vardiff;$var8=$var6+$var7;
   print file2"${$matrix1{$var2}}[2]\t$var6\t$var8\t${$matrix2{$var1}}[1]\t${$matrix2{$var1}}[6]\t${$matrix2{$var1}}[7]\t${$matrix2{$var1}}[4]\t${$matrix2{$var1}}[3]\t$var4\n";
    last;
      } 
   }
  }
   }
}

elsif (($temp2==3)&&(${$matrix2{$var1}}[1]=~/\-/)&&(${$matrix2{$var1}}[7]=~/A\>G/))
{  @matrixtest=split(/\d{1,2}\:A\>G\,/,${$matrix2{$var1}}[7]);
   $scale=scalar(@matrixtest);
#print "$scale\t$temp2\t@matrixtest\t${$matrix2{$var1}}[7]\n";
  if ((${$matrix2{$var1}}[6] eq 0)&&($scale eq 3))
   {
  $var2=${$matrix2{$var1}}[2];
  @matrix3=split(/\,/,${$matrix1{$var2}}[3]);
  $var3=scalar(@matrix3);
  @matrix5=split(//,${$matrix2{$var1}}[4]);
  $var7=scalar(@matrix5);#print "${$matrix2{$var1}}[4]\n";
if ($var7>=18)
{
 for ( my $i=0; $i<=$var3; $i++)
   { 
     @matrix4=split(/\-/,$matrix3[$i]);@matrix4b=split(/\-/,$matrix3[$i-1]);
     $var4=($matrix4[1]-($matrix4[0]-1))+$var4;$var4b=($matrix4b[1]-($matrix4b[0]-1))+$var4b;$var4c=abs($var4b-${$matrix2{$var1}}[3]);
     @matrix4=split(/\-/,$matrix3[$i]);
     $var4=$matrix4[1]-$matrix4[0]+$var4;
   if (( ${$matrix2{$var1}}[3] <= $var4 )&&($var4c>5))
      { $var5=$i;$vardiff=abs($var4-${$matrix2{$var1}}[3]);
        $var6=$matrix4[1]-$vardiff;$var8=$var6+$var7;
   print file2"${$matrix1{$var2}}[2]\t$var6\t$var8\t${$matrix2{$var1}}[1]\t${$matrix2{$var1}}[6]\t${$matrix2{$var1}}[7]\t${$matrix2{$var1}}[4]\n";
   last;
      }
    elsif (( ${$matrix2{$var1}}[3] <= $var4 )&&($var4c<=5))
      { $var5=$i;$vardiff=abs($var4b-${$matrix2{$var1}}[3]);
        $var6=$matrix4b[1]-$vardiff;$var8=$var6+$var7;
   print file2"${$matrix1{$var2}}[2]\t$var6\t$var8\t${$matrix2{$var1}}[1]\t${$matrix2{$var1}}[6]\t${$matrix2{$var1}}[7]\t${$matrix2{$var1}}[4]\n";
   last;
      }
   }
  }
   }
}

$var4=0;$var4c=0;
  }

close (file2);   
