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

[modeller_usage] Query about symmetry in a multi-chain model



Hi, I'm modelling a homopentamer using two templates.
I want the five subunits of my model to be as much symmetrical as possible.
So, I'm using the symmetry constrains that I found in the manual. The example script was built for a homodimer, so I adapted it to my homopentamer. I also included the indications to rename the chains and renumber the residues.
However, the models I obtain show important structural differences between the different chains. I can see those differences visually and also when I plot the DOPE profiles of the five chains.
I want to know if there is any mistake in my script, or something that I could add to it, in order to improving my results. 
Thank you in advance fot you help,
Iván Felsztyna

# Comparative modeling by the automodel class
#
# Demonstrates how to build multi-chain models
#
from modeller import *
from modeller.automodel import *    # Load the automodel class

log.verbose()

# Override the 'special_restraints' and 'user_after_single_model' methods:
class MyModel(automodel):
    def special_restraints(self, aln):
        # Constrain the A and B chains to be identical (but only restrain
        # the C-alpha atoms, to reduce the number of interatomic distances
        # that need to be calculated):
        s1 = selection(self.chains['A']).only_atom_types('CA')
        s2 = selection(self.chains['B']).only_atom_types('CA')
       s3 = selection(self.chains['C']).only_atom_types('CA')
       s4 = selection(self.chains['D']).only_atom_types('CA')
       s5 = selection(self.chains['E']).only_atom_types('CA')
       self.restraints.symmetry.append(symmetry(s1, s2, 1.0))
     self.restraints.symmetry.append(symmetry(s1, s3, 1.0))
     self.restraints.symmetry.append(symmetry(s1, s4, 1.0))
     self.restraints.symmetry.append(symmetry(s1, s5, 1.0))
    def user_after_single_model(self):
        # Report on symmetry violations greater than 1A after building
        # each model:
        self.restraints.symmetry.report(1.0)

class MyModel(automodel):
    def special_patches(self, aln):
        # Rename both chains and renumber the residues in each
        self.rename_segments(segment_ids=['A', 'B', 'C', 'D', 'E'],
                             renumber_residues=[1, 1, 1, 1, 1])

env = environ()
# directories for input atom files
env.io.atom_files_directory = ['.', '../atom_files']

# Be sure to use 'MyModel' rather than 'automodel' here!
a = MyModel(env, alnfile='ali.ali',
         knowns=('a','b'),
         sequence=('r'),
         assess_methods=(assess.DOPE, assess.GA341))

a.starting_model= 1               # index of the first model
a.ending_model  = 100                # index of the last model
                                   # (determines how many models to calculate)
a.make()                           # do comparative modeling