[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