PybelはOpenBabelの様々なクラス・メソッドの中でよく使う物をPython用に定義したお便利環境です。
詳細は
http://openbabel.org/wiki/Using_OpenBabel_from_Python#Pybel
http://openbabel.org/pybel.html
例えばSDファイルを読み込んでMolに変換して構造を表示するのは簡単。
from pybel import *
inSdFilePath = "test.sdf"
mols = readfile("sdf", inSdFilePath)
for mol in mols:
mol.make3D()
mol.draw() #OASAがインストールされていれば構造を表示する
2010年2月27日土曜日
PythonでOpenBabelを使う ~SDファイル
とりあえず基本的なやつ。
openbabeltest.py
# coding: shift-jis
from openbabel import *
def ReadSdFile(inSdFilePath="test.sdf"):
#inSdFilePath = "test.sdf"
conv = OBConversion()
answer = conv.SetInAndOutFormats("sdf","can")
mol = OBMol()
end_flag = conv.ReadFile(mol,inSdFilePath)
smiles = []
while end_flag:
smile = conv.WriteString(mol).split('\t')[0] # Smiles文字のみをSplitする
smiles.append(smile)
answer = mol.Clear()
end_flag = conv.Read(mol)
return smiles
# main
smilesStrigList = ReadSdFile()
for smiles in smilesStrigList:
print smiles
コマンドプロンプト
I:\Python>python openbabeltest.py
ClCC(=O)NC1=C(SCC1)C(=O)OC
COC(=O)C1=C(CCS1)NC(=O)c1ccccc1
COC(=O)C1=C(CCS1)NC(=O)c1cccc(C)c1
COC(=O)C1=C(CCS1)NC(=O)c1ccccc1Cl
COC(=O)C1=C(CCS1)NC(=O)c1ccc(C)c(C)c1
PythonでOpenBabelを使う
TIBCO Spotfire3.1が欧米でリリースされ、日本国内でも近々リリースされると思います。
今回のリリースでの目玉はTextView上でのスクリプトの実行が可能になり、ガイドっぽいことができるようになるのとHeatMapのサポート、Bar&LineChartなどいろいろありますが(詳細)、地味ですがIronPythonのScriptのサポートがあります。
これを機にちょっとPythonを勉強しておこうと思って、環境を作ります。詳細はこちら。
今回のリリースでの目玉はTextView上でのスクリプトの実行が可能になり、ガイドっぽいことができるようになるのとHeatMapのサポート、Bar&LineChartなどいろいろありますが(詳細)、地味ですがIronPythonのScriptのサポートがあります。
これを機にちょっとPythonを勉強しておこうと思って、環境を作ります。詳細はこちら。
- Python2.6をインストール http://www.python.org/download/
- 最新版は3.1なのですがOpenBabelで構造表示に使うPILとOASAが2.6までしか対応していないので。
- Pythonのパスを設定
- OpenBabel GUIをインストール
- OpenBabelのパスを通す
- PATHにI:\Program Files\OpenBabel-2.2.3を追加
- 環境変数「BABEL_DATADIR」をセット
- 例えば、set BABEL_DATADIR=I:\Program Files\OpenBabel-2.2.3な感じ
- OpenBabel Python bindingsをインストール
- PILとOASAをインストール、いずれもPython2.6用を入れます
- OpenBabelのWebにあるテストスクリプトを動かしてみる
==============================
*** Open Babel Error in OpenBabel::OBForceFieldMMFF94::ParseParamFile
Cannot open parameter file
こんなエラーが出る場合は、環境変数のBABEL_DATADIRが正しくセットされていない時です。コマンドプロンプトでecho %BABEL_DATADIR%とやってみてOpenBabelのGUIのインストールフォルダーが出ることを確認しましょう。
2010年2月21日日曜日
Haskell入門その4
再帰処理
---------------------------------------
-- Listの長さを取得する
---------------------------------------
mylength :: [a] -> Integer -- 型宣言
mylength [] = 0 -- リストの最後の定義
mylength (x:xs) = 1 + mylength xs -- 先頭以外のリストを再帰計算
{-
x=最初の要素、xs=残りのリスト
head :: [a] -> a
head (x:xs) = x
tail :: [a] -> [a]
tail (x:xs) = xs
使い方
I:\haskell>ghci
Prelude> :l test012.hs
*Main> mylength [1..999]
999
-}
ちょっとわかってきたような気になってきたことが示唆される
---------------------------------------
-- Listの長さを取得する
---------------------------------------
mylength :: [a] -> Integer -- 型宣言
mylength [] = 0 -- リストの最後の定義
mylength (x:xs) = 1 + mylength xs -- 先頭以外のリストを再帰計算
{-
x=最初の要素、xs=残りのリスト
head :: [a] -> a
head (x:xs) = x
tail :: [a] -> [a]
tail (x:xs) = xs
使い方
I:\haskell>ghci
Prelude> :l test012.hs
*Main> mylength [1..999]
999
-}
ちょっとわかってきたような気になってきたことが示唆される
2010年2月20日土曜日
Haskell入門その3
module Main
where
import IO
import Random
main = do
hSetBuffering stdin LineBuffering
num <- randomRIO (1::Int, 100)
putStrLn "I'm thinking of a number between 1 and 100"
doGuessing num
doGuessing num = do
putStrLn "Enter your guess:"
guess <- getLine
let guessNum = read guess
if guessNum < num
then do putStrLn "Too low!"
doGuessing num
else if read guess > num
then do putStrLn "Too high!"
doGuessing num
else do putStrLn "You Win!"
これをコンパイルしてみた
I:\haskell>ghc --make test011.hs -o test011.exe
なんじゃ、このバカでかいファイルは!?
Haskell入門その2
回帰
{----------------------------
N!
-----------------------------}
my_factorial 1 = 1
my_factorial n = n * my_factorial (n-1)
{----------------------------
べき乗
a^b
-----------------------------}
my_exponent a 1 = a
my_exponent a b = a * my_exponent a (b-1)
{----------------------------
フィナボッチ数列
n番目のフィナボッチ数を求める
-----------------------------}
fina 1 = 1
fina 2 = 1
fina n = fina (n-2) - fina (n-1)
{----------------------------
a : b
-----------------------------}
mult a 0 = 0
mult a b = a + mult a (b-1)
GHCIからhsファイルを読み込む
I:\haskell>ghci
Prelude> :l test008.hs
*Main>
{----------------------------
N!
-----------------------------}
my_factorial 1 = 1
my_factorial n = n * my_factorial (n-1)
{----------------------------
べき乗
a^b
-----------------------------}
my_exponent a 1 = a
my_exponent a b = a * my_exponent a (b-1)
{----------------------------
フィナボッチ数列
n番目のフィナボッチ数を求める
-----------------------------}
fina 1 = 1
fina 2 = 1
fina n = fina (n-2) - fina (n-1)
{----------------------------
a : b
-----------------------------}
mult a 0 = 0
mult a b = a + mult a (b-1)
GHCIからhsファイルを読み込む
I:\haskell>ghci
Prelude> :l test008.hs
*Main>
Haskell入門その1
test001.hs
module BMI where
type BMI = Double
stdBMI :: BMI
stdBMI = 22.0
type Height = Double
type Weight = Double
bmi :: (Height, Weight) -> BMI
bmi (h,w) = w / (h ^ 2)
コマンドプロンプト
I:\haskell>ghci test002.hs
GHCi, version 6.12.1: http://www.haskell.org/ghc/ :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
Loading package ffi-1.0 ... linking ... done.
[1 of 1] Compiling BMI ( test002.hs, interpreted )
Ok, modules loaded: BMI.
*BMI> bmi(1.71,79.5)
27.18785267261722
う~む、まだ楽しくない
module BMI where
type BMI = Double
stdBMI :: BMI
stdBMI = 22.0
type Height = Double
type Weight = Double
bmi :: (Height, Weight) -> BMI
bmi (h,w) = w / (h ^ 2)
コマンドプロンプト
I:\haskell>ghci test002.hs
GHCi, version 6.12.1: http://www.haskell.org/ghc/ :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
Loading package ffi-1.0 ... linking ... done.
[1 of 1] Compiling BMI ( test002.hs, interpreted )
Ok, modules loaded: BMI.
*BMI> bmi(1.71,79.5)
27.18785267261722
う~む、まだ楽しくない
登録:
投稿 (Atom)
