Protocol for adding/mutating non-canonical AA

Member Site Forums PyRosetta PyRosetta – General Protocol for adding/mutating non-canonical AA

Viewing 1 reply thread
  • Author
    Posts
    • #3727
      Anonymous

        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!

      • #15834
        Anonymous

          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…

      Viewing 1 reply thread
      • You must be logged in to reply to this topic.