酶是生物催化剂,并且目前认为大多数酶都是蛋白质。为了系统化地研究酶,国际纯粹与应用化学联合会(IUPAC)将酶组织成一个分层的分类结构,其中包含7个顶级类别,并且总共有4个层级的层次结构。这些类别被称为酶类别,被称为EC系统。每种酶都根据其催化的反应类型被分配一个EC编号。在今天的学习中,我们将使用RCSB搜索API来查找与特定酶类别结合的配体。
七类酶
首先我们了解一下七类酶,BRENDA酶数据库包含关于酶的详细信息,并提供了酶类别的分类。在分类的最上层,有7种主要的酶类别:
氧化还原酶(Oxidoreductases)
转移酶(Transferases)
水解酶(Hydrolases)
裂合酶(Lyases)
异构酶(Isomerases)
连接酶(Ligases)
转位酶(Translocases)
胰蛋白酶
我们今天的课程将重点关注胰腺产生的一种酶——胰蛋白酶,它有助于在小肠中消化蛋白质。胰蛋白酶属于丝氨酸水解酶家族。这个家族的成员利用水来断裂蛋白质、脂类和碳水化合物中的键。它们参与消化、细胞信号传导和血液凝固。胰蛋白酶的EC编号是3.4.21.4。以下是层级结构中每个级别的含义:
3 - 水解酶(Hydrolase)
3.4 - 作用于肽键
3.4.21 - 丝氨酸内肽酶
3.4.21.4 - 胰蛋白酶
寻找配体步骤
我们今天的目标是需要找用于分子对接研究的配体。首先寻找与胰蛋白酶结合的配体,并计划观察这些配体是否也能与其他可能有趣的丝氨酸水解酶结合。所以我们今天将遵循以下步骤:
第一步:查找给定酶委员会类别的PDB结构。
第二步:选择那些含有分子量在300到600之间的小分子配体的结构。
第三步:输出这些配体的列表。
第四步:将配体结构保存到“ligands_for_EC_class_#”文件夹中。
我们会使用到一些新的工具包:

之前有同学说使用 !pip 或者在终端中使用 pip 安装后依然提示未安装。
大家可以试试这种安装方法
import sys!{sys.executable} -m pip install rcsbsearchapi
这条代码的目的是确保 rcsbsearchapi 包被安装在当前正在使用的 Python 解释器环境中。它特别有用在 Jupyter Notebook 或其他多环境开发中,避免因使用错误的 Python 解释器而导致包安装在错误的环境中。
言归正传,当我们需要要使用 rcsbsearchapi 进行查询的时候,首先我们必须知道在寻找什么。比如,如果我们寻找与特定酶类(Enzyme Commission Class)蛋白质结合的配体的特性。
我们需要知道酶的类型是什么,也就是 EC Class 是什么。我们这次关注胰蛋白酶(trypsin)的 EC 类别,3.4.21.4。同时我们也需要知道配体(Ligands),比如单个原子(如钾离子)或缓冲分子(如磷酸盐)稍大的配体,其尺寸在 10 到 30 个重原子之间,因此我将目标分子量设置在 300 到 800 之间。为什么我们选择分子量在 300 到 800 之间的配体呢?我们感兴趣的是足够大的分子,它们可以与胰蛋白酶的活性位点结合并填充该位点。分子量小于 300 的小分子可能是个别的离子(如 K+ 或 Na+)。而分子量大于 800 的分子将会填充超过酶的活性位点。
我们可以使用接口来搜索与 PDB 条目相关的许多属性。我们将使用的属性是rcsb_polymer_entity.rcsb_ec_lineage.id,它用于查找EC编号为 3.4.21.4 的蛋白质。其他可搜索的属性包括主要引用的期刊缩写 (rcsb_primary_citation.rcsb_journal_abbrev)、确定结构的方法 (exptl.method),或PDB条目中的特定分子 (pdbx_reference_molecule.class)。所以我们可以使用以下代码:
from rcsbsearchapi import rcsb_attributes as attrsECnumber = "3.4.21.4" # 我们稍后会再次使用这个变量q1 = attrs.rcsb_polymer_entity.rcsb_ec_lineage.id == ECnumber # 查找胰蛋白酶q2 = attrs.chem_comp.formula_weight >= 300 # 设置分子量的下限q3 = attrs.chem_comp.formula_weight <= 800 # 设置分子量的上限query = q1 & q2 & q3 # 将三个查询组合成一个resultL = list(query()) # 将查询结果分配给列表变量print(resultL[0:10]) # 列出前 10 个结果len(resultL) # 显示查询结果的总数molResultL = list(query("mol_definition"))print("在这个列表中,有", len(molResultL), "个与 EC 编号", ECnumber, "相关的配体。以下是前 10 个配体的列表。")print(molResultL[0:10])

