DrawBoundingBox: Difference between revisions

From PyMOLWiki
Jump to navigation Jump to search
(Added the padding option and some useful print statements. Change the name to drawBoundingBox, plus some code alterations)
m (separated the run command from the python code)
 
(7 intermediate revisions by 4 users not shown)
Line 4: Line 4:
<gallery>
<gallery>
Image:DrawMinBB.png|Example of a bounding box
Image:DrawMinBB.png|Example of a bounding box
Image:bb_with_padding.png|Two bounding boxes, one with 0 padding, the other with 10 Ang padding.
</gallery>
</gallery>


Line 11: Line 12:
fetch 1jsd
fetch 1jsd
drawBoundingBox 1jsd, r=0.33, g=0.80
drawBoundingBox 1jsd, r=0.33, g=0.80
# example from above w/padding, draw it light blue
drawBoundingBox padding=10, r=0.5, g=0.8, b=1.0
</source>
</source>


= Installation =
= Installation =
Just copy the source to your computer. Then run
Copy the source code to your computer, and execute it by issuing the command "run /path/to/drawBoundingBox.py" in PyMOL.
<source lang="python">
run /path/to/drawBoundingBox.py
</source>


<source lang="python">
<source lang="python">
Line 24: Line 25:
from pymol import cmd                                                                                       
from pymol import cmd                                                                                       
from random import randint                                                                                   
from random import randint                                                                                   
from string import split                                                                                   


#############################################################################
#############################################################################
Line 70: Line 70:
         """                                                                                                     
         """                                                                                                     


         ([minX, minY, minZ],[maxX, maxY, maxZ]) = cmd.get_extent(sel)
         ([minX, minY, minZ],[maxX, maxY, maxZ]) = cmd.get_extent(selection)


         print "Box dimensions (%.2f, %.2f, %.2f)" % (maxX-minX, maxY-minY, maxZ-minZ)
         print "Box dimensions (%.2f, %.2f, %.2f)" % (maxX-minX, maxY-minY, maxZ-minZ)
Line 81: Line 81:
         maxZ = maxZ + float(padding)
         maxZ = maxZ + float(padding)


      if padding != 0:
        if padding != 0:
                 print "Box dimensions + padding (%.2f, %.2f, %.2f)" % (maxX-minX, maxY-minY, maxZ-minZ)
                 print "Box dimensions + padding (%.2f, %.2f, %.2f)" % (maxX-minX, maxY-minY, maxZ-minZ)


Line 137: Line 137:
         cmd.load_cgo(boundingBox,boxName)
         cmd.load_cgo(boundingBox,boxName)
         return boxName
         return boxName
cmd.extend ("drawBoundingBox", drawBoundingBox)
</source>
</source>


Line 144: Line 146:


[[Category:Script_Library|DrawMinBoundingBox]]
[[Category:Script_Library|DrawMinBoundingBox]]
[[Category:Math_Scripts]]
[[Category:CGO]]
[[Category:CGO]]

Latest revision as of 07:36, 16 January 2013

Overview

Draws a bounding box around a given selection.

Example

run ~/drawBoundingBox.py
fetch 1jsd
drawBoundingBox 1jsd, r=0.33, g=0.80

# example from above w/padding, draw it light blue
drawBoundingBox padding=10, r=0.5, g=0.8, b=1.0

Installation

Copy the source code to your computer, and execute it by issuing the command "run /path/to/drawBoundingBox.py" in PyMOL.

# -*- coding: utf-8 -*-                                                                                     
from pymol.cgo import *                                                                                     
from pymol import cmd                                                                                       
from random import randint                                                                                  

#############################################################################
#                                                                            
# drawBoundingBox.py -- Draws a box surrounding a selection 
#
#                                                                            
# AUTHOR: Jason Vertrees                                                   
# DATE  : 2/20/2009                                                          
# NOTES : See comments below.                                                
#                                                                            
#############################################################################
def drawBoundingBox(selection="(all)", padding=0.0, linewidth=2.0, r=1.0, g=1.0, b=1.0):     
        """                                                                  
        DESCRIPTION                                                          
                Given selection, draw the bounding box around it.          

        USAGE:
                drawBoundingBox [selection, [padding, [linewidth, [r, [g, b]]]]]

        PARAMETERS:
                selection,              the selection to enboxen.  :-)
                                        defaults to (all)
   
                padding,                defaults to 0

                linewidth,              width of box lines
                                        defaults to 2.0

                r,                      red color component, valid range is [0.0, 1.0]
                                        defaults to 1.0                               

                g,                      green color component, valid range is [0.0, 1.0]
                                        defaults to 1.0                                 

                b,                      blue color component, valid range is [0.0, 1.0]
                                        defaults to 1.0                                

        RETURNS
                string, the name of the CGO box

        NOTES
                * This function creates a randomly named CGO box that minimally spans the protein. The
                user can specify the width of the lines, the padding and also the color.                            
        """                                                                                                    

        ([minX, minY, minZ],[maxX, maxY, maxZ]) = cmd.get_extent(selection)

        print "Box dimensions (%.2f, %.2f, %.2f)" % (maxX-minX, maxY-minY, maxZ-minZ)

        minX = minX - float(padding)
        minY = minY - float(padding)
        minZ = minZ - float(padding)
        maxX = maxX + float(padding)
        maxY = maxY + float(padding)
        maxZ = maxZ + float(padding)

        if padding != 0:
                 print "Box dimensions + padding (%.2f, %.2f, %.2f)" % (maxX-minX, maxY-minY, maxZ-minZ)

        boundingBox = [
                LINEWIDTH, float(linewidth),

                BEGIN, LINES,
                COLOR, float(r), float(g), float(b),

                VERTEX, minX, minY, minZ,       #1
                VERTEX, minX, minY, maxZ,       #2

                VERTEX, minX, maxY, minZ,       #3
                VERTEX, minX, maxY, maxZ,       #4

                VERTEX, maxX, minY, minZ,       #5
                VERTEX, maxX, minY, maxZ,       #6

                VERTEX, maxX, maxY, minZ,       #7
                VERTEX, maxX, maxY, maxZ,       #8


                VERTEX, minX, minY, minZ,       #1
                VERTEX, maxX, minY, minZ,       #5

                VERTEX, minX, maxY, minZ,       #3
                VERTEX, maxX, maxY, minZ,       #7

                VERTEX, minX, maxY, maxZ,       #4
                VERTEX, maxX, maxY, maxZ,       #8

                VERTEX, minX, minY, maxZ,       #2
                VERTEX, maxX, minY, maxZ,       #6


                VERTEX, minX, minY, minZ,       #1
                VERTEX, minX, maxY, minZ,       #3

                VERTEX, maxX, minY, minZ,       #5
                VERTEX, maxX, maxY, minZ,       #7

                VERTEX, minX, minY, maxZ,       #2
                VERTEX, minX, maxY, maxZ,       #4

                VERTEX, maxX, minY, maxZ,       #6
                VERTEX, maxX, maxY, maxZ,       #8

                END
        ]

        boxName = "box_" + str(randint(0,10000))
        while boxName in cmd.get_names():
                boxName = "box_" + str(randint(0,10000))

        cmd.load_cgo(boundingBox,boxName)
        return boxName

cmd.extend ("drawBoundingBox", drawBoundingBox)

See Also

Bounding_Box