サンプル2. ローカルでBLAST検索をする

ローカルでBLAST検索をします。ローカルですので、対象となるデータベースはあらかじめダウンロードしておかなくてはいけません。以下は、fastaフォーマットで保存してあるアミノ酸配列からSWISSPROTを検索する例です。BLASTの結果はファイルに、summaryを画面に表示します。



#!/usr/bin/perl -w


use Bio::SeqIO;
use Bio::Tools::Run::StandAloneBlast;


@params = (program => 'blastp',
database => '/bio/blast/db/swissprot',
outfile => 'test.out');

$blast_obj = Bio::Tools::Run::StandAloneBlast->new(@params);

$str = Bio::SeqIO->new(-file=>'test.fas' , '-format' => 'Fasta' );
$in_obj = $str->next_seq();

$report_obj = $blast_obj->blastall($in_obj);
$result_obj = $report_obj->next_result;

while ($hit_obj = $result_obj->next_hit) {
printf ("%2d. ", $hit_obj->rank);
printf ("%-23s", $hit_obj->name);
printf ("%3d/%3d =", $hit_obj->matches('id'), $hit_obj->length);
printf ("%5.1f",$hit_obj->frac_identical*100);
print "%\n";
}


BLAST検索の結果から出力できる値を一覧にしておきます。


検索結果($result = $xxx->next_result)
Result algorithm : $result->algorithm
Result algorithm_version : $result->algorithm_version
Result query_name : $result->query_name
Result query_accession : $query_accession
Result query_length : $result->query_length
Result query_description : $result->query_description
Result database_name : $result->database_name
Result database_letters : $result->database_letters
Result database_entries : $result->database_entries
Result num_hits : $result->num_hits
Result hits : $result->hits


ヒット($hit = $result->next_hit)
Hit matches('id') : $hit->matches('id')
Hit matches('cons') : $hit->matches('cons')
Hit name : $hit->name
Hit accession : $hit->accession
Hit description : $hit->description
Hit length : $hit->length
Hit algorithm : $hit->algorithm
Hit score : $hit->score
Hit raw_score : $hit->raw_score
Hit expect : $hit->expect
Hit significance : $hit->significance
Hit bits : $hit->bits
Hit start : $hit->start
Hit end : $hit->end
Hit hsps : $hit->hsps
Hit num_hsps : $hit->num_hsps
Hit ambiguous_aln : $hit->ambiguous_aln
Hit overlap : $hit->overlap
Hit n : $hit->n
Hit logical_length : $hit->logical_length
Hit length_aln : $hit->length_aln
Hit gaps : $hit->gaps
Hit frac_identical : $hit->frac_identical
Hit frac_conserved : $hit->frac_conserved
Hit frac_aligned_query : $hit->rac_aligned_query
Hit frac_aligned_hit : $hit->frac_aligned_hit
Hit num_unaligned_sbjct : $hit->num_unaligned_sbjct
Hit num_unaligned_hit : $hit->num_unaligned_hit
Hit num_unaligned_query : $hit->num_unaligned_query
Hit strand : $hit->strand
Hit frame : $hit->frame
Hit rank : $hit->rank
Hit locus : $hit->locus


これらを全て出力してみます。先ほどのBLASTの結果、test.outを読み込んで、1件目ヒットの結果を出力します。全部のヒットの結果を出力するには、whileを使えばよいでしょう。



#!/usr/bin/perl -w


use Bio::SearchIO;


$report_obj = new Bio::SearchIO(-format => 'blast',
-file => 'test.out' );


$result_obj = $report_obj->next_result;

print "Result>algorithm:" . $result_obj->algorithm . "\n";
print "Result>algorithm_version:" . $result_obj->algorithm_version . "\n";
print "Result>query_name:" . $result_obj->query_name . "\n";
print "Result>query_accession:" . $result_obj->query_accession . "\n";
print "Result>query_length:" . $result_obj->query_length . "\n";
print "Result>query_description:" . $result_obj->query_description . "\n";
print "Result>database_name:" . $result_obj->database_name . "\n";
print "Result>database_letters:" . $result_obj->database_letters . "\n";
print "Result>database_entries:" . $result_obj->database_entries . "\n";
print "Result>num_hits:" . $result_obj->num_hits . "\n";
print "Result>hits:" . $result_obj->hits . "\n";


$hit = $result_obj->next_hit;

print "Hit>matches('id'):" . $hit->matches('id') . "\n";
print "Hit>matches('cons'):" . $hit->matches('cons') . "\n";
print "Hit>name:" . $hit->name . "\n";
print "Hit>accession:" . $hit->accession . "\n";
print "Hit>description:" . $hit->description . "\n";
print "Hit>length:" . $hit->length . "\n";
print "Hit>algorithm:" . $hit->algorithm . "\n";
print "Hit>score:" . $hit->score . "\n";
print "Hit>raw_score:" . $hit->raw_score . "\n";
print "Hit>expect:" . $hit->expect . "\n";
print "Hit>significance:" . $hit->significance . "\n";
print "Hit>bits:" . $hit->bits . "\n";
print "Hit>start:" . $hit->start . "\n";
print "Hit>end:" . $hit->end . "\n";
print "Hit>hsps:" . $hit->hsps . "\n";
print "Hit>num_hsps:" . $hit->num_hsps . "\n";
print "Hit>ambiguous_aln:" . $hit->ambiguous_aln . "\n";
print "Hit>overlap:" . $hit->overlap . "\n";
print "Hit>n:" . $hit->n . "\n";
print "Hit>logical_length:" . $hit->logical_length . "\n";
print "Hit>length_aln:" . $hit->length_aln . "\n";
print "Hit>gaps:" . $hit->gaps . "\n";
print "Hit>frac_identical:" . $hit->frac_identical . "\n";
print "Hit>frac_conserved:" . $hit->frac_conserved . "\n";
print "Hit>frac_aligned_query:" . $hit->frac_aligned_query . "\n";
print "Hit>frac_aligned_Hit>" . $hit->frac_aligned_hit . "\n";
print "Hit>num_unaligned_sbjct:" . $hit->num_unaligned_sbjct . "\n";
print "Hit>num_unaligned_Hit>" . $hit->num_unaligned_hit . "\n";
print "Hit>num_unaligned_query:" . $hit->num_unaligned_query . "\n";
print "Hit>strand:" . $hit->strand . "\n";
print "Hit>frame:" . $hit->frame . "\n";
print "Hit>rank:" . $hit->rank . "\n";
print "Hit>locus:" . $hit->locus . "\n";