| Trees | Indices | Help |
|
|---|
|
|
1 #
2 # Copyright (C) 2011-2017 Greg Landrum
3 #
4 # @@ All Rights Reserved @@
5 # This file is part of the RDKit.
6 # The contents are covered by the terms of the BSD license
7 # which is included in the file license.txt, found at the root
8 # of the RDKit source tree.
9 #
10 import sys
11 import IPython
12
13 if IPython.release.version < '0.11':
14 raise ImportError('this module requires at least v0.11 of IPython')
15 try:
16 import py3Dmol
17 _canUse3D = True
18 except ImportError:
19 _canUse3D = False
20
21 from rdkit import Chem
22 from rdkit.Chem import rdchem, rdChemReactions
23 from rdkit.Chem import Draw
24 from rdkit.Chem.Draw import rdMolDraw2D
25 from rdkit.six import BytesIO, StringIO
26 import copy
27 import os
28 import json
29 import uuid
30 import warnings
31 import numpy
32 try:
33 import Image
34 except ImportError:
35 from PIL import Image
36
37 from IPython.display import SVG
38
39 molSize = (450, 150)
40 highlightSubstructs = True
41 kekulizeStructures = True
42 highlightByReactant = False
43 ipython_useSVG = False
44 ipython_3d = False
45 molSize_3d = (400, 400)
46 drawing_type_3d = 'stick' # default drawing type for 3d structures
47 bgcolor_3d = '0xeeeeee'
48 # expose RDLogs to Python StdErr so they are shown
49 # in the IPythonConsole not the server logs.
50 Chem.WrapLogs()
51
52
54 if mol.GetNumAtoms()>=999 or drawAs == 'cartoon':
55 # py3DMol is happier with TER and MASTER records present
56 pdb = Chem.MolToPDBBlock(mol,flavor=0x20|0x10)
57 view.addModel(pdb,'pdb')
58 else:
59 # py3Dmol does not currently support v3k mol files, so
60 # we can only provide those with "smaller" molecules
61 mb = Chem.MolToMolBlock(mol,confId=confId)
62 view.addModel(mb,'sdf')
63 if drawAs is None:
64 drawAs = drawing_type_3d
65 view.setStyle({drawAs:{}})
66
68 if bgColor is None:
69 bgColor = bgcolor_3d
70 if size is None:
71 size=molSize_3d
72 if view is None:
73 view = py3Dmol.view(width=size[0],height=size[1])
74 view.removeAllModels()
75 try:
76 iter(m)
77 except TypeError:
78 addMolToView(m,view,confId,drawAs)
79 else:
80 ms = m
81 for m in ms:
82 addMolToView(m,view,confId,drawAs)
83
84 view.setBackgroundColor(bgColor)
85 view.zoomTo()
86 return view.show()
87
89 """For IPython notebook, renders 3D webGL objects."""
90 if not ipython_3d or not mol.GetNumConformers():
91 return None
92 conf = mol.GetConformer()
93 if not conf.Is3D():
94 return None
95 return drawMol3D(mol).data
96
97
99 if hasattr(mol, '__sssAtoms'):
100 highlightAtoms = mol.__sssAtoms
101 else:
102 highlightAtoms = []
103 kekulize=kekulizeStructures
104 return Draw._moltoimg(mol,molSize,highlightAtoms,"",returnPNG=True,
105 kekulize=kekulize)
106
107
109 if not ipython_useSVG:
110 return None
111 if hasattr(mol, '__sssAtoms'):
112 highlightAtoms = mol.__sssAtoms
113 else:
114 highlightAtoms = []
115 return Draw._moltoSVG(mol,molSize,highlightAtoms,"",kekulize)
116
117
119 rc = copy.deepcopy(rxn)
120 img = Draw.ReactionToImage(rc, subImgSize=(int(molSize[0] / 3), molSize[1]),
121 highlightByReactant=highlightByReactant)
122 bio = BytesIO()
123 img.save(bio, format='PNG')
124 return bio.getvalue()
125
127 if not ipython_useSVG:
128 return None
129 rc = copy.deepcopy(rxn)
130 return Draw.ReactionToImage(rc, subImgSize=(int(molSize[0] / 3), molSize[1]),
131 useSVG=True,highlightByReactant=highlightByReactant)
132
134 res = mol.__GetSubstructMatch(query, **kwargs)
135 if highlightSubstructs:
136 mol.__sssAtoms = list(res)
137 else:
138 mol.__sssAtoms = []
139 return res
140
141
143 res = mol.__GetSubstructMatches(query, **kwargs)
144 mol.__sssAtoms = []
145 if highlightSubstructs:
146 for entry in res:
147 mol.__sssAtoms.extend(list(entry))
148 return res
149
150
151 # code for displaying PIL images directly,
153 """displayhook function for PIL Images, rendered as PNG"""
154 bio = BytesIO()
155 img.save(bio, format='PNG')
156 return bio.getvalue()
157
158
159 _MolsToGridImageSaved = None
160
161
163 global _MolsToGridImageSaved
164 if 'useSVG' not in kwargs:
165 kwargs['useSVG'] = ipython_useSVG
166 if _MolsToGridImageSaved is not None:
167 fn = _MolsToGridImageSaved
168 else:
169 fn = Draw.MolsToGridImage
170 if len(mols)>maxMols:
171 warnings.warn("Truncating the list of molecules to be displayed to %d. Change the maxMols value to display more."%(maxMols))
172 mols = mols[:maxMols]
173 for prop in ('legends','highlightAtoms','highlightBonds'):
174 if prop in kwargs:
175 kwargs[prop] = kwargs[prop][:maxMols]
176
177 res = fn(mols, **kwargs)
178 if kwargs['useSVG']:
179 return SVG(res)
180 else:
181 return res
182
183
185 global _MolsToGridImageSaved
186 rdchem.Mol._repr_png_ = _toPNG
187 rdchem.Mol._repr_svg_ = _toSVG
188 if _canUse3D:
189 rdchem.Mol._repr_html_ = _toJSON
190 rdChemReactions.ChemicalReaction._repr_png_ = _toReactionPNG
191 rdChemReactions.ChemicalReaction._repr_svg_ = _toReactionSVG
192 if not hasattr(rdchem.Mol, '__GetSubstructMatch'):
193 rdchem.Mol.__GetSubstructMatch = rdchem.Mol.GetSubstructMatch
194 rdchem.Mol.GetSubstructMatch = _GetSubstructMatch
195 if not hasattr(rdchem.Mol, '__GetSubstructMatches'):
196 rdchem.Mol.__GetSubstructMatches = rdchem.Mol.GetSubstructMatches
197 rdchem.Mol.GetSubstructMatches = _GetSubstructMatches
198 Image.Image._repr_png_ = display_pil_image
199 _MolsToGridImageSaved = Draw.MolsToGridImage
200 Draw.MolsToGridImage = ShowMols
201 rdchem.Mol.__DebugMol = rdchem.Mol.Debug
202 rdchem.Mol.Debug = lambda self, useStdout=False: self.__DebugMol(useStdout=useStdout)
203
204
205 InstallIPythonRenderer()
206
207
209 global _MolsToGridImageSaved
210 del rdchem.Mol._repr_svg_
211 del rdchem.Mol._repr_png_
212 if _canUse3D:
213 del rdchem.Mol._repr_html_
214 del rdChemReactions.ChemicalReaction._repr_png_
215 if hasattr(rdchem.Mol, '__GetSubstructMatch'):
216 rdchem.Mol.GetSubstructMatch = rdchem.Mol.__GetSubstructMatch
217 del rdchem.Mol.__GetSubstructMatch
218 if hasattr(rdchem.Mol, '__GetSubstructMatches'):
219 rdchem.Mol.GetSubstructMatches = rdchem.Mol.__GetSubstructMatches
220 del rdchem.Mol.__GetSubstructMatches
221 del Image.Image._repr_png_
222 if _MolsToGridImageSaved is not None:
223 Draw.MolsToGridImage = _MolsToGridImageSaved
224 if hasattr(rdchem.Mol, '__DebugMol'):
225 rdchem.Mol.Debug = rdchem.Mol.__DebugMol
226 del rdchem.Mol.__DebugMol
227
| Trees | Indices | Help |
|
|---|
| Generated by Epydoc 3.0.1 on Sun Oct 8 11:32:04 2017 | http://epydoc.sourceforge.net |