This module contains utility methods for manipulating sequence
alignments (
Bio::Align::AlignI) objects.
The
aa_to_dna_aln utility is essentially the same as the
mrtransprogram by Bill Pearson available at
ftp://ftp.virginia.edu/pub/fasta/other/mrtrans.shar. Of course this
is a pure-perl implementation, but just to mention that if anything
seems odd you can check the alignments generated against Bill's
program.
sub aa_to_dna_aln
{ my ($aln,$dnaseqs) = @_;
unless( defined $aln &&
ref($aln) &&
$aln->isa('Bio::Align::AlignI') ) {
croak('Must provide a valid Bio::Align::AlignI object as the first argument to aa_to_dna_aln, see the documentation for proper usage and the method signature');
}
my $alnlen = $aln->length;
my $dnaalign = new Bio::SimpleAlign;
foreach my $seq ( $aln->each_seq ) {
my $newseq;
my $dnaseq = $dnaseqs->{$seq->display_id} || croak("cannot find ".
$seq->display_id);
foreach my $pos ( 1..$alnlen ) {
my $loc = $seq->location_from_column($pos);
my $dna = '';
if( !defined $loc || $loc->location_type ne 'EXACT' ) {
$dna = '---';
} else {
my ($start,$end) = ((($loc->start - 1)* CODONSIZE) +1,
($loc->end)* CODONSIZE);
if( $start <=0 || $end > $dnaseq->length() ) {
print STDERR "start is ", $loc->start, " end is ", $loc->end, " while dnaseq length is ", $dnaseq->length(), " and start/end projected are $start,$end\n ";
warn("codons don't seem to be matching up for $start,$end");
$dna = '---';
} else {
$dna = $dnaseq->subseq($start,$end);
}
}
$newseq .= $dna;
}
my $newdna = new Bio::LocatableSeq(-display_id => $seq->id(),
-start => (($seq->start - 1) *
CODONSIZE) + 1,
-end => ($seq->end * CODONSIZE),
-strand => $seq->strand,
-seq => $newseq);
$dnaalign->add_seq($newdna);
}
return $dnaalign;
}
1; } |
User feedback is an integral part of the evolution of this and other
Bioperl modules. Send your comments and suggestions preferably to
the Bioperl mailing list. Your participation is much appreciated.
bioperl-l@bioperl.org - General discussion
http://bioperl.org/MailList.shtml - About the mailing lists
Report bugs to the Bioperl bug tracking system to help us keep track
of the bugs and their resolution. Bug reports can be submitted via
email or the web:
bioperl-bugs@bioperl.org
http://bugzilla.bioperl.org/
The rest of the documentation details each of the object methods.
Internal methods are usually preceded with a _