CreateSecondaryStructure: Difference between revisions
Jump to navigation
Jump to search
(Pretty big rewrite) |
|||
Line 1: | Line 1: | ||
===DESCRIPTION=== | ===DESCRIPTION=== | ||
To | To build a peptide sequence. | ||
===SETUP=== | ===SETUP=== | ||
Line 13: | Line 6: | ||
===NOTES / STATUS=== | ===NOTES / STATUS=== | ||
*Tested on | *Tested on Pymolv1.0, Windows platform | ||
*Many bugs to be found | |||
*Many bugs | |||
===USAGE=== | ===USAGE=== | ||
*seqInfo = getTableFromCsvFile("seqInfo.csv") | |||
or | |||
*seqInfo = [['MET',-57,-47],['PRO',-57,-47]] | |||
*createPeptide(seqInfo) | |||
===EXAMPLES=== | ===EXAMPLES=== | ||
seqInfo = [['MET',-57,-47],['PRO',-57,-47]] | |||
createPeptide(seqInfo) | |||
===SCRIPTS (CreateSecondaryStructures.py)=== | ===SCRIPTS (CreateSecondaryStructures.py)=== | ||
CreateSecondaryStructures.py | CreateSecondaryStructures.py | ||
<source lang="python"> | <source lang="python"> | ||
############################################## | ############################################## | ||
# Author: Dan Kulp | # Original Author: Dan Kulp | ||
# Date : 9/8/2005 | # Date : 9/8/2005 | ||
# MOdified by Jurgen F. Doreleijers | |||
# For Hamid Eghbalnia | |||
# | # | ||
############################################# | ############################################# | ||
# Call in pymol window like : | |||
# @C:\Documents and Settings\jurgen.WHELK.000\workspace\Wattos\python\Wattos\Utils\CreateSecondaryStructures.py | |||
# Next line is a pymol directive | |||
python | |||
import string | import string | ||
import urllib | |||
# Well I guess one can build a protein with it but the vdw contacts would be horrible. | |||
# Peptide needs to be at least 2 residues. | |||
def createPeptide(seqInfo): | |||
cmd.delete("all") | |||
# Creates residue TWO | |||
editor.attach_amino_acid('pk1',seqInfo[1][0]) | |||
# Creates residue ONE | |||
createSS('resi 2', sequence=seqInfo[0][0],terminal='N') | |||
print "found sequence info for number of residues: ", len(seqInfo) | |||
for i in range(2,len(seqInfo) ): | |||
# resn is the residue number of the new residue | |||
resn = i + 1 | |||
print "Adding residue: ", resn, seqInfo[i][0] | |||
# Note that the previous residue is numbered i. | |||
resi = 'resi '+`i` | |||
createSS(resi, sequence=seqInfo[i][0]) | |||
for i in range( len(seqInfo) ): | |||
resi = 'resi '+`i+1` | |||
print "Setting backbone angles for residue: ", i, seqInfo[i][0],seqInfo[i][1],seqInfo[i][2] | |||
set_phipsi(resi,seqInfo[i][1],seqInfo[i][2]) | |||
# Create generic secondary structure, based off a selection | # Create generic secondary structure, based off a selection | ||
def createSS(sel, sequence='ALA',repeat=1 | def createSS(sel, sequence='ALA',repeat=1,terminal='C'): | ||
# Set selection | |||
selection = "%s and name %s" % (sel,terminal) | |||
# Pick atom for editing - interestingly only need to do this for the first addition | |||
cmd.edit(selection,None,None,None,pkresi=0,pkbond=0) | |||
# Array of residues | |||
seq = string.split(sequence,",") | |||
# Get residue numbering .. potential bug here if number is inconsistent.. (Only works at c-terminal) | |||
resi = int(cmd.get_model(sel).atom[0].resi) + 1 | |||
# Loop and build new residues | |||
for i in range(1,repeat+1): | |||
for s in seq: | |||
# print "residue[%i]: %s %s" % (i,s,terminal) | |||
editor.attach_amino_acid('pk1',s) | |||
# Remove extra OXT carboxylate atom (OXT1, OXT2 ?) .. fix as needed | |||
if terminal == 'C': | |||
cmd.remove("%s and name OXT" % sel) | |||
def set_phipsi(sel,phi,psi): | def set_phipsi(sel,phi,psi): | ||
# Get atoms from selection | |||
atoms = cmd.get_model("byres ("+sel+")") | |||
# Loop through atoms in selection | |||
for at in atoms.atom: | |||
if at.name == "N": | |||
# Check for a null chain id (some PDBs contain this) | |||
unit_select = "" | |||
if not at.chain == "": | |||
unit_select = "chain "+str(at.chain)+" and " | |||
try: | |||
# Define residue selections | |||
residue_def_prev = unit_select+'resi '+str(int(at.resi)-1) | |||
residue_def = unit_select+'resi '+str(at.resi) | |||
# print "residue_def_prev: [%s]" % residue_def_prev | |||
# print "residue_def : [%s]" % residue_def | |||
if at.resn == "PRO": | |||
print "Skipping setting phi for PRO" | |||
else: | |||
old_phi = cmd.get_dihedral(residue_def_prev+' and name C',residue_def+' and name N', residue_def+' and name CA',residue_def+' and name C') | |||
print "Changing phi: "+at.resn+str(at.resi)+" from "+str(old_phi)+" to "+str(phi) | |||
cmd.set_dihedral( residue_def_prev+' and name C',residue_def+' and name N', residue_def+' and name CA',residue_def+' and name C' ,phi) | |||
except: | |||
print "Note skipping set of phi; this is normal for a N-terminal residue" | |||
try: | |||
residue_def = unit_select+'resi '+str(at.resi) | |||
residue_def_next = unit_select+'resi '+str(int(at.resi)+1) | |||
# print "residue_def : [%s]" % residue_def | |||
# print "residue_def_next: [%s]" % residue_def_next | |||
old_psi = cmd.get_dihedral(residue_def +' and name N',residue_def+' and name CA',residue_def+' and name C', residue_def_next+' and name N') | |||
print "Changing psi: "+at.resn+str(at.resi)+" from "+str(old_psi)+" to "+str(psi) | |||
cmd.set_dihedral( residue_def +' and name N',residue_def+' and name CA',residue_def+' and name C', residue_def_next+' and name N',psi) | |||
except: | |||
print "Note skipping set of psi; this is normal for a C terminal residue" | |||
def getTableFromCsvFile(urlLocation): | |||
result = [] | |||
r1 = urllib.urlopen(urlLocation) | |||
data = r1.read() | |||
r1.close() | |||
dataLines = data.split("\n") | |||
for dataLine in dataLines: | |||
if dataLine: | |||
result.append( dataLine.split(',') ) | |||
return result | |||
# next line is a pymol directive. | |||
python end | |||
os.chdir("C:\Documents and Settings\jurgen.WHELK.000\workspace\Wattos\python\Wattos\Utils") | |||
seqInfo = getTableFromCsvFile("seqInfo.csv") | |||
createPeptide(seqInfo) | |||
</source> | </source> |
Revision as of 17:55, 20 August 2007
DESCRIPTION
To build a peptide sequence.
SETUP
run CreateSecondaryStructure.py
NOTES / STATUS
- Tested on Pymolv1.0, Windows platform
- Many bugs to be found
USAGE
- seqInfo = getTableFromCsvFile("seqInfo.csv")
or
- seqInfo = [['MET',-57,-47],['PRO',-57,-47]]
- createPeptide(seqInfo)
EXAMPLES
seqInfo = [['MET',-57,-47],['PRO',-57,-47]] createPeptide(seqInfo)
SCRIPTS (CreateSecondaryStructures.py)
CreateSecondaryStructures.py
##############################################
# Original Author: Dan Kulp
# Date : 9/8/2005
# MOdified by Jurgen F. Doreleijers
# For Hamid Eghbalnia
#
#############################################
# Call in pymol window like :
# @C:\Documents and Settings\jurgen.WHELK.000\workspace\Wattos\python\Wattos\Utils\CreateSecondaryStructures.py
# Next line is a pymol directive
python
import string
import urllib
# Well I guess one can build a protein with it but the vdw contacts would be horrible.
# Peptide needs to be at least 2 residues.
def createPeptide(seqInfo):
cmd.delete("all")
# Creates residue TWO
editor.attach_amino_acid('pk1',seqInfo[1][0])
# Creates residue ONE
createSS('resi 2', sequence=seqInfo[0][0],terminal='N')
print "found sequence info for number of residues: ", len(seqInfo)
for i in range(2,len(seqInfo) ):
# resn is the residue number of the new residue
resn = i + 1
print "Adding residue: ", resn, seqInfo[i][0]
# Note that the previous residue is numbered i.
resi = 'resi '+`i`
createSS(resi, sequence=seqInfo[i][0])
for i in range( len(seqInfo) ):
resi = 'resi '+`i+1`
print "Setting backbone angles for residue: ", i, seqInfo[i][0],seqInfo[i][1],seqInfo[i][2]
set_phipsi(resi,seqInfo[i][1],seqInfo[i][2])
# Create generic secondary structure, based off a selection
def createSS(sel, sequence='ALA',repeat=1,terminal='C'):
# Set selection
selection = "%s and name %s" % (sel,terminal)
# Pick atom for editing - interestingly only need to do this for the first addition
cmd.edit(selection,None,None,None,pkresi=0,pkbond=0)
# Array of residues
seq = string.split(sequence,",")
# Get residue numbering .. potential bug here if number is inconsistent.. (Only works at c-terminal)
resi = int(cmd.get_model(sel).atom[0].resi) + 1
# Loop and build new residues
for i in range(1,repeat+1):
for s in seq:
# print "residue[%i]: %s %s" % (i,s,terminal)
editor.attach_amino_acid('pk1',s)
# Remove extra OXT carboxylate atom (OXT1, OXT2 ?) .. fix as needed
if terminal == 'C':
cmd.remove("%s and name OXT" % sel)
def set_phipsi(sel,phi,psi):
# Get atoms from selection
atoms = cmd.get_model("byres ("+sel+")")
# Loop through atoms in selection
for at in atoms.atom:
if at.name == "N":
# Check for a null chain id (some PDBs contain this)
unit_select = ""
if not at.chain == "":
unit_select = "chain "+str(at.chain)+" and "
try:
# Define residue selections
residue_def_prev = unit_select+'resi '+str(int(at.resi)-1)
residue_def = unit_select+'resi '+str(at.resi)
# print "residue_def_prev: [%s]" % residue_def_prev
# print "residue_def : [%s]" % residue_def
if at.resn == "PRO":
print "Skipping setting phi for PRO"
else:
old_phi = cmd.get_dihedral(residue_def_prev+' and name C',residue_def+' and name N', residue_def+' and name CA',residue_def+' and name C')
print "Changing phi: "+at.resn+str(at.resi)+" from "+str(old_phi)+" to "+str(phi)
cmd.set_dihedral( residue_def_prev+' and name C',residue_def+' and name N', residue_def+' and name CA',residue_def+' and name C' ,phi)
except:
print "Note skipping set of phi; this is normal for a N-terminal residue"
try:
residue_def = unit_select+'resi '+str(at.resi)
residue_def_next = unit_select+'resi '+str(int(at.resi)+1)
# print "residue_def : [%s]" % residue_def
# print "residue_def_next: [%s]" % residue_def_next
old_psi = cmd.get_dihedral(residue_def +' and name N',residue_def+' and name CA',residue_def+' and name C', residue_def_next+' and name N')
print "Changing psi: "+at.resn+str(at.resi)+" from "+str(old_psi)+" to "+str(psi)
cmd.set_dihedral( residue_def +' and name N',residue_def+' and name CA',residue_def+' and name C', residue_def_next+' and name N',psi)
except:
print "Note skipping set of psi; this is normal for a C terminal residue"
def getTableFromCsvFile(urlLocation):
result = []
r1 = urllib.urlopen(urlLocation)
data = r1.read()
r1.close()
dataLines = data.split("\n")
for dataLine in dataLines:
if dataLine:
result.append( dataLine.split(',') )
return result
# next line is a pymol directive.
python end
os.chdir("C:\Documents and Settings\jurgen.WHELK.000\workspace\Wattos\python\Wattos\Utils")
seqInfo = getTableFromCsvFile("seqInfo.csv")
createPeptide(seqInfo)