たとえば、リモート (NCBI) サーバーを使用して、何千もの EST シーケンスに対してスタンドアロンの Blast+ を実行しています。15 of 100 シーケンスが実行されているなどのステータス メッセージが表示されません。そのようなステータスメッセージを取得することは可能ですか? または、perl スクリプトを使用して次々とシーケンスを送信する他の方法はありますか?
どうもありがとう!
質問する
110 次
1 に答える
0
Bioperl ( http://metacpan.org/pod/BioPerl ) とBio::Tools::Run::RemoteBlast
モジュールを使用することをお勧めします。http://metacpan.org/pod/Bio::Tools::Run::RemoteBlastを参照してください。RemoteBlast.pm モジュールで提供されているコード例を次に示します。
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(), "\n";
while ( my $hit = $result->next_hit ) {
next unless ( $v > 0);
print "\thit name is ", $hit->name, "\n";
while( my $hsp = $hit->next_hsp ) {
print "\t\tscore is ", $hsp->score, "\n";
}
}
}
}
}
}
メソッドを見てくださいretrieve_blast
( http://metacpan.org/pod/Bio::Tools::Run::RemoteBlast#retrieve_blast )。ブラスト ジョブが終了したかどうかを知らせるステータス コードが返されます。さらに質問がある場合はお知らせください。さらに明確にするよう努めます。
ポール
于 2014-04-28T12:17:16.147 に答える