Rdkit|操作分子对象

news2025/2/25 3:42:06


github:地址

文章目录

  • RDKit|操作分子对象
    • 引入所需库
    • 获取分子中的原子
    • 获取原子的坐标信息
    • 访问单个原子的信息
    • 访问所有原子
    • 分子中的键操作
      • 获取键的信息
    • 获取分子中所有的环

RDKit|操作分子对象

引入所需库

from rdkit import Chem
from rdkit.Chem import Draw

获取分子中的原子

smi='C1CCCCCC1'
mol = Chem.MolFromSmiles(smi)

atoms = mol.GetAtoms()
atoms_num = mol.GetNumAtoms()

print(atoms)  # <rdkit.Chem.rdchem._ROAtomSeq object at 0x1050ddc10>
print(atoms[0])  # <rdkit.Chem.rdchem.Atom object at 0x10aa13760>
print('类型=',type(atoms))  # 类型= <class 'rdkit.Chem.rdchem._ROAtomSeq'>
print('类型0=',type(atoms[0]))  # 类型0= <class 'rdkit.Chem.rdchem.Atom'>
print("省略氢的原子数=",atoms_num)

# <rdkit.Chem.rdchem._ROAtomSeq object at 0x7f349ad6b8d0>
# <rdkit.Chem.rdchem.Atom object at 0x7f349ad6b930>
# 类型= <class 'rdkit.Chem.rdchem._ROAtomSeq'>
# 类型0= <class 'rdkit.Chem.rdchem.Atom'>
# 省略氢的原子数= 7

获取原子的坐标信息

注:前提,导入的原子必须带有坐标信息

mol = Chem.MolFromPDBFile("./data/single.pdb")
Draw.MolToImage(mol)

print(mol.GetConformer().GetAtomPosition(1)[0])
print(mol.GetConformer().GetAtomPosition(1).x)
print(mol.GetConformer().GetAtomPosition(1).y)
print(mol.GetConformer().GetAtomPosition(1).z)
x,y,z = mol.GetConformer().GetAtomPosition(1)
print(x,y,z)
xyz = list(mol.GetConformer().GetAtomPosition(3))
print(xyz)

访问单个原子的信息

访问原子信息可能用到的函数

  • mol.GetAtoms():对原子进行遍历
  • GetIdx():获取原子索引
  • GetAtomicNum():获取原子序号
  • GetSymbol():获取原子符号
  • GetDegree():获取原子连接数(受H是否隐藏影响)
  • GetTotalDegree():获取原子总连接数(与H是否隐藏无关)
  • GetFormalCharge():获取原子形式电荷
  • GetHybridization(): 获取原子杂化方式
  • GetExplicitValence(): 获取原子显式化合价
  • GetImplicitValence(): 获取原子隐式化合价
  • GetTotalValence():获取原子总的化合价
atom = mol.GetAtomWithIdx(0)
print("标签=", atom.GetSymbol()) #  C
print("原子显式化合价=", atom.GetExplicitValence()) # 4
print("原子隐式化合价=", atom.GetImplicitValence()) # 4
print("原子总的化合价=", atom.GetTotalValence()) # 4
print("原子元素周期编号=", atom.GetAtomicNum())  # 6

print("杂化类型=", atom.GetHybridization()) # 返回杂化类型   杂化类型= SP3
print("是否在芳香烃内=", atom.GetIsAromatic()) # 该原子是否在芳香烃内   是否在芳香烃内= False

# 与该原子连接的氢原子个数
print("该原子连接的氢原子个数=", atom.GetTotalNumHs()) #  该原子连接的氢原子个数= 3

# 返回该原子的所有邻居原子,以元祖的形式返回
neighbors = atom.GetNeighbors() 
print([x.GetAtomicNum() for x in neighbors])  #[6]

# 标签= C
# 原子显式化合价= 3
# 原子隐式化合价= 1
# 原子总的化合价= 4
# 原子元素周期编号= 6
# 杂化类型= SP2
# 是否在芳香烃内= False
# 该原子连接的氢原子个数= 1
# [6, 6]

访问所有原子

