将分子SMILES生成DGLGraph
其实将分子的SMILES转化为图是很简单的,也是很便捷的,主要有以下几步:
一、导入相关的包
import numpy as np
import torch
import dgl
from dgl import DGLGraph
from rdkit import Chem
from rdkit.Chem import rdMolDescriptors as rdDesc
二、将SMILES转化为RDKIT的mol对象,同时生成一个空的dgl图
molecule_smiles='[C@@H](Cl)(F)Br'
G = DGLGraph()
#加载smile生成mol对象
molecule = Chem.MolFromSmiles(molecule_smiles)
三、为DGL图添加节点
G.add_nodes(molecule.GetNumAtoms())
四、提取原子的特征和化学键特征
get_atom_features和get_bond_features分别为提取原子特征和化学键特征的函数,如下:
这里先插入一个辅助函数:
#辅助函数
def one_of_k_encoding_unk(x, allowable_set):'将x与allowable_set逐个比较,相同为True, 不同为False, 都不同则认为是最后一个相同'if x not in allowable_set:x = allowable_set[-1]return list(map(lambda s: x == s, allowable_set))
获取原子的特征,特征包括:元素种类、隐含价、价电子、成键、电荷、杂化类型
def get_atom_features(atom):possible_atom = ['C', 'N', 'O', 'F', 'P', 'Cl', 'Br', 'I', 'DU'] #DU代表其他原子atom_features = one_of_k_encoding_unk(atom.GetSymbol(), possible_atom)atom_features += one_of_k_encoding_unk(atom.GetImplicitValence(), [0, 1])atom_features += one_of_k_encoding_unk(atom.GetNumRadicalElectrons(), [0, 1])atom_features += one_of_k_encoding_unk(atom.GetDegree(), [0, 1, 2, 3, 4, 5, 6])atom_features += one_of_k_encoding_unk(atom.GetFormalCharge(), [-1, 1])atom_features += one_of_k_encoding_unk(atom.GetHybridization(), [Chem.rdchem.HybridizationType.SP, Chem.rdchem.HybridizationType.SP2,Chem.rdchem.HybridizationType.SP3, Chem.rdchem.HybridizationType.SP3D]) return np.array(atom_features)
获取边特征,包括:是否为单键、双键、三键、成环、芳香环、共轭
def get_bond_features(bond):bond_type = bond.GetBondType()bond_feats = [bond_type == Chem.rdchem.BondType.SINGLE, bond_type == Chem.rdchem.BondType.DOUBLE,bond_type == Chem.rdchem.BondType.TRIPLE, bond_type == Chem.rdchem.BondType.AROMATIC,bond.GetIsConjugated(),bond.IsInRing()]return np.array(bond_feats)
五、提取每一个原子的特征(节点特征和边特征)生成图
node_features = []
edge_features = []for i in range(molecule.GetNumAtoms()):atom_i = molecule.GetAtomWithIdx(i) atom_i_features = get_atom_features(atom_i) node_features.append(atom_i_features)for j in range(molecule.GetNumAtoms()):bond_ij = molecule.GetBondBetweenAtoms(i, j)if bond_ij is not None:G.add_edges(i,j) bond_features_ij = get_bond_features(bond_ij) edge_features.append(bond_features_ij)G.ndata['x'] = torch.from_numpy(np.array(node_features)) #dgl添加原子/节点特征
G.edata['w'] = torch.from_numpy(np.array(edge_features)) #dgl添加键/边特征
G
六、输出结果为:
将分子SMILES生成DGLGraph相关推荐
- JCIM | 用于自动生成类药分子的生成网络复合体(GNC)
作者/编辑 | 王建民 导读 目前的药物发现工作既昂贵又耗时.如何创造出种类繁多的新型化合物,使其不仅具有理想的药理特性,而且低收入人群也能廉价获得,仍然是一项具有挑战性的任务.这项工作中,研究人员开 ...
- rdkit分子指纹生成;相似性检索
1.分子指纹生成 常见生成的方法: a.smiles2fp simles转分子指纹,支持morgan: Morgan fingerprint. * maccs: MACCS keys. * rdkit ...
- Briefings in Bioinformatics2021 | 药物挖掘分子设计--生成模型综述
原文标题:Molecular design in drug discovery: a comprehensive review of deep generative models 论文地址:Mole ...
- J. Cheminform. | 基于SMILES的利用骨架的分子生成模型
今天给大家介绍的是瑞典制药公司阿斯利康,伯尔尼大学和广州再生医学与健康中心广东省实验室于2020年2月4日联合发表在Journal of Cheminformatics的一篇论文,这篇文章提出了一种新 ...
- JCIM| 基于双向RNN的分子生成模型
今天给大家介绍的是被誉为"欧陆第一名校"苏黎世联邦理工学院(ETH Zurich)化学与应用生物科学系博士生Francesca Grisoni和制药行业顾问Gisbert Schn ...
- Nat. Mach. Intell. | 利用条件循环神经网络生成特定性质分子
作者 | 陆丰庆 今天给大家介绍瑞士知名药企阿斯利康和伯尔尼大学的 Esben Jannik Bjerrum团队在Nature Machine Intelligence上的一篇论文.该研究提出基于分子 ...
- 将图卷积神经网络用于解码分子生成
©PaperWeekly 原创 · 作者|张玮玮 学校|东北大学硕士 研究方向|脑电情绪识别 论文标题: A Two-Step Graph Convolutional Decoder for Mole ...
- JCIM2021 | MolGPT : 基于Transformer-Decoder的分子生成
原文标题:Molecular Generation Using a Transformer-Decoder Model 地址:https://pubs.acs.org/doi/pdf/10.1021/ ...
- 分子生成中常见分子描述符介绍及代码实现
一.背景介绍 本文针对计算机辅助药物设计 (CADD)中的分子生成方向进行一下总结,主要内容是根据模型生成的分子理化性质检验,包括多种性质的定义.计算公式.评价指标及实现代码. 计算机辅助药物设计 ( ...
- 【语言模型生成分子更好】Language models can learn complex molecular distributions
Language models can learn complex molecular distributions[Nature Communications] 语言模型可以学习复杂的分子分布 pap ...
最新文章
- DIV+CSS 命名规范
- Oracle按照时间统计总结
- 线程函数的设计以及MsgWaitForMultipleObjects函数的使用要点
- 华为笔记本matebook13_华为MateBook 13_HUAWEI MateBook 13(i5 8265U/8GB/256GB/独显)_笔记本导购-中关村在线...
- PHP日期、时间戳相关的小程序
- java注册中心nacos_spring-cloud整合nacos做注册中心
- 基于modelsim的十个Verilog入门试验程序(5)(数字秒表+自助售票机)—程序+测试代码+波形+结果分析
- [10月4日的脚本] 获取Office365邮箱文件夹的权限
- python - 求约数 质数法
- YDUI Touch InfiniteScroll无限加载数据测试
- 下载新版火狐后无法同步书签_firefox无法同步书签,恢复备份文件失败的解决办法...
- 计算机休眠唤醒原理,电脑休眠和睡眠区别以及怎么唤醒
- 学习-工具-tox自动化工具
- 实现页面的图文混排布局(Web作业)
- 数据中心远程集中解决方案有哪些?
- Unity3D 绑定机械传动 插件包
- android语音输入文字,盘点好用的语音输入APP,懒得打字的时候就说话吧!
- selenium如何执行网页脚本
- Windows 下常用盗版软件的替代免费软件列表
- Xcode_修改默认名称和公司