I am modelling a Protein with a ligand. The Ligand comes from the pdb template as a blk. Modeller works fine and the protein model seems reasonable, except that the modelled ligand is mirrored along its length axis compared to the template ligand. Also BLK Residues are defined rigid. some stereo operations seem to be allowed. How can i get rid of those? I want the ligand only to act as a steric constraint.
Thank you very much
Andre (Universität Regensburg, Germany)
Andre Fischer wrote: > I am modelling a Protein with a ligand. The Ligand comes from the pdb > template as a blk. Modeller works fine and the protein model seems > reasonable, except that the modelled ligand is mirrored along its length > axis compared to the template ligand. Also BLK Residues are defined > rigid. some stereo operations seem to be allowed. How can i get rid of > those? I want the ligand only to act as a steric constraint.
The rigidity is maintained by imposing restraints on all atom-atom distances within the BLK ligand. (See the nonstd_restraints function in the automodel class, at modlib/modeller/automodel/automodel.py, for the Python code that generates these restraints.) Therefore, it is possible that if your starting structure is sufficiently distorted, these restraints may result in an inverted structure rather than the original (or in rare cases they may not be satisfied at all).
When Modeller builds a model, the starting structure is randomized a little to ensure that each final structure is different. By default, the BLK residues are also randomized. You can thus ensure that no inversion or mirroring occurs by changing this randomization procedure to leave BLK residues untouched. See the documentation of automodel.rand_method. By default this is set to randomize.xyz, which from modlib/modeller/automodel/refine.py you can see does: def xyz(atmsel): """Randomize all coordinates""" mdl = atmsel.get_model() atmsel.randomize_xyz(deviation=mdl.deviation)
- i.e., randomizes all coordinates by automodel.deviation. One way to prevent BLK residues being randomized is to do something like
def my_randomize(atmsel): mdl = atmsel.get_model() atmsel = atmsel - atmsel.only_no_topology() if len(atmsel) > 0: atmsel.randomize_xyz(deviation=mdl.deviation)
m = automodel(env, ...) m.rand_method = my_randomize m.make()
This modified randomization procedure is actually taken from the development version of Modeller, and will be the default in the next release.
Ben Webb, Modeller Caretaker