use strict; use SeedEnv; use gjoseqlib; @ARGV == 3 or die "Usage: hits-to-protein fasta-file hits-file genetic-code\n"; my $fasta_file = shift(@ARGV); my $hit_file = shift(@ARGV); my $gc = shift(@ARGV); open(SEQS, "<", $fasta_file) or die "Cannot open $fasta_file: $!"; my %seq_data; while (my($id, $def, $seq) = read_next_fasta_seq(\*SEQS)) { $seq_data{$id} = $seq; } close(SEQS); open(HF, "<", $hit_file) or die "Cannot open $hit_file: $!\n"; my $code = SeedUtils::genetic_code($gc); while () { chomp; my($id, $hits, $loc, $fn) = split(/\t/); my ($contig, $begin, $end, $strand) = parse_location($loc); $begin--; $end--; my $dna; if ($begin < $end) { $dna = substr($seq_data{$id}, $begin, $end - $begin + 1); } else { $dna = SeedUtils::rev_comp(substr($seq_data{$id}, $end, $begin - $end + 1));; } my $trans = SeedUtils::translate($dna, $code, 0); gjoseqlib::print_alignment_as_fasta([[$id, "$loc $fn", $trans]]); } exit 0;