Hello,
I have been testing whether I could use Modeller to minimize a
protein-protein complex.
As a first test, I've tried to perform a rigid body minimization of the
bound structures of receptor and ligand.
Even though the starting structure has a Lig-RMSD of 3 A from the native
complex structure (i.e., after superimposing the receptor subunits and
measuring the CA RMSD between the ligand subunits), the final minimized
structure does not get closer to the native complex but goes farther
away, with Lig-RMSD of 12 A. I've tried with several near-native
conformations and different protein complexes with similar results.
The script I am running is the following:
from modeller import *
from modeller.scripts import complete_pdb
from modeller.optimizers import conjugate_gradients, molecular_dynamics,
actions
env = environ()
env.io.atom_files_directory = ['../atom_files']
env.edat.dynamic_sphere = True
env.libs.topology.read(file='$(LIB)/top_heav.lib')
env.libs.parameters.read(file='$(LIB)/par.lib')
code = "test.pdb"
mdl = complete_pdb(env, code)
mdl.write(file=code+'.ini')
# Select rigid bodies
# Receptor rigid body
atmsel_a = mdl.chains['A'].atoms
r_a = rigid_body(atmsel_a)
# Ligand rigid body
atmsel_b = mdl.chains['B'].atoms
r_b = rigid_body(atmsel_b)
# Select all atoms:
atmsel = selection(mdl)
# Generate the restraints:
mdl.restraints.rigid_bodies.append(r_a)
mdl.restraints.rigid_bodies.append(r_b)
mdl.restraints.make(atmsel, restraint_type='STEREO', spline_on_site=False)
mdl.restraints.write(file=code+'.rsr')
mpdf = atmsel.energy()
# Create optimizer objects and set defaults for all further optimizations
cg = conjugate_gradients(output='REPORT')
md = molecular_dynamics(output='REPORT')
# Open a file to get basic stats on each optimization
trcfil = open(code+'.D00000001', 'w')
# Run CG on the all-atom selection; write stats every 5 steps
cg.optimize(atmsel, max_iterations=20, actions=actions.trace(5, trcfil))
# Run MD; write out a PDB structure (called '1fas.D9999xxxx.pdb') every
# 10 steps during the run, and write stats every 10 steps
md.optimize(atmsel, temperature=300, max_iterations=20,
actions=[actions.write_structure(10,
code+'.D9999%04d.pdb'), actions.trace(10, trcfil)])
# Finish off with some more CG, and write stats every 5 steps
cg.optimize(atmsel, max_iterations=20,
actions=[actions.trace(5, trcfil)])
mpdf = atmsel.energy()
mdl.write(file=code+'.B')
I have also played with several minimization schemes, with and without
MD, but the final minimized model does not get closer to the native complex.
Thanks in advance,
Miguel
http://bsc.es/disclaimer