#!/usr/bin/env perl

# File: convertPrimerToFA
# Author: Terry Furey
# Date: 10/4/2001
# Project: Human
# Description: Convert a primer file to a .fa file
# initial source from 2004 found in /cluster/bin/scripts
# placed into source tree 2009-05-01 with strict and warnings

use strict;
use warnings;

# Usage message
if ($#ARGV < 0) {
  print STDERR "USAGE: convertPrimerToFA [-mouse] <primer file>\n";
  exit(1);
}

# Read in and check parameters
my $mouse = 0;
while ($#ARGV != 0) {
  my $arg = shift(@ARGV);
  if ($arg eq "-mouse") {
    $mouse = 1;
  } else {
    die("$arg is not a valid option\n");
  }
}
my $file = shift(@ARGV);
open(FILE, "<$file") || die("Could not open $file\n");

# Process each line
while(my $line = <FILE>) {
  chomp($line);
  my $length = 0;
  my ($id, $left, $right, $len, $name, $symbol, $otherid);
  if ($mouse) {
    ($id, $left, $right, $len, $name, $symbol) = split('\t',$line);
  } else {
    ($id, $left, $right, $len, $otherid) = split('\t',$line);
  }
  if ($len eq "-") {
      $length = 500;
  } elsif ($len =~ "-") {
    my ($start, $end) = split("-",$len);
    $length = int(($end - $start)/2) + $start;
  } elsif (length($len) > 1) {
    $length = $len;
  }

  # Make sure everything is uppercase
  $left =~ tr/[a-z]/[A-Z]/;
  $right =~ tr/[a-z]/[A-Z]/;

  # Print header and left primer
  if ($mouse) {
    print ">$id $name $symbol\n";
  } else {
    print ">dbSTS_$id ucsc_$otherid\n";
  }
  print "$left\n";

  # Determine number of N's to print, and print out
  my @left = split(//,$left);
  my @right = split(//,$right);
  my $numN = $length - $#left - $#right - 2;
  if ($numN <=0) {
      $length = 50;
      $numN = $length - $#left - $#right - 2;
  }
  my $lines = int($numN/25);
  for (my $i = 0; $i < $lines; $i++) {
    print "NNNNNNNNNNNNNNNNNNNNNNNNN\n";
  }
  my $remainder = $numN - ($lines * 25);
  for (my $i = 0; $i < $remainder; $i++) {
    print "N";
  } 
  if ($remainder > 0) {
    print "\n";
  }

  # Reverse complement right primer and print out
  for (my $i = $#right; $i >= 0; $i--) {
    if ($right[$i] eq "A") { print "T"; }    
    elsif ($right[$i] eq "T") { print "A"; }
    elsif ($right[$i] eq "G") { print "C"; }
    elsif ($right[$i] eq "C") { print "G"; }
    elsif ($right[$i] =~ /[A-Z]/) { print "N"; }
    elsif ($right[$i] eq "/") { $i--; }
    else { die("mismatch $right[$i]\n"); }
  }
  print "\n";
}
