[Bioperl-l] Regarding Organism based search in Remote blast
Roopa Raghuveer
rtbio.2009 at gmail.com
Fri Dec 4 08:57:21 EST 2009
Hello all,
I am working on Remote blast.Here,I am trying to get 2 parameters into the
remote blast code.They are
1.The input sequence that has to be sent to blast
2.Organism (The organism which has to be searched for ex:-Trypanasoma brucei
etc.,)
When I tried to take the organism parameter as an input from the
user,through a web page,the Remote blast was not giving any results i.e., it
says that there are no alignments found.
But,when I hard coded the organism in the code,it gives me the results i.e.,
3hits.
I could not understand this problem.Could any body please help me in this
regard?
My code is
sub blastcode
{
$input1= $_[0];
$organ= $_[1];
open(NUC,'>',$nuc);
print NUC $input1;
close(NUC);
my $prog = 'blastn';
my $db = 'refseq_rna';
my $e_val= '1e-10';
my $organism= $organ;
$gb = new Bio::DB::GenBank;
my @params = ( '-prog' => $prog,
'-data' => $db,
'-expect' => $e_val,
'-readmethod' => 'SearchIO',
'-Organism' => $organism );
open(OUTFILE,'>',$debugfile);
print OUTFILE @params;
close(OUTFILE);
my $factory = Bio::Tools::Run::RemoteBlast->new(@params);
#change a paramter
$Bio::Tools::Run::RemoteBlast::HEADER{'ENTREZ_QUERY'} = '$organism[ORGN]';
#change a paramter
# $Bio::Tools::Run::RemoteBlast::HEADER{'ENTREZ_QUERY'} = '$input2[ORGN]';
my $v = 1;
#$v is just to turn on and off the messages
my $str = Bio::SeqIO->new(-file => $nuc , '-format' => 'fasta' ,
'-Organism' => $organism );
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
$blastdebugfile = $serverpath."/blastdebug_".time().".txt";
# open(BLASTDEBUGFILE,'>',$debugfile);
# print BLASTDEBUGFILE $result->next_hit();
# close(BLASTDEBUGFILE);
my $filename =
$serverpath."/blastdata_".time().$result->query_name()."\.out";
# open(DEBUGFILE,'>',$debugfile);
# open(new,'>',$filename);
# @arra=<new>;
# print DEBUGFILE @arra;
# close(DEBUGFILE);
# close(new);
$factory->save_output($filename);
# open(BLASTDEBUGFILE,'>',$debugfile);
# print BLASTDEBUGFILE "Hello $rid";
# close(BLASTDEBUGFILE);
$factory->remove_rid($rid);
open(BLASTDEBUGFILE,'>',$blastdebugfile);
print BLASTDEBUGFILE $organism;
close(BLASTDEBUGFILE);
# open(OUTFILE,'>',$outfile);
# print OUTFILE "Test2 $result->database_name()";
# close(OUTFILE);
#$hit = $result->next_hit;
#open(new,'>',$debugfile);
#print $hit;
#close(new);
while ( my $hit = $result->next_hit ) {
next unless ( $v > 0);
# open(OUTFILE,'>',$debugfile);
# print OUTFILE "$hit in while hits";
# close(OUTFILE);
my $sequ = $gb->get_Seq_by_version($hit->name);
my $dna = $sequ->seq(); # get the sequence as a string
push(@seqs,$dna);
}
}
}
}
}
#open(OUTFILE,'>',$debugfile);
#print OUTFILE $seqs[0];
#close(OUTFILE);
return(@seqs);
}
Regards,
Roopa.
More information about the Bioperl-l
mailing list