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

2021-02-04 14:50:20 浏览数 (1)

###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个分子的化合物库

0 人点赞