[Bioperl-l] problem with Bio::SearchIO::Writer

David Messina dmessina at wustl.edu
Thu Jan 11 22:32:05 UTC 2007


Hi Li,

Please reply also to the list so that the whole thread can be archived.

I dug a little deeper into the  
Bio::SearchIO::Writer::TextResultWriter documentation and found (in  
the description section) that you can pass a subroutine to do your  
filtering. So your code can be shortened to:

#!/usr/bin/perl -w

use strict;
use warnings;
use Bio::SearchIO;
use Bio::SearchIO::Writer::TextResultWriter;

my $usage = "
signifablast - filter blast reports for significance and write out a  
new report

Usage: signifablast <file of blast report(s)>
";
@ARGV == 1 or die $usage;

# create a SearchIO object for reading in the file of blast report(s)
my $in = Bio::SearchIO->new( -format => 'blast', -file => "$ARGV[0]" );

# create a TextResultWriter object
my $writer = Bio::SearchIO::Writer::TextResultWriter->new(
     -filters => { 'HIT' => \&hit_filter } );

# create a SearchIO object to store our filtered hits and write them  
to 'out'
my $out = Bio::SearchIO->new( -writer => $writer, -file => '>out' );

# write out our new (text) blast report
$out->write_result($in->next_result);



# E-value filter
sub hit_filter {
     my $hit = shift;

     # set E value cutoff
     my $e = 1e-10;

     # &hit_filter must return true to keep the hit and false to  
discard the hit
     return $hit->significance < $e;
}



Dave



On Jan 11, 2007, at 6:50 AM, lidaof wrote:

> Hi,Dave and Chris,
>
> sorry for disturbing again
> in the code i paste below:
>
> #!/usr/bin/perl -w
>
> use strict;
> use warnings;
> use Bio::SearchIO;
> #use Bio::SearchIO::Writer::TextResultWriter;
>
> my $in = new Bio::SearchIO (-format => 'blast', -file => "$ARGV[0]");
>
> $cutoff = 1e-10;
> open OP,">out";
> while(my $result = $in->next_result){
> my $resultname = $result->query_name();
> while(my $hit = $result->next_hit){
> my $name = $hit->name();
> my $e = $hit->significance();
> if($e < $cutoff){
> print OP "$resultname\t$name\t$e\n";
> next;
> }
> }
> }
>
> i use a filehandle "OP" for file output
> i want to use  Bio::SearchIO::Writer::TextResultWriter but actually  
> i didn't use it
> that is the place you are not sure in your last mail
> and i will spend some time on reading the website of bioperl and  
> this mailing list
>
> Thanks for your kindness:)
>
> Li




More information about the Bioperl-l mailing list