Including disulfide bridges

If there is an equivalent disulfide bridge in any of the templates aligned with the target, AutoModel will automatically generate appropriate disulfide bond restraints2.3 for you (by using the Model.patch_ss_templates() command).

Explicit manual restraints can be added by the Model.patch() command using the CHARMM topology file DISU patching residue. You must redefine the AutoModel.special_patches() routine to add these or other patches.

It is better to use Model.patch_ss_templates() rather than Model.patch() where possible because the dihedral angles are restrained more precisely by using the templates than by using the general rules of stereochemistry.

Some CHARMM parameter files have a multiple dihedral entry for the disulfide dihedral angle χ3 that consists of three individual entries with periodicities of 1, 2 and 3. This is why you see three feature restraints for a single disulfide in the output of the Selection.energy() command.

Note that the residue numbers that you patch refer to the model, not the templates. See Section 2.2.6 for more discussion.

Example: examples/automodel/model-disulfide.py

# Comparative modeling by the AutoModel class
from modeller import *              # Load standard Modeller classes
from modeller.automodel import *    # Load the AutoModel class

# Redefine the special_patches routine to include the additional disulfides
# (this routine is empty by default):
class MyModel(AutoModel):
    def special_patches(self, aln):
        # A disulfide between residues 8 and 45 in chain A:
        self.patch(residue_type='DISU', residues=(self.residues['8:A'],
                                                  self.residues['45:A']))

log.verbose()    # request verbose output
env = Environ()  # create a new MODELLER environment to build this model in

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

a = MyModel(env,
            alnfile  = 'alignment.ali',     # alignment filename
            knowns   = '5fd1',              # codes of the templates
            sequence = '1fdx')              # 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 the actual comparative modeling