[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 メーリングリストの案内