#!/usr/bin/perl -w
use strict;
use File::Basename;

if (@ARGV != 3)
{
	my $myname = basename($0);
	print "USAGE:\n\t$myname <name_list_file> <tree_file> <numbered_alignment>\n";
	exit 1;
}
my ($namefile, $treefile, $alignmentfile) = @ARGV;

my @names;
my $tree;
my @alignment;
{
  local $/ = undef;
  
  open(NAMEFILE, $namefile);
  my $name_text = <NAMEFILE>;
  $name_text =~ s/^\s+|\s+$//g;
  @names = split(/\s+/, $name_text);
  close(NAMEFILE);
  
  open(TREEFILE, $treefile);
  $tree = <TREEFILE>;
  close(TREEFILE);
  
  open(ALIGNMENTFILE, $alignmentfile);
  my $alignment_text = <ALIGNMENTFILE>;
  @alignment = split(/>.*[\n\r]+/, $alignment_text);
  shift @alignment;
  close(ALIGNMENTFILE);
}

my ($first_tree) = ($tree =~ /^(.*?)[\[;]/s);
my @numbers = ($first_tree =~ /(?<=q)\d+/g);


for(my $i=0; $i<@names; $i++)
{
  my $number = $i+1;
  my $title = $names[$i];
  $title =~ s/\(/{/g;
  $title =~ s/\)/}/g;
  $title =~ s/,/_/g;
  $names[$i] = $title;
  $tree =~ s/q$number(?=\D)/$title/g;
}


open(OUTFILE, ">PR_NewAlignment.algt");
foreach my $num (@numbers)
{
  my $title = $names[$num-1];
  my $seq = $alignment[$num-1];
  $seq =~ s/\s+$//;
  print OUTFILE ">$title\n$seq\n\n";
}
close(OUTFILE);

open(OUTFILE, ">PR_NewTree.tree");
print OUTFILE $tree;
close(OUTFILE);
