文章复现-No.1-Rosetta-KIC-Part-10-rosetta-GeneralizedKIC 示例-3
目标 使用GeneralizedKIC来对loops进行扰动 基于 RosettaScripts的来探索loop构象空间(基于蒙特卡洛算法) 输入 步骤: 运行: 期望输出 进一步阅读
目标
•如何使用GeneralizedKIC 来对已有的loop中的一些微小扰动进行采样
•如何使用GeneralizedKIC 和GenericMonteCarlo move来对loop构象进一个Monte Carlo 搜索
使用GeneralizedKIC来对loops进行扰动
应用场景:探索起始结构的构象时,或者插入片段来构建一个loop来refine起始模型时。
在本教程中,我们将学习如何使用GeneralizedKIC来扰动loops。我们将在loops构象空间中使用蒙特卡洛搜索,对loop构象进行扰动(使用GeneralizedKIC),接受的标准是扰动对backbone-only 打分函数的影响。
基于 RosettaScripts的来探索loop构象空间(基于蒙特卡洛算法)
输入
我们将会使用一个不是非常完美的loop构象来作为起始结构。
其应用场景就是在建立了一个不完美的构象之后进行优化。
此教程的起始模型
用于本教程的 rosetta.flags文件内容
-nstruct 1
-in:file:s inputs/2ND2_exercise1_solution4.pdb
-in:file:fullatom
-write_all_connect_info
-parser:protocol xml/exercise2.xml
-jd2:failed_job_exception false
-mute all
-unmute protocols.simple_moves.GenericMonteCarloMover
我们将会使用上个教程的script并对其进行修改,来适应我们的需求。
<ROSETTASCRIPTS>
<SCOREFXNS>
<ScoreFunction name="ref15sfxn" weights="ref2015.wts" />
<ScoreFunction name="bb_only" weights="empty.wts" >
<Reweight scoretype="fa_rep" weight="0.1" />
<Reweight scoretype="fa_atr" weight="0.2" />
<Reweight scoretype="hbond_sr_bb" weight="2.0" />
<Reweight scoretype="hbond_lr_bb" weight="2.0" />
<Reweight scoretype="rama_prepro" weight="0.45" />
<Reweight scoretype="omega" weight="0.4" />
<Reweight scoretype="p_aa_pp" weight="0.6" />
</ScoreFunction>
</SCOREFXNS>
<RESIDUE_SELECTORS>
</RESIDUE_SELECTORS>
<TASKOPERATIONS>
</TASKOPERATIONS>
<FILTERS>
</FILTERS>
<MOVERS>
<PeptideStubMover name="add_loop_residues" >
<Insert anchor_rsd="28" resname="ALA" />
<Insert anchor_rsd="29" resname="GLY" />
<Insert anchor_rsd="30" resname="ALA" />
<Prepend anchor_rsd="32" resname="ALA" />
<Prepend anchor_rsd="32" resname="ALA" />
</PeptideStubMover>
<DeclareBond name="new_bond" atom1="C" atom2="N" res1="31" res2="32" />
<MutateResidue name="mut1" target="28" new_res="ALA" />
<MutateResidue name="mut2" target="34" new_res="ALA" />
<GeneralizedKIC name="genkic" selector="lowest_energy_selector" selector_scorefunction="bb_only"
closure_attempts="5000" stop_when_n_solutions_found="5" >
<AddResidue res_index="28" />
<AddResidue res_index="29" />
<AddResidue res_index="30" />
<AddResidue res_index="31" />
<AddResidue res_index="32" />
<AddResidue res_index="33" />
<AddResidue res_index="34" />
<SetPivots res1="28" res2="31" res3="34" atom1="CA" atom2="CA" atom3="CA" />
<AddPerturber effect="set_dihedral" >
<AddAtoms res1="28" atom1="C" res2="29" atom2="N" />
<AddAtoms res1="29" atom1="C" res2="30" atom2="N" />
<AddAtoms res1="30" atom1="C" res2="31" atom2="N" />
<AddAtoms res1="31" atom1="C" res2="32" atom2="N" />
<AddAtoms res1="32" atom1="C" res2="33" atom2="N" />
<AddAtoms res1="33" atom1="C" res2="34" atom2="N" />
<AddValue value="180.0" />
</AddPerturber>
<CloseBond res1="31" res2="32" atom1="C" atom2="N" bondlength="1.328685" angle1="121.699997" angle2="116.199993" torsion="180.0" />
<AddPerturber effect="randomize_backbone_by_rama_prepro" >
<AddResidue index="28" />
<AddResidue index="29" />
<AddResidue index="30" />
<AddResidue index="31" />
<AddResidue index="32" />
<AddResidue index="33" />
<AddResidue index="34" />
</AddPerturber>
<AddFilter type="backbone_bin" residue="28" bin_params_file="ABBA" bin="A" />
<AddFilter type="backbone_bin" residue="34" bin_params_file="ABBA" bin="A" />
<AddFilter type="loop_bump_check" />
<AddFilter type="rama_prepro_check" residue="28" rama_cutoff_energy="0.5" />
<AddFilter type="rama_prepro_check" residue="31" rama_cutoff_energy="0.5" />
<AddFilter type="rama_prepro_check" residue="34" rama_cutoff_energy="0.5" />
</GeneralizedKIC>
</MOVERS>
<APPLY_TO_POSE>
</APPLY_TO_POSE>
<PROTOCOLS>
<Add mover="add_loop_residues" />
<Add mover="new_bond" />
<Add mover="mut1" />
<Add mover="mut2" />
<Add mover="genkic" />
</PROTOCOLS>
<OUTPUT />
</ROSETTASCRIPTS>
<MOVERS>
and <PROTOCOLS>
位置
需要删除的部分
<PeptideStubMover name="add_loop_residues" > <Insert anchor_rsd="28" resname="ALA" /> <Insert anchor_rsd="29" resname="GLY" /> <Insert anchor_rsd="30" resname="ALA" /> <Prepend anchor_rsd="32" resname="ALA" /> <Prepend anchor_rsd="32" resname="ALA" /> </PeptideStubMover> <DeclareBond name="new_bond" atom1="C" atom2="N" res1="31" res2="32" /> <MutateResidue name="mut1" target="28" new_res="ALA" /> <MutateResidue name="mut2" target="34" new_res="ALA" /><AddPerturber>
and <CloseBond>
。并向 GeneralizedKIC perturber加入 perturb_dihedral
。
这个perturber会对输入的二面角值加入一个微小的扰动,然后返回一个二面角值。
我们希望可以对loop上的氨基酸中的所有 phi 和 psi进行扰动。
<GeneralizedKIC ...> ... <AddPerturber effect="perturb_dihedral" > <AddAtoms res1="28" atom1="N" res2="28" atom2="CA" /> <AddAtoms res1="29" atom1="N" res2="29" atom2="CA" /> <AddAtoms res1="30" atom1="N" res2="30" atom2="CA" /> <AddAtoms res1="31" atom1="N" res2="31" atom2="CA" /> <AddAtoms res1="32" atom1="N" res2="32" atom2="CA" /> <AddAtoms res1="33" atom1="N" res2="33" atom2="CA" /> <AddAtoms res1="34" atom1="N" res2="34" atom2="CA" /> <AddAtoms res1="28" atom1="CA" res2="28" atom2="C" /> <AddAtoms res1="29" atom1="CA" res2="29" atom2="C" /> <AddAtoms res1="30" atom1="CA" res2="30" atom2="C" /> <AddAtoms res1="31" atom1="CA" res2="31" atom2="C" /> <AddAtoms res1="32" atom1="CA" res2="32" atom2="C" /> <AddAtoms res1="33" atom1="CA" res2="33" atom2="C" /> <AddAtoms res1="34" atom1="CA" res2="34" atom2="C" /> <AddValue value="10.0" /> </AddPerturber> </GeneralizedKIC><AddValue>标签可以粗略的视为确定了扰动的最大值(更准确的是标准差)。
下一步,我们将会删除除了 loop_bump_check filter之外的filter
<GeneralizedKIC name="genkic" selector="lowest_delta_torsion_selector" selector_scorefunction="bb_only"
closure_attempts="100" stop_when_n_solutions_found="1" >
<AddResidue res_index="28" />
<AddResidue res_index="29" />
<AddResidue res_index="30" />
<AddResidue res_index="31" />
<AddResidue res_index="32" />
<AddResidue res_index="33" />
<AddResidue res_index="34" />
<SetPivots res1="28" res2="31" res3="34" atom1="CA" atom2="CA" atom3="CA" />
<AddPerturber effect="perturb_dihedral" >
<AddAtoms res1="28" atom1="N" res2="28" atom2="CA" />
<AddAtoms res1="29" atom1="N" res2="29" atom2="CA" />
<AddAtoms res1="30" atom1="N" res2="30" atom2="CA" />
<AddAtoms res1="31" atom1="N" res2="31" atom2="CA" />
<AddAtoms res1="32" atom1="N" res2="32" atom2="CA" />
<AddAtoms res1="33" atom1="N" res2="33" atom2="CA" />
<AddAtoms res1="34" atom1="N" res2="34" atom2="CA" />
<AddAtoms res1="28" atom1="CA" res2="28" atom2="C" />
<AddAtoms res1="29" atom1="CA" res2="29" atom2="C" />
<AddAtoms res1="30" atom1="CA" res2="30" atom2="C" />
<AddAtoms res1="31" atom1="CA" res2="31" atom2="C" />
<AddAtoms res1="32" atom1="CA" res2="32" atom2="C" />
<AddAtoms res1="33" atom1="CA" res2="33" atom2="C" />
<AddAtoms res1="34" atom1="CA" res2="34" atom2="C" />
<AddValue value="10.0" />
</AddPerturber>
<AddFilter type="loop_bump_check" />
</GeneralizedKIC>
设置一个蒙特卡罗搜索
创建一个 GenericMonteCarlo mover,设置实验数为1000,温度为1, pre-apply 选项为false,以及打分函数使用bb_only
.这个move将会使用此打分函数来预测move的效果。
创建一个ParsedProtocol mover 来对GeneralizedKIC mover 进行封装,以及一些reporter mover来监视轨迹。
<ParsedProtocol name="mc_moves" >
<Add mover="last_accepted" />
<Add mover="genkic" />
<Add mover="current_attempt" />
</ParsedProtocol>
更新protocol section
<PROTOCOLS>
<Add mover="mc_mover" />
</PROTOCOLS>
<ROSETTASCRIPTS>
<SCOREFXNS>
<ScoreFunction name="ref15sfxn" weights="ref2015.wts" />
<ScoreFunction name="bb_only" weights="empty.wts" >
<Reweight scoretype="fa_rep" weight="0.1" />
<Reweight scoretype="fa_atr" weight="0.2" />
<Reweight scoretype="hbond_sr_bb" weight="2.0" />
<Reweight scoretype="hbond_lr_bb" weight="2.0" />
<Reweight scoretype="rama_prepro" weight="0.45" />
<Reweight scoretype="omega" weight="0.4" />
<Reweight scoretype="p_aa_pp" weight="0.6" />
</ScoreFunction>
</SCOREFXNS>
<RESIDUE_SELECTORS>
</RESIDUE_SELECTORS>
<TASKOPERATIONS>
</TASKOPERATIONS>
<FILTERS>
</FILTERS>
<MOVERS>
<GeneralizedKIC name="genkic" selector="lowest_delta_torsion_selector" selector_scorefunction="bb_only"
closure_attempts="100" stop_when_n_solutions_found="1" >
<AddResidue res_index="28" />
<AddResidue res_index="29" />
<AddResidue res_index="30" />
<AddResidue res_index="31" />
<AddResidue res_index="32" />
<AddResidue res_index="33" />
<AddResidue res_index="34" />
<SetPivots res1="28" res2="31" res3="34" atom1="CA" atom2="CA" atom3="CA" />
<AddPerturber effect="perturb_dihedral" >
<AddAtoms res1="28" atom1="N" res2="28" atom2="CA" />
<AddAtoms res1="29" atom1="N" res2="29" atom2="CA" />
<AddAtoms res1="30" atom1="N" res2="30" atom2="CA" />
<AddAtoms res1="31" atom1="N" res2="31" atom2="CA" />
<AddAtoms res1="32" atom1="N" res2="32" atom2="CA" />
<AddAtoms res1="33" atom1="N" res2="33" atom2="CA" />
<AddAtoms res1="34" atom1="N" res2="34" atom2="CA" />
<AddAtoms res1="28" atom1="CA" res2="28" atom2="C" />
<AddAtoms res1="29" atom1="CA" res2="29" atom2="C" />
<AddAtoms res1="30" atom1="CA" res2="30" atom2="C" />
<AddAtoms res1="31" atom1="CA" res2="31" atom2="C" />
<AddAtoms res1="32" atom1="CA" res2="32" atom2="C" />
<AddAtoms res1="33" atom1="CA" res2="33" atom2="C" />
<AddAtoms res1="34" atom1="CA" res2="34" atom2="C" />
<AddValue value="10.0" />
</AddPerturber>
<AddFilter type="loop_bump_check" />
</GeneralizedKIC>
<PDBTrajectoryRecorder name="last_accepted" filename="last_accepted.pdb" stride="20" />
<PDBTrajectoryRecorder name="current_attempt" filename="current_attempt.pdb" stride="20" />
<ParsedProtocol name="mc_moves" >
<Add mover="last_accepted" />
<Add mover="genkic" />
<Add mover="current_attempt" />
</ParsedProtocol>
<GenericMonteCarlo name="mc_mover" mover_name="mc_moves" trials="10000" temperature="1.0" preapply="false"scorefxn_name="bb_only" />
</MOVERS>
<APPLY_TO_POSE>
</APPLY_TO_POSE>
<PROTOCOLS>
<Add mover="mc_mover" />
</PROTOCOLS>
<OUTPUT />
</ROSETTASCRIPTS>
上述脚本在demos/tutorials/GeneralizedKIC/exercise2/xml/中
$> cd exercise2
$> $ROSETTA3/bin/rosetta_scripts.default.linuxgccrelease @inputs/rosetta.flags
$> cd ..
青色-本地,橙色-GeneralizedKIC解决方案
Bhardwaj G, Mulligan VK, Bahl CD, Gilmore JM, Harvey PJ, Cheneval O, Buchko GW, Pulavarti SV, Kaas Q, Eletsky A, Huang PS, Johnsen WA, Greisen PJ, Rocklin GJ, Song Y, Linsky TW, Watkins A, Rettie SA, Xu X, Carter LP, Bonneau R, Olson JM, Coutsias E, Correnti CE, Szyperski T, Craik DJ, Baker D. (2016). Accurate de novo design of hyperstable constrained peptides. Nature 538(7625):329-335.
Mandell DJ, Coutsias EA, Kortemme T. (2009). Sub-angstrom accuracy in protein loop reconstruction by robotics-inspired conformational sampling. Nat. Methods 6(8):551-2.
Coutsias EA, Seok C, Jacobson MP, Dill KA. (2004). A kinematic view of loop closure. J. Comput. Chem. 25(4):510-28.