[Bioperl-l] Getting description of BLAST hits
Peter.Robinson at t-online.de
Peter.Robinson at t-online.de
Wed Apr 6 01:47:54 EDT 2005
On Tue, Apr 05, 2005 at 10:18:35PM -0400, Jason Stajich wrote:
> what does
> print ref($hit), "\n";
> say?
ref($hit)= Bio::Search::Hit::BlastHit
I am using Bioperl 1.4, perl 5.8, Debian linux (sarge, 2.6)
Thanks,
Peter
>
> What version of Bioperl?
>
> On Apr 5, 2005, at 6:09 PM, Peter.Robinson at t-online.de wrote:
>
> >Dear list,
> >
> >I am trying to get a list of all BLAST hits to various sequences using
> >code adapted from the bioperl website. In essence, I would like to get
> >the descriptions
> >from lines such as
> >
> >
> >gb|BC021898.1| Homo sapiens adaptor-related protein complex 1, s...
> >2956 0.0
> >
> >
> >
> >Using the following code:
> >
> > while ( my $hit = $result->next_hit ) {
> > next unless ( $v > 0);
> > print "\thit name is ", $hit->name, "\t",
> > $hit->accession(), "\t", hit->description(),"\t";
> >
> >
> >leads to the error:
> >
> >Can't locate object method "description" via package "hit" (perhaps
> >you forgot to load "hit"?) at blast2SpeciesList.pl line 60.
> >
> >
> >However, the documentation for Bio::Search::Hit indicates that Hit
> >objects should have a description() method.
> >
> >What am I misunderstanding?
> >
> >Thanks in advance for any tips. Just in case, I am pasting the
> >complete code snippet at the bottom of this mail.
> >
> >Peter
> >
> >
> >#!/usr/bin/perl -w
> >use strict;
> >
> >
> >#Remote-blast "factory object" creation and blast-parameter
> >initialization
> >
> >use Bio::Tools::Run::RemoteBlast;
> >
> >my $prog = 'blastn';
> >my $db = 'nr';
> >my $e_val= '1e-10';
> >
> >my @params = ( '-prog' => $prog,
> > '-data' => $db,
> > '-expect' => $e_val,
> > '-readmethod' => 'SearchIO' );
> >
> >my $factory = Bio::Tools::Run::RemoteBlast->new(@params);
> >
> >#change a paramter
> >#$Bio::Tools::Run::RemoteBlast::HEADER{'ENTREZ_QUERY'} = 'Homo sapiens
> >[ORGN]';
> >#remove a parameter
> >#delete $Bio::Tools::Run::RemoteBlast::HEADER{'FILTER'};
> >
> >my $v = 1;
> >#$v is just to turn on and off the messages
> >
> >my $str = Bio::SeqIO->new(-file=>'testSeqs.fa' , '-format' => 'fasta'
> >);
> >
> >while (my $input = $str->next_seq()){
> > #Blast a sequence against a database:
> >
> > #Alternatively, you could pass in a file with many
> > #sequences rather than loop through sequence one at a time
> > #Remove the loop starting 'while (my $input = $str->next_seq())'
> > #and swap the two lines below for an example of that.
> > my $r = $factory->submit_blast($input);
> > #my $r = $factory->submit_blast('amino.fa');
> >
> > print STDERR "waiting..." if( $v > 0 );
> > while ( my @rids = $factory->each_rid ) {
> > foreach my $rid ( @rids ) {
> > my $rc = $factory->retrieve_blast($rid);
> > if( !ref($rc) ) {
> > if( $rc < 0 ) {
> > $factory->remove_rid($rid);
> > }
> > print STDERR "." if ( $v > 0 );
> > sleep 5;
> > } else {
> > my $result = $rc->next_result();
> > #save the output
> > my $filename = $result->query_name()."\.out";
> > $factory->save_output($filename);
> > $factory->remove_rid($rid);
> > print "\nQuery Name: ", $result->query_name(), "\t",
> > $result->query_accession(),"\n";
> > while ( my $hit = $result->next_hit ) {
> > next unless ( $v > 0);
> > print "\thit name is ", $hit->name, "\t",
> > $hit->accession(), "\t", hit->description(),"\t";
> >
> > while( my $hsp = $hit->next_hsp ) {
> > print "\te-val is ", $hsp->evalue, "\n";
> > last;
> > }
> > }
> > }
> > }
> > }
> >}
> >
> >_______________________________________________
> >Bioperl-l mailing list
> >Bioperl-l at portal.open-bio.org
> >http://portal.open-bio.org/mailman/listinfo/bioperl-l
>
> _______________________________________________
> Bioperl-l mailing list
> Bioperl-l at portal.open-bio.org
> http://portal.open-bio.org/mailman/listinfo/bioperl-l
More information about the Bioperl-l
mailing list