I would like to learn how to create a rotamer set that includes all possible rotamers of all possible amino acids. I want to design residues at certain positions in a protein chain manually by creating rotamer sets that include all rotamers of all amino acids.
I define a resfile for designing residues at positions 3, 5, 7, 20, 26, 30, 34, 39, 43, 52, 54 and packing all the remaining residues in 1PGA.pdb as follows:
34 A ALLAA
3 A ALLAA
5 A ALLAA
7 A ALLAA
39 A ALLAA
43 A ALLAA
20 A ALLAA
54 A ALLAA
52 A ALLAA
26 A ALLAA
30 A ALLAA
I define a task_pack using the following code:
pose = pose_from_pdb(1PGA.pdb)
task_pack = TaskFactory.create_packer_task(pose)
parse_resfile(pose, task_pack, resfile)
I then define a rotsets using the RotamerSets() function as follows:
scorefxn = get_fa_scorefxn()
pack_scorefxn_pose_handshake( pose, scorefxn )
scorefxn.setup_for_packing( pose, task_pack.repacking_residues(), task_pack.designing_residues() )
packer_neighbor_graph = create_packer_graph( pose, scorefxn, task_pack )
rotsets = RotamerSets()
rotsets.set_task( task_pack )
rotsets.build_rotamers( pose, scorefxn, packer_neighbor_graph )
rotsets.prepare_sets_for_packing( pose, scorefxn )
ig = InteractionGraphFactory.create_interaction_graph( task_pack, rotsets, pose, scorefxn )
I now create the set of all rotamers for a designed (molten) residue position using the rotamer_set_for_moltenresidue function as follows:
rotamers_set = rotsets.rotamer_set_for_moltenresidue(moltenres_id)
However, this rotamers_set does not contain all the possible rotamers for all the possible amino acids for the designed (molten) residues, even though I have specified ALLAA (allow all amino acids) for the designed (molten) residue positions.
I print out below the number of rotamers in the rotamers_set for each residue in 1PGA:
[ 14 37 302 23 325 3 292 11 1 23 37 5 19 1 18 37 37 37
15 192 4 9 1 1 37 244 25 22 2 316 21 27 7 255 11 7
9 1 272 4 1 16 281 37 14 5 7 1 19 13 37 342 55 320
There are a total of 56 residues in 1PGA, of which the residues 3, 5, 7, 20, 26, 30, 34, 39, 43, 52, 54 are being designed, but for these residue positions, the number of rotamers is not always the same even though it should be the same large number of rotamers since all these residue positions are being designed, i.e. all rotamers of all amino acids should be allowed at these residue positions.
Please let me know what function I should use or the correct usage of the rotamer_set_for_moltenresidue function to ensure I can create a rotamer set that will include all rotamers of all amino acids for a designed (molten) residue position.
"All rotamers of all residue types" is tricky. Rosetta creates off-rotamers with the -ex flags. Getting "all possible" off rotamers may not be possible, since they're arbitrary. For what you're doing, I suggest the flags "-ex1 -ex2 -extrachi_cutoff 0 -use_input_sc".
The reason you have differing numbers of rotamers is probably bump_check. Rosetta automatically excludes rotamers that will never fit because they clash with fixed portions of the protein (backbone, etc). It may be technically possible to remove bump_check, but all that will do is let you attempt to design in rotamers with clashes, which will immediately get MC-rejected with a large probability and get edited out during the final quench step of design anyway.