next up previous contents index
Next: Accessing output data after Up: More advanced usage Previous: Adding additional restraints to   Contents   Index


Building multi-chain models with symmetry

MODELLER can build models of multi-chain proteins in exactly the same way as single-chain models; simply add one or more chain break ('/') characters to your alignment file in the appropriate locations.

(You can also build multimeric models from monomeric templates (just use gaps in your alignment for the missing chains in your templates). However, note that since MODELLER will have no information about the interfaces between your monomers in this case, your models will probably be poor, so you will have to add additional distance restraints, or find a multimeric template.)

(Note that when building models containing multiple chains, you will need to specify the chain ID whenever you refer to a residue. See Section 6.16.9. By default, your chains will be labeled A, B, etc but you can change this by relabeling the chains by calling model.rename_segments() from within the automodel.special_patches() method.)

In the example below, the two chains are also constrained to have similar conformations by use of symmetry restraints. Just as for the example in Section 2.2.10, this involves redefining the automodel.special_restraints() routine. In this case we also redefine the automodel.user_after_single_model() routine, to print some information about the symmetry restraints after building each model.

Example: examples/automodel/model-multichain.py


# Homology modeling by the automodel class
#
# Demonstrates how to build multi-chain models, and symmetry restraints
#
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')
        self.restraints.symmetry.append(symmetry(s1, s2, 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)

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  = 'twochain.ali' ,     # alignment filename
            knowns   = '2abx',              # codes of the templates
            sequence = '1hc9')              # code of the target

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


next up previous contents index
Next: Accessing output data after Up: More advanced usage Previous: Adding additional restraints to   Contents   Index
Ben Webb 2008-05-05