[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