[BioRuby-ja] number of white space before Score in format0.rb

GOTO Naohisa ngoto @ gen-info.osaka-u.ac.jp
2006年 4月 23日 (日) 10:38:34 UTC


後藤です。

On Sun, 23 Apr 2006 16:24:20 +0900
Tomoaki NISHIYAMA <tomoakin @ kenroku.kanazawa-u.ac.jp> wrote:

> format0として、blastの出力をparseしたときに、最後の 
> 方のヒットについて
> 同じidが2度検出されるという現象にあたりまして,調べていく 
> と、
> 
>  >ref|NP_197965.1| kinase [Arabidopsis thaliana]
> gb|AAO42089.1| putative receptor protein kinase [Arabidopsis thaliana]
> gb|AAD40144.1| contains similarity to protein kinase domains (Pfam  
> F00069,
>              Score=162.6, E=6.8e-45, N=1) and leucien rich repeats
>              (Pfam PF00560, Score=210.7, E=2.2e-59, N=10) [Arabidopsis
>              thaliana]
>            Length = 1005
> 
> Score =  367 bits (942), Expect = 2e-99
> Identities = 298/985 (30%), Positives = 476/985 (48%), Gaps = 108/985  
> (10%)
> 
> のようなエントリが検出されていない事がわかりました。
> 想像される事は、エントリのdefinitionの後ろの方に 
> Score=で始まる行が来ているせいだろうと思い、

気が付きませんでした。
2番目以降のヒットに上記のような文字列を含んだヒットが来ると、
それをHSPの続きと誤認してしまう模様です。その結果、
そのヒットは無かったことにされてしまいます。そして、
「HSPアライメント出力に存在するヒットの数」と
「BLAST結果の先頭にあるヒット一覧の数」に不一致が生じます。
(HSPアライメント出力に存在するヒットの数が少なくなる。)

BLASTはデフォルトでは250以上のHSPアライメントは出力しない
(blastallの-bオプションで変更可能)ため、それに備えて、
format0.rbでは、HSPアライメント出力が無い場合であっても、
BLAST結果の先頭にあるヒット一覧だけを見てHitオブジェクトを
作成するようになっていますが、それが発動し、
「同じidが二度検出される」が起こるのだと思います。

> format0.rbの/^\s+Score/と言うのを/^ Score/に直すと一 
> 応予定通り全てのidを一回ずつ
> 得る事が出来るようでした。
>
> "Score"の前のspaceの個数が一つじゃない事はあるのかもしれま 
> せんが、
> 任意に変動する事も無いでしょうから、実際に取りうる個数に制限した 
> 方が良いのじゃないかと思います。
> あるいは、空行の直後である事を確認するか、、、

万一のことを考えると「空行の直後である事を確認」のほうが好ましい
ような気がします。format0.rb では、処理の最初のほうで
「空行(スペースやタブだけを含む行も空行とみなす)でsplitする」
をやっていて、その結果が data に入ってるので、
 ^ (行の先頭)ではなく \A (文字列の先頭)にして、

@@ -783 +783 @@
-            while r = data[0] and /^\s+Score/ =~ r
+            while r = data[0] and /\A\s+Score/ =~ r

ではどうでしょうか?
まだ、ちゃんとした動作確認はしていませんが…

-- 
後藤 直久  ngoto @ gen-info.osaka-u.ac.jp
大阪大学微生物病研究所 遺伝情報実験センター ゲノム情報解析分野(安永研)



BioRuby-ja メーリングリストの案内