前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >文章复现-No.1-Rosetta-KIC-Part-10-rosetta-GeneralizedKIC 示例-3

文章复现-No.1-Rosetta-KIC-Part-10-rosetta-GeneralizedKIC 示例-3

作者头像
DrugScience
发布2021-04-23 14:40:08
4490
发布2021-04-23 14:40:08
举报
文章被收录于专栏:DrugScience

文章复现-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文件内容

代码语言:javascript
复制
-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并对其进行修改,来适应我们的需求。

代码语言:javascript
复制



<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>
步骤:
  1. 删除上面脚本的非必要部分 因为,我们使用的结构中已经有一个loop,我们不需要重新建立一个。 所以我们可以删除掉这三个Mover:PeptideStubMover, DeclareBond mover, and the MutateResidue movers . 在 <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" />
  2. 修改 GeneralizedKIC mover 我们现在想修改GeneralizedKIC mover,使其可以轻微的从起始构象进行扰动。 首先,改变GeneralizedKIC selector。 如果要确定存在多个KIC解决方案,而不是选择找到最低能量构象,那要确保我们没有选择会彻底改变回路构象的方程(在方程组的许多解决方案中, KIC解决了)。 因此,我们将使用“ lowest_delta_torsion_selector”,它会选择扭转空间中具有最小RMSD的解决方案。 我们还将将stop_when_n_solutions_found设置为“ 1”,因为我们没有兴趣寻找大量解决方案并丢弃其中的大多数。 因为从可行的解决方案开始时更容易找到KIC解决方案,所以我们将“ closure_attempts”设置为“” 100“。GeneralizedKIC标签现在应如下所示: <GeneralizedKIC name="genkic" selector="lowest_delta_torsion_selector" selector_scorefunction="bb_only" closure_attempts="100" stop_when_n_solutions_found="1" > ... </GeneralizedKIC> 然后移除 <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

代码语言:javascript
复制
 <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来监视轨迹。

代码语言:javascript
复制
代码语言:javascript
复制
 <ParsedProtocol name="mc_moves" >
    <Add mover="last_accepted" />
    <Add mover="genkic" />
    <Add mover="current_attempt" />
 </ParsedProtocol>

更新protocol section

代码语言:javascript
复制
 <PROTOCOLS>
 <Add mover="mc_mover" />
 </PROTOCOLS>
代码语言:javascript
复制
<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/中

代码语言:javascript
复制
 $> cd exercise2
 $> $ROSETTA3/bin/rosetta_scripts.default.linuxgccrelease @inputs/rosetta.flags
 $> cd ..
期望输出

青色-本地,橙色-GeneralizedKIC解决方案

进一步阅读

代码语言:javascript
复制
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.

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-04-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 FindKey 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 步骤:
  • 运行:
  • 期望输出
  • 进一步阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档