RDKitで配座を発生させてエネルギーを計算してみる

RDKit2012_09はしばらくβ版で確認していましたが正式版がリリースされました。

今回はMCSを実装した点が今までと変わった点のように思います。

残念ながらまだwin64bit用のバイナリは無いようです。取りあえず自分のMBAではビルドもできて動作も確認できました。

MCS関連はまた今度試すとして今回は、SDFから配座を発生させて、UFFによる最適化後のエネルギーを計算させるスクリプトを書きました。


#! usr/bin/python 
import sys 
from rdkit import Chem 
from rdkit.Chem import AllChem 
sdf = Chem.SDMolSupplier( sys.argv[1] )
mols = [ Chem.AddHs(m) for m in sdf ] 
out = Chem.SDWriter("genconf.sdf")
 
for mol in mols:
    ids = AllChem.EmbedMultipleConfs(mol, numConfs = 10, clearConfs = True,
          pruneRmsThresh = 0.5)
     for cid in ids:
         AllChem.UFFOptimizeMolecule(mol, maxIters = 1000 ,confId = cid)
         ff = AllChem.UFFGetMoleculeForceField(mol, confId = cid)
         ff.Minimize()
         energy=ff.CalcEnergy()
         mol.SetProp("UFF_Energy", "%s"%energy)
         mol.SetProp("confId", "%s" % cid)
         out.write(mol,confId = cid)
 
out.close()

AllChem.EmbedMultipleConfsで分子に対して10個の配座を発生させます。

AllChem.UFFOptimizeMoleculeにて構造を最適化します(1000回に設定)0なら最適化が終わっていて

1、がかえってくる場合は1000以上の数値を設定した方がいいと思われますが今回次のステップにはここのクライテリアを抜いてしまいました。

ff = AllChem.UFFGetMoleculeForceField(mol, confId = cid)
ff.Minimize()
energy=ff.CalcEnergy()
にて最適化後のエネルギーを受け取ります。

今回は出力を全部にしたのですが、最低のものだけを取り出したいのです、、、

リストのminでは数値が出てくるけどインデックスがとれないのでどうしたらいいんだろう。

list.index(min_energy)で行けそうだから後で追加しよう。

Published by iwatobipen

I'm medicinal chemist in mid size of pharmaceutical company. I love chemoinfo, cording, organic synthesis, my family.

Leave a comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.