def Draw2DSurfacePartialCharge(image, mol): oedepict.OEPrepareDepiction(mol) oechem.OEMMFFAtomTypes(mol) oechem.OEMMFF94PartialCharges(mol) opts = oedepict.OE2DMolDisplayOptions(image.GetWidth(), image.GetHeight(), oedepict.OEScale_AutoScale) opts.SetTitleLocation(oedepict.OETitleLocation_Hidden) opts.SetScale(oegrapheme.OEGetMoleculeSurfaceScale(mol, opts)) coloranion = oechem.OEColorStop(-1.0, oechem.OEColor(oechem.OEDarkRed)) colorcation = oechem.OEColorStop(+1.0, oechem.OEColor(oechem.OEDarkBlue)) colorg = oechem.OELinearColorGradient(coloranion, colorcation) colorg.AddStop(oechem.OEColorStop(0.0, oechem.OEColor(oechem.OEWhite))) arcfxn = AtomPartialChargeArcFxn(colorg) for atom in mol.GetAtoms(): oegrapheme.OESetSurfaceArcFxn(mol, atom, arcfxn) disp = oedepict.OE2DMolDisplay(mol, opts) oegrapheme.OEDraw2DSurface(disp) oedepict.OERenderMolecule(image, disp)
# # TERMS FOR USE OF SAMPLE CODE The software below ("Sample Code") is # provided to current licensees or subscribers of OpenEye products or # SaaS offerings (each a "Customer"). # Customer is hereby permitted to use, copy, and modify the Sample Code, # subject to these terms. OpenEye claims no rights to Customer's # modifications. Modification of Sample Code is at Customer's sole and # exclusive risk. Sample Code may require Customer to have a then # current license or subscription to the applicable OpenEye offering. # THE SAMPLE CODE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, # EXPRESS OR IMPLIED. OPENEYE DISCLAIMS ALL WARRANTIES, INCLUDING, BUT # NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY, FITNESS FOR A # PARTICULAR PURPOSE AND NONINFRINGEMENT. In no event shall OpenEye be # liable for any damages or liability in connection with the Sample Code # or its use. from openeye import oechem from openeye import oedepict from openeye import oegrapheme # @ <SNIPPET-DRAW-COLOR-GRADIENT> colorg = oechem.OELinearColorGradient(oechem.OEColorStop(0.0, oechem.OEYellow)) colorg.AddStop(oechem.OEColorStop(+1.0, oechem.OEOrange)) colorg.AddStop(oechem.OEColorStop(-1.0, oechem.OEGreen)) image = oedepict.OEImage(400, 100) oegrapheme.OEDrawColorGradient(image, colorg) oedepict.OEWriteImage("DrawColorGradient.png", image) # @ </SNIPPET-DRAW-COLOR-GRADIENT> oedepict.OEWriteImage("DrawColorGradient.pdf", image)
def main(argv=[__name__]): itf = oechem.OEInterface() oechem.OEConfigure(itf, InterfaceData) oedepict.OEConfigureImageWidth(itf, 600.0) oedepict.OEConfigureImageHeight(itf, 600.0) oedepict.OEConfigure2DMolDisplayOptions(itf, oedepict.OE2DMolDisplaySetup_AromaticStyle) oechem.OEConfigureSplitMolComplexOptions(itf, oechem.OESplitMolComplexSetup_LigName) if not oechem.OEParseCommandLine(itf, argv): return 1 iname = itf.GetString("-complex") oname = itf.GetString("-out") ifs = oechem.oemolistream() if not ifs.open(iname): oechem.OEThrow.Fatal("Cannot open input file!") ext = oechem.OEGetFileExtension(oname) if not oedepict.OEIsRegisteredImageFile(ext): oechem.OEThrow.Fatal("Unknown image type!") ofs = oechem.oeofstream() if not ofs.open(oname): oechem.OEThrow.Fatal("Cannot open output file!") complexmol = oechem.OEGraphMol() if not oechem.OEReadMolecule(ifs, complexmol): oechem.OEThrow.Fatal("Unable to read molecule from %s" % iname) if not oechem.OEHasResidues(complexmol): oechem.OEPerceiveResidues(complexmol, oechem.OEPreserveResInfo_All) # Separate ligand and protein sopts = oechem.OESplitMolComplexOptions() oechem.OESetupSplitMolComplexOptions(sopts, itf) ligand = oechem.OEGraphMol() protein = oechem.OEGraphMol() water = oechem.OEGraphMol() other = oechem.OEGraphMol() oechem.OESplitMolComplex(ligand, protein, water, other, complexmol, sopts) if ligand.NumAtoms() == 0: oechem.OEThrow.Fatal("Cannot separate complex!") # Calculate average BFactor of the whole complex avgbfactor = GetAverageBFactor(complexmol) # Calculate minimum and maximum BFactor of the ligand and its environment minbfactor, maxbfactor = GetMinAndMaxBFactor(ligand, protein) # Attach to each ligand atom the average BFactor of the nearby protein atoms stag = "avg residue BFfactor" itag = oechem.OEGetTag(stag) SetAverageBFactorOfNearbyProteinAtoms(ligand, protein, itag) oechem.OEThrow.Info("Average BFactor of the complex = %+.3f" % avgbfactor) oechem.OEThrow.Info("Minimum BFactor of the ligand and its environment = %+.3f" % minbfactor) oechem.OEThrow.Info("Maximum BFactor of the ligand and its environment = %+.3f" % maxbfactor) # Create image imagewidth, imageheight = oedepict.OEGetImageWidth(itf), oedepict.OEGetImageHeight(itf) image = oedepict.OEImage(imagewidth, imageheight) mframe = oedepict.OEImageFrame(image, imagewidth, imageheight * 0.90, oedepict.OE2DPoint(0.0, 0.0)) lframe = oedepict.OEImageFrame(image, imagewidth, imageheight * 0.10, oedepict.OE2DPoint(0.0, imageheight * 0.90)) opts = oedepict.OE2DMolDisplayOptions(mframe.GetWidth(), mframe.GetHeight(), oedepict.OEScale_AutoScale) oedepict.OESetup2DMolDisplayOptions(opts, itf) opts.SetAtomColorStyle(oedepict.OEAtomColorStyle_WhiteMonochrome) # Create BFactor color gradient colorg = oechem.OELinearColorGradient() colorg.AddStop(oechem.OEColorStop(0.0, oechem.OEDarkBlue)) colorg.AddStop(oechem.OEColorStop(10.0, oechem.OELightBlue)) colorg.AddStop(oechem.OEColorStop(25.0, oechem.OEYellowTint)) colorg.AddStop(oechem.OEColorStop(50.0, oechem.OERed)) colorg.AddStop(oechem.OEColorStop(100.0, oechem.OEDarkRose)) # Prepare ligand for depiction oegrapheme.OEPrepareDepictionFrom3D(ligand) arcfxn = BFactorArcFxn(colorg, itag) for atom in ligand.GetAtoms(): oegrapheme.OESetSurfaceArcFxn(ligand, atom, arcfxn) opts.SetScale(oegrapheme.OEGetMoleculeSurfaceScale(ligand, opts)) # Render ligand and visualize BFactor disp = oedepict.OE2DMolDisplay(ligand, opts) colorbfactor = ColorLigandAtomByBFactor(colorg) oegrapheme.OEAddGlyph(disp, colorbfactor, oechem.OEIsTrueAtom()) oegrapheme.OEDraw2DSurface(disp) oedepict.OERenderMolecule(mframe, disp) # Draw color gradient opts = oegrapheme.OEColorGradientDisplayOptions() opts.SetColorStopPrecision(1) opts.AddMarkedValue(avgbfactor) opts.SetBoxRange(minbfactor, maxbfactor) oegrapheme.OEDrawColorGradient(lframe, colorg, opts) oedepict.OEWriteImage(oname, image) return 0
if atom.GetMapIdx() == 1: r_coords = mdisp.GetAtomDisplay(atom).GetCoords() # Create base image image = oedepict.OEImage(300, 300) # Draw pie segments vals = [[100, ">99", 50, 12], [78, 12, 34, 77]] n_ring = len(vals) # Get the layer into which we will draw the pie chart layer = mdisp.GetLayer(oedepict.OELayerPosition_Below) # Set up gradients for segments gradients = [ oechem.OELinearColorGradient(oechem.OEColorStop(0, oechem.OEWhite), oechem.OEColorStop(100, oechem.OEGreen)), oechem.OELinearColorGradient(oechem.OEColorStop(0, oechem.OEWhite), oechem.OEColorStop(100, oechem.OERed)) ] # Draw rings from outside inwards for ring_num in range(n_ring): starting_angle = START_ANGLE ring = vals[ring_num] for value in ring: radius = (n_ring - ring_num) * RADIUS_BASE if isinstance(value, str) and ">" in value: value_for_color = 100 else: value_for_color = value
return True def CreateCopy(self): return ColorCharge(self.colorg).__disown__() mol = oechem.OEGraphMol() oechem.OESmilesToMol(mol, "Cc1cc(cc(c1[N+](=O)[O-])F)[N+]#C") oechem.OEMMFFAtomTypes(mol) oechem.OEMMFF94PartialCharges(mol) oedepict.OEPrepareDepiction(mol) opts = oedepict.OE2DMolDisplayOptions(350, 250, oedepict.OEScale_AutoScale) opts.SetAtomColorStyle(oedepict.OEAtomColorStyle_WhiteMonochrome) opts.SetTitleLocation(oedepict.OETitleLocation_Hidden) disp = oedepict.OE2DMolDisplay(mol, opts) coloranion = oechem.OEColorStop(-1.0, oechem.OEColor(oechem.OEDarkRed)) colorcation = oechem.OEColorStop(+1.0, oechem.OEColor(oechem.OEDarkBlue)) colorg = oechem.OELinearColorGradient(coloranion, colorcation) colorg.AddStop(oechem.OEColorStop(0.0, oechem.OEColor(oechem.OEWhite))) colorcharge = ColorCharge(colorg) oegrapheme.OEAddGlyph(disp, colorcharge, oechem.OEIsTrueAtom()) oedepict.OERenderMolecule("AnnotatePartialCharge.png", disp) # @ </SNIPPET-ANNOTATE-PARTIAL-CHARGE> oedepict.OERenderMolecule("AnnotatePartialCharge.pdf", disp)
def ligand_to_svg_stmd(ligand, ligand_name): class ColorLigandAtomByBFactor(oegrapheme.OEAtomGlyphBase): def __init__(self, colorg): oegrapheme.OEAtomGlyphBase.__init__(self) self.colorg = colorg def RenderGlyph(self, disp, atom): adisp = disp.GetAtomDisplay(atom) if adisp is None or not adisp.IsVisible(): return False if not oechem.OEHasResidue(atom): return False res = oechem.OEAtomGetResidue(atom) bfactor = res.GetBFactor() color = self.colorg.GetColorAt(bfactor) pen = oedepict.OEPen(color, color, oedepict.OEFill_On, 1.0) radius = disp.GetScale() / 3.0 layer = disp.GetLayer(oedepict.OELayerPosition_Below) circlestyle = oegrapheme.OECircleStyle_Default oegrapheme.OEDrawCircle(layer, circlestyle, adisp.GetCoords(), radius, pen) return True def CreateCopy(self): return ColorLigandAtomByBFactor(self.colorg).__disown__() with TemporaryDirectory() as output_directory: lig_copy = oechem.OEMol(ligand) if len(ligand_name) < 15: lig_copy.SetTitle(ligand_name) else: lig_copy.SetTitle(ligand_name[0:13] + '...') img_fn = os.path.join(output_directory, "img.svg") oegrapheme.OEPrepareDepictionFrom3D(lig_copy) colorg = oechem.OELinearColorGradient() colorg.AddStop(oechem.OEColorStop(0.0, oechem.OEDarkBlue)) colorg.AddStop(oechem.OEColorStop(10.0, oechem.OELightBlue)) colorg.AddStop(oechem.OEColorStop(25.0, oechem.OEYellowTint)) colorg.AddStop(oechem.OEColorStop(50.0, oechem.OERed)) colorg.AddStop(oechem.OEColorStop(100.0, oechem.OEDarkRose)) color_bfactor = ColorLigandAtomByBFactor(colorg) width, height = 150, 150 opts = oedepict.OE2DMolDisplayOptions(width, height, oedepict.OEScale_AutoScale) opts.SetTitleLocation(oedepict.OETitleLocation_Bottom) disp = oedepict.OE2DMolDisplay(lig_copy, opts) oegrapheme.OEAddGlyph(disp, color_bfactor, oechem.OEIsTrueAtom()) oedepict.OERenderMolecule(img_fn, disp) svg_lines = "" marker = False with open(img_fn, 'r') as file: for line in file: if marker: svg_lines += line if line.startswith("<svg"): marker = True svg_lines += line svg_lines += """<title>{}</title>\n""".format(ligand_name) if line.startswith("</svg>"): marker = False return svg_lines