Color by conservation
		
		
		
		Jump to navigation
		Jump to search
		
Overview
This script reads an alignment object and colors the protein objects in the alignment by the sequence conservation found in the alignment.
Example Usage
# run the script
run show_conserved.py
# turn on the sequence viewer
set seq_view
# get some kinases
fetch 1opk 3dtc 3p86 2eva 3efw, async=0
# align them into the "aln" object
for x in cmd.get_names(): cmd.align(x, "3efw and c. A", object="aln")
# color
color_by_conservation("aln", as_putty=1)
The Code
def color_by_conservation(aln, names=(), color="rainbow", as_putty=0, _self=cmd):
    """
    PARAMETERS
    aln
        (string) the alignment object name
    names
        (list) a list of object names that are in the alignment;
               if (), then PyMOL will attempt to glean the names
               from the alignment object
    color
        (string) valid PyMOL spectrum name
    as_putty
        (0 or 1) if 0 display is not changed, else participating objects are shown
                 as cartoon putty, colored by the 'color' field
    """
    # PyMOL doesn't yet know about object:alignment
    # but we need to check that this exists or we might crash
    if _self.get_type(aln)!="object:":
        print "Error: Bad or incorrectly specified alignment object."
        return None
    
    r = cmd.get_raw_alignment(aln)
    if names==():
        known_objs = []
        map(known_objs.extend, map(lambda x: map(lambda y: y[0], x), r))
        known_objs=set(known_objs)
        # highest number of matches seen
        M = max(map(len,r)) + 1
    else:
        known_objs = set(names)
        M = len(known_objs) + 1
    for obj in known_objs:
        _self.alter(obj, "b=0.0")
    for af in r:
        c = float(1.0 + len(af)) / float(M)
        for y in af:
            _self.alter("%s and ID %s" % (y[0], y[1]), "b=c", space={'c':c})
    if as_putty!=0:
        for obj in known_objs:
            _self.show_as("cartoon", "%s" % obj)
            _self.cartoon("putty",  "%s" % obj)
            _self.spectrum('b', color, obj)
            _self.sort()
            _self.rebuild()
    return None