代码改变世界

ROSETTA使用技巧随笔--RosettaLigand Docking

  丨o聽乄雨o丨  阅读(4256)  评论(11编辑  收藏  举报

时间不充分,简单记录下自己实践过程中的做法:

1. 首先,非标准残基都需要转换成.params文件,使用 <path-to-Rosetta>/main/source/scripts/python/public/molfile_to_params.py -n TPP TPP.mol2 --chain=F --clobber --keep-names 转换,此命令会产生TPP_0001.pdb和TPP.params两个文件;

2. 其次,如果配体需要进行构象搜索,可以使用obabel,这个免费且简单,见博客http://www.cnblogs.com/wq242424/p/8231600.html,需要做限制性构象搜索的话,就比较难了,我用的是schrodinger的conformational search里的高级搜索;

3. 如果经过上一步产生了ligand_conformers.sdf,就需要为 <path-to-Rosetta>/main/source/scripts/python/public/molfile_to_params.py -n GAD -p GAD --chain=X --center=-31,-35.5,8 --clobber --keep-names --conformers-in-one-file GAD_confs.sdf 命令多加一个参数 --conformers-in-one-file GAD_confs.sdf ,这个参数会在产生的.params文件末尾加一句 PDB_ROTAMERS GAD_conformers.pdb 来表明你的多重构象的文件,此命令会产生GAD.pdb,GAD.params和GAD_conformers.pdb三个文件,其中GAD.pdb是以conformers中第一个构象为结构;

4. 多底物对接的问题,经过查阅手册和论坛,得出的结论是通过控制需要dock的链("X/Y/F/。。。")来指定需要对接的小分子,比如我要对接TPP和GAD,就需要在single movers后面及前面LIGAND_AREAS和INTERFACE_BUILDERS那里指定分别对“F”和“X”链进行dock,并在MOVERS处指定两底物分子分别对应的操作,options不必特意根据双底物改变,下面给出了我做的两个XML文件的示例;

5. StartFrom,Transform,Translate和Rotate的差别和比较。StartFrom是在底物不在蛋白口袋内部,需要程序先将底物以Coordinates为基准放到口袋中的程序;Transform是使用蒙特卡洛的方法,对对接过程的底物和蛋白小分子随机取样的过程;Translate和Rotate则是对处于口袋中的小分子进行平移旋转的操作。底物在蛋白口袋中时,就可以不使用StartFrom;使用Transform时,则需要指定GRID。

6. 执行过程中报 cannot find chain_id X 错误,这个错误很奇怪,有时候出现,有时候不出现,解决方法为在pdb文件开头指定号HETATM的chain id,如下所示:

HEADER                                            xx-MMM-xx                     
HETNAM     HEM F 498  HEM                                                       
HETNAM     KAE X 499  KAE             
ATOM      1  N   PRO A   1      34.936 -10.914 -32.480  1.00  0.00          N   
ATOM      2  CA  PRO A   1      35.217 -12.093 -33.349  1.00  0.00          C   
ATOM      3  C   PRO A   1      36.671 -12.422 -33.426  1.00  0.00          C   
......
......

7. 下面的high_resolution_dock XML文件,用途是在你已经知道你的底物的位置的情况下,对底物及周边残基进行高分辨率的对接,与其说对接,可能说packing和minimizing更恰当,因为它是对周围的残基优化的同时变换底物的构象,以求找到最优结果。

 

分享一下自己的两个xml文件及对应的flags:

low_resolution_dock+high_resolution_dock

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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
This protocol will simply do low-resolution followed by high-resolution docking.
It will also report the binding energy (ddg) and buried-surface area (sasa) in the score file.
<ROSETTASCRIPTS>
    <SCOREFXNS>
        <ligand_soft_rep weights="ligand_soft_rep">
        </ligand_soft_rep>
        <hard_rep weights="ligand">
        </hard_rep>
    </SCOREFXNS>
    <LIGAND_AREAS>
        <docking_sidechain_X chain="X" cutoff="6.0" add_nbr_radius="true" all_atom_mode="true" minimize_ligand="10"/>
        <final_sidechain_X chain="X" cutoff="6.0" add_nbr_radius="true" all_atom_mode="true"/>
        <final_backbone_X chain="X" cutoff="7.0" add_nbr_radius="false" all_atom_mode="true" Calpha_restraints="0.3"/>
    </LIGAND_AREAS>
    <INTERFACE_BUILDERS>
        <side_chain_for_docking ligand_areas="docking_sidechain_X"/>
        <side_chain_for_final ligand_areas="final_sidechain_X"/>
        <backbone ligand_areas="final_backbone_X" extension_window="3"/>
    </INTERFACE_BUILDERS>
    <MOVEMAP_BUILDERS>
        <docking sc_interface="side_chain_for_docking" minimize_water="true"/>
        <final sc_interface="side_chain_for_final" bb_interface="backbone" minimize_water="true"/>
    </MOVEMAP_BUILDERS>
    <MOVERS>
    single movers      
        <StartFrom name="start_from_X" chain="X">
            <Coordinates x="-31" y="-35.5" z="8"/>       
        </StartFrom>
        <CompoundTranslate name="compound_translate" randomize_order="false" allow_overlap="false">
            <Translate chain="X" distribution="uniform" angstroms="2.0" cycles="50"/>
        </CompoundTranslate>
        <Rotate name="rotate_X" chain="X" distribution="uniform" degrees="360" cycles="500"/>
        <SlideTogether name="slide_together" chains="X"/>
        <HighResDocker name="high_res_docker" cycles="6" repack_every_Nth="3" scorefxn="ligand_soft_rep" movemap_builder="docking"/>
        <FinalMinimizer name="final" scorefxn="hard_rep" movemap_builder="final"/>
        <InterfaceScoreCalculator name="add_scores" chains="X" scorefxn="hard_rep"/>
    compound movers
        <ParsedProtocol name="low_res_dock">
            <Add mover_name="start_from_X"/>
            <Add mover_name="compound_translate"/>
            <Add mover_name="rotate_X"/>
            <Add mover_name="slide_together"/>
        </ParsedProtocol>
        <ParsedProtocol name="high_res_dock">
            <Add mover_name="high_res_docker"/>
            <Add mover_name="final"/>
        </ParsedProtocol>
    </MOVERS>
    <PROTOCOLS>
        <Add mover_name="low_res_dock"/>
        <Add mover_name="high_res_dock"/>
        <Add mover_name="add_scores"/>
    </PROTOCOLS>
</ROSETTASCRIPTS>

对应的flag options文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
-in:file:s inputs_GAD/GALS_TPP_GAD.pdb
-in:file:extra_res_fa inputs_GAD/TPP.params inputs_GAD/GAD.params
 
-packing
    -ex1
    -ex2aro
    -ex2
    -no_optH false
    -flip_HNQ true
    -ignore_ligand_chi true
     
-parser
    -protocol inputs_GAD/ligand_dock.xml
 
-out
    -path:all outputs_GAD
    -nstruct 1000
    -overwrite

 

high_resolution_dock_only

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
29
30
31
32
33
34
35
36
37
38
39
This protocol will simply do high-resolution docking.
It will also report the binding energy (ddg) and buried-surface area (sasa) in the score file.
<ROSETTASCRIPTS>
    <SCOREFXNS>
        <ligand_soft_rep weights="ligand_soft_rep">
        </ligand_soft_rep>
        <hard_rep weights="ligand">
        </hard_rep>
    </SCOREFXNS>
    <LIGAND_AREAS>
        <docking_sidechain_X chain="X" cutoff="6.0" add_nbr_radius="true" all_atom_mode="true" minimize_ligand="10"/>
        <final_sidechain_X chain="X" cutoff="6.0" add_nbr_radius="true" all_atom_mode="true"/>
        <final_backbone_X chain="X" cutoff="7.0" add_nbr_radius="false" all_atom_mode="true" Calpha_restraints="0.3"/>
    </LIGAND_AREAS>
    <INTERFACE_BUILDERS>
        <side_chain_for_docking ligand_areas="docking_sidechain_X"/>
        <side_chain_for_final ligand_areas="final_sidechain_X"/>
        <backbone ligand_areas="final_backbone_X" extension_window="3"/>
    </INTERFACE_BUILDERS>
    <MOVEMAP_BUILDERS>
        <docking sc_interface="side_chain_for_docking" minimize_water="true"/>
        <final sc_interface="side_chain_for_final" bb_interface="backbone" minimize_water="true"/>
    </MOVEMAP_BUILDERS>
    <SCORINGGRIDS ligand_chain="X" width="15">
        <classic grid_type="ClassicGrid" weight="1.0"/>
    </SCORINGGRIDS>
    <MOVERS>
        <Transform name="transform" chain="X"box_size="7.0" move_distance="0.2" angle="20" cycles="500" repeats="1" temperature="5"/>
        <HighResDocker name="high_res_docker" cycles="6" repack_every_Nth="3" scorefxn="ligand_soft_rep" movemap_builder="docking"/>
        <FinalMinimizer name="final" scorefxn="hard_rep" movemap_builder="final"/>
        <InterfaceScoreCalculator name="add_scores" chains="X" scorefxn="hard_rep"/>
    </MOVERS>
    <PROTOCOLS>
        <Add mover_name="transform"/>
        <Add mover_name="high_res_docker"/>
        <Add mover_name="final"/>
        <Add mover_name="add_scores"/>
    </PROTOCOLS>
</ROSETTASCRIPTS>

对应的flag_options文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
-in:file:s inputs_IMA/GALS_IMA.pdb
-in:file:extra_res_fa inputs_IMA/IMA.params
 
-packing
    -ex1
    -ex2aro
    -ex2
    -no_optH false
    -flip_HNQ true
    -ignore_ligand_chi true
     
-parser
    -protocol inputs_IMA/ligand_dock.xml
 
-out
    -path:all outputs_IMA
    -nstruct 1000
    -overwrite

多底物对接(两个小分子的链分别对应“X”和“F”)

 1. 手动指定两个小分子(“X”,“F”)的位置(使用StartFrom mover指定,对应的Coordinates)
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
This protocol will simply do low-resolution followed by high-resolution docking.
It will also report the binding energy (ddg) and buried-surface area (sasa) in the score file.
<ROSETTASCRIPTS>
    <SCOREFXNS>
        <ligand_soft_rep weights="ligand_soft_rep">
        </ligand_soft_rep>
        <hard_rep weights="ligand">
        </hard_rep>
    </SCOREFXNS>
    <LIGAND_AREAS>
        <docking_sidechain_X chain="X" cutoff="6.0" add_nbr_radius="true" all_atom_mode="true" minimize_ligand="10"/>
        <final_sidechain_X chain="X" cutoff="6.0" add_nbr_radius="true" all_atom_mode="true"/>
        <final_backbone_X chain="X" cutoff="7.0" add_nbr_radius="false" all_atom_mode="true" Calpha_restraints="0.3"/>
         
        <docking_sidechain_F chain="F" cutoff="6.0" add_nbr_radius="true" all_atom_mode="true" minimize_ligand="10"/>
        <final_sidechain_F chain="F" cutoff="6.0" add_nbr_radius="true" all_atom_mode="true"/>
        <final_backbone_F chain="F" cutoff="7.0" add_nbr_radius="false" all_atom_mode="true" Calpha_restraints="0.3"/>
    </LIGAND_AREAS>
    <INTERFACE_BUILDERS>
        <side_chain_for_docking ligand_areas="docking_sidechain_X,docking_sidechain_F"/>
        <side_chain_for_final ligand_areas="final_sidechain_X,final_sidechain_F"/>
        <backbone ligand_areas="final_backbone_X,final_backbone_F" extension_window="3"/>
    </INTERFACE_BUILDERS>
    <MOVEMAP_BUILDERS>
        <docking sc_interface="side_chain_for_docking" minimize_water="true"/>
        <final sc_interface="side_chain_for_final" bb_interface="backbone" minimize_water="true"/>
    </MOVEMAP_BUILDERS>
    <MOVERS>
    single movers_X    
        <StartFrom name="start_from_X" chain="X">
            <Coordinates x="-31" y="-35.5" z="8"/>       
        </StartFrom>
        <StartFrom name="start_from_F" chain="F">
            <Coordinates x="-27.26" y="-34.56" z="4.87"/>       
        </StartFrom>
        <CompoundTranslate name="compound_translate" randomize_order="false" allow_overlap="false">
            <Translate chain="X" distribution="uniform" angstroms="2.0" cycles="50"/>
            <Translate chain="F" distribution="uniform" angstroms="2.0" cycles="50"/>
        </CompoundTranslate>
        <Rotate name="rotate_X" chain="X" distribution="uniform" degrees="360" cycles="500"/>
        <Rotate name="rotate_F" chain="F" distribution="uniform" degrees="360" cycles="500"/>
         
        <SlideTogether name="slide_together" chains="X,F"/>
        <HighResDocker name="high_res_docker" cycles="6" repack_every_Nth="3" scorefxn="ligand_soft_rep" movemap_builder="docking"/>
        <FinalMinimizer name="final" scorefxn="hard_rep" movemap_builder="final"/>
        <InterfaceScoreCalculator name="add_scores" chains="X,F" scorefxn="hard_rep"/>
         
    compound movers
        <ParsedProtocol name="low_res_dock">
            <Add mover_name="start_from_X"/>
            <Add mover_name="start_from_F"/>
            <Add mover_name="compound_translate"/>
            <Add mover_name="rotate_X"/>
            <Add mover_name="rotate_F"/>         
            <Add mover_name="slide_together"/>
        </ParsedProtocol>
        <ParsedProtocol name="high_res_dock">
            <Add mover_name="high_res_docker"/>
            <Add mover_name="final"/>
        </ParsedProtocol>
    </MOVERS>
    <PROTOCOLS>
        <Add mover_name="low_res_dock"/>
        <Add mover_name="high_res_dock"/>
        <Add mover_name="add_scores"/>       
    </PROTOCOLS>
</ROSETTASCRIPTS> 
 2. 其中一个小分子(“F”)位置已知,另一个小分子(“X”)的位置需要指定(首先需使用SCORINGGRIDS为已知位置的小分子指定盒子,然后使用Transform指定其动作模式)
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
This protocol will simply do low-resolution followed by high-resolution docking.
It will also report the binding energy (ddg) and buried-surface area (sasa) in the score file.
<ROSETTASCRIPTS>
    <SCOREFXNS>
        <ligand_soft_rep weights="ligand_soft_rep">
        </ligand_soft_rep>
        <hard_rep weights="ligand">
        </hard_rep>
    </SCOREFXNS>
    <LIGAND_AREAS>
        <docking_sidechain_X chain="X" cutoff="6.0" add_nbr_radius="true" all_atom_mode="true" minimize_ligand="10"/>
        <final_sidechain_X chain="X" cutoff="6.0" add_nbr_radius="true" all_atom_mode="true"/>
        <final_backbone_X chain="X" cutoff="7.0" add_nbr_radius="false" all_atom_mode="true" Calpha_restraints="0.3"/>
         
        <docking_sidechain_F chain="F" cutoff="6.0" add_nbr_radius="true" all_atom_mode="true" minimize_ligand="10"/>
        <final_sidechain_F chain="F" cutoff="6.0" add_nbr_radius="true" all_atom_mode="true"/>
        <final_backbone_F chain="F" cutoff="7.0" add_nbr_radius="false" all_atom_mode="true" Calpha_restraints="0.3"/>
    </LIGAND_AREAS>
    <INTERFACE_BUILDERS>
        <side_chain_for_docking ligand_areas="docking_sidechain_X,docking_sidechain_F"/>
        <side_chain_for_final ligand_areas="final_sidechain_X,final_sidechain_F"/>
        <backbone ligand_areas="final_backbone_X,final_backbone_F" extension_window="3"/>
    </INTERFACE_BUILDERS>
    <MOVEMAP_BUILDERS>
        <docking sc_interface="side_chain_for_docking" minimize_water="true"/>
        <final sc_interface="side_chain_for_final" bb_interface="backbone" minimize_water="true"/>
    </MOVEMAP_BUILDERS>
    <SCORINGGRIDS ligand_chain="F" width="15">
        <classic grid_type="ClassicGrid" weight="1.0"/>
    </SCORINGGRIDS>
    <MOVERS>
    single movers_X    
        <StartFrom name="start_from_X" chain="X">
            <Coordinates x="-31" y="-35.5" z="8"/>       
        </StartFrom>
        <Transform name="transform_F" chain="F" box_size="7.0" move_distance="0.2" angle="20" cycles="500" repeats="1" temperature="5"/>
        <CompoundTranslate name="compound_translate" randomize_order="false" allow_overlap="false">
            <Translate chain="X" distribution="uniform" angstroms="2.0" cycles="50"/>
            <Translate chain="F" distribution="uniform" angstroms="2.0" cycles="50"/>
        </CompoundTranslate>
        <Rotate name="rotate_X" chain="X" distribution="uniform" degrees="360" cycles="500"/>
        <Rotate name="rotate_F" chain="F" distribution="uniform" degrees="360" cycles="500"/>
         
        <SlideTogether name="slide_together" chains="X,F"/>
        <HighResDocker name="high_res_docker" cycles="6" repack_every_Nth="3" scorefxn="ligand_soft_rep" movemap_builder="docking"/>
        <FinalMinimizer name="final" scorefxn="hard_rep" movemap_builder="final"/>
        <InterfaceScoreCalculator name="add_scores" chains="X,F" scorefxn="hard_rep"/>
         
    compound movers
        <ParsedProtocol name="low_res_dock">
            <Add mover_name="start_from_X"/>
            <Add mover_name="transform_F"/>
            <Add mover_name="compound_translate"/>
            <Add mover_name="rotate_X"/>
            <Add mover_name="rotate_F"/>         
            <Add mover_name="slide_together"/>
        </ParsedProtocol>
        <ParsedProtocol name="high_res_dock">
            <Add mover_name="high_res_docker"/>
            <Add mover_name="final"/>
        </ParsedProtocol>
    </MOVERS>
    <PROTOCOLS>
        <Add mover_name="low_res_dock"/>
        <Add mover_name="high_res_dock"/>
        <Add mover_name="add_scores"/>       
    </PROTOCOLS>
</ROSETTASCRIPTS>

  

编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
点击右上角即可分享
微信分享提示