首页
/ RDKit中PDB文件读取的原子命名规范问题解析

RDKit中PDB文件读取的原子命名规范问题解析

2025-06-28 08:52:00作者:房伟宁

问题背景

在使用RDKit的MolFromPDBFile函数读取PDB文件时,用户发现某些特定原子(如溴Br、氯Cl等双字母元素符号)无法被正确读取。经过分析,这并非RDKit的bug,而是与PDB文件格式的严格规范有关。

PDB文件格式规范

PDB文件格式起源于Fortran时代,采用固定列位置的格式而非简单的空格分隔。对于ATOM/HETATM记录,各字段有严格的列位置要求:

  • 原子名称(13-16列)
  • 元素符号(77-78列)
  • 坐标(31-54列)
  • 其他字段也有各自固定的列范围

特别需要注意的是,原子名称必须严格位于13-16列,而17列用于替代位置标识符。当原子名称(如"Br14")过长或位置不正确时,就会导致读取失败。

解决方案

正确格式化PDB文件

对于双字母元素符号的原子,需要特别注意原子名称的位置。例如溴原子应格式化为:

ATOM     36 Br   LIG d   1      -1.819  14.472  27.463  1.00  0.00          Br

而不是:

ATOM     36 Br14  LIG d   1      -1.819  14.472  27.463  1.00  0.00          Br

使用RDKit创建PDB文件

RDKit提供了创建PDB文件的方法,可以避免手动格式化的错误:

from rdkit import Chem
import numpy as np

# 创建分子对象
m = Chem.RWMol()
m.AddAtom(Chem.Atom(35))  # 添加溴原子

# 设置原子坐标
conf = Chem.Conformer(1)
conf.SetPositions(np.array([[11.810, -18.885, -5.354]]))
m.AddConformer(conf)

# 设置PDB残基信息
res = Chem.AtomPDBResidueInfo()
res.SetName("BR14")  # 设置原子名称
res.SetResidueNumber(1)  # 设置残基编号
m.GetAtomWithIdx(0).SetPDBResidueInfo(res)

# 输出PDB格式
print(Chem.MolToPDBBlock(m))

最佳实践建议

  1. 对于双字母元素符号,确保原子名称不超过4个字符且位置正确
  2. 使用RDKit的API生成PDB文件而非手动创建
  3. 考虑使用更现代的分子文件格式(如SDF)替代PDB格式
  4. 在读取PDB文件时,建议先验证文件格式是否符合规范

通过遵循这些规范,可以确保RDKit正确读取包含各种元素的PDB文件,避免因格式问题导致的数据丢失。

登录后查看全文

项目优选

收起
kernelkernel
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
471
465
kernelkernel
deepin linux kernel
C
32
16
atomcodeatomcode
Claude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get Started
Rust
2.09 K
218
ops-nnops-nn
本项目是CANN提供的神经网络类计算算子库,实现网络在NPU上加速计算。
C++
700
1.4 K
docsdocs
暂无描述
Dockerfile
780
5.08 K
pytorchpytorch
Ascend Extension for PyTorch
Python
758
968
flutter_flutterflutter_flutter
本仓库是 Flutter SDK 与 Flutter Engine 的 OpenHarmony 适配版本,由 CPF-Flutter 团队维护。开发者可使用熟悉的 Flutter 技术栈开发 OpenHarmony 应用,3.35.7 及以后的适配版本可基于本仓库源码构建支持 OpenHarmony 的 Flutter Engine。
Dart
1.04 K
271
ops-transformerops-transformer
本项目是CANN提供的transformer类大模型算子库,实现网络在NPU上加速计算。
C++
880
2.03 K
mindquantummindquantum
MindQuantum is a general software library supporting the development of applications for quantum computation.
Python
183
111
openHiTLSopenHiTLS
旨在打造算法先进、性能卓越、高效敏捷、安全可靠的密码套件,通过轻量级、可剪裁的软件技术架构满足各行业不同场景的多样化要求,让密码技术应用更简单,同时探索后量子等先进算法创新实践,构建密码前沿技术底座!
C
1.11 K
682