sub next_aln
{ my $self = shift;
my $entry;
my ($start,$end,%align,$name,$seqname,%hash,@c2name, %accession,%desc);
my $aln = Bio::SimpleAlign->new(-source => 'selex');
while( $entry = $self->_readline) {
if( $entry =~ /^\#=GS\s+(\S+)\s+AC\s+(\S+)/ ) {
$accession{ $1 } = $2;
next;
} elsif( $entry =~ /^\#=GS\s+(\S+)\s+DE\s+(.+)\s*$/ ) {
$desc{$1} .= $2;
} elsif ( $entry =~ /^([^\#]\S+)\s+([A-Za-z\.\-\*]+)\s*/ ) {
my ($name,$seq) = ($1,$2);
if( ! defined $align{$name} ) {
push @c2name, $name;
}
$align{$name} .= $seq;
}
}
foreach my $name ( @c2name ) {
if( $name =~ /(\S+)\/(\d+)-(\d+)/ ) {
$seqname = $1;
$start = $2;
$end = $3;
} else {
$seqname=$name;
$start = 1;
$end = length($align{$name});
}
my $seq = new Bio::LocatableSeq
('-seq' => $align{$name},
'-display_id' => $seqname,
'-start' => $start,
'-end' => $end,
'-description' => $desc{$name},
'-accession_number' => $accession{$name},
);
$aln->add_seq($seq);
}
return if ($end <= 0);
return $aln;} |
sub write_aln
{ my ($self,@aln) = @_;
my ($namestr,$seq,$add);
my ($maxn);
foreach my $aln (@aln) {
$maxn = $aln->maxdisplayname_length();
foreach $seq ( $aln->each_seq() ) {
$namestr = $aln->displayname($seq->get_nse());
$add = $maxn - length($namestr) + 2;
$namestr .= " " x $add;
$self->_print (sprintf("%s %s\n",$namestr,$seq->seq())) or return;
}
}
$self->flush if $self->_flush_on_write && defined $self->_fh;
return 1;} |
Report bugs to the Bioperl bug tracking system to help us keep track
the bugs and their resolution. Bug reports can be submitted via the
web:
http://bugzilla.open-bio.org/