Low-Resolution (Centroid) Scoring
Rosetta 可以将蛋白质构象结构以低分辨率表示,这能让能量得分计算过程加快。
首先导入pdb结构,然后计算 full-atom 能量得分:
pose = pyrosetta.pose_from_pdb("inputs/6Q21_A.pdb")
sfxn = pyrosetta.get_score_function()
sfxn(pose)
1215.729069796814
查看第五个氨基酸残基,并注意原子数目以及第五个氨基酸残基的坐标。
print(pose.residue(5))
Residue 5: LYS (LYS, K):
Base: LYS
Properties: POLYMER PROTEIN CANONICAL_AA POLAR CHARGED POSITIVE_CHARGE METALBINDING SIDECHAIN_AMINE ALPHA_AA L_AA
Variant types:
Main-chain atoms: N CA C
Backbone atoms: N CA C O H HA
Side-chain atoms: CB CG CD CE NZ 1HB 2HB 1HG 2HG 1HD 2HD 1HE 2HE 1HZ 2HZ 3HZ
Atom Coordinates:
N : 20.315, 43.835, 78.015
CA : 20.418, 42.863, 79.118
C : 19.697, 43.46, 80.329
O : 20.096, 44.486, 80.897
CB : 21.858, 42.487, 79.491
CG : 22.791, 42.176, 78.316
CD : 22.406, 40.943, 77.485
CE : 23.009, 40.932, 76.075
NZ : 22.748, 42.169, 75.307
H : 21.0493, 44.5172, 77.8902
HA : 19.9193, 41.9417, 78.815
1HB : 22.3125, 43.3019, 80.0551
2HB : 21.8492, 41.6078, 80.1356
1HG : 22.8124, 43.0262, 77.6332
2HG : 23.8008, 42.0064, 78.6884
1HD : 22.7418, 40.0399, 77.9965
2HD : 21.3219, 40.8985, 77.3807
1HE : 24.088, 40.801, 76.1421
2HE : 22.5982, 40.0953, 75.5101
1HZ : 23.1708, 42.0938, 74.3926
2HZ : 21.751, 42.2999, 75.2069
3HZ : 23.1434, 42.9592, 75.7961
Mirrored relative to coordinates in ResidueType: FALSE
然后通过SwitchResidueTypeSetMover 将pose转换成centroid,然后查看第五个氨基酸残基的情况是否发生了改变:
switch = SwitchResidueTypeSetMover("centroid")
switch.apply(pose)
print(pose.residue(5))
core.chemical.GlobalResidueTypeSet: Finished initializing centroid residue type set. Created 62 residue types
core.chemical.GlobalResidueTypeSet: Total time to initialize 0.058948 seconds.
Residue 5: LYS (LYS, K):
Base: LYS
Properties: POLYMER PROTEIN CANONICAL_AA POLAR CHARGED POSITIVE_CHARGE SIDECHAIN_AMINE ALPHA_AA L_AA
Variant types:
Main-chain atoms: N CA C
Backbone atoms: N CA C O H
Side-chain atoms: CB CEN
Atom Coordinates:
N : 20.315, 43.835, 78.015
CA : 20.418, 42.863, 79.118
C : 19.697, 43.46, 80.329
O : 20.096, 44.486, 80.897
CB : 21.8754, 42.543, 79.454
CEN: 23.4957, 41.1851, 79.3707
H : 21.0493, 44.5172, 77.8902
Mirrored relative to coordinates in ResidueType: FALSE
从原子数量上看,主链没有发生改变,但是侧链的原子数减少了很多。从坐标上看,主链没有发生改变,侧脸上的CB没有发生变化,但是新增一个CEN原子。
然后,通过 standard centroid score function定义score3 对新的pose进行打分:
cen_sfxn = pyrosetta.create_score_function("score3")
cen_sfxn(pose)
-4.509358254597608
#分数与之前的发生了变化
同样,我们可以通过SwitchResidueTypeSetMover("fa_standard") 将centroid转换成full-atom的pose,并查看第五个氨基酸是否发生了变化。
fa_switch = SwitchResidueTypeSetMover("fa_standard")
fa_switch.apply(pose)
print(pose.residue(5))
Residue 5: LYS (LYS, K):
Base: LYS
Properties: POLYMER PROTEIN CANONICAL_AA POLAR CHARGED POSITIVE_CHARGE METALBINDING SIDECHAIN_AMINE ALPHA_AA L_AA
Variant types:
Main-chain atoms: N CA C
Backbone atoms: N CA C O H HA
Side-chain atoms: CB CG CD CE NZ 1HB 2HB 1HG 2HG 1HD 2HD 1HE 2HE 1HZ 2HZ 3HZ
Atom Coordinates:
N : 20.315, 43.835, 78.015
CA : 20.418, 42.863, 79.118
C : 19.697, 43.46, 80.329
O : 20.096, 44.486, 80.897
CB : 21.8754, 42.5429, 79.4539
CG : 22.8944, 43.244, 78.5655
CD : 22.2113, 44.1202, 77.5262
CE : 20.6967, 44.0574, 77.6573
NZ : 20.2706, 43.1587, 78.7642
H : 21.0493, 44.5172, 77.8902
HA : 19.9306, 41.9373, 78.8101
1HB : 22.0814, 42.8255, 80.4867
2HB : 22.0409, 41.4686, 79.3693
1HG : 23.5468, 43.8654, 79.1801
2HG : 23.5056, 42.4999, 78.0558
1HD : 22.5361, 45.154, 77.6512
2HD : 22.4937, 43.7874, 76.5274
1HE : 20.3065, 45.0564, 77.8461
2HE : 20.2655, 43.6934, 76.7248
1HZ : 19.2619, 43.1443, 78.8176
2HZ : 20.6116, 42.2236, 78.5898
3HZ : 20.6485, 43.497, 79.6375
Mirrored relative to coordinates in ResidueType: FALSE
主链的坐标未发生改变,但是侧链的坐标发生了细微的变化。
我们可以将这种大分的方法应用到我们上一篇文章中的折叠算法,可以发现速度有了很大的提升。
Note about Movers
不考虑特殊的存在PyMOLMover,SwitchResidueTypeSetMover 是我们使用pyrosetta遇到的第一个Mover。Pyrosetta中的每一个Mover都已经被设计好去应用的改变的pose。每一个Mover都要首先被创建,并且有一些参数需要被选择,最后可以通过apply()来应用到pose中。SwitchResidueTypeSetMover 是一个相对简单的Mover,只有一个参数centroid。
Protein Fragments
查看pyrosetta官网提供的 3mer.frags
首先load这个文件:
from pyrosetta.rosetta.core.fragment import *
fragset = ConstantLengthFragSet(3)
fragset.read_fragment_file("3mer.frags")
Using FragmentMover and MoveMap
然后我们创建一个新的Mover--FragmentMover --然后使用上面的fragment set 和MoveMap的参数。MoveMap是当我们使用Mover应用到pose的时候,控制改变pose的自由度(在这里,是主链的二面角),当MoveMap刚创建的时候,自由度设置为False,也就是0:
from pyrosetta.rosetta.protocols.simple_moves import ClassicFragmentMover
movemap = MoveMap()
movemap.set_bb(True)
mover_3mer = ClassicFragmentMover(fragset, movemap)
我们创建一个新的pose,然后通过mover_3mer 对其进行改造,我们可以通过PyMOL去观察改变前后的情况:
test_pose = pyrosetta.pose_from_sequence("RFPMMSTFKVLLCGAVLSRIDAG")
pmm = PyMOLMover()
pmm.apply(test_pose)
pmm.send_movemap(test_pose, movemap)
mover_3mer.apply(test_pose)
pmm.apply(test_pose)
每次使用mover_3mer,他都会随机选择一个3-mer的窗口,从fragment set中随机选择一个对应的片段来改变主链的二面角。
最后,我们上个随机折叠的算法是通过随机改变的二面角,同样也可以使用这里的在自然界中出现的二面角,随机应用到pose中,使他折叠的成功的可能性更大。