crem:化学上合理的突变框架
crem的Python项目详细描述
crem-化学上合理的突变
crem是一个开源的python框架,用于使用基于片段的方法生成化学结构。
考虑到相同背景中的片段是可以互换的,其背后的主要思想类似于匹配的分子对。因此,我们可以创建一个可互换片段的数据库,并将其用于生成化学有效结构。
功能:
- 生成自定义片段数据库
- 结构生成的三种模式:突变、生长、连接
- 要考虑替换的上下文半径
- 要替换的片段大小和替换片段的大小
- 保护原子不受修饰(例如支架保护)
- 在片段数据库中以特定的最小频率替换片段
- 随机选择替换到指定的数目
安装
将安装几个命令行实用程序来创建片段数据库,并且crem
模块将在python导入中可用以生成结构。
来自pypi包
pip install crem
从存储库手动操作
git clone https://github.com/DrrDom/crem cd crem python3 setup.py sdist bdist_wheel pip install dist/crem-0.1-py3-none-any.whl
卸载
pip uninstall crem
依赖关系
crem
需要rdkit>=2017.09
。要运行愈创木酚测试,应安装guacamol
。
生成片段数据库
输入结构的碎片化:
fragmentation -i input.smi -o frags.txt -c 32 -v
将片段转换为给定半径的核心和上下文的标准表示:
frag_to_env -i frags.txt -o r3.txt -r 3 -c 32 -v
删除输出文件中的重复行并统计碎片上下文对的出现频率。这些(sort
和uniq
)是bash
实用程序,但是由于win10是linux友好的,因此win用户执行它们不应该是个大问题
sort r3.txt | uniq -c > r3_c.txt
创建数据库并将文件导入数据库表
env_to_db -i r3_c.txt -o fragments.db -r 3 -c -v
对于每个半径,应执行最后三个步骤。所有表都可以存储在同一个数据库中。
结构生成
从主模块导入必要的功能
fromcrem.cremimportmutate_mol,grow_mol,link_molsfromrdkitimportChem
创建molecute并变异它。只有一个重原子将被取代。默认半径为3。
m=Chem.MolFromSmiles('c1cc(OC)ccc1C')# toluenemols=list(mutate_mol(m,db_name='replacements.db',max_size=1))
输出示例
['CCc1ccc(C)cc1', 'CC#Cc1ccc(C)cc1', 'C=C(C)c1ccc(C)cc1', 'CCCc1ccc(C)cc1', 'CC=Cc1ccc(C)cc1', 'CCCCc1ccc(C)cc1', 'CCCOc1ccc(C)cc1', 'CNCCc1ccc(C)cc1', 'COCCc1ccc(C)cc1', ... 'Cc1ccc(C(C)(C)C)cc1']
在分子中加入氢到突变氢以及
mols=list(mutate_mol(Chem.AddHs(m),db_name='replacements.db',max_size=1))
输出
['CCc1ccc(C)cc1', 'CC#Cc1ccc(C)cc1', 'C=C(C)c1ccc(C)cc1', 'CCCc1ccc(C)cc1', 'Cc1ccc(C(C)C)cc1', 'CC=Cc1ccc(C)cc1', ... 'COc1ccc(C)cc1C', 'C=Cc1cc(C)ccc1OC', 'COc1ccc(C)cc1Cl', 'COc1ccc(C)cc1CCl']
生长分子。只能更换氢。不应显式地添加氢。
mols=list(grow_mol(m,db_name='replacements_sc2.db'))
输出
['COc1ccc(C)c(Br)c1', 'COc1ccc(C)c(C)c1', 'COc1ccc(C)c(Cl)c1', 'COc1ccc(C)c(OC)c1', 'COc1ccc(C)c(N)c1', ... 'COc1ccc(CCN)cc1']
创建第二个分子并将其与甲苯连接
m2=Chem.MolFromSmiles('NCC(=O)O')# glycinemols=list(link_mols(m,m2,db_name='replacements.db'))
输出
['Cc1ccc(OCC(=O)NCC(=O)O)cc1', 'Cc1ccc(OCCOC(=O)CN)cc1', 'COc1ccc(CC(=N)NCC(=O)O)cc1', 'COc1ccc(CC(=O)NCC(=O)O)cc1', 'COc1ccc(CC(=S)NCC(=O)O)cc1', 'COc1ccc(CCOC(=O)CN)cc1']
可以改变链接器的大小,并指定链接片段中两个附着点之间的距离。这些函数中还有许多其他参数可用,请查看它们的docstrings以获取详细信息。
多处理
所有的函数都有一个参数ncores
,并且可以并行地在一个分子中进行多重替换。如果你想同时处理几个分子,你必须自己写代码。但是,所描述的函数是生成器,不能与multiprocessing
模块一起使用。因此,产生了三个互补函数mutate_mol2
、grow_mol2
和link_mols2
。它们返回带有结果的列表,可以对其进行pickle并与multiprocessing.Pool
或其他工具一起使用。
示例:
frommultiprocessingimportPoolfromfunctoolsimportpartialfromcrem.cremimportmutate_mol2fromrdkitimportChemp=Pool(2)input_smi=['c1ccccc1N','NCC(=O)OC','NCCCO']input_mols=[Chem.MolFromSmiles(s)forsininput_smi]res=list(p.imap(partial(mutate_mol2,db_name='replacements.db',max_size=1),input_mols))
res
将是一个列表,其中包含生成分子的微笑
贝克马克
愈创木酚
task | SMILES LSTM* | SMILES GA* | Graph GA* | Graph MCTS* | CReM |
---|---|---|---|---|---|
Celecoxib rediscovery | 1.000 | 0.732 | 1.000 | 0.355 | 1.000 |
Troglitazone rediscovery | 1.000 | 0.515 | 1.000 | 0.311 | 1.000 |
Thiothixene rediscovery | 1.000 | 0.598 | 1.000 | 0.311 | 1.000 |
Aripiprazole similarity | 1.000 | 0.834 | 1.000 | 0.380 | 1.000 |
Albuterol similarity | 1.000 | 0.907 | 1.000 | 0.749 | 1.000 |
Mestranol similarity | 1.000 | 0.79 | 1.000 | 0.402 | 1.000 |
C11H24 | 0.993 | 0.829 | 0.971 | 0.410 | 0.966 |
C9H10N2O2PF2Cl | 0.879 | 0.889 | 0.982 | 0.631 | 0.940 |
Median molecules 1 | 0.438 | 0.334 | 0.406 | 0.225 | 0.371 |
Median molecules 2 | 0.422 | 0.38 | 0.432 | 0.170 | 0.434 |
Osimertinib MPO | 0.907 | 0.886 | 0.953 | 0.784 | 0.995 |
Fexofenadine MPO | 0.959 | 0.931 | 0.998 | 0.695 | 1.000 |
Ranolazine MPO | 0.855 | 0.881 | 0.92 | 0.616 | 0.969 |
Perindopril MPO | 0.808 | 0.661 | 0.792 | 0.385 | 0.815 |
Amlodipine MPO | 0.894 | 0.722 | 0.894 | 0.533 | 0.902 |
Sitagliptin MPO | 0.545 | 0.689 | 0.891 | 0.458 | 0.763 |
Zaleplon MPO | 0.669 | 0.413 | 0.754 | 0.488 | 0.770 |
Valsartan SMARTS | 0.978 | 0.552 | 0.990 | 0.04 | 0.994 |
Deco Hop | 0.996 | 0.970 | 1.000 | 0.590 | 1.000 |
Scaffold Hop | 0.998 | 0.885 | 1.000 | 0.478 | 1.000 |
total score | 17.341 | 14.398 | 17.983 | 9.011 | 17.919 |
许可证
BSD-3