Advertisement
ProzacR

drawBoundingBox.py

Apr 22nd, 2020
666
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.10 KB | None | 0 0
  1. # -*- coding: utf-8 -*-                                                                                    
  2. from pymol.cgo import *                                                                                    
  3. from pymol import cmd                                                                                      
  4. from random import randint                                                                                  
  5.  
  6. #############################################################################
  7. #                                                                            
  8. # drawBoundingBox.py -- Draws a box surrounding a selection
  9. #
  10. #                                                                            
  11. # AUTHOR: Jason Vertrees                                                  
  12. # DATE  : 2/20/2009                                                          
  13. # NOTES : See comments below.                                                
  14. #                                                                            
  15. #############################################################################
  16. def drawBoundingBox(selection="(all)", padding=0.0, linewidth=2.0, r=1.0, g=1.0, b=1.0):    
  17.         """                                                                  
  18.        DESCRIPTION                                                          
  19.                Given selection, draw the bounding box around it.          
  20.  
  21.        USAGE:
  22.                drawBoundingBox [selection, [padding, [linewidth, [r, [g, b]]]]]
  23.  
  24.        PARAMETERS:
  25.                selection,              the selection to enboxen.  :-)
  26.                                        defaults to (all)
  27.  
  28.                padding,                defaults to 0
  29.  
  30.                linewidth,              width of box lines
  31.                                        defaults to 2.0
  32.  
  33.                r,                      red color component, valid range is [0.0, 1.0]
  34.                                        defaults to 1.0                              
  35.  
  36.                g,                      green color component, valid range is [0.0, 1.0]
  37.                                        defaults to 1.0                                
  38.  
  39.                b,                      blue color component, valid range is [0.0, 1.0]
  40.                                        defaults to 1.0                                
  41.  
  42.        RETURNS
  43.                string, the name of the CGO box
  44.  
  45.        NOTES
  46.                * This function creates a randomly named CGO box that minimally spans the protein. The
  47.                user can specify the width of the lines, the padding and also the color.                            
  48.        """                                                                                                    
  49.         ([minX, minY, minZ],[maxX, maxY, maxZ]) = cmd.get_extent(selection)
  50.  
  51.         print "Box dimensions (%.2f, %.2f, %.2f)" % (maxX-minX, maxY-minY, maxZ-minZ)
  52.         print "Center (%.2f, %.2f, %.2f)" % ((maxX+minX)/2, (maxY+minY)/2, (maxZ+minZ)/2)
  53.  
  54.         minX = minX - float(padding)
  55.         minY = minY - float(padding)
  56.         minZ = minZ - float(padding)
  57.         maxX = maxX + float(padding)
  58.         maxY = maxY + float(padding)
  59.         maxZ = maxZ + float(padding)
  60.  
  61.         if padding != 0:
  62.                  print "Box dimensions + padding (%.2f, %.2f, %.2f)" % (maxX-minX, maxY-minY, maxZ-minZ)
  63.  
  64.         boundingBox = [
  65.                 LINEWIDTH, float(linewidth),
  66.  
  67.                 BEGIN, LINES,
  68.                 COLOR, float(r), float(g), float(b),
  69.  
  70.                 VERTEX, minX, minY, minZ,       #1
  71.                 VERTEX, minX, minY, maxZ,       #2
  72.  
  73.                 VERTEX, minX, maxY, minZ,       #3
  74.                 VERTEX, minX, maxY, maxZ,       #4
  75.  
  76.                 VERTEX, maxX, minY, minZ,       #5
  77.                 VERTEX, maxX, minY, maxZ,       #6
  78.  
  79.                 VERTEX, maxX, maxY, minZ,       #7
  80.                 VERTEX, maxX, maxY, maxZ,       #8
  81.  
  82.  
  83.                 VERTEX, minX, minY, minZ,       #1
  84.                 VERTEX, maxX, minY, minZ,       #5
  85.  
  86.                 VERTEX, minX, maxY, minZ,       #3
  87.                 VERTEX, maxX, maxY, minZ,       #7
  88.  
  89.                 VERTEX, minX, maxY, maxZ,       #4
  90.                 VERTEX, maxX, maxY, maxZ,       #8
  91.  
  92.                 VERTEX, minX, minY, maxZ,       #2
  93.                 VERTEX, maxX, minY, maxZ,       #6
  94.  
  95.  
  96.                 VERTEX, minX, minY, minZ,       #1
  97.                 VERTEX, minX, maxY, minZ,       #3
  98.  
  99.                 VERTEX, maxX, minY, minZ,       #5
  100.                 VERTEX, maxX, maxY, minZ,       #7
  101.  
  102.                 VERTEX, minX, minY, maxZ,       #2
  103.                 VERTEX, minX, maxY, maxZ,       #4
  104.  
  105.                 VERTEX, maxX, minY, maxZ,       #6
  106.                 VERTEX, maxX, maxY, maxZ,       #8
  107.  
  108.                 END
  109.         ]
  110.  
  111.         boxName = "box_" + str(randint(0,10000))
  112.         while boxName in cmd.get_names():
  113.                 boxName = "box_" + str(randint(0,10000))
  114.  
  115.         cmd.load_cgo(boundingBox,boxName)
  116.         return boxName
  117.  
  118. cmd.extend ("drawBoundingBox", drawBoundingBox)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement