Distorted metal coordination geometry after relaxation (SetupMetalMover was used, fold tree and constraints were set manually)

Member Site Forums PyRosetta PyRosetta – Applications Distorted metal coordination geometry after relaxation (SetupMetalMover was used, fold tree and constraints were set manually)

Viewing 1 reply thread
  • Author
    Posts
    • #3385
      Anonymous

         

        Hello,

        I am trying to relax Zn containing peptides like zinc fingers, but always got distorted geometries of the coordination site and much higher scores after the relax. Still, the rest of the peptide looks nice.

        To detect the Zn coordination the SetupMetalsMover() was used. Because the fold tree still contains a jump between the first residue and the metal (in the documentation of Rosetta it was said that the function should set up the fold tree correctly by itself), the fold tree was set manually to connect the Zn with one coordinating residue. Also, the distance and angle constraints were set with a cst-file. FastRelax() was used with the standard ref2015 score function for relaxing. An ensemble of ten outputs was created and stored in pdb-files. The files (the cst file was uploaded as txt) and the used code are attached.

        All ten runs lead to similar results (therefore only one pdb output file is attached). It seems like that Rosetta tried to maximize the distances between the His and the Zn. Then I also changed the radius of the Zn from 1.09 to 0.5 in the atom_properties.txt and the mm_atom_properties.txt in the pyrosettadatabasechemicals folder or set the charge to 0 in the ZN.params file, hoping to minimize the maybe detected clash between the Zn and the N of His, but the results stayed identical. I surely have overlooked something important and would like to ask, if someone can help.

        Thank you in advance!


        #Start
        from pyrosetta import *
        init()


        #Metal detection
        from pyrosetta.rosetta.protocols.simple_moves import SetupMetalsMover
        metaldetector = SetupMetalsMover()


        #Fold Tree
        ft = FoldTree()
        ft.add_edge(1,30,-1)
        ft.add_edge(5,31,1)


        #Scorefunction
        from pyrosetta.teaching import get_fa_scorefxn
        scorefxn = get_fa_scorefxn()


        #Constraints
        from pyrosetta.rosetta.protocols.constraint_movers import ConstraintSetMover
        constraints = ConstraintSetMover()
        constraints.constraint_file('constr_ZnF.cst')
        constraints.add_constraints(True)


        #Relax function
        from rosetta.protocols.relax import FastRelax
        relax = FastRelax()
        relax.set_scorefxn(scorefxn)
        relax.constrain_relax_to_start_coords(True)
        relax.constrain_coords(True)

        #Generation of ensemble
        E_relax=[]
        for i in range(1,11):

        #Create the pose from PDB-File
        ZnF_Pose = pose_from_pdb('5znf.clean.pdb')

        #Using the SetupMetalMover
        metaldetector.apply(ZnF_Pose)

        #Set the correct fold tree
        ZnF_Pose.fold_tree(ft)

        #Set constraints
        constraints.apply(ZnF_Pose)

        #Relax
        relax.apply(ZnF_Pose)

        #Calculate score of relaxed pose and store it the list E_relax
        E_relax.append(scorefxn(ZnF_Pose))

        #Create PDB-File from relaxed pose
        ZnF_Pose.dump_pdb('ZnF_Pose_relax_{}.pdb'.format(i))




        #Mean Score, standard deviation and standard error

        mean_E_rel = sum(E_relax)/len(E_relax)

        A = []
        for i in range(0,10):
        a = (E_relax-mean_E_rel)**2
        A.append(a)

        std_E_rel = (sum(A) / (len(E_relax)-1))**(0.5)
        SEM_E_rel = std_E_rel/((len(E_relax))**(0.5))



        #Score of the starting structure

        ZnF_Pose_start = pose_from_pdb('5znf.clean.pdb')
        metaldetector.apply(ZnF_Pose_start)
        ZnF_Pose_start.fold_tree(ft)
        constraints.apply(ZnF_Pose_start)
        start_E = scorefxn(ZnF_Pose_start)
        ZnF_Pose_start.dump_pdb('ZnF_pose_start.pdb')


        #Outputfile with score of starting structure, mean score of ensemble and score of each relaxed structure

        txtfile = 'ZnF_FastRelax_score.txt'

        myfile = open(txtfile, 'w')

        myfile.write('start_E = {}nmean_E_rel = {} ; Std = {} ; SEM = {}nnE_reln'.format(start_E, mean_E_rel, std_E_rel, SEM_E_rel))

        for i in range(0,len(E_relax)):
        myfile.write('{}n'.format(E_relax
        ))


        myfile.close()

         

      • #15121
        Anonymous

          You need to do your relaxation with a scorefunction that has the metalbinding_constraint scoreterm turned on (given a nonzero weight).  Reweight this scoreterm to, say, 1.0 in the scorefxn object with scorefxn.set_weight( core.scoring.metalbinding_constraint, 1.0 ).

          • #15230
            Anonymous

              Thank you very much, it helped a lot! (Sorry for my delayed answer)

              I used scorefxn.set_weight(pyrosetta.rosetta.core.scoring.ScoreType.metalbinding_constraint, 1.0) and now the coordination geometry is normal again.

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