プログラミングRuby―達人プログラマーガイド

ProductName プログラミングRuby―達人プログラマーガイド
デビット トーマス
ピアソンエデュケーション / ?円 ( 2001-09 )


買ったけど読む暇がない

Chemrubyネタ x 2

早速0.9.3にあげて描画じゃ。


irb(main):001:0> require 'RMagick'
=> true
irb(main):002:0> require 'chem'
=> true
irb(main):003:0> mol = Chem.open_mol("diene.mol")
...
irb(main):004:0> mol.save("rbtest.png")
=> [rbtest.png PNG 370x370 DirectClass 16-bit 8kb]

ヘテロも出るが枠もでる(140x140にリサイズした)。

rbtest2

あと、SDF読み込みのときに

irb(main):005:0> sdf = Chem.open_mol("test.sdf")
=> #<Chem::MDL::SdfParser:0xbf189a24 @input=#<File:test.sdf>>
となり、読み込み処理が行なわれないようです。sdfが良くないのか?はたまたメソッドか?

あんま、エラー報告ばっかりしてもあらーんな感じなので、もうちょいまともな報告がでしたいなぁと。と、突然rubyも勉強しようと思い立って、近所の本屋に走ってrubyの本を買ってきたゾ(でもコレしかなかった)。

ProductName Ruby プログラミング基礎講座
広瀬 雄二
技術評論社 / 2079円 ( 2006-01-13 )


ルビイストへの半歩くらいを踏み出したかな?

週末かけてこの本は大体読んじゃったけど、これ以降は何を読んで勉強するのがいいのでしょうか?

CDKで吐かせたmolはChemrubyでの構造描画が?だヨ

ココのエントリでの構造描画は流れ的にChemrubyで描くべきなんだけど。

そもそも画像描画のステップには

  1. 2次元座標を保持したオブジェクトの生成
  2. 画像描画

が必要で、smilesのような座標情報のない形での構造情報は、何かで構造立ち上げしないといけない。chemrubyは立ち上げ処理できないらしいので、この作業は他の何かに任せるわけだ。 ちなみに、perlmolは芳香環が含まれない場合には、座標のついた形でmol形式に保存してくれるんだが、座標があったりなかったりとかはかなり使いにくいし、普通芳香環のない構造扱うことってあんまないでしょ?

な感じなので、CDKを使うのがデフォルト。

で、CDKで"OC=C-C=C"をmol形式にするとこうなる

  CDK

5  4  0  0  0  0  0  0  0  0999 V2000
    0.0000    0.0000    0.0000 O   0  0  0  0  0  0  0  0  0  0  0  0
    1.2990   -0.7500    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
    2.5981   -0.0000    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
    3.8971   -0.7500    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
    5.1962   -0.0000    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
  2  1  1  0  0  0  0 
  3  2  2  0  0  0  0 
  4  3  1  0  0  0  0 
  5  4  2  0  0  0  0 
M  END

うまく座標が割り当てられてますな。これをchemrubyを使ってpngに変換するとこうなる

irb(main):001:0> require 'RMagick' => true irb(main):002:0> require 'chem' => true irb(main):003:0> mol = Chem.open_mol("diene.mol") irb(main):004:0> mol.save("rbtest.png")

rbtest

水酸基の情報が落ちてしまったヨ。

Chemrubyで構造描画 PNGに出力だ!

Chemruby web site初心者てのが出来てたので、初心者らしくRMagickを使ったテストをしてみたぞ。

をを~ pngで出力されるようになっとる !

早速、視覚化のサンプルもpngで落としてみることに

require 'RMagick' require 'chem' mol = Chem.open_mol("mol/C00019.mol") query = Chem.open_mol("mol/C00147.mol") m = mol.match_by_ullmann(query) matched_nodes = m.inject([]){|ret, i| ret.push(mol.nodes[i])} mol.edges.each do |bond, atom1, atom2| bond.color = [1, 0, 0] if matched_nodes.include?(atom1) and matched_nodes.include?(atom2) end mol.nodes.each{|node| node.visible = true unless node.element == :C} mol.save("chemrubytest.png") mol.save("chemrubytest.pdf")

でてきたpngはこれだ。

result

