Zero residues
Appearance
OVERVIEW
[edit]This script will renumber all the residues such that the first one is numbered 0. This is often helpful when dealing with alignments.
Ordering from Sequence End
[edit]If you want to change numbering based off the last residue's number in the sequence, just replace first in the code with last.
EXAMPLE
[edit]zero_residues 1AFK
zero_residues *
# make the first residue's number, 30.
zero_residues 1AFK, 30
INSTALL
[edit]Copy the source code below, to "zero_residues.py" and then simply run the file. The command, "zero_residues" will now be defined and can be used as in the examples above.
CODE
[edit]from pymol import cmd, stored
def zero_residues(sel1,offset=0,chains=0):
"""
DESCRIPTION
Renumbers the residues so that the first one is zero, or offset
USAGE
zero_residues selection [, offset [, chains ]]
EXAMPLES
zero_residues protName # first residue is 0
zero_residues protName, 5 # first residue is 5
zero_residues protName, chains=1 # each chain starts at 0
zero_residues *
"""
offset = int(offset)
# variable to store the offset
stored.first = None
# get the names of the proteins in the selection
names = ['(model %s and (%s))' % (p, sel1)
for p in cmd.get_object_list('(' + sel1 + ')')]
if int (chains):
names = ['(%s and chain %s)' % (p, chain)
for p in names
for chain in cmd.get_chains(p)]
# for each name shown
for p in names:
# get this offset
ok = cmd.iterate("first %s and polymer and n. CA" % p,"stored.first=resv")
# don't waste time if we don't have to
if not ok or stored.first == offset:
continue;
# reassign the residue numbers
cmd.alter("%s" % p, "resi=str(int(resi)-%s)" % str(int(stored.first)-offset))
# update pymol
cmd.rebuild()
# let pymol know about the function
cmd.extend("zero_residues", zero_residues)