[Bioperl-l] Bio::AlignIO::bl2seq doesn't know when to stop...

Jonathan Manning jmanning at broad.mit.edu
Mon Nov 10 10:23:03 EST 2003


I hate replying to my own post, but is anyone interested in 
reviewing/applying this patch? It won't successfully parse bl2seq 
alignments without it.
If someone will confirm this is a problem, and that this looks like a 
correct solution, then I'll go through the trouble of testing it against 
blast tools 2.2.1-2.2.6 and even writing a test for it.
Even a "works for me (without the patch) with blast tools version 2.x.x" 
reply would be helpful.
~J

Jonathan Manning wrote:
> Hi,
> If I try to parse a bl2seq alignment using align (using "while(my $aln = 
> $str->next_aln())" ), when it runs out of alignments, I get:
> 
> Can't call method "querySeq" on an undefined value at 
> ~/perllib/Bio/AlignIO/bl2seq.pm line 134, <GEN5> line 6002.
> 
> If I look at the file I'm trying to parse, line 6002 is the end of the 
> alignments. There is a "Lambda" line, and some summary information 
> following it. I would expect next_aln to return false here.
> 
> The following patch to CVS head fixes this - and properly returns false 
> when there is no next alignment. This fix can also be applied to 1.2.3. 
> All tests in AlignIO.t pass.
> 
> I'm using blast tools 2.2.1, btw. It may only be a problem with this 
> version of bl2seq. However, the fix below is a good safety check 
> regardless of what blast version is used - but someone needs to test it 
> against the latest version, just in case.
> 
> ~Jonathan
> 
> 
> Index: bl2seq.pm
> ===================================================================
> RCS file: /home/repository/bioperl/bioperl-live/Bio/AlignIO/bl2seq.pm,v
> retrieving revision 1.15
> diff -c -r1.15 bl2seq.pm
> *** bl2seq.pm   2003/10/28 13:52:03     1.15
> --- bl2seq.pm   2003/11/04 15:54:16
> ***************
> *** 131,136 ****
> --- 131,137 ----
>                                   -report_type => $self->report_type);
>       my $bl2seqobj = $self->{'bl2seqobj'};
>       my $hsp =   $bl2seqobj->next_feature;
> +     unless($hsp) { return 0 };
>       $seqchar = $hsp->querySeq;
>       $start = $hsp->query->start;
>       $end = $hsp->query->end;
> 
> 



More information about the Bioperl-l mailing list