Pack vs. Minimize vs. Relax post-mutation #368
Replies: 6 comments
|
How much pre-optimization you do depends a bit on your system, where it's coming from and what sort of score function it was (or was not) optimized into before. The basic philosophy (especially with design) is that the Rosetta energy function is rugged, and if you have an input structure which has slight (sub-angstrom) movements off from where Rosetta thinks it should be, it could potentially score poorly. This means that Rosetta could put in a mutation (or make a massive structural change) not because the native sequence is bad, but just because the atoms are slightly off and the mutation just happens to fit that "bad" atom position better than the native one does. Pre-optimizing the structure allows you to relieve those slight deficiencies, which should hopefully allow Rosetta to be less aggressive about changing things. You have to be slightly careful, though, as you can over-optimize things. If you do too much pre-optimization, you can dig the native structure deep into an energy well, which means that any change you make is going to be worse in comparison. The trick is to optimize things just enough to avoid issues with false positives from under-optimizing, while not drilling down too much on the input structure. Different approaches thus vary based on where you want to strike that balance. Just packing rotamers will keep the backbone fixed. This might work, or small deviations in the backbone might cause different residues to be favored (e.g. the rama terms are residue-identity dependent.). Minimization generally moves everything, but doesn't necessarily sample different rotamers and has the potential to (it also has the potential to move the backbone significantly). Relax combines the two, and adds a more thorough sampling scheme. This has the benefits and drawbacks of both approaches. Which one you choose depends a bit on what you're hoping to optimized, and what sort of sampling you're doing downstream. One approach is to use Relax, but constraint the ability of relax to move the structure too much. The relax application can take the To do the equivalent of the |
|
Hi Rocco, Thank you so much for your detailed and explanatory answer. I will definitely give your suggestions a shot! My concern in this case largely stem from the fact that I'm making point mutations at an interface where I know the that certain side chains are interacting. If I mutate a Thr to an Arg, for example, beyond the change in the charge, I'm imagining that I am also introducing some pretty huge steric clashes. What I tried while waiting for input (and your answer was very fast - thank you again!), was using the Does something like this look reasonable? |
|
Sorry, I realize much of my response to you was based on *pre-*optimization considerations (versus what you were actually asking, which is the optimization after mutation.) -- You said so in your question, but I was reading it through a different lens. That said, optimization before and after the mutation should be considered together. You'll want to coordinate the two somewhat. That is, you'll want to make sure that your pre-optimization approach matches your post-optimization, such that you (A) don't spend an inordinate amount of time post-optimizing for multiple mutations when you can do it just once with a pre-optimizaiton and (B) such that you don't unfairly penalize the native structure due to a bad starting geometry. (Though the latter can be compensated somewhat by also doing a "null" mutation -- run the same protocol, but include a wt -> wt "mutation" with all the same optimizations as a reference.) Regarding what to do for post-mutations, it depends a bit on how aggressive you want to get. What we have observed is that the more you deviate from the experimental structure, typically the more chance of error creeping in. As such, you may want to reduce how much movement you have in the structure post-mutation to minimize the "disruptive-ness" of the mutation. That is, if you pack just the residue, you'll avoid mutations which disrupt the structure of other residues, but you'll miss residues which would be accommodated if the other sidechains moved slightly. If you only repack sidechains, you'll screen against mutations which could mess up backbone structure, but you'll miss mutations which could be accommodated with slight backbone movement. And so on. How much you attempt to minimize things is thus mostly a call on the sort of mutations you want to accommodate experimentally, and also how much trust you have in Rosetta not to mess up the structure and give you false positives. Your protocol looks reasonable. The one thing to be aware of is lever-arm effects in backbone minimization. That is, if you minimize a backbone torsion, everything downstream of it will move in XYZ space, even if it's not enabled in the MoveMap. Often that's not a problem, as the Rosetta energy function will work to keep things together and folded. But there's a chance a mutation+minimization combo will result in the protein opening up. -- It may be worth adding checks to see how much the structure has moved from the original structure, and flagging/discarding those runs where things change too much. P.S. As mentioned, I'd skip the I'd also recommend |
|
Ah, I see. I definitely like the idea of the null mutation to account for the potential effects of starting with a relaxed structure that's too far from what I actually started with. This is all very helpful. In terms of rejecting or flagging structures, would you recommend something as simple as a backbone RMSD calculation? And I know this all gets very subjective and there are no hard answers, but if you were to use backbone RMSD, what type of deviation from the starting structure do you think you would personally see as something to be manually inspected or discarded? P.S. Small world, it turns out we were actually on a publication together with Vikram looking at NDM-1 a few years back! :) |
|
Backbone RMSD could work. I'd say it all depends on your use case and system, and how much change you expect/are willing to allow. One caveate with RMSD is that the absolute numbers can get perturbed based on how much you're including in the calculation. The same structural deviation can be a tiny RMSD in a large protein, but a comparatively bigger one in a smaller protein, if you're calculating the RMSD across the entire protein. So the actual threshold value for RMSD being "too big" a change will depend a bit on how you're calculating it. |
|
Ah I see. At this risk of asking for too much of your time in this thread (which I honestly feel I've already done), is there an alternative strategy that you find is more robust to changes in protein size and might be a bit more broadly applicable? Or are these things you just tend to start to get a feel for as you gain more hands on experience? Thanks again for all of your help thus far! |
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Having never had the opportunity (yet) to attend a (py)Rosetta workshop, I've been working my way through some little projects myself but I'm not certain my current workflow makes sense for what I am trying to do.
I am generating a clean version of my input PDB with
cleanATOM(), then running aFastRelax()to get my input ready to go for mutations. I am separately making point mutations to all non-native residues at a number of locations withMutateResidue()and these are at an interface between two proteins. The plan is to use Surfaces to look at the perturbations to the interfaces after, but I'm unsure if I should just try packing rotamers, minimizing, or doing aFastRelax()on the mutated structure files before analysis. I had thoughtFastRelax()but that seems maybe a bit overkill for dealing with the effects of the point mutations.Any guidance or insight would be greatly appreciated.
P.S. I am also wondering how to directly reproduce the behavior of the default command line
minimizein pyRosetta.All reactions