RDKit 中序列与结构的相互转换

文摘   2024-06-21 08:00   美国  


  榴莲忘返 2014  

在生物信息学领域,RDKit 和 HELM 是常用的分子信息处理工具。RDKit 提供了丰富的化学信息学功能,而 HELM 则是一种用于描述复杂生物大分子的语言。其中,利用简化的字母代码来表征肽序列和核酸序列是 RDKit 的一个强大功能。

本文将带你了解 RDKit 的序列转换功能,如何利用简单的缩写代码,快速生成各种肽链和核酸结构。我们将探索 RDKit 支持的氨基酸和核苷酸种类,以及区分 DNA、RNA 和肽链序列的方法。

例如如何利用MolFromSequence()函数快速生成 D-氨基酸结构,以及如何利用 HELM 标记语言构建包含非标准氨基酸的复杂肽链。

你将:

  • 了解 RDKit 中MolFromHELM()MolFromSequence()函数的强大功能
  • 掌握利用缩写代码快速生成肽链和核酸结构的方法
  • 熟悉 RDKit 支持的氨基酸和核苷酸种类
  • 区分 DNA、RNA 和肽链序列,并使用正确的参数进行转换
  • 利用 HELM 标记语言构建包含非标准氨基酸的复杂肽链

RDKit 中的序列表征方法

RDKit 可以使用 MolFromHELM()MolFromSequence() 函数从序列生成分子结构。

使用 MolFromHELM() 函数生成分子结构

MolFromHELM() 函数可以从 HELM 字符串生成分子结构。以下是以谷胱甘肽、RNA 和 DNA 片段为例,展示如何使用 MolFromHELM() 函数生成分子结构:

from rdkit import rdBase, Chem
from rdkit.Chem import AllChem, Draw
from rdkit.Chem.Draw import IPythonConsole, rdMolDraw2D
from IPython.display import SVG

print(rdBase.rdkitVersion)

谷胱甘肽

Glutathione = Chem.MolFromHELM("PEPTIDE1{E.C.G}$$$$")

RNA 片段 (AU)

RNA_AU = Chem.MolFromHELM("RNA1{P.R(A)P.R(U)P}$$$$")

DNA 片段 (ACGA)

DNA_ACGA = Chem.MolFromHELM("RNA1{\[dR\](A)P.\[dR\](C)P.\[dR\](G)P.\[dR\](A)}$$$$")

使用 MolFromSequence() 函数生成分子结构

MolFromSequence() 函数可以从氨基酸序列字符串生成分子结构。

四肽 PDCA

IPythonConsole.drawOptions.addStereoAnnotation = True
IPythonConsole.drawOptions.annotationFontScale = 1.3

PDCA = Chem.MolFromSequence('PDCA')

flavor 参数

flavor 参数可以指定序列的类型,例如氨基酸序列或核酸序列。flavor=1 可以处理 D-氨基酸,D-氨基酸用小写字母表征。

D-PDCA
d_PDCA = Chem.MolFromSequence('pdca', flavor=1)

如上图所示,楔形表征可能难以识别,但立体化学表征证实了立体结构的反转。

RDKit 的序列转换机制

为了更好地理解 RDKit 如何将序列转换为分子结构,我们需要解析其源代码。 SequenceParsers 代码中包含了序列转换为分子结构的内部机制。

以丙氨酸和精氨酸为例,详细说明氨基酸序列转换为分子结构的步骤

以丙氨酸(ALA)和精氨酸(ARG)为例, SequenceParsers 代码中展示了如何构建氨基酸序列:

