PDBFixer进行分子动力学模拟前处理
在分子动力学模拟之前,通常需要对蛋白的结构进行预处理,如补全残基等。使用斯坦福大学 Pande 课题组的小工具 PDBFixer 便能通过 GUI 或者命令行轻松解决这一问题。
PDBFixer 能够解决的问题包括: - 添加缺失的重原子 - 添加缺失的氢原子 - 添加缺失的 loop - 将非标准残基转换为对应的标准残基 - 对于某些原子,选择多个备选位置中的一个位置 - 删除不需要的蛋白质链 - 删除不需要的 heterogens - 添加水盒子和离子
Notes: - 补全 loop 时,缺失的残基序列是从 pdb 文件开头的 SEQRES records
中获取 - fixer.replaceNonstandardResidues()
用来突变氨基酸
安装
PDBFixer 可以通过 Omnia 套件进行安装,自动安装其它依赖条件。例如: 1
2
3
4# Add conda-forge and omnia to your channel list
conda config --add channels omnia --add channels conda-forge
# Install the 'pdbfixer' a package
conda install pdbfixer
简单使用
PDBFixer 具有 GUI, Command Line 和 Python API 三种使用模式。
GUI 操作
在终端中输入 pdbfixer
, 然后在浏览器中打开 http://localhost:8000
。之后按照提示进行操作即可。默认输出文件为 output.pdb
。
Command Line 操作
PDBFixer 也可以通过命令行进行操作,但部分功能受限。当在终端中输入 pdbfixer
且带有任意选项或参数,即可使用命令行形式。 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29pdbfixer --help
Usage: pdbfixer
pdbfixer [options] filename
Options:
-h, --help show this help message and exit
--pdbid=PDBID PDB id to retrieve from RCSB [default: None]
--url=URL URL to retrieve PDB from [default: None]
--output=FILENAME output pdb file [default: output.pdb]
--add-atoms=ATOMS which missing atoms to add: all, heavy, hydrogen, or
none [default: all]
--keep-heterogens=OPTION
which heterogens to keep: all, water, or none
[default: all]
--replace-nonstandard
replace nonstandard residues with standard equivalents
--add-residues add missing residues
--water-box=X Y Z add a water box. The value is the box dimensions in nm
[example: --water-box=2.5 2.4 3.0]
--ph=PH the pH to use for adding missing hydrogens [default:
7.0]
--positive-ion=ION positive ion to include in the water box: Cs+, K+,
Li+, Na+, or Rb+ [default: Na+]
--negative-ion=ION negative ion to include in the water box: Cl-, Br-,
F-, or I- [default: Cl-]
--ionic-strength=STRENGTH
molar concentration of ions to add to the water box
[default: 0.0]
1 | pdbfixer myfile.pdb --keep-heterogens=water --replace-nonstandard --water-box=4.0 4.0 3.0 |
以上命令会自动为输入文件添加缺失的氢原子和重原子(但不会添加缺失的残基),加氢使用默认的 pH 7.0。如果文件中包含非标准氨基酸或核酸,会转换为最接近的标准氨基酸。文件中的水分子会保留,而其它杂原子将会被清除。最后,会输出文件 'output.pdb'。 --add-residues
选项会依据初始pdb中的SEQRES 字段来补全缺失的残基,故可以在此SEQRES字段中增加或减少残基来确定 --add-residues 参数要添加哪些残基。
Python API 操作
这种方式是 PDBFixer 最为复杂也是功能最为完善同时也便于控制每一个细节的使用方式。 PDBFixer 基于 OpenMM,同时也使用它的 API。所以最好是提前了解 OpenMM 的 API。(然而并不了解,那就先强学一波... ) 主要流程为导入结构,进行处理,之后再保存结构。所以脚本的框架为: 1
2
3
4
5
6
7
8from pdbfixer import PDBFixer
from simtk.openmm.app import PDBFile
fixer = PDBFixer(filename='myfile.pdb')
# ...
# Call various methods on the PDBFixer
# ...
PDBFile.writeFile(fixer.topology, fixer.positions, open('output.pdb', 'w'))
Remove Chains
1 | fixer.remove(indices) |
Identify Missing Residues
1 | fixer.findMissingResidues() # 确定缺失的残基(从 pdb 文件开头的 SEQRES records 中获取) |
Replace Nonstandard Residues
1 | fixer.findNonstandardResidues() |
fixer.findMissingAtoms() fixer.addMissingAtoms()
findMissingAtoms() 确定所有缺失的重原子,然后保存在 missingAtoms 和 missingTerminals 中。二者的类型都是字典,key 是 Residue objects,value 是 atom names 构成的列表。
missingAtoms 包括在标准氨基酸中应当存在的原子,missingTerminals 包含在端基中应当存在的原子,可以在 addMissingAtoms() 可以进行修改。
addMissingAtoms() 调用之后,会添加之前确定的所有重原子,包括 findMissingAtoms() 和 findMissingResidues() 所确定的。 此外,当你调用 replaceNonstandardResidues() 的时候,只是删去了不属于目标残基的原子,并没有实时添加新的原子。只有在调用 addMissingAtoms() 之后才会真正的进行添加。 1
2
### Add Missing Hydrogens
会基于对应的 pH 值来进行质子化。 1
2
### Add Water
addSolvent(self, boxSize, positiveIon='Na+', negativeIon='Cl-', ionicStrength=0*molar) # 完整调用
boxSize 是一个 Vec3 object,用来指定水盒子的维度。阳离子和阴离子分别包括Cs+, K+, Li+, Na+, and Rb+; Cl-, Br-, F-, and I-
fixer.addSolvent(Vec3(5, 5, 5)nanometer, positiveIon='K+', ionicStrength=0.1molar) # builds a 5 nm cube of 0.1 molar potassium chloride: 1
2
3
4
# Examples
添加所有缺失的原子(包括缺失的重原子,缺失的残基,和氢原子),将非标准氨基酸全部替换为对应的标准氨基酸,然后删去除了水以外的所有杂原子。再添加与 crystallographic unit cell 匹配的水盒子。最后,保存为 output.pdb:
fixer = PDBFixer(filename='myfile.pdb') 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')) 1
2
只保留第一条链,删除其它所有链:1
2
只添加链中间缺失的残基,而不添加链两端缺失的残基。通过在调用 findMissingResidues() 之后修改 missingResidues 来实现:1
2
不添加与 crystallographic unit cell 相匹配的水盒子,而是添加足够大的水盒子。比如,先计算蛋白在每个坐标轴上的投影,设置盒子的长度与最大的投影一致:1
2
将所有非标准氨基酸突变为丙氨酸:1
2
# Others
fixer.templates
fixer.source
fixer.topology
fixer.positions
fixer.removeChains()
fixer.findMissingResidues()
fixer.missingResidues
fixer.findNonstandardResidues()
fixer.nonstandardResidues
fixer.replaceNonstandardResidues()
fixer.modifiedResidues fixer.applyMutations
fixer.removeHeterogens()
fixer.findMissingAtoms()
fixer.missingAtoms
fixer.missingTerminals fixer.addMissingAtoms()
fixer.addMissingHydrogens()
fixer.addSolvent()
################################### ```
Ref: - PDBFixer Manual