代谢组学

Rdkit学习-No.4-化合物库的设计-基于BRICS

2019-05-07  本文已影响46人  ZeroDesigner

BRICS 算法的实现

环境:

python35
IPython

解释:

Rdkit提供的一种基于片段分子的键合成新化合物的方法。
BRICS provides another method for fragmenting molecules along synthetically accessible bonds

实现:

首先BRICS会从分子中找到自身独特片段结构,其片段上的赝原子会会标记,显示适合某种反应。
BRICS可以产生单个分子的独特片段,也支持产生一系列分子集合的独特片段。
然后可以利用BRICS模块产生一系列的新原子。

代码实现:

ls
show:test_500.smi
#当下目录文件test_500.smi包含500个小分子的smi格式

import rdkit
from rdkit import Chem
from rdkit.Chem import BRICS
import random
#导入rdkit,BRICS,random
help(BRICS)
#查看BRICS帮助文档
smi=Chem.SmilesMolSupplier('test_500.smi')
#读取smi文件

len(smi)
show: 499
#列表第一位是0,刚好500个
m1=smi[1]
sorted(BRICS.BRICSDecompose(m1))
show:['[12*]S(=O)(=O)c1ccc(N)cc1', '[14*]c1cncc(Cl)n1', '[5*]N[5*]']
#将smi中的第2个分子文件赋值给m1,并且使用BRICS找到分子的独特片段
allfrag=set()
#创建一个集合,命名为allfrag
for i in smi:
    single=BRICS.BRICSDecompose(i)
    allfrag.update(single)
#在smi中的每一个分子,都将其分解,并且储存在allfrag中,由于集合为无序不重复,所以allfrag中没有重复的片段

len(allfrag)
show: 354
#查看集合中元素个数
 sorted(allfrag)[:5]
show:
['CN1CCN(C2=Nc3ccccc3Oc3ccc(Cl)cc32)CC1',
 'CN1C[C@@H]2c3ccccc3Oc3ccc(Cl)cc3[C@H]2C1',
 'COC1=C(OC)C(=O)C(CCCCCCCCCCO)=C(C)C1=O',
 'C[C@]12CC[C@H]3[C@@H](CC=C4C[C@@H](O)CC[C@@]43C)[C@@H]1CCC2=O',
 'C[C@]12CC[C@H]3[C@@H](CCC4=C(O)C(=O)CC[C@@]43C)[C@@H]1CCC2=O']
#对集合allfrag进行转化,输出前5

random.seed(100)
#生成随机数种子
fragms = [Chem.MolFromSmiles(x) for x in sorted(allfrag)]
ms = BRICS.BRICSBuild(fragms)
#ms为一个BRICS合成的object
ms
show:<generator object BRICSBuild at 0x...>

new = [next(ms) for x in range(10)]
#产生10个分子

for i in new:
    new.UpdatePropertyCache(strict=False)
#纠正不正确的化学键


Chem.MolToSmiles(new[1],True)
show: 'C=C[C@]1(C)C[C@@H](OCN2CNC3C(=O)NC(N)NC32)[C@]2(C)[C@H](C)CC[C@]3(CCC(=O)[C@H]32)[C@@H](C)[C@@H]1O'

#查看生成的分子

结果:

生成了一个包含10个分子的化合物库

上一篇 下一篇

猜你喜欢

热点阅读