一、引入所需库

#! /usr/bin/python

# coding: utf-8

from rdkit import Chem

from rdkit.Chem import AllChem

from rdkit.Chem import Draw

from rdkit.Chem import Recap

from rdkit.Chem import BRICS

二、保护原子

以酰胺反应为例 , 反应物分子1中含有一个 - COOH , 另一个分子中含有两个 - NH 。 之后定义反应模板 , 然后让其反应 。

acid = Chem.MolFromSmiles('CC(=O)O')

base = Chem.MolFromSmiles('CC(=O)NCCN')

mols = [acid, base]

img = Draw.MolsToGridImage(

mols,

molsPerRow=2,

subImgSize=(200, 200),

legends=['acid', 'base']

)

img.save('/Users/zeoy/st/drug_development/st_rdcit/img/mol33.jpg')

反应物如下图所示:

rxn = AllChem.ReactionFromSmarts('')

rxn = AllChem.ReactionFromRxnFile(

'/Users/zeoy/st/drug_development/st_rdcit/2d.rxn')

ps = rxn.RunReactants(acid, base)

print('the num of reactions', len(ps))

for reaction in ps:

reactions_smi = Chem.MolToSimiles(reaction)

print('this reaction is', reactions_smi)

三、把分子切成片段

3.1 Recap方法

Recap方法通过模拟实验室中常用的化学反应,将反应分子分解成功合理的片段

Recap 方法返回的是类似于node tree结构的数据。

注:分子片段的Smiles前面通常会加一个* 如 ‘*c1ccccc1’

m = Chem.MolFromSmiles('c1ccccc1OCCOC(=O)CC')

hierarch = Recap.RecapDecompose(m)

type(hierarch)

# 层次结构的原始分子

print('smi=', hierarch.smiles) # smi= CCC(=O)OCCOc1ccccc1

# 每个节点使用smiles键控的字典跟踪其子节点

ks = hierarch.children.keys()

print(sorted(ks))

# ['*C(=O)CC', '*CCOC(=O)CC', '*CCOc1ccccc1', '*OCCOc1ccccc1', '*c1ccccc1']

3.2 BRICS方法

RDKit 还提供了另一种把分子切成片段的方法——BRICS方法。 BRICS方法主要是根据可合成的的键对分子进行切断,因此其返回的数据结构是来自于该分子的不同分子片段, 虚拟原子(*)是告诉我们是如何切断的。

对下图中的分子进行BRICS分解

smi = 'C=CC(=O)N1CCC(CC1)C2CCNC3=C(C(=NN23)C4=CC=C(C=C4)OC5=CC=CC=C5)C(=O)N'

m = Chem.MolFromSmiles(smi)

Draw.MolToImageFile(

m,

"/Users/zeoy/st/drug_development/st_rdcit/img/mol34.jpg",

size=(600, 400),

legend='zanubrutinib(C=CC(=O)N1CCC(CC1)C2CCNC3=C(C(=NN23)C4=CC=C(C=C4)OC5=CC=CC=C5)C(=O)N)'

)

frags = (BRICS.BRICSDecompose(m))

print(frags)

mols = []

for fsmi in frags:

mols.append(Chem.MolFromSmiles(fsmi))

img = Draw.MolsToGridImage(

mols,

molsPerRow=3,

subImgSize=(200, 200),

legends=['' for x in mols]

)

img.save('/Users/zeoy/st/drug_development/st_rdcit/img/mol35.jpg')

四、组合分子片段–BRICS方法

以上述片段进行BRICS组合产生分子

newms = BRICS.BRICSBuild(mols)

newms = list(newms)

print('新分子数:', len(newms)) # 新分子数: 76(含少量化学结构不合理的结构)

mols = [newms[0], newms[1], newms[2]]

img = Draw.MolsToGridImage(

mols,

molsPerRow=3,

subImgSize=(200, 200),

legends=['' for x in mols]

)

可视化前3个结构

img.save('/Users/zeoy/st/drug_development/st_rdcit/img/mol36.jpg')

五、自定义片段生成方法

除了上面提到的自动片段分解方法,RDKit提供了更灵活的函数可根据用户定义的键进行切断产生片段。

比如对所有环上的原子和非环上的原子组成的键进行进行切断。

smi = 'C=CC(=O)N1CCC(CC1)C2CCNC3=C(C(=NN23)C4=CC=C(C=C4)OC5=CC=CC=C5)C(=O)N'

m = Chem.MolFromSmiles(smi)

submol = m.GetSubstructMatches(Chem.MolFromSmarts('[!R][R]'))

print(submol) # ((2, 4), (25, 22), (25, 26), (32, 15))

bonds_id = [m.GetBondBetweenAtoms(x, y).GetIdx() for x, y in submol]

frags = Chem.FragmentOnBonds(m, bonds_id)

print('type=', type(frags)) # type=

Draw.MolToImageFile(

m,

"/Users/zeoy/st/drug_development/st_rdcit/img/mol36.jpg",

)

smis = Chem.MolToSmiles(frags)

smis = smis.split('.')

mols = []

for smi in smis:

