BioRuby

提供:TogoWiki

移動: 案内, 検索

目次

メンバー

  • 後藤直久
  • 西山智明
  • 中村昇太
  • 片山俊明

BH10.10 発表・ディスカッション資料

2010/10/20 ワークショップ発表資料(後藤) ファイル:20101020-ngoto-BioRuby.pdf

参考リンク

BH10.10 ハッカソン

BioRuby 1.4.1 リリース物


OS X 10.4 intelでは、ruby-1.9.2-p0 でgemからのinstallは

ruby192/bin/gem install bio-1.4.1.gem 
Successfully installed bio-1.4.1
1 gem installed
Installing ri documentation for bio-1.4.1...
dyld: lazy symbol binding failed: Symbol not found: _remove_history
  Referenced from: /Volumes/hornext/ruby192/lib/ruby/1.9.1/i386-darwin8.11.1/readline.bundle
  Expected in: flat namespace

dyld: Symbol not found: _remove_history
  Referenced from: /Volumes/hornext/ruby192/lib/ruby/1.9.1/i386-darwin8.11.1/readline.bundle
  Expected in: flat namespace

Trace/BPT trap

となる。(tar.gzはエラーなし) ruby-1.8.7-p302はエラーなし

$ ../ruby187/bin/ruby -rubygems setup.rb test
3131 tests, 20453 assertions, 0 failures, 0 errors

CentOS 5.5 ruby-1.9.2-p0 gemでのinstall ok

新バージョンリリースに向けた作業

  • Ruby 1.9.2 でエラーが出たテスト・クラスを修正
    • Bio::AAindex2 など -- done
  • Release notes, README など -- 作業中 -- done

Status in the morning of Oct21

4 Failure on 1.8.7 (1 togows, 1 Float comparison, 2 libxml)

4 Failure 9 Error on 1.9.2

Unit Test中のFloat比較を引き算後小さい数との比較に -- done

libxmlをgemでインストールして...

../ruby187/bin/ruby -rubygems setup.rb test

3014 tests, 20273 assertions, 0 failures, 0 errors

1回下のエラーがでているが、きっと有意差が検出されるのは偶に(1%)起きる事なので大丈夫なはず。

  1) Failure:
test_randomize_with_hash_equiprobability(Bio::TestSequenceCommon::TestSequenceCommonRandomize)
    [./test/unit/bio/sequence/test_common.rb:286:in `randomize_equiprobability'
     ./test/unit/bio/sequence/test_common.rb:296:in `test_randomize_with_hash_equiprobability']:
test of chi2 < 21.666 failed (23.1).
<21.666> expected to be
>
<23.1>.

3014 tests, 20273 assertions, 1 failures, 0 errors

ただし、本来、乱数生成器と種を指定できるようにすべきか?(将来への課題)

下記の誤植(2カ所)が残っています。 -- done

--- a/KNOWN_ISSUES.rdoc
+++ b/KNOWN_ISSUES.rdoc
@@ -4,7 +4,7 @@ License::   The Ruby License
 
 = Known issues and bugs in BioRuby
 
-Below are known issues and bugs in BioRuby. Pathes to fix them are welcomed.
+Below are known issues and bugs in BioRuby. Patches to fix them are welcome.
 We hope they will be fixed in the future.
 
 Items marked with (WONT_FIX) tags would not be fixed within BioRuby because

Ruby 1.9.2 対応

  • 上記も参照

ユニットテストでのFloatの比較

assert_in_delta を使って許したい誤差より小さいか調べるのが正統派。

  • 利点: Rubyバージョンや処理系を問わない
  • 欠点: 有効数字などを考えて許容する誤差を個別に設計しないといけない

文字列に変換してから比較してもよい。sprintf("%.15g", f) などを使う。

  • 利点: 簡易
  • 欠点: 差は小さいが文字列表記が違いすぎる場合は使えないかもしれない(例: 0.99999と1.00001)。sprintf は指定した桁で丸めてくれるので大丈夫なはずではあるが…

参考: String Float#to_s の変遷

  • Ruby 1.6以前: sprintf("%.10g", f) 相当
  • Ruby 1.8.x: sprintf("%.15g", f) 相当
  • Ruby 1.9.x: sprintf("%.16g", f) 相当

Matrix#determinant など一部の演算は Ruby 1.9.2 で精度が大幅に向上している。 逆に言うと Ruby 1.9.1/1.8.7 以前は精度が良くない場合がある。

その他

../../ruby192/bin/ruby runner.rb

3014 tests, 20253 assertions, 1 failures, 9 errors, 0 skips

本当のErrorらしいけど再現性? -- FuncTestPTS1 はウェブにジョブを投げた結果を使うので、サーバーの調子によってエラーが出ることがある模様 -- でも、FastaFormatのobject seqについてseqを呼んでいる中で落ちている事になっているから、 サーバーのせいではないように思える。

  1) Error:
