Open Babel 2.2.0をmacbookにインストール
Open Babel 2.2.0にバージョンがあがったのでインストールをした。ソースから。
同時に、perl,python,rubyのバインディングもコンパイルしてインストールしておく。
WindowsにおいてあるPlutoのファイル群を持ってくる
Windowsで開発しているPlutoをmacでもいじれるようにする。windowsのほうはhg serveと打てばhttpサーバーが立ち上がり、port8000番でアクセスできるようになる。
macのほうはディレクトリを作って初期化してpullしてupdate
mkdir Pluto
cd Pluto
hg init
hg pull http://192.168.XXX.XXX:8000/
hg update
これでOK
plutoでExactMass,分子量,化学式
というわけで、分子量とかformulaとか出せるようにしておいた。
CCC propane
CC ethane
c1ccccc1 benzene
CO methanol
というsmilesを
babel -ismi test.smi -osdf testsdf
で変換したファイルを使った。ExactMassを計算する場合は
>>> from pluto import *
>>> mols = Molecule.readfile("test.sdf")
>>> for mol in mols:
... print mol.exactmass
...
44.062600256
30.046950192
78.046950192
32.026214748
ついでに分子量と化学式も
>>> from pluto import *
>>> mols = Molecule.readfile("test.sdf")
>>> for mol in mols:
... print mol.formula, mol.molwt
...
C3H8 44.09562
C2H6 30.06904
C6H6 78.11184
CH4O 32.04186
openbabelにはPerlMolでいうところのcombineみたいなメソッドがないので反応させるところで悩み中。
ExactMassを求める
そういえば多数の化合物からなるsdfからExactMassってどうやって計算したらいいのかね?と尋ねられて、
うーんそれはね、perlでChemistry::OpenBabelモジュールを使ってだなぁ、ごにょごにょとやればいいんだよ、ほら楽勝だろ。
とか言ってみたんだけど、別にpythonでもいいので書いてみた。
import openbabel as ob
obconv = ob.OBConversion()
obconv.SetInFormat("sdf");
obmol = ob.OBMol()
notatend = obconv.ReadFile(obmol, "test.sdf");
while notatend:
print obmol.GetExactMass()
obmol = ob.OBMol()
notatend = obconv.Read(obmol)
たぶんPlutoだったら
from pluto import *
for mol in Molecule.readfile("test.sdf"):
print mol.ExactMass
と書けるようになるはず。
でも今夜はOBChemTsfmとかいうクラスがねーとかいう謎の深みにはまりかけ、SWIGやらC++にやられっぱなしでそれどころじゃないのであった。
plutoで結合をいじくる
こんな感じで。 titleとかはmol.title("newtitle")にしたほうがいいのかこのままでいいのか決めかねているのでそのうちちゃんと考える。
エタンをエチレンに変えてみた
>>> from pluto import *
>>> mol = Molecule.readstring("CC\tethane")
>>> mol.bond([1,2]).order(2)
>>> mol.title = "ethylene"
>>> mol.writestring()
'C=C\tethylene\n'
あとはmolecule同士のの結合とatomの追加と削除を実装すればよさそう
Pluto : Python module for chemoinformatics
PythonでもPerlMolみたいに化学反応を手軽に扱えるツールが欲しいなぁという欲求があったので書いてみることにした。PybelみたいなOpenBabelのラッパーだけど。
そういえば、PyMOLやPyChemという、それっぽい名前は既に使われてるんですよな。
で、アトムにちなんでみた。
でも、国内しかわからなんだろうな。海外だとastro boyなんでしょ?まぁいいや。
>>> from pluto import *
>>> mol = Molecule.readstring("c1ccccc1O")
>>> mol.title = "phenol"
>>> mol.writestring()
'c1c(cccc1)O\tphenol\n'
とりあえず、readとwriteまではできた。SMARTSのクラスも作ってあるのだけどアトムばっか返ってきてボンドの返し方がよく分からん。
diels-alder反応ぐらいまで書けるようにするとこまではとっととやる。



PLUTO (1)