AlphaFold 蛋白质结构可视化指南:从序列到可交互 3D 模型的 4 个步骤
【免费下载链接】alphafoldOpen source code for AlphaFold 2.项目地址: https://gitcode.com/GitHub_Trending/al/alphafold
AlphaFold 是 DeepMind 开源的蛋白质结构预测系统:输入一条氨基酸序列,它输出三维原子坐标,并为每个残基打上 pLDDT 置信度评分。本文按"序列准备 → 运行预测 → 结构渲染 → 结果解读"四步,带你把预测结果做成可旋转、可缩放、按置信度着色的交互式 3D 模型,读完即可在本地或 Colab 中复现同样的效果。
下图是 AlphaFold 对 CASP14 测试集的预测演示,骨架颜色就是按 pLDDT 分档渲染的结果,也是本文要复现的最终形态:
先认识 AlphaFold 可视化链路的 4 个模块
做可视化之前,先搞清楚每个文件负责什么,后面写代码时才知道去哪找函数:
alphafold/notebooks/notebook_utils.py:序列清洗校验、MSA(多序列比对)统计绘图,是 Colab 工作流的主要工具层alphafold/model/:模型核心,config.py提供模型预设,data.py加载模型参数alphafold/common/protein.py:from_prediction()把预测字典组装成Protein对象,to_pdb()转成标准 PDB 文本alphafold/relax/:用 AMBER 做能量松弛,修复小范围立体化学问题
官方 Colab notebook notebooks/AlphaFold.ipynb 把以上模块串成了完整流程。本地安装走 Docker 路线:克隆仓库后运行scripts/download_all_data.sh下载遗传数据库,再用 run_alphafold.py 执行预测;本地版对多聚体精度更高,Colab 版用的是简化参数。
git clone https://gitcode.com/GitHub_Trending/al/alphafold准备输入:序列清洗与 MSA 覆盖度检查
AlphaFold 的输入是一条单字母代码序列,长度需在 16~2500 之间(Colab 版限制)。clean_and_validate_single_sequence()会先去掉空白字符、统一转大写,再检查是否全部落在 20 种标准氨基酸范围内,最后核对长度,任何一项不过都会抛出带具体原因的ValueError。
from alphafold.notebooks import notebook_utils seq = notebook_utils.clean_and_validate_single_sequence( input_sequence='MAAHKGAEHHHKAAEHHEQAAKHHHAAAEHHEKGEHEQAAHHADTAYAHHKHAEEHAAQAAKHDAEHHAPKPH', min_length=16, max_length=2500)预测质量很大程度取决于 MSA 覆盖度:同源序列越多,结构证据越强。官方 notebook 用分块 JackHMMER 对 UniRef90、BFD 等数据库做搜索,搜完会打印去重后的序列数,并用show_msa_info()画出"每个位置非空氨基酸计数"曲线,帮你快速判断哪些区域证据薄弱。
merged_msa = notebook_utils.merge_chunked_msa( results=raw_msa_results[seq]['uniref90'], max_hits=10_000) notebook_utils.show_msa_info(single_chain_msas=[merged_msa], sequence_index=1)曲线在某个位置附近明显下凹,说明该区域缺少同源序列支撑,最终预测的 pLDDT 往往也偏低。
运行预测:配置模型、取参数、输出 pLDDT
预测这一步涉及三个函数:config.model_config()按预设名生成网络配置,data.get_model_haiku_params()加载对应参数,model.RunModel负责跑前向推理。
import random from alphafold.model import config, data, model model_name = 'model_1' # config.MODEL_PRESETS['monomer'] 中的预设 cfg = config.model_config(model_name) cfg.data.eval.num_ensemble = 1 params = data.get_model_haiku_params(model_name, './alphafold/data') runner = model.RunModel(cfg, params) feats = runner.process_features(np_example, random_seed=0) prediction = runner.predict(feats, random_seed=random.randrange(2**31)) print('mean pLDDT: %.1f' % prediction['plddt'].mean())prediction是一个字典,prediction['plddt']逐残基给出 0~100 的置信度评分,可视化阶段会直接用它着色。实际流程还会遍历多个预设模型(单链取config.MODEL_PRESETS['monomer'],多链取'multimer'),按置信度挑出最优的一个。
渲染 3D 结构:py3Dmol 按 pLDDT 分档着色
预测字典本身只是数字,要和输入特征一起交给protein.from_prediction()才能得到结构;随后to_pdb()把它转成 PDB 文本交给 py3Dmol 渲染:
from alphafold.common import protein prot = protein.from_prediction( feats, prediction, b_factors=prediction['plddt'][:, None], remove_leading_feature_dimension=is_monomer) pdb_text = protein.to_pdb(prot)b_factors参数把 pLDDT 写进 PDB 的 B-factor 列,py3Dmol 就能按这个数值分档上色。官方 notebook 采用四档配色:
PLDDT_BANDS = [(0, 50, '#FF7D45'), (50, 70, '#FFDB13'), (70, 90, '#65CBF3'), (90, 100, '#0053D6')] view = py3Dmol.view(width=800, height=600) view.addModelsAsFrames(pdb_text) color_map = {i: bands[2] for i, bands in enumerate(PLDDT_BANDS)} view.setStyle({'model': -1}, {'cartoon': {'colorscheme': {'prop': 'b', 'map': color_map}}}) view.zoomTo() view.show()多链结构的默认视图是按链着色,便于分辨不同亚基:
multichain_view = py3Dmol.view(width=800, height=600) multichain_view.addModelsAsFrames(pdb_text) multichain_view.setStyle({'model': -1}, {'cartoon': {'colorscheme': 'chain'}}) multichain_view.zoomTo() multichain_view.show()想叠加侧链,在样式字典里追加'stick': {}即可,这与官方 notebook 的show_sidechains选项对应。
如何解读置信度配色,以及 PDB 文件的后续用途
读图时记住两条规则就够了:
- pLDDT > 90 的残基(深蓝)结构通常可靠,可以直接引用
- pLDDT < 50 的区域(橙色)多为无序区或建模困难区,下结论前建议结合实验数据
多链结构中,链与链之间的相对位置要看 PAE(预测对齐误差)矩阵,而不是只看单链的 pLDDT,这一点 技术说明 中有展开。
跑出的 PDB 文件是标准文本,除了 notebook 内置的交互视图,也能直接加载进 PyMOL 等外部软件,或用脚本批量处理。另外,官方流程中预测后会接一步 AMBER 松弛来修复小的立体化学违规;如果跳过松弛,结构可能残留少量违规,官方在 notebook 里留了run_relax开关供你选择。
【免费下载链接】alphafoldOpen source code for AlphaFold 2.项目地址: https://gitcode.com/GitHub_Trending/al/alphafold
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考