[Bioperl-l] Problem Parsing BLAST output
Ben Saville
bgs500 at york.ac.uk
Fri Aug 20 13:07:50 UTC 2010
Hi Everyone,
I'm very much new to the world of sequence data analysis (and this
mailing list!), and have reached a roadblock.
I have BLASTed some contigs against a series of databases that I
created. From this I would like to parse through the data and separate
it before extracting the information of interest at a later point. I
would like to separate the data by query ID. I found the following
Bioperl script;
#!/usr/bin/perl
use Bio::Search::Result::BlastResult;
use Bio::SearchIO;
my $report = Bio::SearchIO->new( -file=>'All_BCM_results.bls', -format
=> blast);
my $result = $report->next_result;
my %hits_by_query;
while (my $hit = $result->next_hit) {
push @{$hits_by_query{$hit->name}}, $hit;
}
foreach my $qid ( keys %hits_by_query ) {
my $result = Bio::Search::Result::BlastResult->new();
$result->add_hit($_) for ( @{$hits_by_query{$qid}} );
my $blio = Bio::SearchIO->new( -file => ">$qid\.bls", -
format=>'blast' );
$blio->write_result($result);
}
running this script resulted in the following error;
BlastResult::new(): Not adding iterations.
------------- EXCEPTION: Bio::Root::NoSuchThing -------------
MSG: No such iteration number: 0. Valid range=1-0
VALUE: The number zero (0)
STACK: Error::throw
STACK: Bio::Root::Root::throw /sw/lib/perl5/5.8.8/Bio/Root/Root.pm:368
STACK: Bio::Search::Result::BlastResult::iteration /sw/lib/perl5/5.8.8/
Bio/Search/Result/BlastResult.pm:328
STACK: Bio::Search::Result::BlastResult::add_hit /sw/lib/perl5/5.8.8/
Bio/Search/Result/BlastResult.pm:258
STACK: /Users/bsaville/Desktop/Parsing_BLAST_by_query.pl:15
-------------------------------------------------------------
So I added
my $result = Bio::Search::Result::BlastResult->new(1);
The 1 to the line shown above, as it told me this was within the valid
range. This produced the following error;
------------- EXCEPTION: Bio::Root::Exception -------------
MSG: Must define arrayref of Iterations when initializing a
Bio::Search::Result::BlastResult
STACK: Error::throw
STACK: Bio::Root::Root::throw /sw/lib/perl5/5.8.8/Bio/Root/Root.pm:368
STACK: Bio::Search::Result::BlastResult::new /sw/lib/perl5/5.8.8/Bio/
Search/Result/BlastResult.pm:128
STACK: /Users/bsaville/Desktop/Parsing_BLAST_by_query.pl:14
-----------------------------------------------------------
I know that it is my inexperience that is causing this problem, but I
really can't figure this out.
Regards
Ben Saville
More information about the Bioperl-l
mailing list