Tutorial: Protein-protein design

This is a bonus tutorial showing how to use residue selectors and task operations for selectively designing protein-protein interfaces!
  1. Get PDB complex of interest:
    mkdir relax; cd relax
    perl ~/tools/get_pdb.pl 3pnl A B > 3pnlAB.pdb
  2. Make PDB Rosetta-friendly. Why is this important? Because if residues are allowed to mutate, Rosetta is more likely to mutate a residue to a smaller amino acid than try figure out how to repack a big residue to relieve a small clash.
    Prepare "flags" file:
    -in:file:s 3pnlAB.pdb
    -nstruct 5
    -beta
    Prepare "xml" file:
    <ROSETTASCRIPTS>
        <SCOREFXNS>
            <beta weights="beta.wts">
                <Reweight scoretype="coordinate_constraint" weight="1" />
            </beta>
        </SCOREFXNS>
        <TASKOPERATIONS>
            <IncludeCurrent name="use_input_sc" />
            <ExtraRotamersGeneric name="add_rot" ex1="1" ex2="1" />
        </TASKOPERATIONS>
        <FILTERS></FILTERS>
        <MOVERS>
            <VirtualRoot name="add_vrt" />
            <AtomCoordinateCstMover name="add_cst_sc" sidechain="1" />
            <FastRelax name="relax" scorefxn="beta" task_operations="use_input_sc,add_rot" />
        </MOVERS>
        <PROTOCOLS>
            <Add mover_name="add_vrt" />
            <Add mover_name="add_cst_sc" />
            <Add mover_name="relax" />
        </PROTOCOLS>
        <OUTPUT scorefxn="beta" />
    </ROSETTASCRIPTS>
    Run Rosetta scripts!
    rosetta_scripts.default.linuxgccrelease @flags -parser:protocol xml
    What is the best "total_score" of the 5 structures generate (-nstruct 5)? Why do we generate multiple structures?
  3. Lets do design!
    mkdir design; cd design
    cp ../3pnlAB_0001.pdb . # copy the top scoring structure
    Prepare "flags" file:
    -in:file:s 3pnlAB_0001.pdb
    -nstruct 20
    -beta
    Prepare "xml" file:
    What we want to do:
    a) allow residues at chain A interface to mutate and repack
    b) allow residues at chain B interface to only repack but NOT mutate
    c) disallow residues that are NOT at the interface to repack/mutate.
    d) calculate ddg
    <ROSETTASCRIPTS>
            <SCOREFXNS>
                    <beta weights="beta.wts">
                            <Reweight scoretype="coordinate_constraint" weight="1" />
                    </beta>
            </SCOREFXNS>
            <RESIDUE_SELECTORS>
                    <Chain name=chainA chains="A"/>
                    <Chain name=chainB chains="B"/>
                    <Neighborhood name=interface_chA selector=chainB distance=8.0/>
                    <Neighborhood name=interface_chB selector=chainA distance=8.0/>
                    <And name="AB_interface" selectors="interface_chA,interface_chB" />
                    <Not name=Not_interface selector=AB_interface />
            </RESIDUE_SELECTORS>
            <TASKOPERATIONS>
                    <IncludeCurrent name="use_input_sc" />
                    <ExtraRotamersGeneric name="add_rot" ex1="1" ex2="1" />
                    <OperateOnResidueSubset name=restrict_to_interface selector="Not_interface">
                            <PreventRepackingRLT/>
                    </OperateOnResidueSubset>
                    <OperateOnResidueSubset name=restrict_target2repacking selector="chainB">
                            <RestrictToRepackingRLT/>
                    </OperateOnResidueSubset>
            </TASKOPERATIONS>
            <FILTERS>
                    <Ddg name="ddg" scorefxn="beta" threshold="0" jump="1" repeats="5" repack="1" />
            </FILTERS>
            <MOVERS>
                    <VirtualRoot name="add_vrt" />
                    <AtomCoordinateCstMover name="add_cst" />
                    <ClearConstraintsMover name="rm_all_cst" />
                    <FastDesign name="slow_design" scorefxn="beta" task_operations="use_input_sc,add_rot,restrict_to_interface,restrict_target2repacking" />
                    <FastDesign name="fast_design" scorefxn="beta" task_operations="restrict_to_interface,restrict_target2repacking" repeats="1"/>
            </MOVERS>
            <PROTOCOLS>
                    <Add mover_name="add_vrt" />
                    <Add mover_name="add_cst" />
                    <Add mover_name="fast_design" />
                    <Add mover_name="rm_all_cst" />
                    <Add filter_name="ddg" />
            </PROTOCOLS>
            <OUTPUT scorefxn="beta" />
    </ROSETTASCRIPTS>
    Note: I include a "slow_design" mover and a "fast_design" mover. The slow_design allows additional rotamers (from ex1 and ex2, and also input sidechains). Since this takes a long time, in the tutorial I only include a "fast_design" option.
    Run Rosetta scripts!
    rosetta_scripts.default.linuxgccrelease @flags -parser:protocol xml