[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[modeller_usage] 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