print('\t'.join(['id', 'num', 'exp','symbol', 'degree', 'charge', 'hybrid']))
for at in atoms:
    print(at.GetIdx(), end='\t')
    print(at.GetAtomicNum(), end='\t')
    print(at.GetExplicitValence(), end='\t')
    print(at.GetSymbol(), end='\t')
    print(at.GetDegree(), end='\t')
    print(at.GetFormalCharge(), end='\t')
    print(at.GetHybridization())

# id	num	exp	symbol	degree	charge	hybrid
# 0	6	2	C	2	0	SP3
# 1	6	2	C	2	0	SP3
# 2	6	2	C	2	0	SP3
# 3	6	2	C	2	0	SP3
# 4	6	2	C	2	0	SP3
# 5	6	2	C	2	0	SP3
# 6	6	2	C	2	0	SP3

分子中的键操作

bonds = mol.GetBonds()
print(bonds)
print(type(bonds))
print(bonds[0])
print(type(bonds[0]))

# <rdkit.Chem.rdchem._ROBondSeq object at 0x7f349adbba50>
# <class 'rdkit.Chem.rdchem._ROBondSeq'>
# <rdkit.Chem.rdchem.Bond object at 0x7f349ad5d210>
# <class 'rdkit.Chem.rdchem.Bond'>

获取键的信息

获取分子中键的信息所能用到的函数

  • m.GetBonds(): 对键进行遍历
  • GetIdx(): 获取键的索引
  • GetBondType(): 获取键的类型
  • GetBondTypeAsDouble(): 以数字形式显示键的类型
  • GetIsAromatic(): 是否为芳香键
  • GetIsConjugated(): 是否为共轭键
  • IsInRing(): 是否在环中
  • IsInRingSize(n): 是否在n元环中
  • GetBeginAtom(): 获取起始原子
  • GetEndAtom(): 获取末尾原子
bonds = mol.GetBonds()  # 对键进行遍历
print(type(bonds))

print('\t'.join(['id', 'type', 'double', 'aromic', 'conjug', 'ring', 'begin', 'end']))
for bond in bonds:
    print(bond.GetIdx(), end='\t')
    print(bond.GetBondType(), end='\t')
    print(bond.GetBondTypeAsDouble(), end='\t')
    print(bond.GetIsAromatic(), end='\t')
    print(bond.GetIsConjugated(), end='\t')
    print(bond.IsInRing(), end='\t')
    print(bond.GetBeginAtomIdx(), end='\t')
    print(bond.GetEndAtomIdx())

# id	type	double	aromic	conjug	ring	begin	end
# 0	SINGLE	1.0	False	True	True	0	7
# 1	DOUBLE	2.0	False	True	True	0	1
# 2	SINGLE	1.0	False	True	True	1	2
# 3	DOUBLE	2.0	False	True	True	2	3
# 4	SINGLE	1.0	False	True	True	3	4
# 5	DOUBLE	2.0	False	True	True	4	5
# 6	SINGLE	1.0	False	True	True	5	6
# 7	DOUBLE	2.0	False	True	True	6	7
m = Chem.MolFromSmiles('OC1C2C1CC2')
Draw.MolToImage(m)

获取分子中所有的环

获取分子环信息用到的函数

  • GetRingInfo(): 直接获取环的信息
  • NumRings(): 查看一共有几个环
  • NumAtomRings(): 查看原子在几个环中
  • IsAtomInRingOfSize(n, n1): 查看id为n的原子是否在n1元环中
  • IsBondInRingOfSize(n , n1): 查看id为n的键是否在n1元环中
ri = mol.GetRingInfo()
print('分子中环的个数=',ri.NumRings())  # 分子中环的个数= 3
print(ri.NumAtomRings(2))  # 0
print(ri.IsAtomInRingOfSize(3,3))  # False
print(ri.IsBondInRingOfSize(2,3))  # False

print(ri.AtomRings()) # 过滤大环分子
print(ri.AtomMembers(1))

# 分子中环的个数= 1
# 1
# False
# False
# ((0, 1, 2, 3, 4, 5, 6, 7),)
# (0,)
#  ‘IsInRingSize(n)’:判断是否在n-元环上
atom2  = m.GetAtomWithIdx(2)
print("atom2 in ring:", atom2.IsInRing())
print("atom2 in 3-ring:", atom2.IsInRingSize(3))
print("atom2 in 4-ring:", atom2.IsInRingSize(4))
print("atom2 in 5-ring:", atom2.IsInRingSize(5))

