pyrosetta3-Score Function Basics

Rosetta的能量函数

Rosetta能量函数的详细情况在我的另外一篇文章里,这里就不过多的赘述了,下面将具体到pyrosetta中去了解能量函数的使用。

pyrosetta中能量函数的使用

#导入pyrosetta
import pyrosetta
pyrosetta.init()
from pyrosetta.rosetta.core.scoring import *

#导入pdb的一条链
ras = pyrosetta.pose_from_pdb("6Q21_A.pdb")

#导入能量函数
from pyrosetta.teaching import *
sfxn = get_score_function(True) # ref2015 all-atom energy function

为了得到一个蛋白的能量得分,首先要通过pyrosetta.teaching 里面导入get_score_function(is_fullatom: bool) 函数,当为True时将返回ref2015 all-atom energy function,当为False时将返回centroid score function。在Centroid模型下,氨基酸的侧链被一个有一定半径大小的粗粒化球所替代,而在full-atom模型下,所有的侧链原子被显式的表示出来。

同时,我们这也可以通过改变不同能量项的权重去改变能量函数。

sfxn2 = ScoreFunction()
sfxn2.set_weight(fa_atr, 1.0)
sfxn2.set_weight(fa_rep, 1.0)
# 这里我们的能量函数只包括范德华力,并将范德华力的引力(fa_atr)和斥力(fa_rep)的权重都设置成1。

然后我们可以同时运行上面定义的两个能量函数sfxn和sfxn2来对pose进行操作。

print(sfxn(ras))
print(sfxn2(ras))
basic.io.database: Database file opened: scoring/score_functions/elec_cp_reps.dat
core.scoring.elec.util: Read 40 countpair representative atoms
core.pack.dunbrack.RotamerLibrary: shapovalov_lib_fixes_enable option is true.
core.pack.dunbrack.RotamerLibrary: shapovalov_lib::shap_dun10_smooth_level of 1( aka lowest_smooth ) got activated.
core.pack.dunbrack.RotamerLibrary: Binary rotamer library selected: /Users/kathyle/Computational Protein Prediction and Design/PyRosetta4.Release.python36.mac.release-208/pyrosetta/database/rotamer/shapovalov/StpDwn_0-0-0/Dunbrack10.lib.bin
core.pack.dunbrack.RotamerLibrary: Using Dunbrack library binary file '/Users/kathyle/Computational Protein Prediction and Design/PyRosetta4.Release.python36.mac.release-208/pyrosetta/database/rotamer/shapovalov/StpDwn_0-0-0/Dunbrack10.lib.bin'.
core.pack.dunbrack.RotamerLibrary: Dunbrack 2010 library took 0.450999 seconds to load from binary
1215.729069796814
154.59159174026854
sfxn.show(ras) #显示出能量函数的每一项
core.scoring: 
------------------------------------------------------------
 Scores                       Weight   Raw Score Wghtd.Score
------------------------------------------------------------
 fa_atr                       1.000   -1039.246   -1039.246
 fa_rep                       0.550    1193.837     656.611
 fa_sol                       1.000     682.582     682.582
 fa_intra_rep                 0.005     700.419       3.502
 fa_intra_sol_xover4          1.000      46.564      46.564
 lk_ball_wtd                  1.000     -14.597     -14.597
 fa_elec                      1.000    -195.387    -195.387
 pro_close                    1.250      97.210     121.513
 hbond_sr_bb                  1.000     -41.656     -41.656
 hbond_lr_bb                  1.000     -28.352     -28.352
 hbond_bb_sc                  1.000     -13.111     -13.111
 hbond_sc                     1.000      -7.771      -7.771
 dslf_fa13                    1.250       0.000       0.000
 omega                        0.400      41.525      16.610
 fa_dun                       0.700    1296.642     907.650
 p_aa_pp                      0.600     -25.496     -15.298
 yhh_planarity                0.625       0.000       0.000
 ref                          1.000      47.114      47.114
 rama_prepro                  0.450     197.781      89.002
---------------------------------------------------
 Total weighted score:                     1215.729

如果我们想要计算每一个氨基酸的能量,

ras.energies().show() #返回pose中每一个氨基酸的能量以及各项的能量
ras.energies().show(24) #返回24号氨基酸的能量以及各项的能量

根据之前的文章我们知道,范德华力的吸引力和排斥力、溶剂化能以及静电力都是与原子的类型和就离相关的,所以我们可以根据etable_atom_pair_energies(res1, atom_index_1, res2, atom_index_2, sfxn)两个原子来计算出他们之间的力。

res24 = ras.residue(24)
res20 = ras.residue(20)
res24_atomN = res24.atom_index("N")
res20_atomO = res20.atom_index("O")
pyrosetta.etable_atom_pair_energies(res24, res24_atomN, res20, res20_atomO, sfxn)
(-0.1505855046001568, 0.0, 0.5903452111877215, 2.173111777247698)
pose.energies().total_energies()[fa_atr] # 返回所有能量中fa_atr的贡献
pose.energies().residue_total_energies(5)[fa_atr] # 返回第五个氨基酸残基能量中fa_atr的贡献
# 如果出现NameError: name 'fa_atr' is not defined,记得导入from pyrosetta.rosetta.core.scoring import *
hbond_set = hbonds.HBondSet() # 创建一个set来储存氢键的能量和信息
pose.update_residue_neighbors() # 基于相邻的残基更新pose的energies
hbonds.fill_hbond_set(pose, False,hbond_set) 
hbond_set = pyrosetta.rosetta.core.pose.Pose.get_hbonds(pose) # 将hbonds填充到hbond_set 里面
hbond_set.show(pose) # 展示出pose中所有的氢键以及能量
emap = EMapVector() # 创建一个energy map
res102 = pose.pdb_info().pdb2pose("D", 102)
res408 = pose.pdb_info().pdb2pose("A", 408) 
# 获得两个氨基酸在pose中的number信息

sfxn.eval_ci_2b(pose.residue(res102), pose.residue(res408), pose, emap) # 计算这两个氨基酸之间的能量并将其储存在energy map里面
emap[fa_atr] #返回 energymap 中的fa_atr

参考

PyRosetta - Legacy PyRosetta Tutorials

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。