蛋白质结构数据资源(PDB)
做口袋识别,第一步就是找结构数据。PDB全称叫Protein Data Bank,说白了就是一个蛋白质结构的“档案馆”。我刚开始做这个方向时,还以为PDB只是个简单的文件仓库,后来才发现——嗯,这里面的门道不少。
你想想看,全球实验测出来的蛋白质结构,绝大部分都存这儿。从X射线衍射到冷冻电镜,再到核磁共振,PDB都收。我们现在要做的,就是知道怎么从里面“捞”出想要的数据。
PDB 到底是个什么库?
PDB 建于 1971 年,最初只有 7 个结构。现在?超过 20 万条记录了。我个人习惯把它当“结构领域的主干数据库”,几乎所有口袋识别任务,数据源都是它。
每条结构记录有一个唯一的 PDB ID,4 位字符。比如 1a1e、4pep、7b3c。你可以通过这些 ID 直接下载结构文件。
PDB 数据仓库的“来世今生”
PDB 数据库这些年经历了巨大的增长。我记得当初做药物设计时,手上能用的高分辨率结构就那么几个,现在同一个靶点可能有几十上百个结构可选。下表展示了几个关键里程碑:
| 年代 | 结构数量(约) | 主要方法 |
|---|---|---|
| 1971 | 7 | X 射线 |
| 1990 | 500+ | X 射线、NMR |
| 2000 | 13,000+ | X 射线、NMR |
| 2010 | 60,000+ | X 射线、NMR、冷冻电镜起步 |
| 2020 | 170,000+ | 冷冻电镜爆发 |
| 2024 | 220,000+ | 冷冻电镜 + AI 辅助 |
看到这个增长曲线,你就能理解——学会在PDB里“淘金”有多重要。
PDB 文件长什么样?
PDB 官方提供了两种常用格式:.pdb 和 .cif(mmCIF)。前者是传统文本格式,每行固定宽度;后者是更现代的键值对格式,信息更完整。
我在项目中遇到过一种情况:用 .pdb 格式读到的配体原子坐标不全,换成 .cif 就好了。所以我建议你尽量用 mmCIF 格式做批处理。
一个典型的 .pdb 文件片段是这样的:
ATOM 1 N ALA A 1 12.345 45.678 23.901 1.00 15.23 N
ATOM 2 CA ALA A 1 13.456 46.789 24.012 1.00 14.89 C
ATOM 3 C ALA A 1 14.567 47.890 24.123 1.00 14.56 C
ATOM 4 O ALA A 1 14.678 48.901 24.234 1.00 14.23 O
ATOM 5 CB ALA A 1 12.345 47.123 22.345 1.00 15.01 C
每列都有固定含义:原子序号、原子名称、残基名称、链标识、残基序号、x/y/z 坐标、占有率、温度因子、元素符号。看不懂?没关系。做口袋识别,我们一般用 Biopython 或 ProDy 这类库来解析,不需要手写解析器。
从 PDB 批量下载——避坑指南
我曾经因为手写了一个爬虫去批量下载PDB文件,结果被服务器封了 IP。后来才知道,PDB 官方提供了专门的批量下载工具和 API。
推荐的方法有两种:
- 命令行 wget/rsync 同步:PDB 在多个镜像站点开放了 rsync 服务,非常适合全库同步或大范围筛选。
- REST API 按 ID 拉取:适合你知道具体 PDB ID 列表的场景。
下面是我常用的拉取方式,先下载一个 mmCIF 文件:
wget https://files.rcsb.org/download/4pep.cif
如果有多个 ID,可以写个简单的 Shell 循环:
for id in 4pep 1a1e 7b3c 2g5r; do
wget "https://files.rcsb.org/download/${id}.cif"
done
注意:别一次性并发太多请求,我建议加个 sleep 0.5 控制频率,避免触发反爬机制。
数据质量——不是所有结构都能用
你从 PDB 下载一个结构,不等于它“能用”。做口袋识别前,一定要评估结构质量。我总结了几个关键指标:
- 分辨率:X 射线和冷冻电镜结构的核心指标。一般要求 ≤ 3.0 Å,最好 ≤ 2.5 Å。分辨率太高,摸不到口袋细节。
- R 因子 / R free:反映实验模型与数据的吻合度。通常 R free ≤ 0.3 算可接受。
- 完整度:看结构是否有缺失的 loop 或侧链。缺失太多,口袋边界会失真。
- 配体存在:如果你要研究特定配体结合的口袋,确保结构里有完整的配体分子。
用工具看一眼结构
下载了结构,别急着跑计算。我建议你先可视化确认——你看,一个简单的操作能筛掉一半问题结构。
推荐几个轻量级方案:
- PyMOL:经典,脚本可控,适合批量处理。
- UCSF ChimeraX:新一代,交互好,适合快速检查。
- NGL Viewer(网页版):不需要安装,适合临时看结构。
知识体系总览
从上图能看到整个流程是串联的:拿到 ID 后获取文件,然后做质量筛查,通过可视化和口袋识别两个分支并行推进,最后汇总到结构准备步骤。我建议你严格按照这个顺序来做,能省不少返工时间。
实战:用 Python 批量抓 PDB
说了这么多,来点真家伙。下面这段代码是我在一个化合物筛选项目中用过的,用来从指定 ID 列表批量下载 mmCIF 文件并做简单质量筛选:
import requests
import os
pdb_ids = ["4pep", "1a1e", "7b3c", "2g5r"]
out_dir = "./cif_files"
os.makedirs(out_dir, exist_ok=True)
base_url = "https://files.rcsb.org/download/"
for pid in pdb_ids:
url = f"{base_url}{pid}.cif"
r = requests.get(url, timeout=10)
if r.status_code == 200:
with open(os.path.join(out_dir, f"{pid}.cif"), "wb") as f:
f.write(r.content)
print(f"OK: {pid}")
else:
print(f"FAIL: {pid} (status {r.status_code})")
_refine.ls_d_res_high 字段,提取分辨率信息,低于 3.5 Å 的直接标记“待重选”。你看,把质量评估前移,能大幅减少后续计算量的浪费。
到这里,你应该对 PDB 的结构数据获取有了清晰的路线图:哪个格式更可靠、怎么批量拉、质量怎么筛、可视化怎么辅助判断。掌握了这些,后面做口袋识别就不怕“巧妇难为无米之炊”了。