BbPlane: Difference between revisions

From PyMOLWiki
Jump to navigation Jump to search
(Created page with 'This script will draw a CGO plane between the backbone atoms of two neighboring residues. This is to show the planarity of the atoms. The image style this is meant to represent…')
 
(moved script to github)
 
(8 intermediate revisions by 3 users not shown)
Line 1: Line 1:
{{Infobox script-repo
|type      = module
|filename  = bbPlane.py
|author    = [[User:Inchoate|Jason Vertrees]], [[User:Bell|Blaine Bell]] and [[User:Speleo3|Thomas Holder]]
|license  = MIT
}}
This script will draw a CGO plane between the backbone atoms of two neighboring residues.  This is to show the planarity of the atoms.  The image style this is meant to represent can be found many places, like "Introduction to Protein Structure" by Branden and Tooze (2nd ed. pp. 8).
This script will draw a CGO plane between the backbone atoms of two neighboring residues.  This is to show the planarity of the atoms.  The image style this is meant to represent can be found many places, like "Introduction to Protein Structure" by Branden and Tooze (2nd ed. pp. 8).


<gallery>
<gallery perrow=3 widths=300 heights=300>
Image:bbPlane3.png|Close up of planar atoms
Image:bbPlane1.png|A few more
Image:bbPlane2.png|Global view
</gallery>
</gallery>


Line 13: Line 23:
</source>
</source>


= The Source =
[[Category:Script_Library]]
<source lang="python">
[[Category:Math_Scripts]]
#
[[Category:Structural_Biology_Scripts]]
# -- bbPLane.py - draws a CGO plane across the backbone atoms of
[[Category:Pymol-script-repo]]
#                neighboring amino acids
#
# Author: Jason Vertrees, 06/2010
# Copyright (C) Schrodinger
# Open Source License: MIT
#
from pymol.cgo import *    # get constants
from pymol import cmd, stored
 
def bbPlane(objSel, r=1.0, g=1.0, b=1.0, transp=0.0):
    """
    Draws a plane across the backbone for a selection
 
    PARAMS
    objSel, 
        (object or selection) protein object or selection
 
    r, g, b, transp
        (float) red, blue, green and transparency, components (0.0--1.0)
 
    RETURNS
    A new object representing the planes
 
    NOTES
    * You need to pass in an object or selection with at least two
    amino acids.  The plane spans CA_i, O_i, N-H_(i+1), and CA_(i+1)
 
    * Avoid two-sided lighting until I rearrange the vertices
 
    """
    # format input
    r, g, b, transp = float(r), float(g), float(b), float(transp)
    stored.AAs = []
 
    # need hydrogens
    cmd.h_add(objSel)
   
    # get the list of residue ids
    cmd.iterate( "(" + objSel + ") and n. CA" , "stored.AAs.append(resi)")
 
    # need at least two amino acids
    if len(stored.AAs) <= 1:
        print "ERROR: Please provide at least two amino acids, the alpha-carbon on the 2nd is needed."
        return
 
    # prepare the cgo
    obj = [
        BEGIN, TRIANGLES,
        COLOR, r, g, b,
        ]
 
    for res in range(0, len(stored.AAs)-1):
        curIdx, nextIdx = str(stored.AAs[res]), str(stored.AAs[res+1])
 
        # ignore prolines for now
        if cmd.count_atoms( "i. %s and resn PRO" % nextIdx ):
            continue
        # if the data are incomplete for any residues, ignore
        if cmd.count_atoms( "i. " + curIdx + " and n. CA") == 0 or \
                cmd.count_atoms( "i. " + curIdx + " and n. O") == 0 or \
                cmd.count_atoms("((i. " + nextIdx + " and n. N) extend 1) and (e. H)")==0 or \
                cmd.count_atoms("i. " + nextIdx + " and n. CA")== 0:
            continue
             
        # populate the position array
        pos = [ cmd.get_atom_coords( "i. " + curIdx + " and n. CA"),
                cmd.get_atom_coords( "i. " + curIdx + " and n. O"),
                cmd.get_atom_coords( "((i. " + nextIdx + " and n. N) extend 1) and (e. H)"),
                cmd.get_atom_coords( "i. " + nextIdx + " and n. CA")
                ]
 
        # fill in the vertex data for the triangles;
        # two-sided lighting is an issue
        obj.extend( [
            VERTEX, pos[0][0], pos[0][1], pos[0][2],
            VERTEX, pos[1][0], pos[1][1], pos[1][2],
            VERTEX, pos[2][0], pos[2][1], pos[2][2],
 
            VERTEX, pos[1][0], pos[1][1], pos[1][2],
            VERTEX, pos[2][0], pos[2][1], pos[2][2],           
            VERTEX, pos[3][0], pos[3][1], pos[3][2],
            ])
 
    # finish the CGO
    obj.append(END)
 
    # update the UI
    newName =  cmd.get_unused_name("backbonePlane")
    cmd.load_cgo(obj, newName)
    cmd.set("cgo_transparency", transp, newName)
 
 
cmd.extend("bbPlane", bbPlane)
</source>

Latest revision as of 07:28, 1 March 2012

Type Python Module
Download bbPlane.py
Author(s) Jason Vertrees, Blaine Bell and Thomas Holder
License MIT
This code has been put under version control in the project Pymol-script-repo

This script will draw a CGO plane between the backbone atoms of two neighboring residues. This is to show the planarity of the atoms. The image style this is meant to represent can be found many places, like "Introduction to Protein Structure" by Branden and Tooze (2nd ed. pp. 8).

Examples

# download the source and save as bbPlane.py
run bbPlane.py
fetch 1cll
# make planes for residues 4-9
bbPlane i. 4-10