test_exec(Bio::FuncTestPTS1):
ArgumentError: wrong number of arguments (1 for 0)
    lib/bio/command.rb:563:in `block in callback'
    lib/bio/sequence/generic.rb:16:in `call'
    lib/bio/sequence/generic.rb:16:in `<class:Sequence>'
    lib/bio/sequence/generic.rb:14:in `<module:Bio>'
    lib/bio/sequence/generic.rb:13:in `<top (required)>'
    lib/bio/db/fasta.rb:160:in `seq'
    lib/bio/appl/pts1.rb:145:in `exec'
    test/functional/bio/appl/test_pts1.rb:62:in `test_exec'
  1) Error:
test_exec(Bio::FuncTestPTS1):
ArgumentError: wrong number of arguments (1 for 0)
    lib/bio/command.rb:563:in `block in callback'
    lib/bio/db/fasta.rb:160:in `call'
    lib/bio/db/fasta.rb:160:in `seq'
    lib/bio/appl/pts1.rb:145:in `exec'
    test/functional/bio/appl/test_pts1.rb:62:in `test_exec'

一応これで消えるらしい。(seqでなくaaseqを呼ぶ)

--- a/lib/bio/appl/pts1.rb
+++ b/lib/bio/appl/pts1.rb
@@ -140,9 +140,8 @@ class PTS1
   #
   def exec(query)
     seq = set_sequence_in_fastaformat(query)
-    
     @form_data = {'function' => @function.values.join(''),
-                  'sequence' => seq.seq,
+                  'sequence' => seq.aaseq,
                   'name'     => seq.definition }
 
     result = Bio::Command.post_form(@uri, @form_data)

FastaFormat/sequence generic のテストを確認?

さらにそのほか数回に一回???発生するエラー

  1) Error:
test_call_command_popen_chdir(Bio::FuncTestCommandChdir):
Errno::EBADF: Bad file descriptor
    test/functional/bio/test_command.rb:183:in `close_write'
    test/functional/bio/test_command.rb:183:in `block in test_call_command_popen_chdir'
    lib/bio/command.rb:244:in `block in call_command_popen'
    lib/bio/command.rb:243:in `popen'
    lib/bio/command.rb:243:in `call_command_popen'
    test/functional/bio/test_command.rb:181:in `test_call_command_popen_chdir'

予想:子プロセスが先にstdinをcloseすると、close_writeしようとするpipe endが無意味になっているだけで問題なし??


Update

 README.rdoc                                        |    5 +++--
 RELEASE_NOTES.rdoc                                 |    6 ++++++
 lib/bio/appl/clustalw/report.rb                    |    5 +++--
 lib/bio/db/aaindex.rb                              |   12 +++++++++++-
 .../double_stranded/aligned_strands.rb             |    5 +++++
 setup.rb                                           |    5 +++++
 test/unit/bio/appl/clustalw/test_report.rb         |   19 +++++++++++++++++++
 test/unit/bio/appl/paml/codeml/test_rates.rb       |   12 ++++++------
 test/unit/bio/db/embl/test_sptr.rb                 |    2 +-
 test/unit/bio/db/test_aaindex.rb                   |   15 ++++++++-------
 test/unit/bio/util/test_contingency_table.rb       |   14 +++++++-------


SOAP以外のエラーは後一つ

  5) Error:
test_new(Bio::TestPhyloXML_class_methods):
ArgumentError: invalid byte sequence in US-ASCII
    /Volumes/hornext/bioruby+192/lib/bio/db/phyloxml/phyloxml_parser.rb:279:in `=~'
    /Volumes/hornext/bioruby+192/lib/bio/db/phyloxml/phyloxml_parser.rb:279:in `!~'
    /Volumes/hornext/bioruby+192/lib/bio/db/phyloxml/phyloxml_parser.rb:279:in `initialize'
    /Volumes/hornext/bioruby+192/test/unit/bio/db/test_phyloxml.rb:91:in `new'
    /Volumes/hornext/bioruby+192/test/unit/bio/db/test_phyloxml.rb:91:in `test_new'

3015 tests, 20266 assertions, 0 failures, 5 errors, 0 skips

