在化学信息学中,获取分子的基础信息是进一步建模、计算与筛选的前提。RDKit 提供了强大的 API,可以轻松查询分子式、分子量、原子属性、键属性以及环结构。
2.1 分子式与分子量
2.1.1 分子式(Molecular Formula)
from rdkit import Chem
from rdkit.Chem import rdMolDescriptors
mol = Chem.MolFromSmiles("CCO") # 乙醇
formula = rdMolDescriptors.CalcMolFormula(mol)
print("分子式:", formula)
输出:
分子式: C2H6O
2.1.2 分子量(Molecular Weight)
from rdkit.Chem import Descriptors
mw = Descriptors.MolWt(mol)
print("分子量:", mw)
输出:
分子量: 46.069
RDKit 中的
Descriptors
模块提供了多种分子描述符,例如 LogP、TPSA 等,我们会在第七章详细讲解。
2.2 原子信息获取
RDKit 中的原子对象是 Atom
类型,可以通过 mol.GetAtoms()
遍历。
for atom in mol.GetAtoms():
print(
f"原子序号 {atom.GetIdx()}, 元素: {atom.GetSymbol()}, "
f"价态: {atom.GetTotalValence()}, 电荷: {atom.GetFormalCharge()}"
)
输出示例:
原子序号 0, 元素: C, 价态: 4, 电荷: 0
原子序号 1, 元素: C, 价态: 4, 电荷: 0
原子序号 2, 元素: O, 价态: 2, 电荷: 0
常用的 原子属性:
GetSymbol()
:返回元素符号GetAtomicNum()
:返回原子序数GetTotalValence()
:返回总价态GetFormalCharge()
:返回形式电荷GetDegree()
:连接的原子个数
2.3 键信息获取
RDKit 中的键对象是 Bond
类型,可以通过 mol.GetBonds()
遍历。
for bond in mol.GetBonds():
print(
f"键序号 {bond.GetIdx()}, "
f"类型: {bond.GetBondType()}, "
f"起点原子: {bond.GetBeginAtomIdx()}, 终点原子: {bond.GetEndAtomIdx()}"
)
输出示例:
键序号 0, 类型: SINGLE, 起点原子: 0, 终点原子: 1
键序号 1, 类型: SINGLE, 起点原子: 1, 终点原子: 2
常用的 键属性:
GetBondType()
:返回键类型(SINGLE, DOUBLE, TRIPLE, AROMATIC)GetIsConjugated()
:是否为共轭键IsInRing()
:是否属于环
2.4 环结构检测
RDKit 提供了 mol.GetRingInfo()
用于环的分析。
mol_benzene = Chem.MolFromSmiles("c1ccccc1") # 苯
ring_info = mol_benzene.GetRingInfo()
print("环的数量:", ring_info.NumRings())
print("每个环的原子索引:", ring_info.AtomRings())
输出示例:
环的数量: 1
每个环的原子索引: ((0, 1, 2, 3, 4, 5),)
还可以判断某个原子或键是否在环中:
atom = mol_benzene.GetAtomWithIdx(0)
print("原子是否在环中:", atom.IsInRing())
bond = mol_benzene.GetBondWithIdx(0)
print("键是否在环中:", bond.IsInRing())
小贴士
- 分子式与分子量:
rdMolDescriptors.CalcMolFormula
与Descriptors.MolWt
是两个最常用的基础计算函数。 - 原子索引从 0 开始:RDKit 中的原子编号从 0 起,常用于子结构匹配与图结构操作。
- 键类型要熟悉:常见的键类型是
SINGLE
,DOUBLE
,TRIPLE
,AROMATIC
,它们对于反应建模非常关键。 - 环结构分析很常用:尤其在药物化学与芳香化合物分析中,环的判断是必不可少的。
练习
-
写一个函数,输入 SMILES,输出该分子的:
- 分子式
- 分子量
- 原子数
- 键数
-
用 RDKit 分析 咖啡因 (
Cn1cnc2c1c(=O)n(c(=O)n2C)C
):- 打印分子式与分子量
- 输出所有环的原子索引
- 判断分子中是否含有芳香环
-
用 RDKit 分析 青霉素 G (
CC1(C)SCC(N1C(=O)C2=CC=CC=C2)C(=O)O
):- 输出分子中所有含氧原子的序号与电荷
- 输出所有双键的原子索引