I am working on a script that takes a given cleaned (using the cleaning.py script) pdb file (attached as dG_calc.txt) that mutates each residue through the sequence of amino acids and calculates the dG and ddG. This is based on the ala_scan.py script except no docking or other things.
I had a couple of questions:
1) Does the mutate_residue in PyRosetta 2.0 repack the side chains automatically? If so to what distance?
2) If not, does PackRotamersMover take care of this? If I need to use this I should restrict the packer so it only uses the original amino acids?
3) Before I start mutating the PDB structure should I minimize it using PackRotamersMover and then rescore it? Or is there another way to minimize the structure? I read on the forum here that pdb should be minimized first before being used in PyRosetta
Thanks for your input and help.
Well I found a partial answer to 3. Minimization routines are covered in Chp. 5 of the tutorials so it's Minmover that does this. I am going to throw it in to the code to see what happens.
I am also updating the code to dump out all the ddG in a csv format for importing in OpenOffice. When that's done I will update the code here.
On 1: I think it repack only one rotamer (the one that got mutated). For more info see full source code of this function in rosetta/__init__.py file
I can't address PyRosetta, so I'm answering for the underlying C++ Rosetta instead.
I think in general you want to know "how does Rosetta know what residues to repack"? The answer is the PackerTask class. By setting a PackerTask you are telling Rosetta what you want it to do with which side chains. The default PackerTask is "design all positions to any residue", and you restrict it from there to what you actually want. In general, if you want something other than that, you have to say it specifically. There is a << operator in C++ for PackerTask, maybe it is compatible with Python print, I don't know.
If you want Rosetta to mutate one residue and repack its neighbors, then generally the easiest way to do that is with something like the RestrictToNeighborhoodOperation, which (as part of a TaskFactory) automatically creates a PackerTask that allows the residues around your residue of interest to repack.
If you are only going to be moving sidechains, then a thorough repack with fixbb or PackRotamersMover is sufficient; backbone minimization is good in theory but not likely to be productive without sampling (which would be the FastRelax protocol). For fixbb, it would be something like "fixbb -database /path/to/db -s mypdb.pdb -ex1 -ex2 -ex3 -ex4 -ndruns 10 -nstruct 1 -use_input_sc -packing:repack_only" for a reasonably thorough repack.
Sergey and smlewis,
Thank you for your replies. The repacking, minimization, and relax are on my to do list for the code.
I've attached the base working script as a .txt file. At the moment all it does is mutate each residue through the sequence of amino acids while calculating the ddG. This should be a good starting point for folks who want to hack away at this.
My to do list over the next week or so is as follows:
1) Change the script into a series of functions and call with a main
2) User input for pdb file name from the command line
3) Function that allows you to mutate select residues
4) Add in the repacking routine (I can see some cases where the mutation trashes the structure)
5) Add in optional minimize and relax options
6) Add some possible useful stats dumped to a .txt file
This may not occur necessarily in this order.
I am going to move the discussion about the ∆G script over to the scripts area of the forum. This will include an update of the script with repacking, minimization, and single point mutation.