如何使用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
相关产品推荐
相关产品推荐

