From: Peter J C. <pj...@bu...> - 2003-06-09 17:00:23
|
Hi, How do I use JMol from a java application? I am developing an application which requires a rendering window for displaying small molecules and isosurfaces. Rather than build everything from scratch I would like to use JMol as a component of the application I am building. Has anyone done such a thing? Is there some way to create an instance of a JPanel subclass which can be used for rendering ball & stick models of small molecules? I would also like to use the measuring tool. Thanks for any information, especially a code snippet which demonstrates how to do this. Best regards, Peter Carr |
From: Miguel <mt...@mt...> - 2003-06-09 17:14:34
|
> How do I use JMol from a java application? This is going to be the beginning of a long conversation :) > > I am developing an application which requires a rendering window for > displaying small molecules and isosurfaces. Rather than build > everything from scratch I would like to use JMol as a component of the > application I am building. > > Has anyone done such a thing? To the best of my knowledge, noone has done such a thing. I have done quite a bit of work to make sure that the boundary between th= e application and the applet is more clear. That should go a long way to making sure that what you want to do is possible. > Is there some way to create an instance > of a JPanel subclass which can be used for rendering ball & stick > models of small molecules? So, do you want the buttons & the entire app? I assume that the molecule data structure will be in jmol. > I would also like to use the measuring tool. > > Thanks for any information, especially a code snippet which > demonstrates how to do this. gulp > > Best regards, > Peter Carr -------------------------------------------------- Miguel Howard miguel=40howards.org c/Pe=F1a Primera 11-13 esc dcha 6B 37002 Salamanca Espa=F1a Spain -------------------------------------------------- telefono casa 923 27 10 82 movil 650 52 54 58 -------------------------------------------------- To call from the US dial 9:00 am Pacific US =3D home 011 34 923 27 10 82 12:00 noon Eastern US =3D cell 011 34 650 52 54 58 6:00 pm Spain -------------------------------------------------- |
From: E.L. W. (Egon) <eg...@sc...> - 2003-06-09 18:25:48
|
On Monday 09 June 2003 19:11, Miguel wrote: > > How do I use JMol from a java application? > > This is going to be the beginning of a long conversation :) > > > I am developing an application which requires a rendering window for > > displaying small molecules and isosurfaces. Rather than build > > everything from scratch I would like to use JMol as a component of the > > application I am building. > > > > Has anyone done such a thing? > > To the best of my knowledge, noone has done such a thing. Peter MR has done that in Jumbo... he uses Jmol for display of 3D structures from within the Jumbo software... Is opens up a separate Jmol window though... > I have done quite a bit of work to make sure that the boundary between the > application and the applet is more clear. That should go a long way to > making sure that what you want to do is possible. > > > Is there some way to create an instance > > of a JPanel subclass which can be used for rendering ball & stick > > models of small molecules? > > So, do you want the buttons & the entire app? > > I assume that the molecule data structure will be in jmol. > > > I would also like to use the measuring tool. > > > > Thanks for any information, especially a code snippet which > > demonstrates how to do this. > > gulp Ummm... Have a look at: cdk/src/org/openscience/cdk/applications/Viewer.java: if (useJmol) { logger.debug(".. trying Jmol viewer"); try { frame.getContentPane().setLayout(new BorderLayout()); Object jmol = this.getClass().getClassLoader(). loadClass("org.openscience.jmol.app.Jmol").getInstance(); // org.openscience.jmol.app.Jmol jmol = org.openscience.jmol.app.Jmol.getJmol(frame); jmol.showChemFrame(Convertor.convert(m)); frame.getContentPane().add(jmol, BorderLayout.CENTER); logger.debug(".. done"); viewed = true; } catch (Exception e) { logger.error("Viewing did not succeed!"); logger.error(e.toString()); e.printStackTrace(); } } the Jmol.getJmol() method was written by Peter to do what he did... apperantly, it got replaced by Jmol.showChemFrame(), but I cannot remember that transition... I have to say, that I am not even sure if this still compiles... CDK can compile automatically with/without Jmol nowadays... not sure wether it is in the classpath... To test it put jmol.jar in CDK's cdk/jar/libio/ directory... I'll hope to get more specific/clear later this week... Egon |
From: E.L. W. (Egon) <eg...@sc...> - 2003-06-09 18:47:33
|
On Monday 09 June 2003 20:26, E.L. Willighagen (Egon) wrote: > I have to say, that I am not even sure if this still compiles... CDK can > compile automatically with/without Jmol nowadays... not sure wether it is > in the classpath... > > To test it put jmol.jar in CDK's cdk/jar/libio/ directory... > I'll hope to get more specific/clear later this week... Just compiled CDK with Jmol from b6 branch in cvs present, and thus trying to compile Viewer.java with Jmol, and it fails :( I'll work on this. Egon |
From: Peter Murray-R. <pm...@ca...> - 2003-06-10 21:48:33
|
At 20:26 09/06/2003 +0200, E.L. Willighagen (Egon) wrote: >On Monday 09 June 2003 19:11, Miguel wrote: > > > How do I use JMol from a java application? > > > > This is going to be the beginning of a long conversation :) > > > > > I am developing an application which requires a rendering window for > > > displaying small molecules and isosurfaces. Rather than build > > > everything from scratch I would like to use JMol as a component of the > > > application I am building. > > > > > > Has anyone done such a thing? > > > > To the best of my knowledge, noone has done such a thing. > >Peter MR has done that in Jumbo... he uses Jmol for display of 3D structures >from within the Jumbo software... It was fairly straightforward - the method was to pass a CML string to the CMLReader in Jmol. It's fairly one-way - Jmol can be launched but cannot communicate back to JUMBO. The main area that needs to be explored is the event model. Then all these tools - Jmol, JCP, CDK etc can communicate >Is opens up a separate Jmol window >though... Doesn't have to - I originally hacked it as a JPanel, but I like seeing the molecules large :-). I have wondered whether JEdit could be a useful infrastructure for a graphical tool as it already has window docking, etc. Best P. |
From: E.L. W. <eg...@sc...> - 2003-06-11 05:40:55
|
On Tuesday 10 June 2003 23:27, Peter Murray-Rust wrote: > It was fairly straightforward - the method was to pass a CML string to the > CMLReader in Jmol. > > It's fairly one-way - Jmol can be launched but cannot communicate back to > JUMBO. The main area that needs to be explored is the event model. Then all > these tools - Jmol, JCP, CDK etc can communicate <brainstorm-mode> Miguel, would it be possible to use the JavaScript/Scripting features of Jmol to interact from application X with Jmol? </brainstorm-mode> > >Is opens up a separate Jmol window though... > > Doesn't have to - I originally hacked it as a JPanel, but I like seeing the > molecules large :-). I have wondered whether JEdit could be a useful > infrastructure for a graphical tool as it already has window docking, etc. Ok. Good. Yes, the jEdit plugin would be very nice... Still haven't had time yet to make a prototype... Egon |
From: Peter Murray-R. <pm...@ca...> - 2003-06-10 21:48:43
|
I have successfully used CDK to add H's to a CML molecule. Now I would like to insert the 2D coordinates for them (and later the 3D as well). Are there routines already in CDK which I can use? If not, what tools should be used. I can do the basic maths and presumably would use vecmath Best P. |
From: E.L. W. <eg...@sc...> - 2003-06-11 05:44:31
|
On Tuesday 10 June 2003 23:44, Peter Murray-Rust wrote: > I have successfully used CDK to add H's to a CML molecule. Now I would like > to insert the 2D coordinates for them (and later the 3D as well). Are there > routines already in CDK which I can use? If not, what tools should be used. > I can do the basic maths and presumably would use vecmath What I've done in the past is a complete new calculation of 2D coordinates... instead of only generating coordinates for the new atoms... For 3D coordinates there is no such thing yet. However, Jmol is going to need 3D coordinate generation, and is going to implement a very simplistic algorithm: all is tetrahedral, and we do not care about overlap... The latter is solvable by looking for a few most distant atoms, and maximizing the distance between them with a simple steepest descent of rotating bonds.... Egon |
From: Peter Murray-R. <pm...@ca...> - 2003-06-11 06:08:49
|
At 07:44 11/06/2003 +0200, E.L. Willighagen wrote: >On Tuesday 10 June 2003 23:44, Peter Murray-Rust wrote: > > I have successfully used CDK to add H's to a CML molecule. Now I would like > > to insert the 2D coordinates for them (and later the 3D as well). Are there > > routines already in CDK which I can use? If not, what tools should be used. > > I can do the basic maths and presumably would use vecmath > >What I've done in the past is a complete new calculation of 2D coordinates... >instead of only generating coordinates for the new atoms... OK - I will probably hack a solution if it can be done quickly. Adding 2D hydrogens is a common activity - e.g. the NCI and KEG databases have no 2D H. There are the following simple cases: - 1 bond 1H => linear - 2 bond 1H bisects negative vector * or random perpendicular if linear - 3 bond 1 H bisects negative of ligand resultant vector - 1 bond 2 H two H at 120deg - 2 bond 2 H - 2H pointing away from resulting vector, probably +- 45deg or linear gives +- 90 deg - 1 bond 3 H 3 H at 90, 180 , 270 - 0 bond 4H 0, 90, 180, 270 >For 3D coordinates there is no such thing yet. However, Jmol is going to need >3D coordinate generation, and is going to implement a very simplistic >algorithm: all is tetrahedral, and we do not care about overlap... A similar 3D algorithm tor those... Normally H decoration doesn't result in clashes. The most likely "errors" are for hydroxy groups, especially anisoles. >The latter is solvable by looking for a few most distant atoms, and >maximizing >the distance between them with a simple steepest descent of rotating >bonds.... I shan't do any minimising... P. >Egon > > >------------------------------------------------------- >This SF.net email is sponsored by: Etnus, makers of TotalView, The best >thread debugger on the planet. Designed with thread debugging features >you've never dreamed of, try TotalView 6 free at www.etnus.com. >_______________________________________________ >Cdk-devel mailing list >Cdk...@li... >https://lists.sourceforge.net/lists/listinfo/cdk-devel |
From: Christoph S. <ste...@ic...> - 2003-06-11 08:54:25
|
In principle, the layout.StructureDiagramGenerator and its helper classes have methods for this. This should include methods for distributing bonding partners around an atom for which coordinates have already been created. I would have to check which method in AtomPlacer really does the job, but I guess it is distributePartners() or so. I was about to write a little article on the StructureDiagramGenerator anyway. Certainly, things like making coordinates for newly added H's should go into this package. Cheers, Chris -- Dr. Christoph Steinbeck (e-mail: c.s...@un...) Groupleader Junior Research Group for Applied Bioinformatics Cologne University BioInformatics Center (http://www.cubic.uni-koeln.de) Zülpicher Str. 47, 50674 Cologne Tel: +49(0)221-470-7426 Fax: +49 (0) 221-470-5092 What is man but that lofty spirit - that sense of enterprise. ... Kirk, "I, Mudd," stardate 4513.3.. Peter Murray-Rust wrote: > At 07:44 11/06/2003 +0200, E.L. Willighagen wrote: > >> On Tuesday 10 June 2003 23:44, Peter Murray-Rust wrote: >> > I have successfully used CDK to add H's to a CML molecule. Now I >> would like >> > to insert the 2D coordinates for them (and later the 3D as well). >> Are there >> > routines already in CDK which I can use? If not, what tools should >> be used. >> > I can do the basic maths and presumably would use vecmath >> >> What I've done in the past is a complete new calculation of 2D >> coordinates... >> instead of only generating coordinates for the new atoms... > > > OK - I will probably hack a solution if it can be done quickly. Adding > 2D hydrogens is a common activity - e.g. the NCI and KEG databases have > no 2D H. > > There are the following simple cases: > - 1 bond 1H => linear > - 2 bond 1H bisects negative vector * or random perpendicular if linear > - 3 bond 1 H bisects negative of ligand resultant vector > - 1 bond 2 H two H at 120deg > - 2 bond 2 H - 2H pointing away from resulting vector, probably +- 45deg > or linear gives +- 90 deg > - 1 bond 3 H 3 H at 90, 180 , 270 > - 0 bond 4H 0, 90, 180, 270 > > >> For 3D coordinates there is no such thing yet. However, Jmol is going >> to need >> 3D coordinate generation, and is going to implement a very simplistic >> algorithm: all is tetrahedral, and we do not care about overlap... > > > A similar 3D algorithm tor those... Normally H decoration doesn't result > in clashes. > > The most likely "errors" are for hydroxy groups, especially anisoles. > >> The latter is solvable by looking for a few most distant atoms, and >> maximizing >> the distance between them with a simple steepest descent of rotating >> bonds.... > > > I shan't do any minimising... > |
From: Peter Murray-R. <pm...@ca...> - 2003-06-11 09:52:48
|
At 10:54 11/06/2003 +0200, Christoph Steinbeck wrote: >In principle, the layout.StructureDiagramGenerator and its helper classes= =20 >have methods for this. This should include methods for distributing=20 >bonding partners around an atom for which coordinates have already been=20 >created. > >I would have to check which method in AtomPlacer really does the job, but= =20 >I guess it is distributePartners() or so. I was about to write a little=20 >article on the StructureDiagramGenerator anyway. Agreed. I found distributePartners when hacking through the code. I am about to test distributePartners and see what happens. The methods=20 should be general so they won't be restricted to H atoms. I assume that there is nothing for 3D coordinates and will try to hack=20 those. One aspect that will be useful is to have a tool that returns=20 preferred bond lengths and angles. Essentially it's like parameterising a=20 force field P. >Certainly, things like making coordinates for newly added H's should go=20 >into this package. > >Cheers, > >Chris > >-- >Dr. Christoph Steinbeck (e-mail: c.s...@un...) >Groupleader Junior Research Group for Applied Bioinformatics >Cologne University BioInformatics Center (http://www.cubic.uni-koeln.de) >Z=FClpicher Str. 47, 50674 Cologne >Tel: +49(0)221-470-7426 Fax: +49 (0) 221-470-5092 > >What is man but that lofty spirit - that sense of enterprise. >... Kirk, "I, Mudd," stardate 4513.3.. > > >Peter Murray-Rust wrote: >>At 07:44 11/06/2003 +0200, E.L. Willighagen wrote: >> >>>On Tuesday 10 June 2003 23:44, Peter Murray-Rust wrote: >>> > I have successfully used CDK to add H's to a CML molecule. Now I=20 >>> would like >>> > to insert the 2D coordinates for them (and later the 3D as well). Are= =20 >>> there >>> > routines already in CDK which I can use? If not, what tools should be= =20 >>> used. >>> > I can do the basic maths and presumably would use vecmath >>> >>>What I've done in the past is a complete new calculation of 2D=20 >>>coordinates... >>>instead of only generating coordinates for the new atoms... >> >>OK - I will probably hack a solution if it can be done quickly. Adding 2D= =20 >>hydrogens is a common activity - e.g. the NCI and KEG databases have no 2D= H. >>There are the following simple cases: >>- 1 bond 1H =3D> linear >>- 2 bond 1H bisects negative vector * or random perpendicular if linear >>- 3 bond 1 H bisects negative of ligand resultant vector >>- 1 bond 2 H two H at 120deg >>- 2 bond 2 H - 2H pointing away from resulting vector, probably +- 45deg= =20 >>or linear gives +- 90 deg >>- 1 bond 3 H 3 H at 90, 180 , 270 >>- 0 bond 4H 0, 90, 180, 270 >> >>>For 3D coordinates there is no such thing yet. However, Jmol is going to= =20 >>>need >>>3D coordinate generation, and is going to implement a very simplistic >>>algorithm: all is tetrahedral, and we do not care about overlap... >> >>A similar 3D algorithm tor those... Normally H decoration doesn't result= =20 >>in clashes. >>The most likely "errors" are for hydroxy groups, especially anisoles. >> >>>The latter is solvable by looking for a few most distant atoms, and=20 >>>maximizing >>>the distance between them with a simple steepest descent of rotating >>>bonds.... >> >>I shan't do any minimising... |
From: Peter Murray-R. <pm...@ca...> - 2003-06-11 09:44:09
|
Have recently returned to CDK to pass CML molecules to CDK for transformation. I now use Java 1.4 by default for all XML parsing and use javax.xml.parsers and related classes. CDK uses late binding for either Xerces or Aelfred. This obviously fails at runtime if neither are in the classpath. If I add Xerces it does terrible things with other parts of my code (which I frequently find and why I have abandoned Xerces and use Java 1.4). I have hacked CMLReader to add "javax.xml.parsers" as follows: // If Xerces is not available try JAXP if (!success) { try { javax.xml.parsers.SAXParserFactory spf = javax.xml.parsers.SAXParserFactory.newInstance(); spf.setNamespaceAware(true); javax.xml.parsers.SAXParser saxParser = spf.newSAXParser(); parser = saxParser.getXMLReader(); logger.info("Using JAXP/SAX XML parser."); success = true; } catch (Exception e) { e.printStackTrace(); logger.warn("Could not instantiate JAXP/SAX XML reader!"); } This gives problems with CMLResolver whose signature is: import org.xml.sax.ext.EntityResolver2; public class CMLResolver implements EntityResolver2 { } However EntityResolver2 is not part of Java1.4 (where does it come from?) and I assume EntityResolver does than job. Any ideas where we should go? P. |
From: E.L. W. <eg...@sc...> - 2003-06-11 10:00:20
|
On Wednesday 11 June 2003 11:41, Peter Murray-Rust wrote: > I have hacked CMLReader to add "javax.xml.parsers" as follows: <snip> I'll include the patch in cvs. > However EntityResolver2 is not part of Java1.4 (where does it come from?) > and I assume EntityResolver does than job. Any ideas where we should go? EntityResolver2 is the namespace aware entity resolver, AFAIR... or at least something similar... Anyway, it does things does EntityResolver could not... i.e. for gnujaxp? And I think the class comes from that package... I'll try to solve this issue, but you could try to extract the EntityResolver2 class from the gnujaxp.jar in CDK's cvs... Egon |