# atom2 in ring: True
# atom2 in 3-ring: True
# atom2 in 4-ring: True
# atom2 in 5-ring: False
## 获取分子中所有的环 GetSymmSSSR(m)
ssr = Chem.GetSymmSSSR(m)
num_ring = len(ssr)
print("num of ring", num_ring)
for ring in ssr:
    print("ring consisted of atoms id:",list(ring))

# num of ring 2
# ring consisted of atoms id: [1, 2, 3]
# ring consisted of atoms id: [4, 5, 2, 3]
# 通过索引获取键 SINGLE
print('通过索引获取键', mol.GetBondWithIdx(3).GetBondType())  

# 通过索引获取键 DOUBLE

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/743467.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Mysql基本语法+Navicat使用

进入数据库&#xff1a;mysql -uroot -p 修改数据库密码&#xff1a;ALTER USER rootlocalhost IDENTIFIED BY 这里输入密码; &#xff08;如&#xff1a;ALTER USER rootlocalhost IDENTIFIED BY 111111;&#xff09; 创建数据库&#xff1a;create database 数据库名; 查…

刷题记录01

题目一. 这道题要先解释一下什么是非递增,非递增就是a[i] >a[i1],递增则是相反. 非递减就是a[i]>a[i1],递减就是相反 大方向思路是: 遍历数组判断相邻元素的顺序关系统计排序子序列数量 具体思路: 本题依次比较整个数组a[i1]>a[i] &#xff0c;则进入非递增序列判…

在vue中点击弹框给弹框中的表格绑值

场景描述&#xff1a;如下图所示&#xff0c;我们需要点击 ‘账单生成’ 按钮&#xff0c;然后里边要展示一个下图这样的表格。 最主要的是如何展示表格中的内容&#xff0c;一起看看吧&#xff01; <template><!-- 水费 欠费--><el-dialog title"水费欠费…

静态图片转3D动态GIF/视频

Leiapix是一项令人印象深刻的技术&#xff0c;它可以让静态的图片动起来&#xff0c;为观众提供沉浸式和交互式的图像体验。这项创新的技术使用了Leia Inc.的自适应光栅屏幕技术&#xff0c;通过利用人眼的视差和立体视觉效应&#xff0c;将图像中的元素以动态的方式呈现出来&a…

《第一次线下面试总结》

《第一次线下面试总结》 面试时间&#xff1a;2023/7/11 上午10点 面试总时长20分钟。 实习薪资&#xff1a;2.3k…后期看表现&#xff0c;可根据实际情况那啥 。估计是看锤子… 一、HR面 自我介绍你哪里的、目前住哪里等基本信息。你偏向前端还是后端&#xff1f;说说你的项目…

电路分析基础学习(上)第7章

李瀚荪版电分第二版 目录 二阶电路的定义 电路中的等幅振荡与阻尼振荡 RLC电路的零输入响应 ----------------------------------------------------------------------------------------------------------------------------- 二阶电路的定义 二阶电路是指由电容、电感…

[QT编程系列-3]:C++图形用户界面编程,QT框架快速入门培训 - 2- QT程序的运行框架:HelloWorld、常见控件、对象树原理

目录 2. QT程序的运行框架 2.1 Hello World程序框架 2.2 QT Designer初识 2.3 用QT Designer设计用户登录界 2. QT程序的运行框架 2.1 Hello World程序框架 上述示例代码中&#xff0c;首先根据应用程序的需求使用 QCoreApplication 或 QApplication 定义 app 对象。如果你…

[综述] Generative AI meets 3D: A Survey on Text-to-3D in AIGC Era

论文&#xff5c; 改文章是23年5月27日挂在arxiv上&#xff0c;本文重点关注4.1节Text Guided 3D Avatar Generation、4.4节Text Guided 3D Shape Transformation和第5章Discussion Text Guided 3D Avatar Generation DreamAvatar DreamAvatar: Text-and-Shape Guided 3D Hu…

k8s中网络通讯简单介绍