test/data/phyloxml/phyloxml_examples.xml にはETH Z<C3><BC>rich が含まれる。


--- a/test/unit/bio/db/test_phyloxml.rb
+++ b/test/unit/bio/db/test_phyloxml.rb
@@ -86,6 +86,7 @@ end #end module TestPhyloXMLData
     end
 
     def test_new
+      Encoding.default_external="UTF-8" 
       str = File.read(TestPhyloXMLData.example_xml)
       assert_instance_of(Bio::PhyloXML::Parser,
                          phyloxml = Bio::PhyloXML::Parser.new(str))

で1.9.2は通るけど、、1.8.7で通らなくなるはずだから、バージョンnoをみて分岐か?

次世代シーケンサー対応に向けて

  • SOLiD -- csfastaのコードはある。どのように取り込むか検討中
  • 454 SFF形式対応

クラスを設計 Bio::SFF Bio::SFF::Read

sff = Bio::SFF.new("input.sff")

sff.each_read do |read|
  puts read.name
  puts read.flowgram
  puts read.seq
end

sff.print_fasta       #生データ配列出力
sff.print_clean_fasta   #clipped配列出力

454GS-Jr の1ラン分の12万配列の処理: 9分21秒 遅い!!

  • 高速化に向けた取り組み
    • 重複して作成していたオブジェクトの見直し: 6分42秒
    • unpack時のout bufferの確保: 6分21秒
    • 複数回に分けていたunpackのまとめと上記2点の再度見直し: 7分56秒 遅くなった。天罰か。
    • 引き続き、unpackの徹底的まとめ: 4分44秒

計測環境 CPU, AMD Opteron256 3GHz; MEM, 16GB; Ruby,1.8.7; BioRuby, 1.3.1.

RestrictionEnzyme の高速化

[1]

なんかできた気がする。 [2]

変更前(1.9.2で)

$ time ../ruby192/bin/ruby testRElong.rb  > testRElong.rb.out.192 

real    0m41.612s
user    0m40.832s
sys     0m0.280s

変更後(1.8.7で)

$ time ../ruby187/bin/ruby testRElong.rb  > testRElong.rb.out.patched 

real    0m0.556s
user    0m0.521s
sys     0m0.027s

RubyからRの機能を使う

リリース手順

  • 済:lib/bio/version.rb の変更 (後藤)

エディタで変更後

% git commit lib/bio/version.rb
  • 済:gemspecのアップデート (後藤)
% rake regemspec
% git commit bioruby.gemspec
  • 済:最終テスト (後藤)

複数環境、複数Rubyバージョンでテストする。

% ruby test/runner.rb
  • 済:ChangeLog のアップデート (後藤)

ChangeLog アップデート時に "BioRuby X.X.X is released." のコミットメッセージを入れている。

% git log --stat --summary 3d1dfcc0e13ad582b9c70c7fdde3a89d0bacdc80..HEAD > ChangeLog
% git diff
% git commit ChangeLog

3d1df(以下略)は現時点では固定。

  • 済:tar, gem をパッケージの作成 (後藤)
% rake package
  • 済:パッケージのテスト (後藤、西山)
pkg/ 以下に bioruby-*.tar.gz と bio-*.gem ができるのでインストールできるか確認する。
  • 済:rdocを作成 (後藤)
% rake rdoc

現在は Ruby 1.9.1-pXXX にて作成している。 rdoc/ ディレクトリにrdocができるのでtarするなり何なりする。 Ruby 1.9.2-p0 以降は RDocがアップデートして外見がまったく変わってしまっている。

  • 済:GitHubにプッシュ (後藤)
% git push origin master
  • 済:gitでタグをうつ (後藤)

(1.4.1 の場合の例)

% git tag 1.4.1
  • 済:タグのGitHubへのプッシュ (後藤)

(1.4.1 の場合の例)

% git push origin 1.4.1

RubyForge ログインしてサイトにアップロード。

  • 済:RubyGems.org に gem を置く (後藤)
% gem push bio-1.4.1.gem

新しめのバージョンのgemが必要。 アップロード前にパスワードとか聞かれるかも。

% sudo gem-1.8 install bio
Successfully installed bio-1.4.1
1 gem installed
Installing ri documentation for bio-1.4.1...
Installing RDoc documentation for bio-1.4.1...
% sudo gem-1.9 install bio
Successfully installed bio-1.4.1
1 gem installed
Installing ri documentation for bio-1.4.1...
Installing RDoc documentation for bio-1.4.1...

いやぁ、BioRuby のインストールってほんと簡単で速いな。:)

リンク集

個人用ツール