mols.append(Chem.MolFromSmiles(smi))

img = Draw.MolsToGridImage(

mols,

molsPerRow=3,

subImgSize=(200, 200),

legends=['' for x in mols]

)

img.save("/Users/zeoy/st/drug_development/st_rdcit/img/mol37.jpg")

原文链接:https://blog.csdn.net/qq_36801966/article/details/107053474

python化学模拟_rdkit 化学反应高级功能相关推荐

  1. Python爬虫之selenium高级功能

    Python爬虫之selenium高级功能 原文地址 表单操作 元素拖拽 页面切换 弹窗处理 表单操作 表单里面会有文本框.密码框.下拉框.登陆框等. 这些涉及与页面的交互,比如输入.删除.点击等. ...

  2. python与建筑行业_Python+AI+CC,这些建模“高级功能”,90%的人不知道

    1. Python编写脚本,实现CC自动化建模 Python脚本实现CC自动化建模 MasterKernel是一个以编程方式访问ContextCapture Master所有功能的Python模块,此 ...

  3. python数据库模块_十二、Python高级功能之Mysql数据库模块

    Python高级功能之Mysql数据库模块 安装python mysql组件 # yum -y install MySQL-python.x86_64 以下根据实例来说明: >>> ...

  4. python用户登录(输入用户名和密码)dic_Python使用装饰器模拟用户登陆验证功能示例...

    本文实例讲述了Python使用装饰器模拟用户登陆验证功能.分享给大家供大家参考,具体如下: # -*- coding:utf-8 -*- #!python3 user_list = [ {'name' ...

  5. python在化学方面的应用-python化学库

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 分钟前言前面一篇文章<python 数据库骚操作 -- mongodb&g ...

  6. python怎么模拟浏览器交互_干货分享:python爬虫模拟浏览器的两种方法实例分析(赶紧收藏)...

    今天为大家带来的内容是:干货分享:python爬虫模拟浏览器的两种方法实例分析(赶紧收藏) 文章主要介绍了python爬虫模拟浏览器的两种方法,结合实例形式分析了Python爬虫模拟浏览器的两种常见操 ...

  7. python自动化模拟浏览器

    采用python自动化模拟浏览器操作 # -*- coding: utf-8 -*-""" 通过splinter刷12306火车票 可以自动填充账号密码并登陆,接下来的事 ...

  8. python二级模拟题

    PYTHON二级模拟题 一.选择题(每题1分,总分40分) 1.下列叙述中正确的是() A.算法的时间复杂度是指算法在执行过程中基本运算的次数 B.算法的时间复杂度是指算法执行所需要的时间 C.算法的 ...

  9. 最新python全栈3期高级开发工程师 独家完整版

    课程目录: │   ├─1-10 │  │   │  ├─day01 │  │      01 python全栈s3 day1 计算机发展史.mp4 │  │      02 python全栈s3 d ...

  10. 2018 python全栈3期高级开发工程师 独家完整版

    课程目录: │ ├─1-10 │ │ │ ├─day01 │ │ 01 python全栈s3 day1 计算机发展史.mp4 │ │ 02 python全栈s3 day1 计算机系统.mp4 │ │ ...

最新文章

  1. 一位编程15年的大佬:我的OpenCV开发高手成长之路
  2. 我的Java后端书架
  3. oracle同一个示例两个用户的数据同步_分享两个shell脚本--一键统计Oracle数据库用户信息...
  4. winpe镜像文件iso下载_精品软件:最喜爱的也是最纯净WinPE-微PE工具箱
  5. 微软更新Azure SQL将可根据重要性工作进行重整顺序
  6. codeforces 798D
  7. 8. vue 的生命周期
  8. 过滤器和拦截器的区别_拦截器和过滤器的区别
  9. 【转】VMware Fusion Professional 10 序列号
  10. canopen和1939区别_现场总线SAE J1939 与CANopen 通讯
  11. 网易有道词典 怎么在 pdf 上取词翻译
  12. @ResponseBody详解
  13. 强化学习@AAAI2019
  14. WLC RTU license
  15. vediojs m3u8 视频清晰度切换
  16. 浏览器提示https证书有风险该怎么解决
  17. 【毕业设计】LSTM预测算法(股票预测 天气预测 房价预测)
  18. Openwrt PPPoE服务器容器化配置指导
  19. Mipony(网络硬盘下载工具) v1.11简体中文绿色单文件版
  20. html5 占位图片,placeholder.js-可在浏览器端生成占位图片的js插件

热门文章

  1. PAT 乙级 1068 万绿丛中一点红 (20分)
  2. SCAU------8615 快乐
  3. cygwin解压linux软件,如何在Cygwin上安装unzip | 望天博客
  4. 如何从巨潮资讯爬取股票公告
  5. Moodle导入CSV文件格式的试题
  6. vmware虚拟机共享主机ip
  7. S3-s3cmd命令行工具使用
  8. 计算机个性化桌面后总是恢复,Win7切换主题导致个性化桌面图标失效恢复初始的解决方法...
  9. CVTE实习求职经历
  10. wincc 日报表(带注释)