def PoseInteractionsSVG(md_components, width=400, height=300): """Generate a OEGrapheme interaction plot for a protein-ligand complex. The input protein may have other non-protein components as well so the input protein is first split into components to isolate the protein only for the plot. This may have to be changed if other components need to be included in the plot. """ # # perceive residue hierarchy of total system # if not oechem.OEHasResidues(proteinOrig): # oechem.OEPerceiveResidues(proteinOrig, oechem.OEPreserveResInfo_All) # print('Perceiving residues') # split the total system into components #protein, ligandPsuedo, water, other = oeommutils.split(proteinOrig) protein = md_components.get_protein ligand = md_components.get_ligand # make the OEHintInteractionContainer asite = oechem.OEInteractionHintContainer(protein, ligand) if not asite.IsValid(): oechem.OEThrow.Fatal("Cannot initialize active site!") # do the perceiving oechem.OEPerceiveInteractionHints(asite) # set the depiction options opts = oegrapheme.OE2DActiveSiteDisplayOptions(width, height) opts.SetRenderInteractiveLegend(True) magnifyresidue = 1.0 opts.SetSVGMagnifyResidueInHover(magnifyresidue) # make the depiction oegrapheme.OEPrepareActiveSiteDepiction(asite) adisp = oegrapheme.OE2DActiveSiteDisplay(asite, opts) # make the image image = oedepict.OEImage(width, height) oegrapheme.OERenderActiveSite(image, adisp) # Add a legend #iconscale = 0.5 #oedepict.OEAddInteractiveIcon(image, oedepict.OEIconLocation_TopRight, iconscale) svgBytes = oedepict.OEWriteImageToString("svg", image) svgString = svgBytes.decode("utf-8") return svgString
mol = oechem.OEGraphMol() if not oechem.OEReadMolecule(ifs, mol): oechem.OEThrow.Fatal("Unable to read molecule in %s" % filename) return mol if len(sys.argv) != 3: oechem.OEThrow.Usage("%s <receptor> <ligand>" % sys.argv[0]) receptor = ImportMolecule(sys.argv[1]) ligand = ImportMolecule(sys.argv[2]) asite = oechem.OEInteractionHintContainer(receptor, ligand) oechem.OEPerceiveInteractionHints(asite) oegrapheme.OEPrepareActiveSiteDepiction(asite) # @ <SNIPPET-OERENDERACTIVESITE-IMAGE-ADISP> # initializing asite oechem.OEInteractionHintContainer(receptor, ligand) object image = oedepict.OEImage(800.0, 600.0) opts = oegrapheme.OE2DActiveSiteDisplayOptions(image.GetWidth(), image.GetHeight()) opts.SetRenderInteractiveLegend(True) adisp = oegrapheme.OE2DActiveSiteDisplay(asite, opts) oegrapheme.OERenderActiveSite(image, adisp) oedepict.OEWriteImage("OERenderActiveSite-image-adisp.svg", image) # @ </SNIPPET-OERENDERACTIVESITE-IMAGE-ADISP> oedepict.OEWriteImage("OERenderActiveSite-image-adisp.pdf", image)
def main(argv=[__name__]): itf = oechem.OEInterface() oechem.OEConfigure(itf, InterfaceData) oedepict.OEConfigureImageWidth(itf, 900.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() pfilter = sopts.GetProteinFilter() wfilter = sopts.GetWaterFilter() sopts.SetProteinFilter(oechem.OEOrRoleSet(pfilter, wfilter)) sopts.SetWaterFilter( oechem.OEMolComplexFilterFactory( oechem.OEMolComplexFilterCategory_Nothing)) oechem.OESplitMolComplex(ligand, protein, water, other, complexmol, sopts) if ligand.NumAtoms() == 0: oechem.OEThrow.Fatal("Cannot separate complex!") # Perceive interactions asite = oechem.OEInteractionHintContainer(protein, ligand) if not asite.IsValid(): oechem.OEThrow.Fatal("Cannot initialize active site!") asite.SetTitle(ligand.GetTitle()) oechem.OEPerceiveInteractionHints(asite) oegrapheme.OEPrepareActiveSiteDepiction(asite) # Depict active site with interactions width, height = oedepict.OEGetImageWidth(itf), oedepict.OEGetImageHeight( itf) image = oedepict.OEImage(width, height) cframe = oedepict.OEImageFrame(image, width * 0.80, height, oedepict.OE2DPoint(0.0, 0.0)) lframe = oedepict.OEImageFrame(image, width * 0.20, height, oedepict.OE2DPoint(width * 0.80, 0.0)) opts = oegrapheme.OE2DActiveSiteDisplayOptions(cframe.GetWidth(), cframe.GetHeight()) oedepict.OESetup2DMolDisplayOptions(opts, itf) adisp = oegrapheme.OE2DActiveSiteDisplay(asite, opts) oegrapheme.OERenderActiveSite(cframe, adisp) lopts = oegrapheme.OE2DActiveSiteLegendDisplayOptions(10, 1) oegrapheme.OEDrawActiveSiteLegend(lframe, adisp, lopts) oedepict.OEWriteImage(oname, image) return 0