Member Site › Forums › PyRosetta › PyRosetta – General › Protocol for adding/mutating non-canonical AA
- This topic has 1 reply, 2 voices, and was last updated 3 years, 8 months ago by Anonymous.
-
AuthorPosts
-
-
March 25, 2021 at 3:14 pm #3727Anonymous
Hi all,
I have been trying for some time to implement non-canonical AAs into PyRosetta. I have the params file for the residue but when it is passed on via the -extra_res_fa , pyrosetta still won’t recognize it. Next to pyrosetta being able to read this AA in a pdb, I also want to mutate (canonical) AA into modified AAs (say hydroxyl group into acrylate). The mutate_residue only takes one character as an argument that corresponds to the canonical AAs, whilst a three letter argument would be preferred.
I have also thought about writing a patch for side-chain modifications but it is still unclear to me how I would be able to use this patch to mutate AAs in the sequence.
Does anyone have a solid protocol for incorporating non-canonical AAs and/or mutations involving non-canonical AAs?
Any help is appreciated, thanks!
-
March 30, 2021 at 3:20 pm #15834Anonymous
In order to add a residue its residue type (=topology as CHARMM et al. call them) needs to be known in the residue type set of the pose.
That is a params file stores a residue type information —this evident by the fact that the params files live in rosetta/main/database/chemical/residue_type_sets/fa_standard.
To add a params file to a pose you need a vector of filenames:
params_filenames = pyrosetta.rosetta.utility.vector1_string()
params_filenames.extend()or
params_filenames = pyrosetta.rosetta.utility.vector1_string(2)
params_filenames[1] = 'a.params' # fortran counting!
params_filenames[2] = 'b.params'then
pyrosetta.generate_nonstandard_residue_set(pose, params_filenames)
# the do what you like
pyrosetta.rosetta.core.import_pose.pose_from_file(pose, pdb_filename)This pose can be mutated to that residue with the MutateResidue mover, which allows non-canonical and patches.
MutateResidue = pyrosetta.rosetta.protocols.simple_moves.MutateResidue
MutateResidue(target=24, new_res='CYS').apply(pose)
MutateResidue(target=20, new_res='SER:phosphorylated').apply(pose)
MutateResidue(target=1, new_res='NLE').apply(pose) # Norleucine!Mutate residue can also repack, but calling relax with a movemap is easier/better/faster.
Do note that if the residue name does not exist a segfault will happen therefore it may be nice to check all is in order first.
assert pose.residue_type_set_for_pose().get_representative_type_name3('XXX') is not None # but don't use XXX, UNK, ACE or HOH etc
To be fancy, one may have a params file as string or want to modify a pre-existing pose.
rts = pose.conformation().modifiable_residue_type_set_for_conf(pyrosetta.rosetta.core.chemical.FULL_ATOM_t)
buffer = pyrosetta.rosetta.std.stringbuf(params_block)
stream = pyrosetta.rosetta.std.istream(buffer)
new = pyrosetta.rosetta.core.chemical.read_topology_file(stream, three_letter_name, rts) rts.add_base_residue_type(new)You can also use non-canonical residues with pose_from_sequence etc. which require a 3 letter name using the “Z[NLE]” synthax, where Z is the single letter code (X ligand, Z non-canonical aa) and the 3-letter code as seen in the params file.
Second lastly, note that not everything in works
os.path.split(pyrosetta.__file__)[0],
'database',
'chemical',
'residue_type_sets',
'fa_standard',
'residue_types',
'l-ncaa')So do test them. I actually make my own…
Lastly, some cases such as acylations exist as patches…
-
-
AuthorPosts
- You must be logged in to reply to this topic.