1 前言 Kubernetes的网络模型假定了所有的pod都在一个可以直接连通的扁平的网络空间中&#xff0c;这在GCE&#xff08;Google Compute Engine&#xff09;里面是现成的网络模型&#xff0c;Kubernetes假设这定这个网络已经存在。但是在私有云里搭建Kubernetes集群&#xff0c;…

CHI read trans flow

Read transactions with DMT and without snoops 对于不产生snoop的read trans&#xff0c;建议使用DMT功能&#xff0c;如下图所示&#xff1a; 注意点&#xff1a; a. SNF并不需要给HNF回响应&#xff0c;因为RN发送的compack可以释放HNF处记录的请求; Read transaction wi…

《Redis 核心技术与实战》课程学习笔记(七)

切片集群&#xff1a;数据增多了&#xff0c;是该加内存还是加实例&#xff1f; 切片集群&#xff0c;也叫分片集群&#xff0c;就是指启动多个 Redis 实例组成一个集群&#xff0c;然后按照一定的规则&#xff0c;把收到的数据划分成多份&#xff0c;每一份用一个实例来保存。…

使用Dcoker Registry搭建私有镜像仓库

Dcoker Registry 和Harbor有什么相似和区别&#xff1f;各自有什么优劣&#xff0c;请详细介绍 Docker Registry和Harbor都是容器镜像仓库管理系统&#xff0c;用于存储、管理和分发Docker镜像。它们有一些相似之处&#xff0c;但也存在一些区别。下面是对它们的相似之处和区别…

idea导入springboot项目,下载的pom.xml文件是html格式。

一、可以看到我的pom.xml的parent标签 <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0…

使用cuda报错的一次记录(CUDA error: out of memory)

原因&#xff1a; 由于batch_size设置过大导致的&#xff01;&#xff01;&#xff01;

机器学习技术(四)——特征工程与模型评估

机器学习技术&#xff08;四&#xff09;——特征工程与模型评估(1️⃣) 文章目录 机器学习技术&#xff08;四&#xff09;——特征工程与模型评估(:one:)一、特征工程1、标准化2、特征缩放3、缩放有离群值的数据4、非线性转换5、样本归一化6、特征二值化7、标称特征编码(one-…

亚马逊云科技推出的一项完全托管的生成式AI服务——Amazon Bedrock

在全球生成式AI浪潮兴起之际&#xff0c;以“智联世界&#xff0c;生成未来”为主题的2023世界人工智能大会&#xff08;WAIC 2023&#xff09;于7月6日在上海世博中心拉开帷幕。大会首日&#xff0c;亚马逊云科技携生成式AI产品Amazon Bedrock亮相大会现场&#xff0c;亚马逊云…

C语言 指针进阶(二)

目录 一.函数指针 1.1函数指针的认识 1.2函数指针的使用 二、函数指针数组 1.1函数指针的认识 1.2 函数指针数组实现计算器 三、指向函数指针数组的指针 四、回调函数 通过使用qsort函数加强对回调函数的理解 qsort排序整形 qosrt排序结构体 用冒泡排序的思想&…

Java设计模式之结构型-组合模式(UML类图+案例分析)

目录 一、基础概念 二、UML类图 三、角色分析 四、案例分析 1、基本实现 2、菜单遍历 五、总结 一、基础概念 组合模式&#xff08;Composite Pattern&#xff09;又叫部分-整体模式&#xff0c;它通过将对象组合成树形结构来表示“整体-部分”的层次关系&#xff0c…

《网络安全标准实践指南》(72页)

导读 摘要&#xff1a;为指导网络数据安全风险评估工作&#xff0c;发现数据安全隐患&#xff0c;防范数据安全风险&#xff0c;依据《中华人民共和国网络安全法》《中华人民共和国数据安全法》《中华人民共和国个人信息保护法》等法律法规&#xff0c;参照数据安全相关国家标…

[MySQL]MySQL表的操作

[MySQL]表的操作 文章目录 [MySQL]表的操作1. 创建表2. 创建表的示例3. 查看表4. 修改表5. 删除表6. 关于表操作 1. 创建表 语法&#xff1a; CREATE TABLE [IF NOT EXISTS] table_name(field1 datatype1 [COMMENT 注释信息],field2 datatype2 [COMMENT 注释信息],field3 dat…