#!/usr/bin/perl -w use strict; use Bio::AlignIO; use Bio::Align::Utilities qw(aa_to_dna_aln); use Bio::SeqIO; my $dir = shift @ARGV || 'clusterfam'; opendir(DIR, $dir) || die "cannot open dir $dir: $!"; for my $file ( readdir(DIR) ) { if( $file =~ /(\S+)\.pep\.aln$/ ) { my $stem = $1; my $in = Bio::SeqIO->new(-format => 'fasta', -file => "$dir/$stem.cds.fa"); my %cds_map; while( my $seq = $in->next_seq ) { my $id = $seq->display_id; $cds_map{$id} = $seq; } my $alnin = Bio::AlignIO->new(-format => 'fasta', -file => "$dir/$file"); if( my $pepaln = $alnin->next_aln ) { my $cds_aln = aa_to_dna_aln( $pepaln, \%cds_map); my $alnout = Bio::AlignIO->new(-format => 'phylip', -file => ">$dir/$stem.cds.phy"); $alnout->write_aln($cds_aln); } else { die("there was something weird, I can't read alignment in $dir/$file"); } } }