Package rdkit :: Package Chem :: Package Draw
[hide private]
[frames] | no frames]

Source Code for Package rdkit.Chem.Draw

  1  # $Id: __init__.py 1763 2011-06-18 04:48:57Z glandrum $ 
  2  # 
  3  # Copyright (C) 2006-2011 Greg Landrum 
  4  #  All Rights Reserved 
  5  # 
  6  import os 
  7   
8 -def _getCanvas():
9 useAGG=False 10 useCairo=False 11 Canvas=None 12 if not os.environ.get('RDKIT_CANVAS',''): 13 try: 14 from cairoCanvas import Canvas 15 useCairo=True 16 except ImportError: 17 try: 18 from aggCanvas import Canvas 19 useAGG=True 20 except ImportError: 21 from spingCanvas import Canvas 22 else: 23 canv=os.environ['RDKIT_CANVAS'].lower() 24 if canv =='cairo': 25 from cairoCanvas import Canvas 26 useCairo=True 27 elif canv =='agg': 28 from aggCanvas import Canvas 29 useAGG=True 30 else: 31 from spingCanvas import Canvas 32 return useAGG,useCairo,Canvas
33
34 -def MolToImage(mol, size=(300,300), kekulize=True, wedgeBonds=True, 35 canvas=None, **kwargs):
36 """ returns a PIL image containing a drawing of the molecule 37 38 Keyword arguments: 39 kekulize -- run kekulization routine on input `mol` (default True) 40 size -- final image size, in pixel (default (300,300)) 41 wedgeBonds -- draw wedge (stereo) bonds (default True) 42 highlightAtoms -- list of atoms to highlight (default []) 43 highlightMap -- dictionary of (atom, color) pairs (default None) 44 """ 45 from MolDrawing import MolDrawing 46 if not mol: 47 raise ValueError,'Null molecule provided' 48 if canvas is None: 49 useAGG,useCairo,Canvas=_getCanvas() 50 if useAGG or useCairo: 51 import Image 52 img = Image.new("RGBA",size,"white") 53 canvas = Canvas(img) 54 else: 55 from spingCanvas import Canvas 56 canvas = Canvas(size=size,name='MolToImageFile') 57 img = canvas._image 58 drawer = MolDrawing(canvas) 59 60 if kekulize: 61 from rdkit import Chem 62 mol = Chem.Mol(mol.ToBinary()) 63 Chem.Kekulize(mol) 64 65 if not mol.GetNumConformers(): 66 from rdkit.Chem import AllChem 67 AllChem.Compute2DCoords(mol) 68 69 drawer.wedgeDashedBonds=wedgeBonds 70 drawer.AddMol(mol,**kwargs) 71 canvas.flush() 72 73 return img
74
75 -def MolToFile(mol,fileName,size=(300,300),kekulize=True, wedgeBonds=True, 76 imageType=None,**kwargs):
77 """ Generates a drawing of a molecule and writes it to a file 78 """ 79 from MolDrawing import MolDrawing 80 # original contribution from Uwe Hoffmann 81 if not fileName: 82 raise ValueError,'no fileName provided' 83 if not mol: 84 raise ValueError,'Null molecule provided' 85 86 87 if imageType is None: 88 imageType=os.path.splitext(fileName)[1][1:] 89 90 useAGG,useCairo,Canvas = _getCanvas() 91 if useCairo or useAGG: 92 canvas = Canvas(size=size,imageType=imageType, 93 fileName=fileName) 94 else: 95 canvas = Canvas(size=size,name=fileName,imageType=imageType) 96 drawer = MolDrawing(canvas) 97 if kekulize: 98 from rdkit import Chem 99 mol = Chem.Mol(mol.ToBinary()) 100 Chem.Kekulize(mol) 101 102 if not mol.GetNumConformers(): 103 from rdkit.Chem import AllChem 104 AllChem.Compute2DCoords(mol) 105 106 drawer.wedgeDashedBonds=wedgeBonds 107 drawer.AddMol(mol,**kwargs) 108 if useCairo or useAGG: 109 canvas.flush() 110 else: 111 canvas.save()
112
113 -def MolToImageFile(mol,filename,size=(300,300),kekulize=True, wedgeBonds=True, 114 **kwargs):
115 """ DEPRECATED: please use MolToFile instead 116 117 """ 118 img = MolToImage(mol,size=size,kekulize=kekulize,wedgeBonds=wedgeBonds,**kwargs) 119 img.save(filename)
120 121 tkRoot=None 122 tkLabel=None 123 tkPI=None
124 -def ShowMol(mol,size=(300,300),kekulize=True,wedgeBonds=True, 125 title='RDKit Molecule',**kwargs):
126 """ Generates a picture of a molecule and displays it in a Tkinter window 127 """ 128 global tkRoot,tkLabel,tkPI 129 import Tkinter 130 import ImageTk 131 132 img = MolToImage(mol,size,kekulize,wedgeBonds,**kwargs) 133 134 if not tkRoot: 135 tkRoot = Tkinter.Tk() 136 tkRoot.title(title) 137 tkPI = ImageTk.PhotoImage(img) 138 tkLabel = Tkinter.Label(tkRoot,image=tkPI) 139 tkLabel.place(x=0,y=0,width=img.size[0],height=img.size[1]) 140 else: 141 tkPI.paste(img) 142 tkRoot.geometry('%dx%d'%(img.size))
143