You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用BioPython识别蛋白质链中的供体原子与受体原子

用BioPython识别蛋白质结构中的氢键供体/受体原子

默认你已经掌握BioPython PDB模块的结构层级遍历逻辑,只需在原子遍历环节增加判定规则即可实现供体、受体的识别。

基础判定规则

首先明确通用的氢键供体、受体判定标准:

  • 氢键供体:属于N/O/S类电负性原子,且直接连接至少1个氢原子。注意脯氨酸(PRO)的主链N无活性氢,需排除在供体之外
  • 氢键受体:属于N/O/S类电负性原子,存在未参与成键的孤对电子,无需连接氢原子

实现代码示例

from Bio.PDB import PDBParser

# 预定义通用供体、受体原子对应残基表,可按需增减
donor_map = {
    "N": ["ALA", "ARG", "ASN", "ASP", "CYS", "GLN", "GLU", "GLY", "HIS", "ILE", "LEU", "LYS", "MET", "PHE", "SER", "THR", "TRP", "TYR", "VAL"],
    "ND1": ["HIS"], "ND2": ["ASN"], "NE": ["ARG"], "NE1": ["TRP"], "NE2": ["HIS", "GLN"], "NZ": ["LYS"],
    "OG": ["SER", "THR"], "OG1": ["THR"], "OH": ["TYR"], "SG": ["CYS"]
}

receptor_map = {
    "O": ["ALA", "ARG", "ASN", "ASP", "CYS", "GLN", "GLU", "GLY", "HIS", "ILE", "LEU", "LYS", "MET", "PHE", "PRO", "SER", "THR", "TRP", "TYR", "VAL"],
    "OD1": ["ASP", "ASN"], "OD2": ["ASP"], "OE1": ["GLU", "GLN"], "OE2": ["GLU"],
    "ND1": ["HIS"], "NE2": ["HIS"],
    "OG": ["SER"], "OG1": ["THR"], "OH": ["TYR"], "SD": ["MET"]
}

# 解析PDB文件
parser = PDBParser(QUIET=True)
structure = parser.get_structure("target_prot", "your_input.pdb")

# 遍历结构层级做判定
for model in structure:
    for chain in model:
        for residue in chain:
            # 跳过非标准残基、水分子,有需求可删除该行
            if residue.get_id()[0] != ' ':
                continue
            res_name = residue.get_resname()
            for atom in residue:
                atom_name = atom.get_name()
                # 供体判定
                if atom_name in donor_map and res_name in donor_map[atom_name]:
                    # 若PDB已加氢可开启氢存在校验,未加氢的PDB可注释该校验逻辑
                    has_h = False
                    for neighbor in atom.get_neighbors():
                        if neighbor.get_element() == "H":
                            has_h = True
                            break
                    if has_h or atom_name == "N": # 主链N默认带氢,适配未加氢PDB
                        print(f"供体:链{chain.get_id()} 残基{res_name}{residue.get_id()[1]} 原子{atom_name}")
                # 受体判定
                if atom_name in receptor_map and res_name in receptor_map[atom_name]:
                    print(f"受体:链{chain.get_id()} 残基{res_name}{residue.get_id()[1]} 原子{atom_name}")

注意事项

  • 如果你的PDB文件未添加氢原子,建议先通过reduce、pdbfixer等工具补氢后再做供体判定,结果准确率会更高
  • 上面的供体、受体对应表是通用规则,可根据你的研究场景调整增删对应原子、残基类型

内容的提问来源于stack exchange,提问作者user366312

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 22:06:03