RDKit: Moleculeに対する基礎的な操作

By | 2015年2月26日


今回は、Moleculeに対する基礎的な操作を行ってみます。
まずは、以下のモジュールと分子を読み込みます。

> python
>>> from rdkit import Chem
>>> mol_data = file('acetaminofen.mol','r').read()
>>> mol = Chem.MolFromMolBlock(mol_data)

原子数、結合の数、そして重原子数の取得

>>> nAtom = mol.GetNumAtoms()
>>> nBond = mol.GetNumBonds()
>>> nHAtom = mol.GetNumHeavyAtoms()
>>> print "nAtom=",nAtom
>>> print "nBond=",nBond
nAtom= 11
nBond= 11
nHAtom= 11

Conformer情報の取得

配座情報を取得してみます。

>>> confs = mol.GetConformers()
>>> print "nConfs=",len(confs)
>>> conf = confs[0]
>>> for idx in range(conf.GetNumAtoms()):
...     pos = conf.GetAtomPosition(idx)
...     print "  %2d" % idx,
...     print " %8.3f%8.3f%8.3f" % (pos.x,pos.y,pos.z)
nConfs= 1
   0     2.866  -2.595   0.000
   1     4.598   1.405   0.000
   2     2.866   1.405   0.000
   3     2.866   0.405   0.000
   4     2.000  -0.095   0.000
   5     3.732  -0.095   0.000
   6     2.000  -1.095   0.000
   7     3.732  -1.095   0.000
   8     2.866  -1.595   0.000
   9     3.732   1.905   0.000
  10     3.732   2.905   0.000

分子の直列化

cPickleを使えばPythonのオブジェクトを直列化することができます。
ここでは、分子情報の入ったmolを直列化しています。
dumpsの第二引数は、直列化のためのプロトコルを示します。
バージョン0より2の方が、サイズが小さくなることがわかります。

>>> import cPickle
>>> pkl1 = cPickle.dumps(mol,0)
>>> print len(pkl1)
1100
>>> pkl2 = cPickle.dumps(mol,2)
>>> print len(pkl2)
318

直列化されたmolを復元してみます。

>>> molpkl1 = cPickle.loads(pkl1)
>>> print Chem.MolToSmiles(molpkl1)
CC(=O)Nc1ccc(O)cc1
>>> molpkl2 = cPickle.loads(pkl2)
>>> print Chem.MolToSmiles(molpkl2)
CC(=O)Nc1ccc(O)cc1

次は、molをbinaryに変換して、復元してみます。

>>> bina = mol.ToBinary()
>>> print len(bina)
318
>>> molbina = Chem.Mol(bina)
>>> print Chem.MolToSmiles(molbina)
CC(=O)Nc1ccc(O)cc1

binaryが一番サイズが小さいことが分かります。


利用したソフトウェア:
RDKit_2014_09_2

APIの詳細:
Mol
Conformer