enforcing symmetry in loop refinement
I have modeled a homopentamer using automodel with enforcing pentameric symmetry, and everything looks fine. There are two regions of each subunit that have 3 and 5 residue long loops that aren't in the templates. When I do loop modeling of all 10 of these loops at the same time using a script based on the one in the Advanced tutorial, I get a set of models where the loops are no longer symmetric. I then introduced the same symmetry constraints in the loop modeling that I used in the original model, and it produced models with the appropriate symmetry. However, it took much longer (765 seconds of cpu time to generate 5 loop models without the symmetry , but 8629 seconds to generate 2 loop models with symmetry). I don't mind letting things run overnight to generate models, but the hugh increase in computational time suggests that I might not be doing this right. Below is the python script: ******************************************************************* # Loop refinement of an existing model of the receptor from modeller import * from modeller.automodel import *
log.verbose() env = environ()
# directories for input atom files env.io.atom_files_directory = './:../atom_files'
def defsym(mdl, aln, seg1, seg2): for (set,seg) in [(2,seg1), (3,seg2)]: mdl.pick_atoms(aln, pick_atoms_set=set,selection_segment=seg, atom_types='ALL',selection_status='INITIALIZE', selection_search='SEGMENT')
mdl.symmetry.define(symmetry_weight=1.0,add_symmetry=(True,False))
segsize = 217 #number of residues per chain
# Create a new class based on 'loopmodel' so that we can redefine # select_loop_atoms (necessary) class myloop(loopmodel): # This routine picks the residues to be refined by loop modeling def select_loop_atoms(self): # 4 residue insertion in Loop C in each subunit self.pick_atoms(selection_segment=('198:', '201:'), selection_status='INITIALIZE') self.pick_atoms(selection_segment=('415:', '418:'), selection_status='ADD') self.pick_atoms(selection_segment=('632:', '635:'), selection_status='ADD') self.pick_atoms(selection_segment=('849:', '852:'), selection_status='ADD') self.pick_atoms(selection_segment=('1066:', '1069:'), selection_status='ADD') # 3 residue insertion in Loop F in each subunit self.pick_atoms(selection_segment=('162:', '164:'), selection_status='ADD') self.pick_atoms(selection_segment=('379:', '381:'), selection_status='ADD') self.pick_atoms(selection_segment=('596:', '598:'), selection_status='ADD') self.pick_atoms(selection_segment=('813:', '815:'), selection_status='ADD') self.pick_atoms(selection_segment=('1030:', '1032:'), selection_status='ADD') def special_restraints(self, aln): #identify the seqments to maintain symmetry: A-B, B-C, C-D, D-E defsym(self,aln,seg1=('1',str(segsize)), seg2=(str(segsize+1),str(2*segsize))) defsym(self,aln,seg1=(str(segsize+1),str(2*segsize)), seg2=(str(2*segsize+1),str(3*segsize))) defsym(self,aln,seg1=(str(2*segsize+1),str(3*segsize)), seg2=(str(3*segsize+1),str(4*segsize))) defsym(self,aln,seg1=(str(3*segsize+1),str(4*segsize)), seg2=(str(4*segsize+1),str(5*segsize)))
m = myloop(env, inimodel='ReceptorBEST.pdb', # initial model of the target sequence='Receptor') # code of the target
m.loop.starting_model= 11 # index of the first loop model m.loop.ending_model = 12 # index of the last loop model m.loop.md_level = refine.very_fast # loop refinement method
m.make() ********************************************************************************
The only difference between the two scripts is the inclusion of the definition of the defsym operation and the mdl.symmetry.define operation and the "def special_restraints" block. The cutting and pasting into this message screwed up the indentation, but the "mdl.symmetry.define" command is lined up with the "for (set, seg).." line.
Have I done this right? I'm still at the "copying other scripts and trying to adapt them to my needs stage." There was an earlier post about this topic (http://salilab.org/archives/modeller_usage/2005/msg00381.html )but I didn't quite understand how this was to be implemented in loop modeling.
Thanks!
Mike White
Mike White wrote: > I have modeled a homopentamer using automodel with enforcing pentameric > symmetry, and everything looks fine. There are two regions of each > subunit that have 3 and 5 residue long loops that aren't in the > templates. When I do loop modeling of all 10 of these loops at the same > time using a script based on the one in the Advanced tutorial, I get a > set of models where the loops are no longer symmetric. > I then introduced the same symmetry constraints in the loop modeling > that I used in the original model, and it produced models with the > appropriate symmetry. However, it took much longer (765 seconds of cpu > time to generate 5 loop models without the symmetry , but 8629 seconds > to generate 2 loop models with symmetry). I don't mind letting things > run overnight to generate models, but the hugh increase in computational > time suggests that I might not be doing this right.
Your script looks fine to me. Symmetry restraints are certainly going to be expensive to calculate, because they require calculation of all interatomic distances, d(ij). See http://salilab.org/modeller/manual/node251.html. The loop modeling potential, on the other hand, only works on nonbonded interactions, which are limited by the nonbonded pair list and exclude bonded atoms.
One way you can speed this up is to only constrain a subset of atoms. For example, you could constrain the backbone, or even just the C-alpha atoms, to be symmetrical. Simply change atom_types from 'ALL' to 'MNCH' or 'CA'.
Ben Webb, Modeller Caretaker
participants (2)
-
Mike White
-
Modeller Caretaker