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

使用RDKit的rdMolAlign.AlignMol()时出现Bad Conformer Id错误

问题:RDKit运行分子对接时出现ValueError: Bad Conformer Id

尝试使用RDKit进行分子对接模拟,运行代码时触发ValueError: Bad Conformer Id错误,错误出现在rdMolAlign.AlignMol调用行。使用的蛋白文件为4POJ.pdb,代码如下:

from rdkit import Chem
from rdkit.Chem import AllChem
from rdkit.Chem import rdMolAlign

receptor= Chem.MolFromPDBFile('4POJ.pdb')
ligand= Chem.MolFromSmiles('CC(C(=O)O)N')

rdMolAlign.AlignMol(ligand,receptor)

ff=AllChem.MMFFGetMoleculeForceField(ligand,AllChem.MMFFGetMoleculeProperties(ligand),mmffvariant='MMFF94')

binding_energy= ff.Calcenergy()

print('binding energy:',binding_energy, 'kcal/mol')
错误原因与解决方法

核心错误原因

  1. 配体无3D构象:从SMILES创建的ligand只有2D结构,未生成3D构象,而rdMolAlign.AlignMol要求两个输入分子都必须包含至少一个3D构象才能执行对齐操作,因此触发错误。
  2. 对接逻辑错误:rdMolAlign.AlignMol是构象对齐工具,并非分子对接工具,直接将配体与整个受体蛋白对齐不符合分子对接逻辑,通常需将配体对齐到受体中原有的参考配体。
  3. 结合能计算错误:原代码仅计算了配体自身的能量,并非配体与受体的结合能,结合能需通过复合物总能量减去单独受体和配体的能量得到。

修正后的代码

from rdkit import Chem
from rdkit.Chem import AllChem
from rdkit.Chem import rdMolAlign

# 处理受体:读取PDB文件,保留原有氢并补全缺失氢
receptor = Chem.MolFromPDBFile('4POJ.pdb', removeHs=False)
receptor = Chem.AddHs(receptor)

# 处理配体:从SMILES创建分子,补氢后生成并优化3D构象
ligand = Chem.MolFromSmiles('CC(C(=O)O)N')
ligand = Chem.AddHs(ligand)
# 生成初始3D构象
AllChem.EmbedMolecule(ligand)
# 用MMFF力场优化构象
AllChem.MMFFOptimizeMolecule(ligand)

# (可选)若需对齐到受体中的原有配体,需先从4POJ.pdb中提取带3D构象的reference_ligand
# rdMolAlign.AlignMol(ligand, reference_ligand)

# 构建复合物分子
complex_mol = Chem.CombineMols(receptor, ligand)
complex_mol = Chem.AddHs(complex_mol)

# 分别计算受体、配体、复合物的能量
receptor_prop = AllChem.MMFFGetMoleculeProperties(receptor)
receptor_ff = AllChem.MMFFGetMoleculeForceField(receptor, receptor_prop)
receptor_energy = receptor_ff.CalcEnergy()

ligand_prop = AllChem.MMFFGetMoleculeProperties(ligand)
ligand_ff = AllChem.MMFFGetMoleculeForceField(ligand, ligand_prop)
ligand_energy = ligand_ff.CalcEnergy()

complex_prop = AllChem.MMFFGetMoleculeProperties(complex_mol)
complex_ff = AllChem.MMFFGetMoleculeForceField(complex_mol, complex_prop)
complex_energy = complex_ff.CalcEnergy()

# 计算结合能:复合物总能量 - 受体能量 - 配体能量
binding_energy = complex_energy - receptor_energy - ligand_energy
print('binding energy:', binding_energy, 'kcal/mol')

关键修正点说明

  • 给配体生成3D构象:通过AllChem.EmbedMolecule生成初始3D构象,再用MMFFOptimizeMolecule优化,确保配体有可用的3D坐标。
  • 正确处理受体:读取PDB时保留原有氢原子,再补全缺失的氢,保证力场计算的准确性。
  • 结合能计算逻辑:通过复合物与单独组分的能量差得到结合能,这是计算分子间结合能的标准方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 03:05:18