Color by conservation

From PyMOLWiki
Revision as of 12:34, 8 December 2011 by Inchoate (talk | contribs)
Jump to: navigation, search

Overview

This script reads an alignment object and colors the protein objects in the alignment by the sequence conservation found in the alignment.

Cbcon.png

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