##
Building multi-chain models

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.)

The example below builds a model of a homodimer, and also constrains the two chains to have similar conformations by use of symmetry restraints. Just as for the example in Section 2.2.11, 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. To build a model of a heterodimer, simply omit this additional restraint.

Example: examples/automodel/model-multichain-sym.py

      # Comparative 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 comparative modeling

Example: examples/automodel/twochain.ali

      C; example for building multi-chain protein models

      >P1;2abx
      structureX:2abx:   1 :A:74 :B:bungarotoxin:bungarus multicinctus:2.5:-1.00
      IVCHTTATIPSSAVTCPPGENLCYRKMWCDAFCSSRGKVVELGCAATCPSKKPYEEVTCCSTDKCNHPPKRQPG/
      IVCHTTATIPSSAVTCPPGENLCYRKMWCDAFCSSRGKVVELGCAATCPSKKPYEEVTCCSTDKCNHPPKRQPG*

      >P1;1hc9
      sequence:1hc9:   1 :A:148:B:undefined:undefined:-1.00:-1.00
      IVCHTTATSPISAVTCPPGENLCYRKMWCDVFCSSRGKVVELGCAATCPSKKPYEEVTCCSTDKCNPHPKQRPG/
      IVCHTTATSPISAVTCPPGENLCYRKMWCDAFCSSRGKVVELGCAATCPSKKPYEEVTCCSTDKCNPHPKQRPG*