Usage question - specifying secondary structure and so on
So I'm using the Chimera interface to Modeller and i'm slightly modifying the script that comes with Chimera to specify the secondary structure of my target...The biggest problem I'm seeing is that helices strands and loops which dont have a template structure to align to (since the similairty is 60% and the identity is 30%) are just floating in space, they are not in a "natural" position. How do I fix that first? Secondly maybe it even is accepting the secondary structure restraint, but it is severly beding the helices, since it wants to aggresivly align to the template structure...with which parameters would I handle this so I could get a reasonable structure? I'm inputing below the script that I'm using.
Thanks for the help! Mark
# --- UCSF Chimera Copyright --- # Copyright (c) 2000 Regents of the University of California. # All rights reserved. This software provided pursuant to a # license agreement containing restrictions on its disclosure, # duplication and use. This notice must be embedded in or # attached to all copies, including partial copies, of the # software or any revisions or derivations thereof. # --- UCSF Chimera Copyright ---
# This script is generated by the Modeller Dialog in Chimera, # incorporating the settings from the user interface. User can revise # this script and submit the modified one into the Advanced Option panel.
# Import the Modeller module from modeller import * from modeller.automodel import *
# ---------------------- namelist.dat -------------------------------- # A "namelist.dat" file contains the file names, which was output from # the Modeller dialog in Chimera based on user's selection. # The first line it the name of the target sequence, the remaining # lines are name of the template structures namelist = open( 'namelist.dat', 'r' ).read().split('\n') tarSeq = namelist[0] template = tuple( [ x.strip() for x in namelist[1:] if x != '' ] ) # ---------------------- namelist.dat --------------------------------
# This instructs Modeller to display all log output. log.verbose()
# create a new Modeller environment env = environ()
# Directory of atom/PDB/structure files. It is a relative path, inside # a temp folder generated by Chimera. User can modify it and add their # absolute path containing the structure files. env.io.atom_files_directory = ['.', './template_struc']
# create a subclass of automodel or loopmodel, MyModel. # user can further modify the MyModel class, to override certain routine. class MyModel(automodel): #def customised_function(self): pass #code overrides the special_restraints method
def special_restraints(self, aln): rsr = self.restraints at = self.atoms rsr.add(secondary_structure.strand(self.residue_range('1:', '26:'))) rsr.add(secondary_structure.alpha(self.residue_range('27:', '50:'))) rsr.add(secondary_structure.strand(self.residue_range('51:', '62:'))) rsr.add(secondary_structure.alpha(self.residue_range('63:', '88:'))) rsr.add(secondary_structure.strand(self.residue_range('89:', '100:'))) rsr.add(secondary_structure.alpha(self.residue_range('101:', '127:'))) rsr.add(secondary_structure.strand(self.residue_range('128:', '136:'))) rsr.add(secondary_structure.alpha(self.residue_range('137:', '162:'))) rsr.add(secondary_structure.strand(self.residue_range('163:', '174:'))) rsr.add(secondary_structure.alpha(self.residue_range('175:', '201:'))) rsr.add(secondary_structure.strand(self.residue_range('202:', '204:'))) rsr.add(secondary_structure.alpha(self.residue_range('205:', '226:'))) rsr.add(secondary_structure.strand(self.residue_range('227:', '276:'))) rsr.add(secondary_structure.alpha(self.residue_range('277:', '303:'))) rsr.add(secondary_structure.strand(self.residue_range('304:', '312:'))) rsr.add(secondary_structure.alpha(self.residue_range('313:', '340:'))) rsr.add(secondary_structure.strand(self.residue_range('341:', '376:'))) rsr.add(secondary_structure.alpha(self.residue_range('377:', '400:'))) rsr.add(secondary_structure.strand(self.residue_range('401:', '420:'))) rsr.add(secondary_structure.alpha(self.residue_range('421:', '450:'))) rsr.add(secondary_structure.strand(self.residue_range('451:', '457:'))) rsr.add(secondary_structure.alpha(self.residue_range('458:', '483:'))) rsr.add(secondary_structure.strand(self.residue_range('484:', '485:'))) rsr.add(secondary_structure.alpha(self.residue_range('486:', '510:'))) rsr.add(secondary_structure.strand(self.residue_range('511:', '525:'))) rsr.add(secondary_structure.alpha(self.residue_range('526:', '551:'))) rsr.add(secondary_structure.strand(self.residue_range('552:', '638:'))) rsr.add(secondary_structure.alpha(self.residue_range('639:', '664:'))) #code overrides the special_patches method. # e.g. to include the addtional disulfides. #def special_patches(self, aln):
a = MyModel(env, sequence = tarSeq, # alignment file with template codes and target sequence alnfile = 'alignment.ali', # PDB codes of the templates knowns = template) # index of the first model a.starting_model = 1 # index of the last model a.ending_model = 5 loopRefinement = False
# Assesses the quality of models using # the DOPE (Discrete Optimized Protein Energy) method (Shen & Sali 2006) # and the GA341 method (Melo et al 2002, John & Sali 2003) a.assess_methods = (assess.GA341, assess.normalized_dope)
# ------------------------- build all models -------------------------- a.make()
# ---------- Accesing output data after modeling is complete ----------
# Get a list of all successfully built models from a.outputs if loopRefinement: ok_models = filter(lambda x: x['failure'] is None, a.loop.outputs) else: ok_models = filter(lambda x: x['failure'] is None, a.outputs)
# Rank the models by index number #key = 'num' #ok_models.sort(lambda a,b: cmp(a[key], b[key])) def numSort(a, b, key="num"): return cmp(a[key], b[key]) ok_models.sort(numSort)
# Output the list of ok_models to file ok_models.dat fMoutput = open('ok_models.dat', 'w') fMoutput.write('File name of aligned model\t GA341\t zDOPE \n')
for m in ok_models: results = '%s\t' % m['name'] results += '%.5f\t' % m['GA341 score'][0] results += '%.5f\n' % m['Normalized DOPE score'] fMoutput.write( results )
fMoutput.close()
Marko Sever, mag.farm. Doktorski študent / PhD student
[KI]
[KI]
Teoretični odsek / Theory Department Kemijski inštitut / National Institute of Chemistry Hajdrihova 19 SI-1000 Ljubljana Slovenija / Slovenia Telefon / Phone: 00386 1 476 0 408 marko.sever@ki.simailto:%20marko.sever@ki.si mailto:%20marko.sever@ki.si www.ki.sihttp://www.ki.si/
On 09/03/2018 06:23 AM, Marko Sever wrote: > The biggest problem I'm seeing is that helices > strands and loops which dont have a template structure to align to > (since the similairty is 60% and the identity is 30%) are just floating > in space, they are not in a "natural" position. How do I fix that first?
If you don't have a template, Modeller isn't going to know where to put them. It will do its best to enforce proper stereochemistry, but yes, I would expect them to be floating in space. You would need additional input information, such as distance restraints, to pin them down.
> Secondly maybe it even is accepting the secondary structure restraint, > but it is severly beding the helices, since it wants to aggresivly align > to the template structure...with which parameters would I handle this so > I could get a reasonable structure?
Modeller will always make your model follow the template - that's how it works. If you don't want to align part of the structure to the template, alter the alignment so that those residues are aligned to gaps instead.
Ben Webb, Modeller Caretaker
participants (2)
-
Marko Sever
-
Modeller Caretaker