To build a model of a cyclic protein, you must do two things:
- Disable the default patching, which would create a C and N terminus.
Use the LINK patching residue in the special_patches routine to link the last and first residues.
For example, the script below builds a cyclic model of 1fdx using 5fd1 as a template (alignment.ali is the example from the Modeller distribution).
It is important that you get the residue order correct; the residues must be the last and first residue in the cyclic protein respectively (in the model, not the template). If in doubt, build a regular model first and look at the residue numbers and chain IDs in the final models or .ini file.
1 from modeller.automodel import *
2
3 log.verbose()
4 env = environ()
5
6 # Disable default NTER and CTER patching
7 env.patch_default = False
8
9 class MyModel(automodel):
10 def special_patches(self, aln):
11 # Link between last residue (-1) and first (0) to make chain cyclic:
12 self.patch(residue_type='LINK',
13 residues=(self.residues[-1], self.residues[0]))
14
15 # Use the new 'MyModel' class rather than 'automodel'
16 a = MyModel(env, alnfile='alignment.ali', knowns='5fd1', sequence='1fdx')
17
18 a.starting_model = a.ending_model = 1
19 a.make()