找到了对应的配体之后,我们可以去哪里下载配体文件?这些 PDB 中的配体文件可以以多种格式下载。我们可以按照不同的需要进行下载。完整的列表和描述可以在 RCSB PDB 文件下载服务页面上找到(https://www.rcsb.org/docs/programmatic-access/file-download-services#small-molecule-files)。比如我们需要做分子对接,那么我们需要的是 mol2 的文件格式。
有几种下载文件的方法——我们今天将使用一个名为 requests 的 Python 库。在接下来的单元格中,我们将导入 requests 库,使用 requests.get 函数从 RCSB PDB 下载单个文件,并检查该文件是否正确下载到 ligands 文件夹中。如果成功,我们将使用 for 循环将 molResultL 列表中的所有文件下载到 ligands 文件夹中。
import requests # 使我们能够从 PDB 拉取文件import os # 使我们能够创建一个目录来存储文件# 从我们的列表中下载其中一个叫做 11U.mol2 的文件res11U_mol2 = requests.get('https://files.rcsb.org/ligands/download/11U_ideal.mol2')# 检查文件是否正确下载。状态码 200 表示一切正常。res11U_mol2.status_code# 输出应为:200# 为了真正确定,让我们一行一行地查看文件。首先,我们将下载的内容写入一个文件。# 为我们的结果创建一个 ligands 文件夹os.makedirs("ligands", exist_ok=True)with open("ligands/res11U.mol2", "w+") as file:file.write(res11U_mol2.text)# 现在我们使用这些命令读取文件并确保它正确下载。作为替代方法,我们可以转到 Jupyter 桌面的 ligands 文件夹并点击 res11U.mol2 来确认文件是否正确。file1 = open('ligands/res11U.mol2', 'r')file_text = file1.read() # 这将文件读取为字符串print(file_text)

我们可以看到在本地的文件夹中多了一个名称为 ligands 的文件夹,里面有个 11U.mol2 的文件。既然我们已经确认了下载过程有效,现在我们将使用 for 循环在一个单元格中下载整个配体列表。首先我们可以定义一个变量 baseUrl,它表示配体文件所在的 URL。这个 URL 只缺少具体的配体文件名。其次,我们设置一个 for 循环,遍历 molResultL 列表中的每个项(作为 ChemID),该列表在上面已经生成。然后,基于一个变量(配体的 3 个字母的名称作为 ChemID,后跟 _ideal.mol2)为文件名赋值给变量 cFile。这样就为我们想要从RCSB PDB API下载数据的完整URL(作为 cFileUrl)赋值。注意,URL由第一行中定义的 baseUrl 加上我们刚定义的文件名(现在赋值给变量 cFile)组成。接下来我们可以使用 os.path 命令将文件(CFileLocal)写入 ligands文件夹。使用 requests.get 通过API调用从RCSB PDB下载数据。最后我们使用with open函数写入文件。如果一切顺利,这将会把我们列表中的所有配体下载到 ligands 文件夹中。
# 定义基础URL,用于指定配体文件的下载地址baseUrl = "https://files.rcsb.org/ligands/download/"# 遍历 molResultL 列表中的每个配体ID(ChemID)for ChemID in molResultL:# 为每个配体文件生成文件名,例如 "11U_ideal.mol2"cFile = f"{ChemID}_ideal.mol2"# 创建完整的下载URL,将 baseUrl 与文件名组合cFileUrl = baseUrl + cFile# 定义本地保存路径,将文件保存在 "ligands" 文件夹中cFileLocal = "ligands/" + cFile# 使用 requests.get 通过URL下载配体文件response = requests.get(cFileUrl)# 打开指定路径的文件并写入下载的内容with open(cFileLocal, "w+") as file:file.write(response.text)
这段代码会执行一段时间,当结束之后大家再看 ligands 的文件夹,里面会有很多的结构。
大家可以通过练习来掌握这个工具,使用 BRENDA 酶数据库查找酒精脱氢酶的 EC 编号(或者寻找你感兴趣的酶)。有多少结构的配体分子量在 400到700之间?有多少独特的配体与这些结构结合?其实我们可以只输入EC类别的上层级别来识别更多的配体。大家可以练习针对任何 EC 编号重复进行。如果有时间,可以尝试更广泛的搜索,只使用2或3个级别,例如3.4或3.4.21,看看能找到什么。
ECnumber = "1.1.1.1" # 我们稍后会再次使用这个变量q1 = attrs.rcsb_polymer_entity.rcsb_ec_lineage.id == ECnumber # 查找酒精脱氢酶q2 = attrs.chem_comp.formula_weight >= 400 # 设置分子量的下限q3 = attrs.chem_comp.formula_weight <= 700 # 设置分子量的上限query = q1 & q2 & q3 # 将这三个查询条件组合成一个ResultL = list(query("entry"))molResultL = list(query("mol_definition"))print("在 EC 编号", ECnumber, "中,有", len(ResultL), "个结构的配体分子量在 400 到 700 之间。")print("在 EC 编号", ECnumber, "的结构中,有", len(molResultL), "个独特的配体。以下是这", len(molResultL), "个配体的列表。")molResultL

这节课我们就到这里,在下节课我们将可视化配体与蛋白的结合,并进行分析。我们下节课见。



沪公网安备 31011002003500