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个分子的化合物库
网友评论