You are here

FastRelax Mover with symmetry, ligand and membrane

2 posts / 0 new
Last post
FastRelax Mover with symmetry, ligand and membrane
#1

Dear all,

I am currently trying to run the FastRelax Mover in RosettaScripts to relax a C4-symmetric protein with 4 ligands (1 per monomer). My input structure is a single protomer and a ligand (the pdb file unfortunately exceeds the maximum file size). My xml and option files look as follows. Note that I don't actually use the MembranePositionFromTopologyMover because it fills up 16 GB of memory pretty quickly. This leads to my first question. Can I just omit this mover if the protein is reasonably aligned and I specify a spanfile in the (Symmetric)AddMembraneMover?

XML File:

<ROSETTASCRIPTS>
    <TASKOPERATIONS>
        <RestrictToRepacking name="restrict"/>
        <IncludeCurrent name="keep_curr"/>
    </TASKOPERATIONS>
    <SCOREFXNS>
        <ScoreFunction name="memb_hires" weights="%%sfxn_weights%%"/>
    </SCOREFXNS>
    <FILTERS>
    </FILTERS>
    <MOVERS>
        <SetupForSymmetry name="setup_symm" definition="mHCN2_from_6UQG_07_S_0001.symm" set_global_symmetry_at_parsetime="0"/>
        <SymmetricAddMembraneMover name="add_memb" spanfile="mHCN2_from_6UQG_A.span"/>
        <MembranePositionFromTopologyMover name="init_pos"/>
        <FastRelax name="fast_relax" scorefxn="memb_hires" repeats="8"/>
    </MOVERS>
    <APPLY_TO_POSE>
    </APPLY_TO_POSE>
    <PROTOCOLS>
        <Add mover="setup_symm"/>
        <Add mover="add_memb"/>
        <!--Add mover="init_pos"/-->
        <Add mover="fast_relax"/>
    </PROTOCOLS>
    <OUTPUT scorefxn="memb_hires"/>
</ROSETTASCRIPTS>

 Options file:

-in:file:s mHCN2_from_6UQG_07_S_0001_INPUT.pdb
-in:file:extra_res_fa ../04_Threading/04_Ligand_Parameters/CMP.fa.params
-parser:script_vars sfxn_weights=franklin2019
-mp:setup:spanfiles mHCN2_from_6UQG_A.span
-parser:protocol mHCN2_from_6UQG_relax.xml
-out:file:scorefile model_scores.sc
-mp:lipids:composition DLPC
-out:pdb
-relax:jump_move true
-relax:fast
-packing:pack_missing_sidechains false
-score:weights franklin2019

In any case, RosettaScript exits with a rather uninformative error unless I delete the ligand from the PDB file.

AN INTERNAL ERROR HAS OCCURED. PLEASE SEE THE CONTENTS OF ROSETTA_CRASH.log FOR DETAILS.


terminate called after throwing an instance of 'std::out_of_range'
  what():  map::at
Got some signal... It is:6
Signal 6 (SIGABRT) means that the process was aborted.  This usually means an internal Rosetta error caused by (often) bad inputs, (sometimes) developer error, or (rarely) hardware problems.

Next, I figured, I should add the Ligand to the pose using the AddMPLigandMover, so I changed my XML file accordingly:

[...]
    <MOVERS>
        <SetupForSymmetry name="setup_symm" definition="mHCN2_from_6UQG_07_S_0001.symm"/>
        <SymmetricAddMembraneMover name="add_memb" spanfile="mHCN2_from_6UQG_A.span"/>
        <AddMPLigandMover name="add_lig" ligand_seqpos="1" closest_rsd="450"/>
        <MembranePositionFromTopologyMover name="init_pos"/>
        <FastRelax name="fast_relax" scorefxn="memb_hires" repeats="8"/>
    </MOVERS>
    <APPLY_TO_POSE>
    </APPLY_TO_POSE>
    <PROTOCOLS>
        <Add mover="setup_symm"/>
        <Add mover="add_memb"/>
        <Add mover="add_lig"/>
        <!--Add mover="init_pos"/-->
        <Add mover="fast_relax"/>
    </PROTOCOLS>
    <OUTPUT scorefxn="memb_hires"/>
