[modeller_usage] enforcing symmetry in loop refinement
To: Modeller-Usage <>
Subject: [modeller_usage] enforcing symmetry in loop refinement
From: Mike White <>
Date: Thu, 10 Aug 2006 09:26:12 -0400
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