Hi there,
I'm having some trouble using the model_patch() command to create a disulfide bond. If I use the following alignment file:
>P1;1PRX_edited structure:1PRX_edited.pdb:2 :B:224 :B: : : : -PGGLLLGDVAPNFEANTTVGRIRFHDFLGDSWGILFSHPRDFT--.-----------PE FAKRNVKLIALSIDS---------------SEEPTEKLPFPIIDDRNRELAILLGMLDPA E-----MPVTARVVFVFGPDKKLKLSILYPATTGRNFDEILRVVISLQLTAEKRVATPVD WKDGDSVMVLPTIPEEEAKKLFPKGVFTKELPSGKKYLRYTPQP*
>P1;1PRX_WT sequence:1PRX_WT:2 :A:224 :A: : : : MPGGLLLGDVAPNFEANTTVGRIRFHDFLGDSWGILFSHPRDFTPVCTTELGRAAKLAPE FAKRNVKLIALSIDSVEDHLAWSKDINAYNCEEPTEKLPFPIIDDRNRELAILLGMLDPA EKDEKGMPVTARVVFVFGPDKKLKLSILYPATTGRNFDEILRVVISLQLTAEKRVATPVD WKDGDSVMVLPTIPEEEAKKLFPKGVFTKELPSGKKYLRYTPQP*
in conjunction with the following script:
# Modeling a cysteine bond in a new model from modeller import * from modeller.automodel import * # Load the automodel class from modeller.scripts import complete_pdb
log.verbose() # Verbose error description - helps with troubleshooting! env = environ() # Defines the environment
# directories for input atom files env.io.atom_files_directory = ['.','../atom-files']
#Enables MODELLER to read HETATM entries from a PDB file env.io.hetatm = True
env.libs.topology.read(file='$(LIB)/top_heav.lib')
env.libs.parameters.read(file='$(LIB)/par.lib')
# Make the disulfide bond: def patches (mdl): mdl.patch(residue_type='DISU', residues=(mdl.residues['47:A'], mdl.residues['91:A']))
# Read the sequence: code = '1PRX' mdl = complete_pdb(env, code, special_patches=patches)
# Create the stereochemical restraints: sel = selection(mdl) mdl.restraints.make(sel, restraint_type='stereo', spline_on_site=False)
# Calculate the energy to test the disulfide: sel.energy()
a = automodel(env, alnfile = '1PRX_edited-1PRX_WT.ali', # alignment filename knowns = '1PRX_edited', # codes of the templates sequence = '1PRX_WT', # code of the target assess_methods=(assess.DOPE, assess.GA341)) a.starting_model= 1 # index of the first model a.ending_model = 1 # index of the last model # (together, they determine how many models to calculate) a.make() # do homology modeling
It generates a PDB file that has the desired sequence, but no disulfide bond. If I use the following alignment:
>P1;1PRX structure:1PRX.pdb:2 :B:224 :B: : : : -PGGLLLGDVAPNFEANTTVGRIRFHDFLGDSWGILFSHPRDFTPV.TTELGRAAKLAPE FAKRNVKLIALSIDSVEDHLAWSKDINAYNSEEPTEKLPFPIIDDRNRELAILLGMLDPA E-----MPVTARVVFVFGPDKKLKLSILYPATTGRNFDEILRVVISLQLTAEKRVATPVD WKDGDSVMVLPTIPEEEAKKLFPKGVFTKELPSGKKYLRYTPQP*
>P1;1PRX_WT sequence:1PRX_WT:2 : :224 : : : : : MPGGLLLGDVAPNFEANTTVGRIRFHDFLGDSWGILFSHPRDFTPVCTTELGRAAKLAPE FAKRNVKLIALSIDSVEDHLAWSKDINAYNCEEPTEKLPFPIIDDRNRELAILLGMLDPA EKDEKGMPVTARVVFVFGPDKKLKLSILYPATTGRNFDEILRVVISLQLTAEKRVATPVD WKDGDSVMVLPTIPEEEAKKLFPKGVFTKELPSGKKYLRYTPQP*
Combined with the following script:
# Modeling a cysteine bond in a new model from modeller import * from modeller.automodel import * # Load the automodel class from modeller.scripts import complete_pdb
log.verbose() # Verbose error description - helps with troubleshooting! env = environ() # Defines the environment
# directories for input atom files env.io.atom_files_directory = ['.','../atom-files']
#Enables MODELLER to read HETATM entries from a PDB file env.io.hetatm = True
env.libs.topology.read(file='$(LIB)/top_heav.lib')
env.libs.parameters.read(file='$(LIB)/par.lib')
# Special distance restraints class MyModel (automodel): # Make the disulfide bond: def patches (mdl): mdl.patch(residue_type='DISU', residues=(mdl.residues['47:'], mdl.residues['91:']))
# Read the sequence: code = '1PRX' mdl = complete_pdb(env, code, special_patches=patches)
# Create the stereochemical restraints: sel = selection(mdl) mdl.restraints.make(sel, restraint_type='stereo', spline_on_site=False)
# Calculate the energy to test the disulfide: sel.energy()
a = MyModel(env, alnfile = '1PRX-1PRX_WT.ali', # alignment filename knowns = '1PRX', # codes of the templates sequence = '1PRX_WT', # code of the target assess_methods=(assess.DOPE, assess.GA341)) a.starting_model= 1 # index of the first model a.ending_model = 1 # index of the last model # (together, they determine how many models to calculate) a.make() # do homology modeling
It returns a KeyError: 'No such residue'. I researched this in the answer archives and found the suggestion to create a .ini file to determine the model residue numbers, which are exactly correspondent to those found in the script. I would appreciate any help deciphering what exactly I'm doing wrong. Thanks,
On 1/30/14 4:58 PM, Roland Rivera wrote: > I'm having some trouble using the model_patch() command to create a > disulfide bond.
Your first script does the following:
1. Create a topology containing a disulfide bond, and then evaluate the energy of the initial structure against this topology (the energy will be high since the bond will be strongly violated, most likely).
2. Throw this structure away and then ask automodel to build a model without a disulfide bond. ;)
That's probably not what you meant to do.
Your second script is closer, but the method needs to be called special_patches, not patches; see http://salilab.org/modeller/9.12/manual/node24.html You should also only call patch(); automodel does all the complete_pdb, restraints generation, energy calculation itself so there's no need to do that here.
> It returns a KeyError: 'No such residue'. I researched this in the > answer archives and found the suggestion to create a .ini file to > determine the model residue numbers
Unfortunately that suggestion isn't correct. ;) Just remove the :A for each residue. When you only have a single chain in your model, Modeller doesn't assign a chain ID.
Ben Webb, Modeller Caretaker
participants (2)
-
Modeller Caretaker
-
Roland Rivera