Hi,
I am trying to model a heptamer (homomultimer), but the structure generated is wrong because there are many clashes and it looks completely different from the template. How can I solve this issue? Please, see my files and scripts below.
The .ali for the alignment was edited by repeating the sequence seven times and separating each sequence by "/" >P1;name Sequence:name:::::::: XXXXX/XXXXX/XXXXX/XXXXX*
The alignment script from modeller import *
env = Environ() aln = Alignment(env) mdl = Model(env, file='template', model_segment=('FIRST:A','LAST:F')) aln.append_model(mdl, align_codes='template', atom_files='template.pdb') aln.append(file='target.ali', align_codes='target') aln.align2d(max_gap_length=50) aln.write(file='aligned.ali', alignment_format='PIR') aln.write(file='aligned.pap', alignment_format='PAP')
The script to build the model from modeller import * from modeller.automodel import * #from modeller import soap_protein_od
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') s6 = Selection(self.chains['F']).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 = 'aligned.ali' , # alignment filename knowns = 'template', # codes of the templates sequence = 'target', assess_methods=(assess.DOPE)) # code of the target
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
# Get a list of all succesfully built models from a.output ok_models = [x for x in a.outputs if x['failure'] is None]
# Rank the models by DOPE score key = 'DOPE score' if sys.version_info[:2] == (2,3): ok_models.sort(lambda a,b: cmp(a[key], b[key])) else: ok_models.sort(key=lambda a: a[key])
On 9/30/22 2:50 PM, Franceschini Ghilardi, Amanda (BIDMC - Lijun Sun - General Surg SF) via modeller_usage wrote: > I am trying to model a heptamer (homomultimer), but the structure > generated is wrong because there are many clashes and it looks > completely different from the template. How can I solve this issue?
This is generally caused by an incorrect alignment. You should carefully check your modeling alignment to ensure that it seems reasonable; in particular, many alignment tools don't do a great job aligning multi-chain targets and templates. (You may need to align the chains individually and then combine the alignment manually.)
> 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') > s6 = Selection(self.chains['F']).only_atom_types('CA') > self.restraints.symmetry.append(Symmetry(s1, s2, 1.0))
I assume you are attempting to force all 6 chains to adopt the same conformation, but you have only added a single restraint (between selections s1 and s2, i.e. the A and B chains). One way to achieve this would be to add additional symmetry restraints between s1&s3, s1&s4, etc.
Ben Webb, Modeller Caretaker