crem:化学上合理的突变框架

crem的Python项目详细描述


crem-化学上合理的突变

crem是一个开源的python框架,用于使用基于片段的方法生成化学结构。

考虑到相同背景中的片段是可以互换的,其背后的主要思想类似于匹配的分子对。因此,我们可以创建一个可互换片段的数据库,并将其用于生成化学有效结构。

功能:

  1. 生成自定义片段数据库
  2. 结构生成的三种模式:突变、生长、连接
  3. 要考虑替换的上下文半径
  4. 要替换的片段大小和替换片段的大小
  5. 保护原子不受修饰(例如支架保护)
  6. 在片段数据库中以特定的最小频率替换片段
  7. 随机选择替换到指定的数目

安装

将安装几个命令行实用程序来创建片段数据库,并且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

删除输出文件中的重复行并统计碎片上下文对的出现频率。这些(sortuniq)是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_mol2grow_mol2link_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将是一个列表,其中包含生成分子的微笑

贝克马克

愈创木酚
taskSMILES LSTM*SMILES GA*Graph GA*Graph MCTS*CReM
Celecoxib rediscovery1.0000.7321.0000.3551.000
Troglitazone rediscovery1.0000.5151.0000.3111.000
Thiothixene rediscovery1.0000.5981.0000.3111.000
Aripiprazole similarity1.0000.8341.0000.3801.000
Albuterol similarity1.0000.9071.0000.7491.000
Mestranol similarity1.0000.791.0000.4021.000
C11H240.9930.8290.9710.4100.966
C9H10N2O2PF2Cl0.8790.8890.9820.6310.940
Median molecules 10.4380.3340.4060.2250.371
Median molecules 20.4220.380.4320.1700.434
Osimertinib MPO0.9070.8860.9530.7840.995
Fexofenadine MPO0.9590.9310.9980.6951.000
Ranolazine MPO0.8550.8810.920.6160.969
Perindopril MPO0.8080.6610.7920.3850.815
Amlodipine MPO0.8940.7220.8940.5330.902
Sitagliptin MPO0.5450.6890.8910.4580.763
Zaleplon MPO0.6690.4130.7540.4880.770
Valsartan SMARTS0.9780.5520.9900.040.994
Deco Hop0.9960.9701.0000.5901.000
Scaffold Hop0.9980.8851.0000.4781.000
total score17.34114.39817.9839.01117.919

许可证

BSD-3

引文

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
由于java的原因,maven无法运行代码。lang.NoClassDefFoundError:com/fasterxml/jackson/annotation/JsonMerge   Android项目中的java Creative SDK图像编辑器UI   java如何在Android Studio中使用DataOutputStream上传文件并将其他参数传递到web服务器   java倒计时服务打开时崩溃   java将RubyonRails项目转换为JRubyonRails项目   java我的图库意图是不显示图像?为什么?   java如何在春季启动时跳过mongodb/   java@Autowired在Spring中是如何实现的   甲骨文Akka java。util。同时发生的timeoutexception线程池频繁超时   java maven依赖项对spring启动应用程序有何影响?   java Firestore执行复合查询,未截获事件“已修改”   java ItemStreamException:未能初始化读取器,原因是:IllegalStateException:流已初始化。重新开放前关闭   java将空标记解组到集合的新实例中   使用AspectJ的java新手:无法调用aspect   java查找棋类游戏的所有组合   你为什么要这样做and==与Java中的equals方法不一样吗?   如何对使用JavaUUID的代码进行单元测试?