Pyrosetta score protein structures with missing atoms in sidechain

Member Site Forums PyRosetta PyRosetta – General Pyrosetta score protein structures with missing atoms in sidechain

Viewing 1 reply thread
  • Author
    Posts
    • #3743
      Anonymous

        I have a question regarding Pyrosetta. Currently, I want to use pyrosetta to score some protein structures but with missing atoms in sidechain. So my protein structures contrain full-atoms for backbone but missing one or two atoms per residue on sidechain. I used pose_from_pdb to read my protein structure (pdb). But it seems pysoretta will fill in the missing atoms according to rotamer library. Is there a way to prevent it so I can just score my structures with missing atoms on sidechains?  

        Thanks a lot for the help,

      • #15853
        Anonymous

          Those sidechains play with other sidechains. Therefore, if you were to replace them with alanines say, you might get worse solvent terms of the nearby atoms. Plus there is the problem that the ref term differs.


          MutateResidue = pyrosetta.rosetta.protocols.simple_moves.MutateResidue
          MutateResidue(target=r, new_res='ALA').apply(pose)

          An alternative is to make the sidechain atoms virtual. A virtual atom does not count in the scoring.

          This is my test pose


          pose = pyrosetta.pose_from_sequence('ELVISISALIVE')
          scorefxn = pyrosetta.get_fa_scorefxn()
          relax = pyrosetta.rosetta.protocols.relax.FastRelax(scorefxn, 15)
          relax.apply(pose)
          scorefxn(pose) # 4.690357769636089
          pose2pandas(pose, scorefxn) # personal method.
          # Leucine and valines are bad. with +1.5 kcal/mol

          Adding the variant type `pyrosetta.rosetta.core.chemical.VariantType.VIRTUAL_SIDE_CHAIN` which does not make the atoms virtual per se, but does the job.


          vt_mover.set_additional_type_to_add('VIRTUAL_SIDE_CHAIN')
          leu_sele = pyrosetta.rosetta.core.select.residue_selector.ResidueNameSelector('LEU')
          vt_mover.set_residue_selector(leu_sele)
          vt_mover.apply(pose)
          # did it work?
          res = ghosted.residue(2)
          print(res.name3(), res.has_variant_type(pyrosetta.rosetta.core.chemical.VIRTUAL_SIDE_CHAIN))
          # yeay!
          # what is the score?
          pd.DataFrame([pose2pandas(pose, scorefxn).iloc[1],
          pose2pandas(ghosted, scorefxn).iloc[1]]).transpose()

          The `fa_atr` term drops from -2.15142 to -0.897523, making the leucine scores worse. But the `ref` score is the same as hoped (ref is a fudge factor for the residues to give near empirical ∆∆G scores), but do note the `ResidueNameSelector` weirdly will no longer recognise the residue as having that name, even if the name does.

          A thing to note that as soon a mover touches the residue, the virtualisation goes away.


          relax = pyrosetta.rosetta.protocols.relax.FastRelax(scorefxn, 15)
          relax.apply(ghosted)
          res = ghosted.residue(2)
          print(res.name3(), res.has_variant_type(pyrosetta.rosetta.core.chemical.VIRTUAL_SIDE_CHAIN))

           

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