</ROSETTASCRIPTS>

Unfortunately, RosettaScripts didn't like the idea of adding a ligand to an already symmetric membrane pose. It seems the AddMPLigandMover can only add ligands to non-symmetric membrane poses (I checked this on the monomer and it worked).

In thinking of a workaround, I decided to add a membrane to the monomer pose first, add the Ligand with the AddMPLigandMover, then SetupForSymmetry and then run FastRelax. This worked, the protein looks ok (despite a lot of "inaccurate G! step" warnings) and the ligand is there in all four protomers. Here is the final working XML file:

<ROSETTASCRIPTS>
    <TASKOPERATIONS>
        <RestrictToRepacking name="restrict"/>
        <IncludeCurrent name="keep_curr"/>
    </TASKOPERATIONS>
    <SCOREFXNS>
        <ScoreFunction name="memb_hires" weights="%%sfxn_weights%%"/>
    </SCOREFXNS>
    <FILTERS>
    </FILTERS>
    <MOVERS>
        <AddMembraneMover name="add_memb" spanfile="mHCN2_from_6UQG_A.span"/>
        <AddMPLigandMover name="add_lig" ligand_seqpos="580" closest_rsd="450"/>
        <SetupForSymmetry name="setup_symm" definition="mHCN2_from_6UQG_07_S_0001.symm"/>
        <FastRelax name="fast_relax" scorefxn="memb_hires" repeats="1"/>
    </MOVERS>
    <APPLY_TO_POSE>
    </APPLY_TO_POSE>
    <PROTOCOLS>
        <Add mover="add_memb"/>
        <Add mover="add_lig"/>
        <Add mover="setup_symm"/>
        <Add mover="fast_relax"/>
    </PROTOCOLS>
    <OUTPUT scorefxn="memb_hires"/>
</ROSETTASCRIPTS>

Since i symmetrize after adding the membrane, I now have 4 MEM residues that seem slightly different (see attachment). Although the protein looks OK, I have doubts about the results because of this. Is there any "non-workaround" solution that I should clearly be using here? I couldn't find any AddMPLigandMover equivalent that works on symmetric poses.

I would appreciate any help!

Best regards

Michele

AttachmentSize
1.jpg315.34 KB
2.jpg208.93 KB
Post Situation: 
Wed, 2021-05-26 04:43
Michele.Bonus

I have played around with the membrane framework in PyRosetta and cannot suggest much, but as you have not had a reply I'll throw in my two pence.

I also came up with your same solution regarding the addition of a ligand. However, I could not mark the ligand as being in the membrane.

My aim was to score a high partition coefficient ligand in the membrane (with a dummy protein nearby) as a ∆∆G of binding is rather misleading if the unbound is in implicit aqueous solution, so I gave up.

The pyrosetta.rosetta.core.select.residue_selector.ResidueInMembraneSelector does not pick it as in the membrane and tellingly the following error happens

pose.membrane_info().check_membrane_fold_tree(pose.fold_tree()) # True
pose.membrane_info().in_membrane(pose.conformation(), 327) # ERROR: ResidueType RET does not have an atom CA

Being physically in the membrane space from a cartesian point of view does not make it in the membrane is my understanding (which may be wrong). For a residue (backbone and sidechain as one annoyingly) to come out of the membrane I am guessing the membrane needs to be updated with OptimizeMembranePositionMover which may be able to change not only the L thing residue but maybe the span definition (total guess). But my point is that AddMPLigandMover stops the segfault, but does not add it in the membrane and does not have an attribute for it (except `closest_rsd: int, ligand_seqpos: int`) or exposes a method to so at least in Python —I have not checked the C++ code. So if your ligand is in the membrane you may have a surprise...

Thu, 2021-06-03 08:24
matteoferla