在分子动力学模拟领域,PDB(Protein Data Bank)文件常存在各类问题,而PDBFixer可有效解决这些难题。以下为您详细介绍。
一、PDB文件常见问题
-
氢原子缺失:X射线晶体学生成的结构,多数氢原子通常缺失。
-
重原子缺失:柔性区域因电子密度难以清晰解析,部分重原子可能缺失,范围从侧链末端几个原子到整个环。
-
末端原子缺失:许多PDB文件缺少链末端应有的原子。
-
非标准残基:为晶体学目的添加的非标准残基,可能并非模拟所需天然分子成分。
-
多余成分:文件可能包含实验添加的盐、配体或其他分子,或晶胞中有多个蛋白质拷贝,而我们仅需模拟单个拷贝。
-
原子位置重复:部分原子可能列出多个位置。
-
溶剂与膜缺失:若在显式溶剂中模拟,需添加水盒;对于膜蛋白,还需添加脂质膜。
二、PDBFixer安装指南
-
Conda安装 最简单的方式是使用conda或mamba,在命令行输入:
conda install -c conda-forge pdbfixer
-
源码安装 先下载仓库,进入根目录,再执行:
python setup.py install
此操作将安装PDBFixer的Python包及命令行程序pdbfixer
。需注意,运行PDBFixer前,要先安装OpenMM,参照OpenMM手册说明操作。同时,建议安装CUDA或OpenCL以提升速度,PDBFixer还依赖NumPy。使用conda安装时,这些依赖会自动安装。
三、PDBFixer使用方法
(一)桌面应用模式
-
在命令行输入
pdbfixer
,它会通过网页浏览器展示用户界面。通常会自动打开浏览器显示界面,若未自动打开,可手动在浏览器输入http://localhost:8000
。 - 用户界面操作流程
-
加载文件:可从本地磁盘选择PDB文件,或输入PDB结构标识符从RCSB下载。
-
选择链:可在此选择移除结构部分内容,界面列出文件中所有链,取消勾选不想模拟的链即可。还可选择移除杂原子,有保留所有杂原子、只保留水删除其他杂原子、删除所有杂原子三种选项。
-
添加残基:若文件有缺失残基(依SEQRES记录序列判断),此处会列出,选择要添加的缺失残基块后点击“继续”。
-
转换残基:若文件含非标准残基,此页可将其替换为标准残基,程序给出建议替换,也可自行选择其他。
-
添加重原子:列出文件中所有缺失重原子并自动添加。
-
添加氢、水和膜:可选择添加缺失氢原子(可指定pH确定质子化状态)、添加水盒(同时添加抗衡离子中和系统,还能按需添加更多离子)、添加脂质膜(支持POPC和POPE脂质)。
-
保存文件:处理完成后,点击“保存文件”将处理后的PDB文件保存到磁盘。若还有其他文件要处理,点击“处理另一个文件”;若处理完毕,点击右上角“退出”。
-
(二)命令行应用模式
-
若想了解命令行界面使用说明,在命令行输入
pdbfixer --help
,可查看各类参数信息。 -
命令行示例
pdbfixer --keep-heterogens=water --replace-nonstandard --water-box=4.0 4.0 3.0 myfile.pdb
此命令加载myfile.pdb
,添加现有残基缺失原子,但不添加缺失残基;在pH 7.0条件下添加氢原子;替换非标准氨基酸或核苷酸为标准的;保留文件中水分子,删除其他杂原子;添加4×4×3纳米大小水盒,必要时添加抗衡离子(Na +或Cl -),但不添加其他离子(默认离子强度为0.0),处理结果写入output.pdb
文件。
(三)Python API模式
-
这是功能最强大的使用方式,可对PDB文件处理过程进行编程控制。使用前需熟悉OpenMM API。
-
代码示例
from pdbfixer import PDBFixer
from openmm.app import PDBFile
fixer = PDBFixer(filename='myfile.pdb')
# 调用各种方法对fixer进行操作
# 例如:
fixer.findMissingResidues()
fixer.findNonstandardResidues()
fixer.replaceNonstandardResidues()
fixer.removeHeterogens(True)
fixer.findMissingAtoms()
fixer.addMissingAtoms()
fixer.addMissingHydrogens(7.0)
fixer.addSolvent(fixer.topology.getUnitCellDimensions())
PDBFile.writeFile(fixer.topology, fixer.positions, open('output.pdb', 'w'))
- 各种方法说明
-
移除链:
fixer.removeChains(indices)
,indices
为要移除的链的索引列表。 -
识别缺失残基:
fixer.findMissingResidues()
,识别SEQRES记录中无原子数据的残基,但不立即添加,结果存于missingResidues
字段,该字段为字典,键由链索引和链内残基索引组成元组,值为要插入的残基名称列表,之后可修改此字典决定实际插入残基。 -
替换非标准残基:先调用
fixer.findNonstandardResidues()
,结果存于nonstandardResidues
字段,该字段为列表,每个元素由残基对象和建议替换残基名称组成元组,调用fixer.replaceNonstandardResidues()
前可修改此列表。 -
移除杂原子:
fixer.removeHeterogens(False)
,参数为False
时移除所有杂原子包括水,为True
时保留水移除其他杂原子。 -
添加缺失重原子:先调用
fixer.findMissingAtoms()
,识别出的缺失重原子存于missingAtoms
和missingTerminals
字段,这两个字段均为字典,键为残基对象,值为原子名称列表,之后调用fixer.addMissingAtoms()
添加所有重原子,包括缺失的残基和替换非标准残基后缺失的原子。 -
添加缺失氢原子:
fixer.addMissingHydrogens(7.0)
,参数为pH值,用于选择质子化状态。 -
添加水盒:
addSolvent(self, boxSize, positiveIon='Na+', negativeIon='Cl-', ionicStrength=0*molar)
,boxSize
为水盒尺寸的Vec3对象,还可指定离子类型和离子强度。 -
添加脂质膜:
addMembrane(self, lipidType='POPC', membraneCenterZ=0*nanometer, minimumPadding=1*nanometer, positiveIon='Na+', negativeIon='Cl-', ionicStrength=0*molar)
,lipidType
可选POPC
或POPE
,还可指定膜中心位置、最小填充距离等。
-
四、非标准残基处理
-
PDBFixer知晓如何构建标准氨基酸和核苷酸。对于PDB化学组件字典中定义的残基,如模拟含硒代半胱氨酸(PDB代码SEC)的蛋白质,调用
fixer.downloadTemplate('SEC')
,之后可像处理标准残基一样处理。 -
对于不在PDB化学组件字典中的分子或残基,需自行定义模板。通过
registerTemplate()
方法,传入OpenMM拓扑对象描述残基结构,以及描述残基典型构象的位置列表。若残基是大分子一部分,还需传入第三个参数,即布尔标志列表,指定哪些原子在非末端残基中应省略。