Source code for schrodinger.protein.helix
"""
Module for converting residue sequences to 3D structures with an a-helix secondary
structure.
Copyright Schrodinger, LLC. All rights reserved.
"""
from schrodinger import structure
from schrodinger.protein import buildpeptide
from schrodinger.structutils import analyze
from schrodinger.structutils import build
# For backwards compatability:
get_fragment_structure = buildpeptide.get_fragment_structure
[docs]def process_sequence(line):
"""
Create a 3D structure with a-helix secondary structure from the given
sequence string.
"""
# TODO: Consider moving most of this code into the buildpeptide.py module.
delete_Ncap = False
delete_Ccap = False
if line.startswith("NH-"):
delete_Ncap = True
line = line[3:]
if line.endswith("-OH"):
delete_Ccap = True
line = line[:-3]
st = None
fromatom = None
toatom = None
for i, c in enumerate(line):
try:
fragname = structure.RESIDUE_MAP_1_TO_3_LETTER[c]
except KeyError:
raise ValueError('Could not get 3-letter code for residue "%s"' % c)
if i == 0:
# FIXME print this when in debug mode
# print "Placing first fragment:", fragname
st = buildpeptide.get_fragment_structure(fragname)
# Find the NMA cap to replace with the next residue:
matches = analyze.evaluate_smarts_canvas(st, "O=CN[C;H3]")
m = matches[0]
fromatom = m[1]
toatom = m[2]
else:
# FIXME print this when in debug mode
# print "Growing:", fragname
fromatom, toatom = buildpeptide.grow_fragment(
st, fromatom, toatom, "peptide", fragname, "forward(N-to-C)")
if delete_Ncap:
del_atoms = analyze.evaluate_asl(st, 'res.ptype "ACE "')
st.deleteAtoms(del_atoms)
build.add_hydrogens(st)
if delete_Ccap:
del_atoms = analyze.evaluate_asl(st, 'res.ptype "NMA "')
st.deleteAtoms(del_atoms)
build.add_hydrogens(st)
# Locate the aldehyde (there will only be one):
matches = analyze.evaluate_smarts_canvas(st, "[#1][C-0X3]=[O-0X1]")
if len(matches):
# Replace the aldehyde with a hydroxyl
m = matches[0]
resname = st.atom[m[1]].pdbres
resnum = st.atom[m[1]].resnum
oxygen, hydrogen = buildpeptide.grow_fragment(
st, m[1], m[0], "organic", "Hydroxyl", "forward")
# Give it the same resname as the previous residue:
st.atom[oxygen].pdbres = resname
st.atom[oxygen].resnum = resnum
st.atom[hydrogen].pdbres = resname
st.atom[hydrogen].resnum = resnum
if delete_Ncap:
# FIXME renumber residues so that the first residue starts with
# 1 instead of 2 (due to deleted ACE cap).
pass
return st