まだ、色はつかないのね。と、描画位置のバランスと、フォントの大きさとかちょっと気になる。結局そういうのは地道に綺麗にしていくだけなんで、個人的には大して気にならないが、最終的にはCDKよりは綺麗な絵が出力されるようになることを期待しますヨ。

あとsdf2png欲しい。まぁこれは自分で書けばいいのだが。よし、rubyの勉強も兼ねて書いてみよう。

MOSSというものを知った

ChemRubyのサイトで、MoSS - Molecular Substructure Minerというものがあることを知ったので、早速論文読んでみた。(Triposがかんでるのか、、、)

MoSSにヒストグラムくっつければClassPharmerになっちゃうんじゃないのん?みたいな認識でよいのか?あとベンチマークが速いのか遅いのか今ひとつわからんかった。他に興味あることは、グラフから部分構造あるなしのフィンガープリントつくれたりするんだろうか?とか。

今度、実際に動かしてみよう。

Chemrubyで構造描画(2)

Chemrubyうまくいかないとか書いたが、視覚化の通りにopen_molしたらすんなりいけた。

require 'chem'

molecule = Chem.open_mol("mol/C01455.mol")
molecule.save("test.smi")

うーん、open_molとparseの違いがわからん。perlだったらdumpしてやればいいんだが、rubyではどうやるんだろうか?

ついでに、色付けもやってみた。

require 'chem'

mol = Chem.open_mol("mol/C00019.mol")
query = Chem.open_mol("mol/C00147.mol")
m = mol.match_by_ullmann(query)
matched_nodes = m.inject([]){|ret, i| ret.push(mol.nodes[i])}
mol.edges.each do |bond, atom1, atom2|
  bond.color = [1, 0, 0] if matched_nodes.include?(atom1)
 and matched_nodes.include?(atom2)
end
mol.nodes.each{|node| node.visible = true unless node.element == :C}
mol.save("hello.pdf")

test2.rbで保存して、ruby test2.rbで実行。出来たのがhello.pdf

ダブルボンドとかはリングの内側に入って欲しいが、ナカナカ良い。

で、RMagickも入れたから、pngの出力を試そうとpngtest.rbというスクリプトを書いて

require 'chem'

mol = Chem.open_mol("mol/C00019.mol")
mol.save("hello.png")

ruby pngtest.rbで実行したところエラー。

ruby pngtest.rb 
/usr/local/lib/ruby/site_ruby/1.8/chem/writer.rb:41:
in `save': NotImplementedError (NotImplementedError)
        from pngtest.rb:4

pngに限らず、smiとかpdbでも同じエラーが出る。

Chemrubyでコード書き

一昨日、昨日と滑りに行ったら、風邪をこじらせて現在ボロボロ且つ療養中。昨晩、超悪寒発生で、夜中に歯がカタカタ鳴ったのは4,5年ぶりでなかろうか。

というわけで、昨日寝すぎて蒲団に潜っていても寝れないのでノートパソコンを持ち出し、chemrubyでコードを書いてみることに。

require 'chem' molecule = Chem.parse_smiles("c1ccccc1") molecule.save("test.mol")

こんな感じでコード書けばいいの?みたいな感じで。でmoltest.rbという名前で保存したら実行。

ruby moltest.rb /usr/local/lib/ruby/site_ruby/1.8/chem/db/types/type_mdl.rb:22:in `save': undefined method `save_as_mdl' for # (NoMethodError) from /usr/local/lib/ruby/site_ruby/1.8/chem/writer.rb:43:in `save' from moltest.rb:5

メソッドが定義されていないとかでよるヨ。require だけじゃ駄目なのか?うーんわかんね。rubyの本買おうっと。

Chemrubyで構造描画

chemrubyのグラフィックライブラリの充実度わからんとか書いたけど、視覚化が新たに追加されてました。

ナニゲにCDKより綺麗だ!

ケミストのインターフェースは大概SARテーブル(Excel)だから、構造付きのテーブルの見栄えとかはかなり気を使うとこなんで、綺麗な構造は綺麗なおねえぇさん以上に素敵。しかも、色付け簡単そうなのもイイ。実際、SARのときに母骨格の色分けとか重要だったりするからかなり惹かれ気味。

というわけで、これを機にrubyもちょっと勉強しようかナァ。(ruby on railsも気になるし)。

© kzfm 2003-2021