Difference between revisions of "DrawBoundingBox"

From PyMOLWiki
Jump to: navigation, search
(Added the padding option and some useful print statements. Change the name to drawBoundingBox, plus some code alterations)
Line 1: Line 1:
= OVERVIEW =
+
= Overview =
Draws the minumum bounding box around your selection.
+
Draws a bounding box around a given selection.
  
 
<gallery>
 
<gallery>
Image:DrawMinBB.png|Example min BB
+
Image:DrawMinBB.png|Example of a bounding box
 
</gallery>
 
</gallery>
  
 
= Example =
 
= Example =
 
<source lang="python">
 
<source lang="python">
run ~/drawMinBoundingBox.py
+
run ~/drawBoundingBox.py
 
fetch 1jsd
 
fetch 1jsd
drawMinBoundingBox 1jsd, 3, r=0.33, g=0.80
+
drawBoundingBox 1jsd, r=0.33, g=0.80
 
</source>
 
</source>
  
 
= Installation =
 
= Installation =
Just copy the source to your computer. Then run
+
Just copy the source to your computer. Then run
 
<source lang="python">
 
<source lang="python">
run /path/to/drawMinBoundingBox.py
+
run /path/to/drawBoundingBox.py
 
</source>
 
</source>
 
= Usage =
 
<source lang="python">
 
drawMinBoundingBox [selection, [lineWidth, [redColor, [greenColor, [blueColor]]]]]
 
</source>
 
 
= The Code =
 
[[Media:DrawMinBoundBox.tar.bz2|Download drawMinBoundingBox.tar.bz2]]
 
  
 
<source lang="python">
 
<source lang="python">
Line 36: Line 28:
 
#############################################################################
 
#############################################################################
 
#                                                                             
 
#                                                                             
# drawMinBoundingBox.py -- Draws the smallest box surrounding a selection  
+
# drawBoundingBox.py -- Draws a box surrounding a selection  
 +
#
 
#                                                                             
 
#                                                                             
# AUTHOR: Jason Vertrees                                                    
+
# AUTHOR: Jason Vertrees                                                  
 
# DATE  : 2/20/2009                                                           
 
# DATE  : 2/20/2009                                                           
 
# NOTES : See comments below.                                                 
 
# NOTES : See comments below.                                                 
 
#                                                                             
 
#                                                                             
 
#############################################################################
 
#############################################################################
def drawMinBoundingBox(sel="(all)", lineWidth=2.0, r=1.0, g=1.0, b=1.0):     
+
def drawBoundingBox(selection="(all)", padding=0.0, linewidth=2.0, r=1.0, g=1.0, b=1.0):     
 
         """                                                                   
 
         """                                                                   
 
         DESCRIPTION                                                           
 
         DESCRIPTION                                                           
                 Given sel, draw the minimum bounding box around it.           
+
                 Given selection, draw the bounding box around it.           
  
 
         USAGE:
 
         USAGE:
                 drawMinBoundingBox [sel, [lineWidth, [r, [g, b]]]]
+
                 drawBoundingBox [selection, [padding, [linewidth, [r, [g, b]]]]]
  
 
         PARAMETERS:
 
         PARAMETERS:
                 sel,                   the selection to enboxen.  :-)
+
                 selection,             the selection to enboxen.  :-)
                                                defaults to (all)    
+
                                        defaults to (all)
 +
 
 +
                padding,                defaults to 0
  
                 lineWidth,              width of box lines
+
                 linewidth,              width of box lines
                                                defaults to 2.0
+
                                        defaults to 2.0
  
                 r,                             red color component, valid range is [0.0, 1.0]
+
                 r,                     red color component, valid range is [0.0, 1.0]
                                                defaults to 1.0                               
+
                                        defaults to 1.0                               
  
                 g,                             green color component, valid range is [0.0, 1.0]
+
                 g,                     green color component, valid range is [0.0, 1.0]
                                                defaults to 1.0                                 
+
                                        defaults to 1.0                                 
  
                 b,                             blue color component, valid range is [0.0, 1.0]
+
                 b,                     blue color component, valid range is [0.0, 1.0]
                                                defaults to 1.0                                 
+
                                        defaults to 1.0                                 
  
 
         RETURNS
 
         RETURNS
Line 71: Line 66:
  
 
         NOTES
 
         NOTES
                 * This function creates a randomly named CGO box that minimally spans the protein. The
+
                 * This function creates a randomly named CGO box that minimally spans the protein. The
                 user can specify the width of the lines and also the color.                             
+
                 user can specify the width of the lines, the padding and also the color.                             
 
 
                * Maybe add a padding function?  This might help docking folks -- eg. add a 5 Ang border around
 
                  the protein then draw the box there?                                                       
 
 
         """                                                                                                     
 
         """                                                                                                     
  
 
         ([minX, minY, minZ],[maxX, maxY, maxZ]) = cmd.get_extent(sel)
 
         ([minX, minY, minZ],[maxX, maxY, maxZ]) = cmd.get_extent(sel)
  
         minBB = [
+
         print "Box dimensions (%.2f, %.2f, %.2f)" % (maxX-minX, maxY-minY, maxZ-minZ)
                 LINEWIDTH, float(lineWidth),
+
 
 +
        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,
 
                 BEGIN, LINES,
Line 127: Line 131:
 
         ]
 
         ]
  
         curName = "minBB_" + str(randint(0,10000))
+
         boxName = "box_" + str(randint(0,10000))
         while curName in cmd.get_names():
+
         while boxName in cmd.get_names():
                 curName = "minBB_" + str(randint(0,10000))
+
                 boxName = "box_" + str(randint(0,10000))
  
         cmd.load_cgo(minBB,curName)
+
         cmd.load_cgo(boundingBox,boxName)
         return curName
+
         return boxName
 
</source>
 
</source>
  
== See Also ==
+
= See Also =
 
[[Bounding_Box]]
 
[[Bounding_Box]]
  

Revision as of 14:08, 30 March 2009

Overview

Draws a bounding box around a given selection.

Example

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

Installation

Just copy the source to your computer. Then run

run /path/to/drawBoundingBox.py
# -*- coding: utf-8 -*-                                                                                     
from pymol.cgo import *                                                                                     
from pymol import cmd                                                                                       
from random import randint                                                                                  
from string import split                                                                                    

#############################################################################
#                                                                            
# 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(sel)

        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

See Also

Bounding_Box