代码解析如下:

  1. 构建氨基酸主链(CreateAABackbone: 首先,代码会构建氨基酸的主链结构,包括氨基、羧基和 α 碳原子等。
  2. 构建侧链(CreateAAAtom, CreateAABond: 然后,根据不同的氨基酸,代码会使用 CreateAAAtom 添加侧链原子,并使用 CreateAABond 指定原子间的连接关系和键级,最终构建完整的侧链结构。

需要注意的是,代码中使用 PDB 文件中常见的原子表征方法,例如 γ 碳 (CG) 和 δ 碳 (CD) 等。 另外,ALA 的构建过程显示,代码将 β 碳也包含在 CreateAABackbone 中,这与通常定义的「主链」有所不同,可能是出于代码实现的考虑。

以甘氨酸(GLY)为例,代码并没有使用 CreateAABackbone 来构建,进一步说明了这一点:

GetPDBResidueInfo 方法,用于获取原子信息

通过以上步骤,我们可以从序列构建出包含原子信息的 Mol 对象。Atom 对象的 GetPDBResidueInfo 方法可以用来提取这些原子信息。以下代码展示了如何获取精氨酸分子中每个原子的 PDB 残基信息,并将其添加到分子图中:

arg_mol = Chem.MolFromSequence("R")

atom_names_list = []

for a in arg_mol.GetAtoms():
a_name = a.GetPDBResidueInfo().GetName()
atom_names_list.append(a_name)

view = rdMolDraw2D.MolDraw2DSVG(300,300)
tm = rdMolDraw2D.PrepareMolForDrawing(arg_mol)

option = view.drawOptions()
for i, an in enumerate(atom_names_list):
option.atomLabels[i] = an

option.padding=0.01
option.legendFontSize=20

view.DrawMolecule(tm, legend="arginine with atom labels")
view.FinishDrawing()

svg = view.GetDrawingText()
SVG(svg)

最终得到的分子图如下,可以看到每个原子都标注了其在 PDB 残基信息中的名称,例如 C 末端羧基的氧原子被标记为OXT

RDKit 中可用的氨基酸序列

RDKit 默认支持的氨基酸三字母缩写和单字母缩写如下表所示:

三字母缩写单字母缩写三字母缩写单字母缩写三字母缩写单字母缩写
ALAAASNNCYSC
ASPDGLNQGLUE
GLYGHISHILEI
LEULLYSKMETM
PHEFPROPSERS
THRTTRPWTYRY
VALVASXBGLXZ
DALaDASNnDCYSc
DASPdDGLNqDGLUe
DGLYgDHIShDILEi
DLEUlDLYSkDMETm
DPHEfDPROpDSER
DTHRtDTRPwDTYR
DVALv



需要注意的是,D-丝氨酸和 D-酪氨酸的结构生成信息在代码中缺失,因此无法使用单字母缩写 sy 生成对应的 D 型氨基酸分子。 使用这些缩写生成的分子对象将是空的。

RDKit 默认的氨基酸缩写主要针对 L-氨基酸(生物体内常见的形式),而不包括 D-氨基酸的缩写。对于 D-氨基酸,如 D-丝氨酸(D-Serine)和 D-酪氨酸(D-Tyrosine),RDKit 没有内置的单字母缩写来直接生成它们的分子结构。

在 RDKit 中,要处理 D-氨基酸,你通常需要使用它们的完整化学名称或者 SMILES 字符串来生成分子对象,而不是使用单字母或三字母缩写。例如:

from rdkit import Chem

# 使用SMILES字符串生成D-Serine和D-Tyrosine的分子对象
d_serine = Chem.MolFromSmiles("C[C@H](N)C(O)=O")
d_tyrosine = Chem.MolFromSmiles("C[C@H](N)Cc1ccc(O)cc1O")

# 输出分子对象,确保它们不是空的
print(d_serine)
print(d_tyrosine)

在这段代码中,C[C@H](N)C(O)=OC[C@H](N)Cc1ccc(O)cc1O 是 D-丝氨酸和 D-酪氨酸的 SMILES 字符串。这些可以用来正确生成 D-氨基酸的分子对象。

RDKit 中可用的核酸序列

RDKit 默认支持的核苷酸碱基包括腺嘌呤(A)、胞嘧啶(C)、鸟嘌呤(G)、胸腺嘧啶(T)和尿嘧啶(U)。

在 RDKit 中,核苷酸序列转换为分子结构的过程如下:

  1. 构建磷酸-糖骨架: RDKit 首先构建核苷酸序列的磷酸-糖骨架。
  2. 连接碱基: 然后,根据输入的序列,将相应的碱基连接到磷酸-糖骨架上。

为了区分 DNA 和 RNA 序列,RDKit 使用 flavor 参数:

  • flavor=3 表征 RNA 序列,使用核糖作为糖。
  • flavor=8 表征 DNA 序列,使用脱氧核糖作为糖。

以下代码展示了如何使用 MolFromSequence 函数创建 RNA 和 DNA 分子:

RNA_test = Chem.MolFromSequence('ACG', flavor=3)
DNA_test = Chem.MolFromSequence('ACG', flavor=8)

生成的 RNA 和 DNA 分子结构如下图所示:

RNA:

DNA:

如上图所示,RDKit 能够正确识别序列类型,并生成带有相应磷酸帽和糖的核苷酸分子结构。

HELM 中可用的氨基酸序列

在 HELM 中,使用方括号 [] 可以表征多字母氨基酸缩写。例如,[Orn] 表征鸟氨酸。

下表列举了 HELM 中可用的非标准氨基酸三字母缩写、对应的 ID 以及示例:

三字母缩写ID说明示例
AadAadα-氨基己二酸[Aad]
AbuAbuα-氨基丁酸[Abu]
AcetAc乙酰基[ac]
AibAibα-氨基异丁酸[Aib]
AlaA丙氨酸A
BAlaBAlaβ-丙氨酸[BAla]
ChaCha环己基丙氨酸[Cha]
CitCit瓜氨酸[Cit]
CysC半胱氨酸C
D-AladAlaD-丙氨酸[dAla]
D-ArgdArgD-精氨酸[dArg]
D-AsndAsnD-天冬酰胺[dAsn]
D-AspdAspD-天冬氨酸[dAsp]
D-CysdCysD-半胱氨酸[dCys]
D-GlndGlnD-谷氨酰胺[dGln]
D-GludGluD-谷氨酸[dGlu]
D-HisdHisD-组氨酸[dHis]
D-IledIleD-异亮氨酸[dIle]
D-LeudLeuD-亮氨酸[dLeu]
D-LysdLysD-赖氨酸[dLys]
D-MetdMetD-甲硫氨酸[dMet]
D-PhedPheD-苯丙氨酸[dPhe]
D-ProdProD-脯氨酸[dPro]
D-SerdSerD-丝氨酸[dSer]
D-ThrdThrD-苏氨酸[dThr]
D-TrpdTrpD-色氨酸[dTrp]
D-TyrdTyrD-酪氨酸[dTyr]
D-ValdValD-缬氨酸[dVal]
DapDapα,β-二氨基丙酸[Dap]
DabDabα,γ-二氨基丁酸[Dab]
GlnQ谷氨酰胺Q
GluE谷氨酸E
GlpGlp焦谷氨酸[Glp]
GlyG甘氨酸G
HisH组氨酸H
IleI异亮氨酸I
LeuL亮氨酸L
LysK赖氨酸K
MetM甲硫氨酸M
NleNle正亮氨酸[Nle]
OrnOrn鸟氨酸[Orn]
PheF苯丙氨酸F
ProP脯氨酸P
PmcPmc2,2,5,7,8-五甲基苯并二氢吡喃-6-磺酰基[Pmc]
SarSar肌氨酸[Sar]
seCseCL-硒代半胱氨酸[seC]
SerS丝氨酸S
ThrT苏氨酸T
TrpW色氨酸W
TyrY酪氨酸Y
ValV缬氨酸V
amam酰胺基[am]

以下是一个包含非标准氨基酸的肽段,展示了如何使用 HELM 序列生成分子结构:

PEPTIDE1{[ac].[Orn].[Glp].[seC].[am]}$$$$

生成的分子结构如下图所示:

该结构表征 N 末端乙酰化的鸟氨酸-焦谷氨酸-硒代半胱氨酸,C 末端为酰胺基。

总结

本文探讨了如何使用 RDKit 将肽序列和核酸序列转换为分子结构,并深入研究了 RDKit 支持的缩写和编码机制。我们了解到:

  • RDKit 可以处理标准和非标准氨基酸,以及 DNA 和 RNA 核苷酸。
  • MolFromSequence 函数利用单字母和三字母代码生成肽和核酸结构,并可通过 flavor 参数区分 DNA 和 RNA。
  • HELM 格式为表征复杂的修饰和非标准残基提供了更灵活的方式。

通过代码示例,我们展示了如何生成谷胱甘肽、RNA 和 DNA 片段的分子结构。此外,我们还学习了如何使用 GetPDBResidueInfo 方法提取原子信息,以及使用不同的缩写来构建具有特定修饰的肽。

希望这篇文章能够帮助你更好地理解 RDKit 中序列和结构之间的转换。

你认为 RDKit 在哪些方面还可以改进其序列处理能力?欢迎在下方留言,分享你的想法和经验!

— 完 —

对相关内容感兴趣的读者,可以添加小编微信加入读者实名交流互助群添加时请主动注明姓名-企业-职位/岗位 或  姓名-学校-职务/研究方向

点击这里 👉 关注我,记得标星哦~


榴莲忘返 2014
科研如榴莲,又臭又甜!
 最新文章