BioRuby
提供:TogoWiki
目次 |
メンバー
- 後藤直久
- 西山智明
- 中村昇太
- 片山俊明
BH10.10 発表・ディスカッション資料
2010/10/20 ワークショップ発表資料(後藤) ファイル:20101020-ngoto-BioRuby.pdf
参考リンク
- Computational science: ...Error : Nature News
- Publish your computer code: it is good enough : Nature News
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 の高速化
なんかできた気がする。 [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
- 済:http://rubyforge.org/projects/bioruby/ RubyForge に gem を置く (後藤)
RubyForge ログインしてサイトにアップロード。
- 済:RubyGems.org に gem を置く (後藤)
% gem push bio-1.4.1.gem
新しめのバージョンのgemが必要。 アップロード前にパスワードとか聞かれるかも。
- 済:http://bioruby.org に tar.gz, gem, rdoc を置いて、index.html を更新する (片山)
- 済:ssh k@portal.open-bio.org して http://bioruby.open-bio.org に上記をコピーする (片山)
- 済:http://raa.ruby-lang.org/list.rhtml?name=bioruby Ruby Application Archive (RAA) を更新する (片山)
- http://news.open-bio.org/news/ にアナウンスする
- bioruby ML にメールでアナウンスする
% 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 のインストールってほんと簡単で速いな。:)